インストール
Cargo.toml に記述:
クイックスタート
最も手軽な方法はManagedProvider を使用することです — Lightning ノード不要、手数料 0.3%:
LightningProvider トレイトを実装してください — 下記のカスタムプロバイダーを参照。
カスタムプロバイダー
Options
| フィールド | 型 | 説明 |
|---|---|---|
price_sats | u64 | 1 回のコールあたりの価格(satoshi 単位)(必須) |
lightning | Arc<dyn LightningProvider> | Lightning バックエンド(必須) |
on_payment | Option<Box<dyn Fn(L402Token, u64)>> | 各支払い検証後に発火するコールバック |
非推奨: with_address()
Options::with_address(address) は v1.4.0 で削除されました。代わりに Options::new(sats, ManagedProvider::new(address)) を使用してください:
l402_middleware(opts: Options)
axum 0.8+ と互換性のある axum::middleware::Layer を返します。
動作
| リクエスト | レスポンス |
|---|---|
Authorization ヘッダーなし | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
有効な L402 <macaroon>:<preimage> | ハンドラーが実行される |
| 無効または期限切れのトークン | 401 Unauthorized |
| 再使用された preimage | 401 Token already used |
402 レスポンスボディ
on_payment コールバック
フィーチャーフラグ
axum-middleware を無効にすると、axum や reqwest なしでコア検証関数のみを使用できます:
検証
SHA256(preimage) == paymentHash は sha2 クレートを使用してローカルで検証されます — ホットパス上でのネットワーク呼び出しは発生しません。トークンの有効期限も同じ処理内で確認されます。
エラーコード
| ステータス | 意味 |
|---|---|
402 | 支払いトークンなし — インボイスを支払ってください |
401 | 無効なトークンまたは期限切れの macaroon |
401 | 再使用された preimage(既に使用済み) |