الإعدادات

هل تستخدم 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.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 = 100
payment_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 caching
url = "redis://localhost:6379" # Redis connection URL
default_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_ttlTTL الافتراضي للمدخلات المخزنة مؤقتاً بالثواني❌ (افتراضي: 300)رقم
account_ttlTTL للتخزين المؤقت لبيانات الحساب بالثواني❌ (افتراضي: 60)رقم

ملاحظة: عند تمكين التخزين المؤقت، يجب أن يكون هناك مثيل Redis متاح على العنوان المحدد. يعود التخزين المؤقت بسلاسة إلى استدعاءات RPC المباشرة إذا لم يكن Redis متاحاً.

حدود استخدام Kora (اختياري)

يقوم قسم [kora.usage_limit] بتكوين الحد الأقصى للمعاملات لكل محفظة لمنع إساءة الاستخدام وضمان الاستخدام العادل عبر المستخدمين. يمكن استخدام هذا أيضاً لإنشاء برامج مكافآت لدعم رسوم معاملات المستخدمين حتى حد معين.

مهم: حالياً، النوع الوحيد من تحديد الاستخدام المدعوم من قبل Kora هو حد دائم. بمجرد وصول المحفظة إلى حد المعاملات الخاص بها، لا يمكن إعادة تعيينه ولن يتمكن المستخدم من إرسال المزيد من المعاملات باستخدام نفس المحفظة. يستمر هذا الحد حتى يتم مسحه يدوياً من Redis أو إعادة تعيين بيانات Redis.

ملاحظة: تتطلب هذه الميزة Redis عند تمكينها عبر مثيلات Kora متعددة:

[kora.usage_limit]
enabled = true # Enable/disable usage limiting
cache_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 = true
estimate_transaction_fee = true
get_supported_tokens = true
sign_transaction = false
sign_and_send_transaction = false
transfer_transaction = false
get_blockhash = true
get_config = true
get_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إرجاع إعدادات خادم Koraboolean

ملاحظة: إذا تم تضمين هذا القسم في ملف kora.toml الخاص بك، يجب تعيين جميع الطرق بشكل صريح إلى true أو false.

سياسات التحقق

يحدد قسم [validation] قواعد الأمان المتعلقة بسولانا وحدود المعاملات:

[validation]
max_allowed_lamports = 1000000 # 0.001 SOL
max_signatures = 10
price_source = "Jupiter"
allow_durable_transactions = false # Block durable nonce transactions
allowed_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/TransferWithSeed
allow_assign = false # System Assign/AssignWithSeed
allow_create_account = false # System CreateAccount/CreateAccountWithSeed
allow_allocate = false # System Allocate/AllocateWithSeed
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # InitializeNonceAccount
allow_advance = false # AdvanceNonceAccount
allow_authorize = false # AuthorizeNonceAccount
allow_withdraw = false # WithdrawNonceAccount
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount

تعليمات System Program

الخيارالوصفالافتراضيالنوع
allow_transferالسماح لدافع الرسوم كمرسل في تعليمات Transfer/TransferWithSeedfalseboolean
allow_assignالسماح لدافع الرسوم كسلطة في تعليمات Assign/AssignWithSeedfalseboolean
allow_create_accountالسماح لدافع الرسوم كدافع التمويل في تعليمات CreateAccount/CreateAccountWithSeedfalseboolean
allow_allocateالسماح لدافع الرسوم كمالك الحساب في تعليمات Allocate/AllocateWithSeedfalseboolean
nonce.allow_initializeالسماح بتعيين دافع الرسوم كسلطة nonce في InitializeNonceAccountfalseboolean
nonce.allow_advanceالسماح لدافع الرسوم كسلطة في AdvanceNonceAccountfalseboolean
nonce.allow_authorizeالسماح لدافع الرسوم كسلطة حالية في AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawالسماح لدافع الرسوم كسلطة في WithdrawNonceAccountfalseboolean

تعليمات SPL Token Program

الخيارالوصفالافتراضيالنوع
allow_transferالسماح لدافع الرسوم كمالك في تعليمات Transfer/TransferCheckedfalseboolean
allow_burnالسماح لدافع الرسوم كمالك في تعليمات Burn/BurnCheckedfalseboolean
allow_close_accountالسماح لدافع الرسوم كمالك في تعليمات CloseAccountfalseboolean
allow_approveالسماح لدافع الرسوم كمالك في تعليمات Approve/ApproveCheckedfalseboolean
allow_revokeالسماح لدافع الرسوم كمالك في تعليمات Revokefalseboolean
allow_set_authorityالسماح لدافع الرسوم كسلطة حالية في تعليمات SetAuthorityfalseboolean
allow_mint_toالسماح لدافع الرسوم كسلطة سك في تعليمات MintTo/MintToCheckedfalseboolean
allow_initialize_mintالسماح لدافع الرسوم كسلطة سك في تعليمات InitializeMint/InitializeMint2falseboolean
allow_initialize_accountالسماح لدافع الرسوم كمالك في تعليمات InitializeAccount/InitializeAccount3falseboolean
allow_initialize_multisigالسماح لدافع الرسوم كموقّع في تعليمات InitializeMultisig/InitializeMultisig2falseboolean
allow_freeze_accountالسماح لدافع الرسوم كسلطة تجميد في تعليمات FreezeAccountfalseboolean
allow_thaw_accountالسماح لدافع الرسوم كسلطة تجميد في تعليمات ThawAccountfalseboolean

يدعم 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 units
token = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint

المعاملات المجانية

تحمّل جميع رسوم المعاملات (بدون رسوم على المستخدمين):

[validation.price]
type = "free"

التدابير الأمنية عند استخدام التسعير الثابت/المجاني

  1. تعطيل جميع عمليات التحويل والعمليات النقدية - منع استخدام دافع الرسوم كمصدر في التحويلات:

    [validation.fee_payer_policy.system]
    allow_transfer = false # Block SOL transfers
    allow_create_account = false # Block account creation with lamports
    allow_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 transfers
    allow_burn = false # Block SPL token burning
    allow_close_account = false # Block SPL token account closures (returns rent)
    allow_mint_to = false # Block unauthorized SPL token minting
    allow_initialize_account = false # Block account initialization
  2. تفعيل المصادقة - استخدم المصادقة لمنع إساءة الاستخدام:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. تعيين حدود محافظة - تقليل التعرض للمخاطر:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

تحذير: العمليات الخطيرة بشكل خاص عند استخدام التسعير الثابت/المجاني:

  • allow_mint_to: قد تسمح بإنشاء رموز غير محدود إذا كان لدافع الرسوم صلاحية السك
  • allow_set_authority: قد تنقل السيطرة على الحسابات الحرجة إلى المهاجمين
  • allow_transfer: يتيح الاستنزاف المباشر لأرصدة رموز دافع الرسوم
  • allow_close_account: يعيد الإيجار إلى الحسابات التي يتحكم فيها المهاجم

مراقبة الأداء (اختياري)

يقوم قسم [metrics] بتكوين جمع المقاييس والمراقبة. هذا القسم اختياري وبشكل افتراضي، يتم تعطيل المقاييس.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_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

مثال كامل

إليك تكوين جاهز للإنتاج مع أفضل ممارسات الأمان:

# Kora Paymaster Configuration
# Last Updated: 2025-08-22
[kora]
# Rate limiting: 100 requests per second globally
rate_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 = true
url = "redis://localhost:6379"
default_ttl = 300 # 5 minutes
account_ttl = 60 # 1 minute
# Usage limiting (optional, prevents abuse)
[kora.usage_limit]
enabled = true
cache_url = "redis://localhost:6379" # Can share same Redis instance as cache
max_transactions = 100 # Per-wallet limit
fallback_if_unavailable = true # Don't block if Redis is down
# Disable unnecessary RPC methods for security
[kora.enabled_methods]
liveness = true
estimate_transaction_fee = true
get_supported_tokens = true
sign_transaction = false
sign_and_send_transaction = false
transfer_transaction = false
get_blockhash = true
get_config = true
get_payer_signer = true
[validation]
# Use production oracle
price_source = "Jupiter"
# Conservative transaction limits
max_allowed_lamports = 1000000 # 0.001 SOL max
max_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 allowlist
allowed_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 addresses
disallowed_accounts = [
"BadActor1111111111111111111111111111111111111111",
]
# Restrictive fee payer policy (recommended for production)
[validation.fee_payer_policy.system]
allow_transfer = false # Block SOL transfers from fee payer
allow_assign = false # Block account ownership changes
allow_create_account = false # Block creating accounts with fee payer funds
allow_allocate = false # Block allocating space for fee payer accounts
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # Block nonce account initialization
allow_advance = false # Block nonce advancement
allow_authorize = false # Block nonce authority changes
allow_withdraw = false # Block nonce withdrawals
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Critical: Block SPL transfers
allow_burn = false # Block token burning
allow_close_account = false # Block account closures
allow_approve = false # Block token approvals
allow_revoke = false # Block delegate revocations
allow_set_authority = false # Block authority changes
allow_mint_to = false # Block minting operations
allow_initialize_mint = false # Block mint initialization
allow_initialize_account = false # Block account initialization
allow_initialize_multisig = false # Block multisig initialization
allow_freeze_account = false # Block account freezing
allow_thaw_account = false # Block account thawing
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Critical: Block Token2022 transfers
allow_burn = false # Block token burning
allow_close_account = false # Block account closures
allow_approve = false # Block token approvals
allow_revoke = false # Block delegate revocations
allow_set_authority = false # Block authority changes
allow_mint_to = false # Block minting operations
allow_initialize_mint = false # Block mint initialization
allow_initialize_account = false # Block account initialization
allow_initialize_multisig = false # Block multisig initialization
allow_freeze_account = false # Block account freezing
allow_thaw_account = false # Block account thawing
# Token-2022 extension blocking
[validation.token2022]
# Block potentially risky mint extensions
blocked_mint_extensions = [
"transfer_hook", # Custom transfer logic
"pausable", # Can freeze transfers
"permanent_delegate", # Permanent control
]
# Block complex account extensions
blocked_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 = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
# Fee payer balance monitoring
[metrics.fee_payer_balance]
enabled = true
expiry_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, weighted
strategy = "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

لمزيد من المعلومات والإعدادات المتقدمة للموقّع، راجع دليل الموقّعين.

أفضل الممارسات

  1. ابدأ بقيود صارمة: ابدأ بحدود ضيقة وقم بتوسيعها تدريجياً
  2. راقب الاستخدام: تتبع البرامج والرموز المستخدمة فعلياً
  3. تحديثات منتظمة: راجع وحدّث قوائم الحظر والحدود
  4. اختبر التغييرات: تحقق من صحة تغييرات الإعدادات في بيئة الاختبار أولاً
  5. إدارة الإصدارات: احتفظ بسجل تغييرات لإعدادتك

هل تحتاج إلى مساعدة؟

Is this page helpful?

تدار بواسطة

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