bitcoin/bitcoin

Load PSBT error: Unable to decode PSBT

foolbear opened this issue · 3 comments

Is there an existing issue for this?

  • I have searched the existing issues

Current behaviour

"Load PSBT from ..." from menu, error shows:
Unable to decode PSBT Unsigned tx does not have empty scriptSigs and scriptWitnesses.: unspecified iostream_category error

decodepsbt and analyzepsbt show the same error too:
TX decode failed Unsigned tx does not have empty scriptSigs and scriptWitnesses.: unspecified iostream_category error (code -22)

Expected behaviour

I expect Load PSBT success.

And same procedure works fine in another wallet of test net. Both wallets are not watch-only

Steps to reproduce

I test PSBT in my wallet today, create a transaction in Bitcoin Core, click "send" and "create unsigned", then "Load PSBT from ..." from menu

I'm using prune mode for block chain. This address I made tx was obtained by importprivkey, and then covert to Descriptor Wallets by migratewallet.

I found the source code:

             case PSBT_GLOBAL_UNSIGNED_TX:
            {
                if (!key_lookup.emplace(key).second) {
                    throw std::ios_base::failure("Duplicate Key, unsigned tx already provided");
                } else if (key.size() != 1) {
                    throw std::ios_base::failure("Global unsigned tx key is more than one byte type");
                }
                CMutableTransaction mtx;
                // Set the stream to serialize with non-witness since this should always be non-witness
                UnserializeFromVector(s, TX_NO_WITNESS(mtx));
                tx = std::move(mtx);
                // Make sure that all scriptSigs and scriptWitnesses are empty
                for (const CTxIn& txin : tx->vin) {
                    if (!txin.scriptSig.empty() || !txin.scriptWitness.IsNull()) {
 ---->                  throw std::ios_base::failure("Unsigned tx does not have empty scriptSigs and scriptWitnesses.");
                    }
                }
                break;
            }

Relevant log output

no relevant log.

How did you obtain Bitcoin Core

Pre-built binaries

What version of Bitcoin Core are you using?

Bitcoin Core version v27.0.0

Operating system and version

MacOS 14.4.1

Machine specifications

No response

Are you able to reproduce in regtest, with exact steps to reproduce?

keywords: not watch-only wallet, prune mode, importprivkey, migratewallet.

"And same procedure works fine in another wallet of test net", but I cannot make an address with UTXOs from years ago(maybe have something to do with prune mode?).

In the above issue, PSBT was created from GUI - send - create unsigned. If I create it using 'walletcreatefundedpsbt,' there is no problem. in main net.