رسوم المعاملات
تتطلب كل معاملة على Solana رسومًا أساسية (SOL) لتعويض المدققين عن معالجة المعاملة. يمكنك أيضًا دفع رسوم أولوية اختيارية لزيادة فرصة قيام القائد الحالي (المدقق) بمعالجة معاملتك.
النقاط الرئيسية
- الرسوم الأساسية للمعاملة هي 5000 lamport لكل توقيع على المعاملة.
- رسوم الأولوية (اختيارية) هي رسوم إضافية تدفعها للمدقق لزيادة فرصة معالجة القائد الحالي لمعاملتك.
- رسوم الأولوية تساوي: (حد وحدة الحوسبة × سعر وحدة الحوسبة).
- حد وحدة الحوسبة هو الحد الأقصى لوحدات الحوسبة التي يمكن أن تستخدمها معاملتك.
- سعر وحدة الحوسبة هو السعر لكل وحدة حوسبة، بالميكرو lamport.
- 1,000,000 ميكرو lamport = 1 lamport
- يجب أن يكون دافع رسوم المعاملة حسابًا مملوكًا من قبل System Program.
رسوم المعاملة الأساسية
الرسوم الأساسية هي تكلفة إرسال معاملة. التكلفة هي 5000 lamport لكل توقيع مضمن في المعاملة.
تخرج الرسوم الأساسية من حساب دافع رسوم المعاملة، وهو الموقّع الأول على المعاملة. يجب أن يكون دافع الرسوم حسابًا مملوكًا من قبل System Program.
- 50% يتم حرقها: نصف الرسوم الأساسية يتم حرقها.
- 50% توزيع: النصف يُدفع للمدقق الذي عالج المعاملة.
رسوم الأولوية
رسوم الأولوية هي رسوم اختيارية تُدفع لزيادة فرصة معالجة القائد الحالي لمعاملتك.
- SIMD-0096: يحصل validator الذي يعالج المعاملة على 100% من رسوم الأولوية.
وحدات الحوسبة والحدود
عند معالجة المعاملة، فإنها تستخدم موارد حسابية تُقاس بوحدات الحوسبة (CU). كل تعليمة تخصم من ميزانية وحدات الحوسبة المخصصة للمعاملة.
- الحد الأقصى: يمكن للمعاملة استخدام ما يصل إلى 1.4 مليون وحدة حوسبة.
- الحد الافتراضي: افتراضيًا، يمكن لكل تعليمة استخدام ما يصل إلى 200,000 وحدة حوسبة.
- الحد المخصص: يمكنك طلب حد معين لوحدات الحوسبة عن طريق تضمين تعليمة
SetComputeUnitLimit
في معاملتك.
لمزيد من التفاصيل حول استخدام وحدات الحوسبة:
راجع دليل كيفية طلب الحوسبة المثلى لمزيد من التفاصيل حول استخدام وحدات الحوسبة.
سعر وحدة الحوسبة
سعر وحدة الحوسبة هو مبلغ اختياري، محدد بالميكرو lamport، تدفعه مقابل كل وحدة حوسبة تطلبها. يُستخدم هذا السعر لحساب رسوم الأولوية لمعاملتك.
استخدم هذه الموارد للحصول على توصيات في الوقت الفعلي حول سعر وحدة الحوسبة الحالي:
- واجهة برمجة تطبيقات رسوم الأولوية من Helius
- متتبع رسوم الأولوية العالمي من Triton
راجع دليل كيفية استخدام رسوم الأولوية لمزيد من التفاصيل حول رسوم الأولوية.
حساب رسوم الأولوية
يتم حساب رسوم الأولوية على النحو التالي:
رسوم الأولوية = حد وحدات الحوسبة × سعر وحدة الحوسبة
استخدم هذه التعليمات لتعيين حد وحدات الحوسبة والسعر على المعاملة:
SetComputeUnitLimit
لتعيين حد وحدات محدد.SetComputeUnitPrice
لتحديد السعر لكل وحدة حوسبة.
إذا لم تقدم هذه التعليمات، فستستخدم المعاملة حد وحدات الحوسبة الافتراضي مع سعر وحدة حوسبة يساوي 0 (بدون رسوم أولوية).
تعتمد رسوم الأولوية على حد وحدات الحوسبة الذي تطلبه للمعاملة، وليس على وحدات الحوسبة المستخدمة فعليًا. إذا قمت بتعيين حد وحدات حوسبة مرتفع جدًا أو استخدمت المقدار الافتراضي، فقد تدفع مقابل وحدات حوسبة غير مستخدمة.
أمثلة
توضح الأمثلة التالية كيفية تعيين حد وحدات الحوسبة والسعر للمعاملة.
SDK | مرجع الكود المصدري |
---|---|
solana-sdk (Rust) | ComputeBudgetInstruction |
@solana/web3.js (Typescript) | ComputeBudgetProgram |
const limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({units: 300_000});const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({microLamports: 1});
import {LAMPORTS_PER_SOL,SystemProgram,Transaction,Keypair,Connection,ComputeBudgetProgram,sendAndConfirmTransaction} from "@solana/web3.js";const connection = new Connection("http://localhost:8899", "confirmed");const sender = Keypair.generate();const recipient = new Keypair();const airdropSignature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(airdropSignature, "confirmed");// Create compute budget instructionsconst limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({units: 300_000});const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({microLamports: 1});const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: recipient.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});// Add the compute budget and transfer instructions to a new transactionconst transaction = new Transaction().add(limitInstruction).add(priceInstruction).add(transferInstruction);const signature = await sendAndConfirmTransaction(connection, transaction, [sender]);console.log("Transaction Signature:", signature);
Is this page helpful?