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ớiDự á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
lib.rs
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 logs
Ok(())
}
}
#[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.

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.

Xây dựng và Triển khaiXâ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.

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.

Chạy kiểm traChạ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:

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, 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!():

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