Argentic 把 L402 和闪电网络串起来

PromptCube 专家 1小时前 407 浏览 4 点赞 约 1 分钟

以前总担心 AI Agent 到处乱爬把带宽跑崩,或者数据方想变现却没法按次收费。Argentic 这东西出来,算是把「按需付费」这套逻辑在代理层面跑通了:拦截请求 → 返回 402 + Lightning 发票 → Agent 付款 → 放行。全程无需注册账号、绑卡、对接 Stripe,纯协议层面的握手。

核心思路其实不复杂,关键在 L402 (HTTP 402 Payment Required) 这个被遗忘的状态码终于找到了用武之地。Argentic 做的事是把它和 Lightning Network 的原子性支付绑定:服务端挂载中间件,客户端(或 Agent 框架)集成支付逻辑。只要钱到账,Preimage 释放,请求立马放行,中间没有人工审核、没有账期。

我本地跑了个最简 Demo,大概三步走:

一、服务端接入(以 Go 为例)

package main

import (
	"log"
	"net/http"
	"github.com/argentic/argentic-go/middleware"
)

func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/api/data", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte(`{"status": "ok", "data": "premium content"}`))
	})

	// 注入 L402 中间件,配置 LND 节点或任意兼容 L402 的后端
	l402mw := middleware.New(middleware.Config{
		LndHost:     "localhost:10009",
		MacaroonPath: "/path/to/admin.macaroon",
		CertPath:    "/path/to/tls.cert",
		PriceMsat:   1000, // 1000 msats ≈ $0.0003,按需改
	})

	log.Fatal(http.ListenAndServe(":8080", l402mw.Handler(mux)))
}
配置里的 PriceMsat 直接定价,单位毫聪,想卖多贵改个数字就行,不用改代码重新部署计费逻辑。

二、Agent 端自动支付
Agent 这边不用写复杂逻辑,Argentic 提供的客户端库(Python/JS/Go 都有)遇到 402 自动解析 WWW-Authenticate: L402 头里的 Bolt11 发票,调钱包付款,拿到 Preimage 回填 Authorization: L402 <token>:<preimage> 重试。伪代码大概这样:

from argentic import ArgenticClient

client = ArgenticClient(lnd_grpc="localhost:10009", macaroon="...", cert="...")
resp = client.get("http://localhost:8080/api/data")  # 内部自动完成 402 -> Pay -> Retry
print(resp.json())
跑通后你会看到日志里先报 402,紧接着钱包扣款,第二次请求直接 200。延迟主要在 Lightning 网络路由上,通常 1-3 秒内搞定。

三、实际踩过的坑

  • LND 版本兼容:Argentic 依赖 lnrpcAddInvoiceSettleInvoice,LND v0.18+ 才稳定,老版本容易报 unknown service lnrpc.Lightning
  • Macaroon 权限最小化:别直接丢 admin.macaroon 进容器,用 lncli bakemacaroon 烤个只含 invoices:write invoices:read 的只读/写票据。
  • 价格定太低会被灰尘攻击:1000 msats 理论上可行,但链上手续费波动大时,路由节点可能拒绝转发;建议门槛设在 5000-10000 msats,既过滤垃圾流量又不吓跑正常 Agent。
  • 幂等性:同一个请求重试别重复扣费,Argentic 中间件会校验 Preimage 对应的 Invoice 是否已结算,但客户端最好自己在本地缓存已支付的 payment_hash,避免网络抖动

全部回复 (4)

程序员老陈 初级 1小时前
实际部署时发现 nginx 前置要把 Proxy-Buffering off,不然 402 还没到客户端就被吃了,折腾半天才查到
0 回复
K
Kevin爱学习 高级 1小时前
nginx 这默认值真坑,早年做 SSE 也被坑过
0 回复
老大鹏 专家 1小时前
自己跑测试时发现,Agent 重试逻辑没写好,同一张发票被付两次,对账对吐血
0 回复
摸鱼攻城狮 初级 1小时前
Agent 端得自己管预付费池,不然单笔开通道手续费比数据还贵
0 回复

发表回复

支持 Markdown 格式