Перейти к основному содержимому

Node API

Узел обслуживает JSON-RPC 2.0 на одном слушателе, привязанном к 127.0.0.1 порту 3413 по умолчанию, разделённом на два интерфейса.

ПоверхностьПутьОбслуживает
Owner/v2/ownerАдминистрирование узла, восемь методов
Foreign/v2/foreignЧтение цепочки, отправка транзакций, шаблоны блоков, семнадцать методов

Учётные данные и то, какой из этих интерфейсов их требует, описаны в разделе аутентификация и TLS.

Тот же слушатель также предоставляет REST-интерфейс по адресу /v1. См. REST-интерфейс v1.

Какой JSON-RPC метод где находится

/v2/owner — только администрирование узла:

get_status, validate_chain, compact_chain, get_peers, get_connected_peers, ban_peer, unban_peer, get_onion_addresses.

/v2/foreign — всё остальное, включая все операции чтения цепочки и отправку транзакций:

get_header, get_block, get_blocks, get_tip, get_version, get_kernel, get_last_n_kernels, get_outputs, get_unspent_outputs, get_pmmr_indices, get_pool_size, get_stempool_size, get_unconfirmed_transactions, push_transaction, get_block_template, finalize_block_template, submit_block.

Таким образом, чтение блока — это вызов к foreign-интерфейсу, и на стандартной установке учётные данные не требуются:

curl -s -d '{"jsonrpc":"2.0","method":"get_tip","params":[],"id":1}' \
http://127.0.0.1:3413/v2/foreign

Проверка состояния синхронизации — вызов owner-интерфейса, требующий учётных данных узла.

Форматы ответов

total_difficulty — объект с ключами по алгоритму доказательства работы (proof of work), а не целое число:

{
"total_difficulty": {
"cuckaroo": 0,
"cuckatoo": 1234,
"randomx": 5678,
"progpow": 9012
}
}

Заголовки блоков описывают своё доказательство двумя полями: proof — строка с именем алгоритма, и solution — размеченное объединение, форма которого определяется этим алгоритмом.

Status включает supply и max_supply в целых EPIC, а не в freemen, и blocks_to_next_halving как количество блоков. Шаги эмиссии — не все халвинги; см. эмиссия.

Ядра (kernels) представлены в двух формах в зависимости от метода. get_block возвращает плоскую форму, тогда как get_kernel и get_last_n_kernels возвращают исходный тип с внешне размеченным полем features. Необходимо обрабатывать обе формы.

Майнинг через HTTP

Foreign-интерфейс предлагает трёхшаговый процесс отправки блока как альтернативу Stratum: get_block_template, finalize_block_template, submit_block. Используется JSON-RPC поверх HTTP. См. Stratum.

REST-поверхность v1

Узел обслуживает REST по адресу /v1 и JSON-RPC по адресу /v2 из одного процесса на одном порту. Числа обозначают два стиля интерфейса, а не два поколения: /v1 зарегистрирован по адресу api/src/handlers.rs:536, /v2 — по адресам api/src/handlers.rs:135 и api/src/handlers.rs:155.

Разница заключается в том, где указывается имя операции.

/v1/v2
СтильRESTJSON-RPC 2.0
Операция задаётсяпутём URLполем method в теле запроса
HTTP-глаголомGET, POST для мутацийPOST
URL-адресапо одному на операцию/v2/foreign, /v2/owner, /v2/tor
Результатполезная нагрузкаполезная нагрузка внутри result.Ok
Учётные данныеBasic auth для префикса /v1для каждого интерфейса

Оба интерфейса возвращают одинаковые данные. GET /v1/status и get_status на /v2/owner возвращают идентичные тела ответов, поэтому страницы JSON-RPC документируют форматы ответов для обоих.

GET /, GET /v1/ и GET /v2/ возвращают список маршрутов v1, начиная с api/src/handlers.rs:446.

Маршруты

Глаголы соответствуют тому, как их сообщает индекс маршрутов узла. Правый столбец — метод JSON-RPC, возвращающий то же самое, и его интерфейс.

Все маршруты v1 и их эквиваленты в JSON-RPC

Маршрутизатор регистрирует 19 шаблонов, три из которых являются шаблонами с подстановкой.

МаршрутГлаголЭквивалент JSON-RPC
/v1/GETнет, это индекс маршрутов
/v1/statusGETget_status, owner
/v1/chainGETget_tip, foreign
/v1/chain/validateGETvalidate_chain, owner
/v1/chain/compactPOSTcompact_chain, owner
/v1/blocks/<hash|height>GETget_block, foreign
/v1/headers/<hash|height|commit>GETget_header, foreign
/v1/chain/kernels/<excess>?min_height=&max_height=GETget_kernel, foreign
/v1/chain/outputs/byids?id=GETget_outputs, foreign
/v1/chain/outputs/byheight?start_height=&end_height=GETget_outputs, foreign
/v1/txhashset/rootsGETnone
/v1/txhashset/lastoutputs?n=GETnone
/v1/txhashset/lastrangeproofsGETnone
/v1/txhashset/lastkernelsGETget_last_n_kernels, foreign
/v1/txhashset/outputs?start_index=&max=GETget_unspent_outputs, foreign
/v1/txhashset/merkleproof?n=GETinclude_merkle_proof на get_outputs, foreign
/v1/poolGETget_pool_size и get_stempool_size, foreign
/v1/pool/push_txPOSTpush_transaction, foreign
/v1/peers/allGETget_peers, owner
/v1/peers/connectedGETget_connected_peers, owner
/v1/peers/<addr>GETget_peers с peer_addr, owner
/v1/peers/<addr>/banPOSTban_peer, owner
/v1/peers/<addr>/unbanPOSTunban_peer, owner
/v1/peers/onion_addressesGETget_onion_addresses, owner
/v1/versionGETget_version, foreign
/v1/mining/block_templateGETget_block_template, foreign
/v1/kerneldownloadGETnone

Вызов /v1, который принимает учётные данные узла для всего префикса:

curl -s -u epic:$(cat ~/.epic/main/.api_secret) http://127.0.0.1:3413/v1/status
{
"protocol_version": 2,
"user_agent": "MW/Epic 4.0.3",
"connections": 0,
"tip": {
"height": 1439,
"last_block_pushed": "9abbd80483f9b082a9362ebac0aba5619bdba7cf647cb15f5ed33102faf3cd1b",
"prev_block_to_last": "6ceed7ff0ff7da1d44b01dc03189edeb1323bfa6d3625768520dd1a0498a0735",
"total_difficulty": {"cuckaroo": 1440, "cuckatoo": 1440, "randomx": 1440, "progpow": 1440}
},
"sync_status": "no_sync",
"supply": 23024,
"max_supply": 21000000,
"blocks_to_next_halving": 479521
}

Захвачено на локальной цепочке usernet на высоте блока 1439, 2026-08-24.

Полный справочник методов

Источник

Далее