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

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

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

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

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

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

تحويل SOL

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

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

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}`);
Click to execute the code.

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

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

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

إنشاء رمز

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

  1. استدعاء برنامج النظام لإنشاء حساب جديد.
  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}`);
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");

إنشاء زوج مفاتيح لحساب Mint

Mint Keypair
const mint = new Keypair();

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

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

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

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

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

تعديل الصفحة