@rosen-bridge/bitcoin-runes-utxo-selection
v2.0.1
Published
A Typescript package to select enough Bitcoin utxos for required amount of BTC and Runes
Downloads
1,104
Readme
@rosen-bridge/bitcoin-runes-utxo-selection
Table of contents
Introduction
A TypeScript package for selecting Bitcoin UTXOs to cover required amounts of BTC and Runes, built on top of the abstract box selection framework.
Installation
npm:
npm i @rosen-bridge/bitcoin-runes-utxo-selectionyarn:
yarn add @rosen-bridge/bitcoin-runes-utxo-selectionUsage
Here's a basic example of how to use this package:
import { DummyLogger } from '@rosen-bridge/abstract-logger';
import { BitcoinRunesBoxSelection } from '@rosen-bridge/bitcoin-runes-utxo-selection';
// Create the selection instance
const selector = new BitcoinRunesBoxSelection(new DummyLogger());
// Define required assets
const requiredAssets = {
nativeToken: 1000n, // 1000 satoshis
tokens: [
{ id: 'rune1', value: 100n },
{ id: 'rune2', value: 200n },
],
};
// Define UTXOs with Runes
const utxos: BitcoinRunesUtxo[] = [
{
txId: 'tx1',
index: 0,
value: 5000n, // 5000 satoshis
runes: [{ runeId: 'rune1', quantity: 100n }],
},
{
txId: 'tx2',
index: 0,
value: 3000n, // 3000 satoshis
runes: [{ runeId: 'rune2', quantity: 200n }],
},
];
// Get covering boxes
const result = await selector.getCoveringBoxes(
requiredAssets,
[], // forbidden box IDs
new Map(), // track map
utxos.values(),
);
if (result.covered) {
console.log('Selected UTXOs:', result.boxes);
console.log('Additional assets:', result.additionalAssets);
} else {
console.log('Could not cover requirements');
}You can also use custom min box value and limit number of Runes per change box by passing them as arguments to the getCoveringBoxes method.
const result = await selector.getCoveringBoxes(
requiredAssets,
[], // forbidden box IDs
new Map(), // track map
boxes.values(),
546n, // min box value
1, // max token count
);