@arklabs/wallet-sdk
Version:
Bitcoin wallet SDK with Taproot and Ark integration
127 lines (126 loc) • 4.63 kB
TypeScript
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;
}