ลองทำครับ ไม่รู้ว่าถูกมั้ย ฝากตรวจการบ้านด้วยครับ #siamstr #righttech
ข้อ 5 สร้าง multisig address แบบ P2SH แบบ 1-of-4 จาก publickey ในอินพุตทั้งสี่ของธุรกรรมนี้
37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517
1. get raw transaction แล้วหา public key เนื่องจาก address เป็น segwit ให้ดูตรง txinwitness index ที่ 1 ตรงนั้นจะเป็น public key
```
$ bitcoin-cli getrawtransaction 37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517 true
{
"txid": "37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517",
"hash": "e28a0885b6f413e24a89e9c2bac74d4c6f335e17545f0b860da9146caf7ffe39",
"version": 2,
"size": 666,
"vsize": 344,
"weight": 1374,
"locktime": 818817,
"vin": [
{
"txid": "c9da5e51de40985b8e29d9ddd11b5d8818250773e3f3129bf065900ee841f6b5",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"304402200dd758801b40393f68dad8ab57558803efcd2b681ee31eb44fb3cfa9666d2bf90220254d34fa4990e23652bf669053c5e16fd2fbb816bed2eeb44c1f1e6e54143e3e01",
"02bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f7"
],
"sequence": 4294967294
},
{
"txid": "44fbdaec8b794fa0b6e9ff70d76d4464ada38fe5aeac7285f16fbbaf86894fd5",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"304402201694761a5749b6a84f71459c04a44cf9d34a36ae8c9044c3af7a3a5514ef2e64022058f61feb92d6d54b71fdea47e7dfcd20f6a5c12e2fbcb15bc44fe95c73f2e80801",
"03aaf17b1a7b4108f7e5bc4f7d59c20f7fb1a72dbc74a9a3d6d1f8488df159c760"
],
"sequence": 4294967294
},
{
"txid": "c5263cf8798dd44f4aeae6421a1b5ab6a26d8623d7294c5487eec3b162305e47",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"3044022014b65c60f65e62d9dac893e404c8de2a007c7c6b74dbac18e454d8374e159759022012453f69112adadf9495fd3fe288aa5ed9e3d836340da06fa1e82c8e09adef5701",
"03a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce"
],
"sequence": 4294967294
},
{
"txid": "09f87c09c96058b8b72ed0caefff37fbefd9d4ebe64876d3df93cc2e358763a5",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"304402203d3b02390803c1d673fa49bd64d4a26fbeb29e3fc152af8f844d776c9409e41302206903a011a04e00a7f4ec606da4320226d2d393f565702cc58cfcef6dca67f84c01",
"0383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd2"
],
"sequence": 4294967294
}
],
"vout": [
{
"value": 0.01000698,
"n": 0,
"scriptPubKey": {
"asm": "0 8070ec3954ecdcbfc210d0117e8d28a19eb84672",
"desc": "addr(bc1qspcwcw25anwtlsss6qgharfg5x0ts3njad8uve)#pzjnvw8p",
"hex": "00148070ec3954ecdcbfc210d0117e8d28a19eb84672",
"address": "bc1qspcwcw25anwtlsss6qgharfg5x0ts3njad8uve",
"type": "witness_v0_keyhash"
}
},
{
"value": 0.08230000,
"n": 1,
"scriptPubKey": {
"asm": "0 b5fe46c647353ec9c06374655502094095f0289c",
"desc": "addr(bc1qkhlyd3j8x5lvnsrrw3j42qsfgz2lq2yu3cs5lr)#hzcalwww",
"hex": "0014b5fe46c647353ec9c06374655502094095f0289c",
"address": "bc1qkhlyd3j8x5lvnsrrw3j42qsfgz2lq2yu3cs5lr",
"type": "witness_v0_keyhash"
}
}
],
"hex": "02000000000104b5f641e80e9065f09b12f3e373072518885d1bd1ddd9298e5b9840de515edac90000000000feffffffd54f8986afbb6ff18572acaee58fa3ad64446dd770ffe9b6a04f798becdafb440000000000feffffff475e3062b1c3ee87544c29d723866da2b65a1b1a42e6ea4a4fd48d79f83c26c50000000000feffffffa56387352ecc93dfd37648e6ebd4d9effb37ffefcad02eb7b85860c9097cf8090000000000feffffff02fa440f00000000001600148070ec3954ecdcbfc210d0117e8d28a19eb8467270947d0000000000160014b5fe46c647353ec9c06374655502094095f0289c0247304402200dd758801b40393f68dad8ab57558803efcd2b681ee31eb44fb3cfa9666d2bf90220254d34fa4990e23652bf669053c5e16fd2fbb816bed2eeb44c1f1e6e54143e3e012102bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f70247304402201694761a5749b6a84f71459c04a44cf9d34a36ae8c9044c3af7a3a5514ef2e64022058f61feb92d6d54b71fdea47e7dfcd20f6a5c12e2fbcb15bc44fe95c73f2e808012103aaf17b1a7b4108f7e5bc4f7d59c20f7fb1a72dbc74a9a3d6d1f8488df159c76002473044022014b65c60f65e62d9dac893e404c8de2a007c7c6b74dbac18e454d8374e159759022012453f69112adadf9495fd3fe288aa5ed9e3d836340da06fa1e82c8e09adef57012103a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce0247304402203d3b02390803c1d673fa49bd64d4a26fbeb29e3fc152af8f844d776c9409e41302206903a011a04e00a7f4ec606da4320226d2d393f565702cc58cfcef6dca67f84c01210383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd2817e0c00",
"blockhash": "000000000000000000024a848a9451143278f60e4c3e73003da60c7b0ef74b62",
"confirmations": 70717,
"time": 1701158269,
"blocktime": 1701158269
}
```
2. นำ public key ทั้ง 4 อันมาสร้าง multisig address
```
$ bitcoin-cli createmultisig 1 '["'"02bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f7"'","'"03aaf17b1a7b4108f7e5bc4f7d59c20f7fb1a72dbc74a9a3d6d1f8488df159c760"'","'"03a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce"'","'"0383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd2"'"]'
{
"address": "3GyWg1CCD3RDpbwCbuk9TTRQptkRfczDz8",
"redeemScript": "512102bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f72103aaf17b1a7b4108f7e5bc4f7d59c20f7fb1a72dbc74a9a3d6d1f8488df159c7602103a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce210383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd254ae",
"descriptor": "sh(multi(1,02bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f7,03aaf17b1a7b4108f7e5bc4f7d59c20f7fb1a72dbc74a9a3d6d1f8488df159c760,03a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce,0383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd2))#0a7gjjjl"
}
```
View Article →
Thread
Login to reply
Replies (1)
#siamstr #righttech
ข้อ 8 public key ใดที่ลงนามอินพุต 0 ใน tx นี้:e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163
1. get raw transaction จะเห็นว่า prevout มี type เป็น witness_v0_keyhash หมายความว่าต้องใช้ txinwitness มา process ในการโอนออก
โดย bitcoin จะนำ txinwitness มา push ลง stack แล้ว pop มา process ทีละตัว (stack ใน programing เวลา get ค่าออกจาก stack ค่าที่เอาใส่ไปล่าสุดจะออกมาก่อน) ซึ่ง bitcoin จะ push txinwitness จาก index ที่ 0 ทีละตัวจนถึง index สุดท้ายตอนทำงานก็จะ pop ค่าออกมาจากตัวสุดท้าย ซึ่งตัวสุดท้ายในที่นี้ก็คือ script ส่วนตัวถัด ๆ ไป ก็จะเป็น input ของ script
```
$ bitcoin-cli getrawtransaction e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163 2
{
"txid": "e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163",
"hash": "881d7ab9ad60d6658283dbbad345f6f28491a264cd11d060b4fb4f121851a7f3",
"version": 2,
"size": 237,
"vsize": 121,
"weight": 483,
"locktime": 0,
"vin": [
{
"txid": "71fdaf44c9820250e1ae0331a2b2f20343bf0eddf93bc6165859e61739ab1a8b",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"3044022050b45d29a3f2cf098ad0514dff940c78046c377a7e925ded074ad927363dc2dd02207c8a8ca7d099483cf3b50b00366ad2e2771805d6be900097c2c57bc58b4f34a501",
"01",
"6321025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac"
],
"prevout": {
"generated": false,
"height": 665363,
"value": 0.00022642,
"scriptPubKey": {
"asm": "0 6b6c3a0f972fbbe7e4913001060a6a9796388afddb10975d7fe516474362d9cc",
"desc": "addr(bc1qddkr5ruh97a70ey3xqqsvzn2j7tr3zhamvgfwhtlu5tywsmzm8xqz7d4tx)#ynaq0rwf",
"hex": "00206b6c3a0f972fbbe7e4913001060a6a9796388afddb10975d7fe516474362d9cc",
"address": "bc1qddkr5ruh97a70ey3xqqsvzn2j7tr3zhamvgfwhtlu5tywsmzm8xqz7d4tx",
"type": "witness_v0_scripthash"
}
},
"sequence": 0
}
],
"vout": [
{
"value": 0.00009742,
"n": 0,
"scriptPubKey": {
"asm": "0 c47082b5a49065d85ab65730e8c28bb0b4810b96",
"desc": "addr(bc1qc3cg9ddyjpjask4k2ucw3s5tkz6gzzukzmg49s)#c68e8rrv",
"hex": "0014c47082b5a49065d85ab65730e8c28bb0b4810b96",
"address": "bc1qc3cg9ddyjpjask4k2ucw3s5tkz6gzzukzmg49s",
"type": "witness_v0_keyhash"
}
}
],
"fee": 0.00012900,
"hex": "020000000001018b1aab3917e6595816c63bf9dd0ebf4303f2b2a23103aee1500282c944affd71000000000000000000010e26000000000000160014c47082b5a49065d85ab65730e8c28bb0b4810b9603473044022050b45d29a3f2cf098ad0514dff940c78046c377a7e925ded074ad927363dc2dd02207c8a8ca7d099483cf3b50b00366ad2e2771805d6be900097c2c57bc58b4f34a50101014d6321025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac00000000",
"blockhash": "0000000000000000000b0e5eec04d784347ef564b3ddb939eca019a66c9cedbe",
"confirmations": 224382,
"time": 1610254919,
"blocktime": 1610254919
}
```
2. ถ้าเอา script มา decode จะเห็นการทำงานของ script คือ
OP_IF
025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f
OP_ELSE
144
OP_CHECKSEQUENCEVERIFY
OP_DROP
02ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc2
OP_ENDIF
OP_CHECKSIG
จากข้อ 1 ของใน txinwitness stack ตัวถัดไปคือ input ต่อไปของ script ซึ่งมีค่าเป็น 01 แปลงเป็น boolean จะมีค่าเป็น true แปลว่าการทำงานของ script จะทำงานในส่วนของ OP_IF
ซึ่งหมายความว่า script จะใช้ public key 025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f ใน operation OP_CHECKSIG
หลังจากได้ public key แล้ว script จะทำ OP_CHECKSIG โดยใช้ input เป็นของใน txinwitness stack ตัวถัดไปซึ่งก็คือ signature ที่จะใช้ในการ verify ด้วย public key 025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f
```
$ bitcoin-cli decodescript 6321025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac
{
"asm": "OP_IF 025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f OP_ELSE 144 OP_CHECKSEQUENCEVERIFY OP_DROP 02ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc2 OP_ENDIF OP_CHECKSIG",
"desc": "raw(6321025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac)#8n7kw4g9",
"type": "nonstandard",
"p2sh": "3FM8BvtRqG5uNTgTLXGBxe2cKj3rtBFVHa",
"segwit": {
"asm": "0 6b6c3a0f972fbbe7e4913001060a6a9796388afddb10975d7fe516474362d9cc",
"desc": "addr(bc1qddkr5ruh97a70ey3xqqsvzn2j7tr3zhamvgfwhtlu5tywsmzm8xqz7d4tx)#ynaq0rwf",
"hex": "00206b6c3a0f972fbbe7e4913001060a6a9796388afddb10975d7fe516474362d9cc",
"address": "bc1qddkr5ruh97a70ey3xqqsvzn2j7tr3zhamvgfwhtlu5tywsmzm8xqz7d4tx",
"type": "witness_v0_scripthash",
"p2sh-segwit": "32KvHwVHXtoCgvNZZ3jXNZJDgC77yTA1yr"
}
}
```