analyzepsbt says next role is "updater", but nothing is "missing"

0

I'm trying to spend a 2/2 P2WSH input.

I don't understand how the "next" field can be "updater" if the "missing" field is empty:

$ bitcoin-cli -testnet analyzepsbt cHNidP8BAH0CAAAAAXz0qBDXO+uQOsNVaUcorfJafZYydCv5kGUTLaFs/r2HAAAAAAD+////AugDAAAAAAAAFgAUlBEbC0zwnx3lVjBHQ8j/OSY8D00DggEAAAAAACIAIIwfpAXvuuV+RHcUKJQhamBeY2kX8NQjEHnXq7nAxI0kAAAAAAABASughgEAAAAAACIAIF7irfIOj9QsEsbGg+4bmfHAIfxHGagcdw2PSeqZV1i9IgICykuckuH/D6RW3lBdbEqbEqHDxjQObhF8l5eQRDa64ftIMEUCIQD81o45GQb5Sl957dP64X4xj0QXzoMA8JTSBjbFRC3nrAIgCi1Ku1pSArpmyap0ZiZmAq8LRqis+cBdVeHJE9Da7WcBIgIC/NzEeTxfWJoNRzy7vS+dJSjAlu71hTAThp31g1LONFdHMEQCIBymHkm6ugBcdmllS0XhFHlGYglnrhtJOYk6ET865tYcAiAaBi9klfVfRnTP2KmHb7ZumIWEPzYRsXv2yUWn17Z3NAEBBUdSIQL83MR5PF9Ymg1HPLu9L50lKMCW7vWFMBOGnfWDUs40VyECykuckuH/D6RW3lBdbEqbEqHDxjQObhF8l5eQRDa64ftSriIGAspLnJLh/w+kVt5QXWxKmxKhw8Y0Dm4RfJeXkEQ2uuH7GGuz1AMsAACAAQAAgAAAAIAAAAAAAAAAACIGAvzcxHk8X1iaDUc8u70vnSUowJbu9YUwE4ad9YNSzjRXGHd0/yAsAACAAQAAgAAAAIAAAAAAAAAAAAAAAQFHUiEDLB2e+6+bTRK5ciRgj64xzggam4YgzswByu9oxg3wZ3UhA/jRhjYGYlDGSAoiCvs6tlL6CEU/gcH8yAq4NOqm8SEXUq4iAgMsHZ77r5tNErlyJGCPrjHOCBqbhiDOzAHK72jGDfBndRh3dP8gLAAAgAEAAIAAAACAAAAAAAIAAAAiAgP40YY2BmJQxkgKIgr7OrZS+ghFP4HB/MgKuDTqpvEhFxhrs9QDLAAAgAEAAIAAAACAAAAAAAIAAAAA
{
  "inputs": [
    {
      "has_utxo": true,
      "is_final": false,
      "missing": {
      },
      "next": "updater"
    }
  ],
  "estimated_vsize": 181,
  "estimated_feerate": 0.00001000,
  "fee": 0.00000181,
  "next": "updater"
}

I've used HWI to add partial_signatures for each of the 2 pubkeys specified in the inputs[0]['bip32_derivs'] field.

$ bitcoin-cli -testnet decodepsbt cHNidP8BAH0CAAAAAXz0qBDXO+uQOsNVaUcorfJafZYydCv5kGUTLaFs/r2HAAAAAAD+////AugDAAAAAAAAFgAUlBEbC0zwnx3lVjBHQ8j/OSY8D00DggEAAAAAACIAIIwfpAXvuuV+RHcUKJQhamBeY2kX8NQjEHnXq7nAxI0kAAAAAAABASughgEAAAAAACIAIF7irfIOj9QsEsbGg+4bmfHAIfxHGagcdw2PSeqZV1i9IgICykuckuH/D6RW3lBdbEqbEqHDxjQObhF8l5eQRDa64ftIMEUCIQD81o45GQb5Sl957dP64X4xj0QXzoMA8JTSBjbFRC3nrAIgCi1Ku1pSArpmyap0ZiZmAq8LRqis+cBdVeHJE9Da7WcBIgIC/NzEeTxfWJoNRzy7vS+dJSjAlu71hTAThp31g1LONFdHMEQCIBymHkm6ugBcdmllS0XhFHlGYglnrhtJOYk6ET865tYcAiAaBi9klfVfRnTP2KmHb7ZumIWEPzYRsXv2yUWn17Z3NAEBBUdSIQL83MR5PF9Ymg1HPLu9L50lKMCW7vWFMBOGnfWDUs40VyECykuckuH/D6RW3lBdbEqbEqHDxjQObhF8l5eQRDa64ftSriIGAspLnJLh/w+kVt5QXWxKmxKhw8Y0Dm4RfJeXkEQ2uuH7GGuz1AMsAACAAQAAgAAAAIAAAAAAAAAAACIGAvzcxHk8X1iaDUc8u70vnSUowJbu9YUwE4ad9YNSzjRXGHd0/yAsAACAAQAAgAAAAIAAAAAAAAAAAAAAAQFHUiEDLB2e+6+bTRK5ciRgj64xzggam4YgzswByu9oxg3wZ3UhA/jRhjYGYlDGSAoiCvs6tlL6CEU/gcH8yAq4NOqm8SEXUq4iAgMsHZ77r5tNErlyJGCPrjHOCBqbhiDOzAHK72jGDfBndRh3dP8gLAAAgAEAAIAAAACAAAAAAAIAAAAiAgP40YY2BmJQxkgKIgr7OrZS+ghFP4HB/MgKuDTqpvEhFxhrs9QDLAAAgAEAAIAAAACAAAAAAAIAAAAA
{
  "tx": {
    "txid": "65cf8989e70e1112e8022043bd3a91a7f1d4074d9d7b004f0be05b327f819ff8",
    "hash": "65cf8989e70e1112e8022043bd3a91a7f1d4074d9d7b004f0be05b327f819ff8",
    "version": 2,
    "size": 125,
    "vsize": 125,
    "weight": 500,
    "locktime": 0,
    "vin": [
      {
        "txid": "87bdfe6ca12d136590f92b7432967d5af2ad28476955c33a90eb3bd710a8f47c",
        "vout": 0,
        "scriptSig": {
          "asm": "",
          "hex": ""
        },
        "sequence": 4294967294
      }
    ],
    "vout": [
      {
        "value": 0.00001000,
        "n": 0,
        "scriptPubKey": {
          "asm": "0 94111b0b4cf09f1de556304743c8ff39263c0f4d",
          "hex": "001494111b0b4cf09f1de556304743c8ff39263c0f4d",
          "reqSigs": 1,
          "type": "witness_v0_keyhash",
          "addresses": [
            "tb1qjsg3kz6v7z03me2kxpr58j8l8ynrcr6d6qvfsu"
          ]
        }
      },
      {
        "value": 0.00098819,
        "n": 1,
        "scriptPubKey": {
          "asm": "0 8c1fa405efbae57e4477142894216a605e636917f0d4231079d7abb9c0c48d24",
          "hex": "00208c1fa405efbae57e4477142894216a605e636917f0d4231079d7abb9c0c48d24",
          "reqSigs": 1,
          "type": "witness_v0_scripthash",
          "addresses": [
            "tb1q3s06gp00htjhu3rhzs5fggt2vp0xx6gh7r2zxyre674mnsxy35jq4s8uxx"
          ]
        }
      }
    ]
  },
  "unknown": {
  },
  "inputs": [
    {
      "witness_utxo": {
        "amount": 0.00100000,
        "scriptPubKey": {
          "asm": "0 5ee2adf20e8fd42c12c6c683ee1b99f1c021fc4719a81c770d8f49ea995758bd",
          "hex": "00205ee2adf20e8fd42c12c6c683ee1b99f1c021fc4719a81c770d8f49ea995758bd",
          "type": "witness_v0_scripthash",
          "address": "tb1qtm32musw3l2zcykxc6p7uxue78qzrlz8rx5pcacd3ay74x2htz7s89n5j4"
        }
      },
      "partial_signatures": {
        "02ca4b9c92e1ff0fa456de505d6c4a9b12a1c3c6340e6e117c9797904436bae1fb": "3045022100fcd68e391906f94a5f79edd3fae17e318f4417ce8300f094d20636c5442de7ac02200a2d4abb5a5202ba66c9aa7466266602af0b46a8acf9c05d55e1c913d0daed6701",
        "02fcdcc4793c5f589a0d473cbbbd2f9d2528c096eef5853013869df58352ce3457": "304402201ca61e49baba005c7669654b45e1147946620967ae1b4939893a113f3ae6d61c02201a062f6495f55f4674cfd8a9876fb66e9885843f3611b17bf6c945a7d7b6773401"
      },
      "witness_script": {
        "asm": "2 02fcdcc4793c5f589a0d473cbbbd2f9d2528c096eef5853013869df58352ce3457 02ca4b9c92e1ff0fa456de505d6c4a9b12a1c3c6340e6e117c9797904436bae1fb 2 OP_CHECKMULTISIG",
        "hex": "522102fcdcc4793c5f589a0d473cbbbd2f9d2528c096eef5853013869df58352ce34572102ca4b9c92e1ff0fa456de505d6c4a9b12a1c3c6340e6e117c9797904436bae1fb52ae",
        "type": "multisig"
      },
      "bip32_derivs": [
        {
          "pubkey": "02ca4b9c92e1ff0fa456de505d6c4a9b12a1c3c6340e6e117c9797904436bae1fb",
          "master_fingerprint": "6bb3d403",
          "path": "m/44'/1'/0'/0/0"
        },
        {
          "pubkey": "02fcdcc4793c5f589a0d473cbbbd2f9d2528c096eef5853013869df58352ce3457",
          "master_fingerprint": "7774ff20",
          "path": "m/44'/1'/0'/0/0"
        }
      ]
    }
  ],
  "outputs": [
    {
    },
    {
      "witness_script": {
        "asm": "2 032c1d9efbaf9b4d12b97224608fae31ce081a9b8620cecc01caef68c60df06775 03f8d18636066250c6480a220afb3ab652fa08453f81c1fcc80ab834eaa6f12117 2 OP_CHECKMULTISIG",
        "hex": "5221032c1d9efbaf9b4d12b97224608fae31ce081a9b8620cecc01caef68c60df067752103f8d18636066250c6480a220afb3ab652fa08453f81c1fcc80ab834eaa6f1211752ae",
        "type": "multisig"
      },
      "bip32_derivs": [
        {
          "pubkey": "032c1d9efbaf9b4d12b97224608fae31ce081a9b8620cecc01caef68c60df06775",
          "master_fingerprint": "7774ff20",
          "path": "m/44'/1'/0'/0/2"
        },
        {
          "pubkey": "03f8d18636066250c6480a220afb3ab652fa08453f81c1fcc80ab834eaa6f12117",
          "master_fingerprint": "6bb3d403",
          "path": "m/44'/1'/0'/0/2"
        }
      ]
    }
  ],
  "fee": 0.00000181
}

I dug around in psbt.cpp for a while but still can't figure out what's missing ...

justinmoon

Posted 2019-07-17T23:47:06.483

Reputation: 311

Are you able to finalize the psbt using finalizepsbt? AFAICT, the only thing that can cause this is an invalid signature.Andrew Chow 2019-07-18T02:39:27.773

finalizepsbt returns { "psbt": <unchanged>, "complete": false }. Is there any straightforward way to check the signatures in a PSBT? And I got the signatures straight from HWI so could be a bug over there ...justinmoon 2019-07-18T02:44:38.267

What hardware wallet did you use? Some don't entirely support multisig (or previous versions of firmware didn't) but will still give a signature which is invalid.Andrew Chow 2019-07-18T02:58:06.087

Bitbox 7.0.0 & Ledger 1.5.5 (up-to-date according to their GUI apps). I also have a trezor and coldcard. Guess I'll try those, too.justinmoon 2019-07-18T03:14:25.113

can you open an issue in the HWI repo and we can continue there? Also, it would be good if you could share the PSBT you gave to HWI to be signed.Andrew Chow 2019-07-18T03:27:04.740

I noticed this with ColdCard simulator too, single signature, without HWI, while working on: https://github.com/bitcoin/bitcoin/pull/17509 finalizepsbt was happy though and I could broadcast the testnet transaction. I assumed did something wrong. Will file a Github issue if I see it again.

Sjors Provoost 2019-11-20T10:10:47.507

No answers