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. 
* Compute smart timestamp for a transaction being added to th.
 *
 * Logic
 * -  sending a transaction, assign its timestamp to the current time.
 * -  receiving a transaction outside a block, assign its timestamp to the
 *   current time.
 * -  receiving a transaction during a rescanning process, assign all its
 *   (not already known) transactions' timestamps to the block time.
 * -  receiving a block with a future timestamp, assign all its (not already
 *   known) transactions' timestamps to the current time.
 * -  receiving a block with a past timestamp, before the most recent known
 *   transaction (that we care about), assign all its (not already known)
 *   transactions' timestamps to the same timestamp as that most-recent-known
 *   transaction.
 * -  receiving a block with a past timestamp, but after the most recent known
 *   transaction, assign all its (not already known) transactions' timestamps to
 *   the block time.
 *
 * For more information see CWalTxnTimeSmart,
 * https//bitcointalk.org/?topic=54527, or
 * https//github.com/bitcoin/bitcoin/pull/1393.
 */
unsigned int CWalComputeTimeSmart(const CWalTx& wtx, bool rescanning_old_block) const
{
    stdoptional<uint256> block_hash;
    if (auto* conf = wtx.state<TxStateConfirmed>()) {
        block_hash = conf->confirmed_block_hash;
    } else if (auto* conf = wtx.state<TxStateConflicted>()) {
        block_hash = conf->conflicting_block_hash;
    }