Multisig sign transaction error

Hi,

I am developing a multisig wallet (2-of-3), and using trezor as a secondary key.

When I sign a transaction:

{“coin”:“TEST”,“inputs”:[{“address_n”:[2147483696,2147483649,2147483648,2147483650,0,0],“amount”:“7100”,“script_type”:“SPENDWITNESS”,“prev_hash”:“d261820cfd7db67bdc186359351dcdd97ba2f6a44da6a765248c5668adf1fa38”,“prev_index”:0,“multisig”:{“m”:2,“pubkeys”:[{“address_n”:[0,0],“node”:{“depth”:0,“child_num”:0,“fingerprint”:39978439,“chain_code”:“0000000000000000000000000000000000000000000000000000000000000000”,“public_key”:“tpubDFML6PHWWhrJfjKvkb7ms8DmoqtKGEv7i5PftdqwCJN1Hqzax5xkzFJBS6hNxtASfF5Co8Y4GKUE9uUHBDbg1AjwDyDaoizzUYdnVoATTH9”}},{“address_n”:[0,0],“node”:{“depth”:0,“child_num”:0,“fingerprint”:2632449626,“chain_code”:“0000000000000000000000000000000000000000000000000000000000000000”,“public_key”:“tpubDF4RbJ5wWkrydFrV4wecuammQCdmneNAsv7iczFgXffXpSxhMndybVfPJ8nCM9GkarKezSftWZfnyX94v4Sio5JBXyVisLnS1GkpErb5e2F”}},{“address_n”:[0,0],“node”:{“depth”:0,“child_num”:0,“fingerprint”:2615113513,“chain_code”:“0000000000000000000000000000000000000000000000000000000000000000”,“public_key”:“tpubDEr7h7wd7D4aZWLacJD6jU1MNdh3WDyovxWFM9WAxe3bvzJMY533PpLDN4FCY9hFgPqaLW4acBoKvyHn2PFr6RjYyvLHqVPAYwYFT5kvNwc”}}],“signatures”:[“”,“”]}}],“outputs”:[{“address”:“tb1q3za3xqzqd4cy62hfxg0ngv0f3206dk3sm0dr0l”,“amount”:“4500”,“script_type”:“PAYTOADDRESS”},{“address_n”:[2147483696,2147483649,2147483648,2147483650,1,0],“amount”:“2399”,“script_type”:“PAYTOWITNESS”,“multisig”:{“m”:2,“pubkeys”:[{“address_n”:[0,0],“node”:{“depth”:0,“child_num”:0,“fingerprint”:39978439,“chain_code”:“0000000000000000000000000000000000000000000000000000000000000000”,“public_key”:“tpubDFML6PHWWhrJfjKvkb7ms8DmoqtKGEv7i5PftdqwCJN1Hqzax5xkzFJBS6hNxtASfF5Co8Y4GKUE9uUHBDbg1AjwDyDaoizzUYdnVoATTH9”}},{“address_n”:[0,0],“node”:{“depth”:0,“child_num”:0,“fingerprint”:2632449626,“chain_code”:“0000000000000000000000000000000000000000000000000000000000000000”,“public_key”:“tpubDF4RbJ5wWkrydFrV4wecuammQCdmneNAsv7iczFgXffXpSxhMndybVfPJ8nCM9GkarKezSftWZfnyX94v4Sio5JBXyVisLnS1GkpErb5e2F”}},{“address_n”:[0,0],“node”:{“depth”:0,“child_num”:0,“fingerprint”:2615113513,“chain_code”:“0000000000000000000000000000000000000000000000000000000000000000”,“public_key”:“tpubDEr7h7wd7D4aZWLacJD6jU1MNdh3WDyovxWFM9WAxe3bvzJMY533PpLDN4FCY9hFgPqaLW4acBoKvyHn2PFr6RjYyvLHqVPAYwYFT5kvNwc”}}],“signatures”:[“”,“”]}}]}

And when call TrezorConnect.signTransaction, I got “Failed to hash input” error.

Anyone know what the problem it is? Thanks!

could you, like, format the json before pasting it? makes it somewhat easier for casual reader to spot any obvious problems

{
   "coin":"TEST",
   "inputs":[
      {
         "address_n":[
            2147483696,
            2147483649,
            2147483648,
            2147483650,
            0,
            0
         ],
         "amount":"7100",
         "script_type":"SPENDWITNESS",
         "prev_hash":"d261820cfd7db67bdc186359351dcdd97ba2f6a44da6a765248c5668adf1fa38",
         "prev_index":0,
         "multisig":{
            "m":2,
            "pubkeys":[
               {
                  "address_n":[
                     0,
                     0
                  ],
                  "node":{
                     "depth":0,
                     "child_num":0,
                     "fingerprint":39978439,
                     "chain_code":"0000000000000000000000000000000000000000000000000000000000000000",
                     "public_key":"tpubDFML6PHWWhrJfjKvkb7ms8DmoqtKGEv7i5PftdqwCJN1Hqzax5xkzFJBS6hNxtASfF5Co8Y4GKUE9uUHBDbg1AjwDyDaoizzUYdnVoATTH9"
                  }
               },
               {
                  "address_n":[
                     0,
                     0
                  ],
                  "node":{
                     "depth":0,
                     "child_num":0,
                     "fingerprint":2632449626,
                     "chain_code":"0000000000000000000000000000000000000000000000000000000000000000",
                     "public_key":"tpubDF4RbJ5wWkrydFrV4wecuammQCdmneNAsv7iczFgXffXpSxhMndybVfPJ8nCM9GkarKezSftWZfnyX94v4Sio5JBXyVisLnS1GkpErb5e2F"
                  }
               },
               {
                  "address_n":[
                     0,
                     0
                  ],
                  "node":{
                     "depth":0,
                     "child_num":0,
                     "fingerprint":2615113513,
                     "chain_code":"0000000000000000000000000000000000000000000000000000000000000000",
                     "public_key":"tpubDEr7h7wd7D4aZWLacJD6jU1MNdh3WDyovxWFM9WAxe3bvzJMY533PpLDN4FCY9hFgPqaLW4acBoKvyHn2PFr6RjYyvLHqVPAYwYFT5kvNwc"
                  }
               }
            ],
            "signatures":[
               "",
               ""
            ]
         }
      }
   ],
   "outputs":[
      {
         "address":"tb1q3za3xqzqd4cy62hfxg0ngv0f3206dk3sm0dr0l",
         "amount":"4500",
         "script_type":"PAYTOADDRESS"
      },
      {
         "address_n":[
            2147483696,
            2147483649,
            2147483648,
            2147483650,
            1,
            0
         ],
         "amount":"2399",
         "script_type":"PAYTOWITNESS",
         "multisig":{
            "m":2,
            "pubkeys":[
               "same as input..."
            ],
            "signatures":[
               "",
               ""
            ]
         }
      }
   ]
}
1 Like

I suspect that you can’t shove the xpub string into the public key field, you’ll need to parse the xpub and fill out the respective items individually.

(that is unless Connect is doing this processing for you)

Hi Thank you!

This is my new json:

{
   "coin":"TEST",
   "inputs":[
      {
         "address_n":[
            2147483696,
            2147483649,
            2147483648,
            2147483650,
            0,
            0
         ],
         "amount":"7100",
         "script_type":"SPENDWITNESS",
         "prev_hash":"d261820cfd7db67bdc186359351dcdd97ba2f6a44da6a765248c5668adf1fa38",
         "prev_index":0,
         "multisig":{
            "m":2,
            "pubkeys":[
               {
                  "address_n":[
                     0,
                     0
                  ],
                  "node":"tpubDFML6PHWWhrJfjKvkb7ms8DmoqtKGEv7i5PftdqwCJN1Hqzax5xkzFJBS6hNxtASfF5Co8Y4GKUE9uUHBDbg1AjwDyDaoizzUYdnVoATTH9"
               },
               {
                  "address_n":[
                     0,
                     0
                  ],
                  "node":"tpubDF4RbJ5wWkrydFrV4wecuammQCdmneNAsv7iczFgXffXpSxhMndybVfPJ8nCM9GkarKezSftWZfnyX94v4Sio5JBXyVisLnS1GkpErb5e2F"
               },
               {
                  "address_n":[
                     0,
                     0
                  ],
                  "node":"tpubDEr7h7wd7D4aZWLacJD6jU1MNdh3WDyovxWFM9WAxe3bvzJMY533PpLDN4FCY9hFgPqaLW4acBoKvyHn2PFr6RjYyvLHqVPAYwYFT5kvNwc"
               }
            ],
            "signatures":[
               "",
               ""
            ]
         }
      }
   ],
   "outputs":[
      {
         "address":"tb1q3za3xqzqd4cy62hfxg0ngv0f3206dk3sm0dr0l",
         "amount":"4500",
         "script_type":"PAYTOADDRESS"
      },
      {
         "address_n":[
            2147483696,
            2147483649,
            2147483648,
            2147483650,
            1,
            0
         ],
         "amount":"2399",
         "script_type":"PAYTOWITNESS",
         "multisig":{
            "m":2,
            "pubkeys":[
               {
                  "address_n":[
                     1,
                     0
                  ],
                  "node":"tpubDFML6PHWWhrJfjKvkb7ms8DmoqtKGEv7i5PftdqwCJN1Hqzax5xkzFJBS6hNxtASfF5Co8Y4GKUE9uUHBDbg1AjwDyDaoizzUYdnVoATTH9"
               },
               {
                  "address_n":[
                     1,
                     0
                  ],
                  "node":"tpubDF4RbJ5wWkrydFrV4wecuammQCdmneNAsv7iczFgXffXpSxhMndybVfPJ8nCM9GkarKezSftWZfnyX94v4Sio5JBXyVisLnS1GkpErb5e2F"
               },
               {
                  "address_n":[
                     1,
                     0
                  ],
                  "node":"tpubDEr7h7wd7D4aZWLacJD6jU1MNdh3WDyovxWFM9WAxe3bvzJMY533PpLDN4FCY9hFgPqaLW4acBoKvyHn2PFr6RjYyvLHqVPAYwYFT5kvNwc"
               }
            ]
         }
      }
   ]
}

And now I get ‘Input does not match scriptPubKey’

That would typically mean that you are spending an input that does not belong to you.

Double-check that the multisig parameters that you are providing match the multisig wallet that you specified. I think you should be able to take the same multisig data and use them in getAddress, and then verify that it’s the destination address of the UTXO.