coinbase/x402
GitHub: coinbase/x402
一个基于 HTTP 402 状态码的互联网原生支付开放标准,让 API 和内容变现只需一行代码。
Stars: 5578 | Forks: 1205
# x402
x402 是一个面向互联网原生支付的开放标准。它旨在支持所有网络(包括加密货币和法币)以及各种价值形式(稳定币、代币、法币)。
```
app.use(
paymentMiddleware(
{
"GET /weather": {
accepts: [...], // As many networks / schemes as you want to support
description: "Weather data", // what your endpoint does
},
},
),
);
// That's it! See examples/ for full details
```
## 原则
- **开放标准:** x402 是一个开放标准,任何人都可以免费访问和使用。它永远不会强制依赖单一方。
- **HTTP / 传输原生:** x402 旨在无缝补充现有的数据传输。在可能的情况下,它不应强制要求在典型的客户端 / 服务器流范围之外发出额外的请求。
- **网络、代币和货币不可知:** 我们欢迎添加对新网络(加密货币和法币)、签名标准或方案支持的贡献,只要它们符合 [CONTRIBUTING.md](https://github.com/coinbase/x402/blob/main/CONTRIBUTING.md) 中规定的验收标准。x402 可能会扩展对基于法币的网络的支持,但绝不会为了优先考虑法币支付而降低链上支付的优先级。
- **向后兼容:** 除非出于标准安全性的考虑而必须移除,否则 x402 不会弃用对任何现有网络的支持。在可能的情况下,对于非主要版本的更改,x402 将致力于向后兼容。
- **最小化信任:** 所有支付方案必须不允许协调者或资源服务器移动资金,除非符合客户端的意图。
- **易于使用:** x402 社区的目标是提高易用性,使其相对于互联网上的其他支付形式更具优势。这意味着将尽可能多的加密细节从客户端和资源服务器中抽象出来,并转移到协调者处。这意味着客户端 / 服务器不需要考虑 gas、rpc 等问题。
## 生态系统
x402 生态系统正在发展!请查看我们的 [生态系统页面](https://x402.org/ecosystem) 以了解基于 x402 构建的项目,包括:
- 客户端集成
- 服务和端点
- 生态系统基础设施和工具
- 学习和社区资源
想要将您的项目添加到生态系统中?请参阅我们的 [演示站点 README](https://github.com/coinbase/x402/tree/main/typescript/site#adding-your-project-to-the-ecosystem) 获取关于如何提交项目的详细说明。
**路线图:** 参见 [ROADMAP.md](https://github.com/coinbase/x402/blob/main/ROADMAP.md)
**文档:** 参见 [docs/](./docs/) 获取 GitBook 文档源码
## 术语:
- `resource`:互联网上的某种东西。这可以是网页、文件服务器、RPC 服务、API,即互联网上任何接受 HTTP / HTTPS 请求的资源。
- `client`:想要为资源付费的实体。
- `facilitator`:一个服务器,负责协助验证和执行一个或多个网络的支付。
- `resource server`:向客户端提供 API 或其他资源的 HTTP 服务器。
## 技术目标:
- 对客户端、服务器和协调者而言无需许可且安全
- 客户端和资源服务器采用时的摩擦最小
- 资源服务器和客户端的集成工作量最小(服务器 1 行代码,客户端 1 个函数)
- 能够权衡响应速度与支付保证
- 可扩展至不同的支付流程和网络
## 规范
请参阅 `specs/` 获取 x402 标准的完整文档。
### 典型 x402 流程
x402 支付通常遵循以下流程,但服务器具有很大的灵活性。请参阅 `examples/` 中的 `advanced` 文件夹。

以下概述了使用 `x402` 协议进行支付的流程。请注意,如果客户端已经知道资源所接受的支付详情,则步骤 (1) 和 (2) 是可选的。
1. `Client`(客户端)向 `resource server`(资源服务器)发出 HTTP 请求。
2. `Resource server` 响应 `402 Payment Required` 状态,并在 `PAYMENT-REQUIRED` 头中返回一个 `PaymentRequired` base64 对象。
3. `Client` 选择服务器响应返回的 `PaymentRequirements` 之一,并根据所选 `PaymentRequirements` 的 `scheme`(方案)和 `network`(网络)创建一个 `PaymentPayload`。
4. `Client` 发送包含 `PaymentPayload` 的 HTTP 请求,并在 `PAYMENT-SIGNATURE` 头中携带该负载,将其发送到资源服务器。
5. `Resource server` 通过本地验证,或者通过将 `PaymentPayload` 和 `PaymentRequirements` POST 到 `facilitator` 的 `/verify` 端点,来验证 `PaymentPayload` 是否有效。
6. `Facilitator` 根据 `PaymentPayload` 的 `scheme` 和 `network` 对对象进行验证,并返回一个 `Verification Response`(验证响应)。
7. 如果 `Verification Response` 有效,资源服务器将执行工作以完成请求。如果 `Verification Response` 无效,资源服务器将返回 `402 Payment Required` 状态,并在响应正文中返回一个 `Payment Required Response` JSON 对象。
8. `Resource server` 通过直接与区块链交互,或者通过将 `Payment Payload` 和 `Payment PaymentRequirements` POST 到 `facilitator server` 的 `/settle` 端点来结算支付。
9. `Facilitator server` 根据 `Payment Payload` 的 `scheme` 和 `network` 将支付提交到区块链。
10. `Facilitator server` 等待支付在区块链上得到确认。
11. `Facilitator server` 向资源服务器返回一个 `Payment Execution Response`(支付执行响应)。
12. `Resource server` 向 `Client` 返回 `200 OK` 响应,其中包含其请求的资源作为 HTTP 响应的正文,如果支付成功执行,还在 `PAYMENT-RESPONSE` 头中包含 `Settlement Response` 的 Base64 编码 JSON。
### 方案
方案是一种转移资金的逻辑方式。
区块链允许大量灵活的资金转移方式。为了协助促进不断增长的支付用例,`x402` 协议可通过其 `scheme` 字段扩展到不同的支付结算方式。
根据完成支付所需操作的不同,每种支付方案可能具有不同的操作功能。
例如,作为协议首批发布的方案 `exact`,其行为会与 `upto` 不同。`exact` 转移特定金额(例如:支付 1 美元阅读一篇文章),而理论上的 `upto` 将根据请求期间消耗的资源转移最高达一定金额的资金(例如:通过 LLM 生成 token)。
有关方案的更多详情,请参阅 `specs/schemes`,并参阅 `specs/schemes/exact/scheme_exact_evm.md` 以查看首个针对 EVM 链精确支付的提议方案。
### 方案 vs 网络
由于方案是转移资金的逻辑方式,因此针对不同的区块链,方案的实现方式可能不同。(例如:在 Ethereum 上实现 `exact` 的方式与在 Solana 上实现 `exact` 的方式截然不同)。
客户端和协调者必须显式支持不同的 `(scheme, network)` 对,以便能够创建有效的负载并验证 / 结算支付。
安装
### Typescript ``` # 所有可用的 reference sdks npm install @x402/core @x402/evm @x402/svm @x402/axios @x402/fetch @x402/express @x402/hono @x402/next @x402/paywall @x402/extensions # Minimal Fetch client npm install @x402/core @x402/evm @x402/svm @x402/fetch # Minimal express Server npm install @x402/core @x402/evm @x402/svm @x402/express ``` ### Python ``` pip install x402 ``` ### Go ``` go get github.com/coinbase/x402/go ```标签:402 Payment Required, API货币化, Coinbase, EVM, Express, Go, Hono, IP 地址批量处理, Python, Ruby工具, SVM, TypeScript, Web3, 中间件, 互联网支付, 加密货币, 区块链, 安全插件, 开放标准, 开源, 微支付, 支付协议, 无后门, 日志审计, 法币, 稳定币, 结算, 自动化攻击, 逆向工具