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:
- Mentransfer SOL antar akun
- 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.
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}`);
Ini adalah langkah-langkah untuk membangun transaksi untuk berinteraksi dengan program apa pun di Solana.
Buat instruksi yang ingin Anda panggil.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Tambahkan instruksi ke transaksi:
const transaction = new Transaction().add(transferInstruction);
Tanda tangani dan Kirim Transaksi:
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:
- Memanggil System Program untuk membuat akun baru.
- Memanggil Token Extensions Program untuk menginisialisasi akun tersebut sebagai Mint.
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 SOLconst signature = await connection.requestAirdrop(wallet.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");// Generate keypair to use as address of mint accountconst mint = new Keypair();// Calculate lamports required for rent exemptionconst rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);// Instruction to create new account with space for new mint accountconst createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});// Instruction to initialize mint accountconst initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);// Build transaction with instructions to create new account and initialize mint accountconst transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, // payermint // mint address keypair]);console.log("Mint Account:", `${mint.publicKey}`);console.log("Transaction Signature:", `${transactionSignature}`);
Berikut adalah penjelasan langkah demi langkah tentang apa yang dilakukan contoh ini:
Buat koneksi dan danai dompet
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
const mint = new Keypair();
Hitung lamport minimum untuk pembebasan rent
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Buat instruksi untuk membuat akun baru
- Alokasikan ruang yang diperlukan untuk menyimpan data mint
- Transfer lamport dari dompet untuk mendanai akun baru
- Tetapkan kepemilikan akun ke program Token Extensions
(
TOKEN_2022_PROGRAM_ID
)
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
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);
Tambahkan kedua instruksi ke dalam transaksi
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Kirim dan konfirmasi transaksi dengan kedua penandatangan yang diperlukan
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, mint]);
Cetak akun Mint dan tanda tangan transaksi
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?