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:
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:8899Personalizar 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:
{
"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:
{
"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:
{
"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:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_cloneProgramAccount",
"params": [
{
"destinationProgramId": "string",
"sourceProgramId": "string"
}
]
}Atualizar Dados 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:
{
"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:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_setTokenAccount",
"params": [
"1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh",
"11111112D1oxKts8YPdTJRG5FzxTNpMtWmq8hkVx3",
{
"amount": 1000000000,
"closeAuthority": "111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj",
"delegate": "11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP",
"delegatedAmount": 1000000000,
"state": "initialized"
},
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
]
}