Розширені функціональні можливості
Surfnet виходить за межі простого відтворення мережі mainnet на localnet — він дозволяє вдосконалювати та змінювати основні функції Solana шляхом зміни облікових записів, системних змінних та стану блокчейну.
Ці модифікації відбуваються через RPC-виклики до Surfnet, що дозволяє вносити зміни як програмно (для автоматизованих тестових середовищ), так і через команди терміналу (для одноразових операцій).
Для виконання RPC-викликів у вашому коді використовуйте:
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-викликів у вашому терміналі використовуйте:
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
таким чином:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_timeTravel",
"params": [
{
"absoluteEpoch": 0
}
]
}
Призупинення та відновлення створення блоків
Керуйте прогресом блоків для покрокового налагодження транзакцій або тестування логіки, чутливої до часу. Використовуйте surfnet_pauseClock
для зупинки створення блоків і surfnet_resumeClock
для продовження:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_pauseClock", // or "surfnet_resumeClock"
"params": []
}
Modify Account Data
Налаштування параметрів SOL
Налаштуйте параметри пропозиції SOL для тестування економічних сценаріїв або граничних випадків.
Метод surfnet_setSupply
приймає параметри circulating
, nonCirculating
, nonCirculatingAccounts
та total
:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_setSupply",
"params": [
{
"circulating": 1000000000,
"nonCirculating": 1000000000,
"nonCirculatingAccounts": [],
"total": 1000000000
}
]
}
Передача облікових записів між програмами
Клонуйте програмні облікові записи з однієї програми в іншу за допомогою surfnet_cloneProgramAccount
. Корисно для тестування оновлень програм або міграції стану між різними версіями програм.
Потребує як destinationProgramId
, так і sourceProgramId
:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_cloneProgramAccount",
"params": [
{
"destinationProgramId": "string",
"sourceProgramId": "string"
}
]
}
Оновлення даних облікового запису
Змінюйте будь-які властивості облікового запису, включаючи лампорти, дані, власника та статус виконання, використовуючи surfnet_setAccount
.
Метод вимагає pubkey
і приймає необов'язкові поля для data
, executable
, lamports
, owner
та rentEpoch
:
{
"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
:
{
"jsonrpc": "2.0",
"id": 1,
"method": "surfnet_setTokenAccount",
"params": [
"1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh",
"11111112D1oxKts8YPdTJRG5FzxTNpMtWmq8hkVx3",
{
"amount": 1000000000,
"closeAuthority": "111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj",
"delegate": "11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP",
"delegatedAmount": 1000000000,
"state": "initialized"
},
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
]
}