Surfnet::start() (Rust) و Surfnet.start() (JS) يُشغّلان Surfnet في وضع عدم
الاتصال مع إنتاج كتل في وضع المعاملات ودافع ممول مسبقاً بـ 10 SOL. عندما تحتاج
إلى أي شيء آخر — Surfnet مُستنسَخ من الشبكة الرئيسية، أو ساعة أبطأ، أو تمويل
حتمي، أو keypair دافع محدد — استخدم المنشئ (Rust) أو startWithConfig (JS).
الإعدادات الافتراضية
إذا استدعيت start() بدون أي وسائط، ستحصل على:
| الإعداد | القيمة |
|---|---|
| الوضع | غير متصل (بدون RPC أولي) |
| إنتاج الكتل | المعاملات (تتقدم الكتل مع كل معاملة) |
| توقيت slot | 1 مللي ثانية |
| الدافع | keypair عشوائي ممول بـ 10 SOL (10,000,000,000 lamport) |
| رابط RPC | http://127.0.0.1:<random> |
| رابط WS | ws://127.0.0.1:<random> |
| إعداد الميزات | مجموعة ميزات الشبكة الرئيسية الافتراضية |
الإعداد المخصص
use surfpool_sdk::{BlockProductionMode, Pubkey, Surfnet};#[tokio::test]async fn starts_with_custom_configuration() {let alice = Pubkey::new_unique();let surfnet = Surfnet::builder().remote_rpc_url("https://api.mainnet-beta.solana.com").block_production_mode(BlockProductionMode::Transaction).slot_time_ms(10).airdrop_addresses(vec![alice]).airdrop_sol(5_000_000_000).skip_blockhash_check(true).start().await.unwrap();assert_eq!(surfnet.rpc_client().get_balance(&alice).unwrap(),5_000_000_000);}
مرجع المنشئ
يعرض منشئ Rust وكائن الإعداد في JS نفس الخيارات المنطقية تحت تسمية camelCase / snake_case.
| الخيار | دالة الضبط في Rust | الحقل في JS | النوع | الافتراضي |
|---|---|---|---|---|
| وضع عدم الاتصال | offline(bool) | offline?: boolean | bool | true |
| RPC الأولي | remote_rpc_url(impl Into<String>) | remoteRpcUrl?: string | سلسلة URL | لا يوجد |
| إنتاج الكتل | block_production_mode(BlockProductionMode) | blockProductionMode?: string | تعداد / "manual" | "clock" | "transaction" | Transaction |
| توقيت slot | slot_time_ms(u64) | slotTimeMs?: number | مللي ثانية | 1 |
| عناوين الإسقاط الجوي | airdrop_addresses(Vec<Pubkey>) | airdropAddresses?: string[] | قائمة pubkey | فارغة |
| مبلغ الإسقاط الجوي | airdrop_sol(u64) | airdropSol?: number | lamport | 10_000_000_000 |
| تخطي blockhash | skip_blockhash_check(bool) | غير متاح | bool | false |
| دافع مخصص | payer(Keypair) | payerSecretKey?: Uint8Array | number[] | keypair / بايتات | مُولَّد تلقائياً |
| تفعيل ميزة | enable_feature(Pubkey) | enableFeatures?: string[] | معرّف(ات) الميزة | لا يوجد |
| تعطيل ميزة | disable_feature(Pubkey) | disableFeatures?: string[] | معرّف(ات) الميزة | لا يوجد |
| جميع الميزات | غير متاح | allFeatures?: boolean | bool | false |
| إعداد الميزات | feature_config(SvmFeatureConfig) | غير متاح | إعداد كامل | الشبكة الرئيسية الافتراضية |
الرجوع إلى RPC البعيد
يؤدي تعيين remoteRpcUrl (أو remote_rpc_url في Rust) إلى تحويل Surfnet من وضع
عدم الاتصال. يتم جلب الحسابات غير الموجودة محليًا عند الطلب من خادم RPC الأعلى،
وهذه هي الطريقة التي تعمل بها اختبارات mainnet-fork.
let surfnet = Surfnet::builder().remote_rpc_url("https://api.mainnet-beta.solana.com").start().await?;
استخدم خادم RPC عالي الجودة
استخدم نقطة نهاية مدفوعة (Helius أو Triton أو QuickNode) للاختبارات التي تتضمن
عددًا كبيرًا من الحسابات المتفرعة. إن mainnet-beta العام مقيّد بشدة في معدل
الطلبات وقد يتعطل تحت أحمال الاختبار المتوازية.
وضع إنتاج الكتل
| الوضع | متى تتقدم الكتل |
|---|---|
Transaction (الافتراضي) | بعد كل معاملة. الأفضل للاختبارات التي ترسل وتتحقق فورًا. |
Clock | على فترة زمنية ثابتة يحددها slot_time_ms. الأفضل للاختبارات التي تعتمد على مرور عدة slot دون معاملات صريحة. |
Manual | فقط عند إرسال SimnetCommand::AdvanceClock. الأفضل للاختبارات الحساسة للوقت حيث يتحكم الاختبار في الساعة. |
الدافع المخصص
افتراضيًا، الدافع هو keypair يتم إنشاؤه حديثًا. قدّم keypair خاصًا بك عندما تحتاج الاختبارات إلى عنوان معروف، على سبيل المثال لبناء تعليمات مسبقة تشير إلى المفتاح العام pubkey للدافع.
use surfpool_sdk::{Keypair, Signer, Surfnet};let payer = Keypair::new();let surfnet = Surfnet::builder().payer(payer.insecure_clone()).start().await?;assert_eq!(surfnet.payer().pubkey(), payer.pubkey());
بوابات الميزات
قم بتبديل بوابات ميزات SVM الفردية بواسطة المعرّف، أو قم بتفعيل جميع الميزات
المعروفة باستخدام allFeatures: true (خاص بـ JS فقط — يقبل منشئ Rust الخاصية
feature_config للمجموعة الكاملة).
use surfpool_sdk::{Pubkey, Surfnet};let feature_id: Pubkey = "9bn2vTJUsUcnpiZWbu2woSKtTGW3ErZC9ERv88SDqQjK".parse().unwrap();let surfnet = Surfnet::builder().enable_feature(feature_id).start().await?;
تخطي التحقق من Blockhash
skip_blockhash_check(true) (خاص بـ Rust فقط) يعطّل التحقق من blockhash على
جميع المعاملات. مفيد للاختبارات التي توقّع المعاملات قبل وقت طويل من الإرسال أو
التي لا تهتم بانتهاء الصلاحية.
الأخطاء
يفشل منشئ مُهيَّأ بشكل خاطئ عند start(). يُعيد Rust SDK الخطأ SurfnetError:
| المتغير | متى |
|---|---|
PortAllocation(String) | تعذّر الارتباط بمنفذ RPC أو WebSocket حر. |
Startup(String) | فشل وقت التشغيل في التهيئة (إعداد خاطئ، أو عنوان URL بعيد غير صالح، إلخ). |
Runtime(String) | تعطّل وقت التشغيل أثناء بدء التشغيل قبل أن يصبح جاهزاً. |
Aborted(String) | تم إلغاء بدء التشغيل (مثلاً، إشارة إيقاف تشغيل أثناء الإقلاع). |
Cheatcode(String) | فشل استدعاء cheatcode داخل المنشئ. |
يُطلق JS SDK استثناءً Error تتضمّن رسالته نفس المتغير الأساسي.
Is this page helpful?