理解闪电网络发票

Spark 服务提供商实现了无信任的闪电网络互操作性。要发送和接收闪电网络支付,您可以生成和支付闪电网络发票。闪电网络发票(也称为支付请求)是一个特殊格式的字符串,包含进行闪电网络支付所需的所有信息:

  • 金额:发送多少聪(零金额发票可以省略)
  • 目的地:接收者的节点公钥
  • 支付哈希:支付的唯一标识符
  • 描述:描述支付的可选备忘录
  • 有效期:发票有效期(默认 24 小时)

闪电网络发票以 “ln” 开头,后跟网络标识符(主网为 bc),通常看起来像这样: lnbc1...

主网发票示例: lnbcrt2500n1pj0ytfcpp5qqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqdx40shp5jqp3qymd6qgpy99ppk0jqjzylqg5t7fhqhpl6s4kxmqgmrn59w5k0z0cqqqqqqzqqqqq9qsqqqqqq9qqqqqqgq9qsqxl9l55y5cwa9s2h8nvdh4h7h43tcwjdcysf7v0fprz5uh6vshs4n0tvhgzz2xgcqpg8yqv7

接收闪电网络支付

要接收支付,生成闪电网络发票,然后与发送者共享。

// Generate invoice with amount
const invoice = await wallet.createLightningInvoice({
  amountSats: 100, // amount in satoshis
  memo: "test invoice", // optional description
});
console.log("Invoice:", invoice);
Spark 目前不支持零金额发票。但支持即将推出!

获取支付状态

要检查闪电网络支付的状态,您可以使用 getLightningReceiveRequest

const lightningPaymentStatus = await wallet.getLightningReceiveRequest(
    invoice.id,
  );
  console.log("Lightning Payment Status:", lightningPaymentStatus);

发送闪电网络支付

要发送支付,您需要接收者的闪电网络发票和要支付的最大费用金额。我们建议将最大路由费设置为 5 聪或 17 bps * 交易金额中的较大者。

const payment_response = await wallet.payLightningInvoice({
  invoice:
    "lnbcrt1u1pnm7ammpp4v84f05tl0kzt6g95g056athdpp8f8azvg6d7epz74z562ymer9jqsp5nc50gazvp0e98u42jlu653rw0eutcl067nqq924hf89q4la4kd9sxq9z0rgqnp4qdnmwu8v22cvq9xsv2l05cn9rre7xlcgdtntxawf8m0zxq3qemgzqrzjqtr2vd60g57hu63rdqk87u3clac6jlfhej4kldrrjvfcw3mphcw8sqqqqrj0q7ew45qqqqqqqqqqqqqq9qcqzpgdq5w3jhxapqd9h8vmmfvdjs9qyyssqj7lf2w4m587g04n4t0ferdv0vnwftzca0xuc9yxycng78cnhrvmyw2mzaa8t76jskpypqnwqhp9xh0vnwxz90jytd34vrmhcngsnl8qplz7ylk",
  maxFeeSats: 5,
});
console.log("Payment Response:", payment_response);

检查余额

发送或接收支付后,您可以使用 getBalance() 检查钱包余额。

getBalance() 方法返回一个 Promise,解析为包含以下内容的对象:

  • balance:表示总金额(以聪为单位)的 bigint
  • tokenBalances:代币余额的 Map,其中每个条目包含:
    • balance:表示代币数量的 bigint
    • tokenInfo:关于钱包持有的特定代币的信息

此外,您可以监听余额更新事件。

wallet.on("transfer:claimed", (transferId: string, balance: number) => {
  console.log(
    `Transfer ${transferId} claimed. New balance: ${balance}`,
  );

最佳实践

  • 支付前始终验证发票金额
    • 为了分析发票数据,您可以使用 bolt11 库
  • 跟踪发票 ID,以将余额变化与创建的发票匹配
  • 如有必要,为发票设置适当的有效期
  • 监控支付状态以确认

下一步

现在您可以发送和接收闪电网络支付,您可能想要:

需要帮助?