Triển khai Program 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 program Solana (smart contract) đơn giản bằng framework Anchor. Đến cuối bài, bạn sẽ triển khai được program đầ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 Programs 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ớiDự án mới

Bạn sẽ thấy một dự án mới được tạo với mã program trong tệp lib.rs.

Program Solana cơ bản này tạo một tài khoản mới và lưu trữ một số trong đó. Program chứa một instruction (initialize) mà:

  • Yêu cầu một tham số data làm đầu vào
  • Tạo một tài khoản mới
  • Lưu giá trị của tham số data vào dữ liệu của tài khoản
  • Ghi một thông báo vào nhật ký program của giao dịch
use anchor_lang::prelude::*;
declare_id!("11111111111111111111111111111111");
#[program]
mod hello_anchor {
use super::*;
pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {
let my_account = &mut ctx.accounts.my_account;
my_account.data = data;
msg!("Your data is: {}", data);
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, payer = user, space = 8 + 8)]
pub my_account: Account<'info, MyAccount>,
#[account(mut)]
pub user: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct MyAccount {
pub 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.

Terminal
$
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.

Terminal
$
deploy

Bạn cũng có thể sử dụng các nút BuildDeploy trên bảng điều khiển bên trái.

Build and DeployBuild and Deploy

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.

anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const 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 transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const 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.

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.

Run TestRun Test

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:

Terminal
$
solana confirm -v [TxHash]

Ví dụ:

Terminal
$
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, đó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!():

Terminal
$
solana program close [ProgramID]

Ví dụ:

Terminal
$
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?

Mục lục

Chỉnh sửa trang