Skip to content

Instantly share code, notes, and snippets.

@pinheadmz
Created July 24, 2023 18:00
Show Gist options
  • Save pinheadmz/2e85bbdd1b21ed2946f84a88d38f172a to your computer and use it in GitHub Desktop.
Save pinheadmz/2e85bbdd1b21ed2946f84a88d38f172a to your computer and use it in GitHub Desktop.
# create two default wallets
bitcoin-cli -regtest -named createwallet wallet_name=one
bitcoin-cli -regtest -named createwallet wallet_name=two
# get an xpub from each wallet out of the 'pkh' descriptor
bitcoin-cli -regtest -named -rpcwallet=one listdescriptors
bitcoin-cli -regtest -named -rpcwallet=two listdescriptors
# assemble the 2 xpubs into a multisig descriptor and use rpc to get the checksum
bitcoin-cli -regtest -named getdescriptorinfo 'sh(sortedmulti(2, tpubDCpd4MPqQhUPL7bsGJ9dHEZahk7VwWzmEr3T6w7iDBewCKJzfiW8oZc3mnMEFHE3cNCAkyNfCoj993o5MJ4MmjDqaExu3KTy379hKDArGon/0/*, tpubDCQUeudUcL6gdgcteT3o9dG2rAtShF7smCWWavnvZk4Rqx7LEcX86Fph8UyBZWLNHddSBAUQ4PDT62N4Meg5ZffjUg1ozLdHL4Tg2Sov9dP/0/*))'
# repeat, for change addresses (incrementing the `0` to `1` in the paths)
bitcoin-cli -regtest -named getdescriptorinfo 'sh(sortedmulti(2, tpubDCpd4MPqQhUPL7bsGJ9dHEZahk7VwWzmEr3T6w7iDBewCKJzfiW8oZc3mnMEFHE3cNCAkyNfCoj993o5MJ4MmjDqaExu3KTy379hKDArGon/1/*, tpubDCQUeudUcL6gdgcteT3o9dG2rAtShF7smCWWavnvZk4Rqx7LEcX86Fph8UyBZWLNHddSBAUQ4PDT62N4Meg5ZffjUg1ozLdHL4Tg2Sov9dP/1/*))'
# create a blank watch-only wallet for the multisig
bitcoin-cli -regtest -named createwallet wallet_name=ms blank=true disable_private_keys=true
# import the two multisig descriptors we made, setting "active", "timestamp" and "internal:"
bitcoin-cli -regtest -named -rpcwallet=ms importdescriptors '[{"desc":"sh(sortedmulti(2,tpubDCpd4MPqQhUPL7bsGJ9dHEZahk7VwWzmEr3T6w7iDBewCKJzfiW8oZc3mnMEFHE3cNCAkyNfCoj993o5MJ4MmjDqaExu3KTy379hKDArGon/0/*,tpubDCQUeudUcL6gdgcteT3o9dG2rAtShF7smCWWavnvZk4Rqx7LEcX86Fph8UyBZWLNHddSBAUQ4PDT62N4Meg5ZffjUg1ozLdHL4Tg2Sov9dP/0/*))#9anck48k","active":true,"timestamp":"now"}, {"desc":"sh(sortedmulti(2,tpubDCpd4MPqQhUPL7bsGJ9dHEZahk7VwWzmEr3T6w7iDBewCKJzfiW8oZc3mnMEFHE3cNCAkyNfCoj993o5MJ4MmjDqaExu3KTy379hKDArGon/1/*,tpubDCQUeudUcL6gdgcteT3o9dG2rAtShF7smCWWavnvZk4Rqx7LEcX86Fph8UyBZWLNHddSBAUQ4PDT62N4Meg5ZffjUg1ozLdHL4Tg2Sov9dP/1/*))#4l97srdw", "active":true,"internal":true, "timestamp":"now"}]'
# generate funds to one of the first wallets
bitcoin-cli -regtest -named -rpcwallet=one -generate 110
# get a P2SH address from the multisig wallet
bitcoin-cli -regtest -named -rpcwallet=ms getnewaddress '' 'legacy'
# send BTC to the multisig address and confirm
bitcoin-cli -regtest -named -rpcwallet=one sendtoaddress 2N9dgdMqnFo4vWqjDmch9TobAme36b8faSp 1
bitcoin-cli -regtest -named -rpcwallet=one -generate 1
# create a transaction sending some of that BTC back to the second wallet
bitcoin-cli -regtest -named -rpcwallet=two getnewaddress
bitcoin-cli -regtest -named -rpcwallet=ms walletcreatefundedpsbt '[]' '[{"bcrt1q342jc7dgxp57mhr38k5nd8l502pxvp3a9zf6en":0.1}]' 0 '{"change_type":"legacy"}'
# sign the PSBT with the first wallet
bitcoin-cli -regtest -named -rpcwallet=one walletprocesspsbt psbt='cHNidP8BAHICAAAAAe7MUtnaGxiJm98aiSM9/imTH7Rog7J3TKvBdvP97uKfAQAAAAD9////An49XQUAAAAAF6kUCCtt+Rdgl1+Xx2P/QFzYckPIdZ2HgJaYAAAAAAAWABSNVSx5qDBp7dxxPak2n/R6gmYGPQAAAAAAAQBzAgAAAAEotqjljIr7rTJyYSDzF2lv3NEZd3Q07ZDkVbUBrN667QAAAAAA/f///wJqCxAkAQAAABepFB8t2g7IuoIfx3OEDQGmq4Ko51D+hwDh9QUAAAAAF6kUs8FmqVbzIRqblMrNRZ8NAseqyDaHbgAAAAEER1IhAkRJZTtDceJvHx0C55p04eu0MJRWI+MYQ0XK2nHzAtOFIQMpCYbcD8tnBtA9bJDwHp4vLlVG3R87Zws3vklcuUZ4T1KuIgYCREllO0Nx4m8fHQLnmnTh67QwlFYj4xhDRcracfMC04UMXTY9IAAAAAAAAAAAIgYDKQmG3A/LZwbQPWyQ8B6eLy5VRt0fO2cLN75JXLlGeE8M6Gu3GAAAAAAAAAAAAAEAR1IhAgrDxugNazfzRdaCYYZqVLoU63R8KgUs6oY9m2l87otPIQMhEbowMjmfzMT+MtoLCI2Gk7L1i9JgB5CE3Qofwk5I2lKuIgICCsPG6A1rN/NF1oJhhmpUuhTrdHwqBSzqhj2baXzui08M6Gu3GAEAAAAAAAAAIgIDIRG6MDI5n8zE/jLaCwiNhpOy9YvSYAeQhN0KH8JOSNoMXTY9IAEAAAAAAAAAAAA='
# sign the PSBT with the second wallet
bitcoin-cli -regtest -named -rpcwallet=two walletprocesspsbt psbt='cHNidP8BAHICAAAAAe7MUtnaGxiJm98aiSM9/imTH7Rog7J3TKvBdvP97uKfAQAAAAD9////An49XQUAAAAAF6kUCCtt+Rdgl1+Xx2P/QFzYckPIdZ2HgJaYAAAAAAAWABSNVSx5qDBp7dxxPak2n/R6gmYGPQAAAAAAAQBzAgAAAAEotqjljIr7rTJyYSDzF2lv3NEZd3Q07ZDkVbUBrN667QAAAAAA/f///wJqCxAkAQAAABepFB8t2g7IuoIfx3OEDQGmq4Ko51D+hwDh9QUAAAAAF6kUs8FmqVbzIRqblMrNRZ8NAseqyDaHbgAAACICAykJhtwPy2cG0D1skPAeni8uVUbdHztnCze+SVy5RnhPRzBEAiBTrA25nT8Gr1xGkiF698IjGgAfgwZYWfWuun2YKZacdgIgBlOJQb8klvvaPCcZv7wk5QdU5HAfHcNN54CE6sxjaiQBAQRHUiECREllO0Nx4m8fHQLnmnTh67QwlFYj4xhDRcracfMC04UhAykJhtwPy2cG0D1skPAeni8uVUbdHztnCze+SVy5RnhPUq4iBgJESWU7Q3Hibx8dAueadOHrtDCUViPjGENFytpx8wLThQxdNj0gAAAAAAAAAAAiBgMpCYbcD8tnBtA9bJDwHp4vLlVG3R87Zws3vklcuUZ4Twzoa7cYAAAAAAAAAAAAAQBHUiECCsPG6A1rN/NF1oJhhmpUuhTrdHwqBSzqhj2baXzui08hAyERujAyOZ/MxP4y2gsIjYaTsvWL0mAHkITdCh/CTkjaUq4iAgIKw8boDWs380XWgmGGalS6FOt0fCoFLOqGPZtpfO6LTwzoa7cYAQAAAAAAAAAiAgMhEbowMjmfzMT+MtoLCI2Gk7L1i9JgB5CE3Qofwk5I2gxdNj0gAQAAAAAAAAAAAA=='
# finalize the PSBT
bitcoin-cli -regtest -named -rpcwallet=two finalizepsbt psbt='cHNidP8BAHICAAAAAe7MUtnaGxiJm98aiSM9/imTH7Rog7J3TKvBdvP97uKfAQAAAAD9////An49XQUAAAAAF6kUCCtt+Rdgl1+Xx2P/QFzYckPIdZ2HgJaYAAAAAAAWABSNVSx5qDBp7dxxPak2n/R6gmYGPQAAAAAAAQBzAgAAAAEotqjljIr7rTJyYSDzF2lv3NEZd3Q07ZDkVbUBrN667QAAAAAA/f///wJqCxAkAQAAABepFB8t2g7IuoIfx3OEDQGmq4Ko51D+hwDh9QUAAAAAF6kUs8FmqVbzIRqblMrNRZ8NAseqyDaHbgAAAAEH2QBHMEQCICRu0vjuZd5p0gMExxDDCJ9N1FB/tzOzBLYLIBLLmSAeAiBQBJGhXG0n274f5p/qmJQnx7iJKNhMyBlJKmP099f4GQFHMEQCIFOsDbmdPwavXEaSIXr3wiMaAB+DBlhZ9a66fZgplpx2AiAGU4lBvySW+9o8Jxm/vCTlB1TkcB8dw03ngITqzGNqJAFHUiECREllO0Nx4m8fHQLnmnTh67QwlFYj4xhDRcracfMC04UhAykJhtwPy2cG0D1skPAeni8uVUbdHztnCze+SVy5RnhPUq4AAQBHUiECCsPG6A1rN/NF1oJhhmpUuhTrdHwqBSzqhj2baXzui08hAyERujAyOZ/MxP4y2gsIjYaTsvWL0mAHkITdCh/CTkjaUq4iAgIKw8boDWs380XWgmGGalS6FOt0fCoFLOqGPZtpfO6LTwzoa7cYAQAAAAAAAAAiAgMhEbowMjmfzMT+MtoLCI2Gk7L1i9JgB5CE3Qofwk5I2gxdNj0gAQAAAAAAAAAAIgIChcBV1iEQZd7R8Fx/n41OzW63dWwY54s4MZBjceraJt0YJSZqr1QAAIABAACAAAAAgAAAAAAAAAAAAA=='
# decode the finalized transaction
bitcoin-cli -regtest decoderawtransaction 0200000001eecc52d9da1b18899bdf1a89233dfe29931fb46883b2774cabc176f3fdeee29f01000000d9004730440220246ed2f8ee65de69d20304c710c3089f4dd4507fb733b304b60b2012cb99201e0220500491a15c6d27dbbe1fe69fea989427c7b88928d84cc819492a63f4f7d7f81901473044022053ac0db99d3f06af5c4692217af7c2231a001f83065859f5aeba7d9829969c76022006538941bf2496fbda3c2719bfbc24e50754e4701f1dc34de78084eacc636a2401475221024449653b4371e26f1f1d02e79a74e1ebb430945623e3184345cada71f302d3852103290986dc0fcb6706d03d6c90f01e9e2f2e5546dd1f3b670b37be495cb946784f52aefdffffff027e3d5d050000000017a914082b6df91760975f97c763ff405cd87243c8759d8780969800000000001600148d552c79a83069eddc713da9369ff47a8266063d00000000
# decode the redeemscript from the transaction input
bitcoin-cli -regtest decodescript 5221024449653b4371e26f1f1d02e79a74e1ebb430945623e3184345cada71f302d3852103290986dc0fcb6706d03d6c90f01e9e2f2e5546dd1f3b670b37be495cb946784f52ae
{
"asm": "2 024449653b4371e26f1f1d02e79a74e1ebb430945623e3184345cada71f302d385 03290986dc0fcb6706d03d6c90f01e9e2f2e5546dd1f3b670b37be495cb946784f 2 OP_CHECKMULTISIG",
"desc": "multi(2,024449653b4371e26f1f1d02e79a74e1ebb430945623e3184345cada71f302d385,03290986dc0fcb6706d03d6c90f01e9e2f2e5546dd1f3b670b37be495cb946784f)#s564ne4d",
"type": "multisig",
"p2sh": "2N9dgdMqnFo4vWqjDmch9TobAme36b8faSp",
"segwit": {
"asm": "0 30f2a2d0fa8b7f56aba024646bfb1c072b205c8b606f4c9f575e5459ffa51ed8",
"desc": "wsh(multi(2,024449653b4371e26f1f1d02e79a74e1ebb430945623e3184345cada71f302d385,03290986dc0fcb6706d03d6c90f01e9e2f2e5546dd1f3b670b37be495cb946784f))#lg9v8u9d",
"hex": "002030f2a2d0fa8b7f56aba024646bfb1c072b205c8b606f4c9f575e5459ffa51ed8",
"address": "bcrt1qxre295863dl4d2aqy3jxh7cuqu4jqhytvph5e86hte29nla9rmvql3lwvl",
"type": "witness_v0_scripthash",
"p2sh-segwit": "2NBK9uTnddWeLUUT7nc2RNXJjNG5HGShcmz"
}
}
@Riahiamirreza
Copy link

It was very useful. Thanks a lot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment