الإعداد

Surfnet::start() (Rust) و Surfnet.start() (JS) يُشغّلان Surfnet في وضع عدم الاتصال مع إنتاج كتل في وضع المعاملات ودافع ممول مسبقاً بـ 10 SOL. عندما تحتاج إلى أي شيء آخر — Surfnet مُستنسَخ من الشبكة الرئيسية، أو ساعة أبطأ، أو تمويل حتمي، أو keypair دافع محدد — استخدم المنشئ (Rust) أو startWithConfig (JS).

الإعدادات الافتراضية

إذا استدعيت start() بدون أي وسائط، ستحصل على:

الإعدادالقيمة
الوضعغير متصل (بدون RPC أولي)
إنتاج الكتلالمعاملات (تتقدم الكتل مع كل معاملة)
توقيت slot1 مللي ثانية
الدافعkeypair عشوائي ممول بـ 10 SOL (10,000,000,000 lamport)
رابط RPChttp://127.0.0.1:<random>
رابط WSws://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?: booleanbooltrue
RPC الأوليremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringسلسلة URLلا يوجد
إنتاج الكتلblock_production_mode(BlockProductionMode)blockProductionMode?: stringتعداد / "manual" | "clock" | "transaction"Transaction
توقيت slotslot_time_ms(u64)slotTimeMs?: numberمللي ثانية1
عناوين الإسقاط الجويairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]قائمة pubkeyفارغة
مبلغ الإسقاط الجويairdrop_sol(u64)airdropSol?: numberlamport10_000_000_000
تخطي blockhashskip_blockhash_check(bool)غير متاحboolfalse
دافع مخصصpayer(Keypair)payerSecretKey?: Uint8Array | number[]keypair / بايتاتمُولَّد تلقائياً
تفعيل ميزةenable_feature(Pubkey)enableFeatures?: string[]معرّف(ات) الميزةلا يوجد
تعطيل ميزةdisable_feature(Pubkey)disableFeatures?: string[]معرّف(ات) الميزةلا يوجد
جميع الميزاتغير متاحallFeatures?: booleanboolfalse
إعداد الميزات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?

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

تعديل الصفحة