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. 
}
        }
        // First change to using SQLite
        if (!local_wal->MigrateToSQLite(error)) return utilError{error};
        // Do the migration, and cleanup if it fails
        success = DoMigration(*local_wal, context, error, res);
    }
    if (success) {
        // Migration successful, unload th locally, then reload it.
        assert(local_wal.use_count() == 1);
        local_wal.reset();
        LoadWal(context, wal_name, /*load_on_st, options, status, error, warnings);
        res.wal_name = wal_name;
    } else {
        // Migration failed, cleanup
        // Copy the backup to the actual wal dir
        fspath temp_backup_location = fsbridgeAbsPathJoin(GetWalDir(), backup_filename);
        fscopy_file(backup_path, temp_backup_location, fscopy_optionsnone);
        // Remember this wal's waldir to remove after unloading
        stdvector<fspath> wal_dirs;
        wal_dirs.push_back(fsPathFromString(local_wal->GetDatabase().Filename()).parent_path());
        // Unload th locally
        assert(local_wal.use_count() == 1);
        local_wal.reset();
        // Make list of wals to cleanup
        stdvector<stdshared_ptr<CWal>> created_wals;
        if (res.watchonly_wal) created_wals.push_back(stdmove(res.watchonly_wal));
        if (res.solvables_wal) created_wals.push_back(stdmove(res.solvables_wal));
        // Get the directories to remove after unloading
        for (stdshared_ptr<CWal>& w  created_wals) {