SparkWallet
SparkWallet
类是与 Spark 网络交互的主要接口。它提供了创建和管理钱包、处理存款、执行转账以及与闪电网络交互的方法。
yarn add @buildonspark/spark-sdk
或 npm
npm i @buildonspark/spark-sdk
initialize({ mnemonicOrSeed, signer, options }: SparkWalletProps)
创建并初始化一个新的 SparkWallet 实例。
interface SparkWalletProps {
mnemonicOrSeed?: Uint8Array | string;
signer?: SparkSigner;
options?: ConfigOptions;
}
static async initialize(props: SparkWalletProps): Promise<{
wallet: SparkWallet;
mnemonic?: string;
}>
参数:
props
: 包含:
mnemonicOrSeed
: (可选) BIP-39 助记词短语或原始种子
signer
: (可选) 自定义签名者实现
options
: (可选) 钱包配置选项
返回值:
- 包含:
wallet
: 初始化的 SparkWallet 实例
mnemonic
: 如果生成了助记词,则为助记词(对于原始种子为未定义)
getIdentityPublicKey()
获取钱包的身份公钥。
async getIdentityPublicKey(): Promise<string>
返回值:
Promise<string>
: 十六进制字符串形式的身份公钥
getSparkAddress()
获取钱包的 Spark 地址。
async getSparkAddress(): Promise<SparkAddressFormat>
返回值:
Promise<SparkAddressFormat>
: Spark 地址
getTransfers(limit?: number, offset?: number)
获取钱包的所有转账。
async getTransfers(
limit: number = 20,
offset: number = 0
): Promise<{
transfers: WalletTransfer[];
offset: number;
}>
参数:
limit
: (可选,默认: 20) 返回的最大转账数量
offset
: (可选,默认: 0) 分页的偏移量
返回值:
Promise<{ transfers: WalletTransfer[]; offset: number; }>
: 包含转账列表和偏移量的响应
getBalance()
获取钱包的当前余额。您可以使用 forceRefetch 选项来同步您的钱包,并在返回余额之前认领任何待处理的传入闪电支付、Spark 转账或比特币存款。
async getBalance(): Promise<{
balance: bigint;
tokenBalances: Map<string, { balance: bigint }>;
}>
返回值:
- 包含:
balance
: 钱包当前的余额(以聪为单位)
tokenBalances
: 代币公钥到代币余额的映射
getSingleUseDepositAddress()
生成一个新的一次性存款地址,用于接收比特币资金。请注意,此函数返回一个比特币地址,而不是 Spark 地址。一旦使用,此地址不应再次使用。
对于第 1 层比特币存款,Spark 生成支付到 Taproot (P2TR) 地址。这些地址以 “bc1p” 开头,可用于从任何钱包接收比特币。
async getSingleUseDepositAddress(): Promise<string>
返回值:
Promise<string>
: 用于存入资金的比特币地址
getUnusedDepositAddresses()
获取钱包的所有未使用存款地址。
async getUnusedDepositAddresses(): Promise<string[]>
返回值:
Promise<string[]>
: 未使用存款地址的数组
transfer(params)
将比特币转账给另一个 Spark 钱包。
async transfer({
receiverSparkAddress,
amountSats,
}: {
receiverSparkAddress: string;
amountSats: number;
}): Promise<WalletTransfer>
参数:
params
: 包含:
receiverSparkAddress
: 接收者的 Spark 地址
amountSats
: 要转账的金额(以聪为单位)
返回值:
Promise<WalletTransfer>
: 完成的转账详情
payLightningInvoice(params: PayLightningInvoiceParams)
支付闪电网络发票。
interface PayLightningInvoiceParams {
invoice: string;
maxFeeSats: number;
}
async payLightningInvoice(params: PayLightningInvoiceParams): Promise<LightningSendRequest>
参数:
params
: 包含:
invoice
: 要支付的 BOLT11 编码的闪电网络发票。
maxFeeSats
: 支付发票的最大费用(以聪为单位)。
返回值:
Promise<LightningSendRequest>
: 闪电网络支付请求详情
transferTokens(params)
将代币转账给另一个用户。
async transferTokens({
tokenPublicKey,
tokenAmount,
receiverSparkAddress,
selectedOutputs,
}: {
tokenPublicKey: string;
tokenAmount: bigint;
receiverSparkAddress: string;
selectedOutputs?: OutputWithPreviousTransactionData[];
}): Promise<string>
参数:
params
: 包含:
tokenPublicKey
: 要转账的代币的公钥
tokenAmount
: 要转账的代币数量
receiverSparkAddress
: 接收者的 Spark 地址
selectedOutputs
: (可选) 用于转账的特定输出
返回值:
Promise<string>
: 代币转账的交易 ID
getTokenInfo()
获取钱包拥有的代币信息。
async getTokenInfo(): Promise<TokenInfo[]>
返回值:
Promise<TokenInfo[]>
: 代币信息对象的数组
queryTokenTransactions(tokenPublicKeys: string[], tokenTransactionHashes?: string[])
检索钱包拥有的指定代币的交易历史记录。可以选择按特定交易哈希进行过滤。
async queryTokenTransactions(
tokenPublicKeys: string[],
tokenTransactionHashes?: string[]
): Promise<TokenTransactionWithStatus[]>
参数:
tokenPublicKeys
: 要查询的代币公钥数组
tokenTransactionHashes
: (可选) 用于过滤的代币交易哈希数组
返回值:
Promise<TokenTransactionWithStatus[]>
: 带状态的代币交易数组
getTokenL1Address()
获取用于代币操作的第 1 层比特币地址。
async getTokenL1Address(): Promise<string>
返回值:
Promise<string>
: 第 1 层比特币地址
createLightningInvoice(params)
创建用于接收支付的闪电网络发票。
interface CreateLightningInvoiceParams {
amountSats: number;
memo?: string;
expirySeconds?: number;
}
async createLightningInvoice(params: CreateLightningInvoiceParams): Promise<LightningReceiveRequest>
参数:
params
: 包含:
amountSats
: 金额(以聪为单位)
memo
: (可选) 发票的描述
expirySeconds
: (可选) 过期时间(以秒为单位),默认为 30 天
返回值:
Promise<LightningReceiveRequest>
: 闪电网络接收请求详情
示例:
const invoice = await wallet.createLightningInvoice({
amountSats: 100,
memo: "test invoice",
});
console.log("Invoice:", invoice);
getLightningReceiveRequest(id: string)
获取闪电网络接收请求(发票)的状态。
async getLightningReceiveRequest(id: string): Promise<LightningReceiveRequest | null>
参数:
返回值:
Promise<LightningReceiveRequest | null>
: 闪电网络接收请求详情,如果未找到则返回 null。
getLightningSendRequest(id: string)
获取闪电网络发送请求的状态。
async getLightningSendRequest(id: string): Promise<LightningSendRequest | null>
参数:
返回值:
Promise<LightningSendRequest | null>
: 闪电网络发送请求详情,如果未找到则返回 null。
getLightningSendFeeEstimate(params)
估算发送闪电网络支付的费用。
interface LightningSendFeeEstimateInput {
encodedInvoice: string;
}
async getLightningSendFeeEstimate(params: LightningSendFeeEstimateInput): Promise<number>
参数:
params
: 包含:
encodedInvoice
: BOLT11 编码的闪电网络发票。
返回值:
Promise<number>
: 估算的费用(以聪为单位)。
withdraw(params)
发起提款,将资金从 Spark 网络转移到链上比特币地址。
interface WithdrawParams {
onchainAddress: string;
exitSpeed: ExitSpeed;
amountSats?: number;
}
async withdraw(params: WithdrawParams): Promise<CoopExitRequest | null | undefined>
参数:
params
: 包含以下属性的对象:
onchainAddress
: (必需) 资金应发送到的比特币地址。
exitSpeed
: (必需) 退出的期望速度(FAST, MEDIUM, SLOW)。
amountSats
: (可选) 要提取的金额(以聪为单位)。如果未指定,尝试提取所有可用资金。
返回值:
Promise<CoopExitRequest | null | undefined>
: 提款请求详情,如果请求无法完成则返回 null/undefined。
示例:
const withdraw_result = await wallet.withdraw({
onchainAddress: "bcrt1pf8hed85p94emupfpfhq2g0p5c40cgzqs4agvvfmeuy32nxeh549syu2lwf",
amountSats: 17000,
exitSpeed: ExitSpeed.MEDIUM // 或 ExitSpeed.FAST, ExitSpeed.SLOW
});
console.log("Withdraw Result:", withdraw_result);
getWithdrawalFeeEstimate(params)
获取合作退出(链上提款)的费用估算。
async getWithdrawalFeeEstimate({
amountSats,
withdrawalAddress,
}: {
amountSats: number;
withdrawalAddress: string;
}): Promise<CoopExitFeeEstimatesOutput | null>
参数:
params
: 包含:
amountSats
: 要提取的金额(以聪为单位)。
withdrawalAddress
: 资金应发送到的比特币地址。
返回值:
Promise<CoopExitFeeEstimatesOutput | null>
: 提款的费用估算,如果不可用则返回 null。
getCoopExitRequest(id: string)
通过 ID 获取合作退出请求。
async getCoopExitRequest(id: string): Promise<CoopExitRequest | null>
参数:
返回值:
Promise<CoopExitRequest | null>
: 合作退出请求详情,如果未找到则返回 null。
claimDeposit(txId: string)
认领对一次性存款地址进行的比特币存款。
async claimDeposit(txId: string): Promise<DepositClaimResult>
参数:
返回值:
Promise<DepositClaimResult>
: 存款认领的结果。
isValidSparkAddress(address: string)
检查一个地址是否是有效的 Spark 地址。
static isValidSparkAddress(address: string): boolean
参数:
返回值:
boolean
: 如果地址是有效的 Spark 地址则为 true,否则为 false。
SparkWallet 类发出多种事件,允许您监听和响应各种钱包状态变化。
余额更新
wallet.on("balance:update", (balance: number, tokenBalances: Map<string, { balance: bigint }>) => {
console.log(`Balance updated: ${balance}`);
});
存款认领
wallet.on("deposit:claimed", (txId: string, balance: number) => {
console.log(`Deposit ${txId} claimed. New balance: ${balance}`);
});
闪电网络支付已支付
wallet.on("lightning:paid", (invoiceId: string, status: LightningSendStatus) => {
console.log(`Lightning payment ${invoiceId} status: ${status}`);
});
闪电网络支付已收到
wallet.on("lightning:received", (invoiceId: string, status: LightningReceiveStatus, amountSats: number) => {
console.log(`Lightning payment received for invoice ${invoiceId}. Amount: ${amountSats}`);
});
合作退出状态变更
wallet.on("coopExit:statusChange", (exitId: string, status: CoopExitStatus) => {
console.log(`Cooperative exit ${exitId} status changed to ${status}`);
});
转账已认领
wallet.on("transfer:claimed", (transferId: string, balance: number) => {
console.log(`Transfer ${transferId} claimed. New balance: ${balance}`);
});
常量和枚举
Network
enum Network {
MAINNET = "MAINNET",
TESTNET = "TESTNET",
REGTEST = "REGTEST",
SIGNET = "SIGNET",
LOCAL = "LOCAL",
}
ExitSpeed
enum ExitSpeed {
SLOW = "SLOW",
MEDIUM = "MEDIUM",
FAST = "FAST",
}
LightningSendStatus
enum LightningSendStatus {
CREATED = "CREATED",
PENDING = "PENDING",
SUCCESSFUL = "SUCCESSFUL",
FAILED = "FAILED",
}
LightningReceiveStatus
enum LightningReceiveStatus {
OPEN = "OPEN",
PENDING = "PENDING",
SETTLED = "SETTLED",
CANCELED = "CANCELED",
EXPIRED = "EXPIRED",
}
CoopExitStatus
enum CoopExitStatus {
PENDING = "PENDING",
BROADCASTED = "BROADCASTED",
CONFIRMED = "CONFIRMED",
FAILED = "FAILED",
CANCELED = "CANCELED",
}
TransferStatus
enum TransferStatus {
PENDING = "PENDING",
RECEIVED = "RECEIVED",
COMPLETE = "COMPLETE",
FAILED = "FAILED",
}
接口和类型
ConfigOptions
interface ConfigOptions {
network?: Network;
apiUrl?: string;
apiKey?: string;
mempoolApiUrl?: string;
logLevel?: "debug" | "info" | "warn" | "error";
}
WalletTransfer
interface WalletTransfer {
id: string;
sender: string;
receiver: string;
status: TransferStatus;
totalValue: number;
expiryTime: Date | undefined;
createdTime: Date | undefined;
updatedTime: Date | undefined;
type: TransferType;
}
LightningReceiveRequest
interface LightningReceiveRequest {
id: string;
invoice: string;
amountSats: number;
status: LightningReceiveStatus;
description?: string;
expiresAt: Date;
paymentHash: string;
preimage?: string;
receivedAt?: Date;
}
LightningSendRequest
interface LightningSendRequest {
id: string;
invoice: string;
amountSats: number;
status: LightningSendStatus;
maxFeeSats: number;
paymentHash: string;
paidAt?: Date;
preimage?: string;
error?: string;
}
CoopExitRequest
interface CoopExitRequest {
id: string;
destinationAddress: string;
amountSats: number;
fee: number;
status: CoopExitStatus;
txId?: string;
createdAt: Date;
updatedAt?: Date;
exitSpeed: ExitSpeed;
}
DepositClaimResult
interface DepositClaimResult {
success: boolean;
claimedAmountSats: number;
}
TokenInfo
interface TokenInfo {
tokenId: string;
tokenPublicKey: string;
name: string;
ticker: string;
decimalPlaces: number;
balance: bigint;
description?: string;
iconUrl?: string;
issuerId?: string;
issuerName?: string;
totalSupply?: bigint;
maxSupply?: bigint;
}