الدفع الأساسي

تتيح سولانا عمليات تحويل رموز فورية وعالمية برسوم أقل من 0.001 دولار. سواء كنت تبني تحويلات عبر الحدود، أو صرف رواتب، أو عمليات خزينة، فإن الدفع الأساسي بالعملة المستقرة يتم تسويته في أقل من ثانية ويكلف جزءاً من السنت.

كيف يعمل

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

راجع كيف تعمل المدفوعات على سولانا لمفاهيم الدفع الأساسية.

المكوّن الإضافي token2022Program() من @solana-program/token-2022 يوسّع عميل @solana/kit الخاص بك بمساعد client.token2022. تتولى طريقة transferToATA الخاصة به استنتاج ATA وبناء المعاملات تلقائيًا، وهو مثالي لعمليات نقل الدفع الفردي.

توضح الخطوات أدناه التدفق الأساسي. راجع العرض التوضيحي للحصول على كود كامل قابل للتشغيل.

إنشاء مساعد الرمز

أضف المكوّن الإضافي token2022Program() إلى عميلك باستخدام .use(token2022Program()). يتيح هذا الوصول إلى client.token2022، التي توفر instructions طرقًا لعمليات الرمز الشائعة.

استخدم token2022Program() للعناوين المملوكة لبرنامج Token-2022، أو tokenProgram() من @solana-program/token للعناوين المملوكة لـ Token Program الأصلي.

إرسال الدفع

استخدم transferToATA() لنقل الرموز بين المحافظ. تتولى هذه الطريقة:

  • استنتاج ATA: يستنتج تلقائيًا Associated Token Accounts (ATAs) للمرسل والمستلم. في حال عدم وجود associated token account الخاص بالمستلم، تُضاف تعليمة إنشاء الحساب تلقائيًا إلى نفس المعاملة.
  • المبالغ المتحقق منها: مرّر amount بالوحدات الأساسية مع decimals الخاص بالعنوان. يُتحقق من عملية النقل مقابل الكسور العشرية للعنوان على السلسلة (مثلاً: 250000 وحدة أساسية -> 0.25 رمز، إذا كان العنوان يحتوي على 6 كسور عشرية)
  • بناء المعاملة: يقوم sendTransaction() ببناء المعاملة وتوقيعها وإرسالها، محللًا إلى نتيجة يحتوي context.signature الخاص بها على توقيع المعاملة
Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n,
decimals: 6
})
.sendTransaction();

التحقق من الأرصدة

بعد اكتمال عملية النقل، اقرأ أرصدة الرموز من RPC. استنتج token account الخاص بكل محفظة باستخدام findAssociatedTokenPda()، ثم استدعِ getTokenAccountBalance() لجلب الرصيد لذلك الحساب.

Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n,
decimals: 6
})
.sendTransaction();
const [senderAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: sender.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const [recipientAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: recipient.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();
const recipientBalance = await client.rpc
.getTokenAccountBalance(recipientAta)
.send();

إنشاء مساعد الرمز

أضف المكوّن الإضافي token2022Program() إلى عميلك باستخدام .use(token2022Program()). يتيح هذا الوصول إلى client.token2022، التي توفر instructions طرقًا لعمليات الرمز الشائعة.

استخدم token2022Program() للعناوين المملوكة لبرنامج Token-2022، أو tokenProgram() من @solana-program/token للعناوين المملوكة لـ Token Program الأصلي.

إرسال الدفع

استخدم transferToATA() لنقل الرموز بين المحافظ. تتولى هذه الطريقة:

  • استنتاج ATA: يستنتج تلقائيًا Associated Token Accounts (ATAs) للمرسل والمستلم. في حال عدم وجود associated token account الخاص بالمستلم، تُضاف تعليمة إنشاء الحساب تلقائيًا إلى نفس المعاملة.
  • المبالغ المتحقق منها: مرّر amount بالوحدات الأساسية مع decimals الخاص بالعنوان. يُتحقق من عملية النقل مقابل الكسور العشرية للعنوان على السلسلة (مثلاً: 250000 وحدة أساسية -> 0.25 رمز، إذا كان العنوان يحتوي على 6 كسور عشرية)
  • بناء المعاملة: يقوم sendTransaction() ببناء المعاملة وتوقيعها وإرسالها، محللًا إلى نتيجة يحتوي context.signature الخاص بها على توقيع المعاملة

التحقق من الأرصدة

بعد اكتمال عملية النقل، اقرأ أرصدة الرموز من RPC. استنتج token account الخاص بكل محفظة باستخدام findAssociatedTokenPda()، ثم استدعِ getTokenAccountBalance() لجلب الرصيد لذلك الحساب.

Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());

عرض توضيحي

Demo
// Generate signers for sender and recipient
const sender = await generateKeyPairSigner();
const recipient = await generateKeyPairSigner();
console.log("Sender Address:", sender.address);
console.log("Recipient Address:", recipient.address);
// Demo Setup: Create client, mint account, and fund the sender with initial tokens
const { client, mint } = await demoSetup(sender);
console.log("\nMint Address:", mint.address);
// =============================================================================
// Basic Token Payment Demo
// =============================================================================
// Transfer tokens from sender to recipient. The source and destination ATAs are
// derived automatically, and the recipient's ATA is created if it does not exist.
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n, // 0.25 tokens (base units for a mint with 6 decimals)
decimals: 6
})
.sendTransaction();
console.log("\n=== Token Payment Complete ===");
console.log("Transaction Signature:", result.context.signature);
// Derive the sender and recipient ATAs to read their balances
const [senderAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: sender.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const [recipientAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: recipient.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
// Fetch final token account balances via RPC
const senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();
const recipientBalance = await client.rpc
.getTokenAccountBalance(recipientAta)
.send();
console.log(
"\nSender Token Account Balance:",
senderBalance.value.uiAmountString
);
console.log(
"Recipient Token Account Balance:",
recipientBalance.value.uiAmountString
);
// =============================================================================
// Demo Setup Helper Function
// =============================================================================
Console
Click to execute the code.

Is this page helpful?

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

تعديل الصفحة