General
Тестування з Surfpool

Тестування з Surfpool

Розширені функціональності

Розширені функціональні можливості

Surfnet виходить за межі простого відтворення мережі mainnet на localnet — він дозволяє вдосконалювати та змінювати основні функції Solana шляхом зміни облікових записів, системних змінних та стану блокчейну.

Ці модифікації відбуваються через RPC-виклики до Surfnet, що дозволяє вносити зміни як програмно (для автоматизованих тестових середовищ), так і через команди терміналу (для одноразових операцій).

Для виконання RPC-викликів у вашому коді використовуйте:

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

Для виконання RPC-викликів у вашому терміналі використовуйте:

bash
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

Подорож у часі

Перейдіть до будь-якої точки в історії блокчейну за допомогою методу surfnet_timeTravel. Це неоціненно для тестування поведінки вашої програми в різних станах мережі або відтворення помилок, які виникли в певний час.

Вкажіть одне з: absoluteEpoch, absoluteSlot або absoluteTimestamp таким чином:

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

Призупинення та відновлення створення блоків

Керуйте прогресом блоків для покрокового налагодження транзакцій або тестування логіки, чутливої до часу. Використовуйте surfnet_pauseClock для зупинки створення блоків і surfnet_resumeClock для продовження:

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

Modify Account Data

Налаштування параметрів SOL

Налаштуйте параметри пропозиції SOL для тестування економічних сценаріїв або граничних випадків.

Метод surfnet_setSupply приймає параметри circulating, nonCirculating, nonCirculatingAccounts та total:

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

Передача облікових записів між програмами

Клонуйте програмні облікові записи з однієї програми в іншу за допомогою surfnet_cloneProgramAccount. Корисно для тестування оновлень програм або міграції стану між різними версіями програм.

Потребує як destinationProgramId, так і sourceProgramId:

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

Оновлення даних облікового запису

Оновлення вже існуючого облікового запису за допомогою наступних методів перезапише стани облікового запису

Змінюйте будь-які властивості облікового запису, включаючи лампорти, дані, власника та статус виконання, використовуючи surfnet_setAccount.

Метод вимагає pubkey і приймає необов'язкові поля для data, executable, lamports, owner та rentEpoch:

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

Крім того, для модифікацій токен-акаунтів використовуйте спеціалізований метод surfnet_setTokenAccount, який спрощує зміну даних для токен-акаунтів.

Вимагає параметрів owner та mint, з необов'язковими полями для amount, closeAuthority, delegate, delegateAmount, state та 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: 6d01265
Blueshift | Тестування з Surfpool | Розширені функціональності