رسوم المعاملات

تتطلب كل معاملة على سولانا رسوم معاملة، تُدفع بعملة SOL. تنقسم رسوم المعاملات إلى جزأين: الرسوم الأساسية ورسوم الأولوية. تعوض الرسوم الأساسية المدققين عن معالجة المعاملة. رسوم الأولوية هي رسوم اختيارية، لزيادة فرصة معالجة المعاملة من قبل القائد الحالي.

الرسوم الأساسية

تكلف كل معاملة 5000 لامبورت لكل توقيع مضمن. يتم دفع هذه الرسوم من قبل الموقع الأول على المعاملة ويجب أن تُدفع من حساب مملوك لـ System Program. تنقسم الرسوم الأساسية كما يلي:

  • 50% يتم حرقها: نصف الرسوم يتم حرقها (إزالتها من إمدادات SOL المتداولة).
  • 50% يتم توزيعها: النصف الآخر يتم دفعه للمدقق الذي عالج المعاملة.

رسوم الأولوية

رسوم الأولوية هي رسوم اختيارية تُستخدم لزيادة فرصة معالجة معاملتك من قبل القائد الحالي (المدقق). يتلقى المدقق 100% من رسوم الأولوية. يمكن تعيين رسوم الأولوية عن طريق ضبط سعر وحدة الحوسبة (CU) للمعاملة وحد وحدة الحوسبة. (انظر دليل كيفية استخدام رسوم الأولوية لمزيد من التفاصيل حول رسوم الأولوية.)

يتم حساب رسوم الأولوية على النحو التالي:

رسوم الأولوية = حد وحدات الحوسبة × سعر وحدة الحوسبة

تُستخدم رسوم الأولوية لتحديد أولوية معاملتك، بالنسبة للمعاملات الأخرى. يتم حسابها باستخدام الصيغة التالية:

أولوية المعاملة = رسوم الأولوية ÷ حد وحدات الحوسبة

حد وحدة الحوسبة

افتراضيًا، يتم تخصيص 200,000 وحدة حوسبة لكل تعليمة و1.4 مليون وحدة حوسبة لكل معاملة. يمكنك تغيير هذه الإعدادات الافتراضية عن طريق تضمين تعليمة SetComputeUnitLimit في معاملتك.

لحساب حد وحدة الحوسبة المناسب لمعاملتك، نوصي بالخطوات التالية:

  1. قم بتقدير وحدات CU المطلوبة عن طريق محاكاة المعاملة
  2. أضف هامش أمان بنسبة 10% إلى هذا التقدير

يتم تحديد رسوم الأولوية من خلال حد وحدة الحوسبة المطلوب للمعاملة، وليس العدد الفعلي لوحدات الحوسبة المستخدمة. إذا قمت بتعيين حد وحدة حوسبة مرتفع جدًا أو استخدمت المقدار الافتراضي، فقد تدفع مقابل وحدات حوسبة غير مستخدمة.

سعر وحدة الحوسبة

سعر وحدة الحوسبة هو مبلغ اختياري من ميكرو-لامبورت يُدفع مقابل كل وحدة CU مطلوبة. يمكنك اعتبار سعر CU كإكرامية لتشجيع الـvalidator على إعطاء الأولوية لمعاملتك. لتعيين سعر CU، قم بتضمين تعليمة ComputeBudgetProgram.setComputeUnitPrice في معاملتك.

السعر الافتراضي لـ CU هو 0، مما يعني أن رسوم الأولوية الافتراضية هي أيضًا 0.

للمساعدة في تحديد أفضل سعر CU لمعاملتك، راجع توصية سعر CU في الوقت الفعلي المدرجة في الجدول أدناه.

المزودواجهة برمجة تطبيقات رسوم الأولوية
Heliusالتوثيق
QuickNodeالتوثيق
Tritonالتوثيق

مثال

توضح الأمثلة أدناه كيفية تعيين حد CU وسعر CU على معاملة باستخدام مكتبات سولانا.

SDKمرجع الكود المصدري
@solana/web3.js (Typescript)ComputeBudgetProgram
solana-sdk (Rust)ComputeBudgetInstruction
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 instructions
const 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 transaction
const transaction = new Transaction()
.add(limitInstruction)
.add(priceInstruction)
.add(transferInstruction);
const signature = await sendAndConfirmTransaction(connection, transaction, [
sender
]);
console.log("Transaction Signature:", signature);
Console
Click to execute the code.

Is this page helpful?

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

تعديل الصفحة