From dded017126d5d37b4c1a7f6b90d790ae9faf53da Mon Sep 17 00:00:00 2001 From: Nodari Chkuaselidze Date: Wed, 21 May 2025 13:15:57 +0400 Subject: [PATCH] wallet-coinselector: skip non-existent coins. --- lib/wallet/layout.js | 4 ++-- lib/wallet/wallet.js | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/wallet/layout.js b/lib/wallet/layout.js index 6341b1dc..5fc921b7 100644 --- a/lib/wallet/layout.js +++ b/lib/wallet/layout.js @@ -120,8 +120,8 @@ exports.wdb = { * * Coin Selection * -------------- - * Sc[value][tx-hash][index] -> dummy (Confirmed coins by value) - * SC[account][value][tx-hash][index] -> dummy + * Sv[value][tx-hash][index] -> dummy (Confirmed coins by value) + * Sv[account][value][tx-hash][index] -> dummy * (Confirmed coins by account + value) * * Su[value][tx-hash][index] -> dummy (Unconfirmed coins by value) diff --git a/lib/wallet/wallet.js b/lib/wallet/wallet.js index 8bc0f2ef..fee4712e 100644 --- a/lib/wallet/wallet.js +++ b/lib/wallet/wallet.js @@ -13,7 +13,8 @@ const base58 = require('bcrypto/lib/encoding/base58'); const bio = require('bufio'); const blake2b = require('bcrypto/lib/blake2b'); const cleanse = require('bcrypto/lib/cleanse'); -const {BufferSet} = require('buffer-map'); +const bufmap = require('buffer-map'); +const BufferSet = bufmap.BufferSet; const TXDB = require('./txdb'); const Path = require('./path'); const common = require('./common'); @@ -48,7 +49,6 @@ const { /** @typedef {import('bdb').DB} DB */ /** @typedef {ReturnType} Batch */ -/** @typedef {import('buffer-map').BufferMap} BufferMap */ /** @typedef {import('../types').Base58String} Base58String */ /** @typedef {import('../types').Hash} Hash */ /** @typedef {import('../types').Amount} Amount */ @@ -1278,7 +1278,7 @@ class Wallet extends EventEmitter { */ async select(mtx, options) { - const selection = options.selection || 'dbvalue'; + const selection = options.selection || 'value'; switch (selection) { case 'all': @@ -5754,7 +5754,7 @@ class WalletCoinSource extends AbstractCoinSource { /** * Resolve coins. - * @param {BufferMap} inputs + * @param {bufmap.BufferMap} inputs * @param {Coin[]} coins - Coin per input. * @returns {Promise} */ @@ -5778,6 +5778,10 @@ class WalletCoinSource extends AbstractCoinSource { } const coin = await this.txdb.getCoin(outpoint.hash, outpoint.index); + + if (!coin) + continue; + coins[idx] = coin; inputs.delete(key); }