1

I am trying to import a P2SH address as watch-only using the importmulti RPC command. I provide the scriptPubKey, timestamp, and redeemscript values. The value of scriptPubKey that I'm submitting is the hex representation of the P2SH HASH160 <20 byte hash> EQUAL part of the script. The redeemscript I'm submitting is the hex representation of the preimage to the OP_HASH160 function, that when hashed, equals the <20 byte hash>.

The import is successful, but I get a warning:

"Importing as non-solvable: unrecognized script. If this is intentional, don't provide any keys, pubkeys, witnessscript, or redeemscript."

Should not this be solvable if providing both the scriptPubKey and redeemscript? If not, what am I missing?

7
  • What redeemscript are you trying to import? Oct 18, 2022 at 4:22
  • The scriptPubKey I'm submitting is the Hex representation of the P2SH HASH160 <20 byte hash> EQUAL part of the unlocking script. The redeemscript I'm submitting is the hex representation of the preimage to the OP_HASH160 function. It is what satisfies the scriptPubKey execution. Oct 18, 2022 at 14:31
  • Yes, but what is that redeemscript? Solvable means "Bitcoin Core knows how to construct spends for it, ignoring private keys". If the redeemscript isn't one of a small number of existing templates it recognizes, I don't expect it to consider the construct solvable. Oct 18, 2022 at 14:54
  • It is indeed a nonstandard script. That is, a custom script that probably does not conform to any standard template. Also nonstandard in the sense that when you decode the redeemscript using the decodescript RPC, the JSON result includes "type": "nonstandard". Is it impossible to import custom P2SH scripts/addresses as solvable into a bitcoind watch-only wallet? Oct 18, 2022 at 15:01
  • Yes, by definition. If it's non-standard, Bitcoin Core can't know how to sign for it. You can import and watch such scripts/addresses, but nothing else can be done with it (e.g. fee estimation, or participating in PSBT construction/signing for it). Thus, you might as well just import the address, without providing anything else (scripts etc), as those don't help you do anything you couldn't do without. Oct 18, 2022 at 15:02

1 Answer 1

2

It would appear you're trying to import a non-standard redeemScript. Those are non-solvable by definition.

In Bitcoin Core's terminology, there are several "levels" of knowledge about an address/script/output can have:

  • Nothing. We know nothing about an address, and don't consider it ours.
  • Watched. An address was imported into the wallet, and thus the wallet considers payments to it as incoming (watch-only) payments that affect its balance. However, nothing else is known about the address.
  • Solvable. Like watched, but in addition, we actually know how to construct a transaction for spending such an output, with the exception of access to private keys. This means the wallet can do fee estimation for spending (because it can predict how big of a witness/scriptSig will be needed for spending), and can participate in PSBT construction for spending it (which could then e.g. be handed to a hardware wallet or other wallet which does have the private keys). These things aren't possible with just a watched address.
  • Signable. Like solvable, but the wallet actually has access to private keys for signing too, and thus could directly construct a transaction spending it, without interacting with any other entity.

A non-standard redeemScript cannot be more than watched, as clearly Bitcoin Core can't know how to construct an input for such a script/address. The warning you're getting is letting you know that despite the fact that you provided scripts or public keys to the import command (information which typically helps achieve solvability), the result isn't actually solvable, and thus you'd be just as well off just importing the address and nothing more.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.