Menulis ke Jaringan

Pada bagian sebelumnya, Anda telah mempelajari cara membaca data dari jaringan Solana. Sekarang jelajahi cara menulis data ke jaringan tersebut. Menulis ke jaringan Solana melibatkan pengiriman transaksi yang berisi satu atau lebih instruksi.

Program (smart contract) memproses instruksi-instruksi ini sesuai dengan logika bisnis mereka untuk setiap instruksi. Ketika Anda mengirimkan transaksi, runtime Solana mengeksekusi setiap instruksi secara berurutan dan atomik (artinya semua instruksi berhasil atau seluruh transaksi gagal).

Di bagian ini, Anda akan melihat dua contoh dasar:

  1. Mentransfer SOL antar akun
  2. Membuat token baru

Contoh-contoh ini menunjukkan cara membangun dan mengirim transaksi untuk memanggil program Solana. Untuk detail lebih lanjut, lihat halaman Transaksi dan Instruksi dan Biaya di Solana.

Transfer SOL

Dalam contoh ini, Anda akan belajar cara mentransfer SOL antara dua akun.

Di Solana, setiap akun memiliki program tertentu sebagai pemiliknya. Hanya program pemilik yang dapat mengurangi saldo SOL (lamport) akun.

System Program adalah pemilik untuk semua akun "dompet". Untuk mentransfer SOL, Anda harus memanggil instruksi transfer dari System Program.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");
const sender = new Keypair();
const receiver = new Keypair();
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});
const transaction = new Transaction().add(transferInstruction);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);
console.log("Transaction Signature:", `${transactionSignature}`);
Click to execute the code.

Ini adalah langkah-langkah untuk membangun transaksi untuk berinteraksi dengan program apa pun di Solana.

Buat instruksi yang ingin Anda panggil.

Instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Tambahkan instruksi ke transaksi:

Transaction
const transaction = new Transaction().add(transferInstruction);

Tanda tangani dan Kirim Transaksi:

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender] // signer keypair
);

Membuat Token

Dalam contoh ini, Anda akan belajar cara membuat token baru di Solana menggunakan Token Extensions Program. Ini memerlukan dua instruksi:

  1. Memanggil System Program untuk membuat akun baru.
  2. Memanggil Token Extensions Program untuk menginisialisasi akun tersebut sebagai Mint.
Create Mint Account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
// Fund the wallet with SOL
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
// Generate keypair to use as address of mint account
const mint = new Keypair();
// Calculate lamports required for rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);
// Instruction to create new account with space for new mint account
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});
// Instruction to initialize mint account
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);
// Build transaction with instructions to create new account and initialize mint account
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet, // payer
mint // mint address keypair
]
);
console.log("Mint Account:", `${mint.publicKey}`);
console.log("Transaction Signature:", `${transactionSignature}`);
Click to execute the code.

Berikut adalah penjelasan langkah demi langkah tentang apa yang dilakukan contoh ini:

Buat koneksi dan danai dompet

Connection and Wallet
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Buat keypair untuk akun Mint

Mint Keypair
const mint = new Keypair();

Hitung lamport minimum untuk pembebasan rent

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Buat instruksi untuk membuat akun baru

  1. Alokasikan ruang yang diperlukan untuk menyimpan data mint
  2. Transfer lamport dari dompet untuk mendanai akun baru
  3. Tetapkan kepemilikan akun ke program Token Extensions (TOKEN_2022_PROGRAM_ID)
Create Account Instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

Buat instruksi untuk menginisialisasi akun Mint

Initialize Mint Instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);

Tambahkan kedua instruksi ke dalam transaksi

Build Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Kirim dan konfirmasi transaksi dengan kedua penandatangan yang diperlukan

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[wallet, mint]
);

Cetak akun Mint dan tanda tangan transaksi

Output
console.log("Mint Account:", `${mint.publicKey}`);
console.log("Transaction Signature:", `${transactionSignature}`);

Dengan menggabungkan kedua instruksi ke dalam satu transaksi, Anda memastikan bahwa pembuatan akun dan inisialisasi terjadi secara atomik. Kedua instruksi berhasil, atau tidak sama sekali. Pendekatan ini umum digunakan saat membangun transaksi Solana yang lebih kompleks, karena menjamin bahwa semua instruksi dieksekusi bersama-sama.

Is this page helpful?

Daftar Isi

Edit Halaman