Some comments from @sipa in #12702.

___

Yes, I think `importmulti` is superior in every way, except:
* Slightly less convenient to use (it requires redundant information, as you have to explicitly state what you want to import, and then give the keys/... to enable that).
* ~Doesn't support P2SH-P2WPKH yet~. Added in #14454

The latter can be fixed by just adding support for that case. The former can be improved by adding 'default' cases (e.g. if you prove a WIF private key, it can permit omitting the address, ...).

if (!witness_script_hex.empty() && script.IsPayToWitnessScriptHash()) {
            if (!IsHex(witness_script_hex)) {
                throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid witness script: must be hex string");
            }
            
            std::vector<unsigned char> witness_script_parsed(ParseHex(witness_script_hex));
            CScript witness_script = CScript(witness_script_parsed.begin(), witness_script_parsed.end());
            CScriptID witness_id(witness_script);
            
            if (GetScriptForDestination(WitnessV0ScriptHash(witness_script)) != script) {
                throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "The witnessScript does not match the scriptPubKey or redeemScript");
            }
            
            if (!scriptpubkey_script.IsPayToScriptHash() && !pwallet->AddWatchOnly(witness_script, timestamp)) {
                throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
            }
            if (!pwallet->HaveCScript(witness_id) && !pwallet->AddCScript(witness_script)) {
                throw JSONRPCError(RPC_WALLET_ERROR, "Error adding p2wsh witnessScript to wallet");
            }
            
            script = witness_script;
            ExtractDestination(script, dest);
            allow_p2wpkh = false; 
        }
        
        if (dest.type() == typeid(CKeyID) || dest.type() == typeid(WitnessV0KeyHash)) {
            if (!allow_p2wpkh && dest.type() == typeid(WitnessV0KeyHash)) {
                throw JSONRPCError(RPC_INVALID_PARAMETER, "P2WPKH cannot be embedded in P2WSH");
            }
            if (keys.size() > 1 || pubKeys.size() > 1) {