General
Testen mit Surfpool

Testen mit Surfpool

Erweiterte Funktionalitäten

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:

ts
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:8899

Customize 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:

ts
{
  "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:

ts
{
  "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:

ts
{
  "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:

ts
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "surfnet_cloneProgramAccount",
  "params": [
    {
      "destinationProgramId": "string",
      "sourceProgramId": "string"
    }
  ]
}

Kontodaten aktualisieren

Das Aktualisieren eines bereits vorhandenen Kontos mit den folgenden Methoden überschreibt die Kontostatus

Ä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:

ts
{
  "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:

ts
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "surfnet_setTokenAccount",
  "params": [
    "1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh",
    "11111112D1oxKts8YPdTJRG5FzxTNpMtWmq8hkVx3",
    {
      "amount": 1000000000,
      "closeAuthority": "111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj",
      "delegate": "11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP",
      "delegatedAmount": 1000000000,
      "state": "initialized"
    },
    "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
  ]
}
Blueshift © 2025Commit: e573eab