Last active
April 29, 2019 15:32
-
-
Save tonymorony/787f277a249a0ab767daa23d9eba1764 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Wikipedia: Multisignature (often called multisig) is a form of technology used to add additional security for cryptocurrency transactions. Multisignature addresses require another user or users sign a transaction before it can be broadcast onto the block chain. | |
In this short guide will be demonstrated 2of2 multisignature wallet creation and usage. I'll use 2 nodes and Komodo assetchain. On KMD main chain steps will be same, just not use `-ac_name` param. | |
Step 1 | |
At first lets get addresses on two nodes which we will combine the into single mutlisig address. Also we will need pubkey and privkey (wif) for each address: | |
# Node 1: | |
Getting `new address`: | |
./komodo-cli -ac_name=MSTEST getnewaddress | |
RDomQ4tftJGjcHBVpAUx549jZfxtJx74r5 | |
Getting `pubkey`: | |
./komodo-cli -ac_name=MSTEST validateaddress RDomQ4tftJGjcHBVpAUx549jZfxtJx74r5 | |
{ | |
"isvalid": true, | |
"address": "RDomQ4tftJGjcHBVpAUx549jZfxtJx74r5", | |
"scriptPubKey": "76a91431a8cbc716e21238079729d46cb655ae7fadc9e388ac", | |
"segid": 37, | |
"ismine": true, | |
"iswatchonly": false, | |
"isscript": false, | |
"pubkey": "02dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a26", | |
"iscompressed": true, | |
"account": "" | |
} | |
Getting `privkey`: | |
./komodo-cli -ac_name=MSTEST dumpprivkey RDomQ4tftJGjcHBVpAUx549jZfxtJx74r5 | |
UrunDGyFJu5UFZG7BnFx9R6iaPmWaBX8iqHzRpFRjNp8kBEQYKNt | |
To summarise: | |
address: RDomQ4tftJGjcHBVpAUx549jZfxtJx74r5 | |
pubkey: 02dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a26 | |
privkey: UrunDGyFJu5UFZG7BnFx9R6iaPmWaBX8iqHzRpFRjNp8kBEQYKNt | |
# Node 2: | |
./komodo-cli -ac_name=MSTEST getnewaddress | |
RBqZ6nHcANekX3zxF9y4zRyfB6X8VEWF7s | |
./komodo-cli -ac_name=MSTEST validateaddress RBqZ6nHcANekX3zxF9y4zRyfB6X8VEWF7s | |
{ | |
"isvalid": true, | |
"address": "RBqZ6nHcANekX3zxF9y4zRyfB6X8VEWF7s", | |
"scriptPubKey": "76a9141c0f1c482d38c43bb847506a527521d2204afe6588ac", | |
"segid": 38, | |
"ismine": true, | |
"iswatchonly": false, | |
"isscript": false, | |
"pubkey": "032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a2816", | |
"iscompressed": true, | |
"account": "" | |
} | |
./komodo-cli -ac_name=MSTEST dumpprivkey RBqZ6nHcANekX3zxF9y4zRyfB6X8VEWF7s | |
UsuE7jG8BD1CV2xuCoBCwgzzbs4HqZ2P2im5fdyJmP2tSd3arAv7 | |
address: RBqZ6nHcANekX3zxF9y4zRyfB6X8VEWF7s | |
pubkey: 032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a2816 | |
privkey: UsuE7jG8BD1CV2xuCoBCwgzzbs4HqZ2P2im5fdyJmP2tSd3arAv7 | |
Step 2 | |
Now we can combine pubkeys to musig (2of2 in this example - parameter of createmultisig determining minimal amount of signatures for musig funds spending). You can execute this call on any node. : | |
./komodo-cli -ac_name=MSTEST createmultisig 2 '["02dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a26","032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a2816"]' | |
{ | |
"address": "bEP3HK73CboW8tGN8obyHUQteBzYjFzgNm", | |
"redeemScript": "522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652ae" | |
} | |
You can verify your script signatures amount and wallets in great tool made by Decker, e.g.: | |
https://deckersu.github.io/coinbin/?verify=522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652ae#verify | |
Step 3 | |
Lets fund our multisignature address: | |
./komodo-cli -ac_name=MSTEST sendtoaddress bEP3HK73CboW8tGN8obyHUQteBzYjFzgNm 7.77 | |
194fea388c5474ae25d261d8c57213b79f9a111e774caeea066f796ddd99e81c | |
Step 4 | |
Now we can spend funds from multisig address. Let's create rawtransaction first. As input I'm using unspent vout of transaction by which musig was funded. As destination address I put address to which I want to send amount of funds. | |
Please note, that in this example I'm sending whole deposited sum back, but in case if you want to send not all amount you have to manually specify second (change) output because by default change will be counted as miner fee. Most probably you'll get the `AcceptToMemoryPool: absurdly high fees` error because of this reason. (it can be passed trough by additional sendrawtransaction `true` param which actually set `allowhighfees=true`, but very unlikely you want to do it ) | |
./komodo-cli -ac_name=MSTEST createrawtransaction '[{"txid":"194fea388c5474ae25d261d8c57213b79f9a111e774caeea066f796ddd99e81c","vout":1}]' '{"RP81MSVu39QgXhGDHfnk9d9KMnp4vhEVBu":7.77}' | |
0400008085202f89011ce899dd6d796f06eaae4c771e119a9fb71372c5d861d225ae74548c38ea4f190100000000ffffffff014014502e000000001976a91497d5106d5f69619803eb8d72a2bf45a4f033338a88ac00000000a80000000000000000000000000000 | |
Then sign it from both nodes: | |
Node1: | |
./komodo-cli -ac_name=MSTEST signrawtransaction "0400008085202f89011ce899dd6d796f06eaae4c771e119a9fb71372c5d861d225ae74548c38ea4f190100000000ffffffff014014502e000000001976a91497d5106d5f69619803eb8d72a2bf45a4f033338a88ac00000000a80000000000000000000000000000" '[{"txid":"194fea388c5474ae25d261d8c57213b79f9a111e774caeea066f796ddd99e81c","vout":1,"scriptPubKey":"a914121cbc7a828772bd4612bc7b9765cbbf13d0b3cc87","redeemScript":"522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652ae","amount":7.77}]' '["UrunDGyFJu5UFZG7BnFx9R6iaPmWaBX8iqHzRpFRjNp8kBEQYKNt"]' | |
{ | |
"hex": "0400008085202f89011ce899dd6d796f06eaae4c771e119a9fb71372c5d861d225ae74548c38ea4f19010000009200483045022100a5f4bdf5b61a4f4baf0b5b48f69488b8f752e36cbac23ec0c762bba99552ac9e022036e658c7c8c19ec4bd423fcc6a109a811b189311fc874dd466e58a1755ef4e940147522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652aeffffffff014014502e000000001976a91497d5106d5f69619803eb8d72a2bf45a4f033338a88ac00000000a80000000000000000000000000000", | |
"complete": false, | |
"errors": [ | |
{ | |
"txid": "194fea388c5474ae25d261d8c57213b79f9a111e774caeea066f796ddd99e81c", | |
"vout": 1, | |
"scriptSig": "00483045022100a5f4bdf5b61a4f4baf0b5b48f69488b8f752e36cbac23ec0c762bba99552ac9e022036e658c7c8c19ec4bd423fcc6a109a811b189311fc874dd466e58a1755ef4e940147522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652ae", | |
"sequence": 4294967295, | |
"error": "Operation not valid with the current stack size" | |
} | |
] | |
} | |
Node2 (change hex to hex which you get from node1 signing and change privkey to node2 privkey): | |
./komodo-cli -ac_name=MSTEST signrawtransaction "0400008085202f89011ce899dd6d796f06eaae4c771e119a9fb71372c5d861d225ae74548c38ea4f19010000009200483045022100a5f4bdf5b61a4f4baf0b5b48f69488b8f752e36cbac23ec0c762bba99552ac9e022036e658c7c8c19ec4bd423fcc6a109a811b189311fc874dd466e58a1755ef4e940147522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652aeffffffff014014502e000000001976a91497d5106d5f69619803eb8d72a2bf45a4f033338a88ac00000000a80000000000000000000000000000" '[{"txid":"194fea388c5474ae25d261d8c57213b79f9a111e774caeea066f796ddd99e81c","vout":1,"scriptPubKey":"a914121cbc7a828772bd4612bc7b9765cbbf13d0b3cc87","redeemScript":"522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652ae","amount":7.77}]' '["UsuE7jG8BD1CV2xuCoBCwgzzbs4HqZ2P2im5fdyJmP2tSd3arAv7"]' | |
{ | |
"hex": "0400008085202f89011ce899dd6d796f06eaae4c771e119a9fb71372c5d861d225ae74548c38ea4f1901000000da00483045022100a5f4bdf5b61a4f4baf0b5b48f69488b8f752e36cbac23ec0c762bba99552ac9e022036e658c7c8c19ec4bd423fcc6a109a811b189311fc874dd466e58a1755ef4e940147304402200abc8c1e1e26090a7012df8859a3986229da34b0edd82c42a64efc8b89390e6702202582cbdce3de13fe59196228d4d0a6a80916e23ccb343f1cf32515688a938ebb0147522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652aeffffffff014014502e000000001976a91497d5106d5f69619803eb8d72a2bf45a4f033338a88ac00000000a80000000000000000000000000000", | |
"complete": true | |
} | |
And finally we are ready to broadcast our musig transaction: | |
./komodo-cli -ac_name=MSTEST sendrawtransaction 0400008085202f89011ce899dd6d796f06eaae4c771e119a9fb71372c5d861d225ae74548c38ea4f1901000000da00483045022100a5f4bdf5b61a4f4baf0b5b48f69488b8f752e36cbac23ec0c762bba99552ac9e022036e658c7c8c19ec4bd423fcc6a109a811b189311fc874dd466e58a1755ef4e940147304402200abc8c1e1e26090a7012df8859a3986229da34b0edd82c42a64efc8b89390e6702202582cbdce3de13fe59196228d4d0a6a80916e23ccb343f1cf32515688a938ebb0147522102dd22c272504af79b220ba37c12f777596eff4f54598e2db65be325a9393a3a2621032a73cd31fb86150c33f26312b665c21e5f9391829f29cf48aca03bbb4f9a281652aeffffffff014014502e000000001976a91497d5106d5f69619803eb8d72a2bf45a4f033338a88ac00000000a80000000000000000000000000000 | |
23c2aaaf458ada3f171ee5d274e8dcfc91b62099ec15e4b2d02da2b2d1172cb1 | |
Where 23c2aaaf458ada3f171ee5d274e8dcfc91b62099ec15e4b2d02da2b2d1172cb1 is output txid |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment