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.
This commit is contained in:
parent
a1eceb444a
commit
bf92548267
3 changed files with 6 additions and 6 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "aegis",
|
"id": "aegis",
|
||||||
"name": "Aegis Wallet",
|
"name": "Aegis Wallet",
|
||||||
"version": "0.32.1",
|
"version": "0.32.2",
|
||||||
"category": "plugin",
|
"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.",
|
"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",
|
"author": "Silent Mode",
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,6 @@ module.exports = function makeBtcAdapter({
|
||||||
// number of vbytes, and paying for 152.5 of 153 lands under the rate.
|
// 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);
|
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 DEFAULT_RATE = 5; // sat/vB when the server has no estimate
|
||||||
const RBF_SEQUENCE = 0xfffffffd; // BIP125: opt in to replace-by-fee
|
|
||||||
|
|
||||||
class BtcWallet {
|
class BtcWallet {
|
||||||
constructor(root32, networkId, {
|
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 prevHex = await verifyFunding({ chosen: plan._chosen, client: this._client, Transaction: bitcoinjs.Transaction });
|
||||||
const psbt = new Psbt({ network: this._bjsNet });
|
const psbt = new Psbt({ network: this._bjsNet });
|
||||||
for (const u of plan._chosen) {
|
for (const u of plan._chosen) {
|
||||||
// Signal replace-by-fee, so a payment sent at too low a rate can be
|
// Final sequence on every input: Aegis does not do replace-by-fee on
|
||||||
// re-issued at a higher one instead of sitting unconfirmed for days.
|
// any chain, so it must not advertise a transaction as replaceable
|
||||||
const inp = { hash: u.txid, index: u.vout, sequence: RBF_SEQUENCE };
|
// (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;
|
const fam = u.entry.family;
|
||||||
if (fam === "bip44") {
|
if (fam === "bip44") {
|
||||||
inp.nonWitnessUtxo = Buffer.from(prevHex.get(u.txid), "hex");
|
inp.nonWitnessUtxo = Buffer.from(prevHex.get(u.txid), "hex");
|
||||||
|
|
|
||||||
|
|
@ -365,7 +365,7 @@ module.exports = function makeDgbAdapter({
|
||||||
// ---- plan + sign (via @dgb-wallet/psbt) -----------------------------
|
// ---- plan + sign (via @dgb-wallet/psbt) -----------------------------
|
||||||
// sat/vB from the Electrum server, never below the 20 this wallet has
|
// 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
|
// 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() {
|
async _estimateRate() {
|
||||||
if (this._feeEst && Date.now() - this._feeEstAt < 60_000) return this._feeEst;
|
if (this._feeEst && Date.now() - this._feeEstAt < 60_000) return this._feeEst;
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue