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

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

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

يغطي هذا القسم الأمثلة التالية:

  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}`);
const senderBalance = await connection.getBalance(sender.publicKey);
const receiverBalance = await connection.getBalance(receiver.publicKey);
console.log("Sender Balance:", `${senderBalance}`);
console.log("Receiver Balance:", `${receiverBalance}`);
Console
Click to execute the code.

إنشاء Connection للتعامل مع إرسال المعاملات وجلب بيانات الحساب.

في هذا المثال، نقوم بالاتصال بمصادق الاختبار المحلي الذي يعمل على localhost:8899.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

توليد أزواج مفاتيح جديدة لاستخدامها كحسابات المرسل والمستلم.

يتضمن Keypair ما يلي:

  • مفتاح عام يعمل كعنوان الحساب
  • مفتاح خاص يستخدم لتوقيع المعاملات
Generate Keypairs
const sender = new Keypair();
const receiver = new Keypair();

قبل أن نتمكن من تحويل SOL، يجب أن يكون لدى حساب المرسل بعض رصيد SOL.

على الشبكات غير الشبكة الرئيسية، يمكنك استخدام طريقة requestAirdrop للحصول على SOL للاختبار.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

تقوم طريقة SystemProgram.transfer() بإنشاء تعليمات تحول عملة SOL من حساب fromPubkey إلى حساب toPubkey بمقدار lamports المحدد.

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

قم بإنشاء معاملة وإضافة التعليمات إلى المعاملة.

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

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

قم بتوقيع وإرسال المعاملة إلى الشبكة.

يلزم وجود keypair المرسل في مصفوفة الموقعين للتصريح بتحويل عملة SOL من حسابهم.

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

توقيع المعاملة هو معرف فريد يمكن استخدامه للبحث عن المعاملة في مستكشف سولانا.

إنشاء Connection للتعامل مع إرسال المعاملات وجلب بيانات الحساب.

في هذا المثال، نقوم بالاتصال بمصادق الاختبار المحلي الذي يعمل على localhost:8899.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

توليد أزواج مفاتيح جديدة لاستخدامها كحسابات المرسل والمستلم.

يتضمن Keypair ما يلي:

  • مفتاح عام يعمل كعنوان الحساب
  • مفتاح خاص يستخدم لتوقيع المعاملات
Generate Keypairs
const sender = new Keypair();
const receiver = new Keypair();

قبل أن نتمكن من تحويل SOL، يجب أن يكون لدى حساب المرسل بعض رصيد SOL.

على الشبكات غير الشبكة الرئيسية، يمكنك استخدام طريقة requestAirdrop للحصول على SOL للاختبار.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

تقوم طريقة SystemProgram.transfer() بإنشاء تعليمات تحول عملة SOL من حساب fromPubkey إلى حساب toPubkey بمقدار lamports المحدد.

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

قم بإنشاء معاملة وإضافة التعليمات إلى المعاملة.

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

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

قم بتوقيع وإرسال المعاملة إلى الشبكة.

يلزم وجود keypair المرسل في مصفوفة الموقعين للتصريح بتحويل عملة SOL من حسابهم.

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

توقيع المعاملة هو معرف فريد يمكن استخدامه للبحث عن المعاملة في مستكشف سولانا.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");

إنشاء رمز

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

  1. استدعاء System Program لإنشاء حساب جديد.
  2. استدعاء برنامج Token Extensions لتهيئة هذا الحساب كعملية سك.
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,
getMint
} 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("Transaction Signature:", `${transactionSignature}`);
const mintData = await getMint(
connection,
mint.publicKey,
"confirmed",
TOKEN_2022_PROGRAM_ID
);
);
Console
Click to execute the code.

إنشاء رمز على سولانا يتطلب استخدام كل من مكتبتي @solana/web3.js و @solana/spl-token.

  • إنشاء اتصال
  • إنشاء keypair للدفع مقابل المعاملة
  • طلب إيداع جوي لتمويل الـ keypair
Connection & Wallet Setup
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 account.

سيتم استخدام المفتاح العام لهذا الـ keypair كعنوان لحساب الـ mint account.

Mint Keypair
const mint = new Keypair();

احسب الحد الأدنى من lamport المطلوب لحساب mint account.

تقوم وظيفة getMinimumBalanceForRentExemptMint بحساب المقدار الدقيق من SOL (بوحدة lamport) الذي يجب تخصيصه للبيانات على حساب mint account.

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

التعليمة الأولى تستدعي تعليمة createAccount من System Program لـ:

  1. تخصيص البايتات المطلوبة لتخزين بيانات mint account
  2. تحويل وحدات lamport من المحفظة لتمويل الحساب الجديد
  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
});

التعليمة الثانية تستدعي تعليمة createInitializeMint2Instruction من Token Extensions Program لتهيئة حساب mint account بالبيانات التالية:

  • خانتان عشريتان
  • المحفظة كسلطة إصدار وسلطة تجميد
Initialize Mint Instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

أضف كلا التعليمات إلى معاملة واحدة.

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

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

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

قم بالتوقيع وإرسال المعاملة. مطلوب توقيعان:

  • المحفظة توقع كدافع لرسوم المعاملة وإنشاء الحساب
  • العملة توقع للتصريح باستخدام عنوانها للحساب الجديد
Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

يمكن استخدام توقيع المعاملة المُرجع لفحص المعاملة على مستكشف سولانا.

إنشاء رمز على سولانا يتطلب استخدام كل من مكتبتي @solana/web3.js و @solana/spl-token.

  • إنشاء اتصال
  • إنشاء keypair للدفع مقابل المعاملة
  • طلب إيداع جوي لتمويل الـ keypair
Connection & Wallet Setup
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 account.

سيتم استخدام المفتاح العام لهذا الـ keypair كعنوان لحساب الـ mint account.

Mint Keypair
const mint = new Keypair();

احسب الحد الأدنى من lamport المطلوب لحساب mint account.

تقوم وظيفة getMinimumBalanceForRentExemptMint بحساب المقدار الدقيق من SOL (بوحدة lamport) الذي يجب تخصيصه للبيانات على حساب mint account.

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

التعليمة الأولى تستدعي تعليمة createAccount من System Program لـ:

  1. تخصيص البايتات المطلوبة لتخزين بيانات mint account
  2. تحويل وحدات lamport من المحفظة لتمويل الحساب الجديد
  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
});

التعليمة الثانية تستدعي تعليمة createInitializeMint2Instruction من Token Extensions Program لتهيئة حساب mint account بالبيانات التالية:

  • خانتان عشريتان
  • المحفظة كسلطة إصدار وسلطة تجميد
Initialize Mint Instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

أضف كلا التعليمات إلى معاملة واحدة.

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

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

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

قم بالتوقيع وإرسال المعاملة. مطلوب توقيعان:

  • المحفظة توقع كدافع لرسوم المعاملة وإنشاء الحساب
  • العملة توقع للتصريح باستخدام عنوانها للحساب الجديد
Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

يمكن استخدام توقيع المعاملة المُرجع لفحص المعاملة على مستكشف سولانا.

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,
getMint
} from "@solana/spl-token";
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");

Is this page helpful?

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

تعديل الصفحة