From bf92548267f8ea4ebb85e9cbf3b99fcc9c7409f4 Mon Sep 17 00:00:00 2001 From: Local Dev Date: Mon, 5 Oct 2026 22:54:25 +0200 Subject: [PATCH] Aegis 0.32.2: no transaction is marked replaceable Start of the next batch; 0.32.1 is published. Bitcoin inputs were given the BIP125 sequence that opts in to replace-by-fee. Aegis does not replace transactions on any chain and has no way to bump one, so advertising a payment as replaceable only told the recipient to distrust it until confirmed. Inputs are final again. --- bundled-addons/aegis/addon.json | 2 +- bundled-addons/aegis/lib/chain-btc.js | 8 ++++---- bundled-addons/aegis/lib/chain-dgb.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bundled-addons/aegis/addon.json b/bundled-addons/aegis/addon.json index eab8c1a2..d7d001d9 100644 --- a/bundled-addons/aegis/addon.json +++ b/bundled-addons/aegis/addon.json @@ -1,7 +1,7 @@ { "id": "aegis", "name": "Aegis Wallet", - "version": "0.32.1", + "version": "0.32.2", "category": "plugin", "description": "Multi-chain wallet (BCH, BTC, TRX, ETH, SOL, SC, DGB) derived from your Theseus vault. Dapps get window.bitcoincash and window.wizardconnect on any site; window.tronWeb / window.tronLink / window.ethereum / window.solana too. Every call needs your approval.", "author": "Silent Mode", diff --git a/bundled-addons/aegis/lib/chain-btc.js b/bundled-addons/aegis/lib/chain-btc.js index cb31e4f5..8178177f 100644 --- a/bundled-addons/aegis/lib/chain-btc.js +++ b/bundled-addons/aegis/lib/chain-btc.js @@ -193,7 +193,6 @@ module.exports = function makeBtcAdapter({ // number of vbytes, and paying for 152.5 of 153 lands under the rate. Math.ceil(Math.ceil(OVERHEAD_VB + nIn * (INPUT_VB[kind] || 68) + outScripts.reduce((a, s) => a + 9 + s.length, 0)) * feePerVb); const DEFAULT_RATE = 5; // sat/vB when the server has no estimate - const RBF_SEQUENCE = 0xfffffffd; // BIP125: opt in to replace-by-fee class BtcWallet { constructor(root32, networkId, { @@ -460,9 +459,10 @@ module.exports = function makeBtcAdapter({ const prevHex = await verifyFunding({ chosen: plan._chosen, client: this._client, Transaction: bitcoinjs.Transaction }); const psbt = new Psbt({ network: this._bjsNet }); for (const u of plan._chosen) { - // Signal replace-by-fee, so a payment sent at too low a rate can be - // re-issued at a higher one instead of sitting unconfirmed for days. - const inp = { hash: u.txid, index: u.vout, sequence: RBF_SEQUENCE }; + // Final sequence on every input: Aegis does not do replace-by-fee on + // any chain, so it must not advertise a transaction as replaceable + // (a recipient would then be right to distrust it until confirmed). + const inp = { hash: u.txid, index: u.vout, sequence: 0xffffffff }; const fam = u.entry.family; if (fam === "bip44") { inp.nonWitnessUtxo = Buffer.from(prevHex.get(u.txid), "hex"); diff --git a/bundled-addons/aegis/lib/chain-dgb.js b/bundled-addons/aegis/lib/chain-dgb.js index 92a9c7de..cee11592 100644 --- a/bundled-addons/aegis/lib/chain-dgb.js +++ b/bundled-addons/aegis/lib/chain-dgb.js @@ -365,7 +365,7 @@ module.exports = function makeDgbAdapter({ // ---- plan + sign (via @dgb-wallet/psbt) ----------------------------- // sat/vB from the Electrum server, never below the 20 this wallet has // always paid (DigiByte's relay floor is far above Bitcoin's, and there - // is no replace-by-fee on DGB to rescue an underpaid transaction). + // is nothing to rescue an underpaid transaction: Aegis never replaces one). async _estimateRate() { if (this._feeEst && Date.now() - this._feeEstAt < 60_000) return this._feeEst; try {