Глоссарий / Узлы и ПО
RPC
Другие названия: JSON-RPC, Удаленный вызов процедур.
- Что такое RPC?
- RPC представляет собой командный интерфейс, который узел биткоина открывает другим программам, позволяя кошельку, серверной части биржи или вашему собственному терминалу задавать ему вопросы и отдавать команды.
Все, что автоматизирует работу с биткоином, общается с узлом именно так. Bitcoin Core слушает порт 8332 для HTTP-запросов, несущих JSON, отвечает на один вызов за раз и по умолчанию принимает подключения только с той машины, на которой работает. Если сервис когда-либо называл вам оценку комиссии или сообщал, что вывод подтвержден, этот ответ породил какой-то вызов RPC.
Как это работает
Вызов RPC представляет собой HTTP POST, в теле которого назван метод и перечислены его аргументы.
Запросите getblockchaininfo, и в ответ придут имя цепи, текущая высота, ход проверки и размер на диске. Запросите listunspent или sendtoaddress, и вы управляете кошельком узла. Запросите getrawtransaction, и вы получите байты. Входящая в комплект программа bitcoin-cli представляет собой тонкую обертку, которая строит JSON, отправляет его и печатает ответ, так что все, что вы можете набрать в командной строке, программа может сделать через сокет.
У аутентификации есть история, которую стоит знать. Bitcoin Core отказался от встроенной поддержки SSL в версии 0.12.0, поэтому интерфейс говорит по незашифрованному HTTP и никак иначе. Тот же выпуск ввел файл cookie: случайные учетные данные, которые записываются в каталог данных при запуске и заменяются при каждом перезапуске, поэтому bitcoin-cli работает на вашей машине без того, чтобы вы когда-либо задавали пароль. Для удаленных клиентов есть rpcauth, который хранит в файле конфигурации хеш с солью, а не секрет в открытом виде. Шифрования транспорта по-прежнему нет, поэтому добраться до узла по сети можно только через туннель SSH, VPN или скрытый сервис Tor, и ничего другого не подойдет.
У каждой сети свой порт, чтобы несколько демонов могли делить одну машину: 8332 в mainnet, 18332 в testnet3, 48332 в testnet4, 38332 в signet и 18443 в regtest. Порт RPC в mainnet стоит прямо под одноранговым портом 8333, и путаница между ними является частой первой ошибкой.
Диалект менялся медленно. Bitcoin Core отвечал вольным вариантом JSON-RPC 1.0 более десяти лет, а версия 28.0 научила сервер распознавать запросы JSON-RPC 2.0 и отвечать в строгом соответствии с этой спецификацией, по-прежнему принимая старый стиль. Вызовы, относящиеся к кошельку, адресуются по пути, поэтому узел с несколькими кошельками направляет их через /wallet/, за которым следует имя кошелька.
Где это видно
RPC является стыком между самим биткоином и каждым продуктом, построенным поверх него.
Реализация Lightning запрашивает у узла блоки и отправляет через него транзакции закрытия каналов. Обозреватели блоков, панели мемпула и платежные процессоры, такие как BTCPay Server, работают на экземпляре bitcoind и оборачивают его во что-то более удобное. Система вывода средств на бирже в основании стека представляет собой очередь вызовов sendrawtransaction. Когда в наших обзорах бирж отмечено, что платформа объединяет выводы в пакеты, это пакетирование происходит в коде, который в итоге оказывается здесь.
Здесь же компрометируются конфигурации, развернутые самостоятельно. Порт 8332 сканируется постоянно, а узел, открытый в интернет с легко угадываемым паролем и загруженным кошельком, представляет собой кошелек, который будет опустошен. Держите интерфейс привязанным к локальной машине и подключайтесь через туннель, если он нужен вам откуда-то еще.
RPC vs порядок байтов RPC
RPC и порядок байтов RPC делят только аббревиатуру и ничего больше, и это порождает реальные ошибки. RPC является интерфейсом. Порядок байтов RPC представляет собой соглашение отображения: хеши блоков и транзакций вычисляются и передаются в одном направлении, а слой RPC печатает их в обратном, поэтому txid, скопированный из обозревателя блоков, читается задом наперед по сравнению с теми же 32 байтами внутри сырой транзакции. Подайте скопированный txid прямо в байтовый анализатор, не развернув его, и поиск просто никогда не совпадет.