Argentic 借助 L402 协议构建 AI Agent 闪电网络无感支付闭环
过去运行 AI Agent 常面临两大痛点:一是爬虫失控耗尽带宽,二是数据提供方缺乏精细化的按次收费手段。Argentic 针对这一空白提供了「按需付费」机制。其交互流程清晰明确:服务端拦截请求,返回 402 状态码并附带 Lightning 发票;Agent 完成支付后,数据随即放行。该过程免去了注册账户、绑定银行卡或对接 Stripe 的繁琐步骤,完全依靠协议握手完成交互。
这套方案的核心逻辑在于重用 HTTP 标准中的 L402 (HTTP 402 Payment Required) 状态码,并将其与 Lightning Network 的原子支付特性深度结合。服务端通过加载中间件,客户端或 Agent 框架则嵌入相应的支付处理逻辑。资金一旦入账,Preimage 即刻释放,请求随之通过,从而省去了人工审核环节并消除了账期延迟。
实现该机制主要分为三个环节,以下以 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 端,无需编写复杂的支付逻辑。Argentic 提供涵盖 Python、JS 和 Go 的多语言客户端库。当客户端收到 402 响应时,库会自动解析 WWW-Authenticate: L402 头部中的 Bolt11 发票,调用钱包付款,获取 Preimage 后携带 Authorization: L402 <token>:<preimage> 进行重试。Python 端代码结构如下:
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 依赖
lnrpc接口中的AddInvoice和SettleInvoice功能,需确保 LND 版本在 v0.18 及以上,否则旧版容易抛出unknown service lnrpc.Lightning错误。 - 权限控制:避免将完整的
admin.macaroon放入容器,建议使用lncli bakemacaroon生成仅包含invoices:write和invoices:read权限的专用票据。 - 防灰尘攻击:虽然 1000 msats 理论上可行,但在链上手续费剧烈波动时,路由节点可能拒转小额支付。建议将门槛设定为 5000-10000 msats,既能过滤无效流量,又不会给正常 Agent 造成压力。
- 保证幂等性:为防止重试导致重复扣费,Argentic 中间件虽会校验 Preimage 对应的发票结算状态,但客户端最好在本地缓存已支付的
payment_hash,以应对网络抖动带来的潜在问题。
全部回复 (4)
想当场把话说完?进全球 AI 聊天室,登录就能开口。
坑死我了,nginx 必须关掉 Proxy-Buffering 否则 402 根本传不到客户端!比如服务端注入 L402 中间件时,
PriceMsat参数直接决定定价,单位为毫聪,只需修改数值即可调整售价。Nginx 那个默认值简直是深水炸弹,之前搞 SSE 被坑得怀疑人生,特别是流量控制太死板。比如 Argentic 的出现填补了这块空白,它在代理层真正落实了「按需付费」机制。流程很直白:拦截请求、返回 402 状态并附带 Lightning 发票、Agent 完成支付、随后放行数据。整个过程不需要注册账户、绑定银行卡或对接 Stripe,纯粹依靠协议握手完成交互。 这套方案的核心在于重用了被冷落的 L402 (HTTP 402 Payment Required) 状态码,将其与 Lightning Network 的原子支付特性深度结合。具体做法是服务端加载中间件,而客户端(或 Agent 框架)嵌入支付处理逻辑。资金一旦入账,Preimage 即刻释放,请求随之通过,省去了人工审核环节,也消除了账期延迟。 我在本地复现了一个极简 Demo,主要分三个步骤: 一、服务端接入(基于 Go 语言)
这里的
PriceMsat参数直接决定定价,单位为毫聪。只需修改数值即可调整售价,无需为了变更计费逻辑而重新部署代码。 ## Agent 端如何自动处理 402 响应并完成支付 二、Agent 端自动支付 Agent 侧无需编写繁琐逻辑,Argentic 提供多语言客户端库(涵盖 Python/JS/Go)。当收到 402 响应时,库会自动解析WWW-Authenticate: L402头部中的 Bolt11 发票,调用钱包付款,获取 Preimage 后携带Authorization: L402 <token>:<preimage>进行重试。代码结构如下:执行后可观察到日志先输出 402,随即发生钱包扣款,二次请求返回 200 状态。主要延迟源于 Lightning 网络的路由发现,通常在 1-3 秒内完成。