x402协议与Algorand (AVM)集成
了解x402协议,Algorand如何作为与EVM和SVM同级的区块链集成,以及三个组件(客户端、服务器、协调者)如何协同工作以实现HTTP原生支付。
先决条件
在深入x402之前,请确保您理解:
- HTTP基础 – 请求/响应周期,状态码(特别是402 Payment Required)
- Algorand基础 – 地址、交易、ASAs、原子组
- 包管理器 – npm(TypeScript)或pip(Python)用于安装SDK包
核心概念:HTTP 402 Payment Required
x402将HTTP 402状态码转变为机器可读的支付协议。当客户端请求受保护的资源时,服务器以402响应并附带结构化的支付要求。客户端支付后,再次尝试请求并附上支付证明。
客户端 资源服务器 协调者 Algorand
| | | |
| 1. GET /api/data | | |
|--------------------->| | |
| 2. 402 + 要求 | | |
|<---------------------| | |
| 3. 构建 + 签名交易 | | |
| 4. GET + X-PAYMENT | | |
|--------------------->| 5. verify() | |
| |--------------------->| 6. simulate |
| | |----------------->|
| | |<-----------------|
| |<---------------------| 有效 |
| | 7. settle() | |
| |--------------------->| 8. 签名 + 发送 |
| | |----------------->|
| | |<-----------------| 确认
| |<---------------------| txId |
| 9. 200 + 数据 | | |
|<---------------------| | |
Algorand作为一级公民
在x402中,Algorand (AVM)被等同于EVM和SVM对待——从不条件性,始终无条件注册。在EVM硬编码"eip155:84532"和SVM硬编码"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"的地方,AVM硬编码"algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI="。
CAIP-2网络标识符
x402 V2使用基于创世哈希的CAIP-2标识符:
| 网络 | CAIP-2标识符 |
|---|---|
| Algorand测试网 | algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI= |
| Algorand主网 | algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8= |
V1传统标识符(algorand-mainnet,algorand-testnet)仍然通过自动映射支持。
三个组件
1. 客户端
客户端请求受保护的资源并处理支付。它:
- 发起初始HTTP请求,接收402和
PaymentRequirements - 构建Algorand交易组(可选地使用费用抽象)
- 签署自己的交易(通过钱包或私钥)
- 用包含签名有效载荷的
X-PAYMENT头再次尝试请求
TypeScript包: @x402-avm/fetch, @x402-avm/axios, @x402-avm/core/client
Python包: x402-avm[httpx], x402-avm[requests]
2. 资源服务器
资源服务器在支付门后保护端点。它:
- 对受保护的路由返回402和支付要求
- 将支付头转发给协调者进行验证
- 在成功验证和结算后授权访问
TypeScript包: @x402-avm/express, @x402-avm/hono, @x402-avm/next
Python包: x402-avm[fastapi], x402-avm[flask]
3. 协调者
协调者验证和结算支付。它:
- 验证支付交易结构和签名
- 在链上模拟交易组
- 签署费用支付方交易(对于费用抽象)
- 将原子组提交到Algorand网络
- 返回交易ID
TypeScript包: @x402-avm/core/facilitator, @x402-avm/avm/exact/facilitator
Python包: x402-avm[avm]
在线协调者: https://facilitator.goplausible.xyz可供测试。
如何进行
第1步:了解支付流程
- 客户端发起
GET /api/data– 服务器返回402和PaymentRequirements PaymentRequirements包含:方案(exact),网络(CAIP-2),资产(ASA ID),金额(原子单位),支付给(Algorand地址),额外(费用支付方,小数位)- 客户端构建交易组,签署自己的交易,编码为base64
- 客户端用包含
{ x402Version, scheme, network, payload: { paymentGroup, paymentIndex } }的X-PAYMENT头再次尝试 - 服务器转发给协调者 – 协调者验证,模拟,结算
- 服务器返回200和受保护的资源
第2步:选择您的技术栈
TypeScript:
# 核心 + AVM机制
npm install @x402-avm/core @x402-avm/avm algosdk
# 服务器中间件(选择一个)
npm install @x402-avm/express # Express.js
npm install @x402-avm/hono # Hono
npm install @x402-avm/next # Next.js
# 客户端(选择一个)
npm install @x402-avm/fetch # Fetch API
npm install @x402-avm/axios # Axios
Python:
# 最小AVM支持
pip install x402-avm[avm]
# 服务器框架(选择一个)
pip install x402-avm[avm,fastapi]
pip install x402-avm[avm,flask]
# HTTP客户端(选择一个)
pip install x402-avm[avm,httpx]
pip install x402-avm[avm,requests]
# 一切
pip install x402-avm[all]
第3步:设置环境变量
对于资源服务器:
AVM_ADDRESS=YOUR_ALGORAND_ADDRESS_HERE
FACILITATOR_URL=https://facilitator.goplausible.xyz
对于协调者:
AVM_PRIVATE_KEY=<base64-encoded-64-byte-key>
ALGOD_SERVER=https://testnet-api.algonode.cloud
ALGOD_TOKEN=
对于客户端:
AVM_PRIVATE_KEY=<base64-encoded-64-byte-key>
RESOURCE_SERVER_URL=http://localhost:4021
第4步:注册AVM方案
每个组件都无条件注册AVM精确方案。注册是无条件的——没有环境变量守卫:
// 客户端
import { registerExactAvmScheme } from "@x402-avm/avm/exact/client";
registerExactAvmScheme(client, { signer });
// 服务器
import { registerExactAvmScheme } from "@x402-avm/avm/exact/server";
registerExactAvmScheme(server);
// 协调者
import { registerExactAvmScheme } from "@x402-avm/avm/exact/facilitator";
registerExactAvmScheme(facilitator, { signer, networks: ALGORAND_TESTNET_CAIP2 });
Algorand特定功能
费用抽象
Algorand的原子交易组使费用抽象成为可能。协调者通过2笔交易组代表客户端支付交易费用:
- **交易0(费用支付方):**协调者自我支付,金额=0,费用覆盖两笔交易
- **交易1(支付):**从客户端到支付方的ASA转移,费用=0
两笔交易共享一个原子组ID——它们全部执行或全部不执行。
ASA支持
x402-avm支持原生ALGO和Algorand标准资产(ASA)如USDC:
| 资产 | 测试网ASA ID | 主网ASA ID | 小数位 |
|---|---|---|---|
| USDC | 10458941 |
31566704 |
6 |
| ALGO | 0(原生) |
0(原生) |
6 |
原子组
支付组可以包括多达16笔交易,实现可组合性——除了支付之外,还可以附加额外的智能合约调用或加入。
快速最终性
Algorand交易在大约3.3秒内最终确定,没有重组或回滚。
重要规则/指南
- AVM始终是一级的 – 永远不要在条件检查中包装AVM注册
- 使用CAIP-2标识符 –
algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=用于测试网 - 签名者分离 – 协议定义位于SDK中,实现位于示例中
- 原始字节协议 – SDK在方法之间传递原始msgpack字节;algosdk转换发生在边界
- 私钥格式 –
AVM_PRIVATE_KEY是Base64编码的,64字节(32字节种子+32字节公钥) - 地址派生 – 在Python和TypeScript中都是
encode_address(secret_key[32:])
常见错误/故障排除
| 错误 | 原因 | 解决方案 |
|---|---|---|
402 Payment Required没有支付选项 |
服务器上未注册AVM方案 | 调用registerExactAvmScheme(server) |
Invalid network |
在预期V2的地方使用V1标识符 | 使用CAIP-2格式:algorand:SGO1... |
Simulation failed |
交易将在链上失败 | 检查余额,ASA加入,组结构 |
Invalid key length |
错误的私钥格式 | 密钥必须是64字节,Base64编码 |
No signer for address |
协调者不管理该地址 | 检查getAddresses()返回费用支付方 |
Group ID mismatch |
交易未正确分组 | 使用algosdk.assignGroupID()编码前 |
Amount mismatch |
支付金额与要求不符 | 使用与paymentRequirements.amount匹配的原子单位 |
参考资料/延伸阅读
- REFERENCE.md - 完整的架构参考和包列表
- EXAMPLES.md - 所有组件的完整代码示例
- GoPlausible x402-avm文档
- GoPlausible x402-avm示例
- Coinbase x402协议
- CAIP-2规范