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:

  1. Hesaplar arasında SOL transferi
  2. 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.

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.

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.

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

Talimatı bir işleme ekleyin:

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

İşlemi imzalayın ve gönderin:

Send Transaction
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:

  1. Yeni bir hesap oluşturmak için System Program'ı çağırın.
  2. Bu hesabı bir Mint olarak başlatmak için Token Extensions Program'ı çağırın.
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.

İşte örneğin yaptıklarının adım adım açıklaması:

Bir bağlantı oluşturun ve cüzdanı fonlayın

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");

Mint hesabı için bir keypair oluşturun

Mint Keypair
const mint = new Keypair();

Kira muafiyeti için gereken minimum lamport miktarını hesaplayın

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Yeni bir hesap oluşturmak için bir talimat oluşturun

  1. Mint verilerini depolamak için gereken alanı ayırın
  2. Yeni hesabı finanse etmek için cüzdandan lamport transferi yapın
  3. Hesabın sahipliğini Token Extensions programına atayın (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
});

Mint hesabını başlatmak için bir talimat oluşturun

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

Her iki talimatı da bir işleme ekleyin

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

İşlemi her iki gerekli imzalayıcı ile gönderin ve onaylayın

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

Mint hesabını ve işlem imzasını yazdırın

Output
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?

İçindekiler

Sayfayı Düzenle