HomePhabricator

[backport#18067] wallet: Improve LegacyScriptPubKeyMan::CanProvide script…

Description

[backport#18067] wallet: Improve LegacyScriptPubKeyMan::CanProvide script recognition

Summary:
a304a3632f0437f4d0f04589a2200e2da91624a7 Revert "Store p2sh scripts in AddAndGetDestinationForScript" (Russell Yanofsky)
eb7d8a5b07e89133a5fb465ad1b793362e7439f7 [test] check for addmultisigaddress regression (Sjors Provoost)
005f8a92ccb5bc10c8daa106d75e1c21390461d3 wallet: Improve LegacyScriptPubKeyMan::CanProvide script recognition (Russell Yanofsky)

Pull request description:

Make `LegacyScriptPubKeyMan::CanProvide` method able to recognize p2sh scripts when the redeem script is present in the `mapScripts` map without the p2sh script also having to be added to the `mapScripts` map. This restores behavior prior to #17261, which I think broke backwards compatibility with old wallet files by no longer treating addresses created by `addmultisigaddress` calls before #17261 as solvable.

The reason why tests didn't fail with the CanProvide implementation in #17261 is because of a workaround added in 4a7e43e8460127a40a7895519587399feff3b682 "Store p2sh scripts in AddAndGetDestinationForScript", which masked the problem for new `addmultisigaddress` RPC calls without fixing it for multisig addresses already created in old wallet files.

This change adds a lot of comments and allows reverting commit 4a7e43e8460127a40a7895519587399feff3b682 "Store p2sh scripts in AddAndGetDestinationForScript", so the `AddAndGetDestinationForScript()` function, `CanProvide()` method, and `mapScripts` map should all be more comprehensible

Backport of Core PR18067

Test Plan:

ninja all check check-functional

Reviewers: #bitcoin_abc, PiRK

Reviewed By: #bitcoin_abc, PiRK

Subscribers: PiRK

Differential Revision: https://reviews.bitcoinabc.org/D9115

Details

Provenance
Samuel Dobson <dobsonsa68@gmail.com>Authored on Feb 19 2020, 01:14
majcostaCommitted on Feb 2 2021, 16:55
majcostaPushed on Feb 2 2021, 16:55
Reviewer
Restricted Project
Differential Revision
D9115: [backport#18067] wallet: Improve LegacyScriptPubKeyMan::CanProvide script recognition
Parents
rABC97c446e3bf66: scripted-diff: TxoutType C++11 scoped enum class
Branches
Unknown
Tags
Unknown