@atomiqlabs/sdk
Version:
atomiq labs SDK for cross-chain swaps between smart chains and bitcoin
93 lines (84 loc) • 3.75 kB
text/typescript
import {IBitcoinWallet} from "../bitcoin/wallet/IBitcoinWallet";
import {Transaction} from "@scure/btc-signer";
import {
MinimalBitcoinWalletInterface,
MinimalBitcoinWalletInterfaceWithSigner
} from "../types/wallets/MinimalBitcoinWalletInterface";
import {TokenAmount} from "../types/TokenAmount";
import {BtcToken} from "../types/Token";
/**
* Type guard to check if an object is an {@link IBTCWalletSwap}
*
* @category Swaps/Types
*/
export function isIBTCWalletSwap(obj: any): obj is IBTCWalletSwap {
return obj!=null &&
typeof(obj.getFundedPsbt) === "function" &&
typeof(obj.submitPsbt) === "function" &&
typeof(obj.estimateBitcoinFee) === "function" &&
typeof(obj.sendBitcoinTransaction) === "function" &&
typeof(obj.waitForBitcoinTransaction) === "function" &&
typeof(obj.getRequiredConfirmationsCount) === "function";
}
/**
* Interface for swaps requiring Bitcoin wallet interaction
*
* @category Swaps/Types
*/
export interface IBTCWalletSwap {
/**
* Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
* also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
* {@link submitPsbt}
*
* @param _bitcoinWallet Sender's bitcoin wallet
* @param feeRate Optional fee rate in sats/vB for the transaction
* @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
*/
getFundedPsbt(
_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface,
feeRate?: number,
additionalOutputs?: ({amount: bigint, outputScript: Uint8Array} | {amount: bigint, address: string})[]
): Promise<{psbt: Transaction, psbtHex: string, psbtBase64: string, signInputs: number[]}>;
/**
* Submits a PSBT signed by the wallet back to the SDK
*
* @param psbt A PSBT, either a Transaction object or a hex or base64 encoded PSBT string
*/
submitPsbt(psbt: Transaction | string): Promise<string>;
/**
* Estimates a bitcoin on-chain fee paid for the bitcoin swap transaction
*
* @param wallet Sender's bitcoin wallet
* @param feeRate Optional fee rate in sats/vB for the transaction
*/
estimateBitcoinFee(wallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<BtcToken<false>> | null>;
/**
* Sends a swap bitcoin transaction via the passed bitcoin wallet
*
* @param wallet Sender's bitcoin wallet
* @param feeRate Optional fee rate in sats/vB for the transaction
*/
sendBitcoinTransaction(
wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner,
feeRate?: number
): Promise<string>;
/**
* Waits till the bitcoin transaction gets the required number of confirmations
*
* @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
* @param checkIntervalSeconds How often to check the bitcoin transaction
* @param abortSignal Abort signal
* @throws {Error} if in invalid state
*/
waitForBitcoinTransaction(
updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void,
checkIntervalSeconds?: number,
abortSignal?: AbortSignal,
): Promise<string>;
/**
* Returns the number of confirmations required for the bitcoin transaction for this swap
* to complete and settle
*/
getRequiredConfirmationsCount(): number;
}