يتم نشر Surfpool SDK على شكل نتاجَين يغلّفان نفس وقت تشغيل Rust:
| اللغة | الحزمة | بيئة التشغيل |
|---|---|---|
| Rust | surfpool-sdk على crates.io | داخل أي وقت تشغيل #[tokio::test] أو غير متزامن |
| TypeScript / JavaScript | @solana/surfpool على npm | Node.js 18+ عبر الروابط الأصلية لـ napi-rs |
Rust
أضف الـ crate كاعتمادية تطوير. يعتمد SDK على البرمجة غير المتزامنة بالدرجة
الأولى ويتوقع وقت تشغيل Tokio، لذا أدرج tokio مع ميزة full للاختبارات.
[dev-dependencies]surfpool-sdk = "1"tokio = { version = "1", features = ["full"] }
يُعيد الـ crate تصدير أنواع سولانا الأكثر استخدامًا، لذا عادةً ما يكفي استيراد
واحد use surfpool_sdk::{...}:
use surfpool_sdk::{Keypair, Pubkey, RpcClient, Signer, // re-exported Solana typesSurfnet, SurfnetBuilder, SurfnetError, // SDK entry pointsBlockProductionMode, SimnetEvent, // re-exported surfpool types};
إذا كنت بحاجة إلى نوع غير مُعاد تصديره، فأدرج الـ crate الخاص بسولانا مباشرةً
كاعتمادية — لا يُقيّدك SDK بأي إصدار محدد من solana-program أو
solana-client.
TypeScript / JavaScript
قم بالتثبيت كاعتمادية تطوير باستخدام مدير الحزم المفضل لديك:
npm install --save-dev @solana/surfpool# orpnpm add -D @solana/surfpool# oryarn add --dev @solana/surfpool
تُصدِّر الحزمة فئة Surfnet واحدة بالإضافة إلى الأنواع المساندة:
import {Surfnet, // entry pointtype SurfnetConfig, // config for startWithConfigtype DeployOptions, // explicit program deploytype SetTokenAccountUpdate,type ResetAccountOptions,type StreamAccountOptions,type SimnetEventValue, // event drained from drainEvents()type KeypairInfo, // shape returned by Surfnet.newKeypair()type EpochInfoValue,type ClockValue} from "@solana/surfpool";
المنصات المدعومة
تعتمد حزمة JS على وحدات أصلية خاصة بالمنصة يتم تثبيتها تلقائيًا كـ
optionalDependencies:
| المنصة | Target triple | حزمة npm |
|---|---|---|
| macOS Apple Silicon | aarch64-apple-darwin | @solana/surfpool-darwin-arm64 |
| macOS Intel | x86_64-apple-darwin | @solana/surfpool-darwin-x64 |
| Linux x86-64 (glibc) | x86_64-unknown-linux-gnu | @solana/surfpool-linux-x64-gnu |
منصة غير مدعومة
إذا تم تثبيت الحزمة على منصة لا يوجد لها ملف ثنائي مطابق، فسيكتمل التثبيت لكن
Surfnet.start() سيُطلق خطأً عند وقت التشغيل. افتح تذكرة إذا كنت بحاجة إلى
دعم منصة إضافية.
المتطلبات
- Node.js 18 أو أحدث. يستخدم SDK الدالة
Uint8Array، وfetchالأصلية، وassert/strictمنnode:test. - دليل مؤقت قابل للكتابة. تُخصص كل نسخة من Surfnet منافذ وقد تكتب بيانات مؤقتة إلى دليل النظام المؤقت.
التحقق من التثبيت
يُؤكد اختبار سريع من سطر واحد أن وقت التشغيل يبدأ وأن نقطة نهاية RPC تقبل الطلبات.
use surfpool_sdk::{Signer, Surfnet};#[tokio::test]async fn surfpool_sdk_smoke() {let surfnet = Surfnet::start().await.expect("start surfnet");let balance = surfnet.rpc_client().get_balance(&surfnet.payer().pubkey()).expect("get balance");assert!(balance > 0);}
استكشاف الأخطاء وإصلاحها
`failed to bind to port` on Rust
عملية أخرى تقوم بربط 0.0.0.0 بشكل متكرر. أعد تشغيل الاختبار — يختار SDK
منفذاً جديداً في كل استدعاء. إذا استمر الفشل، تحقق من وجود عمليات surfpool
معلّقة.
`Cannot find module '@solana/surfpool-...'`
لم يتم تثبيت إدخال optionalDependencies الخاص بمنصتك. أعد تشغيل التثبيت
باستخدام --include=optional، أو تحقق من أن منصتك مدرجة في جدول المنصات
المدعومة أعلاه.
`stop()` hangs in JS
تأكد من أنك تستدعي stop() مرة واحدة لكل start(). يبقي غلاف Node خوادم RPC
وWebSocket مرتبطة حتى يُرجع stop() قيمته.
Is this page helpful?