الكتابة إلى الشبكة

في القسم السابق، تعلمت كيفية قراءة البيانات من شبكة سولانا. الآن استكشف كيفية كتابة البيانات إليها. تتضمن الكتابة إلى شبكة سولانا إرسال معاملات تحتوي على تعليمة واحدة أو أكثر.

تعالج البرامج (العقود الذكية) هذه التعليمات وفقًا لمنطق الأعمال الخاص بها لكل تعليمة على حدة. عندما تقدم معاملة، ينفذ وقت تشغيل سولانا كل تعليمة بالتسلسل وبشكل ذري (مما يعني إما أن تنجح جميع التعليمات أو تفشل المعاملة بأكملها).

في هذا القسم، سترى مثالين أساسيين:

  1. تحويل SOL بين الحسابات
  2. إنشاء رمز جديد

توضح هذه الأمثلة كيفية بناء وإرسال المعاملات لاستدعاء برامج سولانا. لمزيد من التفاصيل، راجع صفحات المعاملات والتعليمات و الرسوم على سولانا.

تحويل SOL

في هذا المثال، ستتعلم كيفية تحويل SOL بين حسابين.

على سولانا، يمتلك كل حساب برنامجًا محددًا كمالك له. فقط البرنامج المالك يمكنه خصم رصيد SOL (لامبورت) للحساب.

System Program هو المالك لجميع حسابات "المحفظة". لتحويل SOL، يجب عليك استدعاء تعليمة transfer الخاصة بـ 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}`);
Console
Click to execute the code.

هذه هي الخطوات لبناء المعاملات للتفاعل مع أي برنامج على سولانا.

إنشاء التعليمات التي تريد استدعاءها.

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

إضافة التعليمات إلى معاملة:

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

توقيع وإرسال المعاملة:

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

إنشاء رمز

في هذا المثال، ستتعلم كيفية إنشاء رمز جديد على سولانا باستخدام Token Extensions Program. يتطلب ذلك تعليمتين:

  1. استدعاء System Program لإنشاء حساب جديد.
  2. استدعاء Token Extensions Program لتهيئة ذلك الحساب كعملة.
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}`);
Console
Click to execute the code.

إليك تفصيلاً خطوة بخطوة لما يفعله المثال:

إنشاء اتصال وتمويل المحفظة

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

إنشاء keypair لحساب Mint

Mint Keypair
const mint = new Keypair();

حساب الحد الأدنى من lamports للإعفاء من rent

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

إنشاء تعليمات لإنشاء حساب جديد

  1. تخصيص المساحة المطلوبة لتخزين بيانات mint
  2. تحويل lamports من المحفظة لتمويل الحساب الجديد
  3. تعيين ملكية الحساب إلى Token Extensions program (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

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

إضافة كلا التعليمات إلى معاملة

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

إرسال وتأكيد المعاملة مع كلا الموقعين المطلوبين

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

طباعة حساب Mint وتوقيع المعاملة

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

من خلال دمج كلا التعليمات في معاملة واحدة، فإنك تضمن أن إنشاء الحساب وتهيئته يحدثان بشكل ذري. إما أن تنجح كلتا التعليمتين، أو لا تنجح أي منهما. هذا النهج شائع عند بناء معاملات سولانا أكثر تعقيدًا، حيث يضمن تنفيذ جميع التعليمات معًا.

Is this page helpful?

جدول المحتويات

تعديل الصفحة