كيفية عمل المدفوعات على سولانا

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

نموذج الدفع التقليديسولاناالوصف
معرف العميل / رقم الحسابعنوان المحفظةمعرف فريد لصاحب الحساب
العملة (USD، EUR)إصدار الرمز (USDG، USDC)نوع الأصل الذي يتم تحويله
الرصيد حسب العملةحساب الرمز (ATA)يحتفظ برصيد عملة/إصدار معين

تمامًا كما أن لعميل البنك هوية واحدة ولكن لديه أرصدة منفصلة لكل عملة، فإن محفظة سولانا لها عنوان واحد ولكن حساب رمز مميز لكل أصل تحتفظ به. دعنا نحلل كل مكون.

المحافظ: المرسلون والمستقبلون

تتضمن كل عملية دفع طرفين، يتم تحديد كل منهما بواسطة عنوان محفظة—مفتاح عام فريد مكون من 32 بايت (على سبيل المثال، 7EcDhS...).

  • المرسل: المحفظة التي تبدأ الدفع. يجب أن تحتوي على رصيد كافٍ من حساب العملة المستقرة وتوقيع المعاملة.
  • المستقبل: المحفظة الوجهة. لا يحتاج إلى التوقيع أو الاحتفاظ برصيد موجود.
  • دافع الرسوم: محفظة دافع الرسوم الاختيارية. يمكن استخدامها لدعم أو تمكين معاملات العملات المستقرة فقط بين المستخدمين.

فكر في عناوين المحافظ مثل أرقام الحسابات البنكية: عامة، آمنة للمشاركة، ومطلوبة لإرسال أو استقبال الأموال.

العملات المستقرة

يُشار إلى العملات المستقرة باسم "الرموز" على سولانا. تمثل الرموز نوع أصل على الشبكة. كل رمز له معرف فريد يسمى "عنوان الإصدار". عند بناء أنظمة الدفع، ستشير إلى عناوين الإصدار هذه لتحديد الأصل الذي تتفاعل معه. فيما يلي بعض إصدارات العملات المستقرة الشائعة على الشبكة الرئيسية:

الرمزالمُصدرعنوان السك
USDCCircleEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
USDTTetherEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
PYUSDPayPal2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
USDGPaxos2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH

لمزيد من المعلومات حول العملات المستقرة على سولانا، راجع صفحة الحلول العملات المستقرة.

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

حسابات الرموز

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

حسابات الرموزحسابات الرموز

حساب الرمز المرتبط هو حساب رمز حتمي مرتبط بمحفظة وسك محددين. بمعرفة عنوان المحفظة والسك، يكون عنوان حساب الرمز المرتبط هو نفسه دائمًا.

  1. حساب رمز مرتبط واحد لكل سك. تمتلك المحفظة حساب رمز مرتبط واحد بالضبط لـ USDC، وواحد لـ USDT، إلخ.
  2. يجب أن يكون موجودًا قبل الاستلام. لا يمكنك إرسال رموز إلى حساب رمز مرتبط غير موجود.
  3. المرسل عادة ينشئه. إذا لم يكن حساب الرمز المرتبط للمستقبل موجودًا، يمكن للمرسل إنشاؤه كجزء من معاملة الدفع.
import { findAssociatedTokenPda } from "@solana-program/token";
const [receiverATA] = await findAssociatedTokenPda({
mint: USDG_MINT_ADDRESS,
owner: receiverWallet.address,
tokenProgram: TOKEN_PROGRAM_ADDRESS
});

برامج الرموز

على سولانا، البرامج هي منطق قابل للتنفيذ يحكم حالة الحساب. حسابات الرموز تُدار بواسطة برنامج رمز—الكود الموجود على السلسلة الذي يتحقق من التحويلات ويحدث الأرصدة بشكل ذري.

تمتلك سولانا برنامجي رموز:

البرنامجالعنوانأمثلة على الرموز التي
تستخدم هذا البرنامج
Token ProgramTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DAUSDC، USDT
Token-2022TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbPYUSD، USDG

يضيف Token-2022 (يُسمى أيضاً "Token Extensions") ميزات مثل خطافات التحويل ورسوم التحويل والتحويلات السرية. يعمل كلا البرنامجين بشكل مماثل للتحويلات الأساسية، ولكن يجب عليك استخدام البرنامج الصحيح عند اشتقاق ATAs.

لماذا هذا مهم

يتحكم Token Program المستخدم لإنشاء رمز في التعليمات وحالة الحساب للرمز. إذا استخدمت البرنامج الخاطئ، فلن تتمكن من تحويل الرمز.

يتم اشتقاق ATAs من ثلاثة مدخلات: wallet + mint + token_program. استخدام البرنامج الخاطئ ينتج عنه عنوان مختلف تماماً:

import {
findAssociatedTokenPda,
TOKEN_PROGRAM_ADDRESS
} from "@solana-program/token";
import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";
// USDC uses Token Program
const [usdcAta] = await findAssociatedTokenPda({
mint: USDC_MINT,
owner: walletAddress,
tokenProgram: TOKEN_PROGRAM_ADDRESS // ✓ Correct
});
// ❌ This will produce a different address because it uses the wrong program
const [wrongUsdcAta] = await findAssociatedTokenPda({
mint: USDC_MINT,
owner: walletAddress,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ❌ Wrong program
});
// PYUSD uses Token-2022
const [pyusdAta] = await findAssociatedTokenPda({
mint: PYUSD_MINT,
owner: walletAddress,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ✓ Correct
});

سيؤدي اشتقاق ATA باستخدام البرنامج الخاطئ إلى إنتاج عنوان غير صالح. قم دائماً بمطابقة البرنامج مع mint الرمز.

ينطبق نفس المبدأ على تعليمات التحويل. لكل token program تعليمة تحويل خاصة به، ويجب عليك استدعاء التعليمة الصحيحة:

import { getTransferInstruction } from "@solana-program/token";
import { getTransferInstruction as getTransferInstruction22 } from "@solana-program/token-2022";
// For USDC (Token Program)
const usdcTransferIx = getTransferInstruction({
source: senderUsdcAta,
destination: receiverUsdcAta,
authority: senderWallet,
amount: 1_000_000n // 1 USDC (6 decimals)
});
// For PYUSD (Token-2022)
const pyusdTransferIx = getTransferInstruction22({
source: senderPyusdAta,
destination: receiverPyusdAta,
authority: senderWallet,
amount: 1_000_000n // 1 PYUSD (6 decimals)
});
// *Note*: Most token program JS Client functions include the ability
// to specify the token program address. Generally, defining it is a
// good practice to ensure you are fully aware of the program you are using
const usdcTransferIx2 = getTransferInstruction(
{
source: senderUsdcAta,
destination: receiverUsdcAta,
authority: senderWallet,
amount: 1_000_000n // 1 USDC (6 decimals)
},
{ tokenProgram: TOKEN_PROGRAM_ADDRESS }
);

سيفشل إرسال تعليمة تحويل إلى البرنامج الخاطئ. يتحقق البرنامج من أنه يمتلك حسابات الرموز المعنية - لا يمكن تحويل الحسابات التي تم إنشاؤها بواسطة Token Program عبر Token-2022، والعكس صحيح.

للتحقق من البرنامج الذي يستخدمه رمز أو token account، قم بجلب mint أو token account وتحقق من حقل owner الخاص به:

import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const accountInfo = await rpc.getAccountInfo(address(mintAddress)).send();
// The owner field tells you which program manages this token
const tokenProgram = accountInfo.value?.owner;
// Returns: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA (Token Program)
// or: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb (Token-2022)

بالنسبة لتطبيقات الدفع، قم بتخزين عنوان البرنامج الصحيح جنباً إلى جنب مع كل رمز مدعوم:

const SUPPORTED_TOKENS = {
USDC: {
mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
program: TOKEN_PROGRAM_ADDRESS,
decimals: 6
},
PYUSD: {
mint: "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",
program: TOKEN_2022_PROGRAM_ADDRESS,
decimals: 6
}
};

امتدادات الرمز المميز

يوفر برنامج امتدادات الرمز المميز (Token 2022) المزيد من الميزات من خلال تعليمات إضافية يُشار إليها بالامتدادات. الامتدادات هي ميزات اختيارية يمكنك إضافتها إلى سك الرمز المميز أو حساب الرمز المميز.

لمزيد من المعلومات حول امتدادات الرمز المميز، راجع وثائق Token Extensions.

الرسوم

تتضمن مدفوعات سولانا ما يصل إلى ثلاثة مكونات تكلفة:

نوع الرسومSOLUSD (تقديري)متى
رسوم المعاملة الأساسية5,000 lamports*~$0.0007كل معاملة (قم بتجميع مدفوعات متعددة لتوزيع التكلفة)
رسوم الأولويةمتغيرةمتغيرةاختيارية؛ إدراج أسرع أثناء الازدحام
إنشاء الحساب (rent)~0.0029 SOL~$0.40فقط عند إنشاء حساب رمز مميز جديد

التكلفة الإجمالية لكل دفعة: أقل من $0.001 لمعظم التحويلات. إذا كنت تنشئ حساب رمز مميز جديد، توقع حوالي $0.40 إجمالاً.

تستخدم سولانا أسواق رسوم محلية—معاملات كل برنامج تتنافس فقط مع المعاملات الأخرى التي تستهدف نفس الحالة. هذا يعني أن رسوم الدفع تبقى منخفضة ويمكن التنبؤ بها حتى خلال فترات النشاط العالي للشبكة في أماكن أخرى. من المخطط أيضاً تخفيض تكاليف rent بنسبة 50% في المستقبل القريب.

يمكنك تجريد الرسوم بالكامل بحيث لا يتفاعل المستخدمون أبداً مع SOL. راجع تجريد الرسوم لأنماط التنفيذ.

المعاملات والتعليمات

المعاملة هي وحدة التنفيذ الذرية على سولانا—إما أن تنجح كل عملية، أو لا تنجح أي منها. تحتوي كل معاملة على تعليمة واحدة أو أكثر، وهي أوامر فردية (مثل "تحويل 10 USDC"، "إنشاء حساب رمز مميز").

قد تتضمن معاملة دفع نموذجية تعليمتين: إنشاء حساب الرمز المميز للمستلم (إذا لزم الأمر)، ثم تحويل الرموز المميزة. كلاهما ينفذ بشكل ذري—لا توجد حالات جزئية. كما سترى في معالجة الدفع، يمكنك تجميع مدفوعات متعددة في معاملة واحدة لتقليل التكاليف وزيادة الإنتاجية.

الجمع بين كل شيء

تدفق الدفع النموذجي:

  1. جمع المدخلات. احصل على عناوين محفظة المرسل والمستقبل وعنوان mint للرمز المميز الذي يتم تحويله.
  2. اشتقاق ATAs. حدد حسابات الرموز المميزة لكلا الطرفين.
  3. البناء والتوقيع. قم ببناء المعاملة مع تعليمات التحويل الضرورية، ووقع بمفتاح المرسل.
  4. الإرسال والتأكيد. تتم تسوية المعاملة في أقل من ثانية.

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


* lamport هي أصغر وحدة من SOL وتساوي 0.000000001 SOL

Is this page helpful?

تدار بواسطة

© 2026 مؤسسة سولانا.
جميع الحقوق محفوظة.
تواصل معنا