getblocktemplate — метод JSON-RPC для получения данных сборки кандидата на блок или оценки предложения. Описание основано на Bitcoin Core 29; особенности реализации не распространяются автоматически на все серверы этого протокола.
По умолчанию mode равен template. Ответ предоставляет данные майнинговому ПО, а не найденный proof of work. Этот запрос не принимает адрес выплаты как параметр; создание coinbase и поиск решения выполняются далее. [Bitcoin Core 29 — getblocktemplate RPC]
Bitcoin Core v29.0 требует segwit в rules запроса, а в сети signet также signet. Запись строки не заменяет реализацию соответствующих правил. capabilities описывает функции интерфейса и не заменяет обязательные rules. [Bitcoin Core v29.0 — Mining RPC implementation]
BIP 145 различает txid без witness и hash с witness. Основной Merkle root использует txid, а не witness-хеш. data содержит сериализованную транзакцию в шестнадцатеричном виде; один идентификатор не содержит всех её байтов. [BIP 145 — SegWit template fields]
Клиент возвращает полученный longpollid в следующем ожидающем запросе. BIP 22 предписывает не предполагать определённого значения, поэтому переносимый клиент не должен разбирать его как собственный формат. Long polling требует долгого тайм-аута и пауз после повторных ошибок, а не непрерывного цикла повторов. [BIP 22 — Long polling]
Bitcoin Core v29.0 кеширует шаблон: меняет его при смене предшественника либо изменении mempool более чем через пять секунд после создания. Время заголовка обновляется отдельно. Поэтому каждый вызов не обязан включать новейшую транзакцию или создавать независимую работу для майнинга. [Bitcoin Core v29.0 — Mining RPC implementation]
В режиме proposal data содержит целый кандидатный блок в шестнадцатеричном виде. Core проверяет Merkle root, но не требует действительного proof of work. inconclusive-not-best-prevblk означает иного предшественника, чем текущая вершина; это не полная оценка действительности предложения. [Bitcoin Core v29.0 — Mining RPC implementation]
submitblock получает целый блок как hexdata, а не только хеш. Bitcoin Core 29 возвращает null при принятии; иначе может вернуть строку результата. Необязательный dummy игнорируется. Принятие узлом не гарантирует постоянного подтверждения в активной цепи. [Bitcoin Core 29 — submitblock RPC]
В mainnet Bitcoin Core v29.0 не выдаёт шаблон без подключённых пиров или во время initial block download. Это описывает готовность узла, а не недействительность конкретного блока. Отличайте такие ошибки от причин отказа при валидации и от нормально ожидающего long polling. [Bitcoin Core v29.0 — Mining RPC implementation]
Для полной картины прочитайте эту статью вместе с Block Template, Майнинг, Stratum V2, Extranonce. На эту статью также ссылаются ASIC Miner, Solo Mining, Job Negotiation.