Как создать необработанную биткойн-транзакцию с мультиподписью вывода scriptPubKey

Мне нужно отправить деньги одной транзакцией на 2 адреса, чтобы любой из них мог их потратить. Другими словами, мне нужно создать такую ​​же транзакцию, как здесь https://www.blocktrail.com/BTC/tx/6e2c5b6b2a926a7da2415ae55c701e83d6e7bc46bad9bc23b5f9c7ef1ae26998 (шестнадцатеричный код необработанной транзакции

010000000227ed8477b4d0ab4d52bc31e0639f2f58665d9f7aff0a2aab229bba51af28ea5b000000008a4730440220279b45f812ebd1004ee041eb75a3f42657dce19bdba06b30b2d1b70f45e2590602201b06ecbbbf6fae0a3455d98ac2924cd6dc3022425a2f08c60ffb46e96dbdc8e9014104a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775dfffffffff302a856316c80cfbb5735c7a1fd5caad5b856206e2855e6f98bad5959778620010000008a47304402203b163fb30bf53c15e1b7d4ab8af17c3e79193f12d29b17d0a68afac8dc07f07b0220364d304ee4d3fcba82729ba5b011f99636e5633f66f5af224fd8ec5cd1850a44014104a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775dffffffff028096980000000000c9524104478f498fe3f6872a9559ae0fd5975bc44f500eed955a835027962099c333536f60b4e60383e6e1081efa0a76df1ef0aefb4da87ff0c8f12dab5da2969fc7b24e41044f09a164267c635c6991f7a96bc7901d035c07161a0074d719be723f6a9c50bc72b900092cffec5f3c3484dae35d04a5a2fa2e75f3a99e17577537c1227b44ba4104971e5b8b222fe47f742fa07d3327d36a6cd37088656ce29842ed82e1dc8bffaa81848b3219359fdf9d8b590d3af85cfff2d06d4b19fde5ed560b2c9caa5dd65653ae40196604000000001976a9148c1b30a7b5f8bd87c1cd8b8c4cb4f74345f1978a88ac00000000

) с мультиподписным типом scriptPubKey вывода и массивом адресов назначения с 2 элементами P2PKH (без 1 P2SH!).

curl --user USERNAME:PASSWORD --data-binary '{"method":"getrawtransaction","id":"a2e8f6b0-5c03-4315-a067-050a9adb6dfc","params":["6e2c5b6b2a926a7da2415ae55c701e83d6e7bc46bad9bc28b5f26c7", " http://127.0.0.1:18833 "

{"результат":{"шестнадцатеричный":"010000000227ed8477b4d0ab4d52bc31e0639f2f58665d9f7aff0a2aab229bba51af28ea5b000000008a4730440220279b45f812ebd1004ee041eb75a3f42657dce19bdba06b30b2d1b70f45e2590602201b06ecbbbf6fae0a3455d98ac2924cd6dc3022425a2f08c60ffb46e96dbdc8e9014104a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775dfffffffff302a856316c80cfbb5735c7a1fd5caad5b856206e2855e6f98bad5959778620010000008a47304402203b163fb30bf53c15e1b7d4ab8af17c3e79193f12d29b17d0a68afac8dc07f07b0220364d304ee4d3fcba82729ba5b011f99636e5633f66f5af224fd8ec5cd1850a44014104a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775dffffffff028096980000000000c9524104478f498fe3f6872a9559ae0fd5975bc44f500eed955a835027962099c333536f60b4e60383e6e1081efa0a76df1ef0aefb4da87ff0c8f12dab5da2969fc7b24e41044f09a164267c635c6991f7a96bc7901d035c07161a0074d719be723f6a9c50bc72b900092cffec5f3c3484dae35d04a5a2fa2e75f3a99e17577537c1227b44ba4104971e5b8b222fe47f742fa07d3327d36a6cd37088656ce29842ed82e1dc8bffaa81848b3219359fdf9d8b590d3af85cfff2d06d4b19fde5ed560b2c9caa5dd65653ae40196604000000001976a9148c1b30a7b5f8bd87c1cd8b8c4cb4f74345f1978a88ac00000000","txid":"6e2c5b6b2a926a7da2415ae55c701e83d6e7bc46bad9bc23b5f9c7ef1ae26998","hash":"6e2c5b6b2a926a7da2415ae55c701e83d6e7bc46bad9bc23b5f9c7ef1ae26998","size":612,"vsize":612,"version":1,"locktime":0,"vin":[{" txid":"5bea28af51ba9b22ab2a0aff7a9f5d66582f9f63e031bc524dabd0b47784ed27","vout":0,"scriptSig":{"asm":"30440220279b45f812ebd1004ee041eb75a3f42657dce19bdba06b30b2d1b70f45e2590602201b06ecbbbf6fae0a3455d98ac2924cd6dc3022425a2f08c60ffb46e96dbdc8e9[ALL] 04a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775d","hex":"4730440220279b45f812ebd1004ee041eb75a3f42657dce19bdba06b30b2d1b70f45e2590602201b06ecbbbf6fae0a3455d98ac2924cd6dc3022425a2f08c60ffb46e96dbdc8e9014104a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775d"},"sequence":4294967295},{"txid":"2086775959ad8bf9e655286e2056b8d5aa5cfda1c73557bbcf806c3156a802f3","vout":1,"scriptSig":{"asm":"304402203b163fb30bf53c15e1b7d4ab8af17c3e79193f12d29b17d0a68afac8dc07f07b0220364d304ee4d3fcba82729ba5b011f99636e5633f66f5af224fd8ec5cd1850a44[ALL] 04a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775d","hex":"47304402203b163fb30bf53c15e1b7d4ab8af17c3e79193f12d29b17d0a68afac8dc07f07b0220364d304ee4d3fcba82729ba5b011f99636e5633f66f5af224fd8ec5cd1850a44014104a84d304aa8963fbd36287e674f109827b6d6ea60d57a7d9357df03be1fcedb2c47475ca128b1a50408b7f584041ffd52d6b19aba5256e99dcdbbe2ed7373775d"},"sequence":4294967295}],"vout":[{"value":0.10000000,"n":0,"scriptPubKey":{"asm" :"2 04478f498fe3f6872a9559ae0fd5975bc44f500eed955a835027962099c333536f60b4e60383e6e1081efa0a76df1ef0aefb4da87ff0c8f12dab5da2969fc7b24e 044f09a164267c635c6991f7a96bc7901d035c07161a0074d719be723f6a9c50bc72b900092cffec5f3c3484dae35d04a5a2fa2e75f3a99e17577537c1227b44ba 04971e5b8b222fe47f742fa07d3327d36a6cd37088656ce29842ed82e1dc8bffaa81848b3219359fdf9d8b590d3af85cfff2d06d4b19fde5ed560b2c9caa5dd656 3 OP_CHECKMULTISIG","hex":"524104478f498fe3f6872a9559ae0fd5975bc44f500eed955a835027962099c333536f60b4e60383e6e1081efa0a76df1ef0aefb4da87ff0c8f12dab5da2969fc7b24e41044f09a164267c635c6991f7a96bc7901d035c07161a0074d719be723f6a9c50bc72b900092cffec5f3c3484dae35d04a5a2fa2e75f3a99e17577537c1227b44ba4104971e5b8b222fe47f742fa07d3327d36a6cd37088656ce29842ed82e1dc8bffaa81848b3219359fdf9d8b590d3af85cfff2d06d4b19fde5ed560b2c9caa5dd65653ae","reqSigs":2,"type":"multisig","addresses":["1NiA6V8Ges2vEkSx11X5oo2aCyTsCv3XH3","18am8jUnBqru2jtQpQbE4LCywBWUPUooP1","1Fr1wwdwoNH3F7zFAvcWJte5vsacto3EXC"]}1",{"script":0.003,"scriptnub":0.03,"script":0.03,"key {"asm":"OP_DUP OP_HASH160 8c1b30a7b5f8bd87c1cd8b8c4cb4f74345f1978a OP_EQUALVERIFY OP_CHECKSIG","hex":"76a9148c1b30a7b5f8bd87c1cd8b8c4cb4f74345f1978a88ac","reqSigs":1,"type":"pubkeyhash","addresses":["1DmpB4AxC8tee5cMNhEjxg4xcaXw9cmAen"]}}],"blockhash ":"0000000000000a96fe9d4d61b19127548bfeb40f2aa972c41b7bf8dc09e2967b","подтверждения":326412,"время":1329692179,"время блокировки":1329692179},"ошибка":null,"id":"a2e8f6b0-5c03-4315-a067-050a9adb6dfc"}

Как мы можем видеть:

«type»: «multisig», «addresses»: [«1NiA6V8Ges2vEkSx11X5oo2aCyTsCv3XH3», «18am8jUnBqru2jtQpQbE4LCywBWUPUooP1», «1Fr1wwdwoNH3F7zFAvcWJte5vsacto3EXC»]

Мне нужен тот же результат - массив из нескольких адресов P2PKH и типа multisig.

Но метод https://bitcoin.org/en/developer-reference#createrawtransaction не позволяет напрямую задать массив адресов для 1 вывода в транзакции - только 1 адрес.


Я создал транзакции с адресом P2SH, который был создан с помощью функции createmultisig:

user@workstation:/home/username$ bitcoin-cli createmultisig 1 '''["1BdxBor4JG76RKLAwJZfHC58fWbgidYukz","1MN3cT9Ro927h4kgpSZ5V7SfYjrwTysXv7"]''' { "address": "3Jc4v7eo9rptPj4277c9cCjgJmWSQmBiwj", "redeemScript": "512102f2221ec0e4baa45633a1f10d41cb199d943ec448368b90d9c7982095fd926ffa2102a9132ba9b227c62cf02deaff00e974fd9bfbe96ed1947d9bf8c7af40c5c22dd752ae" }

и после

bitcoin-cli createrawtransaction '''[{"txid" : "4989efcec28faedc86ee309a0cb1ba1319987d5c214fcb39d709538576e79342","vout" : 1,"sequence":1}]''' '{ "3Jc4v7eo9rptPj4277c9cCjgJmWSQmBiwj": 0.00005500,"12S42ZEw2741DHrivgZHLfX8M58mxb7bFy": 0.01102678}' after signed транзакция и отправляется в сеть

хэш транзакции:

d1789305f1ae4a39c045e0c67a024048cda0990297dc863e4caac546c6c32b86

сырой:

02000000014293e776855309d739cb4f215c7d981913bab10c9a30ee86dcae8fc2ceef8949010000006a47304402200c7a7e89dc37a457c9070b928619b0ebed9b9a8fcbe1ec0ae9a06ecd695279eb0220015f1898c527e38319818f9939822b0ade1c1c508cf7d1215bf2b99905b1fcff01210267af6c6bf4ae6e37f019fbfbc7df70acf48663adbf19161bd874f3babd6bf15c01000000027c1500000000000017a914b98a8e7f0375003d5537ff8489fcf9c4ad98f2358756d31000000000001976a9140fb50d2ec6bb62bd690bb55142101ca28a678be188ac00000000

But in the result of json-rpc method getrawtransaction I see "scriptPubKey": { "asm":"OP_HASH160 b98a8e7f0375003d5537ff8489fcf9c4ad98f235 OP_EQUAL", "hex":"a914b98a8e7f0375003d5537ff8489fcf9c4ad98f23587", "reqSigs":1, "type":"scripthash", " адреса":["3Jc4v7eo9rptPj4277c9cCjgJmWSQmBiwj"] }

между тем мне нужен тип: "multisig" и массив из нескольких адресов P2PKH, без 1 адреса P2SH.


Другая попытка: я использовал функцию addmultisigaddress user@workstation:/home/username$ bitcoin-cli addmultisigaddress 2 '["1BdxBor4JG76RKLAwJZfHC58fWbgidYukz","1MN3cT9Ro927h4kgpSZ5V7SfYjrwTysXv7"]' 3P6sVMdtiqSwVPuruSMguJQmmhFba3groJQmmvFba3gro

user@workstation:/home/username$ bitcoin-cli validateaddress 3P6sVMdtiqSwPuruSMguJQmmvFba3groVh { "isvalid": true, "address": "3P6sVMdtiqSwPuruSMguJQmmvFba3groVh", "scriptPubKey": "a914eadd957f6e1c6f4e71f9bd0a8632d8e3a61af43f87", "ismine": true, "iswatchonly": false, " isscript": true, "script": "multisig", "hex": "522102f2221ec0e4baa45633a1f10d41cb199d943ec448368b90d9c7982095fd926ffa2102a9132ba9b227c62cf02deaff00e974fd9bfbe96ed1947d9bf8c7af40c5c22dd752ae", "addresses": [ "1BdxBor4JG76RKLAwJZfHC58fWbgidYukz", "1MN3cT9Ro927h4kgpSZ5V7SfYjrwTysXv7" ], "sigsrequired": 2, "account": "" } bitcoin- cli createrawtransaction '''[{"txid": "d1789305f1ae4a39c045e0c67a024048cda0990297dc863e4caac546c6c32b86","vout" : 1,"sequence":1}]''' '{ "3P6sVMdtiqSwPuruSMguJQmmvFba3groVh": 0.00005500,"12S42ZEw2741DHrivgZHLfX8M58mxb7bFy": 0.01}' after signed transaction and sent into the network

хэш транзакции:

cbf1bba98082f23889f79364ae146b6cbbfb1767a20c0e2bc210fee43561ee1d

сырой:

0200000001862bc3c646c5aa4c3e86dc970299a0cd4840027ac6e045c0394aaef1059378d1010000006a47304402205ad43bb4c6e07387a62d5c1859f48869b21cd069fe9bda93b05466e0da42228102202d3d894fae7a11b3369c5616eebbc6b3ae00001ed71f0b0d8e3324ef2d8e5c9101210267af6c6bf4ae6e37f019fbfbc7df70acf48663adbf19161bd874f3babd6bf15c01000000027c1500000000000017a914eadd957f6e1c6f4e71f9bd0a8632d8e3a61af43f8740420f00000000001976a9140fb50d2ec6bb62bd690bb55142101ca28a678be188ac00000000

Но в результате метода json-rpc getrawtransaction я снова вижу scriptPubKey": { "asm": "OP_HASH160 eadd957f6e1c6f4e71f9bd0a8632d8e3a61af43f OP_EQUAL", "hex": "a914eadd957f6e1c6f4e71f9bd0a8632d": "sashregscript1e3a71af43f9bd0a8632d": адреса":["3P6sVMdtiqSwPuruSMguJQmmvFba3groVh"] }

между тем мне нужен тип: "multisig" и массив из нескольких адресов P2PKH, без 1 адреса P2SH.


Что я делаю неправильно?

Ответы (1)

Я пытаюсь дать (частичный) ответ: я думаю, вы не делаете ничего плохого ... есть два способа создания multisig tx. «Старый» способ, как с вашей ссылкой из blocktrail, и «новый» способ, как в следующем тексте. У старого способа было два или три недостатка: он с самого начала раздувал блокчейн, в начале были высокие сборы и он раскрывал возможные публичные ключи подписавшего. В этом случае 3 несжатых публичных ключа имеют по 65 байт каждый, поэтому в блокчейне 200 байт...

Новая мультиподпись с помощью конструкции P2SH в основном хеширует логику расходования (также называемую сценарием выкупа : 2 3 CHECKMULTISIG), а кодировка base58check предоставляет «адрес P2SH» (начинающийся с «3»). Тогда этот хэш имеет длину всего 20 байт, необратим (вы не можете видеть, какие открытые ключи), а плата за передачу этого tx в блокчейн остается низкой. Конечно, в самом конце расходы на эту передачу требуют раскрытия и уплаты более высоких сборов.

Если у вас нет очень, очень конкретного варианта использования, вы думаете, что невозможно использовать новую логику? Дальнейшее описание я нашел в книге Андреаса «Освоение биткойнов» в главе 7, стр. 149ff — оно также доступно онлайн.

pebwindkraft, большое спасибо за ответ. Я упомянул очень специфический вариант использования, поэтому, если вы можете рассказать мне, как создать биткойн-транзакцию с мультиподписью (с массивом адресов P2PKH), используя метод createrawtransaction-method (или с php/js/.../language) - пожалуйста сделай это ). К сожалению, я не нашел эту информацию в Mastering Bitcoin.
это выглядит сложнее, чем я думал. Ключевое слово, вероятно, «необработанная мультиподпись», быстрый поиск по форуму показывает ответ Питера ( bitcoin.stackexchange.com/questions/46447/… ), который не рекомендует использовать необработанную мультиподпись. Вероятно, BIP11 предоставит больше информации. В этом сообщении bitcoin.stackexchange.com/questions/3712/… упоминается использование «Библиотеки SX», но я никогда не проверял какие-либо библиотеки для этого...
а вот ссылка на первое издание от Андреаса: chimera.labs.oreilly.com/books/1234000001802/ch05.html#multisig и биткойн имеет эту ссылку: bitcoinj.github.io/working-with-contracts