إنتقل إلى المحتوى الرئيسي

استخدام عملية الكتابة لإرسال معاملة

الجمهور: المطورون المستعدون لإجراء أول عملية تغيير للحالة على السلسلة.

المتطلبات الأساسية: محفظة مموّلة على شبكة Sui devnet وبيئة Node.js أساسية.

الهدف: كتابة برنامج نصي لتحويل رموز Sui إلى عنوان آخر، مع فهم دور الغاز والتوقيعات.


مقدمة

في البرامج التعليمية السابقة، قمت بإجراء عمليات قراءة عبر الاستعلام من SuiClient للحصول على البيانات دون تكبد رسوم شبكة.

الآن، ستقوم بإجراء عملية كتابة لتحويل رموز Sui من محفظتك إلى عنوان آخر. نظرًا لأن هذا يعدل الحالة على السلسلة، ينطبق شرطان أساسيان:

  1. التوقيع: يجب عليك توقيع الطلب مشفرًا لإثبات ملكيتك للأموال.
  2. الغاز (رسوم الإرسال): يجب عليك دفع رسوم برموز Sui لتعويض الشبكة عن معالجة المعاملة.

المتطلبات الأساسية

لتشغيل هذا البرنامج التعليمي، تحتاج إلى:

  • محفظة مموّلة: عبارة استرداد مكونة من 12 كلمة لمحفظة تحتوي على رموز Sui devnet. يمكنك طلب رموز اختبار مجانية عبر صنبور Sui على ديسكورد أو مباشرةً داخل محفظة Sui متوافقة.
  • حزمة أزواج المفاتيح Ed25519: @mysten/sui لتوقيع المعاملة.

قم بتثبيت الحزمة المطلوبة (إذا لم تكن قد قمت بذلك بالفعل):

Terminal
npm install @mysten/sui
تحذير

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

1. استيراد التبعيات وتهيئة العميل

أنشئ ملفاً باسم transfer.js. استورد SuiClient للاتصال بالشبكة و Ed25519Keypair لتوقيع المعاملة.

transfer.js
import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
import { Transaction } from '@mysten/sui/transactions';

// 1. الاتصال بشبكة Devnet
const client = new SuiClient({ url: getFullnodeUrl('devnet') });

// 2. تحميل محفظتك (المرسل)
// استبدل هذا بعبارة الاسترداد الفعلية المكونة من 12 كلمة
const MNEMONIC = "word1 word2 word3 ... word12";
const keypair = Ed25519Keypair.deriveKeypair(MNEMONIC);
const senderAddress = keypair.getPublicKey().toSuiAddress();

console.log(`📦 عنوان المرسل: ${senderAddress}`);
تلميح

قبل إرسال معاملة، يحتاج عنوان المرسل الخاص بك إلى رموز اختبار لدفع رسوم الغاز. انسخ عنوان المرسل المطبوع في الطرفية واطلب الرموز عبر قناة #devnet-faucet في ديسكورد Sui.

2. إنشاء المعاملة

في Sui، تقوم بإنشاء Transaction بدلاً من إرسال أوامر أولية. فكر في هذا كملء ملصق شحن وتعبئة العناصر في صندوق قبل إغلاقه بإحكام.

استخدم الأمر tx.splitCoins لاقتطاع مبلغ محدد من عملة الغاز الأساسية الخاصة بك:

transfer.js
// 3. تحديد المستلم
const RECIPIENT = '0x9999...'; // استبدله بعنوان صديق أو عنوان حرق

// 4. إنشاء حاوية المعاملة
const tx = new Transaction();

// اقتطاع 1000 MIST (أصغر وحدة من SUI) من عملة الغاز
const [coinToSend] = tx.splitCoins(tx.gas, [1000]);

// تحويل العملة المقتطعة إلى المستلم
tx.transferObjects([coinToSend], RECIPIENT);

3. توقيع المعاملة وإرسالها

تحسب هذه الخطوة رسوم الغاز وتدفعها قبل تنفيذ المعاملة على السلسلة.

دورة حياة معاملة PTB
┌─────────────────────────┐ ┌─────────────────────────┐ ┌───────────────────────────┐
│ 1. إنشاء المعاملة │ ──► │ 2. التوقيع بزوج المفاتيح │ ──► │ 3. الإرسال عبر SuiClient │
│ (splitCoins, transfer) │ │ (إثبات تشفيري) │ │ (البث إلى Devnet) │
└─────────────────────────┘ └─────────────────────────┘ └───────────────────────────┘

عند استدعاء signAndExecuteTransaction، يقوم SuiClient بما يلي:

  1. تقدير الغاز: يحسب التعقيد الحسابي ويحدد ميزانية الغاز المطلوبة.
  2. التوقيع: يطبق توقيع keypair للموافقة على تغيير الحالة.
  3. الإرسال: ينقل المعاملة الموقعة عبر عقدة RPC الكاملة إلى الشبكة.
transfer.js
async function sendTransaction() {
try {
console.log("📝 جاري توقيع المعاملة وإرسالها...");

const result = await client.signAndExecuteTransaction({
signer: keypair,
transaction: tx,
});

console.log("✅ تم إرسال المعاملة!");
console.log(`Digest (معرف التتبع): ${result.digest}`);

} catch (error) {
console.error("❌ فشلت المعاملة:", error);
}
}

sendTransaction();

فهم الغاز في هذه المعاملة

لست بحاجة إلى حساب تكاليف الغاز يدوياً.

  • الميزانية التلقائية: بشكل افتراضي، تقدر الحزمة SDK تكلفة الغاز نيابة عنك. وتحدد ميزانية كافية للتنفيذ دون مبالغة في الدفع.
  • مصدر الدفع: تختار الحزمة SDK تلقائياً كائن عملة SUI من محفظتك لدفع هذه الرسوم. لذلك، احرص دائماً على الاحتفاظ بكمية صغيرة من SUI في محفظتك لتغطية الغاز.

المخرجات المتوقعة

عند النجاح، يطبع البرنامج النصي Transaction Digest (معرّف تتبع معاملتك):

مخرجات الطرفية
📦 عنوان المرسل: 0x123...
📝 جاري توقيع المعاملة وإرسالها...
✅ تم إرسال المعاملة!
Digest (معرف التتبع): 5T7x...9B2a

انسخ هذا الملخص وابحث عنه على Suiscan. يعرض المستكشف السجل الدائم على السلسلة، بما في ذلك استهلاك الغاز وحالة التنفيذ.


الخطوات التالية

الآن بعد أن قمت بتنفيذ أول معاملة كتابة على السلسلة: