Mengembangkan Program dalam Rust
Program Solana utamanya dikembangkan menggunakan bahasa pemrograman Rust. Halaman ini berfokus pada penulisan program Solana dalam Rust tanpa menggunakan framework Anchor, pendekatan yang sering disebut sebagai penulisan program "Rust native".
Pengembangan Rust native memberikan pengembang kontrol langsung atas program Solana mereka. Namun, pendekatan ini memerlukan lebih banyak pengaturan manual dan kode boilerplate dibandingkan dengan menggunakan framework Anchor. Metode ini direkomendasikan untuk pengembang yang:
- Mencari kontrol terperinci atas logika program dan optimisasi
- Ingin mempelajari konsep dasar sebelum beralih ke framework tingkat yang lebih tinggi
Untuk pemula, kami merekomendasikan untuk memulai dengan framework Anchor. Lihat bagian Anchor untuk informasi lebih lanjut.
Prasyarat
Untuk petunjuk instalasi terperinci, kunjungi halaman instalasi.
Sebelum Anda memulai, pastikan Anda telah menginstal hal-hal berikut:
- Rust: Bahasa pemrograman untuk membangun program Solana.
- Solana CLI: Alat command-line untuk pengembangan Solana.
Memulai
Contoh di bawah ini mencakup langkah-langkah dasar untuk membuat program Solana pertama Anda yang ditulis dalam Rust. Kita akan membuat program minimal yang mencetak "Hello, world!" ke log program.
Membuat program baru
Pertama, buat proyek Rust baru menggunakan perintah standar cargo init
dengan
flag --lib
.
cargo init hello_world --lib
Navigasikan ke direktori proyek. Anda akan melihat file default src/lib.rs
dan
Cargo.toml
cd hello_world
Menambahkan dependensi solana-program
Selanjutnya, tambahkan dependensi solana-program
. Ini adalah dependensi
minimum yang diperlukan untuk membangun program Solana.
cargo add solana-program@1.18.26
Selanjutnya, tambahkan snippet berikut ke Cargo.toml
. Jika Anda tidak
menyertakan konfigurasi ini, direktori target/deploy
tidak akan dibuat saat
Anda membangun program.
Tambahkan crate-type
Selanjutnya, tambahkan snippet berikut ke Cargo.toml
.
[lib]crate-type = ["cdylib", "lib"]
Jika Anda tidak menyertakan konfigurasi ini, direktori target/deploy
tidak
akan dibuat saat Anda membangun program.
File Cargo.toml
Anda seharusnya terlihat seperti berikut:
[package]name = "hello_world"version = "0.1.0"edition = "2021"[lib]crate-type = ["cdylib", "lib"][dependencies]solana-program = "1.18.26"
Tambahkan kode program
Selanjutnya, ganti isi dari src/lib.rs
dengan kode berikut. Ini adalah program
Solana minimal yang mencetak "Hello, world!" ke log program ketika program
dijalankan.
Makro msg!
digunakan dalam program Solana untuk mencetak pesan ke log program.
use solana_program::{account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,};entrypoint!(process_instruction);pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {msg!("Hello, world!");Ok(())}
Bangun program
Selanjutnya, bangun program menggunakan perintah cargo build-sbf
.
cargo build-sbf
Perintah ini menghasilkan direktori target/deploy
yang berisi dua file
penting:
- File
.so
(misalnya,hello_world.so
): Ini adalah program Solana yang dikompilasi yang akan di-deploy ke jaringan sebagai "smart contract". - File keypair (misalnya,
hello_world-keypair.json
): Kunci publik dari keypair ini digunakan sebagai ID program saat men-deploy program.
Untuk melihat ID program, jalankan perintah berikut di terminal Anda. Perintah ini mencetak kunci publik dari keypair pada jalur file yang ditentukan:
solana address -k ./target/deploy/hello_world-keypair.json
Contoh output:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Tambahkan dependensi pengujian
Selanjutnya, uji program menggunakan crate solana-program-test
. Tambahkan
dependensi berikut ke Cargo.toml
.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
Uji program
Tambahkan pengujian berikut ke src/lib.rs
, di bawah kode program. Ini adalah
modul pengujian yang memanggil program hello world.
use solana_program::{account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,};entrypoint!(process_instruction);pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {msg!("Hello, world!");Ok(())}#[cfg(test)]mod test {use solana_program_test::*;use solana_sdk::{instruction::Instruction, pubkey::Pubkey, signature::Signer, transaction::Transaction,};#[tokio::test]async fn test_hello_world() {let program_id = Pubkey::new_unique();let mut program_test = ProgramTest::default();program_test.add_program("hello_world", program_id, None);let (mut banks_client, payer, recent_blockhash) = program_test.start().await;// Create instructionlet instruction = Instruction {program_id,accounts: vec![],data: vec![],};// Create transaction with instructionlet mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));// Sign transactiontransaction.sign(&[&payer], recent_blockhash);let transaction_result = banks_client.process_transaction(transaction).await;assert!(transaction_result.is_ok());}}
Jalankan pengujian menggunakan perintah cargo test-sbf
. Log program akan
menampilkan "Hello, world!".
cargo test-sbf
Contoh output:
running 1 test[2024-10-18T21:24:54.889570000Z INFO solana_program_test] "hello_world" SBF program from /hello_world/target/deploy/hello_world.so, modified 35 seconds, 828 ms, 268 µs and 398 ns ago[2024-10-18T21:24:54.974294000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-18T21:24:54.974814000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, world![2024-10-18T21:24:54.976848000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-18T21:24:54.976868000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
Deploy program
Selanjutnya, deploy program tersebut. Saat mengembangkan secara lokal, kita
dapat menggunakan solana-test-validator
.
Pertama, konfigurasikan Solana CLI untuk menggunakan cluster Solana lokal.
solana config set -ul
Contoh output:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
Buka terminal baru dan jalankan perintah solana-test-validators
untuk memulai
validator lokal.
solana-test-validator
Sementara test validator berjalan, jalankan perintah solana program deploy
di
terminal terpisah untuk men-deploy program ke validator lokal.
solana program deploy ./target/deploy/hello_world.so
Contoh output:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
Anda dapat memeriksa ID program dan tanda tangan transaksi di
Solana Explorer.
Perhatikan bahwa cluster di Solana Explorer juga harus localhost. Opsi "Custom
RPC URL" pada Solana Explorer secara default adalah http://localhost:8899
.
Buat contoh klien
Selanjutnya, kita akan mendemonstrasikan cara memanggil program menggunakan klien Rust.
Pertama buat direktori examples
dan file client.rs
.
mkdir -p examplestouch examples/client.rs
Tambahkan berikut ini ke Cargo.toml
.
[[example]]name = "client"path = "examples/client.rs"
Tambahkan dependensi solana-client
.
cargo add solana-client@1.18.26 --dev
Tambahkan klien
Tambahkan kode berikut ke examples/client.rs
. Ini adalah skrip klien Rust yang
mendanai keypair baru untuk membayar biaya transaksi dan kemudian memanggil
program hello world.
use solana_client::rpc_client::RpcClient;use solana_sdk::{commitment_config::CommitmentConfig,instruction::Instruction,pubkey::Pubkey,signature::{Keypair, Signer},transaction::Transaction,};use std::str::FromStr;#[tokio::main]async fn main() {// Program ID (replace with your actual program ID)let program_id = Pubkey::from_str("4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz").unwrap();// Connect to the Solana devnetlet rpc_url = String::from("http://localhost:8899");let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());// Generate a new keypair for the payerlet payer = Keypair::new();// Request airdroplet airdrop_amount = 1_000_000_000; // 1 SOLlet signature = client.request_airdrop(&payer.pubkey(), airdrop_amount).expect("Failed to request airdrop");// Wait for airdrop confirmationloop {let confirmed = client.confirm_transaction(&signature).unwrap();if confirmed {break;}}// Create the instructionlet instruction = Instruction::new_with_borsh(program_id,&(), // Empty instruction datavec![], // No accounts needed);// Add the instruction to new transactionlet mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));transaction.sign(&[&payer], client.get_latest_blockhash().unwrap());// Send and confirm the transactionmatch client.send_and_confirm_transaction(&transaction) {Ok(signature) => println!("Transaction Signature: {}", signature),Err(err) => eprintln!("Error sending transaction: {}", err),}}
Ganti ID program
Sebelum menjalankan skrip, ganti ID program dalam cuplikan kode di atas dengan ID untuk program Anda.
Anda bisa mendapatkan ID program Anda dengan menjalankan perintah berikut.
solana address -k ./target/deploy/hello_world-keypair.json
Panggil program
Jalankan skrip klien dengan perintah berikut.
cargo run --example client
Contoh output:
Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV
Anda dapat memeriksa tanda tangan transaksi di Solana Explorer (klaster lokal) untuk melihat "Hello, world!" di log program.
Perbarui program
Program Solana dapat diperbarui dengan men-deploy ulang ke ID program yang sama.
Perbarui program di src/lib.rs
untuk mencetak "Hello, Solana!" alih-alih
"Hello, world!".
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
Uji program yang diperbarui dengan menjalankan perintah cargo test-sbf
.
cargo test-sbf
Anda akan melihat "Hello, Solana!" di log program.
running 1 test[2024-10-23T19:28:28.842639000Z INFO solana_program_test] "hello_world" SBF program from /code/misc/delete/hello_world/target/deploy/hello_world.so, modified 4 minutes, 31 seconds, 435 ms, 566 µs and 766 ns ago[2024-10-23T19:28:28.934854000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-23T19:28:28.936735000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, Solana![2024-10-23T19:28:28.938774000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-23T19:28:28.938793000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
Deploy ulang program
Jalankan perintah cargo build-sbf
untuk menghasilkan file .so
yang
diperbarui.
cargo build-sbf
Deploy ulang program menggunakan perintah solana program deploy
.
solana program deploy ./target/deploy/hello_world.so
Jalankan kode klien lagi dan periksa tanda tangan transaksi di Solana Explorer untuk melihat "Hello, Solana!" di log program.
cargo run --example client
Tutup program
Anda dapat menutup program Solana untuk mendapatkan kembali SOL yang dialokasikan ke akun tersebut. Menutup program tidak dapat dibalik, jadi harus dilakukan dengan hati-hati.
Untuk menutup program, gunakan perintah solana program close <PROGRAM_ID>
.
Contohnya:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
Contoh output:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
Perlu diingat bahwa setelah program ditutup, ID programnya tidak dapat digunakan kembali. Upaya untuk men-deploy program dengan ID program yang sebelumnya telah ditutup akan menghasilkan error.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
Deploy ulang program yang ditutup
Jika Anda perlu men-deploy ulang program dengan kode sumber yang sama setelah menutup program, Anda harus menghasilkan ID program baru. Untuk menghasilkan keypair baru untuk program, jalankan perintah berikut:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
Atau, Anda dapat menghapus file keypair yang ada (misalnya
./target/deploy/hello_world-keypair.json
) dan menjalankan cargo build-sbf
lagi, yang akan menghasilkan file keypair baru.
Membuat program baru
Pertama, buat proyek Rust baru menggunakan perintah standar cargo init
dengan
flag --lib
.
cargo init hello_world --lib
Navigasikan ke direktori proyek. Anda akan melihat file default src/lib.rs
dan
Cargo.toml
cd hello_world
Menambahkan dependensi solana-program
Selanjutnya, tambahkan dependensi solana-program
. Ini adalah dependensi
minimum yang diperlukan untuk membangun program Solana.
cargo add solana-program@1.18.26
Selanjutnya, tambahkan snippet berikut ke Cargo.toml
. Jika Anda tidak
menyertakan konfigurasi ini, direktori target/deploy
tidak akan dibuat saat
Anda membangun program.
Tambahkan crate-type
Selanjutnya, tambahkan snippet berikut ke Cargo.toml
.
[lib]crate-type = ["cdylib", "lib"]
Jika Anda tidak menyertakan konfigurasi ini, direktori target/deploy
tidak
akan dibuat saat Anda membangun program.
Tambahkan kode program
Selanjutnya, ganti isi dari src/lib.rs
dengan kode berikut. Ini adalah program
Solana minimal yang mencetak "Hello, world!" ke log program ketika program
dijalankan.
Makro msg!
digunakan dalam program Solana untuk mencetak pesan ke log program.
Bangun program
Selanjutnya, bangun program menggunakan perintah cargo build-sbf
.
cargo build-sbf
Perintah ini menghasilkan direktori target/deploy
yang berisi dua file
penting:
- File
.so
(misalnya,hello_world.so
): Ini adalah program Solana yang dikompilasi yang akan di-deploy ke jaringan sebagai "smart contract". - File keypair (misalnya,
hello_world-keypair.json
): Kunci publik dari keypair ini digunakan sebagai ID program saat men-deploy program.
Untuk melihat ID program, jalankan perintah berikut di terminal Anda. Perintah ini mencetak kunci publik dari keypair pada jalur file yang ditentukan:
solana address -k ./target/deploy/hello_world-keypair.json
Contoh output:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Tambahkan dependensi pengujian
Selanjutnya, uji program menggunakan crate solana-program-test
. Tambahkan
dependensi berikut ke Cargo.toml
.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
Uji program
Tambahkan pengujian berikut ke src/lib.rs
, di bawah kode program. Ini adalah
modul pengujian yang memanggil program hello world.
Jalankan pengujian menggunakan perintah cargo test-sbf
. Log program akan
menampilkan "Hello, world!".
cargo test-sbf
Contoh output:
running 1 test[2024-10-18T21:24:54.889570000Z INFO solana_program_test] "hello_world" SBF program from /hello_world/target/deploy/hello_world.so, modified 35 seconds, 828 ms, 268 µs and 398 ns ago[2024-10-18T21:24:54.974294000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-18T21:24:54.974814000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, world![2024-10-18T21:24:54.976848000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-18T21:24:54.976868000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
Deploy program
Selanjutnya, deploy program tersebut. Saat mengembangkan secara lokal, kita
dapat menggunakan solana-test-validator
.
Pertama, konfigurasikan Solana CLI untuk menggunakan cluster Solana lokal.
solana config set -ul
Contoh output:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
Buka terminal baru dan jalankan perintah solana-test-validators
untuk memulai
validator lokal.
solana-test-validator
Sementara test validator berjalan, jalankan perintah solana program deploy
di
terminal terpisah untuk men-deploy program ke validator lokal.
solana program deploy ./target/deploy/hello_world.so
Contoh output:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
Anda dapat memeriksa ID program dan tanda tangan transaksi di
Solana Explorer.
Perhatikan bahwa cluster di Solana Explorer juga harus localhost. Opsi "Custom
RPC URL" pada Solana Explorer secara default adalah http://localhost:8899
.
Buat contoh klien
Selanjutnya, kita akan mendemonstrasikan cara memanggil program menggunakan klien Rust.
Pertama buat direktori examples
dan file client.rs
.
mkdir -p examplestouch examples/client.rs
Tambahkan berikut ini ke Cargo.toml
.
[[example]]name = "client"path = "examples/client.rs"
Tambahkan dependensi solana-client
.
cargo add solana-client@1.18.26 --dev
Tambahkan klien
Tambahkan kode berikut ke examples/client.rs
. Ini adalah skrip klien Rust yang
mendanai keypair baru untuk membayar biaya transaksi dan kemudian memanggil
program hello world.
Ganti ID program
Sebelum menjalankan skrip, ganti ID program dalam cuplikan kode di atas dengan ID untuk program Anda.
Anda bisa mendapatkan ID program Anda dengan menjalankan perintah berikut.
solana address -k ./target/deploy/hello_world-keypair.json
Panggil program
Jalankan skrip klien dengan perintah berikut.
cargo run --example client
Contoh output:
Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV
Anda dapat memeriksa tanda tangan transaksi di Solana Explorer (klaster lokal) untuk melihat "Hello, world!" di log program.
Perbarui program
Program Solana dapat diperbarui dengan men-deploy ulang ke ID program yang sama.
Perbarui program di src/lib.rs
untuk mencetak "Hello, Solana!" alih-alih
"Hello, world!".
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
Uji program yang diperbarui dengan menjalankan perintah cargo test-sbf
.
cargo test-sbf
Anda akan melihat "Hello, Solana!" di log program.
running 1 test[2024-10-23T19:28:28.842639000Z INFO solana_program_test] "hello_world" SBF program from /code/misc/delete/hello_world/target/deploy/hello_world.so, modified 4 minutes, 31 seconds, 435 ms, 566 µs and 766 ns ago[2024-10-23T19:28:28.934854000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-23T19:28:28.936735000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, Solana![2024-10-23T19:28:28.938774000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-23T19:28:28.938793000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
Deploy ulang program
Jalankan perintah cargo build-sbf
untuk menghasilkan file .so
yang
diperbarui.
cargo build-sbf
Deploy ulang program menggunakan perintah solana program deploy
.
solana program deploy ./target/deploy/hello_world.so
Jalankan kode klien lagi dan periksa tanda tangan transaksi di Solana Explorer untuk melihat "Hello, Solana!" di log program.
cargo run --example client
Tutup program
Anda dapat menutup program Solana untuk mendapatkan kembali SOL yang dialokasikan ke akun tersebut. Menutup program tidak dapat dibalik, jadi harus dilakukan dengan hati-hati.
Untuk menutup program, gunakan perintah solana program close <PROGRAM_ID>
.
Contohnya:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
Contoh output:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
Perlu diingat bahwa setelah program ditutup, ID programnya tidak dapat digunakan kembali. Upaya untuk men-deploy program dengan ID program yang sebelumnya telah ditutup akan menghasilkan error.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
Deploy ulang program yang ditutup
Jika Anda perlu men-deploy ulang program dengan kode sumber yang sama setelah menutup program, Anda harus menghasilkan ID program baru. Untuk menghasilkan keypair baru untuk program, jalankan perintah berikut:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
Atau, Anda dapat menghapus file keypair yang ada (misalnya
./target/deploy/hello_world-keypair.json
) dan menjalankan cargo build-sbf
lagi, yang akan menghasilkan file keypair baru.
[package]name = "hello_world"version = "0.1.0"edition = "2021"[dependencies]
Is this page helpful?