Erweiterte Funktionalitäten
Surfnet geht über die Replikation des Mainnets auf dem Localnet hinaus – es ermöglicht dir, Kern-Solana-Funktionen zu erweitern und zu modifizieren, indem du Konten, Systemvariablen und den Blockchain-Status änderst.
Diese Änderungen erfolgen durch RPC-Aufrufe an Surfnet und ermöglichen sowohl programmatische Änderungen (für automatisierte Testumgebungen) als auch über Terminal-Befehle (für einmalige Operationen).
Um RPC-Aufrufe in deinem Code auszuführen, verwende:
const surfnetCall = {
"jsonrpc": "2.0",
"id": 1,
"method": "<surfnet-method>",
"params": [<surfnet-method-params]
}
await fetch(connection.rpcEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(surfnetCall)
});Um RPC-Aufrufe in deinem Terminal auszuführen, verwende:
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "<surfnet-method>",
"params": [<surfnet-method-params]
}' \
http://localhost:8899Customize System Variables
Zeitreise
Springe zu jedem Punkt in der Blockchain-Historie mit der surfnet_timeTravel Methode. Dies ist unschätzbar wertvoll, um zu testen, wie sich dein Programm bei verschiedenen Netzwerkzuständen verhält oder um Bugs zu reproduzieren, die zu bestimmten Zeiten aufgetreten sind.
Gib eines der folgenden an: absoluteEpoch, absoluteSlot oder absoluteTimestamp wie hier:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_timeTravel",
"params": [
{
"absoluteEpoch": 0
}
]
}Block-Produktion pausieren und fortsetzen
Steuere die Block-Progression, um Transaktionen Schritt für Schritt zu debuggen oder zeitkritische Logik zu testen. Verwende surfnet_pauseClock, um die Block-Produktion anzuhalten, und surfnet_resumeClock, um fortzufahren:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_pauseClock", // or "surfnet_resumeClock"
"params": []
}Modify Account Data
SOL-Parameter festlegen
Konfiguriere SOL-Supply-Parameter, um wirtschaftliche Szenarien oder Grenzfälle zu testen.
Die surfnet_setSupply Methode akzeptiert circulating, nonCirculating, nonCirculatingAccounts und total Parameter:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_setSupply",
"params": [
{
"circulating": 1000000000,
"nonCirculating": 1000000000,
"nonCirculatingAccounts": [],
"total": 1000000000
}
]
}Konten zwischen Programmen übertragen
Klone Programmkonten von einem Programm zu einem anderen mit surfnet_cloneProgramAccount. Nützlich für das Testen von Programm-Upgrades oder die Migration von Zuständen zwischen verschiedenen Programmversionen.
Erfordert sowohl destinationProgramId als auch sourceProgramId:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_cloneProgramAccount",
"params": [
{
"destinationProgramId": "string",
"sourceProgramId": "string"
}
]
}Kontodaten aktualisieren
Ändern Sie beliebige Eigenschaften eines Kontos, einschließlich Lamports, Daten, Eigentümer und ausführbaren Status mit surfnet_setAccount.
Die Methode erfordert eine pubkey und akzeptiert optionale Felder für data, executable, lamports, owner und rentEpoch:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_setAccount",
"params": [
"1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM",
{
"data": "0x123456",
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0
}
]
}Für Token-Kontoänderungen verwenden Sie zusätzlich die spezialisierte surfnet_setTokenAccount Methode, die das Ändern von Daten für Token-Konten vereinfacht.
Erfordert die Parameter owner und mint, mit optionalen Feldern für amount, closeAuthority, delegate, delegateAmount, state und tokenProgram:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_setTokenAccount",
"params": [
"1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh",
"11111112D1oxKts8YPdTJRG5FzxTNpMtWmq8hkVx3",
{
"amount": 1000000000,
"closeAuthority": "111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj",
"delegate": "11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP",
"delegatedAmount": 1000000000,
"state": "initialized"
},
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
]
}