Создайте хэш сценария Pay to Witness в Pay to Script Hash Address

Я пытаюсь сгенерировать мультиподписной, совместимый с segwit адрес как P2WSH, вложенный в BIP16 P2SH , как описано в BIP141. По сути, я хочу создать адрес P2WSH-вложенный-в-P2SH из n открытых ключей и m, необходимых для подписи действительного tx.

(m required, n public keys) -> base 58 bitcoin address

Я пытаюсь следовать примерам, представленным в Mastering Bitcoin , чтобы проверить цифры, которые я получаю, но я определенно что-то упускаю. (Я собираюсь связать все разделы, на которые я ссылаюсь, но на самом деле нет необходимости идти и читать их — надеюсь, недостаток в моем процессе будет кому-то очевиден.)

  1. Он определяет стандартную мультиподпись P2SH 2 из 5: OP_2 key0 key1 key2 key3 key4 OP_5 OP_CHECKMULTISIGгде ключи

    04C16B8698A9ABF84250A7C3EA7EEDEF9897D1C8C6ADF47F06CF73370D74DCCA01CDCA79DCC5C395D7EEC6984D83F1F50C900A24DD47F569FD4193AF5DE762C587
    04A2192968D8655D6A935BEAF2CA23E3FB87A3495E7AF308EDF08DAC3C1FCBFC2C75B4B0F4D0B1B70CD2423657738C0C2B1D5CE65C97D78D0E34224858008E8B49
    047E63248B75DB7379BE9CDA8CE5751D16485F431E46117B9D0C1837C9D5737812F393DA7D4420D7E1A9162F0279CFC10F1E8E8F3020DECDBC3C0DD389D9977965
    0421D65CBD7149B255382ED7F78E946580657EE6FDA162A187543A9D85BAAA93A4AB3A8F044DADA618D087227440645ABE8A35DA8C5B73997AD343BE5C2AFD94A5
    043752580AFA1ECED3C68D446BCAB69AC0BA7DF50D56231BE0AABF1FDEEC78A6A45E394BA29A1EDF518C022DD618DA774D207D137AAB59E0B000EB7ED238F4D800
    

из HASH160которых 54c557e07dde5bb6cb791c7a540e0a4796f5e97e. Хорошо, пока все хорошо; Я получил ту же ценность, что и книга.

  1. Затем он обсуждает транзакцию P2WSH и ссылается на тот же сценарий с мультиподписью.

    Мы видели этот тип скрипта в [p2sh]. В этом примере P2SH использовался компанией Мохаммеда для выражения мультиподписного сценария. Платежи компании Мохаммеда были закодированы с помощью скрипта блокировки, подобного этому: Пример скрипта вывода P2SH

    HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e EQUAL
    

    а затем определяет сценарий вывода P2WSH

    Пример сценария вывода P2WSH

    0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73
    

    [...] программа Segregated Witness состоит из двух значений, помещенных в стек: версии-свидетеля (0) и 32-байтового хэша SHA256 сценария выкупа.

Как он получает этот сценарий вывода P2WSH?

Если я возьму пример сценария P2SH, script.

HASH160(script) = 54c557e07dde5bb6cb791c7a540e0a4796f5e97e
SHA256(script) = a9b7b38d972cabc7961dbfbcb841ad4508d133c47ba87457b4a0e8aae86dbb89
SHA256(HASH160(script)) = 9796557ff06241ca75fdbc09359e9916186cb8398dc01fd58afc72a3ac86ce63

Ни один из которых не равен предоставленному:

9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73

Я также пытался сжать открытые ключи и все еще не мог получить это значение. Я почти уверен, что это все еще говорит о том же примере, потому что он продолжается с

Компания Мохаммеда может проводить выпуск продукции P2WSH [...]

Если я смогу вычислить 32-байтовый хэш SHA256 сценария выкупа, я думаю, что я готов, потому что в этот момент можно вычислить адрес.

sha256_value = 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73
p2wsh_output = OP_0 + OP_32 + sha256_value
address = Base58(05 + HASH160(p2wsh_output))

Ответы (2)

Это действительно ошибка в книге: https://github.com/bitcoinbook/bitcoinbook/issues/440 .

Смотрите этот diff для правильных шагов.

мне кажется что

... создание вывода Pay-to-Witness-Script-Hash (P2WSH), который будет выглядеть следующим образом : 0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73...

означает, что этот хэш является примером, не полученным из данных выше

Хорошо, круто, я правильно делаю остальные шаги? / Есть ли другие тестовые векторы, по которым я могу проверить? Тогда адрес будет Base58(05 + HASH160(OP_0 + OP_32 + {sha256 standard p2sh scrit}))?
Я думаю, вы можете «извлечь» «тестовые векторы» из текущего блокчейна биткойнов / тестовой сети, а не проверять фиктивные источники из книги :)
Хорошо. Так процесс правильный?
Я тоже не получил 9592d6018...с предоставленными данными, но я не тратил много времени на этот вопрос. Могу сказать, что таких транзакций в блокчейне очень много. например, вы можете взять пару тестовых сетей testnet.smartbit.com.au/tx/… и testnet.smartbit.com.au/tx/… и попытаться получить 1e8dda3...от5221038e81669c...