UNPKG

@arklabs/wallet-sdk

Version:

Bitcoin wallet SDK with Taproot and Ark integration

95 lines (94 loc) 3.6 kB
import { Bytes } from "@scure/btc-signer/utils"; export type RelativeTimelock = { value: bigint; type: "seconds" | "blocks"; }; export declare enum TapscriptType { Multisig = "multisig", CSVMultisig = "csv-multisig", ConditionCSVMultisig = "condition-csv-multisig", ConditionMultisig = "condition-multisig", CLTVMultisig = "cltv-multisig" } export interface ArkTapscript<T extends TapscriptType, Params, SizeArgs = never> { type: T; params: Params; script: Uint8Array; witnessSize(args: SizeArgs): number; } export declare function decodeTapscript(script: Uint8Array): ArkTapscript<TapscriptType, any, any | undefined>; /** * Implements a multi-signature script that requires a threshold of signatures * from the specified pubkeys. */ export declare namespace MultisigTapscript { type Type = ArkTapscript<TapscriptType.Multisig, Params>; enum MultisigType { CHECKSIG = 0, CHECKSIGADD = 1 } type Params = { pubkeys: Bytes[]; type?: MultisigType; }; function encode(params: Params): Type; function decode(script: Uint8Array): Type; function is(tapscript: ArkTapscript<any, any>): tapscript is Type; } /** * Implements a relative timelock script that requires all specified pubkeys to sign * after the relative timelock has expired. The timelock can be specified in blocks or seconds. * * This is the standard exit closure and it is also used for the sweep closure in vtxo trees. */ export declare namespace CSVMultisigTapscript { type Type = ArkTapscript<TapscriptType.CSVMultisig, Params>; type Params = { timelock: RelativeTimelock; } & MultisigTapscript.Params; function encode(params: Params): Type; function decode(script: Uint8Array): Type; function is(tapscript: ArkTapscript<any, any>): tapscript is Type; } /** * Combines a condition script with an exit closure. The resulting script requires * the condition to be met, followed by the standard exit closure requirements * (timelock and signatures). */ export declare namespace ConditionCSVMultisigTapscript { type Type = ArkTapscript<TapscriptType.ConditionCSVMultisig, Params>; type Params = { conditionScript: Bytes; } & CSVMultisigTapscript.Params; function encode(params: Params): Type; function decode(script: Uint8Array): Type; function is(tapscript: ArkTapscript<any, any>): tapscript is Type; } /** * Combines a condition script with a forfeit closure. The resulting script requires * the condition to be met, followed by the standard forfeit closure requirements * (multi-signature). */ export declare namespace ConditionMultisigTapscript { type Type = ArkTapscript<TapscriptType.ConditionMultisig, Params>; type Params = { conditionScript: Bytes; } & MultisigTapscript.Params; function encode(params: Params): Type; function decode(script: Uint8Array): Type; function is(tapscript: ArkTapscript<any, any>): tapscript is Type; } /** * Implements an absolute timelock (CLTV) script combined with a forfeit closure. * The script requires waiting until a specific block height/timestamp before the * forfeit closure conditions can be met. */ export declare namespace CLTVMultisigTapscript { type Type = ArkTapscript<TapscriptType.CLTVMultisig, Params>; type Params = { absoluteTimelock: bigint; } & MultisigTapscript.Params; function encode(params: Params): Type; function decode(script: Uint8Array): Type; function is(tapscript: ArkTapscript<any, any>): tapscript is Type; }