LUD-03 规范定义了从闪电网络服务提款的流程,用户扫描包含特定 LNURL 的二维码发起提款请求。钱包与服务交互,通过 callback URL 和 k1 参数交换信息,最终服务支付 Lightning invoice 完成提款。服务可能需要授权以增强安全性。
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->>LN Service: 向 LNURL 发起 GET 请求
alt 成功
LN Service--)Wallet: 返回 JSON 响应
Note left of LN Service: {<br/>"callback": string, <br /> "k1": string, <br/> "minWithdrawable": number, <br/> "maxWithdrawable": number, <br/> ...<br/>}
Wallet->>Alice: 显示提现对话框
Alice->>Wallet: 指定确切的提现金额
Note over Wallet: 创建 BOLT-11 发票
Wallet->>LN Service: 向 callback URL 发起 GET 请求, 携带查询参数 k1 & pr=<BOLT-11 invoice>
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": string <br/> }
Wallet->>Alice: 通知提现失败
Note over Alice: 结束
end
else 失败
LN Service--)Wallet: 返回 JSON 响应
Note left of LN Service: {<br/>"status": "ERROR", <br /> "reason": string <br/> }
Wallet->>Alice: 通知提现失败
Note over Alice: 结束
end
LN WALLET
扫描 LNURL 二维码或访问 lightning:LNURL..
链接,LN WALLET
解码 LNURL。LN WALLET
使用解码后的 LNURL 向 LN SERVICE
发起 GET 请求。LN WALLET
从 LN SERVICE
获得 JSON 响应,格式如下:
{
"tag": "withdrawRequest", // LNURL 的类型
"callback": string, // LN SERVICE 接受提现闪电网络发票作为查询参数的 URL
"k1": string, // 用于在使用 callback URL 时标识用户 LN WALLET 的随机或非随机字符串
"defaultDescription": string, // 默认的提现发票描述
"minWithdrawable": number, // 用户可以从 LN SERVICE 提取的最小金额(以毫聪为单位),或 0
"maxWithdrawable": number, // 用户可以从 LN SERVICE 提取的最大金额(以毫聪为单位),如果用户对金额没有选择权,则等于 minWithdrawable
}
或
{"status": "ERROR", "reason": "错误详情..."}
LN WALLET
显示一个提现对话框,用户可以在其中指定一个确切的要提取的金额,该金额将受以下限制:
最大可接收 = min(maxWithdrawable, 对可以路由到钱包中的金额的本地估计)
最小可接收 = max(minWithdrawable, 钱包允许的本地最小值)
LN WALLET
以以下形式向 LN SERVICE
发送 GET 请求
<callback>
<?|&> // 根据回调中是否已存在查询字符串,使用 '?' 或 '&'
k1=<k1> // 上述响应中指定的 k1
&pr=<lightning invoice> // 钱包生成的支付请求
LN SERVICE
发送 {"status": "OK"}
或 {"status": "ERROR", "reason": "错误详情..."}
JSON 响应,然后尝试异步支付发票。LN WALLET
等待传入的付款。请注意,服务会将资金提取到任何可以提供有效的临时 k1
的人。为了加强这一点,服务可能需要在显示提现二维码之前要求授权(LNURL-auth,电子邮件链接等)。
- 原文链接: github.com/fiatjaf/lnurl...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!