Dokumentasi SolanaMengembangkan Program

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.

Terminal
cargo init hello_world --lib

Navigasikan ke direktori proyek. Anda akan melihat file default src/lib.rs dan Cargo.toml

Terminal
cd hello_world

Menambahkan dependensi solana-program

Selanjutnya, tambahkan dependensi solana-program. Ini adalah dependensi minimum yang diperlukan untuk membangun program Solana.

Terminal
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:

Cargo.toml
[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.

src/lib.rs
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.

Terminal
cargo build-sbf

Perintah ini menghasilkan direktori target/deploy yang berisi dua file penting:

  1. File .so (misalnya, hello_world.so): Ini adalah program Solana yang dikompilasi yang akan di-deploy ke jaringan sebagai "smart contract".
  2. 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:

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

Terminal
cargo add solana-program-test@1.18.26 --dev
cargo add solana-sdk@1.18.26 --dev
cargo 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.

src/lib.rs
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 instruction
let instruction = Instruction {
program_id,
accounts: vec![],
data: vec![],
};
// Create transaction with instruction
let mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));
// Sign transaction
transaction.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!".

Terminal
cargo test-sbf

Contoh output:

Terminal
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 success
test test::test_hello_world ... ok
test 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.

Terminal
solana config set -ul

Contoh output:

Config File: /.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /.config/solana/id.json
Commitment: confirmed

Buka terminal baru dan jalankan perintah solana-test-validators untuk memulai validator lokal.

Terminal
solana-test-validator

Sementara test validator berjalan, jalankan perintah solana program deploy di terminal terpisah untuk men-deploy program ke validator lokal.

Terminal
solana program deploy ./target/deploy/hello_world.so

Contoh output:

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
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.

Terminal
mkdir -p examples
touch examples/client.rs

Tambahkan berikut ini ke Cargo.toml.

Cargo.toml
[[example]]
name = "client"
path = "examples/client.rs"

Tambahkan dependensi solana-client.

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

examples/client.rs
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 devnet
let rpc_url = String::from("http://localhost:8899");
let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
// Generate a new keypair for the payer
let payer = Keypair::new();
// Request airdrop
let airdrop_amount = 1_000_000_000; // 1 SOL
let signature = client
.request_airdrop(&payer.pubkey(), airdrop_amount)
.expect("Failed to request airdrop");
// Wait for airdrop confirmation
loop {
let confirmed = client.confirm_transaction(&signature).unwrap();
if confirmed {
break;
}
}
// Create the instruction
let instruction = Instruction::new_with_borsh(
program_id,
&(), // Empty instruction data
vec![], // No accounts needed
);
// Add the instruction to new transaction
let mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));
transaction.sign(&[&payer], client.get_latest_blockhash().unwrap());
// Send and confirm the transaction
match 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.

Terminal
solana address -k ./target/deploy/hello_world-keypair.json

Panggil program

Jalankan skrip klien dengan perintah berikut.

Terminal
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!".

lib.rs
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.

Terminal
cargo test-sbf

Anda akan melihat "Hello, Solana!" di log program.

Terminal
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 success
test test::test_hello_world ... ok
test 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.

Terminal
cargo build-sbf

Deploy ulang program menggunakan perintah solana program deploy.

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

Terminal
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:

Terminal
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
--bypass-warning

Contoh output:

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

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, use
a 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:

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

Terminal
cargo init hello_world --lib

Navigasikan ke direktori proyek. Anda akan melihat file default src/lib.rs dan Cargo.toml

Terminal
cd hello_world

Menambahkan dependensi solana-program

Selanjutnya, tambahkan dependensi solana-program. Ini adalah dependensi minimum yang diperlukan untuk membangun program Solana.

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

Terminal
cargo build-sbf

Perintah ini menghasilkan direktori target/deploy yang berisi dua file penting:

  1. File .so (misalnya, hello_world.so): Ini adalah program Solana yang dikompilasi yang akan di-deploy ke jaringan sebagai "smart contract".
  2. 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:

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

Terminal
cargo add solana-program-test@1.18.26 --dev
cargo add solana-sdk@1.18.26 --dev
cargo 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!".

Terminal
cargo test-sbf

Contoh output:

Terminal
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 success
test test::test_hello_world ... ok
test 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.

Terminal
solana config set -ul

Contoh output:

Config File: /.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /.config/solana/id.json
Commitment: confirmed

Buka terminal baru dan jalankan perintah solana-test-validators untuk memulai validator lokal.

Terminal
solana-test-validator

Sementara test validator berjalan, jalankan perintah solana program deploy di terminal terpisah untuk men-deploy program ke validator lokal.

Terminal
solana program deploy ./target/deploy/hello_world.so

Contoh output:

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
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.

Terminal
mkdir -p examples
touch examples/client.rs

Tambahkan berikut ini ke Cargo.toml.

Cargo.toml
[[example]]
name = "client"
path = "examples/client.rs"

Tambahkan dependensi solana-client.

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

Terminal
solana address -k ./target/deploy/hello_world-keypair.json

Panggil program

Jalankan skrip klien dengan perintah berikut.

Terminal
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!".

lib.rs
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.

Terminal
cargo test-sbf

Anda akan melihat "Hello, Solana!" di log program.

Terminal
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 success
test test::test_hello_world ... ok
test 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.

Terminal
cargo build-sbf

Deploy ulang program menggunakan perintah solana program deploy.

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

Terminal
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:

Terminal
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
--bypass-warning

Contoh output:

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

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, use
a 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:

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

lib.rs
Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
[dependencies]

Is this page helpful?

Daftar Isi

Edit Halaman