Ağa yazma
Önceki bölümde, Solana ağından veri okumayı öğrendiniz. Şimdi ağa nasıl veri yazılacağını keşfedin. Solana ağına yazmak, bir veya daha fazla talimat içeren işlemler göndermeyi içerir.
Programlar (akıllı sözleşmeler) bu talimatları ilgili her talimat için kendi iş mantıklarına göre işlerler. Bir işlem gönderdiğinizde, Solana çalışma zamanı her talimatı sırayla ve atomik olarak yürütür (yani ya tüm talimatlar başarılı olur ya da tüm işlem başarısız olur).
Bu bölümde, iki temel örnek göreceksiniz:
- Hesaplar arasında SOL transferi
- Yeni bir token oluşturma
Bu örnekler, Solana programlarını çağırmak için işlemlerin nasıl oluşturulacağını ve gönderileceğini gösterir. Daha fazla ayrıntı için İşlemler ve Talimatlar ve Solana'da Ücretler sayfalarına bakın.
SOL transferi
Bu örnekte, iki hesap arasında SOL transferi yapmayı öğreneceksiniz.
Solana'da, her hesabın sahibi olarak belirli bir program vardır. Yalnızca program sahibi bir hesabın SOL (lamport) bakiyesini düşürebilir.
System Program, tüm "cüzdan" hesaplarının sahibidir. SOL transferi yapmak için, System Program'ın transfer talimatını çağırmanız gerekir.
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}`);
Bunlar, Solana'daki herhangi bir programla etkileşim kurmak için işlem oluşturma adımlarıdır.
Çağırmak istediğiniz talimatı oluşturun.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Talimatı bir işleme ekleyin:
const transaction = new Transaction().add(transferInstruction);
İşlemi imzalayın ve gönderin:
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender] // signer keypair);
Token Oluşturma
Bu örnekte, Token Extensions Program kullanarak Solana'da yeni bir token oluşturmayı öğreneceksiniz. Bu, iki talimat gerektirir:
- Yeni bir hesap oluşturmak için System Program'ı çağırın.
- Bu hesabı bir Mint olarak başlatmak için Token Extensions Program'ı çağırın.
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}`);
İşte örneğin yaptıklarının adım adım açıklaması:
Bir bağlantı oluşturun ve cüzdanı fonlayın
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");
Mint hesabı için bir keypair oluşturun
const mint = new Keypair();
Kira muafiyeti için gereken minimum lamport miktarını hesaplayın
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Yeni bir hesap oluşturmak için bir talimat oluşturun
- Mint verilerini depolamak için gereken alanı ayırın
- Yeni hesabı finanse etmek için cüzdandan lamport transferi yapın
- Hesabın sahipliğini Token Extensions programına atayın
(
TOKEN_2022_PROGRAM_ID
)
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});
Mint hesabını başlatmak için bir talimat oluşturun
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);
Her iki talimatı da bir işleme ekleyin
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
İşlemi her iki gerekli imzalayıcı ile gönderin ve onaylayın
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, mint]);
Mint hesabını ve işlem imzasını yazdırın
console.log("Mint Account:", `${mint.publicKey}`);console.log("Transaction Signature:", `${transactionSignature}`);
Her iki talimatı tek bir işlemde birleştirerek, hesap oluşturma ve başlatma işlemlerinin atomik olarak gerçekleşmesini sağlarsınız. Ya her iki talimat da başarılı olur ya da hiçbiri olmaz. Bu yaklaşım, daha karmaşık Solana işlemleri oluştururken yaygındır, çünkü tüm talimatların birlikte yürütülmesini garanti eder.
Is this page helpful?