Menulis ke Jaringan
Pada bagian sebelumnya, Anda telah mempelajari cara membaca data dari jaringan Solana. Sekarang Anda akan belajar cara menulis data ke jaringan tersebut. Menulis ke jaringan Solana melibatkan pengiriman transaksi yang berisi satu atau lebih instruksi.
Program mendefinisikan logika bisnis untuk apa yang dilakukan oleh setiap instruksi. Ketika Anda mengirimkan transaksi, runtime Solana mengeksekusi setiap instruksi secara berurutan dan atomik. Contoh-contoh dalam bagian ini menunjukkan cara membangun dan mengirim transaksi untuk memanggil program Solana, termasuk:
- Mentransfer SOL antar akun
- Membuat token baru
Transfer SOL
Contoh di bawah ini mentransfer SOL antara dua akun. Setiap akun memiliki program pemilik, yang merupakan satu-satunya program yang dapat mengurangi saldo SOL akun.
Semua akun dompet dimiliki oleh System Program. 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}`);const senderBalance = await connection.getBalance(sender.publicKey);const receiverBalance = await connection.getBalance(receiver.publicKey);console.log("Sender Balance:", `${senderBalance}`);console.log("Receiver Balance:", `${receiverBalance}`);
Buat Connection untuk menangani pengiriman transaksi dan pengambilan data
akun.
Dalam contoh ini, kita terhubung ke validator pengujian lokal yang berjalan di
localhost:8899.
const connection = new Connection("http://localhost:8899", "confirmed");
Hasilkan keypair baru untuk digunakan sebagai akun pengirim dan penerima.
const sender = new Keypair();const receiver = new Keypair();
Tambahkan SOL ke akun pengirim. Pada jaringan selain mainnet, Anda dapat
menggunakan metode requestAirdrop untuk mendapatkan SOL untuk pengujian.
const signature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");
Metode SystemProgram.transfer() membuat instruksi yang mentransfer SOL dari
akun fromPubkey ke akun toPubkey sejumlah
lamports yang ditentukan.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Buat transaksi dan tambahkan instruksi ke transaksi tersebut. Dalam contoh ini, kita membuat transaksi dengan satu instruksi. Namun, Anda dapat menambahkan beberapa instruksi ke dalam satu transaksi.
const transaction = new Transaction().add(transferInstruction);
Tandatangani dan kirim transaksi ke jaringan. Keypair pengirim diperlukan dalam array penandatangan untuk mengotorisasi transfer SOL dari akun mereka.
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender]);
Tanda tangan transaksi adalah pengidentifikasi unik yang dapat digunakan untuk mencari transaksi di Solana Explorer.
Membuat token
Contoh di bawah ini 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,getMint} 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("Transaction Signature:", `${transactionSignature}`);const mintData = await getMint(connection,mint.publicKey,"confirmed",TOKEN_2022_PROGRAM_ID););
Membuat token memerlukan penggunaan kedua library @solana/web3.js dan
@solana/spl-token. Kode dalam contoh di bawah ini akan:
- Membuat koneksi
- Menghasilkan keypair untuk membayar transaksi
- Meminta airdrop untuk mendanai keypair
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");
Hasilkan keypair untuk mint account. Kunci publik akan digunakan sebagai alamat mint account.
const mint = new Keypair();
Hitung jumlah minimum lamport yang diperlukan untuk mint account. Fungsi
getMinimumBalanceForRentExemptMint menghitung berapa banyak lamport yang harus
dialokasikan untuk data pada mint account.
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Instruksi pertama memanggil instruksi createAccount dari System Program untuk:
- Alokasikan jumlah byte yang diperlukan untuk menyimpan data mint.
- Transfer lamports dari dompet untuk mendanai akun baru.
- Tetapkan kepemilikan akun ke Token Extensions Program.
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});
Instruksi kedua memanggil Token Extensions Program dengan
instruksi createInitializeMint2Instruction untuk menginisialisasi akun mint
dengan data berikut:
- 2 desimal
- Dompet sebagai otoritas mint dan otoritas pembekuan
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2,wallet.publicKey,wallet.publicKey,TOKEN_2022_PROGRAM_ID);
Tambahkan kedua instruksi ke dalam satu transaksi. Ini memastikan bahwa pembuatan akun dan inisialisasi terjadi secara atomik. (Baik kedua instruksi berhasil, atau tidak ada yang berhasil.)
Pendekatan ini umum digunakan saat membangun transaksi Solana yang kompleks, karena menjamin bahwa semua instruksi dieksekusi bersama.
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Tandatangani dan kirim transaksi. Dua tanda tangan diperlukan:
- Akun dompet menandatangani sebagai pembayar untuk biaya transaksi dan pembuatan akun
- Akun mint menandatangani untuk mengotorisasi penggunaan alamatnya untuk akun baru
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet,mint]);
Tanda tangan transaksi yang dikembalikan dapat digunakan untuk memeriksa transaksi di Solana Explorer.
Is this page helpful?