Triển khai chương trình Solana đầu tiên của bạn
Trong phần này, bạn sẽ xây dựng, triển khai và kiểm tra một chương trình Solana (hợp đồng thông minh) đơn giản bằng framework Anchor. Đến cuối bài, bạn sẽ triển khai được chương trình đầu tiên của mình lên blockchain Solana.
Mục đích của phần này tập trung vào việc làm quen với Solana Playground. Hướng dẫn này sẽ đi qua một ví dụ chi tiết hơn trong các phần Program Derived Address (PDA) và Cross Program Invocation (CPI). Để biết thêm chi tiết, hãy tham khảo trang Các chương trình trên Solana.
Tạo dự án Anchor
Đầu tiên, mở https://beta.solpg.io trong một tab trình duyệt mới.
-
Nhấp vào nút "Create a new project" trên bảng điều khiển bên trái.
-
Nhập tên dự án, chọn Anchor làm framework, sau đó nhấp vào nút "Create".
Dự án mới
Bạn sẽ thấy một dự án mới được tạo với mã chương trình trong tệp src/lib.rs
.
Chương trình Solana cơ bản này tạo một tài khoản mới và lưu trữ một số trong đó.
Chương trình chứa một chỉ thị (initialize
) thực hiện:
- Yêu cầu một tham số
data: u64
làm đầu vào - Tạo một tài khoản mới
- Lưu giá trị của tham số
data: u64
vào dữ liệu của tài khoản - Ghi lại một thông báo vào nhật ký chương trình của giao dịch
use anchor_lang::prelude::*;// This is your program's public key and it will update// automatically when you build the project.declare_id!("11111111111111111111111111111111");#[program]mod hello_anchor {use super::*;pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {ctx.accounts.new_account.data = data;msg!("Changed data to: {}!", data); // Message will show up in the tx logsOk(())}}#[derive(Accounts)]pub struct Initialize<'info> {// We must specify the space in order to initialize an account.// First 8 bytes are default account discriminator,// next 8 bytes come from NewAccount.data being type u64.// (u64 = 64 bits unsigned integer = 8 bytes)#[account(init,payer = signer,space = 8 + 8)]pub new_account: Account<'info, NewAccount>,#[account(mut)]pub signer: Signer<'info>,pub system_program: Program<'info, System>,}#[account]pub struct NewAccount {data: u64}
Xây dựng và triển khai chương trình
Để xây dựng chương trình, chỉ cần chạy build
trong terminal. Lệnh build
biên
dịch chương trình. Mã byte của chương trình sau đó được lưu trữ trong một tài
khoản chương trình thực thi khi được triển khai.
$build
Solana Playground cập nhật địa chỉ trong declare_id!()
. Địa chỉ này đại
diện cho địa chỉ trên chuỗi của chương trình của bạn (program ID).
Sau khi xây dựng chương trình, chạy deploy
trong terminal để triển khai
chương trình lên mạng (devnet theo mặc định). Việc triển khai chương trình yêu
cầu phân bổ SOL cho tài khoản trên chuỗi lưu trữ chương trình.
Trước khi triển khai, hãy đảm bảo bạn có đủ SOL. Bạn có thể nhận SOL devnet bằng
cách chạy solana airdrop 5
trong terminal Playground hoặc sử dụng
Web Faucet.
$deploy
Bạn cũng có thể sử dụng các nút Build
và Deploy
trên bảng điều khiển bên
trái.
Xây dựng và Triển khai
Sau khi triển khai chương trình, bạn có thể gọi các chỉ thị của nó.
Kiểm tra chương trình
Mã khởi đầu bao gồm một tệp kiểm tra nằm trong tests/anchor.test.ts
. Tệp này
minh họa cách gọi chỉ thị initialize
trên chương trình từ phía
client.
// No imports needed: web3, anchor, pg and more are globally availabledescribe("Test", () => {it("initialize", async () => {// Generate keypair for the new accountconst newAccountKp = new web3.Keypair();// Send transactionconst data = new BN(42);const txHash = await pg.program.methods.initialize(data).accounts({newAccount: newAccountKp.publicKey,signer: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId}).signers([newAccountKp]).rpc();console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);// Confirm transactionawait pg.connection.confirmTransaction(txHash);// Fetch the created accountconst newAccount = await pg.program.account.newAccount.fetch(newAccountKp.publicKey);console.log("On-chain data is:", newAccount.data.toString());// Check whether the data on-chain is equal to local 'data'assert(data.eq(newAccount.data));});});
Để chạy tệp kiểm tra sau khi triển khai chương trình, chạy test
trong
terminal.
$test
Tìm kiếm kết quả đầu ra xác nhận kiểm tra đã thành công.
Bạn cũng có thể sử dụng nút Test
trên bảng điều khiển bên trái.
Chạy kiểm tra
Sau đó, bạn có thể xem nhật ký giao dịch bằng cách chạy lệnh solana confirm -v
và chỉ định mã băm giao dịch (chữ ký) từ kết quả kiểm tra:
$solana confirm -v [TxHash]
Ví dụ:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
Bạn cũng có thể xem chi tiết giao dịch trên SolanaFM hoặc Solana Explorer bằng cách tìm kiếm chữ ký giao dịch (mã băm).
Hãy nhớ cập nhật kết nối cluster (mạng) trên Explorer bạn sử dụng để khớp với Solana Playground. Solana Playground mặc định sử dụng cluster devnet.
Đóng chương trình
Cuối cùng, việc đóng chương trình cho phép khôi phục hoàn toàn lượng SOL đã được phân bổ cho chương trình trên chuỗi.
Bạn có thể đóng một chương trình bằng cách chạy lệnh sau và chỉ định địa chỉ
chương trình được tìm thấy trong declare_id!()
:
$solana program close [ProgramID]
Ví dụ:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Chúc mừng. Bạn vừa xây dựng và triển khai chương trình Solana đầu tiên của mình bằng framework Anchor.
Is this page helpful?