Referensi JS API

Paket @solana/surfpool mengekspos satu kelas, Surfnet, beserta tipe pendukung yang Anda butuhkan untuk memanggil metodenya dengan aman secara tipe. Halaman ini mencantumkan setiap simbol yang diekspor; untuk penggunaan naratif, lihat panduan yang dimulai dengan Ikhtisar.

Ekspor Paket

SimbolJenisCatatan
SurfnetkelasInstance Surfnet yang berjalan dengan metode cheatcode
SurfnetConfigtipeArgumen untuk Surfnet.startWithConfig
DeployOptionstipeArgumen untuk Surfnet.deploy
SetTokenAccountUpdatetipeArgumen untuk Surfnet.setTokenAccount
ResetAccountOptionstipeArgumen untuk Surfnet.resetAccount
StreamAccountOptionstipeArgumen untuk Surfnet.streamAccount
SolAccountFundingtipeElemen dari array yang diteruskan ke Surfnet.fundSolMany
SimnetEventValuetipeElemen yang dikembalikan oleh Surfnet.drainEvents
KeypairInfotipeDikembalikan oleh Surfnet.newKeypair
ClockValuetipeField pada SimnetEventValue
EpochInfoValuetipeDikembalikan oleh helper perjalanan waktu
ByteArrayLiketipeUint8Array | number[] — input byte fleksibel

Kelas Surfnet

Metode Statis

class Surfnet {
static start(): Surfnet;
static startWithConfig(config: SurfnetConfig): Surfnet;
static newKeypair(): KeypairInfo;
}

Properti Instance

class Surfnet {
readonly rpcUrl: string; // http://127.0.0.1:<port>
readonly wsUrl: string; // ws://127.0.0.1:<port>
readonly payer: string; // base58 public key
readonly payerSecretKey: Uint8Array; // 64-byte private key
readonly instanceId: string;
}

Siklus Hidup

class Surfnet {
stop(): void; // idempotent; safe to call from `finally` / test teardown
}

Cheatcode SOL

class Surfnet {
fundSol(address: string, lamports: number): void;
fundSolMany(accounts: SolAccountFunding[]): void;
setAccount(
address: string,
lamports: number,
data: Uint8Array,
owner: string
): void;
resetAccount(address: string, options?: ResetAccountOptions): void;
}

Cheatcode Token

class Surfnet {
fundToken(
owner: string,
mint: string,
amount: number,
tokenProgram?: string
): void;
fundTokenMany(
owners: string[],
mint: string,
amount: number,
tokenProgram?: string
): void;
setTokenBalance(
owner: string,
mint: string,
amount: number,
tokenProgram?: string
): void;
setTokenAccount(
owner: string,
mint: string,
update: SetTokenAccountUpdate,
tokenProgram?: string
): void;
getAta(owner: string, mint: string, tokenProgram?: string): string;
}

Perjalanan Waktu

class Surfnet {
timeTravelToSlot(slot: number): EpochInfoValue;
timeTravelToEpoch(epoch: number): EpochInfoValue;
timeTravelToTimestamp(timestampMs: number): EpochInfoValue;
}

Deployment Program

class Surfnet {
deployProgram(programName: string): string; // returns program id
deploy(options: DeployOptions): string; // returns program id
}

Streaming & Event

class Surfnet {
streamAccount(address: string, options?: StreamAccountOptions): void;
drainEvents(): SimnetEventValue[];
}

Tipe Konfigurasi

SurfnetConfig

interface SurfnetConfig {
offline?: boolean; // default: true
remoteRpcUrl?: string; // setting this implies offline=false
blockProductionMode?: "manual" | "clock" | "transaction"; // default: "transaction"
slotTimeMs?: number; // default: 1
airdropSol?: number; // lamports; default: 10_000_000_000
airdropAddresses?: string[];
payerSecretKey?: ByteArrayLike;
enableFeatures?: string[]; // feature IDs (base58 or kebab name)
disableFeatures?: string[];
allFeatures?: boolean;
}

DeployOptions

interface DeployOptions {
programId: string; // base58 address
soPath?: string; // mutually exclusive with soBytes
soBytes?: ByteArrayLike;
idlPath?: string; // optional Anchor IDL JSON
}

SetTokenAccountUpdate

interface SetTokenAccountUpdate {
amount?: number;
delegate?: string; // base58 pubkey
clearDelegate?: boolean;
state?: string; // e.g. "initialized", "frozen"
delegatedAmount?: number;
closeAuthority?: string;
clearCloseAuthority?: boolean;
}

ResetAccountOptions

interface ResetAccountOptions {
includeOwnedAccounts?: boolean;
}

StreamAccountOptions

interface StreamAccountOptions {
includeOwnedAccounts?: boolean;
}

SolAccountFunding

interface SolAccountFunding {
address: string;
lamports: number;
}

KeypairInfo

interface KeypairInfo {
publicKey: string; // base58
secretKey: number[]; // 64 bytes
}

ByteArrayLike

type ByteArrayLike = Uint8Array | number[];

Jika sebuah metode menerima ByteArrayLike, Anda dapat meneruskan Uint8Array atau array angka biasa. Wrapper menormalisasi keduanya ke dalam format yang diharapkan oleh binding native.

Tipe Event

SimnetEventValue

Objek datar dengan diskriminator kind dan field opsional. Lihat Events untuk katalog varian.

interface SimnetEventValue {
kind: string;
message?: string;
timestamp?: string;
initialTransactionCount?: number;
clock?: ClockValue;
epochInfo?: EpochInfoValue;
accountPubkey?: string;
clockCommand?: string;
slotIntervalMs?: number;
transactionSignature?: string;
logs?: string[];
computeUnitsConsumed?: number;
fee?: number;
errorMessage?: string;
tag?: string;
profileKey?: string;
profileSlot?: number;
runbookId?: string;
runbookErrors?: string[];
}

ClockValue

interface ClockValue {
slot: number;
epoch: number;
leaderScheduleEpoch: number;
unixTimestamp: number;
epochStartTimestamp: number;
}

EpochInfoValue

interface EpochInfoValue {
absoluteSlot: number;
slotIndex: number;
slotsInEpoch: number;
epoch: number;
blockHeight: number;
transactionCount?: number;
}

Error

Setiap metode melempar Error standar yang pesannya membungkus SurfnetError Rust yang mendasarinya. Periksa error.message untuk membedakan antar kasus.

try {
surfnet.deploy({ programId, soPath: "missing.so" });
} catch (err) {
// err.message starts with "Cheatcode:" / "Startup:" / etc.
console.error(err);
}

Jejak Modul Native

Paket ini bergantung pada binari native khusus platform yang diterbitkan sebagai optionalDependencies:

TriplePaket
aarch64-apple-darwin@solana/surfpool-darwin-arm64
x86_64-apple-darwin@solana/surfpool-darwin-x64
x86_64-unknown-linux-gnu@solana/surfpool-linux-x64-gnu

Jika tidak ada paket platform yang berhasil diinstal di mesin Anda, Surfnet.start() akan melempar error saat pertama kali dipanggil dengan pesan "native module not found" yang jelas. Lihat Instalasi untuk matriks dukungan dan pemecahan masalah.

Is this page helpful?

© 2026 Yayasan Solana. Semua hak dilindungi.