@atomiqlabs/sdk
Version:
atomiq labs SDK for cross-chain swaps between smart chains and bitcoin
117 lines (116 loc) • 4.64 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
import { Transaction } from "@scure/btc-signer";
import { CoinselectAddressTypes } from "../coinselect2";
/**
* UTXO data structure for Bitcoin wallets
*
* @category Bitcoin
*/
export type BitcoinWalletUtxo = {
vout: number;
txId: string;
value: number;
type: CoinselectAddressTypes;
outputScript: Buffer;
address: string;
cpfp?: {
txVsize: number;
txEffectiveFeeRate: number;
};
confirmed: boolean;
};
/**
* Base UTXO data structure used for maximum spendable balance calculation, doesn't contain all the fields necessary
* for constructing the full transaction.
*
* @category Bitcoin
*/
export type BitcoinWalletUtxoBase = Omit<BitcoinWalletUtxo, "txId" | "vout" | "outputScript" | "address" | "confirmed">;
/**
* Type guard to check if an object implements {@link IBitcoinWallet}
*
* @category Bitcoin
*/
export declare function isIBitcoinWallet(val: any): val is IBitcoinWallet;
/**
* Interface to be implemented by Bitcoin wallets
*
* @category Bitcoin
*/
export interface IBitcoinWallet {
/**
* Signs and broadcasts a transaction sending `amount` of sats to `address`, optionally with the
* `feeRate` sats/vB fee rate.
*
* @param address Destination address of the transaction
* @param amount Amount of satoshis to send (1 BTC = 100,000,000 sats)
* @param feeRate Optional fee rate in sats/vB to use for the transaction
*/
sendTransaction(address: string, amount: bigint, feeRate?: number): Promise<string>;
/**
* Funds (populates the inputs) for a given PSBT from wallet's UTXO set
*
* @param psbt PSBT to add the inputs to
* @param feeRate Optional fee rate in sats/vB to use for the transaction
* @param utxos Pre-fetched list of UTXOs to spend from
* @param spendFully Instructs the wallet to spend all the passed UTXOs in the transaction without creating any
* change output, if the `feeRate` is passed, it will also enforce that the feeRate in sats/vB for the resulting
* transaction is not more than 50% and 10 sats/vB larger (considering also the CPFP adjustments)
*/
fundPsbt(psbt: Transaction, feeRate?: number, utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<Transaction>;
/**
* Signs inputs in the provided PSBT
*
* @param psbt A PSBT to sign
* @param signInputs Indices of the inputs to sign
*/
signPsbt(psbt: Transaction, signInputs: number[]): Promise<Transaction>;
/**
* Returns the current fee rate in sats/vB
*/
getFeeRate(): Promise<number>;
/**
* Estimates a total fee in satoshis for a given transaction
*
* @param address Destination address of the transaction
* @param amount Amount of satoshis to send (1 BTC = 100,000,000 sats)
* @param feeRate Optional fee rate in sats/vB to use for the transaction
*/
getTransactionFee(address: string, amount: bigint, feeRate?: number): Promise<number>;
/**
* Estimates a total fee in satoshis for a given transaction as identified by the PSBT
*
* @param psbt A PSBT to which additional inputs from wallet's UTXO set will be added and fee estimated
* @param feeRate Optional fee rate in sats/vB to use for the transaction
*/
getFundedPsbtFee(psbt: Transaction, feeRate?: number): Promise<number>;
/**
* Returns the bitcoin address suitable for receiving funds
*/
getReceiveAddress(): string;
/**
* Returns confirmed and unconfirmed balance in satoshis of the wallet
*/
getBalance(): Promise<{
confirmedBalance: bigint;
unconfirmedBalance: bigint;
}>;
/**
* Returns the maximum spendable balance in satoshis given a specific PSBT that should be funded
*
* @param psbt A PSBT to which additional inputs from wallet's UTXO set will be added and fee estimated
* @param feeRate Optional fee rate in sats/vB to use for the transaction
* @param outputAddressType Expected output address type, if known
* @param utxos Optional pre-fetched UTXOs
*/
getSpendableBalance(psbt?: Transaction, feeRate?: number, outputAddressType?: CoinselectAddressTypes, utxos?: BitcoinWalletUtxoBase[]): Promise<{
balance: bigint;
feeRate: number;
totalFee: number;
}>;
/**
* Returns a list of available UTXOs for the wallet
*/
getUtxoPool?(): Promise<BitcoinWalletUtxo[]>;
}