General
Testando com Surfpool

Testando com Surfpool

Funcionalidades Avançadas

Surfnet vai além de replicar a mainnet na localnet — permite que você aprimore e modifique recursos principais do Solana alterando contas, variáveis de sistema e o estado da blockchain.

Essas modificações acontecem através de chamadas RPC para o Surfnet, permitindo alterações tanto programaticamente (para ambientes de teste automatizados) quanto via comandos de terminal (para operações pontuais).

Para executar chamadas RPC no seu código, use:

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

Para executar chamadas RPC no seu terminal, use:

curl -X POST \
    -H "Content-Type: application/json" \
    -d '{
        "jsonrpc": "2.0",
        "id": 1,
        "method": "<surfnet-method>",
        "params": [<surfnet-method-params]
    }' \
    http://localhost:8899

Personalizar Variáveis do Sistema

Viagem no Tempo

Salte para qualquer ponto da história da blockchain usando o método surfnet_timeTravel. Isso é invalioso para testar como seu programa se comporta em diferentes estados da rede ou reproduzir bugs que ocorreram em momentos específicos.

Especifique um de: absoluteEpoch, absoluteSlot, ou absoluteTimestamp assim:

ts
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "surfnet_timeTravel",
  "params": [
    {
      "absoluteEpoch": 0
    }
  ]
}

Pausar e Retomar a Produção de Blocos

Controle a progressão dos blocos para depurar transações passo a passo ou testar lógica sensível ao tempo. Use surfnet_pauseClock para interromper a produção de blocos e surfnet_resumeClock para continuar:

ts
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "surfnet_pauseClock", // ou "surfnet_resumeClock"
  "params": []
}

Modificar Dados da Conta

Configurar Parâmetros do SOL

Configure parâmetros de oferta de SOL para testar cenários econômicos ou casos extremos.

O método surfnet_setSupply aceita parâmetros circulating, nonCirculating, nonCirculatingAccounts e total:

ts
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "surfnet_setSupply",
  "params": [
    {
      "circulating": 1000000000,
      "nonCirculating": 1000000000,
      "nonCirculatingAccounts": [],
      "total": 1000000000
    }
  ]
}

Transferir Contas Entre Programas

Clone contas de programa de um programa para outro usando surfnet_cloneProgramAccount. Útil para testar upgrades de programas ou migrar estado entre diferentes versões do programa.

Requer tanto destinationProgramId quanto sourceProgramId:

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

Atualizar Dados da Conta

Atualizar uma conta já existente com os métodos a seguir sobrescreverá o estado da conta

Modifique as propriedades de qualquer conta, incluindo lamports, dados, owner e status executável usando surfnet_setAccount.

O método requer uma pubkey e aceita campos opcionais para data, executable, lamports, owner e rentEpoch:

ts
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "surfnet_setAccount",
  "params": [
    "1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM",
    {
      "data": "0x123456",
      "executable": false,
      "lamports": 1000000000,
      "owner": "11111111111111111111111111111111",
      "rentEpoch": 0
    }
  ]
}

Adicionalmente, para modificações em contas de token, use o método especializado surfnet_setTokenAccount, que simplifica a alteração de dados para Contas de Token.

Requer os parâmetros owner e mint, com campos opcionais para amount, closeAuthority, delegate, delegateAmount, state e 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 © 2026Commit: 1b88646