跳至主要內容
高級

BOLT12 Recurrence 週期性支付

了解 BOLT12 Offers 的週期性支付功能,實現訂閱和定期付款。

10 分鐘

什麼是週期性支付?

BOLT12 的週期性支付功能允許創建訂閱式的 Offer。 付款人可以定期(如每月)向同一個 Offer 支付,無需每次獲取新發票。

用戶控制: 與傳統自動扣款不同,閃電訂閱需要付款人主動發起每次支付。

Offer 結構

週期性 Offer 欄位:

recurrence 欄位:
recurrence: {
  time_unit: <unit>,      // 時間單位
  period: <number>,       // 週期數
  basetime: <timestamp>,  // 可選:第一個週期開始時間
  limit: <number>,        // 可選:最大支付次數
  paywindow: {            // 可選:支付窗口
    seconds_before: <n>,
    seconds_after: <n>,
    proportional_amount: <bool>
  }
}

時間單位:
• 0: 秒(seconds)
• 1: 天(days)
• 2: 週(weeks)
• 3: 月(months)
• 4: 年(years)

使用範例

月度訂閱範例:

Offer 創建:
{
  description: "Premium Membership",
  amount_msat: 10000000,  // 10,000 sats/月
  recurrence: {
    time_unit: 3,         // 月
    period: 1,            // 每 1 個月
    paywindow: {
      seconds_before: 86400,   // 可提前 1 天支付
      seconds_after: 604800    // 可延遲 7 天支付
    }
  }
}

Invoice Request(第 N 次):
{
  offer_id: <offer_id>,
  recurrence_counter: N,      // 第幾次支付
  recurrence_start: <time>,   // 週期開始時間
  payer_key: <pubkey>
}

支付窗口

paywindow 機制:

時間線:
|<-- seconds_before -->|<-- 週期開始 -->|<-- seconds_after -->|
|      可提前支付       |    精確時間    |       寬限期        |

時間軸:─────────[═══════════════]─────────────────>
              ↑          ↑           ↑
            最早      週期開始      最晚
           支付時間                支付時間

proportional_amount:
如果 proportional_amount = true:
• 提前支付:按比例減少金額
• 延遲支付:按比例增加金額

範例:月費 30,000 sats,提前 10 天支付
實際支付 = 30,000 × (30-10)/30 = 20,000 sats

錢包自動化

錢包可以提醒用戶支付即將到期的訂閱,或自動支付(用戶授權下)。

取消訂閱

用戶只需停止支付即可取消,無需通知服務提供者。

實現狀態: 週期性支付是 BOLT12 的進階功能,目前實現支持程度各異。CLN 支持較完整。

相關資源

已複製連結
已複製到剪貼簿