ядро ​​биткойна — интерпретация описаний из биткойнрпк для питона

Таким образом я пробежался по блокчейну Биткойн и сравнил описания с 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']))

Я замечаю, что…

  1. в первых 727 блоках все описания в формате pk(...
  2. на блоке 728 мы видим, что наше первое описание начинается addr(.
  3. на блоке 71 036 мы видим первый пример дескриптора, начинающегося raw( которая, по-видимому, была потенциальной DOS-атакой на эта почта. Итак, в блоке 127 630 мы получаем еще несколько необработанных описаний, которые кажутся «действительными» (например, raw(76a91469d28eb9a311256338d281025a7437096149472c88ac61)#22d6jvgp)
  4. в блоке 164 467 мы получаем наш первый дескриптор для запуска multi(
  5. после этого мы не видим никаких других типов дескрипторов (по крайней мере, до блока 210 000, который я продвинул до сих пор). то есть дескрипторы не начинаются pkh(или wpkh( или sh( или combo( или wsh( или tr( как упоминалось в документации github, которую я связал

Исходя из этого, у меня есть некоторые вопросы, на которые я не могу найти ответы в документации…

  1. Какая польза от addr или raw описание? Связано ли это с каким-то действием, которое предпринял узел, отправивший транзакцию? Или какая-то абстракция, которую bitcoinrpc накладывает поверх него?
  2. Если вы пытаетесь разрешить адрес raw описание (например, bitcoin-cli deriveaddresses 'raw(76a91469d28eb9a311256338d281025a7437096149472c88ac61)#22d6jvgp') вы получите сообщение, в котором говорится Descriptor does not have a corresponding address хотя можно интерпретировать длинную строку в raw(…) как открытый ключ и преобразовать в адрес. То же самое наблюдается с multi( дескрипторы тоже — адреса не могут быть получены с помощью функции производных адресов, хотя вы можете сделать это самостоятельно в python. Предположительно, каждый биткойн-выход всегда отправляет какое-то значение на 1-n адресов, поэтому адреса должны быть производными? Или, может быть, если мое приложение попытается определить UTXO, я смогу игнорировать необработанные дескрипторы? Некоторые из них я вообще не могу разрешить по адресу, например raw(736372697074)#pz6xwtp5.
  3. Согласно «Mastering Bitcoin», подавляющее большинство транзакций используют выходы, заблокированные скриптом P2PKH. Но я не вижу их в описаниях (т.е. описаниях, начинающихся с pkh(). Что я на самом деле вижу, так это то, что подавляющее большинство из них являются P2PK (т.е. desc начинается с pk()
  4. Должен ли я ожидать найти недостающие описания (pkh(или wpkh( или sh( или combo( или wsh( или tr() в блоках 210 000 — присутствует? Или они так или иначе собраны в описания, которые я вижу до сих пор: pk(, addr(, raw( и multi(?

Спасибо за вашу помощь!

XBNFNM   Голикова сообщила о снижении числа безработных с начала года на 33 тысячи

Source