Continuation of wallet boxes project.
Actually makes ScriptPubKeyMan an interface which LegacyScriptPubkeyMan. Moves around functions and things from CWallet into LegacyScriptPubKeyMan so that they are actually separate things without circular dependencies.
Introducing the ScriptPubKeyMan
(short for ScriptPubKeyManager) for managing scriptPubKeys and their associated scripts and keys. This functionality is moved over from CWallet
. Instead, CWallet
will have a pointer to a ScriptPubKeyMan
for every possible address type, internal and external. It will fetch the correct ScriptPubKeyMan
as necessary. When fetching new addresses, it chooses the ScriptPubKeyMan
based on address type and whether it is change. For signing, it takes the script and asks each ScriptPubKeyMan
for whether that ScriptPubKeyMan
considers that script IsMine
, whether it has that script, or whether it is able to produce a signature for it. If so, the ScriptPubKeyMan
will provide a SigningProvider
to the caller which will use that in order to sign.
There is currently one ScriptPubKeyMan
- the LegacyScriptPubKeyMan
. Each CWallet
will have only one LegacyScriptPubKeyMan
with the pointers for all of the address types and change pointing to this LegacyScriptPubKeyMan
. It is created when the wallet is loaded and all keys and metadata are loaded into it instead of CWallet
. The LegacyScriptPubKeyMan
is primarily made up of all of the key and script management that used to be in CWallet
. For convenience, CWallet
has a GetLegacyScriptPubKeyMan
which will return the LegacyScriptPubKeyMan
or a nullptr
if it does not have one (not yet implemented, but callers will check for the nullptr
). For purposes of signing, LegacyScriptPubKeyMan
’s GetSigningProvider
will return itself rather than a separate SigningProvider
. This will be different for future ScriptPubKeyMan
s.
The LegacyScriptPubKeyMan
will also handle the importing and exporting of keys and scripts instead of CWallet
. As such, a number of RPCs have been limited to work only if a LegacyScriptPubKeyMan
can be retrieved from the wallet. These RPCs are sethdseed
, addmultisigaddress
, importaddress
, importprivkey
, importpubkey
, importmulti
, dumpprivkey
, and dumpwallet
. Other RPCs which relied on the wallet for scripts and keys have been modified in order to take the SigningProvider
retrieved from the ScriptPubKeyMan
for a given script.
Overall, these changes should not effect how everything actually works and the user should experience no difference between having this change and not having it. As such, no functional tests were changed, and the only unit tests changed were those that were directly accessing CWallet
functions that have been removed.
This PR is the last step in the Wallet Structure Changes.