diff --git a/src/bitcoinUtils/bitcoinHelpers.ts b/src/bitcoinUtils/bitcoinHelpers.ts index f88ce1a..5011c38 100644 --- a/src/bitcoinUtils/bitcoinHelpers.ts +++ b/src/bitcoinUtils/bitcoinHelpers.ts @@ -34,6 +34,14 @@ export function isSameUTXO(utxo1: UTXOBasic, utxo2: UTXOBasic): boolean { return utxo1.txId === utxo2.txId && utxo1.index === utxo2.index } +export type UTXOFilter = (utxo: U) => boolean +export function excludeUTXOs(excludingUTXOs: UTXOBasic[]): UTXOFilter { + return filteringUTXO => + !excludingUTXOs.some(excludingUTXO => + isSameUTXO(excludingUTXO, filteringUTXO), + ) +} + export function addressToScriptPubKey( network: BitcoinNetwork, address: string, diff --git a/src/xlinkSdkUtils/bridgeFromBitcoin.ts b/src/xlinkSdkUtils/bridgeFromBitcoin.ts index a4ca873..429c8d8 100644 --- a/src/xlinkSdkUtils/bridgeFromBitcoin.ts +++ b/src/xlinkSdkUtils/bridgeFromBitcoin.ts @@ -5,7 +5,7 @@ import { createRevealTx } from "../bitcoinUtils/apiHelpers/createRevealTx" import { UTXOSpendable, bitcoinToSatoshi, - isSameUTXO, + excludeUTXOs, sumUTXO, } from "../bitcoinUtils/bitcoinHelpers" import { @@ -624,8 +624,7 @@ export function reselectSpendableUTXOsFactory( return async (satsToSend, pinnedUTXOs, lastTimeSelectedUTXOs) => { satsToSend = satsToSend - sumUTXO(pinnedUTXOs) lastTimeSelectedUTXOs = lastTimeSelectedUTXOs.filter( - iterUTXO => - !pinnedUTXOs.find(pinnedUTXO => isSameUTXO(iterUTXO, pinnedUTXO)), + excludeUTXOs(pinnedUTXOs), ) const selected = await reselectSpendableUTXOs_public( satsToSend, diff --git a/src/xlinkSdkUtils/types.internal.ts b/src/xlinkSdkUtils/types.internal.ts index 888ed18..6dc751f 100644 --- a/src/xlinkSdkUtils/types.internal.ts +++ b/src/xlinkSdkUtils/types.internal.ts @@ -31,18 +31,18 @@ export interface SDKGlobalContext { ignoreValidateResult?: boolean } brc20: { + ignoreValidateResult?: boolean routesConfigCache?: SDKGlobalContextCache< KnownChainId.BRC20Chain, Promise > - ignoreValidateResult?: boolean } runes: { + ignoreValidateResult?: boolean routesConfigCache?: SDKGlobalContextCache< KnownChainId.RunesChain, Promise > - ignoreValidateResult?: boolean } evm: { enableMulticall?: boolean