该文档描述了闪电网络 LNURL 的一种特定协议,即 LUD-03,用于实现从服务提供商处提取资金的功能。此协议允许用户通过扫描 QR 码或访问链接,从服务中提取 Lightning invoices,简化了提款流程。
withdrawRequest
基础规范.作者: akumaigorodski
图表: johnpaulkiser
现在,用户需要向服务提供一个用于提款的闪电网络发票。这需要一些努力,并且当用户尝试将资金提取到移动钱包中,同时使用桌面网站时,尤其令人痛苦。服务可以显示一个包含专门的 LNURL
的“提款”二维码,而不是要求闪电网络发票。
sequenceDiagram
actor Alice
participant Wallet
participant LN Service
Alice->>LN Service: 发起 LNURL withdrawRequest
Note over LN Service: 显示 <br/>编码后的 LNURL
Wallet->>LN Service: 扫描二维码或复制编码后的 LNURL
Note over Wallet: 解码 LNURL
Wallet->>Wallet: 对 LNURL 发起 GET 请求
alt 成功
LN Service--)Wallet: 返回 JSON 响应
Note left of LN Service: {<br/>"callback": 字符串, <br /> "k1": 字符串, <br/> "minWithdrawable": 数字, <br/> "maxWithdrawable": 数字, <br/> ...<br/>}
Wallet->>Alice: 显示提款对话框
Alice->>Wallet: 指定确切的提款金额
Note over Wallet: 创建 BOLT-11 发票
Wallet->>LN Service: 对回调 URL 发起 GET 请求,带查询参数 k1 & pr=<BOLT-11 发票>
alt 成功
LN Service--)Wallet: 返回 JSON 响应
Note left of LN Service: {"status": "OK"}
Wallet--)Wallet: 等待付款
Wallet->>Alice: 通知提款成功
Note over Alice: 结束
else 失败
LN Service--)Wallet: 返回 JSON 响应
Note left of LN Service: {<br/>"status": "ERROR", <br /> "reason": 字符串 <br/> }
Wallet->>Alice: 通知提款失败
Note over Alice: 结束
end
else 失败
LN Service--)Wallet: 返回 JSON 响应
Note left of LN Service: {<br/>"status": "ERROR", <br /> "reason": 字符串 <br/> }
Wallet->>Alice: 通知提款失败
Note over Alice: 结束
end
LN 钱包
扫描 LNURL 二维码或访问 lightning:LNURL..
链接,并且 LN 钱包
解码 LNURL。LN 钱包
使用解码后的 LNURL 对 LN 服务
发起 GET 请求。LN 钱包
从 LN 服务
获得 JSON 响应,格式如下:
{
"tag": "withdrawRequest", // LNURL 的类型
"callback": string, // LN 服务将接受提款闪电网络发票作为查询参数的 URL
"k1": string, // 在使用回调 URL 时,用于标识用户 LN 钱包的随机或非随机字符串
"defaultDescription": string, // 默认的提款发票描述
"minWithdrawable": number, // 用户可以从 LN 服务提取的最小金额(以毫聪为单位),或 0
"maxWithdrawable": number, // 用户可以从 LN 服务提取的最大金额(以毫聪为单位),如果用户对金额没有选择权,则等于 minWithdrawable
}
或
{"status": "ERROR", "reason": "错误详情..."}
LN 钱包
显示提款对话框,用户可以在其中指定要提取的确切金额,该金额将受以下因素限制:
最大可接收金额 = min(maxWithdrawable, 本地估计可以路由到钱包的金额)
最小可接收金额 = max(minWithdrawable, 钱包允许的本地最小值)
LN 钱包
以以下形式向 LN 服务
发送 GET 请求
<callback>
<?|&> // 取决于回调中是否已经存在查询字符串,使用 '?' 或 '&'
k1=<k1> // 上述响应中指定的 k1
&pr=<闪电网络发票> // 钱包生成的支付请求
LN 服务
发送 {"status": "OK"}
或 {"status": "ERROR", "reason": "错误详情..."}
JSON 响应,然后尝试异步支付发票。LN 钱包
等待传入的付款。请注意,服务会将资金提取到任何可以提供有效的临时 k1
的人。为了加强这一点,服务可能需要在显示提款二维码之前要求授权(LNURL-auth,电子邮件链接等)。
- 原文链接: github.com/lnurl/luds/bl...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!