UNPKG

@arklabs/wallet-sdk

Version:

Bitcoin wallet SDK with Taproot and Ark integration

127 lines (126 loc) 4.63 kB
import { TxTree } from "../tree/vtxoTree"; import { Outpoint, VirtualCoin } from "../wallet"; import { TreeNonces, TreePartialSigs } from "../tree/signingSession"; export interface ArkEvent { type: "vtxo_created" | "vtxo_spent" | "vtxo_swept" | "vtxo_expired"; data: { txid?: string; address?: string; amount?: number; roundTxid?: string; expireAt?: number; }; } export type NoteInput = string; export type VtxoInput = { outpoint: Outpoint; tapscripts: string[]; }; export type Input = NoteInput | VtxoInput; export type Output = { address: string; amount: bigint; }; export declare enum SettlementEventType { Finalization = "finalization", Finalized = "finalized", Failed = "failed", SigningStart = "signing_start", SigningNoncesGenerated = "signing_nonces_generated" } export type FinalizationEvent = { type: SettlementEventType.Finalization; id: string; roundTx: string; vtxoTree: TxTree; connectors: TxTree; minRelayFeeRate: bigint; connectorsIndex: Map<string, Outpoint>; }; export type FinalizedEvent = { type: SettlementEventType.Finalized; id: string; roundTxid: string; }; export type FailedEvent = { type: SettlementEventType.Failed; id: string; reason: string; }; export type SigningStartEvent = { type: SettlementEventType.SigningStart; id: string; cosignersPublicKeys: string[]; unsignedVtxoTree: TxTree; unsignedSettlementTx: string; }; export type SigningNoncesGeneratedEvent = { type: SettlementEventType.SigningNoncesGenerated; id: string; treeNonces: TreeNonces; }; export type SettlementEvent = FinalizationEvent | FinalizedEvent | FailedEvent | SigningStartEvent | SigningNoncesGeneratedEvent; export interface ArkInfo { pubkey: string; batchExpiry: bigint; unilateralExitDelay: bigint; roundInterval: bigint; network: string; dust: bigint; boardingDescriptorTemplate: string; vtxoDescriptorTemplates: string[]; forfeitAddress: string; marketHour?: { start: number; end: number; }; } export interface ArkProvider { getInfo(): Promise<ArkInfo>; getVirtualCoins(address: string): Promise<{ spendableVtxos: VirtualCoin[]; spentVtxos: VirtualCoin[]; }>; submitVirtualTx(psbtBase64: string): Promise<string>; subscribeToEvents(callback: (event: ArkEvent) => void): Promise<() => void>; registerInputsForNextRound(inputs: Input[]): Promise<{ requestId: string; }>; registerOutputsForNextRound(requestId: string, outputs: Output[], vtxoTreeSigningPublicKeys: string[], signAll?: boolean): Promise<void>; submitTreeNonces(settlementID: string, pubkey: string, nonces: TreeNonces): Promise<void>; submitTreeSignatures(settlementID: string, pubkey: string, signatures: TreePartialSigs): Promise<void>; submitSignedForfeitTxs(signedForfeitTxs: string[], signedRoundTx?: string): Promise<void>; ping(paymentID: string): Promise<void>; getEventStream(signal: AbortSignal): AsyncIterableIterator<SettlementEvent>; subscribeForAddress(address: string, abortSignal: AbortSignal): AsyncIterableIterator<{ newVtxos: VirtualCoin[]; spentVtxos: VirtualCoin[]; }>; } export declare class RestArkProvider implements ArkProvider { serverUrl: string; constructor(serverUrl: string); getInfo(): Promise<ArkInfo>; getVirtualCoins(address: string): Promise<{ spendableVtxos: VirtualCoin[]; spentVtxos: VirtualCoin[]; }>; submitVirtualTx(psbtBase64: string): Promise<string>; subscribeToEvents(callback: (event: ArkEvent) => void): Promise<() => void>; registerInputsForNextRound(inputs: Input[]): Promise<{ requestId: string; }>; registerOutputsForNextRound(requestId: string, outputs: Output[], cosignersPublicKeys: string[], signingAll?: boolean): Promise<void>; submitTreeNonces(settlementID: string, pubkey: string, nonces: TreeNonces): Promise<void>; submitTreeSignatures(settlementID: string, pubkey: string, signatures: TreePartialSigs): Promise<void>; submitSignedForfeitTxs(signedForfeitTxs: string[], signedRoundTx?: string): Promise<void>; ping(requestId: string): Promise<void>; getEventStream(signal: AbortSignal): AsyncIterableIterator<SettlementEvent>; subscribeForAddress(address: string, abortSignal: AbortSignal): AsyncIterableIterator<{ newVtxos: VirtualCoin[]; spentVtxos: VirtualCoin[]; }>; private toConnectorsIndex; private toTxTree; private parseSettlementEvent; }