Since #13666 our fee calculation assumes that ECSDA signatures are a maximum of 71 bytes, rather than 72. However, not all hardware wallets implement R-value grinding.

This can cause us to underpay fees when using an external signer. That's especially problematic when the user picks 1 sat/vbyte as the fee, because it won't even get into our own mempool.

The easiest solution would be to modify `ExternalSignerScriptPubKeyMan` to assume 72 bytes for ECSDA signatures.

Slightly more advanced would be to expand HWI to keep track of which devices and firmware versions (if any) support R-value grinding. We'd then have to store that in the wallet in some new field. Personally I'd rather work on better Taproot support, which thanks to Schnorr avoids this issue altogether. 
--block_height;
            }
            if (rescan_height != block_height) {
                // We can'
                // This mi
                // or if t
                // Exit ea
                // It also 
                // all blo
                //  a bl
                // but fai
                error = chain.havePruned() ?
                     _("Prune last wal synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)") 
                     strprintf(_(
                        "Error loading wal. Wal requires blocks to be downloaded, "
                        "and software does not currently support loading wals while "
                        "blocks are being downloaded out of order when using assumeutxo "
                        "snapshots. Wal should be able to load successfully after "
                        "node sync reaches height %s"), block_height);
                return false;
            }
        }
        chain.initMessage(_("Rescanning…").translated);
        walInstance->WalLogPrintf("Rescanning last %i blocks (from block %i)...\n", *tip_height - rescan_height, rescan_height);
        {
            WalRescanReserver reserver(*walInstance);
            if (!reserver.reserve() || (ScanResultSUCCESS != walInstance->ScanForWalTransactions(chain.getBlockHash(rescan_height), rescan_height, /*ma reserver, /*fUpdate=*/_progr)) {
                error = _("Failed to rescan th during initialization");
                return false;
            }