هل تستخدم Kora v2.2.0-beta؟ راجع إعدادات الإصدار التجريبي للخيارات الجديدة: حزم Jito، حماية Lighthouse، reCAPTCHA، وحدود الاستخدام.
ستقوم عقدة Kora الخاصة بك بتوقيع المعاملات نيابة عن المستخدمين، لذلك من المهم
تكوينها لتوقيع المعاملات التي تلبي متطلبات عملك فقط. تمنحك Kora مرونة كبيرة في
كيفية تكوين عقدتك، ولكن من المهم فهم تأثيرات إعداداتك. kora.toml هو مركز
التحكم في إعدادات Kora الخاصة بك. يوفر هذا المستند مرجعاً شاملاً لتكوين عقدة
دافع Kora من خلال ملف الإعدادات kora.toml.
نظرة عامة
يتحكم ملف kora.toml في جميع جوانب سلوك عقدة Kora الخاصة بك بما في ذلك:
- تحديد المعدل والمصادقة
- توفر طرق RPC
- قواعد التحقق من المعاملات
- نماذج تسعير الرسوم
- سياسات الأمان
- توفر طرق RPC
- نماذج تسعير الرسوم
- إعدادات عنوان الدفع
- مراقبة الأداء
يجب وضع ملف الإعدادات الخاص بك في دليل النشر أو تحديده عبر علامة --config عند
بدء تشغيل الخادم.
أقسام الإعدادات
ملف kora.toml منظم في أقسام، لكل منها مجموعة خاصة من الخيارات. يشرح هذا الدليل
كل قسم والخيارات المتاحة:
- سياسات Kora الأساسية - إعدادات الخادم الأساسية
- مصادقة Kora - إعدادات المصادقة
- تخزين Kora المؤقت - التخزين المؤقت Redis لاستدعاءات RPC
- حدود استخدام Kora - تحديد المعاملات لكل محفظة
- طرق Kora المُمكَّنة - طرق Kora RPC المطلوب تمكينها
- سياسات التحقق - التحقق من المعاملات والأمان
- حظر امتدادات Token-2022 - حظر امتدادات Token-2022 الخطرة
- سياسة دافع الرسوم - قيود على محفظة دافع الرسوم
- إعدادات السعر - نماذج تسعير رسوم المعاملات
- مراقبة الأداء - جمع ومراقبة المقاييس
- مثال كامل - إعدادات جاهزة للإنتاج بشكل كامل
أمثلة على أقسام ملف kora.toml:
[kora]# Core server settings[kora.auth]# Authentication settings[kora.cache]# Redis caching configuration[kora.usage_limit]# Per-wallet transaction limiting[kora.enabled_methods]# Kora RPC methods to enable[validation]# Transaction validation rules[validation.token2022]# Token-2022 extension blocking[validation.fee_payer_policy]# Restrictions on fee payer wallet[validation.price]# Transaction fee pricing models[metrics]# Performance monitoring
سياسات Kora الأساسية
يقوم قسم [kora] بتكوين السلوك الأساسي للخادم:
[kora]rate_limit = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
rate_limit | الحد الأقصى العام للمعدل (الطلبات في الثانية) عبر جميع العملاء | ✅ | رقم |
payment_address | عنوان الدفع الاختياري لاستلام رموز الدفع (افتراضياً عنوان الموقّع(ين) إذا لم يتم تحديده) | ❌ | سلسلة مشفرة b58 |
مصادقة Kora
يقوم قسم [kora.auth] بتكوين المصادقة لخادم Kora:
[kora.auth]api_key = "kora_live_sk_1234567890abcdef"hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"max_timestamp_age = 300
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
api_key | مفتاح API للمصادقة البسيطة | ❌ | سلسلة |
hmac_secret | سر HMAC للمصادقة المستندة إلى التوقيع (32 حرفاً كحد أدنى) | ❌ | سلسلة |
max_timestamp_age | الحد الأقصى لعمر الطابع الزمني لـ HMAC بالثواني | ❌ (افتراضي: 300) | رقم |
ملاحظة: يحدد
api_keyوhmac_secretسياسة مصادقة عامة لجميع العملاء. للحصول على إعداد مفصل للمصادقة، راجع دليل المصادقة.
التخزين المؤقت في Kora (اختياري)
يقوم قسم [kora.cache] بتكوين التخزين المؤقت المستند إلى Redis لاستدعاءات RPC
الخاصة بـ سولانا. يمكن أن يحسن هذا الأداء بشكل كبير عن طريق تقليل عمليات جلب
بيانات الحساب الزائدة:
[kora.cache]enabled = true # Enable/disable cachingurl = "redis://localhost:6379" # Redis connection URLdefault_ttl = 300 # Default TTL in seconds (5 minutes)account_ttl = 60 # Account data TTL in seconds (1 minute)
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
enabled | تفعيل التخزين المؤقت Redis لاستدعاءات RPC | ❌ (افتراضي: false) | منطقي |
url | عنوان اتصال Redis (مطلوب عند التفعيل) | ✅ | سلسلة |
default_ttl | TTL الافتراضي للمدخلات المخزنة مؤقتاً بالثواني | ❌ (افتراضي: 300) | رقم |
account_ttl | TTL للتخزين المؤقت لبيانات الحساب بالثواني | ❌ (افتراضي: 60) | رقم |
ملاحظة: عند تمكين التخزين المؤقت، يجب أن يكون هناك مثيل Redis متاح على العنوان المحدد. يعود التخزين المؤقت بسلاسة إلى استدعاءات RPC المباشرة إذا لم يكن Redis متاحاً.
حدود استخدام Kora (اختياري)
يقوم قسم [kora.usage_limit] بتكوين الحد الأقصى للمعاملات لكل محفظة لمنع إساءة
الاستخدام وضمان الاستخدام العادل عبر المستخدمين. يمكن استخدام هذا أيضاً لإنشاء
برامج مكافآت لدعم رسوم معاملات المستخدمين حتى حد معين.
مهم: حالياً، النوع الوحيد من تحديد الاستخدام المدعوم من قبل Kora هو حد دائم. بمجرد وصول المحفظة إلى حد المعاملات الخاص بها، لا يمكن إعادة تعيينه ولن يتمكن المستخدم من إرسال المزيد من المعاملات باستخدام نفس المحفظة. يستمر هذا الحد حتى يتم مسحه يدوياً من Redis أو إعادة تعيين بيانات Redis.
ملاحظة: تتطلب هذه الميزة Redis عند تمكينها عبر مثيلات Kora متعددة:
[kora.usage_limit]enabled = true # Enable/disable usage limitingcache_url = "redis://localhost:6379" # Redis URL for shared state (required when enabled)max_transactions = 100 # Max transactions per wallet (0 = unlimited)fallback_if_unavailable = true # Continue if Redis is unavailable
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
enabled | تمكين تحديد المعاملات لكل محفظة | ❌ (افتراضي: false) | boolean |
cache_url | عنوان اتصال Redis لتتبع الاستخدام المشترك | ❌ | string |
max_transactions | الحد الأقصى للمعاملات لكل محفظة (0 = غير محدود) | ❌ (افتراضي: 100) | number |
fallback_if_unavailable | السماح بالمعاملات إذا كان Redis غير متاح | ❌ (افتراضي: true) | boolean |
ملاحظة: يتم تتبع حدود الاستخدام لكل عنوان محفظة مع انتهاء صلاحية تلقائي يعتمد على TTL. عندما يكون
fallback_if_unavailableصحيحاً، يسمح النظام بالمعاملات في حالة عدم توفر Redis مؤقتاً، مما يمنع انقطاع الخدمة. تعيينmax_transactionsإلى 0 سيسمح بمعاملات غير محدودة.
طرق Kora المُمكَّنة (اختياري)
يتحكم قسم [kora.enabled_methods] في طرق RPC المُمكَّنة. هذا القسم اختياري
وبشكل افتراضي، جميع الطرق مُمكَّنة. يمكن تمكين أو تعطيل كل طريقة عن طريق تعيين
القيمة إلى true أو false:
[kora.enabled_methods]liveness = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true
| الخيار | وصف الطريقة | مطلوب | النوع |
|---|---|---|---|
liveness | نقطة فحص الحالة الصحية | ✅ | boolean |
estimate_transaction_fee | تقدير الرسوم لمعاملة | ✅ | boolean |
get_supported_tokens | سرد الرموز المقبولة | ✅ | boolean |
sign_transaction | توقيع معاملة دون إرسالها إلى الشبكة | ✅ | boolean |
sign_and_send_transaction | توقيع معاملة وإرسالها إلى الشبكة | ✅ | boolean |
transfer_transaction | التعامل مع عمليات نقل الرموز | ✅ | boolean |
get_blockhash | الحصول على blockhash حديث | ✅ | boolean |
get_config | إرجاع إعدادات خادم Kora | ✅ | boolean |
ملاحظة: إذا تم تضمين هذا القسم في ملف
kora.tomlالخاص بك، يجب تعيين جميع الطرق بشكل صريح إلىtrueأوfalse.
سياسات التحقق
يحدد قسم [validation] قواعد الأمان المتعلقة بسولانا وحدود المعاملات:
[validation]max_allowed_lamports = 1000000 # 0.001 SOLmax_signatures = 10price_source = "Jupiter"allow_durable_transactions = false # Block durable nonce transactionsallowed_programs = ["11111111111111111111111111111111", # System Program (required for SOL transfers)"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", # SPL Token Program"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", # Token-2022 Program"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", # Associated Token Program"AddressLookupTab1e1111111111111111111111111", # Address Lookup Table Program"ComputeBudget11111111111111111111111111111111", # Compute Budget Program]allowed_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC (mainnet)# additional tokens here]allowed_spl_paid_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC (mainnet)# additional tokens here]disallowed_accounts = [# "BadActorPubkey11111111111111111111111111111",]
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
max_allowed_lamports | يحد تعيين الحد الأقصى لعدد lamports لكل معاملة من تعرّض عقدة Kora لمعاملة واحدة. | ✅ | number |
max_signatures | رسوم سولانا الأساسية هي دالة لعدد التوقيعات في المعاملة، لذا فإن تعيين الحد الأقصى لعدد التوقيعات لكل معاملة يُعد طريقة جيدة لمنع المستخدمين من إنفاق الكثير من SOL على معاملة واحدة. | ✅ | number |
price_source | مصدر بيانات أسعار الرموز. ملاحظة: عند تعيينه إلى "Jupiter"، يكون متغير البيئة JUPITER_API_KEY مطلوباً. سيفشل الخادم في البدء بدونه. | ✅ | "Jupiter" أو "Mock" |
allow_durable_transactions | السماح بمعاملات nonce الدائمة. راجع اعتبارات الأمان أدناه. | ❌ (افتراضي: false) | boolean |
allowed_programs | برامج سولانا التي يمكن للمعاملات التفاعل معها | ✅ | مصفوفة من نصوص مشفرة b58 |
allowed_tokens | سكات الرموز التي يمكن استخدامها في المعاملات | ✅ | مصفوفة من نصوص مشفرة b58 |
allowed_spl_paid_tokens | رموز SPL المقبولة كدفعة لرسوم المعاملات | ✅ | مصفوفة من نصوص مشفرة b58 |
disallowed_accounts | الحسابات المحظورة صراحةً من المعاملات | ✅ | مصفوفة من نصوص مشفرة b58 |
ملاحظة: المصفوفات الفارغة مسموحة، لكن ستحتاج إلى تحديد
allowed_programsأوallowed_tokensأوallowed_spl_paid_tokensواحد على الأقل في القائمة البيضاء لكي تتمكن عقدة Kora من معالجة المعاملات. تحتاج إلى تحديد System Program أو Token Program لكي تتمكن عقدة Kora من معالجة التحويلات. لتفعيل أنواع التعليمات الشائعة (مثل ميزانية الحوسبة، جدول البحث عن العناوين)، تحتاج إلى تحديد Compute Budget Program أو Address Lookup Table Program، إلخ.
أمان المعاملات الدائمة
تحذير أمني: تسمح معاملات nonce الدائمة بالاحتفاظ بالمعاملات الموقعة إلى أجل غير مسمى وتقديمها لاحقاً. يمكن استخدام هذا كناقل هجوم اقتصادي حيث يمكن لشخص ما الحصول على معاملة موقعة والانتظار لتقديمها حتى تصبح ظروف السوق مواتية له (على سبيل المثال، عندما تنخفض قيمة SOL أو ترتفع قيمة رمز الدفع).
افتراضياً، يتم تعيين allow_durable_transactions على false لحظر جميع معاملات
nonce الدائمة. قم بتفعيل هذا فقط إذا كان تطبيقك يتطلب على وجه التحديد معاملات
دائمة وكنت تفهم المخاطر.
إذا كان يجب عليك تفعيل المعاملات الدائمة، ضع في اعتبارك:
- استخدام المصادقة لتقييد الوصول إلى واجهة برمجة التطبيقات
- تطبيق التحقق الإضافي خارج السلسلة
- مراقبة أنماط المعاملات غير العادية
- مراقبة وتحديد أرصدة حسابات الموقعين
- تدوير مفاتيح الموقعين بانتظام
تعرف على المزيد حول معاملات nonce الدائمة في وثائق سولانا.
حظر امتدادات Token-2022
يتيح لك قسم [validation.token2022] حظر امتدادات Token-2022 محددة لتعزيز
الأمان. جميع الامتدادات مفعّلة افتراضياً. يمكنك حظر امتدادات محددة عن طريق
إضافتها إلى مصفوفة blocked_mint_extensions أو مصفوفة
blocked_account_extensions:
[validation.token2022]blocked_mint_extensions = ["transfer_hook", # Block tokens with transfer hooks"pausable", # Block pausable tokens"permanent_delegate", # Block tokens with permanent delegates]blocked_account_extensions = ["cpi_guard", # Block accounts with CPI guard"memo_transfer", # Block accounts requiring memos]
امتدادات السك المتاحة
| اسم الامتداد | الوصف |
|---|---|
confidential_transfer_mint | إعدادات التحويل السري للسك |
confidential_mint_burn | إعدادات السك والحرق السري |
transfer_fee_config | إعدادات رسوم التحويل |
mint_close_authority | الصلاحية المسموح لها بإغلاق السك |
interest_bearing_config | إعدادات الرمز المميز بفائدة |
non_transferable | يجعل الرموز المميزة غير قابلة للتحويل |
permanent_delegate | مفوض دائم للسك |
transfer_hook | برنامج خطاف تحويل مخصص |
pausable | إعدادات الرمز المميز القابل للإيقاف |
امتدادات الحساب المتاحة
| اسم الامتداد | الوصف |
|---|---|
confidential_transfer_account | حالة التحويل السري للحساب |
non_transferable_account | حساب رمز مميز غير قابل للتحويل |
transfer_hook_account | حالة خطاف التحويل للحساب |
pausable_account | حالة حساب الرمز المميز القابل للإيقاف |
memo_transfer | يتطلب مذكرة للتحويلات |
cpi_guard | يمنع استدعاءات CPI معينة |
immutable_owner | لا يمكن تغيير مالك الحساب |
default_account_state | الحالة الافتراضية للحسابات الجديدة |
transfer_hook
اعتبارات الأمان
امتداد المفوض الدائم - الرموز المميزة التي تحتوي على هذا الامتداد تسمح للمفوض بنقل/حرق الرموز المميزة في أي وقت دون موافقة المالك. هذا يخلق مخاطر كبيرة لمشغل عقدة Kora حيث يمكن مصادرة أموال الدفع بعد الدفع.
- فكر في إضافة "permanent_delegate" إلى
blocked_mint_extensionsفي [validation.token2022] ما لم تكن هناك حاجة صريحة لحالة الاستخدام الخاصة بك. - تجنب استخدام رموز الدفع المميزة مع امتداد
permanent_delegate.
سياسة دافع الرسوم
يوفر قسم [validation.fee_payer_policy] تحكمًا دقيقًا في الإجراءات التي يمكن
لمحفظة دافع الرسوم الخاصة بعقدة Kora تنفيذها. يتم تنظيم السياسة حسب نوع البرنامج
(System Program، SPL Token، Token-2022) وتغطي جميع أنواع التعليمات المختلفة.
يمنع هذا السلوك غير المتوقع من معاملات المستخدمين التي تستخدم عقدة Kora الخاصة
بك كموقّع.
على سبيل المثال، إذا تم تعيين spl_token.allow_transfer على false، فلن توقع
عقدة Kora المعاملات التي تتضمن تحويل رمز SPL حيث يكون دافع رسوم عقدة Kora هو
سلطة التحويل.
[validation.fee_payer_policy.system]allow_transfer = false # System Transfer/TransferWithSeedallow_assign = false # System Assign/AssignWithSeedallow_create_account = false # System CreateAccount/CreateAccountWithSeedallow_allocate = false # System Allocate/AllocateWithSeed[validation.fee_payer_policy.system.nonce]allow_initialize = false # InitializeNonceAccountallow_advance = false # AdvanceNonceAccountallow_authorize = false # AuthorizeNonceAccountallow_withdraw = false # WithdrawNonceAccount[validation.fee_payer_policy.spl_token]allow_transfer = false # Transfer/TransferCheckedallow_burn = false # Burn/BurnCheckedallow_close_account = false # CloseAccountallow_approve = false # Approve/ApproveCheckedallow_revoke = false # Revokeallow_set_authority = false # SetAuthorityallow_mint_to = false # MintTo/MintToCheckedallow_initialize_mint = false # InitializeMint/InitializeMint2allow_initialize_account = false # InitializeAccount/InitializeAccount3allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2allow_freeze_account = false # FreezeAccountallow_thaw_account = false # ThawAccount[validation.fee_payer_policy.token_2022]allow_transfer = false # Transfer/TransferCheckedallow_burn = false # Burn/BurnCheckedallow_close_account = false # CloseAccountallow_approve = false # Approve/ApproveCheckedallow_revoke = false # Revokeallow_set_authority = false # SetAuthorityallow_mint_to = false # MintTo/MintToCheckedallow_initialize_mint = false # InitializeMint/InitializeMint2allow_initialize_account = false # InitializeAccount/InitializeAccount3allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2allow_freeze_account = false # FreezeAccountallow_thaw_account = false # ThawAccount
تعليمات System Program
| الخيار | الوصف | الافتراضي | النوع |
|---|---|---|---|
allow_transfer | السماح لدافع الرسوم كمرسل في تعليمات Transfer/TransferWithSeed | false | boolean |
allow_assign | السماح لدافع الرسوم كسلطة في تعليمات Assign/AssignWithSeed | false | boolean |
allow_create_account | السماح لدافع الرسوم كدافع التمويل في تعليمات CreateAccount/CreateAccountWithSeed | false | boolean |
allow_allocate | السماح لدافع الرسوم كمالك الحساب في تعليمات Allocate/AllocateWithSeed | false | boolean |
nonce.allow_initialize | السماح بتعيين دافع الرسوم كسلطة nonce في InitializeNonceAccount | false | boolean |
nonce.allow_advance | السماح لدافع الرسوم كسلطة في AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | السماح لدافع الرسوم كسلطة حالية في AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | السماح لدافع الرسوم كسلطة في WithdrawNonceAccount | false | boolean |
تعليمات SPL Token Program
| الخيار | الوصف | الافتراضي | النوع |
|---|---|---|---|
allow_transfer | السماح لدافع الرسوم كمالك في تعليمات Transfer/TransferChecked | false | boolean |
allow_burn | السماح لدافع الرسوم كمالك في تعليمات Burn/BurnChecked | false | boolean |
allow_close_account | السماح لدافع الرسوم كمالك في تعليمات CloseAccount | false | boolean |
allow_approve | السماح لدافع الرسوم كمالك في تعليمات Approve/ApproveChecked | false | boolean |
allow_revoke | السماح لدافع الرسوم كمالك في تعليمات Revoke | false | boolean |
allow_set_authority | السماح لدافع الرسوم كسلطة حالية في تعليمات SetAuthority | false | boolean |
allow_mint_to | السماح لدافع الرسوم كسلطة سك في تعليمات MintTo/MintToChecked | false | boolean |
allow_initialize_mint | السماح لدافع الرسوم كسلطة سك في تعليمات InitializeMint/InitializeMint2 | false | boolean |
allow_initialize_account | السماح لدافع الرسوم كمالك في تعليمات InitializeAccount/InitializeAccount3 | false | boolean |
allow_initialize_multisig | السماح لدافع الرسوم كموقّع في تعليمات InitializeMultisig/InitializeMultisig2 | false | boolean |
allow_freeze_account | السماح لدافع الرسوم كسلطة تجميد في تعليمات FreezeAccount | false | boolean |
allow_thaw_account | السماح لدافع الرسوم كسلطة تجميد في تعليمات ThawAccount | false | boolean |
يدعم Token-2022 نفس مجموعة التعليمات الموجودة في SPL Token مع خيارات التكوين
المطابقة (ضمن قسم [validation.fee_payer_policy.token_2022]).
اعتبارات الأمان
تحذير أمني: لأسباب أمنية، يُوصى بتعيين جميع هذه الخيارات إلى false
(افتراضياً) وتفعيلها فقط عند الحاجة. سيمنع هذا السلوك غير المرغوب فيه مثل قيام
المستخدمين باستنزاف حساب دافع الرسوم الخاص بك أو حرق الرموز من حساب دافع الرسوم
الخاص بك. يمنع هذا:
- استنزاف الحساب: قيام المستخدمين بتحويل SOL أو الرموز من حساب دافع الرسوم الخاص بك
- الاستيلاء على الصلاحيات: قيام المستخدمين بتغيير الصلاحيات على الحسابات المملوكة لدافع الرسوم الخاص بك
- السك غير المصرح به: قيام المستخدمين بسك الرموز إذا كان لدافع الرسوم الخاص بك صلاحية السك
- التلاعب بالحسابات: قيام المستخدمين بتجميد أو إغلاق أو تعديل الحسابات التي يتحكم فيها دافع الرسوم الخاص بك
أفضل الممارسات: ابدأ بتعطيل جميع الأذونات وقم بتفعيل الحد الأدنى المطلوب لحالة الاستخدام المحددة لديك فقط.
تكوين السعر (اختياري)
يحدد قسم [validation.price] كيفية حساب رسوم المعاملات. تتوفر ثلاثة نماذج
تسعير:
- التسعير بالهامش (افتراضي) - إضافة نسبة هامش فوق رسوم الشبكة الفعلية (الهامش الافتراضي هو 0.0)
- التسعير الثابت - فرض مبلغ ثابت برمز معين بغض النظر عن رسوم الشبكة
- التسعير المجاني - رعاية جميع رسوم المعاملات (بدون رسوم على المستخدمين)
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
type | نموذج التسعير المراد استخدامه | ✅ | "margin" أو "fixed" أو "free" |
margin | نسبة الهامش المئوية لإضافتها إلى رسوم الشبكة | (عندما يكون type هو "margin") | رقم |
amount | المبلغ الثابت المراد فرضه بوحدات الرمز الأساسية | (عندما يكون type هو "fixed") | رقم |
token | رمز السك المراد الفرض به | (عندما يكون type هو "fixed") | نص مشفر b58 |
تسعير الهامش
أضف نسبة مئوية هامش فوق رسوم الشبكة الفعلية:
[validation.price]type = "margin"margin = 0.1 # 10% margin (0.1 = 10%, 1.0 = 100%)
التسعير الثابت
تحذير أمني: التسعير الثابت لا يتضمن تدفق دافع الرسوم الخارج في المبلغ المحمل. قد يسمح هذا للمستخدمين باستنزاف حساب دافع الرسوم الخاص بك إذا لم يتم تكوينه بشكل صحيح.
احسب مبلغًا ثابتًا برمز معين بغض النظر عن رسوم الشبكة:
[validation.price]type = "fixed"amount = 1000000 # Amount in token's base unitstoken = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint
المعاملات المجانية
تحمّل جميع رسوم المعاملات (بدون رسوم على المستخدمين):
[validation.price]type = "free"
التدابير الأمنية عند استخدام التسعير الثابت/المجاني
-
تعطيل جميع عمليات التحويل والعمليات النقدية - منع استخدام دافع الرسوم كمصدر في التحويلات:
[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfersallow_create_account = false # Block account creation with lamportsallow_allocate = false # Block space allocation[validation.fee_payer_policy.system.nonce]allow_withdraw = false # Block nonce account withdrawals[validation.fee_payer_policy.spl_token] # and for [validation.fee_payer_policy.token_2022]allow_transfer = false # Block SPL transfersallow_burn = false # Block SPL token burningallow_close_account = false # Block SPL token account closures (returns rent)allow_mint_to = false # Block unauthorized SPL token mintingallow_initialize_account = false # Block account initialization -
تفعيل المصادقة - استخدم المصادقة لمنع إساءة الاستخدام:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
تعيين حدود محافظة - تقليل التعرض للمخاطر:
[validation]max_allowed_lamports = 1000000 # 0.001 SOL maximum
تحذير: العمليات الخطيرة بشكل خاص عند استخدام التسعير الثابت/المجاني:
allow_mint_to: قد تسمح بإنشاء رموز غير محدود إذا كان لدافع الرسوم صلاحية السكallow_set_authority: قد تنقل السيطرة على الحسابات الحرجة إلى المهاجمينallow_transfer: يتيح الاستنزاف المباشر لأرصدة رموز دافع الرسومallow_close_account: يعيد الإيجار إلى الحسابات التي يتحكم فيها المهاجم
مراقبة الأداء (اختياري)
يقوم قسم [metrics] بتكوين جمع المقاييس والمراقبة. هذا القسم اختياري وبشكل
افتراضي، يتم تعطيل المقاييس.
[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
enabled | تفعيل جمع المقاييس | ✅ | منطقي |
endpoint | مسار نقطة نهاية المقاييس المخصص | ✅ | نص |
port | منفذ نقطة نهاية المقاييس | ✅ | رقم |
scrape_interval | تكرار جمع Prometheus (بالثواني) | ✅ | رقم |
تتبع رصيد دافع الرسوم
يقوم قسم [metrics.fee_payer_balance] بتكوين المراقبة التلقائية لرصيد SOL الخاص
بدافع الرسوم:
| الخيار | الوصف | مطلوب | النوع |
|---|---|---|---|
enabled | تفعيل تتبع رصيد دافع الرسوم | ❌ (افتراضي: false) | boolean |
expiry_seconds | فاصل التتبع الخلفي بالثواني | ❌ (افتراضي: 30) | number |
عند التفعيل، يقوم Kora تلقائياً بتتبع رصيد SOL الخاص بدافع الرسوم ويعرضه عبر
مقياس Prometheus fee_payer_balance_lamports. يساعد هذا في تخطيط السعة
والتنبيه عند انخفاض الرصيد.
http://localhost:{port}/{metrics-endpoint}
مثال كامل
إليك تكوين جاهز للإنتاج مع أفضل ممارسات الأمان:
# Kora Paymaster Configuration# Last Updated: 2025-08-22[kora]# Rate limiting: 100 requests per second globallyrate_limit = 100# Optional payment address (defaults to signer address(es) if not specified)# payment_address = "YourPaymentAddressPubkey11111111111111111111"[kora.auth]# Authentication (choose based on security needs)# api_key = "kora_live_sk_generate_secure_key_here"hmac_secret = "kora_hmac_minimum_32_character_secret_here"max_timestamp_age = 300# Caching configuration (optional but recommended for production)[kora.cache]enabled = trueurl = "redis://localhost:6379"default_ttl = 300 # 5 minutesaccount_ttl = 60 # 1 minute# Usage limiting (optional, prevents abuse)[kora.usage_limit]enabled = truecache_url = "redis://localhost:6379" # Can share same Redis instance as cachemax_transactions = 100 # Per-wallet limitfallback_if_unavailable = true # Don't block if Redis is down# Disable unnecessary RPC methods for security[kora.enabled_methods]liveness = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true[validation]# Use production oracleprice_source = "Jupiter"# Conservative transaction limitsmax_allowed_lamports = 1000000 # 0.001 SOL maxmax_signatures = 10# Block durable nonce transactions (security default)allow_durable_transactions = false# Minimal program allowlist (expand as needed)allowed_programs = ["11111111111111111111111111111111", # System Program"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", # SPL Token"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", # Associated Token"AddressLookupTab1e1111111111111111111111111", # Address Lookup Table"ComputeBudget11111111111111111111111111111111", # Compute Budget"MyProgram111111111111111111111111111111111",# Add your specific program IDs here]# Production token allowlistallowed_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC"So11111111111111111111111111111111111111112", # Wrapped SOL"MyToken1111111111111111111111111111111111111111",# Add tokens your application uses]# Payment tokens (only liquid, trusted tokens)allowed_spl_paid_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC only]# Known bad actors or compromised addressesdisallowed_accounts = ["BadActor1111111111111111111111111111111111111111",]# Restrictive fee payer policy (recommended for production)[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfers from fee payerallow_assign = false # Block account ownership changesallow_create_account = false # Block creating accounts with fee payer fundsallow_allocate = false # Block allocating space for fee payer accounts[validation.fee_payer_policy.system.nonce]allow_initialize = false # Block nonce account initializationallow_advance = false # Block nonce advancementallow_authorize = false # Block nonce authority changesallow_withdraw = false # Block nonce withdrawals[validation.fee_payer_policy.spl_token]allow_transfer = false # Critical: Block SPL transfersallow_burn = false # Block token burningallow_close_account = false # Block account closuresallow_approve = false # Block token approvalsallow_revoke = false # Block delegate revocationsallow_set_authority = false # Block authority changesallow_mint_to = false # Block minting operationsallow_initialize_mint = false # Block mint initializationallow_initialize_account = false # Block account initializationallow_initialize_multisig = false # Block multisig initializationallow_freeze_account = false # Block account freezingallow_thaw_account = false # Block account thawing[validation.fee_payer_policy.token_2022]allow_transfer = false # Critical: Block Token2022 transfersallow_burn = false # Block token burningallow_close_account = false # Block account closuresallow_approve = false # Block token approvalsallow_revoke = false # Block delegate revocationsallow_set_authority = false # Block authority changesallow_mint_to = false # Block minting operationsallow_initialize_mint = false # Block mint initializationallow_initialize_account = false # Block account initializationallow_initialize_multisig = false # Block multisig initializationallow_freeze_account = false # Block account freezingallow_thaw_account = false # Block account thawing# Token-2022 extension blocking[validation.token2022]# Block potentially risky mint extensionsblocked_mint_extensions = ["transfer_hook", # Custom transfer logic"pausable", # Can freeze transfers"permanent_delegate", # Permanent control]# Block complex account extensionsblocked_account_extensions = ["cpi_guard", # Restricts composability"memo_transfer", # Requires additional data]# Sustainable pricing with 15% margin[validation.price]type = "margin"margin = 0.15 # 15% margin on network fees# Metrics collection[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60# Fee payer balance monitoring[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
التحقق من صحة التكوين
يقوم Kora بالتحقق من صحة التكوين الخاص بك عند بدء التشغيل. إذا كنت ترغب في التحقق من صحة التكوين دون بدء تشغيل الخادم، يمكنك استخدام أمر التحقق من صحة التكوين:
kora --config kora.toml config validate # or validate-with-rpc
يمكنك أيضاً تشغيل أمر validate-with-rpc للتحقق من صحة التكوين مع خادم RPC (هذا
الفحص أبطأ قليلاً لكنه يقوم بفحص شامل أكثر للحسابات)
بدء تشغيل الخادم
بمجرد تكوين ملف kora.toml الخاص بك، يمكنك بدء تشغيل خادم Kora:
kora --config path/to/kora.toml rpc start --no-load-signer # --other-rpc-flags-here
سيقوم علَم --no-load-signer بتهيئة الخادم دون تحميل أي موقّعين. هذا مفيد
لاختبار التكوين الخاص بك. لتحميل الموقّعين، ستحتاج إلى تكوين ملف signers.toml.
الحد الأدنى من التكوين مع موقّع واحد سيبدو كالتالي:
[signer_pool]# Selection strategy: round_robin, random, weightedstrategy = "round_robin"# Primary memory signer[[signers]]name = "my-signer"type = "memory"private_key_env = "MY_SIGNER_PRIVATE_KEY"
سيؤدي هذا إلى تحميل موقّع واحد من متغير البيئة MY_SIGNER_PRIVATE_KEY. بعد ذلك
يمكنك بدء تشغيل الخادم باستخدام:
kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml
لمزيد من المعلومات والإعدادات المتقدمة للموقّع، راجع دليل الموقّعين.
أفضل الممارسات
- ابدأ بقيود صارمة: ابدأ بحدود ضيقة وقم بتوسيعها تدريجياً
- راقب الاستخدام: تتبع البرامج والرموز المستخدمة فعلياً
- تحديثات منتظمة: راجع وحدّث قوائم الحظر والحدود
- اختبر التغييرات: تحقق من صحة تغييرات الإعدادات في بيئة الاختبار أولاً
- إدارة الإصدارات: احتفظ بسجل تغييرات لإعدادتك
هل تحتاج إلى مساعدة؟
- راجع دليل المصادقة لإعداد المصادقة
- راجع دليل الموقّعين لإعدادات الموقّع
- راجع دليل المشغّل لمزيد من المعلومات حول كيفية تشغيل عقدة Kora
- قم بزيارة Solana Stack Exchange مع وسم
kora - أبلغ عن المشاكل على GitHub
Is this page helpful?