ядро биткойна — интерпретация описаний из биткойнрпк для питона
Таким образом я пробежался по блокчейну Биткойн и сравнил описания с https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md...
rpc_connection = AuthServiceProxy(" rpc_password))
blockhash = rpc_connection.getblockhash(b)
blockTxDecoded = rpc_connection.getblock(blockhash, 2)
for txid in blockTxDecoded['tx']:
for output in txid['vout']:
# more than 1 address to loop through for descriptors starting "multi("
for x in rpc_connection.deriveaddresses(output['scriptPubKey']['desc']):
print("address: " + str(x) + " with value: " + str(output['value']))
Я замечаю, что…
- в первых 727 блоках все описания в формате
pk(...
- на блоке 728 мы видим, что наше первое описание начинается
addr(
. - на блоке 71 036 мы видим первый пример дескриптора, начинающегося
raw(
которая, по-видимому, была потенциальной DOS-атакой на эта почта. Итак, в блоке 127 630 мы получаем еще несколько необработанных описаний, которые кажутся «действительными» (например,raw(76a91469d28eb9a311256338d281025a7437096149472c88ac61)#22d6jvgp
) - в блоке 164 467 мы получаем наш первый дескриптор для запуска
multi(
- после этого мы не видим никаких других типов дескрипторов (по крайней мере, до блока 210 000, который я продвинул до сих пор). то есть дескрипторы не начинаются
pkh(
илиwpkh(
илиsh(
илиcombo(
илиwsh(
илиtr(
как упоминалось в документации github, которую я связал
Исходя из этого, у меня есть некоторые вопросы, на которые я не могу найти ответы в документации…
- Какая польза от
addr
илиraw
описание? Связано ли это с каким-то действием, которое предпринял узел, отправивший транзакцию? Или какая-то абстракция, которую bitcoinrpc накладывает поверх него? - Если вы пытаетесь разрешить адрес
raw
описание (например,bitcoin-cli deriveaddresses 'raw(76a91469d28eb9a311256338d281025a7437096149472c88ac61)#22d6jvgp'
) вы получите сообщение, в котором говоритсяDescriptor does not have a corresponding address
хотя можно интерпретировать длинную строку в raw(…) как открытый ключ и преобразовать в адрес. То же самое наблюдается сmulti(
дескрипторы тоже — адреса не могут быть получены с помощью функции производных адресов, хотя вы можете сделать это самостоятельно в python. Предположительно, каждый биткойн-выход всегда отправляет какое-то значение на 1-n адресов, поэтому адреса должны быть производными? Или, может быть, если мое приложение попытается определить UTXO, я смогу игнорировать необработанные дескрипторы? Некоторые из них я вообще не могу разрешить по адресу, напримерraw(736372697074)#pz6xwtp5
. - Согласно «Mastering Bitcoin», подавляющее большинство транзакций используют выходы, заблокированные скриптом P2PKH. Но я не вижу их в описаниях (т.е. описаниях, начинающихся с
pkh(
). Что я на самом деле вижу, так это то, что подавляющее большинство из них являются P2PK (т.е. desc начинается сpk(
) - Должен ли я ожидать найти недостающие описания (
pkh(
илиwpkh(
илиsh(
илиcombo(
илиwsh(
илиtr(
) в блоках 210 000 — присутствует? Или они так или иначе собраны в описания, которые я вижу до сих пор:pk(
,addr(
,raw(
иmulti(
?
Спасибо за вашу помощь!