
Cách dùng AI để xây dựng ứng dụng Solana
Mục lục
Gần đây, chúng tôi đã ra mắt một bộ công cụ để xây dựng ứng dụng trên Solana bằng AI:
- Helius CLI
- Helius MCP
- Helius Skills
- Helius Claude Code Plugin
Tìm hiểu thêm trong thông báo Helius for Agents của chúng tôi.
Trí tuệ nhân tạo (AI) đang thay đổi cách chúng ta xây dựng phần mềm.
AI có thể phát hiện và sửa lỗi, nhanh chóng triển khai tính năng mới, đồng thời xử lý một số công việc mà chúng ta không muốn làm. Các công cụ như Copilot và Cursor giúp lập trình nhanh hơn và bớt nhàm chán. Tuy nhiên, chúng không phải lúc nào cũng hoạt động tốt với Solana.
Kiến trúc của Solana khiến nền tảng này khác biệt với hầu hết blockchain. Solana xử lý giao dịch song song, dựa vào tài khoản thay vì trạng thái do hợp đồng sở hữu và sử dụng Địa chỉ bắt nguồn từ chương trình (PDA) để tăng cường bảo mật.
Nếu đã đọc các bài viết trên blog của chúng tôi, bạn sẽ biết xây dựng trên Solana khác với Ethereum. Solana cung cấp thông lượng cao và có cách tiếp cận độc đáo đối với việc quản lý tài khoản. Điểm khác biệt này thường khiến các mô hình AI được huấn luyện trên những mẫu lập trình khác gặp khó khăn.
Bài viết này sẽ tìm hiểu lý do AI đôi khi gặp khó khăn với Solana. Bài viết cũng đưa ra các cách để tránh những vấn đề đó. Chúng tôi sẽ tập trung chủ yếu vào:
- Kỹ thuật prompt: Viết chỉ dẫn tốt hơn cho AI.
- Dữ liệu đầu vào theo ngữ cảnh: Cung cấp thông tin chi tiết về dự án để kết quả AI chính xác hơn.
- Quy trình lặp: Xây dựng mã theo từng bước nhỏ. Kiểm tra và tinh chỉnh trước khi tiếp tục.
Dù là người mới hay đã có kinh nghiệm, những mẹo này sẽ giúp bạn tận dụng AI hiệu quả hơn khi làm việc trên Solana.
Thách thức khi phát triển Solana bằng AI
Kiến trúc và các yêu cầu đặc thù của Solana có thể gây khó khăn cho AI. Nếu AI không tính đến chúng, bạn sẽ mất thời gian gỡ lỗi mã hoặc viết lại chương trình, đi ngược lại mục đích dùng AI để tinh gọn quá trình phát triển.
Kiến trúc độc đáo của Solana
Solana khác biệt ở ba khía cạnh chính:
1. Mô hình dựa trên tài khoản
Nhiều blockchain như Ethereum liên kết dữ liệu trực tiếp với bộ nhớ nội bộ của hợp đồng thông minh. Ngược lại, mô hình lập trình của Solana tổ chức mọi thứ xoay quanh "tài khoản". Các tài khoản này lưu trữ dữ liệu, còn "chương trình" (tương đương hợp đồng thông minh trên Solana) chỉnh sửa và tương tác với dữ liệu đó.
Một điểm khác biệt quan trọng là trên Solana, mọi thứ đều là tài khoản, kể cả bản thân các chương trình. Chương trình đơn giản là những tài khoản lưu trữ dữ liệu có thể thực thi, nhờ đó chúng có thể xử lý chỉ dẫn. Trong khi đó, Ethereum phân biệt giữa tài khoản do bên ngoài sở hữu (EOA), được kiểm soát bằng khóa riêng tư, và hợp đồng thông minh, vốn có mã cùng bộ nhớ nội bộ riêng.
Khác biệt cơ bản này có thể dẫn đến hiểu lầm, đặc biệt khi viết mã cho Solana. Tương tự hợp đồng thông minh Ethereum, các nhà phát triển chưa quen với mô hình tài khoản có thể nhầm tưởng rằng một chương trình có thể sở hữu dữ liệu của chính nó. Những giả định như vậy có thể dẫn đến lỗi thời gian chạy hoặc lỗ hổng bảo mật khi triển khai trên Solana.
2. Địa chỉ bắt nguồn từ chương trình (PDA)
Địa chỉ bắt nguồn từ chương trình (PDA) được tạo từ ID chương trình và một seed. PDA cho phép chương trình tổ chức tài khoản mà không cần khóa riêng tư. Tuy nhiên, các mô hình AI có thể không nhận ra sự khác biệt giữa địa chỉ tiêu chuẩn và PDA. Nếu chúng quên xử lý seed hoặc kiểm tra quyền sở hữu, PDA có thể đúng theo mã Rust nhưng sẽ không đúng theo mã Solana.
3. Thực thi song song
Runtime của Solana, Sealevel, cho phép xử lý các giao dịch song song, không giống những blockchain truyền thống xử lý từng giao dịch một. Cơ chế này hoạt động vì các giao dịch xác định rõ những tài khoản chúng sẽ đọc và ghi. Với thông tin này, Solana có thể xác định tài khoản nào cần khóa và thực thi nhiều giao dịch cùng lúc một cách an toàn.
AI thường hiểu sai mô hình này. Nó có thể cho rằng các giao dịch sẽ chạy tuần tự như trong Máy ảo Ethereum (EVM). Điều này có thể dẫn đến mã không được tối ưu cho khả năng xử lý song song. Vì hệ thống khóa dựa trên tài khoản của Solana khác với cách tiếp cận của EVM, AI có thể viết mã có hiệu năng kém hoặc khó mở rộng.
Những vấn đề thường gặp
Các nhà phát triển thường gặp một số vấn đề lặp lại khi dùng AI để xây dựng ứng dụng Solana:
1. Mã không chính xác
AI có thể cung cấp các hàm biên dịch được trong Rust nhưng thất bại khi bạn triển khai chúng lên Solana. Ví dụ, các công cụ lập trình đôi với AI có thể bỏ sót người ký hoặc diễn giải sai tham chiếu tài khoản. Kết quả là gì? Các lỗi hoặc lỗ hổng bảo mật mà bạn chỉ có thể phát hiện khi chạy kiểm thử, thực hiện giao dịch thực tế hoặc hoàn tất kiểm toán bảo mật.
2. Mã chưa tối ưu
Ngay cả khi mã do AI tạo hoạt động, nó vẫn có thể chưa được tối ưu cho đơn vị tính toán, khiến giao dịch được xử lý chậm hoặc tạo ra các điểm nghẽn tiềm ẩn khó phát hiện. Hãy hình dung AI viết một hàm cập nhật từng tài khoản một. Nó không nhận ra rằng Solana có thể xử lý đồng thời các tài khoản này nếu được triển khai đúng cách.
3. Khó gỡ lỗi
Các mô hình AI không biết cấu trúc thư mục hoặc cách bạn định nghĩa kiểu dữ liệu tùy chỉnh nếu bạn không cung cấp thông tin đó. Vì vậy, chúng có thể đề xuất các giải pháp xung đột với thiết lập hiện tại, và việc tích hợp những giải pháp đó trở lại dự án có thể trở nên rất phiền phức.
Dùng công cụ AI của Helius để phát hành ứng dụng Solana nhanh hơn
Như đã giải thích ở trên, dùng AI để xây dựng đúng cách trên Solana không hề dễ.
Để thay đổi điều đó, chúng tôi đã xây dựng một bộ công cụ phát triển Solana bằng AI xử lý những phần khó cho bạn: định tuyến đến đúng công cụ, áp dụng các phương pháp hay nhất và cung cấp cho tác nhân AI nền tảng cần thiết để biến một prompt duy nhất thành ứng dụng sẵn sàng cho môi trường production.
Helius MCP Server
Helius MCP Server được xây dựng trên tiêu chuẩn Model Context Protocol (MCP) mở của Anthropic và cung cấp hơn 60 công cụ có cấu trúc—bao gồm getBalance, parseTransaction, getAssetsByOwner và createWebhook—cho mọi client tương thích với MCP (Claude Desktop, Cursor, VS Code, Windsurf và nhiều công cụ khác).
Thay vì tạo các lệnh curl thô và phân tích đầu ra JSON, tác nhân thực hiện lệnh gọi công cụ có kiểu và nhận trực tiếp phản hồi có cấu trúc. Nhờ đó, mọi tương tác API đều nhanh hơn, đáng tin cậy hơn và ít xảy ra lỗi hơn đáng kể.
Bạn có thể thêm công cụ này vào Claude Code chỉ bằng một lệnh:
claude mcp add helius npx helius-mcp@latestHelius Skills
Quyền truy cập vào hơn 60 công cụ sẽ không hữu ích nếu tác nhân không biết cách sử dụng chúng.https://www.helius.dev/blog/helius-for-agents#helius-skills-the-brain
Skills là các bộ chỉ dẫn chuyên môn—những prompt được thiết kế cẩn thận với logic định tuyến và tệp tham chiếu—giúp tác nhân trở thành một nhà phát triển Solana chuyên nghiệp.
Khi một skill được tải, tác nhân biết dùng searchAssets thay cho getProgramAccounts để tra cứu NFT, truy xuất phí ưu tiên theo thời gian thực và định tuyến giao dịch qua Sender để đạt tỷ lệ được đưa vào block cao nhất.
Chúng tôi đã phát hành bốn skill:
- Build – Phát triển Solana cốt lõi trên tất cả API của Helius
- DFlow – Ứng dụng giao dịch sử dụng API của DFlow
- Phantom – Xây dựng frontend cho dApp bằng Phantom Connect SDK
- SVM – Kiến thức chuyên sâu về nội bộ giao thức Solana
Các skill không phụ thuộc vào mô hình và hoạt động với OpenAI API, Claude API, Cursor Rules cùng chỉ dẫn tùy chỉnh của ChatGPT.
Để đóng góp một skill, vui lòng hoàn thành biểu mẫu này.
Helius CLI
Helius CLI là giao diện dòng lệnh đầy đủ tính năng với hơn 95 lệnh, bao gồm quản lý tài khoản, gửi giao dịch, quản lý webhook, truyền dữ liệu theo thời gian thực, staking, ZK Compression và nhiều chức năng khác.
Bạn có thể sử dụng trực tiếp hoặc để tác nhân điều khiển — mọi lệnh đều hỗ trợ đầu ra --json và mã thoát có cấu trúc, giúp tác nhân dễ dàng phân tích phản hồi và xử lý lỗi bằng chương trình.
Cài đặt Helius CLI như sau:
npm install -g helius-cliHelius Claude Code Plugin
Claude Code Plugin gói Helius MCP, DFlow MCP, cả bốn skill và các tệp tham chiếu chuyên sâu cho mọi sản phẩm Helius vào một bản cài đặt duy nhất — không cần cấu hình MCP thủ công, không cần thiết lập riêng từng skill.
Cách cài đặt như sau:
/plugin marketplace add helius-labs/core-ai
/plugin install helius@helius-labsSau khi cài đặt, chỉ một prompt như "Xây dựng CLI báo cáo thuế cho ví này" sẽ tạo ra một ứng dụng CLI phân trang hoạt động đầy đủ — không cần prompt trung gian.
Kết hợp lại, các công cụ này cung cấp cho tác nhân AI quyền truy cập vào công cụ và kiến thức chuyên môn cần thiết để bỏ qua giai đoạn thử-và-sai, đồng thời tạo ra mã Solana chính xác, tối ưu ngay từ prompt đầu tiên.
Mẹo phát triển Solana bằng AI
Hãy làm theo các đề xuất sau để xây dựng ứng dụng Solana bằng AI:
1. Bắt đầu bằng một prompt hiệu quả
Prompt hệ thống giống như bản mô tả công việc của AI. Nó cho AI biết vai trò của mình (ví dụ: "Bạn là chuyên gia lập trình Solana bằng Anchor...") và nêu rõ các quy tắc bạn muốn AI tuân theo.
Dưới đây là một ví dụ điển hình, được mở rộng đôi chút:
# You are an expert in Solana program development.
Specializing in building and deploying smart contracts using Rust and Anchor,
and integrating on-chain data with @solana/web3.js.
---
## General Guidelines
- Write secure, efficient, and maintainable code for Solana programs.
- Thoroughly test and audit all programs before deployment.
## Solana Program Development with Rust and Anchor
- Prioritize Rust's safety and performance.
- Use Anchor macros to simplify account management, error handling, and
data serialization.
- Keep code modular and maintain a clear separation between logic and data.
## Security and Best Practices
- Enforce strict access controls--ensure only permitted signers can modify data.
- Use PDAs responsibly: validate seeds and ownership checks to prevent conflicts.
## Performance and Optimization
- Minimize transaction costs by bundling operations efficiently.
- Exploit parallelism--don't serialize steps unnecessarily.
- Regularly benchmark your code to spot and remove performanceTại sao phương pháp này hiệu quả
Một prompt hệ thống được viết tốt hoạt động như bản thiết kế, giúp AI bám sát kiến trúc của Solana. Điều này đảm bảo mọi phản hồi đều chính xác, an toàn và phù hợp với nhu cầu của bạn.
- Thiết lập đúng ngữ cảnh: Việc xác định AI là "chuyên gia Solana" giúp nó tập trung vào các tính năng dành riêng cho Solana như PDA, xử lý song song và Anchor, thay vì đưa ra những giả định chung về blockchain.
- Tạo mã nhất quán: Việc đưa vào các phương pháp hay nhất như kiểm soát truy cập nghiêm ngặt và thực thi song song sẽ định hướng AI tạo ra kết quả an toàn, đáng tin cậy và có thể dự đoán.
- Tránh lỗi thường gặp: Nhấn mạnh tính an toàn của Rust, macro Anchor và tuần tự hóa giúp giảm lỗi. Điều này giúp bạn tiết kiệm thời gian gỡ lỗi và viết lại mã.
- Phát huy thế mạnh của Solana: AI phải tăng băng thông và giảm độ trễ. Điều này sẽ tối ưu mã cho thông lượng cao và hiệu quả của Solana.
2. Viết prompt rõ ràng
Khi yêu cầu AI tạo mã, độ chính xác là yếu tố then chốt. Bạn càng nêu rõ yêu cầu, kết quả càng tốt. Hãy so sánh các ví dụ sau:
Prompt chưa tốt:
"Viết một hàm để khởi tạo tài khoản."
Prompt này quá mơ hồ. AI không biết ngôn ngữ lập trình, framework hoặc việc prompt này dành cho mã Solana. Nó có thể cung cấp mã chung chung hoặc vô dụng.
Prompt tốt:
"Viết một hàm bằng Rust, sử dụng Anchor, để khởi tạo tài khoản token Solana. Sử dụng PDA bắt nguồn từ một seed. Xác thực trạng thái tài khoản và xử lý lỗi nếu tài khoản đã được khởi tạo."
Lý do prompt tốt này hiệu quả:
Prompt rõ ràng giúp tiết kiệm thời gian và công sức. Khi làm rõ mục tiêu của AI, bạn tránh phải sửa chương trình về sau vì mã cẩu thả, không rõ ràng hoặc sai mục tiêu. Điều này cũng giảm thiểu diễn giải sai, giúp làm việc với AI hiệu quả hơn.
- Rõ ràng và trực tiếp: Khi nêu trực tiếp Rust, Anchor và PDA, AI biết chính xác cần sử dụng công cụ và tính năng nào. Nó sẽ không phải phỏng đoán hoặc đưa vào chi tiết không liên quan.
- Tập trung vào nhu cầu của Solana: Việc đề cập PDA cho AI biết cần thêm logic dành riêng cho Solana. Nếu không có thông tin này, mã có thể bỏ sót các bước quan trọng như bắt nguồn địa chỉ một cách an toàn.
- Bổ sung chiều sâu khi cần: Các chỉ dẫn về xác thực và xử lý lỗi yêu cầu AI vượt qua những điều cơ bản. Điều này giúp đảm bảo mã hoạt động trong các tình huống thực tế.
Một prompt tốt giống như bản đồ định hướng AI, giúp nó tránh cạm bẫy để đạt được mục tiêu.
3. Cung cấp ngữ cảnh phù hợp
AI hoạt động tốt hơn khi bạn cung cấp ngữ cảnh phù hợp. Nhiều công cụ cho phép tải mã lên hoặc liên kết tệp. Điều này giúp AI hiểu dự án và tạo ra giải pháp phù hợp với codebase của bạn.
Nhưng đừng cung cấp quá nhiều. Đưa quá nhiều thông tin cho AI, chẳng hạn như toàn bộ một codebase lớn, có thể khiến nó tạo thông tin sai hoặc phản hồi không liên quan.
Thay vào đó, hãy tập trung cung cấp những phần mã có liên quan. Điều này giúp AI duy trì sự tập trung và nâng cao chất lượng đề xuất.
Ví dụ, hãy tưởng tượng ứng dụng của bạn đã có một tệp định nghĩa cấu trúc dữ liệu tùy chỉnh:
#[account]
pub struct TokenAccount {
pub balance: u64,
pub is_initialized: bool,
// ... more fields
}Nếu tải tệp này lên hoặc đưa nó vào dữ liệu đầu vào, AI có thể sử dụng chính xác tên trường của bạn (balance, is_initialized) trong mã được tạo.
Nó cũng có thể điều chỉnh đề xuất theo cấu trúc và quy ước của dự án.
Lý do cung cấp ngữ cảnh mang lại hiệu quả
- Cải thiện độ chính xác: Nếu không có ngữ cảnh, AI có thể đoán tên trường, đưa vào các thay đổi không cần thiết hoặc giả định sai kiểu dữ liệu. Ví dụ, nó có thể gọi trường số dư là amount hoặc dùng f64 thay vì u64. Cung cấp struct thực tế sẽ loại bỏ việc phỏng đoán này.
- Giữ mã nhất quán: Khi AI hiểu quy ước đặt tên của bạn, nó sẽ tạo ra mã phù hợp tự nhiên với dự án. Điều này giúp bạn không phải đổi tên biến hoặc chỉnh sửa mã để khớp với các mẫu hiện có.
- Giảm công sức tích hợp: Nếu AI thấy cấu trúc tài khoản của bạn, nó có thể điều chỉnh đầu ra để tích hợp trực tiếp với chúng. Điều này tránh các tình huống mà mã do AI tạo cần được viết lại đáng kể để phù hợp với logic hiện có.
Ví dụ: Cách thêm ngữ cảnh để cải thiện đầu ra của AI
Nếu không có ngữ cảnh phù hợp, một prompt như “Viết một hàm để cập nhật số dư tài khoản token” có thể khiến AI tạo ra mã như sau:
pub fn update_balance(ctx: Context<UpdateAccount>, amount: f64) -> Result<()> {
let account = &mut ctx.accounts.token_account;
account.amount += amount;
Ok(())
}Mã này có hai vấn đề:
Thứ nhất, nó sử dụng f64 cho amount thay vì u64.
Solana chỉ hỗ trợ rất hạn chế phép toán dấu phẩy động gốc. Cách tiếp cận được ưu tiên là dùng phép toán dấu phẩy cố định và điều chỉnh tỷ lệ số theo số chữ số thập phân được sử dụng, qua đó tránh các vấn đề về hiệu năng và khả năng tương thích.
Thứ hai, nó gọi trường số dư là amount, không khớp với struct của bạn. Điều này có thể dẫn đến nhầm lẫn và lỗi trong tương lai.
Giờ đây, nếu cung cấp struct TokenAccount làm ngữ cảnh, AI có thể tạo ra mã sau:
pub fn update_balance(ctx: Context<UpdateAccount>, amount: u64) -> Result<()> {
let token_account = &mut ctx.accounts.token_account;
token_account.balance += amount;
Ok(())
}Đầu ra này phù hợp với dự án của bạn hơn nhiều.
Tuy nhiên, ngay cả với cải tiến này, bạn vẫn nên thêm kiểm tra tràn số cho thao tác token_account.balance += amount để đảm bảo mã vững chắc và an toàn.
Cách cung cấp ngữ cảnh
Hãy ghi nhớ các bước sau để cung cấp ngữ cảnh phù hợp cho công cụ AI:
- Tải tệp lên: Nếu công cụ AI cho phép, hãy tải lên định nghĩa struct, schema tài khoản và các tệp dự án khác.
- Tham chiếu mã trong prompt: Sao chép và dán các đoạn mã liên quan vào prompt để AI dùng làm tài liệu tham chiếu.
- Mô tả cấu trúc: Nếu không thể tải lên, hãy mô tả rõ dữ liệu trong prompt. Ví dụ: “Tôi có một struct tên là TokenAccount với các trường balance (u64) và is_initialized (bool).”
4. Phát triển dựa trên mã hiện có
Bạn không cần bắt đầu lại từ đầu mỗi lần. Thông thường, bạn đã có một đoạn mã hoạt động nhưng vẫn có thể cải thiện. AI có thể giúp bạn làm điều đó. Dưới đây là một ví dụ:
Đây là mã gốc:
pub fn create_token_account(ctx: Context<CreateAccount>) -> Result<()> {
let token_account = &mut ctx.accounts.token_account;
token_account.balance = 0;
Ok(())
}Mã này khởi tạo một tài khoản token và đặt số dư bằng 0. Nó đơn giản nhưng không xử lý các tình huống như cập nhật tài khoản hiện có hoặc kiểm tra quyền sở hữu.
Prompt của bạn:
"Hãy làm cho hàm này vững chắc hơn. Nếu tài khoản token đã tồn tại, hãy cộng số tiền vào số dư. Nếu chưa, hãy khởi tạo tài khoản với một số tiền cụ thể. Đồng thời, hãy đảm bảo chương trình hiện tại sở hữu tài khoản."
Đây là mã do AI tạo sau prompt của bạn:
pub fn create_or_update_token_account(
ctx: Context<CreateAccount>,
amount: u64
) -> Result<()> {
let token_account = &mut ctx.accounts.token_account;
// Check ownership
if token_account.owner != ctx.program_id {
return err!(ProgramError::IncorrectProgramId);
}
// Update or initialize
if token_account.is_initialized {
token_account.balance += amount;
} else {
token_account.balance = amount;
token_account.is_initialized = true;
}
Ok(())
}Tại sao phương pháp này hiệu quả
- Xử lý các tình huống phổ biến: Mã mới xử lý cả tài khoản đã và chưa được khởi tạo, nhờ đó hữu ích hơn trong các ứng dụng thực tế.
- Thêm xác thực quyền sở hữu: Điều này ngăn chặn các thay đổi trái phép vì chương trình kiểm tra xem mình có sở hữu tài khoản đó hay không.
- Làm cho hàm thông minh hơn: Giờ đây, hàm có thể cập nhật số dư thay vì đặt lại về 0 mỗi lần. Điều này giảm thao tác dư thừa và phù hợp với các trường hợp sử dụng thực tế.
- Tiết kiệm thời gian: Bạn không phải viết lại toàn bộ hàm. AI mở rộng dựa trên những gì bạn đã có, giúp chuyển từ một hàm cơ bản sang một hàm vững chắc nhanh hơn.
Cách sử dụng phương pháp này
Hãy ghi nhớ các bước sau để áp dụng phương pháp này trong tương lai:
- Bắt đầu với nền tảng hoạt động được: Xác định các hàm hoặc đoạn mã đang hoạt động nhưng có thể được cải thiện.
- Nêu cụ thể trong prompt: Giải thích điều bạn muốn cải thiện, chẳng hạn như thêm kiểm tra lỗi, xử lý trường hợp biên hoặc cải thiện logic.
- Xem xét đề xuất của AI: Kiểm tra đầu ra do AI tạo để đảm bảo nó phù hợp với dự án và tuân theo các phương pháp hay nhất của Solana.
- Lặp lại khi cần: Nếu đầu ra đầu tiên chưa hoàn hảo, hãy điều chỉnh prompt hoặc sửa mã để tiến gần hơn đến mục tiêu.
5. Lặp lại từng bước một
Xây dựng mã từng bước giúp bạn tránh sai sót và tinh chỉnh công việc trong quá trình thực hiện. Thay vì cố tạo một hàm phức tạp trong một lần, hãy chia nó thành các tác vụ nhỏ hơn. Điều này giúp bạn dễ dàng kiểm thử và cải thiện từng phần trước khi tiếp tục.
Ví dụ về quy trình làm việc
Hãy bắt đầu từ một bước nhỏ. Yêu cầu AI viết một hàm đơn giản để tính Địa chỉ bắt nguồn từ chương trình (PDA) bằng seed.
Dưới đây là một prompt mẫu:
"Viết một hàm Rust tính PDA từ một seed và ID chương trình bằng Anchor."
Đầu ra của AI:
pub fn find_pda(seed: &[u8], program_id: &Pubkey) -> Pubkey {
Pubkey::create_program_address(&[seed], program_id).unwrap()
}Đây là điểm khởi đầu tốt nhưng chưa hoàn chỉnh. Hãy thêm xử lý lỗi.
Xem xét mã và xác định vấn đề. Ví dụ, việc dùng unwrap() có thể khiến chương trình gặp sự cố nếu seed không hợp lệ.
Yêu cầu AI khắc phục vấn đề này:
"Cập nhật hàm này để thêm xử lý lỗi cho seed không hợp lệ. Trả về Result thay vì unwrapping."
Mã đã cập nhật:
pub fn find_pda(seed: &[u8], program_id: &Pubkey) -> Result<Pubkey, ProgramError> {
Pubkey::create_program_address(&[seed], program_id)
.map_err(|_| ProgramError::InvalidSeeds)
}Giờ đây, hàm xử lý seed không hợp lệ một cách phù hợp bằng cách trả về lỗi thay vì panic.
Tiếp theo, hãy tích hợp hàm này.
Yêu cầu AI sử dụng hàm PDA trong một quy trình lớn hơn. Ví dụ:
"Viết một hàm sử dụng PDA này để tạo tài khoản token mới. Xác thực rằng PDA chưa được sử dụng."
Đây là đầu ra của AI:
pub fn create_token_account(ctx: Context<CreateAccount>, seed: &[u8], amount: u64) -> Result<()> {
let program_id = ctx.program_id;
let pda = find_pda(seed, &program_id)?;
if ctx.accounts.token_account.key != pda {
return Err(ProgramError::InvalidSeeds);
}
if !ctx.accounts.token_account.is_initialized {
let token_account = &mut ctx.accounts.token_account;
token_account.balance = amount;
token_account.is_initialized = true;
}
Ok(())
}Bước này tích hợp logic PDA vào quá trình tạo tài khoản, đồng thời đảm bảo PDA không bị tái sử dụng sai cách.
Bây giờ, hãy tối ưu và hoàn thiện mã. Yêu cầu AI tinh chỉnh thêm hàm bằng một prompt như:
"Tối ưu hàm này để giảm thiểu chi phí giao dịch và thêm xác thực quyền sở hữu."
Đây là đầu ra của AI:
pub fn create_token_account(ctx: Context<CreateAccount>, seed: &[u8], amount: u64) -> Result<()> {
let program_id = ctx.program_id;
let pda = find_pda(seed, &program_id)?;
if ctx.accounts.token_account.key != pda || ctx.accounts.token_account.owner != program_id {
return Err(ProgramError::IncorrectProgramId);
}
if !ctx.accounts.token_account.is_initialized {
let token_account = &mut ctx.accounts.token_account;
token_account.balance = amount;
token_account.is_initialized = true;
}
Ok(())
}Hàm cuối cùng giờ đây hiệu quả, an toàn và phù hợp với các phương pháp hay nhất của Solana.
Tại sao phương pháp này hiệu quả
- Giúp mọi thứ dễ quản lý: Tập trung vào một tác vụ nhỏ tại một thời điểm giúp AI không bị quá tải. Mỗi bước kế thừa bước trước, giúp việc kiểm thử và tinh chỉnh dễ dàng hơn.
- Phát hiện lỗi sớm: Các bước nhỏ hơn giúp bạn phát hiện vấn đề trước khi chúng ảnh hưởng đến phần mã còn lại. Ví dụ, thêm xử lý lỗi từ sớm sẽ ngăn chương trình gặp sự cố về sau.
- Thúc đẩy quá trình lặp: Nếu có điều gì đó chưa hoạt động hoàn hảo, bạn có thể điều chỉnh hàm mà không cần làm lại toàn bộ codebase.
- Tạo ra mã tốt hơn: Mỗi lần tinh chỉnh đều giúp mã vững chắc hơn, và cuối cùng bạn có được một giải pháp đáng tin cậy, dễ bảo trì hơn.
Cách sử dụng phương pháp này
Hãy ghi nhớ những mẹo sau trong lần tiếp theo bạn lập trình đôi với AI:
- Chia tác vụ thành các bước nhỏ hơn: Thay vì yêu cầu một hàm phức tạp duy nhất, hãy chia nó thành các tác vụ đơn giản, dễ quản lý hơn và thực hiện lần lượt.
- Kiểm thử kết quả sau mỗi bước: Chạy mã sau mỗi thay đổi để xác nhận mã hoạt động. Nếu không, hãy sửa vấn đề hoặc điều chỉnh prompt trước khi chuyển sang bước tiếp theo.
- Tinh chỉnh trong quá trình thực hiện: Đừng giới hạn ở một kết quả duy nhất. Hãy yêu cầu AI tối ưu hoặc thêm các tính năng như xác thực, cải thiện hiệu năng hay xử lý lỗi tốt hơn.
Kết luận
Dùng AI để xây dựng trên Solana có thể mang lại hiệu quả đáng kinh ngạc nếu bạn áp dụng cách tiếp cận cẩn thận và có chủ đích. Kiến trúc của Solana khác với các blockchain khác, với PDA, xử lý giao dịch song song và thiết kế dựa trên tài khoản. Điều này có nghĩa là bạn cần định hướng AI đúng cách.
Hãy bắt đầu bằng các prompt rõ ràng. Cho AI biết chính xác điều bạn muốn và nêu cụ thể các công cụ như Rust, Anchor và PDA. Một prompt tốt có thể là:
“Viết một hàm Rust để khởi tạo tài khoản token Solana bằng PDA, xác thực trạng thái tài khoản và xử lý lỗi.”
Sự rõ ràng này giúp AI có cơ hội tốt hơn để tạo ra mã hoạt động đúng trên Solana.
Luôn cung cấp ngữ cảnh. Chia sẻ mã dự án hoặc giải thích các cấu trúc bạn đang sử dụng, chẳng hạn như schema tài khoản hoặc kiểu dữ liệu. Ví dụ, nếu bạn có một struct TokenAccount, hãy cung cấp thông tin chi tiết để AI điều chỉnh đầu ra cho phù hợp. Nhưng đừng cung cấp quá nhiều; hãy tập trung vào những phần liên quan để đề xuất luôn chính xác và hữu ích.
Chia tác vụ thành các bước nhỏ hơn. Sử dụng quy trình lặp để tinh chỉnh mã trong quá trình thực hiện. Bắt đầu bằng các tác vụ đơn giản như tính PDA, sau đó phát triển thêm với xử lý lỗi hoặc xác thực tài khoản. Kiểm thử sau mỗi bước. Bằng cách này, bạn có thể phát hiện vấn đề sớm và tiến triển đều đặn.
Cuối cùng, hãy kiểm tra kỹ sản phẩm của AI. Trong phần lớn trường hợp, mã do AI tạo vẫn có các vấn đề nhỏ như thiếu kiểm tra tràn số hoặc bỏ qua bước xác thực. Hãy đảm bảo đầu ra tuân thủ các quy tắc của Solana, không có lỗi và tận dụng khả năng thực thi song song.
AI chỉ là điểm khởi đầu; bạn phải hoàn thành phần việc còn lại. Bằng cách sử dụng chỉ dẫn rõ ràng, ngữ cảnh, quy trình phát triển từng bước và khâu xem xét cẩn thận, bạn có thể dùng AI để tạo ra các chương trình Solana an toàn và tối ưu. Hãy tiếp tục tham gia vào quy trình, và AI sẽ trở thành công cụ hữu ích giúp bạn tiết kiệm thời gian cũng như viết mã tốt hơn.
Đọc thêm
Để tìm hiểu thêm về cách xây dựng bằng AI trên Solana, hãy khám phá các tài nguyên sau:
Bài viết liên quan
Đăng ký nhận tin từ Helius
Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài


