التثبيت

يتم نشر Surfpool SDK على شكل نتاجَين يغلّفان نفس وقت تشغيل Rust:

اللغةالحزمةبيئة التشغيل
Rustsurfpool-sdk على crates.ioداخل أي وقت تشغيل #[tokio::test] أو غير متزامن
TypeScript / JavaScript@solana/surfpool على npmNode.js 18+ عبر الروابط الأصلية لـ napi-rs

Rust

أضف الـ crate كاعتمادية تطوير. يعتمد SDK على البرمجة غير المتزامنة بالدرجة الأولى ويتوقع وقت تشغيل Tokio، لذا أدرج tokio مع ميزة full للاختبارات.

Cargo.toml
[dev-dependencies]
surfpool-sdk = "1"
tokio = { version = "1", features = ["full"] }

يُعيد الـ crate تصدير أنواع سولانا الأكثر استخدامًا، لذا عادةً ما يكفي استيراد واحد use surfpool_sdk::{...}:

use surfpool_sdk::{
Keypair, Pubkey, RpcClient, Signer, // re-exported Solana types
Surfnet, SurfnetBuilder, SurfnetError, // SDK entry points
BlockProductionMode, SimnetEvent, // re-exported surfpool types
};

إذا كنت بحاجة إلى نوع غير مُعاد تصديره، فأدرج الـ crate الخاص بسولانا مباشرةً كاعتمادية — لا يُقيّدك SDK بأي إصدار محدد من solana-program أو solana-client.

TypeScript / JavaScript

قم بالتثبيت كاعتمادية تطوير باستخدام مدير الحزم المفضل لديك:

npm install --save-dev @solana/surfpool
# or
pnpm add -D @solana/surfpool
# or
yarn add --dev @solana/surfpool

تُصدِّر الحزمة فئة Surfnet واحدة بالإضافة إلى الأنواع المساندة:

import {
Surfnet, // entry point
type SurfnetConfig, // config for startWithConfig
type DeployOptions, // explicit program deploy
type 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 Siliconaarch64-apple-darwin@solana/surfpool-darwin-arm64
macOS Intelx86_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?

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

تعديل الصفحة