XZC with 3 of 4 Multisignature

Published 12-24-2017 11:07:16

This post will show a step to setup (34) multisignature wallet and how to send transaction from it

0. Setup

We will create multisignature address that will require 3/4 key when signing.
- So you need to prepare 4 private key (We use 4 xzc-address/public-key when setup multisig address and 34 private key when sending a transaction).
You can just create new address from your existing wallet or you can create new wallet or private key which not relate from your old wallet.
- And zcoin-qt or zcoin-cli

1. Create Multisignature address

It is 3/4 key required. So first param is 3 (3 required) and second param is 4 (4 address/pubkey)

// Different address (pubkey) ordering will get different address
createmultisig 3 '["aNjWZuLTyCEWXr53eXGx4rx8CWUWiKxb9V","aLQSorufappuwunj38TG6wZmkmeEk65xjq","a6kyUv65AxHqbjMd4w2ybvjaYwidHZsdYK","a2VowQ1X1Dh7oRBPzRCDr9Ktn99Lgpiw7y"]'

You will get this

{
  "address": "3zfBYGjxri137ymrGVqazE5mZxu4Uv4kog",
  "redeemScript": "532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae"
}

2. Send XZC to Multisignature address

txid= a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea https://explorer.zcoin.io/api/getrawtransaction?txid=a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea&decrypt=1

3. Create Raw Transaction

3.1 Get ScriptPubKey

validateaddress 3zfBYGjxri137ymrGVqazE5mZxu4Uv4kog

{
  "isvalid": true,
  "address": "3zfBYGjxri137ymrGVqazE5mZxu4Uv4kog",
  "scriptPubKey": "a91470e65d62eef9beda8e45398e976be674225fbf8387",
  "ismine": true,
  "iswatchonly": false,
  "isscript": true,
  "script": "multisig",
  // Hex is RedeemScript
  "hex": "532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae",
  "addresses": [
    "aNjWZuLTyCEWXr53eXGx4rx8CWUWiKxb9V", 
    "aLQSorufappuwunj38TG6wZmkmeEk65xjq", 
    "a6kyUv65AxHqbjMd4w2ybvjaYwidHZsdYK", 
    "a2VowQ1X1Dh7oRBPzRCDr9Ktn99Lgpiw7y"
  ],
  "sigsrequired": 3,
}

3.2 Create Raw Transaction

We will create transaction that send 0.002 XZC to aBZgi9FCgRZ271eBJ96WyUKx8WoxAyoN2C

createrawtransaction '[{"txid":"a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea","vout":1,"scriptPubKey":"a91470e65d62eef9beda8e45398e976be674225fbf8387","redeemScript":"532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae"}]' '{"aBZgi9FCgRZ271eBJ96WyUKx8WoxAyoN2C":0.002}'

You will get hex transaction

0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a30100000000ffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000

which can decode to see a raw transaction by use decoderawtransaction 0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a30100000000ffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000

You will get origin raw transaction like this

{
  "txid": "126b03b20c0c241029a243c2218b0d2142462702c80499dcf480b2a2fdb76118",
  "hash": "126b03b20c0c241029a243c2218b0d2142462702c80499dcf480b2a2fdb76118",
  "size": 85,
  "vsize": 85,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "txid": "a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea",
      "vout": 1,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00200000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 77007769e13c0834ced00a9c796e807232901feb OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a91477007769e13c0834ced00a9c796e807232901feb88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "aBZgi9FCgRZ271eBJ96WyUKx8WoxAyoN2C"
        ]
      }
    }
  ]
}

4. Get Private Key

You will need private key for transaction signing

dumpprivkey <address>

Private key will start with Y

5. Sign Raw Transaction

Decode Raw Transaction and verify it before you sign it

The command is

signrawtransaction <HEX_STRING> <PREV_Tx> <ARRAY_OF_PRIVATE_KEY>

5.1 Sign it with 1st key. (privTx is input when create raw transaction)

signrawtransaction 0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a30100000000ffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000 '[{"txid":"a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea","vout":1,"scriptPubKey":"a91470e65d62eef9beda8e45398e976be674225fbf8387","redeemScript":"532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae"}]' '["<1ST_PRIVATE_KEY>"]'

1st signing result. Hex will be longer. scriptSig is not empty string. And complete=false is indicate that this transaction is not complete yet

{
  "hex": "0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a301000000d600473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54aeffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000",
  "complete": false,
  "errors": [
    {
      "txid": "a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea",
      "vout": 1,
      "scriptSig": "00473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae",
      "sequence": 4294967295,
      "error": "Operation not valid with the current stack size"
    }
  ]
}

5.2 Get hex from previous sign and sign it with second key

signrawtransaction 0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a301000000d600473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54aeffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000 '[{"txid":"a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea","vout":1,"scriptPubKey":"a91470e65d62eef9beda8e45398e976be674225fbf8387","redeemScript":"532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae"}]' '["<2ND_PRIVATE_KEY>"]'

2nd signing Result

{
  "hex": "0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a301000000fd1f0100473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014730440220718f70ad0cc0647f456a17f7330abc8dd22db323662d100479542374a105fb8d0220545b104f5959284c438ecaa21d1076a2272979ab611c298dac090a31ebcbe60701004c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54aeffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000",
  "complete": false,
  "errors": [
    {
      "txid": "a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea",
      "vout": 1,
      "scriptSig": "00473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014730440220718f70ad0cc0647f456a17f7330abc8dd22db323662d100479542374a105fb8d0220545b104f5959284c438ecaa21d1076a2272979ab611c298dac090a31ebcbe60701004c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae",
      "sequence": 4294967295,
      "error": "Signature must be zero for failed CHECK(MULTI)SIG operation"
    }
  ]
}

5.3 Get hex from previous sign and sign it with third key

signrawtransaction 0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a301000000fd1f0100473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014730440220718f70ad0cc0647f456a17f7330abc8dd22db323662d100479542374a105fb8d0220545b104f5959284c438ecaa21d1076a2272979ab611c298dac090a31ebcbe60701004c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54aeffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000 '[{"txid":"a3c0e664267214a11274ba6fb71ae8c8d1c808d47499873c98d1acf612783aea","vout":1,"scriptPubKey":"a91470e65d62eef9beda8e45398e976be674225fbf8387","redeemScript":"532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54ae"}]' '["<3RD_PRIVATE_KEY>"]'

Sign Result. complete=true - Now signing is complete. Broadcast this hex to publish your transaction

{
  "hex": "0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a301000000fd670100473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014730440220718f70ad0cc0647f456a17f7330abc8dd22db323662d100479542374a105fb8d0220545b104f5959284c438ecaa21d1076a2272979ab611c298dac090a31ebcbe60701483045022100c3372f05abcc039de8f229419504db9beac029826fe32e8600e5cbcd420de83602206449032b2cb1f8793739ec4997dc0f5c65aef560b4ffff19ce21106256268bcc014c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54aeffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000",
  "complete": true
}

6. Send Raw Transaction

sendrawtransaction 0100000001ea3a7812f6acd1983c879974d408c8d1c8e81ab76fba7412a114722664e6c0a301000000fd670100473044022065c2369720ed7ebcf1c452f9c1fb77535b8c7f9ac8fc04158999efa61209518402200a561afdff15261550248173fc46e56a1e22ea859e70139a5f8671c57c76d633014730440220718f70ad0cc0647f456a17f7330abc8dd22db323662d100479542374a105fb8d0220545b104f5959284c438ecaa21d1076a2272979ab611c298dac090a31ebcbe60701483045022100c3372f05abcc039de8f229419504db9beac029826fe32e8600e5cbcd420de83602206449032b2cb1f8793739ec4997dc0f5c65aef560b4ffff19ce21106256268bcc014c8b532103745b394a20747f09febbe2b34057586df24980d5645be7b181a613030814d34d210219ee4e32cbbdc71c386a3b51cda9bc858085c556259a2c8c24182286634e20fc21025cb3701dbb6d4b4503ed3405f236e315e273b6745431ebdba3282afeac262f0f2103981c7bb352ed9d8fcb62f07feab8ede8324cb86a1a400a041ab2145fee214aae54aeffffffff01400d0300000000001976a91477007769e13c0834ced00a9c796e807232901feb88ac00000000
comments powered by Disqus