Αναφορά JS API

Το πακέτο @solana/surfpool εκθέτει μία κλάση, Surfnet, καθώς και τους υποστηρικτικούς τύπους που χρειάζεστε για να καλέσετε τις μεθόδους του με ασφάλεια τύπων. Αυτή η σελίδα καταγράφει κάθε εξαγόμενο σύμβολο· για αφηγηματική χρήση, δείτε τους οδηγούς ξεκινώντας από Επισκόπηση.

Εξαγωγές Πακέτου

ΣύμβολοΕίδοςΣημειώσεις
SurfnetκλάσηΕκτελούμενη παρουσία Surfnet με μεθόδους cheatcode
SurfnetConfigτύποςΌρισμα στο Surfnet.startWithConfig
DeployOptionsτύποςΌρισμα στο Surfnet.deploy
SetTokenAccountUpdateτύποςΌρισμα στο Surfnet.setTokenAccount
ResetAccountOptionsτύποςΌρισμα στο Surfnet.resetAccount
StreamAccountOptionsτύποςΌρισμα στο Surfnet.streamAccount
SolAccountFundingτύποςΣτοιχείο του πίνακα που περνά στο Surfnet.fundSolMany
SimnetEventValueτύποςΣτοιχείο που επιστρέφεται από το Surfnet.drainEvents
KeypairInfoτύποςΕπιστρέφεται από το Surfnet.newKeypair
ClockValueτύποςΠεδίο στο SimnetEventValue
EpochInfoValueτύποςΕπιστρέφεται από τα βοηθητικά χρονικής μετακίνησης
ByteArrayLikeτύποςUint8Array | number[] — ευέλικτη είσοδος byte

Κλάση Surfnet

Στατικές Μέθοδοι

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

Ιδιότητες Παρουσίας

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;
}

Κύκλος Ζωής

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

Cheatcodes 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;
}

Cheatcodes 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;
}

Χρονική Μετακίνηση

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

Ανάπτυξη Προγράμματος

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

Ροή & Συμβάντα

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

Τύποι Διαμόρφωσης

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[];

Όπου μια μέθοδος δέχεται ByteArrayLike, μπορείτε να περάσετε είτε ένα Uint8Array είτε ένα απλό πίνακα αριθμών. Ο wrapper εξομαλύνει και τα δύο στη μορφή που αναμένει η native σύνδεση.

Τύποι Συμβάντων

SimnetEventValue

Ένα επίπεδο αντικείμενο με διακριτή τιμή kind και προαιρετικά πεδία. Δείτε Συμβάντα για τον κατάλογο παραλλαγών.

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 του οποίου το μήνυμα περιτυλίγει το υποκείμενο SurfnetError της Rust. Εξετάστε το error.message για να διακρίνετε τις περιπτώσεις.

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

Αποτύπωμα Εγγενούς Ενότητας

Το πακέτο εξαρτάται από εγγενή δυαδικά αρχεία ειδικά για κάθε πλατφόρμα, τα οποία δημοσιεύονται ως optionalDependencies:

TriplePackage
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

Εάν κανένα από τα πακέτα πλατφόρμας δεν εγκατασταθεί στο σύστημά σας, το Surfnet.start() εκτελεί εξαίρεση κατά την πρώτη κλήση με ένα σαφές σφάλμα «δεν βρέθηκε εγγενής ενότητα». Ανατρέξτε στην Εγκατάσταση για τον πίνακα υποστήριξης και την αντιμετώπιση προβλημάτων.

Is this page helpful?

© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.