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