LUD-03:`withdrawRequest` 基本规范

  • fiatjaf
  • 发布于 2022-04-03 13:51
  • 阅读 16

LUD-03 规范定义了从闪电网络服务提款的流程,用户扫描包含特定 LNURL 的二维码发起提款请求。钱包与服务交互,通过 callback URL 和 k1 参数交换信息,最终服务支付 Lightning invoice 完成提款。服务可能需要授权以增强安全性。

LUD-03: 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 
  1. 用户使用LN WALLET扫描 LNURL 二维码或访问 lightning:LNURL.. 链接,LN WALLET 解码 LNURL。
  2. LN WALLET 使用解码后的 LNURL 向 LN SERVICE 发起 GET 请求。
  3. LN WALLETLN 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": "错误详情..."}
  4. LN WALLET 显示一个提现对话框,用户可以在其中指定一个确切的要提取的金额,该金额将受以下限制:
    最大可接收 = min(maxWithdrawable, 对可以路由到钱包中的金额的本地估计)
    最小可接收 = max(minWithdrawable, 钱包允许的本地最小值)
  5. 一旦被用户接受,LN WALLET 以以下形式向 LN SERVICE 发送 GET 请求
    <callback>
      <?|&> // 根据回调中是否已存在查询字符串,使用 '?' 或 '&'
       k1=<k1> // 上述响应中指定的 k1
      &pr=<lightning invoice> // 钱包生成的支付请求
  6. LN SERVICE 发送 {"status": "OK"}{"status": "ERROR", "reason": "错误详情..."} JSON 响应,然后尝试异步支付发票。
  7. 如果响应成功,LN WALLET 等待传入的付款。

请注意,服务会将资金提取到任何可以提供有效的临时 k1 的人。为了加强这一点,服务可能需要在显示提现二维码之前要求授权(LNURL-auth,电子邮件链接等)。

  • 原文链接: github.com/fiatjaf/lnurl...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
fiatjaf
fiatjaf
江湖只有他的大名,没有他的介绍。