关于 ADEXTO
ADEXTO 是用于发现和交易多链绑定曲线代币市场的 MCP 服务。Agent 可用自己的密钥创建市场、质押和领取费用,买家则可使用 Base 上的 USDC 付款。
主要功能
- 01发现市场并获取报价
- 02使用 Base 上的 USDC 购买代币
- 03读取交易历史和质押记录
- 04向市场 Agent 提问
- 05用 Agent 自有密钥创建市场
- 06质押并领取费用
适用场景
- 01购买前查找并比较代币市场
- 02无需跨链桥即可购买其他链上的代币
- 03创建关联 Agent 的市场并领取费用
MCP 相关
MCP 服务提供 14 个工具,涵盖市场发现、报价、购买、历史记录、质押、市场 Agent 问答、创建市场和领取费用。服务准备创建及领取交易,再由 Agent 使用自己的密钥签名。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://adexto.xyz/api/mcpclaude mcp add --transport http xyz-adexto https://adexto.xyz/api/mcp{"mcpServers":{"xyz-adexto":{"type":"http","url":"https://adexto.xyz/api/mcp"}}}在 Cursor 中打开{"servers":{"xyz-adexto":{"type":"http","url":"https://adexto.xyz/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"xyz-adexto":{"type":"http","url":"https://adexto.xyz/api/mcp"}}}{"mcpServers":{"xyz-adexto":{"serverUrl":"https://adexto.xyz/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
14此工具无需参数。
详细介绍
ADEXTO Protocol
Agent 经济的市场基础设施。
Agent 开设一个与其链上身份绑定的市场,从其中的每笔交易中获利,还可以被其他 Agent 使用来自另一条链的 USDC 买下。条款以字节码固定,没有管理员密钥,因此没人能更改 Agent 的报酬,包括我们。
adexto.xyz · 启动 · 浏览器 · Agents · MCP · x402 API · 安全 · 文档
循环 · 已上线的市场 · 架构 · 从这里开始 · 市场包含什么 · 运作方式 · 费用分配 · 一次启动的内部机制 · 部署 · 现状说明 · 深入探究 · 安全 · 本地开发
运作流程
| 发生什么 | 链上读取 | |
|---|---|---|
| 开启 | Agent 使用其 ERC-8004 agentId 调用 deployTrinity,若 ownerOf(agentId) 的所有者不是调用者,工厂便会拒绝。无需存入任何资产:代币在虚拟储备金的联合曲线中开启,全部供应量都在曲线中。 | agentIdOf(token)、AgentBound |
| 赚取 | 发起地址是曲线不可变的 creator,并可获得每笔交易的固定分成,以链的原生资产领取。 | creatorOwed()、claimCreatorFees() |
| 被买入 | 另一个 Agent 通过 MCP 找到市场,收到 HTTP 402 报价,并使用自己的钱包签署 EIP-3009 授权,以 Base 上的 USDC 付款。付款结算前,代币已在市场所在链上交付。 | adexto.xyz/api/mcp 上的 buy_token |
| 验证 | 任何人交易前,都可以读取费用、金库和供应量;同时没有所有者、代理、暂停或提取函数。 | totalFeeBps()、protocolTreasury() |
启动平台是为点击按钮的人打造的。Agent 需要一个无需征求他人同意即可开启的市场、一套无需信任任何人即可核验的条款,以及无需通过桥接即可付款的买家。它可以直接调用合约来开启市场,也可以通过 MCP 操作:prepare_launch 返回未签名的交易,Agent 使用自己的密钥签名并发送,然后由 register_launch 将市场列出。
已在六个主网上线
一个工厂,在每条链上逐字节完全一致(21,806 字节,在六条链上均与 Sourcify 完全匹配),每个新市场都通过它创建。
Monad 链 143 · 3 个市场 | Arbitrum One 链 42161 · 3 个市场 | Robinhood Chain 链 4663 · 1 个市场 | Base 链 8453 · 1 个市场 | Arc 链 5042 · 1 个市场 | 0G 链 16661 · 3 个市场 |
这 12 个已列出的市场的数据于 2026-10-04 从链上读取(SAi Arc 的数据于 2026-10-06 读取)。同一代币代码在两条链上分别对应两个独立市场,各自拥有独立的供应量和价格。
| 市场 | 链 | 代际 · 交易者支付 | ERC-8004 Agent | 合约 |
|---|---|---|---|---|
| $PARCEL Parcel Market | Monad | 0.11.0 · 0.40% | 10251 | 代币 · 曲线 |
| $SAI SAi Monad | Monad | v1 · 1.00% | 10275 | 代币 · 曲线 |
| $LOOP Loop | Monad | v1 · 1.00% | 10276 | 代币 · 曲线 |
| $WOMBO Wombo | Arbitrum One | 0.11.0 · 0.40% | 无 | 代币 · 曲线 |
| $SAI SAi Arbitrum | Arbitrum One | v1 · 1.00% | 1566 | 代币 · 曲线 |
| $LOOP Loop | Arbitrum One | v1 · 1.00% | 1578 | 代币 · 曲线 |
| $SAI SAi Robin | Robinhood Chain | v1 · 1.00% | 6525 | 代币 · 曲线 |
| $SAI SAi Arc | Arc | v1 · 1.00% | 1421 | 代币 · 曲线 |
| $BLOOP Bloop | Base | 0.11.0 · 0.40% | 无 | 代币 · 曲线 |
| $ADEXTO ADEXTO | 0G | 0.11.0 · 0.40% | 无(原因) | 代币 · 曲线 |
| $ADT ADEXTO Protocol | 0G | 0.11.0 · 0.40% | 无 | 代币 · 曲线 |
| $ZEEBO Zeebo | 0G | 0.11.0 · 0.40% | 无 | 代币 · 曲线 |
“交易者支付”是曲线合约自身的 totalFeeBps():每条 0.11.0 曲线均为 40,每条 v1 曲线均为 100。所有链的 Factory、stake 和 hub 地址都列在主网部署中。
| 仓库 | 内容 |
|---|---|
0xcuy/adexto(当前仓库) | 合约、测试、Web 应用、MCP 服务源码、x402 网关和索引器 |
0xcuy/adexto-mcp | MCP 连接指南、工具参考,以及一个使用你自己的密钥进行签名的 Agent 工具包 |
0xcuy/adexto-arbitrum | Arbitrum One 工程 |
0xcuy/adexto-monad | Monad 工程 |
0xcuy/adexto-arc | Arc 工程:Arc 上的不同之处、上线日志、只读探测工具和演示视频 |
架构
三种接入方式,一套合约。用户使用自己的钱包访问 Web 应用,AI Agent 使用自己的密钥访问 MCP 服务,任何 HTTP 客户端都可以通过 x402 使用 USDC 在 Base 上购买。每次启动、质押和领取都由用户自己的密钥签名:Web 应用和 MCP 服务会准备这些交易,但绝不会持有该密钥。x402 网关使用自己的中继密钥,在市场所在的链上购买,并将付款方设为接收方;只有在完成交付后,才会在 Base 上提交付款方的 USDC 授权。
说明
我们运行的内容,以及不运行的内容。 Web 应用和 MCP 服务(Next.js,本仓库)、x402 网关(位于
cloudflare-worker/的 Cloudflare Worker)以及市场索引均由我们运行,且都在链下。链上没有任何合约拥有所有者:工厂、曲线、代币或质押合约都没有管理员密钥。ERC-8004 Identity Registry、USDC、0G DA、0G Compute 路由器和索引器均由第三方提供。
从这里开始
|
在浏览器中 快捷模式只需填写名称、代号和图片,并会在你签名前显示在你的链上启动所需的费用。 启动市场 → |
通过 Agent 使用 MCP,无需账户或 API 密钥。Agent 使用自己的密钥进行启动、质押和领取。 连接 Agent → |
通过普通 HTTP 未付款的请求会以 402 响应,并提供准确的 USDC 条款。无需 SDK 或账户。通过 x402 购买 → |
浏览器会列出所有链上的每个市场,/creator则会显示任意地址获得的收益。若要自行运行,请参阅本地开发。
连接 Agent
claude mcp add --transport http adexto https://adexto.xyz/api/mcp
{ "mcpServers": { "adexto": { "url": "https://adexto.xyz/api/mcp" } } }
十四种工具:发现和报价市场、用 Base 上的 USDC 买入、读取交易历史和质押信息、向市场的 Agent 提问,以及使用你自己的密钥创建市场、质押和领取。其他客户端和 Agent 工具包指南见 0xcuy/adexto-mcp。
通过 x402 买入
curl -i 'https://x402.adexto.xyz/v1/x402/buy/loop?chain=143'
签署其描述的 EIP-3009 授权,然后重新发送请求。市场所在链上的曲线会将代币交付到你的地址,之后才会结算付款。参考:adexto.xyz/x402 和 OpenAPI 文档。
市场创建后包含的内容
启动平台会向创建者提供一个代币和一个页面。在这里,无论是 Agent 还是个人发起,一笔交易就能开启一个可用的交易场所,并附带以下所有内容。这些都不是路线图项目,也无需上架或申请。
|
机器买家 MCP 服务向 AI Agent 开放每个市场(发现、报价、买入、读取历史记录),并从网站所用的同一个注册表解析市场,因此新市场收到第一个请求时就能响应。 |
跨链价格 仅持有 Base 上 USDC 的买家无需跨链桥接,也无需持有市场的 Gas 代币,就能建立仓位;付款时使用由 USDC 合约自行验证的 EIP-3009 授权。 |
集中领取创建者收益 /creator 会读取某个地址在所有链上创建的每条曲线,并可按市场或按链在一笔交易中领取手续费。 |
|
市场专属 Agent 它会回答关于自身曲线、手续费分配和深度的问题。由于与代币和曲线绑定,它会携带相应地址;推理则通过 0G Compute 路由器运行。 |
从首个区块开始质押 可在市场自己的 AdextoAgentStake 或其所在链的 AdextoStakeHub 中质押。质押后即可通过 MCP 使用市场的 Agent,并计入 Agent Compute API 密钥。
|
交易终端 提供从 1 秒起的蜡烛图、RSI、MACD、布林带和 VWAP、图表中的创建者交易、深度阶梯、包含 PnL 的个人仓位、持有者列表和分享卡片,即使市场创建仅几分钟也能使用。 |
说明
**这里不包含的内容:**没有自主交易机器人代表创建者运行市场。ERC-8004 身份绑定确实存在,并会在创建时通过链上检查,但它是可选的,只记录身份,不会启动交易策略。
市场如何运作
代币在虚拟储备上的联合曲线内启动。无需注入任何资金,因此启动只需支付 Gas 费。100% 的供应量都会进入曲线,因此创建者没有可出售的份额。收益来自每笔兑换的分成,直接从交易者已支付的费用中扣除:在工作室的标准预设中,每笔交易的费用为 1.00%,其中 0.70% 归创建者所有。
曲线是永久交易场所。没有毕业步骤,也不会迁移到外部资金池,而大多数启动平台漏洞都发生在迁移过程中。曲线中没有任何提款功能,因此包括我们在内的任何人都无法抽走市场资金。
这是对协议的说明,不是对代币的限制。v1 AdextoToken 仅在 block.timestamp < launchTime + 180 期间,将每个接收钱包持有的供应量限制为 1%(六个 0.11.0 代币在前 5 个区块限制了单笔转账)。此后,_update 不会添加任何条件,也没有黑名单、暂停功能、Ownable 或永久转账钩子。它是一个普通的 ERC-20,因此任何人都可以在任何外部 AMM 上架,无需征得我们的许可,我们也无法阻止。这项保证比“只有一个市场”更有限:我们绝不会迁移,也没有人能提取曲线的储备。
为什么选择联合曲线,而不是流动性池
原因在于启动模式,而且可以在合约中核实,并非个人偏好。
| 此曲线 | 标准流动性池 | |
|---|---|---|
| 开启市场所需资金 | 无:原生代币一侧的储备完全是虚拟的,而且 deployTrinity 不可 payable,因此无法接受存款 | 必须由某人存入实际流动性 |
| 创建者的代币持仓 | 无:全部供应量会在同一笔交易中铸造给工厂并加载到曲线中,随后工厂会要求自身余额为零,启动才能成功 | 创建者必须持有代币,才能与流动性配对 |
| 能否提取储备 | 不能:任何地方都没有 withdraw、rescue、sweep、drain 或 emergency 函数,没有所有者,也没有 onlyOwner;原生代币只有在支付卖家的款项或领取费用时才会流出,费用会支付给不可变地址:每条曲线的创建者,以及 0.11.0 和 v1 曲线的协议方 | 可以,而且理应如此:流动性提供者可随时提取 |
| 迁移步骤 | 无:曲线是永久交易场所 | 常见的启动平台模式会将曲线毕业迁移到资金池,而这正是历史上大部分漏洞攻击面所在 |
| 创建者费用 | 每笔兑换都会在链上累积一部分费用,且包含在交易者支付的总额内(工作室标准预设为 1.00% 中的 0.70%),因此向创建者付款不会增加交易者的费用 | 费用归流动性提供者所有;向创建者付款需要交易场所提供自定义钩子支持,而该场所未必支持 |
| 覆盖我们六条链的代码路径 | 一套,字节码完全一致 | 取决于各链上实际存在的交易场所 |
第三行最为关键。流动性提供者能够提取资金并非缺陷,这正是 AMM 的用途;但这意味着交易场所可能会被抽空,让持有代币的人无所依托,而“我们不会这么做”只是一句承诺。这里的保证在于不存在能够执行此操作的代码。
费用分成
每笔兑换的费用分为四部分:创建者、深度、回购和协议方。每项费率在创建市场时固定,协议方费用的处理方式取决于创建市场的工厂版本。
ADEXTO v1(AdextoFactory 1.0.0),工作室发起的每次启动都会使用此版本。 创建者设置总费率,而这就是交易者实际支付的费率:协议方的 0.10% 从中扣除,不会额外叠加。工作室的标准预设中,曲线报告的 totalFeeBps 为 100:
| 分配 | 比率 | 去向 |
|---|---|---|
| 创建者 | 0.70% | 累积为 creatorOwed;任何人都可以触发领取,且款项始终支付给不可变的 creator |
| 深度 | 0.10% | 留在曲线中,随着交易量累积而抬高价格底线 |
| 回购 | 0.10% | 在曲线上累积为 treasuryNative;回购调用会在曲线上用它购买,并销毁买到的代币 |
| 协议 | 0.10% | protocolOwed,只能领取到工厂不可变的 protocolTreasury |
| 交易者支付 | 1.00% |
提示
请读取曲线上的
totalFeeBps(),而不要自行累加这些费率。无论创建市场的是哪个版本,这都是合约对一笔交易成本的确切答复。工厂和任何曲线上都没有费率设置器。
六个 0.11.0 市场,以及每一项费用背后的规则
创建 v1 发布前六个市场的 AdextoFactory 0.11.0。 其协议费用是在配置的总费率之上收取的。这些市场配置为 0.30%,因此交易者永久支付 0.40%:
| 分配 | 比率 | 来源 | 去向 |
|---|---|---|---|
| 深度 | 0.15% | 包含在创建者的 0.30% 中 | 留在曲线中 |
| 创建者 | 0.10% | 包含在创建者的 0.30% 中 | 累积为 creatorOwed,归创建者的钱包所有 |
| 回购 | 0.05% | 包含在创建者的 0.30% 中 | treasuryNative,用于买入并销毁 |
| 协议 | 0.10% | 额外收取 | protocolOwed,只能领取到不可变的 protocolTreasury |
| 交易者支付 | 0.40% |
协议费用是工厂上的 public constant PROTOCOL_FEE_BPS,以及每条曲线上的 immutable protocolFeeBps,两者都没有设置器。设置器会让合约归人所有,这与 /security 对它们的描述恰恰相反。因此,0.11.0 市场永远无法将这项费用纳入总费率:其费率同样不可变。这是永久状态,并非等待迁移。
claimProtocolFees() 无需许可。任何人都可以调用,原生代币始终会转入不可变的金库,因此收取费用不需要密钥。金库的密钥只在其所有者之后要把资金转移到其他地方时才需要。
工作室的三个预设(0.60% / 1.00% / 2.00%)仅用于 UI。v1 合约接受任何满足 swapFeeBps <= 500 和 creatorShareBps + treasuryShareBps + PROTOCOL_FEE_BPS <= swapFeeBps 的分配方案,因此 5% 上限适用于交易者实际支付的费率,并始终为协议费用留有空间。深度是剩余部分,而非输入项:工厂会计算 swapFeeBps − creatorShareBps − treasuryShareBps − PROTOCOL_FEE_BPS,曲线也会根据自身上限重新检查总和。在 0.11.0 中,上限检查的是 swapFeeBps + PROTOCOL_FEE_BPS <= 500,而深度为 swapFeeBps − creatorShareBps − treasuryShareBps。
回购无需许可且完全自包含。executeBuyback 只有 nonReentrant 和 live 限制,没有调用者权限门槛,因此任何人都可以触发,每次最多使用原生代币储备的 1%。v1 曲线还要求两次调用之间至少间隔一小时。原生代币不会离开合约:调用会将 treasuryNative 转入曲线储备,并销毁该次购买所得,因此供应量会减少,且不会向任何人付款。这是有意为之:如果销毁机制依赖我们愿意执行,那就只是一项承诺,而非真正的机制。但回购也不是自动发生的。每次交换都会累积回购份额,但只有有人调用时才会销毁。我们的 x402 网关会在交付后、当资金桶达到燃料费的三倍时执行回购;截至目前(请参阅 2026-10-04),只有 $ADEXTO 销毁过任何代币。
一次启动的内部流程
同一次启动的 Mermaid 图,标出每个调用的名称
graph TD
Creator([Creator]) -->|1 tx per chain, gas only<br/>deployTrinity is NOT payable| Factory[AdextoFactory 1.0.0]
Registry[[ERC-8004 Identity Registry<br/>optional, off by default]] -.->|ownerOf agentId: the launch reverts<br/>unless the caller owns that agent| Factory
Meta[0G DA<br/>launch metadata anchored] -.->|metadataRoot in calldata| Factory
subgraph "Deployed atomically in that transaction"
Factory -->|1. deploys the curve first,<br/>so the token can bind it immutably| Curve[AdextoCurve: its own AMM<br/>virtual reserve, no deposit<br/>no owner, no withdraw, sweep or rescue]
Factory -->|2. deploys the token,<br/>mints 100% of supply to itself| Token[AdextoToken: plain ERC-20<br/>no owner, no pause, no blacklist<br/>1% per wallet for the first 180 s]
Factory ==>|3. seeds 100% into the curve, then<br/>asserts its own balance is zero| Curve
end
Curve -->|0.10% depth| Depth[stays in the curve,<br/>raising the floor]
Curve -->|0.70% creator| CreatorFee[claimCreatorFees →<br/>immutable creator address]
Curve -->|0.10% buyback| Vault[treasuryNative:<br/>a balance on the curve,<br/>not a separate contract]
Curve -->|0.10% protocol, carved OUT OF<br/>the 1.00% standard preset| Protocol[protocolOwed →<br/>claimProtocolFees is permissionless,<br/>destination is immutable]
Vault -->|executeBuyback: no caller gate,<br/>max 1% of reserve per call, 1h apart| Burn[buys along the curve,<br/>burns what it bought]
三个容易误读的细节,它们都不属于 deployTrinity:
agentIdentity只是一个地址。 它必须非零,并会不可变地存储在代币和曲线上;它可以调用executeTreasuryBuyback,销毁其自身持有的代币。它不会自动成为 0G Compute Agent:studio 默认传入创建者自己的钱包。- x402 接入端是曲线的客户,而非操作者。 它调用
buy,并将付款方设为接收方,与任何其他地址完全相同,且不享有任何特权:它无法存入treasuryNative,该资金库只会从交换费的回购部分获得资金。0G Compute Agent 是一条推理路由,不持有任何链上密钥。参见 Agent 对 Agent。 - 回购会销毁代币,但无人负责管理。
executeBuyback只带有nonReentrant和live,没有调用者限制,因此任何人都可以触发;每次调用最多使用储备金的 1%,而在 v1 曲线上,每小时只能调用一次。
主网部署
下方每个地址都已通过针对该链 RPC 的直接 eth_getCode 调用确认含有字节码;每次部署时,audit_consistency.mjs 都会重新读取每个工厂、质押和枢纽条目的字节码、VERSION 和大小。这里有意不列出测试网部署。它们应放在运维手册中,而非公开 README 中。
ADEXTO v1(AdextoFactory VERSION 1.0.0)是当前一代,于 2026-10-01 部署到五个主网,并于 2026-10-06 部署到 Arc。它在一笔交易中部署代币及其曲线,无需存入流动性,可绑定 ERC-8004 Agent 身份,将协议费 0.10% 从创建者配置的总额中扣除,并为每个市场提供 180 秒的启动窗口,在此期间任何钱包持有的代币供应量都不得超过 1%。
它在全部六条链上的运行时字节码完全一致:21,806 字节,keccak 0x1ca02ca53a3b2a2082f9e5dab6924e1339110e3037608f750981699678881fd4。Sourcify 在全部六条链上均报告创建字节码和运行时字节码完全匹配。/security 中提供了可自行检查这些内容的命令。
AdextoStakeHub(VERSION 1.0.0)是所有没有专属 AdextoAgentStake 的市场所使用的质押合约:每条链一个,于 2026-10-01 部署(Arc 于 2026-10-06 部署)。只有当其构造函数中固定的某个工厂通过 curveOf 返回对应代币的曲线时,它才会接受该代币;只有启动操作会写入该值,因此新市场从首个区块起即可质押,无需为其另行部署合约。它会拒绝拥有专属质押合约的四种代币,因此没有任何市场会有两个质押合约。最低质押量为代币当前供应量的 0.001%,且没有所有者、暂停、锁定或奖励机制。它的运行时字节码在全部六条链上完全一致(4,278 字节,keccak 0x88247303e4851282bbf22dd4f23e753b08a6862ea40f32d9c0464e92730b081a),因为它没有不可变量;Sourcify 在全部六条链上均报告完全匹配。
0.11.0 与 v1 一并列出,因为它创建了此前的六个市场,这些市场永久沿用其费率。每一行都注明从合约读取的 VERSION。0.12.0 一代于 2026-09-29 至 2026-10-01 期间在四个主网上线,随后被 v1 替代。它创建了一个未列出的测试市场(Monad 上的 $VOLT),不属于任何启动路径;其地址见发布版本 v1.0.2。
从源代码复现工厂字节码
使用 node scripts/compile-contracts.mjs --via-ir(solc 0.8.37、EVM cancun、200 次运行、via-IR),即可从提交 71b5adfe774ed7a93f9fe589b4430c8122febb1f 的源代码复现 v1 运行时字节码。编译输出与链上版本的区别仅在于保存不可变量 protocolTreasury 的两个槽位。将这两个槽位置零后,所有链上的代码与编译产物的哈希均为同一个值:0x0e70cb93fbb10b66109cc71d547329cb48b4c3953791c2c4609519ff92221d62。
浅克隆(git clone --depth 1)不包含该提交。请先通过完整哈希获取它:git fetch --depth 1 origin 71b5adfe774ed7a93f9fe589b4430c8122febb1f && git checkout FETCH_HEAD;或者不使用 --depth 进行克隆。质押枢纽是在提交 f8328ab43375c8a785ccf86fb4dfe39c83c2986f 中部署的。
这里的字节码并非必然完全一致。protocolTreasury 是 immutable,而 Solidity 会将不可变量放在运行时字节码中,因此只有在每条链上使用相同金库时,哈希才会匹配。如果有一条链使用了不同的金库,这项声明就不成立。各链的保留代码不同(Robinhood Chain 保留的代码更多,参见保留代码说明),但它们位于存储中,而非代码中。
| 合约 | 地址 | 备注 |
|---|---|---|
| AdextoFactory | 0x3dFcBEd7dd889F465cC9f75c430B43Ef873b6056 | 当前 · ADEXTO v1 · VERSION 1.0.0 · 21,806 B · 区块 109440540 · PROTOCOL_FEE_BPS 10,已从总额中划出 · 预留了 16 个代币代码 |
| AdextoFactory | 0x5800e9715a47a598fce9bc3B65a95FD6BeBf76A3 | 已被取代 · VERSION 0.11.0 · 21,281 B · 区块 102583076 · PROTOCOL_FEE_BPS 10,额外收取 · 其市场将永久维持这些费率 |
| ERC-8004 Agent(我们的) | 10247 and 10251 | 均已注册,且均归部署者所有 · 10251 是 $PARCEL 和已下架的 $CURB 绑定的 ID · ID 因链而异 |
SAi Monad($SAI) | 代币 0xD873B033e2dffbF7E3107CD61E7156cE23B39f20 · 曲线 0x6CA74a83eB8d7e9fbaBd443218d2554028eD35Ea | Monad 上首个 v1 市场,由工作室发起(0x0ad735f2…b64d,区块 109684452)· 绑定到 ERC-8004 Agent 10275,该 Agent 归其创建者钱包所有 · 代币、曲线和质押在 Sourcify 上均完全匹配 |
Loop($LOOP) | 代币 0x6AF1B9A42213e87B7f3b8a7Ac93447aEA7f615B2 · 曲线 0x55B9F98C78cf42186FB3827e0658E0d12C5A9189 | 2026-10-03 通过 MCP 发起:创建者钱包签署了证明和启动交易本身(0x086de87c…a9c4,区块 110082161)· 绑定到 ERC-8004 Agent 10276,该钱包在一分钟前注册了此 Agent · 质押存放在质押中心 |
| AdextoAgentStake | 0xAadb44692dC4c9A1759361ea973B83aa7f36700e | 运行中 · $SAI 质押 · minStake 10,000 SAI · 2,424 B · 无 owner() |
| AdextoStakeHub | 0xb89d17F7308Ac007b106EB400eB2A8CB51cf887A | 运行中 · 除 $SAI 外的所有 Monad 市场,来自 v1 和 0.11.0 工厂 · VERSION 1.0.0 · 4,278 B · 最低为供应量的 0.001% · 区块 109727181 · 无 owner() |
Arbitrum One · chain ID 42161
| 合约 | 地址 | 备注 |
|---|---|---|
| AdextoFactory | 0x79DF3671e7e7456832C84a34c2bC0DB7871C0E0E | 当前 · ADEXTO v1 · VERSION 1.0.0 · 21,806 B · 区块 510474755 · PROTOCOL_FEE_BPS 10,从总额中划出 · 预留了 16 个代码 |
| AdextoFactory | 0xE17f1027FC5f294327D701829baeD9d6519e922C | 已被取代 · VERSION 0.11.0 · 21,281 B · 区块 502476317 · PROTOCOL_FEE_BPS 10,额外收取 · 其市场将永久保留这些费率 |
| ERC-8004 Agent(我们的) | 1457 | 已注册,由部署者持有 · ID 因链而异 |
SAi Arbitrum($SAI) | 代币 0xC4b5eA97bd4e3f8Bc047fFCc74Ca9c2B6b426cb3 · 曲线 0x3F5F33e4042f6ee127b4e6bef9ceA7846763Da50 | Arbitrum One 上首个 v1 市场,通过 studio 启动(0x9f04d003…7d23,区块 510577974)· 绑定到 ERC-8004 Agent 1566,由其创建者钱包持有 |
Loop($LOOP) | 代币 0x2F4Ca22703B6440d434833315505a2281011B228 · 曲线 0x037F55c7BE6E6537A218bD533DE5aCC3aF3C3B0C | 于 2026-10-03 通过 MCP 启动:创建者钱包签署了证明和启动交易本身(0x0f8e469c…030e,区块 511223223)· 绑定到 ERC-8004 Agent 1578,该钱包在一分钟前注册了它 · 在质押中心进行质押 |
| AdextoAgentStake | 0x2fc2A49ea2e4357541Dda9488DCeadCD0c43B508 | 运行中 · $SAI 质押合约 · minStake 10,000 SAI · 2,424 B · 没有 owner() |
| AdextoStakeHub | 0xdf8891bA9fd8e3DC2E7D0A0ccae279247cd2ddf3 | 运行中 · 除 $SAI 外的所有 Arbitrum One 市场,涵盖 v1 和 0.11.0 工厂 · VERSION 1.0.0 · 4,278 B · 最低为供应量的 0.001% · 区块 510798163 · 没有 owner() |
Robinhood Chain · 链 ID 4663
一条 Arbitrum Orbit 链。ADEXTO v1 是这里的第一代,因此没有被取代的工厂。
| 合约 | 地址 | 备注 |
|---|---|---|
| AdextoFactory | 0x8e63e117E71A80Cfc10fDF375F079e2e29cd7D7D | 当前 · ADEXTO v1 · VERSION 1.0.0 · 21,806 B · 区块 76864198 · PROTOCOL_FEE_BPS 10,已从总额中划出 · 预留了 212 个代币代码:基础的 16 个、USDG,以及部署时链上活跃的 195 种代币化股票 |
SAi Robin($SAI) | 代币 0x4C63223B883B3096bC1Bd24087b56951D1dAC82d · 曲线 0x1b9d0221e2C7447845326A4a8C6B0f35c329500B | 全球首个 v1 市场,由工作室启动(0xe05bc1fb…f38e,区块 77064241) · 绑定到 ERC-8004 Agent 6525,由其创建者的钱包持有 |
| AdextoAgentStake | 0x01b250a2db25561dB185f4628B93C72048D8bc1B | 运行中 · $SAI 质押 · minStake 10,000 SAI · 2,424 B · 没有 owner() |
| AdextoStakeHub | 0x05EFA7F066FcbefbE650EDd58583C107831A600B | 运行中 · 除 $SAI 外,所有由 v1 工厂创建的 Robinhood Chain 市场 · VERSION 1.0.0 · 4,278 B · 最低为供应量的 0.001% · 区块 77733726 · 没有 owner() |
警告
脱离链 ID,地址毫无意义。 此处的工厂位于部署者的首个 nonce 地址,而在 Base 和 Monad 上,同一地址存放着一个无关的预发布合约。
Arc · 链 ID 5042
Circle 的 L1,原生 Gas 资产为 USDC(在原生层级有 18 位小数)。ADEXTO v1 是这里的第一代,于 2026-10-06 从提交 3b23f56 部署,其工厂合约源码与 71b5adf 完全相同。Sourcify 报告称,下方两个合约的创建代码和运行时代码均完全匹配。
| 合约 | 地址 | 备注 |
|---|---|---|
| AdextoFactory | 0x8e63e117E71A80Cfc10fDF375F079e2e29cd7D7D | 当前 · ADEXTO v1 · VERSION 1.0.0 · 21,806 B · 区块 24446119 · PROTOCOL_FEE_BPS 为 10,从总费用中扣除 · 预留 20 个代币代码:基础 16 个、ARC、EURC、USYC 和 CIRBTC |
SAi Arc($SAI) | 代币 0x670062eDe99Fc9Ac946895dB146b88D54b01c76e · 曲线 0x13Ffcc4933B6db23b85532C767b85913430b0624 | 于 2026-10-06 通过 MCP 上线:创建者钱包签署了证明和上线交易本身(0x90a09e61…6a47,区块 24465502)· 绑定到 ERC-8004 Agent 1421,该钱包在一分钟前注册了此 Agent · 通过 A2A 使用 x402 买入 · 在质押中心进行质押 |
| ERC-8004 Agent(我们的) | 1422 | 已注册,由部署者持有 · ID 因链而异 |
| AdextoStakeHub | 0xb264D861264B0e4f8fb98A61B7694BA8a3B6BBe3 | 运行中 · 所有 Arc 市场,来自 v1 工厂 · VERSION 1.0.0 · 4,278 B · 最低为供应量的 0.001% · 区块 24446365 · 没有 owner() |
警告
相同地址,不同链。 与 Robinhood Chain 一样,工厂位于部署者的首个 nonce 地址;质押中心的地址则在 Base 和 Monad 上对应着无关的预发布钩子。Arc 还会在原生转账中执行 Circle 的 USDC 区块名单:被列入区块名单的地址无法向 Arc 曲线付款,也无法从曲线收款。ADEXTO 合约本身没有黑名单。
Base 主网 · 链 ID 8453
| 合约 | 地址 | 备注 |
|---|---|---|
| AdextoFactory | 0xF5f904ca7763Fc6755bbCe5466a9DBd4C15c2708 | 当前 · ADEXTO v1 · VERSION 1.0.0 · 21,806 B · 区块 52008858 · PROTOCOL_FEE_BPS 为 10,从总费用中扣除 · 预留 16 个代币代码 |
| AdextoFactory | 0x216E7880D64D94335B583c539802d3e61958d4A2 | 已被取代 · VERSION 0.11.0 · 21,281 B · 区块 50971523 · PROTOCOL_FEE_BPS 为 10,额外收取 · 其市场将永久保留这些费率 |
| ERC-8004 Agent(我们的) | 84622 | 已注册,由部署者持有 · ID 因链而异 |
| AdextoStakeHub | 0x2ba1EcffCD624Dc18044531F3999F0445014240D | 运行中 · 所有 Base 市场,来自 v1 和 0.11.0 工厂 · VERSION 1.0.0 · 4,278 B · 最低为供应量的 0.001% · 区块 52052214 · 没有 owner() |
0G 主网 · chain ID 16661
| 合约 | 地址 | 备注 |
|---|---|---|
| AdextoFactory | 0xEBbE0fB112859b57A0ad1afbeD4978e43dC96c5D | 当前 · ADEXTO v1 · VERSION 1.0.0 · 21,806 B · 区块 45793987 · PROTOCOL_FEE_BPS 10,从总额中划出 · 已预留 16 个代码 |
| AdextoFactory | 0x51c4168226463F7e5A141e1c6D30520734BC840a | 已被取代 · VERSION 0.11.0 · 21,281 B · 区块 43704079 · PROTOCOL_FEE_BPS 10,在总额之外收取 · 其市场永久沿用这些费率 |
| ERC-8004 Agent(我们的) | 3545431 | 已注册,由部署者持有 · ID 因链而异 |
| AdextoAgentStake | 0x5b44AEA7AC49C7a6DA8f700D991852A2970b9231 | 运行中 · 为 Agent Compute 和市场的 Agent(ask_agent)质押 $ADEXTO · minStake 5,000 · 2,424 B · 无 owner() · 仅限 0G |
| AdextoStakeHub | 0x440B89416A3a907a7016F20A29DA18665269A52f | 运行中 · 所有 0G 市场($ADEXTO 除外),来自 v1 和 0.11.0 工厂 · VERSION 1.0.0 · 4,278 B · 最低为供应量的 0.001% · 区块 45891788 · 无 owner() |
部署者: 0x8a3c7524Aaed081825aC88eC7f4cCECFc583ee7D
协议金库: 0x24268Fffc119ec5550F68e80D94476fD64daE967,每条 0.11.0 和 v1 曲线中 0.10% 协议费用部分的不可变接收地址。它刻意不使用部署者地址:该密钥处于在线状态,且已经是活跃市场的 creator,如果使用该地址,协议收入和创建者收入在链上就无法区分。选定该地址时,它是一个新地址,没有代码、nonce 为 0 且余额为 0;截至 2026-10-06,它在全部六条链上仍然没有代码且 nonce 为 0。
诚实说明现状
哪些功能可用,以及这具体意味着什么。以下每个数据均来自链上或在线服务,并标明了读取日期。🟢 运行中 · 🟡 运行中,但存在本行所述的差距。
| 组件 | 状态 | 一句话说明 |
|---|---|---|
ADEXTO v1 (AdextoFactory 1.0.0) | 🟢 已在 6 条主网上线,当前版本 | 六条链上的字节码完全一致,在 Sourcify 上精确匹配,所有新部署都通过它完成。 |
AdextoFactory 0.11.0 | 🟢 已在 4 条主网上线,已被取代 | 仍无需许可;其中列出的六个市场永久维持 0.40% 的费率。 |
AdextoStakeHub 1.0.0 | 🟢 已在 6 条主网上线 | 任何市场从第一个区块起即可质押,无需为其部署任何内容。 |
| 协议费收入 | 🟢 正在六条链上累计 | 每条 0.11.0 和 v1 曲线都会收取 0.10% 的费用;金库从未发送过交易。 |
| ERC-8004 Agent 绑定 | 🟢 可用,可选加入 | 除非调用者拥有该 Agent,否则工厂会回滚;列出的 12 个市场中有 7 个已绑定。 |
| 通过网站启动 | 🟢 已在六条链上启用 | Studio 在所有链上都通过 v1 启动,支持 Express 和 Advanced。 |
创建者收益(/creator) | 🟢 已上线 | 按字段读取并匹配链上数据;两种领取路径都已在本地链上验证。 |
| 活跃市场 | 🟢 六条主网上共 12 个 | onchain-launches.json 中记录了链上存在的每个启动项目。 |
| 交易 | 🟢 已在六条链上上线,几乎全由我们完成 | 在列出的 12 条曲线上有 70 笔成交和一笔金库回购,每笔成交都由我们的某个钱包发起。这证明了交易路径可用,并不代表存在外部需求。 |
| MCP 服务 | 🟢 已上线,提供 14 个工具 | 使用 Agent 自己的密钥进行启动、质押和领取,另提供一个有上限、由运营方签名的购买工具。 |
| x402 边缘网关 | 🟢 在 Base 上结算;在六条链上交付 | 在六条链上均有付费交付。交付在扣费前执行,因此成交失败不会让买家损失费用。 |
| Agent Compute | 🟢 已在六条链上上线 | 质押即可获得 API 密钥,用于访问 0G Compute 路由器上的 OpenAI 兼容端点。 |
市场质押(ask_agent) | 🟢 已在每个市场上线 | 在市场合约中质押即可通过 MCP 启用其 Agent。 |
| Agent 推理(0G) | 🟢 可用 | 路由器报告其运行于 Intel TDX;这是路由器自己的说法,归因于路由器,并非我们验证所得。 |
| 0G DA 元数据锚定 | 🟢 已上线 | 列出的 12 个市场在 0G 主网上都有一笔存储交易。 |
| The Graph | 🟢 Base 和 Arbitrum One,包含 v1 | v1.0.1 为三代工厂建立索引,并已发布到 The Graph Network;其中每个活跃市场都与其曲线相符。 |
| Envio(Monad、Robinhood Chain、Arc) | 🟢 Monad 上的 0.11.0 和 v1,以及 Robinhood Chain 和 Arc 上的 v1 均已上线 | 其中每个活跃市场都与其曲线相符。 |
| 交易历史、持有者、仓位 | 🟢 从各自的启动区块起完整记录 | MCP trade_history 工具读取相同的数据源,并在全部 12 个市场上返回 complete: true。 |
| 无管理权限入口 | 🟢 由合约保证 | 所有费率均不可更改,启动路径上的任何部分都没有所有者或设置器,也无法从任何曲线中提取资金。 |
每一行背后的证据
| 组件 | 是否可用? | 具体含义 | |---|---|---| | 6 条主网上的 ADEXTO v1(`AdextoFactory` `1.0.0`) | **已上线,当前版本** | 由 [`scripts/deploy-factory.mjs`](scripts/deploy-factory.mjs) 于 2026-10-01 广播部署(Arc 于 2026-10-06 部署)。该脚本在发送前验证了工件与已提交源码一致、链能够执行字节码中的 `PUSH0` 和 `MCOPY`,并且模拟创建返回了工件的运行时代码。此后在每条链上读回验证:`VERSION` 为 `1.0.0`,从总费用中划出的 `PROTOCOL_FEE_BPS` 为 10,`protocolTreasury` 与上文公布的地址一致,六条链上的运行时代码逐字节相同(21,806 B),且每个预留代码都无法被认领,而对照代码仍可用。Sourcify:六条链均精确匹配。当时每条链上的 `totalProjectsCount` 都是 `0`;下方实时市场行显示的是今天的数量。 | | 4 条主网上的 `AdextoFactory` `0.11.0` | **已上线,已被取代** | 已被 v1 取代;v1 将协议费用部分计入总费用,并新增每个钱包的启动窗口。该版本仍已部署且仍可由任何人调用,其已列出的六个市场永久保持 0.40% 费用。在每条链上广播并读回验证:`VERSION` 为 `0.11.0`,`PROTOCOL_FEE_BPS` 为 10,`protocolTreasury` 与上文公布的地址一致,部署时 `totalProjectsCount` 为 0,四条链上的运行时代码逐字节相同(21,281 B)。 | | 6 条主网上的 `AdextoStakeHub` `1.0.0` | **已上线** | 由 [`scripts/deploy-stake-hub.mjs`](scripts/deploy-stake-hub.mjs) 于 2026-10-01 广播部署(Arc 于 2026-10-06 部署)。该脚本只有在源码已提交并位于 `origin/main`、工件与该源码一致、`onchain-launches.json` 中记录的该链所有实时市场(不包括排除的四个)都来自该中心的工厂,且模拟创建返回了工件的运行时代码时才会发送。此后在每条链上读回验证:`VERSION` 为 `1.0.0`,除数为 `100000`,工厂和排除列表正确,所有列出的市场均符合条件,并且对照地址遭到拒绝。Sourcify:六条链均精确匹配。每条链上部署一个合约,每个市场分别记录一个持仓,而且每次调用都会指定其代币,因此中心部署后启动的市场无需重新部署即可质押。它不在启动流程中:启动时不会调用它。2026-10-02 读数:五个中心中的一个持仓,Monad 上质押了 10,000 `$PARCEL`,由部署者质押以端到端测试流程。2026-10-03,两个 `$LOOP` 市场都通过 MCP 在各自链的中心中完成质押(见 MCP 行)。 | | 协议费用收入 | **已在全部六条链上启用并持续累积** | 每条 `0.11.0` 和 v1 曲线都会收取并累积这部分费用。2026-10-04 从链上读取:已有 `0.000047209005338664 0G` 被领取并转入金库,另有 `0.001658416602021935 0G` 在 0G 曲线上累积,等待任何人领取;Monad 上有 `0.036789333545034613 MON`,Arbitrum One 上有 `0.000000272065659405 ETH`,Base 上有 `0.00000008030021884 ETH`,Robinhood Chain 上有 `0.00000004 ETH`。Arc 自 2026-10-06 上线后,当天 SAi Arc 的 `protocolOwed` 读数为 `0.000097 USDC`。六条链上金库的 nonce 都是 `0`:它从未发送过交易。2026-10-06,它在 Base 上收到的 2.04 USDC x402 付款通过 EIP-3009 授权转给了部署者,授权由部署者提交([`0x77012680…c7af`](https://basescan.org/tx/0x7701268043f2d531d7dfad9b35cd577795671af4bd4449ee67c302bab292c7af));上述协议费用未被动用。每条曲线上的目的地址都是 `immutable`,因此无法更改,也没有 setter 可供尝试。 | | ERC-8004 Agent 绑定 | **可用。可选,启动时强制验证** | 启动时传入 Agent ID,工厂会调用 `ownerOf(agentId)`;除非你拥有该 Agent,否则会回退。省略该参数即可通过一笔交易完成启动,无需 Agent。截至 2026-10-06,12 个已列出市场中有七个读数为 `agentBound true`:Monad 上的 `$PARCEL`(`10251`)、SAi Monad(`10275`)、Monad 上的 `$LOOP`(`10276`)、SAi Arbitrum(`1566`)、Arbitrum One 上的 `$LOOP`(`1578`)、Robinhood Chain 上的 SAi Robin(`6525`)以及 SAi Arc(`1421`)。0G 上的**首个** `$ADEXTO` 市场也绑定了 Agent(`3545431`)。四个 `$SAI` Agent 和两个 Loop Agent 均由启动对应市场的创建者钱包持有,其代币页面从代币合约读取不可变绑定。当前的 `$ADEXTO` 读数为 `agentBound false`,因为它重新启动到 `0.11.0` 时移除了绑定,而 `agentBound` 是不可变的;完整说明见 [ERC-8004 Agent 身份](#erc-8004-agent-identity)。未使用的功能:声誉和验证注册表,以及 `supportsInterface`。因此,这里只集成了该标准的三个注册表之一,并不符合 ERC-8004,本文件也不会如此宣称。 | | 通过网站启动 | **已在六条链上启用** | 六个 `NEXT_PUBLIC_CURVE_FACTORY_*` 均已设为上方的 v1 地址,因此工作室会在当前一代合约上启动,包括 Robinhood Chain。`NEXT_PUBLIC_CURVE_FACTORY_PREV_*` 保存 `0.11.0` 地址,仅用于验证,并且有意排除在所有“此链能否启动”的检查之外。 | | 工作室:费用卡片、快捷模式、公告草稿 | **已上线;曾在本地测试,并用于三个主网启动** | 签名前,费用卡片会根据所选链的实时 `eth_gasPrice` 和通过对 v1 工厂执行 `estimateGas` 测得的燃料单位,显示启动在该链上的燃料费;同时显示“无需存入流动性”、“你获得 0 个代币”以及该链上的交易费用。工作室默认打开快捷模式,该模式会询问名称、代码和图片(还可选填一行文案供图片生成器据此绘图);`/studio?mode=advanced` 会显示全部设置。两种路径使用相同的启动函数。快捷模式、图片上传和撰写链接均已在本地链上完成端到端测试。随后在主网上使用完整高级流程启动了 SAi Robin、SAi Arbitrum 和 SAi Monad,包括根据文案生成 3D 图片、公开 GitHub 链接、由创建者拥有的 ERC-8004 注册、证明和启动交易。 | | 创建者收益(`/creator`) | **已上线;读取结果已与链上数据核对,领取流程已在本地链上测试** | 对于任意地址,该页面会列出所有将该地址记为 `creator()` 的市场,涵盖所有链,并以原生单位和美元显示截至目前的收益(已支付加可领取部分)。已逐字段将部署者创建的全部 14 个市场与直接 RPC 读取结果比对,完全一致。可以逐个市场调用 `claimCreatorFees` 领取,也可以通过标准 Multicall3 **用一笔交易**按链领取;其代码在全部六条主网上完全相同。两种领取方式都已在本地链上运行,并精确核对到 wei 级别的余额变化。主网上目前仅在 `$PARCEL` 和 `$ZEEBO` 上领取过创建者费用(`totalCreatorFeesPaid` 大于零,读取于 2026-10-04)。 | | 自行验证检查清单(`/security`) | **已上线** | 按链提供可复制粘贴的 `cast` 命令,用于检查工厂地址、创建区块和交易、运行时代码大小及哈希、`VERSION`、`PROTOCOL_FEE_BPS`、缺少的 `owner()`、已编译源码是否与部署代码匹配、从市场自身曲线读取的费用,以及曲线的状态变更函数;每项均附有链上返回的结果。清单中的每条命令都已按原样在全部六条主网上运行。页面也说明了每项检查不能证明什么。 | | 实时市场 | **12 个,分布于全部六条主网** | 列于[在六条主网上线](#live-on-six-mainnets)。当前 v1 工厂上的 `totalProjectsCount` 在 Monad、Arbitrum One、Robinhood Chain、Base、0G 和 Arc 上分别为 `2 · 3 · 1 · 0 · 0 · 2`(2026-10-06),其中包括测试代码;旧工厂仍属于统计范围,因为其市场无法移除。每个已存在于链上的启动都只在 [`src/config/onchain-launches.json`](src/config/onchain-launches.json) 中记录一次,并标明状态(实时、已被取代,或演示录像中的一次性测试代码);如果链上出现未在该文件中登记的启动,`audit_consistency.mjs` 会导致构建失败。`allProjects` 只追加、不删除,因此工厂原始计数器只会增加;它并非增长数据,不会被当作增长数据引用。 | | 交易/兑换 | **已在全部六条主网上线,且几乎全由我们发起** | 每条链上都有真实成交。2026-10-06 从各曲线的 `swapCount` 读取:`$ADEXTO` 为 27(26 笔成交和一次金库回购,合约也会计入回购),`$PARCEL` 为 19,`$ZEEBO` 为 6,`$WOMBO` 为 5,Monad 上的 `$LOOP` 为 3,Arbitrum One 上的 `$LOOP` 为 1,SAi Robin 为 3,`$BLOOP` 为 2,SAi Arbitrum 为 2,`$ADT`、SAi Monad 和 SAi Arc 各为 1;12 个已列出市场合计 71 笔,其中 70 笔为成交。同日从每笔成交的 `trader` 读取,确认全部 70 笔都由我们的钱包发起;即使由他人付款,x402 交付也由我们的中继器发送。几乎所有成交的费用也都是我们支付的:包括部署者自己的测试交易、演示钱包,以及经由我们中继器发送的 x402 交付。唯一的例外发生在演示之前:2026-09-28,x402 在 `$ADEXTO` 上向一个非部署者地址交付了一笔。因此,这证明交易流程可用,但不能证明存在外部需求。最重要的是卖出流程:先执行 `approve`,再针对曲线执行 `sell`,这是债券曲线通常被指责缺少的退出路径。 | | 面向 AI Agent 的 MCP 服务 | **已上线,提供 14 个工具** | `https://adexto.xyz/api/mcp` 对 `tools/list` 的响应包含 `list_markets`、`get_market`、`quote_buy`、`how_to_pay`、`buy_token`、`pay_and_buy`、`trade_history`、`check_stake`、`access_message`、`ask_agent`、`prepare_launch`、`register_launch`、`prepare_stake` 和 `prepare_claim`;这些工具从网站使用的同一注册表中解析数据,因此刚启动一分钟的市场也能在第一次请求时返回。服务支持 2026-07-28 MCP 修订版(无状态、`server/discover`)以及通过 `initialize` 打开的 2025 客户端。`prepare_launch`、`register_launch`、`prepare_stake` 和 `prepare_claim` 工具让 Agent 可以用自己的密钥启动、质押和领取:它们返回未签名交易,Agent 的密钥永远不会传到服务端。2026-10-03 在 Monad 主网上完成端到端测试:一个钱包注册了自己的 ERC-8004 身份,启动并绑定到该身份的 `$LOOP`(两次调用 `prepare_launch`,在本地签名并发送,然后调用 `register_launch`);第二个钱包通过 MCP `buy_token` 使用 Base 上的 0.10 USDC 经由 x402 购买 `$LOOP` 并通过 `prepare_stake` 质押,之后 `ask_agent` 返回了回答。当天晚些时候在 Arbitrum One 上用同两个钱包重复了相同测试:当地的 `$LOOP` 绑定到 Agent `1578`,并在 Arbitrum One 的质押中心中完成质押。绑定了 ERC-8004 Agent 的市场会在 [/agents](https://adexto.xyz/agents) 中列出链上 Agent Score。一个代码可以在多条链上交易,因此市场工具和 x402 网关都接受 `chainId`(网关上使用 `?chain=`);如果不指定,则使用该代码最早的市场。`ask_agent` 只会回答在该市场质押合约(该市场自己的合约或其所在链的质押中心)中拥有有效质押的地址,且必须通过签名的 `access_message` 证明。`pay_and_buy` 会在服务端完成购买,并如实说明其方式:**签名由此服务上的运营者密钥生成,并非由模型控制的钱包生成。**该工具受 `x-agent-key` 请求头限制,金额上限为 `0.20 USDC`,所有参数(接收方、资产、金额)都取自网关自身的质询,而非模型,因此即使 Agent 完全受到提示词注入攻击,最多也只能购买我们自己的市场,并将款项发送到我们自己的金库。 | | 自有 AMM(`AdextoCurve`) | **每次启动时部署** | 曲线随工厂一同部署,每个市场一个。 | | Agent 推理(0G) | **可用** | 市场 Agent 的聊天通过 0G Compute Router 运行(默认模型为 `glm-5.3`)。路由器会报告每个模型均通过 dstack 获得 Intel TDX 证明,我们会准确展示其报告内容。该标签是路由器自己的说法,并会注明来源,因为我们不会自行获取或验证原始证明。 | | Agent 计算(质押以获取 API 密钥) | **已在全部六条主网上线;四种质押提供分级额度,其余市场的额度由费用提供** | 在 0G 上的 `AdextoAgentStake` 中至少质押 5,000 $ADEXTO,或者在 Monad、Arbitrum One 或 Robinhood Chain 上某个 `$SAI` 市场的质押合约中至少质押 10,000 `$SAI`(见下一行),该地址即可获得对应代币的 API 密钥,用于访问兼容 OpenAI 的端点 `https://compute.adexto.xyz/v1`,该端点通过 0G Compute 路由器提供 `0g/deepseek-v4-flash`。密钥按代币区分:页面是一个清单,每个已勾选的代币都有独立质押、独立密钥和按该代币质押等级设定的额度,签名消息会注明代币。**所有其他市场**也会列出,并从注册表读取,因此新市场启动后无需修改代码即可显示:在其所在链的 `AdextoStakeHub` 中至少质押该市场总供应量的 0.001%,即可获取无分级额度的密钥。其可用额度会根据该市场交易所支付的 0.10% 协议费中的 50% 累积;费用按扫描读取曲线时的原生代币价格估值,再按每百万模型代币 $0.3168 换算(即该模型在 0G 上的价格,输入和输出按 90/10 混合计算),由质押者共享,且只统计密钥发放后支付的费用。因此,中心密钥初始没有额度,在累积到至少一次最低请求所需额度(823 个代币)前,会在路由器上保持禁用状态;无人交易的市场无法提供计算资源。按当前价格,约 $0.52 的交易额可支付一次最低请求。2026-10-02 在 Monad 上完全由部署者完成端到端测试:使用其 `$PARCEL` 中心质押发放的密钥在初始状态下已禁用,且没有累积额度;一笔买入再卖出的 10 MON 往返交易支付了 `0.01996 MON` 协议费;下一次扫描为该密钥计入 `1,059` 个代币(不共享该市场此前产生的费用),并将其启用;密钥随后成功处理请求。路由器记录使用了 831 个代币后,下一次扫描将其禁用,剩余 228 个代币,不足一次请求所需额度。随后该密钥被撤销。密钥仅显示一次,网站不会存储。2026-10-04 从链上读取:0G 上质押了 10,000 $ADEXTO。只有质押记录在链上;可用额度通过定期扫描路由器使用情况来执行,因此密钥可能超出额度,最多多出一次扫描周期的用量。 | | 市场质押(`ask_agent`) | **所有市场均已上线** | 四个市场各自拥有一个 `AdextoAgentStake`;所有其他市场(包括每个新启动的市场)从第一个区块起,都会在其所在链的 `AdextoStakeHub` 中质押(地址见[主网部署](#mainnet-deployments)),最低质押量为其供应量的 0.001%。四个专用质押合约分别是 0G 上的 $ADEXTO 质押合约(见上方 Agent 计算行,最低质押量为 5,000 ADEXTO,于 2026-10-01 被列为市场质押,因此其代币页面和 `ask_agent` 也会读取该合约),以及 Monad、Arbitrum One 和 Robinhood Chain 上 `$SAI` 的 `AdextoAgentStake`;它们均在市场启动后由 `scripts/deploy-market-stake.mjs` 部署:最低质押量为 10,000 SAI,无所有者、无锁定期、无奖励,且均通过 Sourcify 精确匹配。任一合约中的质押都会通过 MCP 开启该市场的 Agent:`ask_agent` 会针对签署 `access_message` 的地址,在合约(对于中心合约则是指定代币的质押记录)上检查 `isActive`,并在该次调用中根据链上读取的数据回答。相同的质押也计入 Agent 计算密钥(见上一行)。每个代币页面都会显示质押面板;`src/config/market-stakes.ts` 中列有该市场自己的合约时使用该合约,否则使用质押中心。 | | x402 边缘网关 | **在 Base 上结算;已在全部六条主网上提供付费交付** | 报价、付款和交付通过同一端点完成。已在全部六条链上测试付费交付:0G、Base、Arbitrum One、Monad、Robinhood Chain 和 Arc。Arc 上的首次交付是在区块 `24465562`,交付了 `24,006.92 SAI`,交易为 [`0xf1569a02…8efe`](https://explorer.arc.io/tx/0xf1569a0240333edd81cbd693e54af3ac53180e46d027765ced65eb8c97a78efe),随后在 Base 上以 [`0x7da5096c…f3e7`](https://basescan.org/tx/0x7da5096ca9c4467069625967f1de287630d41ea0b9ee35a5c5a3f1d21c22f3e7) 结算了 `0.10 USDC`。`DELIVERY_RPC` 会将所选市场的 `chainId` 映射到对应端点;对于像 `$SAI` 这样在多条链上交易的代码,可使用 `?chain=` 消除歧义。通过 EIP-3009 授权在 Base 上收取 USDC,目标链上的曲线则将代币发送到买家的地址。交付先于扣款执行,因此成交失败的成本由我们承担,而非买家。2026-10-05,Robinhood Chain 上的首次交付在区块 `80802140` 交付了 `23,818.8894 SAI`,交易为 [`0xfe7edd…33c195`](https://robinhoodchain.blockscout.com/tx/0xfe7eddf599e9f53afb6fe1346bfdd95643cce93ad77c53b3e863d91f3a33c195);六秒后在 Base 上以 [`0x06f24c…37e271`](https://basescan.org/tx/0x06f24c7151b5422f142078ab9c2f2041f1d631e89916e874845a3dea5537e271) 结算了 `0.10 USDC`。买家是通过 MCP `buy_token` 使用自己的密钥签名的演示 Agent 钱包,其在两条链上的交易计数都保持为 `0`。该笔成交使用了 `117,601` 单位燃料,其中 `1,642` 被报告为 `gasUsedForL1`,由中继器支付的费用为 `0.0000024 ETH`。2026-10-01,Arbitrum 上 `$SAI` 的首次交易交付了 `24,013.3828 SAI`,交易为 [`0xbed111…3773b0`](https://arbitrum.blockscout.com/tx/0xbed111e865d325f24ca68fb9bdb44f87f3e979e78b706e967791a3e8e23773b0),随后在 Base 上通过 `0xe76dd0…4d797` 结算了 `0.10 USDC`;买家的交易计数在两条链上都没有变化。更早的成交全部 `status 1`,均由中继器 `0xDe1f…C627` 提交,其中包括 Monad 上的 `$PARCEL`、Arbitrum 上的 `$WOMBO`、Base 上的 `$BLOOP` 和 0G 上的 `$ZEEBO`。x402 交付就是普通的 `buy`,因此会支付相同的费用,并增加回购金库余额,而不会在链之间转移收入。详见 [x402 边缘网关](#x402-edge)。 | | 0G DA 元数据锚定 | **已上线** | 启动元数据会被锚定,其存储根以 `metadataRoot` 的形式随调用数据传递。全部 12 个已列出市场都包含 `daStorageTx`;2026-10-06,在 0G 主网上读取的这 12 笔交易状态均为 `status 1`,包括通过 MCP 发起的三个市场:两个 `$LOOP` 市场和 SAi Arc。如果 0G 存储节点落后于链,上传会在 45 秒后放弃:随后启动会继续执行,并使用元数据字节的 keccak 承诺,同时报告 `daStorageOk: false`,而不是一直等待反向代理将 API 响应替换为 HTML 超时页面。 | | The Graph 索引 | **已在 Base 和 Arbitrum One 上线,涵盖全部三代工厂,包括 v1** | `adexto-base` 和 `adexto-arbitrum` 的 `v1.0.1` 已同步到链头,且 `hasIndexingErrors: false`;这些链上的每个实时市场都返回其曲线存储的数值。2026-10-06 读取:Base 上 `$BLOOP` 的 `swapCount` 为 2,`volumeNative` 为 80300218841094;Arbitrum One 上 `$WOMBO` 的 `swapCount` 为 5、`volumeNative` 为 200113996278028,SAi Arbitrum 的 `swapCount` 为 2、`volumeNative` 为 71640800989138,`$LOOP` 的 `swapCount` 为 1、`volumeNative` 为 36230801410387。`v1.0.0` 为 v1 工厂添加了数据源,并像曲线一样按卖出的总值计数;`v1.0.1` 返回完全相同的实体,仅修改了架构文档。The Graph 在 0G、Monad 和 Robinhood Chain 上没有 Subgraphs 服务。2026-10-06 发布到 The Graph Network,未使用策展信号。详情见 [The Graph](#the-graph)。 | | 交易历史、持有者和持仓 | **从每个市场启动区块起完整记录** | `src/lib/market-index.ts` 会为每个市场索引自启动区块以来的所有代币 `Transfer` 和曲线 `Swap`,数据存储在磁盘上,并在每次请求时从上次扫描的区块继续扩展;扫描位置比链头落后若干个确认区块,避免链重组产生虚假的转账。这使持有者列表、你的持仓及其盈亏,以及超出日志窗口范围的图表历史成为可能。向前回溯的 RPC 扫描会通过 16 次调用提供最新成交;如果该链有索引器,则会优先使用(Monad、Robinhood Chain 和 Arc 上的 Envio;Base 和 Arbitrum One 上的 The Graph)。每条链的 `eth_getLogs` 扫描范围都会实际测量,而不是凭空假定(0G 现在拒绝任何超过 100,000 个区块的范围;自 2026-10-05 起,Base 的公共端点拒绝任何超过 500 个区块的范围;自 2026-10-06 起,Arbitrum One 的公共端点在单个筛选位置包含多个值时拒绝任何超过 100,000 个区块的范围,不过每个筛选位置只有一个值时,500,000 个区块仍可通过)。每次运行时,`audit_consistency.mjs` 都会使用应用实际发送的最宽筛选条件,针对实时 RPC 测试每条链上已配置的扫描范围,因为范围过宽导致的失败与“尚无交易”在 UI 中无法区分。MCP 的 `trade_history` 工具会按相同顺序读取相同数据源:Envio、然后是子图,最后是此索引与扫描结果的合并数据。2026-10-06 读取结果显示,全部 12 个市场的 `complete: true`,且返回行与代币页面一致:`$ADEXTO` 26 笔,`$PARCEL` 19 笔,`$ZEEBO` 6 笔,`$WOMBO` 5 笔,Monad 上的 `$LOOP` 和 SAi Robin 各 3 笔,`$BLOOP` 和 SAi Arbitrum 各 2 笔,`$ADT`、Arbitrum One 上的 `$LOOP`、SAi Monad 和 SAi Arc 各 1 笔。该工具只列出 `Swap` 事件,因此 `$ADEXTO` 显示为 26,而其曲线的 `swapCount` 为 27:合约还会计入一次金库回购。如果某个市场的索引仍在追赶链头,响应会显示 `complete: false`,并指出尚未读取的区块范围,而不是把不完整的列表当作完整历史。 | | Envio 索引(Monad、Robinhood Chain、Arc) | **已上线;Monad 上 `0.11.0` 和 v1 的完整历史,以及 Robinhood Chain 和 Arc 上 v1 的完整历史** | 自 2026-10-05 起,[`envio/`](envio/) 也会索引 Robinhood Chain(4663)上的 v1 工厂及其部署的所有曲线;自 2026-10-06 起,还会索引 Arc(5042)上的 v1 工厂,网站从这里读取这些链上的交易历史。每个 ID 都采用 `_` 格式,因为 Arc 和 Robinhood Chain 上的工厂地址相同,对应序号的启动地址也相同:Arc 上的 `$ARCTEST` 与 Robinhood Chain 上的 `$SAI` 正好占据相同位置。2026-10-06 完整重新索引后读取:SAi Arc 的 `swapCount` 为 1,未列出的 `$ARCTEST` 为 0,SAi Robin 为 3;它们分别显示为独立记录,每条记录都包含曲线存储的 `volumeNative`。在 Monad 上,它同时索引 `AdextoFactory` `0.11.0` 和 v1(`1.0.0`),以及它们在 143 号链上部署的所有曲线;每条曲线的 `curveVersion` 均来自启动该曲线的工厂。2026-10-05 完整重新索引后读取:`$PARCEL`(`0.11.0`)的 `swapCount` 为 19,SAi Monad(`1.0.0`)为 1,`$LOOP`(`1.0.0`)为 3;每条记录都包含曲线存储的 `volumeNative`,其中计入卖出。HyperSync 在不到 45 秒内覆盖了自 `0.11.0` 工厂部署以来的全部 1.93M 个区块;通过 `rpc.monad.xyz` 扫描相同范围约需六小时,因为该端点将 `eth_getLogs` 的范围限制为 100 个区块。此索引器独立构建,而非在子图中再增加一个网络,因为 `graphprotocol/networks-registry` 将 `monad` 列为**不支持** Subgraphs(仅支持 Firehose 和 Substreams)。通过对照合约存储而非索引器自身进行验证:涵盖两个 Monad `0.11.0` 市场的 22 个数据,包括实时费用账本。需要免费的 `ENVIO_API_TOKEN`。[详情](envio/README.md)。 | | 无管理权限 | **由合约保证** | 所有费用率都是 `immutable`,启动流程中的任何合约都没有所有者或 setter,曲线中也没有提现函数。因此,任何费用率都无法被转移,任何市场都无法被掏空,也无法通过升级更改交易者已同意的条款。这是协议的核心保证,可在 `contracts/` 中核查,而非仅靠承诺。 |
深入探讨
ERC-8004 Agent 身份
它可以正常工作,并且默认关闭,只有在你主动启用时才会开启。 启动时传入 Agent ID,AdextoFactory 就会在 ERC-8004 身份注册表上调用 ownerOf(agentId),除非你拥有该 Agent,否则会拒绝启动。这样,代币就无法绑定他人的身份并继承其声誉。省略 ID,启动就只需一笔交易,且不附带 Agent。
说明
准确说明范围:此集成仅涉及身份注册表。 该标准包含三个注册表,启动时真正重要的是所有权。启动不需要声誉和验证功能,因此不会触及它们,也未实现
supportsInterface。把这称为“符合 ERC-8004”会把一个注册表夸大成三个。
| 身份注册表 | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432,六个主网上的地址相同,且已验证可响应 ownerOf |
| 我们自己的 Agent | 已在五个主网上注册:Monad 10247 和 10251、Arbitrum One 1457、Base 84622、Arc 1422 和 0G 3545431;每个都经 ownerOf 确认归部署者所有(2026-10-04;Arc 为 2026-10-06)。Monad 有两个,因为在 Monad 工作期间又注册了一个;10251 是 $PARCEL 绑定的 ID。部署者在 Robinhood Chain 上没有 Agent:那里绑定的 6525 属于创建并启动 SAi Robin 的钱包 |
| 启动时验证 | 在 Monad、Arbitrum One、Robinhood Chain、Arc 和 0G 上。 列出的 12 个市场中,有 7 个读取到 agentBound true。第一个 $ADEXTO 市场也读取到 agentBound true, agentId 3545431,而当前上线的市场没有,因为重新启动时丢失了绑定。 见下文 |
| 回归问题,之所以说明是因为它无法撤销 | 当前上线的 $ADEXTO 市场丢失了绑定。 0.10.0 市场 0x0860a80f…37C6 绑定了 3545431。为加入协议费部分而重新启动到 0.11.0 时,脚本在 scripts/relaunch-market.mjs 中硬编码发送了 bindAgent: false,尽管同一脚本谨慎保留了所有费率。agentBound 是 immutable,因此 0xA1358C17…1DF7 永远无法绑定;只有再次重新启动才能修复。该脚本现在会读取旧代币的绑定并沿用,如果 Agent 已不再归我们所有就拒绝继续,并在触及注册表前断言新创建代币的 agentBound |
| 测试网上的注册表 | 不存在,因此只能在主网或本地开发链上验证 Agent 路径 |
| 标准状态 | EIP-8004 是一份草案,因此我们集成所依据的内容仍可能变化。这里说的是 EIP,而不是我们的代码 |
| 注册表的控制方 | 不是我们。 它是由第三方拥有的可升级代理,因此其行为可能在我们未参与或未同意的情况下发生变化 |
| 声誉/验证注册表 | 未使用 |
| 查询代币信息 | agentBound(),然后是 agentId() 和 agentRegistry() |
ADEXTO 运营的 Agent 都指向永久卡片。 每个 Agent 都通过 setAgentURI 将其 agentURI 设置为 https://adexto.xyz/agents/<chainId>/<agentId>/registration.json。该文件列出 MCP 和 x402 端点,并包含一个指回该身份的 registrations 条目。scripts/check-agent-cards.mjs 会检查每张卡片;截至 2026-10-04,10 张卡片全部通过。
| 链 | Agent | 所有者 | 绑定市场 | 设置卡片的交易 |
|---|---|---|---|---|
| Monad | 10247 | 部署者 | 无 | 0x0b0c971a…14cc |
| Monad | 10251 | 部署者 | $PARCEL | 0x4fe88217…1292 |
| Monad | 10275 | 创建者钱包 | SAi Monad | 0x7219def8…7399 |
| Monad | 10276 Loop Agent | 创建者钱包 | $LOOP | 0x59eded5a…c4ac |
| Arbitrum One | 1457 | 部署者 | 无 | 0x24efbf3c…7c8d |
| Arbitrum One | 1566 | 创建者钱包 | SAi Arbitrum | 0x8022d2b5…9d28 |
| Arbitrum One | 1578 Loop Agent | 创建者钱包 | $LOOP | 0x48d605be…e0fa |
| Robinhood Chain | 6525 | 创建者钱包 | SAi Robin | 0xa61fc8aa…509e |
| Base | 84622 | 部署者 | 无 | 0x9c833c3e…114 |
| 0G | 3545431 | 部署者 | 首个 $ADEXTO(0.10.0) | 0x07ff15e6…6115 |
部署者是 0x8a3c…ee7D;创建者钱包是演示钱包 0x4247…daa5,它在启动前注册了自己的 Agent。两个 Loop Agent 都在启动前通过该钱包自行注册,然后通过 MCP 发布 $LOOP,它们的卡片使用市场自己的徽标。托管卡片的代价是,任何控制 adexto.xyz 的人都可以更改卡片内容;无论哪种情况,代币绑定的市场都不可变。
否则会让你栽跟头的五件事,第一件已经让我们栽了
重新发布会丢失绑定,除非有东西将它保留下来。 首个 $ADEXTO 市场由 0.10.0 工厂创建,地址为 0x0860a80f…37C6,其读取结果为 agentBound true、agentId 3545431、agentRegistry 0x8004A169…a432。为了让市场支付协议费用部分,该市场被重新发布到 0.11.0;当前市场 0xA1358C17…1DF7 的读取结果却是 agentBound false、agentId 0,注册表地址为零地址。
没有任何操作失败。scripts/relaunch-market.mjs 将 bindAgent: false 和 agentId: 0 作为字面值发送;就在同一个文件里,它还费尽心思保留每一项费用率,以确保“唯一的区别是协议费用部分”。交易成功了,发布后的每项检查都通过了,却没有任何代码读取刚创建的代币上的 agentBound()。由于 agentBound 是 immutable,当前市场永远无法绑定。只有再次重新发布才能恢复绑定,但那样会舍弃该市场的交易历史。
现在,该脚本会从旧代币读取 agentBound()、agentId() 和 agentRegistry(),检查 ownerOf(agentId) 是否仍返回部署者,并在即将未绑定的情况下停止而不继续;它会将该 id 传递给 deployTrinity,然后在触碰注册表之前,从新创建的代币读取绑定信息。参数正确和结果正确是两回事,这个 bug 就出在两者之间的空隙里。
绑定是独立于启动的步骤。 ERC-8004 要求注册文件包含自己的 agentId,而 ID 只有在 register() 返回后才会存在,因此提前固定的文件无法包含它。创建者先注册,再将 ID 传入启动流程。不填写身份信息可让启动只需一笔交易,因此仅 Gas 成本这一特性不受影响。
工作室可以自行完成注册:由创建者使用自己的钱包在选定的链上发起一笔 register() 交易,随后从铸造事件中读取新 ID,并填入启动表单。该文件是在 ID 尚不存在时构建的,工作室会有意跳过第二笔 setAgentURI 交易,因此文件不包含自己的 agentId,也没有指向该身份的 registrations 条目。scripts/register-agent-8004.mjs 采用更完整的流程,并会写入包含该 ID 的文件。
应读取 agentBound() 标志,而不是 agentId()。 Agent ID 0 在六条主网上都是真实 Agent,且都有真实所有者,因此 0 不可能表示“没有 Agent”。早期版本曾将 agentId == 0 用作该哨兵值;在它被固化到不可变字节码之前,对实时注册表进行测试发现了这个问题。
在配置好 IPFS 固定存储之前,注册文件使用 data:。 ERC-8004 允许使用 base64 编码的 data: URI 存储完全在链上的元数据,这里默认采用这种方式,因为无人固定存储的 ipfs:// CID 会永久留下一个失效链接。设置 PINATA_JWT 即可改用固定存储;CID 会在本地重新计算,并与服务报告的结果进行比对。这一点很重要:一项针对 ERC-8004 的实证研究发现,大多数注册都是没有可用端点的占位符(arXiv 2606.26028);而读取这六条链中四条链上的 Agent #40 后发现,0G 上是空字符串,Monad 上是未编码的原始 JSON,Base 上则是一个内嵌 ID 与代币不匹配的 HTTPS URL。
脚本从铸造的 Transfer 事件中读取 ID,而不是假设 ID 按顺序递增,然后使用包含该 ID 的重建文件调用 setAgentURI。
node scripts/register-agent-8004.mjs --chain base # dry run, no gas
node scripts/register-agent-8004.mjs --chain base --broadcast # registers, then sets the URI
node scripts/test-erc8004-binding.mjs # 24 assertions, local devchain
在四条链上注册部署者的 Agent,总共八笔交易,花费约 $0.10;将前八个 Agent 指向各自的卡片,Gas 约花费 $0.05。
Agent 对 Agent:闭环之处与断裂之处
这正是将 Agent 身份与绑定曲线配对的意义所在,而且闭环的每条边都能端到端传递价值,并已用真实资金验证,而非仅凭推理得出。买家无论是人还是 Agent,都无需人工、账户或银行卡即可付款。买到的是另一条链上市场中的头寸,这笔钱最终会到达代币本身。
| 边界 | 状态 | 证据 |
|---|---|---|
| Agent 拥有链上身份 | 可用 | ERC-8004 绑定;在启动时通过 ownerOf(agentId) 验证 |
| 大模型可以驱动整个流程 | 可用,但需明确签名者 | /api/mcp 上的 MCP 服务(目前有 14 个工具)。一个在 0G Compute 路由器上运行 zerog/glm-5.3 的 Agent 发现了 $ZEEBO,获取报价、完成购买,并读取了成交结果。该授权由此服务上的运营方密钥签名,而非由 Agent 签名;有关这种设计方式及其上限的原因,请参见 x402 边界。持有自身 USDC 的 Agent 可通过 buy_token 自行签署授权,买家钱包在 2026-10-03 两次购买 $LOOP 时就是这样做的 |
| 买家发现交易条款 | 可用 | HTTP 402 + WWW-Authenticate: x402 + x402 v2 accepts[],其中包含资产、金额、收款方和完整报价 |
| 买家证明其有能力付款 | 可用 | 恢复 EIP-3009 签名并与 from 匹配,同时检查余额和链上 nonce 状态 |
| 买家实际付款 | 可用 | 在主网 USDC 上调用 transferWithAuthorization。0.10 USDC 从付款方转入财库;重放的授权会被拒绝 |
| 买家收到代币 | 可用 | 曲线的 buy 函数接受接收方,因此代币会直接发送到付款方地址,且数量高于报价中的 minTokensOut |
| 收益用于购买代币 | 可用 | 向曲线进行普通原生代币转账,且 calldata 为空,即可执行市场买入 |
| Agent 销毁其购买的代币 | 可用 | executeTreasuryBuyback 会从调用者自己的余额中销毁代币,并受 agentIdentity 和曲线限制 |
因此,整个闭环目前已可运行,无需新增合约:买家在一条链上付款,曲线在另一条链上交付;曲线上花费的原生代币可以用于回购并销毁代币,从而永久减少供应量。
最后两个边界的验证方式,以及在此基础上构建前需要了解的两项机制
最后两个边界是在 0G 主网上通过实际操作验证的,而不是推测得出的。向曲线发送 0.003 0G 且不带 calldata,返回了 148.317329 枚代币、增加了 swapCount,并改变了现货价格,因为 receive() 会将调用路由到 _buy。随后,executeTreasuryBuyback 销毁了其中的 74.158664 枚,totalSupply 恰好减少了相同数量。随机地址调用同一函数时会被拒绝,并返回 Unauthorized agent。
- 销毁资金来自交易,无需任何人决定即可执行,且供应量已经减少。
treasuryNative通过交易手续费中的回购部分获得资金,因此既不能向其中存入资金,也无须这样做:x402 交付本身就是一次buy,因此会为该部分付费,并让金库在每次成交时增长。购买结算后,边界会通过executeBuyback使用金库中的资金进行回购并销毁,但前提是金库价值至少达到触发所需 gas 费用的 3 倍:一次调用约需0.0005 0G,而每次成交贡献0.000257 0G,因此若每次都销毁,销毁的价值会低于支出。该条件会读取链上状态,无须等待人工操作。首次销毁了7.110759702852663544 $ADEXTO,使总供应量降至999,999,918.730575824909329011:0x792023ab…8ab66bc5。executeBuyback不限制调用者,因此销毁不依赖我们运行该函数;这一点已通过模拟随机地址调用得到验证。 agentIdentity在启动时设置一次,且不可更改。 在运行中的 $ADEXTO 代币上,它是0x8a3c…ee7D。该权限用于限制销毁操作,因此在启动时选择地址,就决定了谁能在市场存续期间触发销毁。
x402 边界
它只卖一种东西:买家用自己持有的 USDC,买入其中一个市场的头寸。 在 Base 上支付 0.10 USDC,市场所在链上的曲线就会把代币发送到你自己的地址,无需跨链桥,也无需持有该链的 Gas 资产。六个主网均已接入交付,且六个主网上均已完成付费交付:Monad、Arbitrum One、Robinhood Chain、Base、0G 和 Arc。市场也位于 Base 时,支付和交付都在同一条链上完成,没有任何资产跨链:代码路径相同,少一次跳转。
| 步骤 | 状态 | 实际发生的事 |
|---|---|---|
| 1. 报价 | 可用 | 未付款的调用会收到 HTTP 402、WWW-Authenticate: x402 标头,以及一个 x402 v2 accepts[] 块,其中列出资产、确切金额、收款方和超时时间;此外还会附带一个 quote,说明曲线、花费的原生代币金额,以及此次买入不会低于的 minTokensOut。 |
| 2. 验证付款 | 可用 | 调用方为 USDC 签署 EIP-3009 TransferWithAuthorization:采用类型化数据,因此无需 Gas,也无需授权额度。系统会恢复签名并与 from 匹配,从 USDC 合约而非请求中读取 EIP-712 域,并在执行其他操作之前检查链上 nonce。 |
| 3. 先交付,再收款 | 可用 | 曲线会先以付款方作为接收方执行 buy。只有在该交易收据确认后,才会向 USDC 提交授权。响应正文会返回两笔交易的哈希,结算结果也会在 X-PAYMENT-RESPONSE 中重复返回。 |
第三步曾经缺失,如今已通过真实资金完成,而不是仅仅宣告完成。一次请求在 Base 上完成结算,并在 16.2 秒后于 0G 上完成交付;重放的授权会被拒绝,并返回 invalid_transaction_state。完整的载荷参考、状态码和两笔交易的哈希见:adexto.xyz/x402。
信任边界、库存,以及 LLM 可完成的购买流程
有三件事很容易被一笔带过,但不应该:
- 结算依靠的是 USDC 自身的签名验证,而不是我们自创的方案。 EIP-3009
TransferWithAuthorization由代币合约本身验证,因此无需信任托管方,也无需让集成方学习任何自定义机制。若调用方仍发送已弃用的X-402-Authorization标头,系统会明确拒绝并说明原因,而不是静默失败。 - 中继器密钥已充值并正在使用,其影响范围也经过刻意限制。 系统会读取并使用
X402_RELAYER_PRIVATE_KEY来提交两笔交易。该密钥属于专用运营方,而非部署者:部署者密钥从未放入 Worker。由于transferWithAuthorization无需许可,且其全部内容(包括to和value)都由付款方签名,该密钥无法转移任何人的资金,也无法更改付款去向。密钥泄露最坏只会导致 Gas 和库存被耗尽。 - 两笔交易并非原子操作,交付能力也有限。 付款在 Base 上结算,而交付发生在目标链上,链上没有任何机制将两者绑定。由于交付成功前不会扣款,买家没有资金风险,但确实需要依赖我们提交该笔
buy。完成订单也意味着要花费我们持有的原生代币库存,因此端点会在库存不足时返回503,且不会触及任何授权。
这一边界明确体现在载荷中,而非文字说明里:每个 402 响应都会携带 quote.inventory.remainingBuys 和 quote.inventory.inStock,因此集成方从首次响应中就能获知限额,而不是等到构建付款客户端后才发现。
所有交付目标都不是硬编码的。 Worker 中的 DELIVERY_RPC 会将市场的 chainId 映射到相应端点,因此目标链取决于行情代码最终解析到的市场。付费交付的交易哈希见状态表。
大模型可以完成购买,但要如实表述这一点很重要。MCP 服务提供十四种工具,其中 pay_and_buy 可在服务端完成购买:Agent 选择市场和购买数量,而 EIP-3009 授权由本服务上的运营者密钥签署。Agent 不持有资金。任何条款(接收方、资产、金额)都会从网关自己的 402 挑战中读取,并在签名前与硬编码的限制进行比对;由于代币始终转给签名者,交付地址绝不会暴露;整个端点还受 x-agent-key 请求头控制,并将金额上限设为 0.20 USDC。因此,准确的说法是Agent 决定买什么并执行了购买,而不是Agent 用自己的资金付款。我们已在 0G 上针对 $ZEEBO 端到端测试此流程:购买交易在区块 44560323 成功,随后于 Base 的 51419336 区块完成结算。持有自身 USDC 的 Agent 则使用 buy_token 并自行签署授权;两个 $LOOP 市场均于 2026-10-03 以这种方式购入,SAi Robin 也于 2026-10-05 在 Robinhood Chain 上以这种方式购入。
The Graph
已部署至 Base 和 Arbitrum,并由网站读取:SUBGRAPH_URL_* 指向这两个子图。清单和各网络配置由 subgraph/chains.json 与 build/deployments.json 生成(在 subgraph/ 中运行 npm run networks)。
| Subgraph | Version | Endpoint |
|---|---|---|
adexto-base | v1.0.1 | https://api.studio.thegraph.com/query/1757874/adexto-base/v1.0.1 |
adexto-arbitrum | v1.0.1 | https://api.studio.thegraph.com/query/1757874/adexto-arbitrum/v1.0.1 |
两个子图自 2026-10-06 起均已发布至 The Graph Network 的 Arbitrum One,由部署者 0x8a3c…ee7D 持有,且没有策展信号:ADEXTO Base 和 ADEXTO Arbitrum One。该网络提供与 Studio v1.0.1 相同的部署(Base 上为 QmT1W8wY…qGCj9m,Arbitrum One 上为 QmYpYjRU…ehvMo9),发布时使用的标签为 v1.0.0。网站读取上文的 Studio 端点。
**v1.0.1 仅修改了文档。**其映射、ABI、数据源和起始区块与 v1.0.0 完全一致,两个清单仅有一行不同:schema 文件,其注释和字段说明已翻译为英文。Studio 不允许将已有版本标签用于新的部署,因此采用了补丁版本。
v1.0.0 会索引全部三代工厂,包括 v1。 此标签沿用 ADEXTO v1 的版本号。同一构建最初以 v0.12.0 部署到 Studio,因此两个标签在每条链上都对应同一次部署(Base 上为 QmeRWYsg…NV3jQ6,Arbitrum One 上为 QmRRZJM8…jsfTcxr)。v1 工厂有自己的数据源 AdextoFactoryV1。v1 发出的事件与 0.11.0 完全相同(TrinityProjectDeployed、AgentBound、CurveInitialized 和包含 11 个字段的 Swap 具有相同的签名和 topic0),这一点已通过 scripts/verify-subgraph.mts 对照合约源代码验证,并通过 Arbitrum One 上真实的 v1 日志验证,因此它复用了 0.11.0 的 ABI 和曲线模板,只添加了工厂地址。生成 networks.json 的生成器也随之更改:现在会按合约名称和版本匹配每个数据源,并且只要有任何活跃市场来自没有数据源覆盖的工厂,就会拒绝写入。旧规则“当前条目”和“最新的已取代条目”会把 v1 地址写入 0.11.0 数据源,并在 v1 成为当前版本时移除 $BLOOP 和 $WOMBO。
六条链中有三条无法使用 Subgraph Studio。这是 The Graph 的覆盖范围所致,并非我们的选择,信息来自其网络注册表(v0.8.6)。Arc 可以使用 Subgraph Studio,但我们选择用 Envio 为其建立索引,与 Monad 和 Robinhood Chain 使用同一个索引器:
| 链 | 目标 | 原因 |
|---|---|---|
| Arbitrum One、Base | Subgraph Studio | 提供 Subgraph 服务,并启用索引奖励:已部署并发布,见上文 |
| Monad | 改用 Envio | 已列出,但仅由 Firehose 和 Substreams 提供服务,不提供 Subgraph 服务 |
| Robinhood Chain | 改用 Envio | 已列出,但仅由 Firehose 和 Substreams 提供服务,不提供 Subgraph 服务 |
| Arc | Envio | 提供 Subgraph 服务。我们选择用 Envio 为其建立索引,使用已覆盖 Monad 和 Robinhood Chain 的索引器 |
| 0G | RPC 日志和市场索引 | 完全未列入 graphprotocol/networks-registry |
v0.11.1 存在的原因、v1.0.0 中的卖出交易量修复,以及更早的版本
v0.11.0 在两条链上都没有索引任何内容,而 v0.11.1 的存在就是为了解决这个问题。 很长一段时间里,结果为空是正确的:Base 和 Arbitrum 有工厂,但没有市场。后来 $BLOOP 和 $WOMBO 出现了,但端点依然为空,尽管它们已同步到远超这两个项目部署区块的位置,且 hasIndexingErrors: false。
问题出在已发布的构建中,而不是映射中。subgraph/networks.json 是生成文件,而提交的副本在每个网络上都将 AdextoFactory(0.11.0 这一代)记录为 0x0000000000000000000000000000000000000000,并且使用的是旧工厂的 startBlock。因此,已部署的清单只配置了 0.10.0 数据源,而 0.10.0 在 Base 或 Arbitrum 上都没有创建任何市场。指向零地址的数据源不会索引任何内容,而且会报告自身运行正常,这正是为什么值得对照链上状态检查索引器,而不是只看它自身的状态字段。
npm run networks 会用真实地址和起始区块重新生成该文件,而 v0.11.1 就是重新发布到 Studio 的这一构建。两条链上的结果都证实了这一点,数据读取于 2026-09-30:Base 返回一个项目 BLOOP,其中有一条曲线,curveVersion 0.11.0、swapCount 2、volumeNative 80300218841094;Arbitrum 返回 WOMBO,其 swapCount 5、volumeNative 200113996278028。两种情况下的数字都与曲线合约存储的数字一致。
这两个端点都不是关键依赖:SUBGRAPH_URL_0G 为空,0G 交易来自 RPC 日志和市场索引,而 Monad 由 Envio 提供服务。两个测试网 slug adexto-base-sepolia 和 adexto-arbitrum-sepolia 虽然在 chains.json 中命名,但从未在 Studio 中创建,因此向它们部署会返回 Subgraph not found。它们索引的是 0.10.0 工厂,而且两条链上都没有市场,所以没有造成任何损失。
从 v0.11.0 起,子图会并行索引不同代际的曲线,因为 0.10.0 和 0.11.0 的 Swap 事件并不相同:0.11.0 在两个储备量之前插入了 protocolFee,因此有 11 个字段,且 topic0 不同。一个数据源无法匹配这两种事件,所以若将现有数据源改指向新工厂,就会漏掉旧工厂创建的所有市场,却仍报告运行正常。共有三个工厂数据源(0.10.0、0.11.0、v1)和两个曲线模板,映射逻辑统一保存在 src/shared.ts 中。
Curve.curveVersion 也是出于同样的原因:没有它,旧曲线上的 protocolFeeBps: 0 就无法与不收取费用的新曲线区分开来,这会让人误以为费率可以更改。实际上不行:它在每条曲线中都是 immutable。
更早的版本:v0.10.1 修正了 openingPriceNative 与 spotPriceNative 之间的 1e18 单位不匹配问题。v0.10.2 从清单描述中移除了“Agent 回购销毁”,因为 executeBuyback 没有调用者权限门槛,将其归因于 Agent 会夸大合约的实际行为。
两个子图都已发布到去中心化网络,但没有策展信号。索引器按信号比例获得报酬,因此没有独立索引器有理由接入它们。网站读取的是上文的 Studio 端点,而非网关。
可通过 subgraph/docker-compose.yml 运行自托管服务。我们会探测公开 RPC 的 eth_getLogs 上限,而不是凭空假定,并按链记录在 subgraph/chains.json 中:0G 为 2,000 个区块,Monad 则硬性限制为 100 个,超过后会返回 -32614。
安全
重要
这些合约尚未经过人工审查。已部署的字节码是永久性的:修复只能通过在新地址部署新工厂来推出,而所有现有市场都会继续使用其创建时的代码。
多个分析器和模糊测试工具会对合约进行检查(Foundry 模糊测试与不变式测试、Echidna、Slither、Aderyn、Solhint 和 Semgrep),所有发现的问题都会在 adexto.xyz/security 上公开分级处理;该页面还提供可复制粘贴的 cast 命令,供你自行检查每次部署。这并非人工审查的替代方案。audit/README.md 是审查范围文档:涵盖 v1 的 5 份合约和注册表接口,共 825 行代码,并列出预期结果(forge test:80 项通过,0 项失败)。
请按照 SECURITY.md 中的说明私下报告漏洞。请勿为此公开创建 issue。
反馈与想法
遇到了故障、令人困惑的地方,或者觉得不错?请创建一个反馈 issue。关于接下来该构建什么的想法,请前往 Discussions › Ideas,其他人可以在那里为想法投票。
本地开发
git clone https://github.com/0xcuy/adexto.git
cd adexto
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000
合约可重复编译,无需运行 Hardhat:
node scripts/compile-contracts.mjs --via-ir # -> build/artifacts/
node scripts/deploy-factory.mjs --chain base # dry run, no gas
node scripts/deploy-factory.mjs --chain base --broadcast # spends gas
发送任何内容前,试运行会验证制品是否由当前源文件和固定的编译器设置编译而成、链是否会执行字节码使用的操作码,以及模拟创建是否会返回制品的运行时代码,并将 treasury 写入其不可变槽位。它会打印所有预留的代币代码(scripts/reserved-symbols.json),因为预留是永久性的。只有这些源文件已提交并推送后,才允许向主网广播;之后还会从链上读取回每一项信息。
可以通过 UI 在本地链上完成完整的发布、购买和领取流程,而不是在主网上操作:
cd devchain && npx hardhat node # chain 31337 on :8545
node scripts/deploy-factory.mjs --chain devchain --broadcast
set -a && . ./.env.local && set +a && source scripts/devchain-env.sh
npx next build && npx next start -p 3100 # NEXT_PUBLIC_* are inlined at build time
有一点无法通过这种方式隔离:如果 .env.local 中配置了 0G 存储密钥,本地发布仍会在 0G 主网上锚定其元数据,每次发布约需花费 0.0013 0G。
关于预留代币代码
预留分为两个层面,约束的对象各不相同。
- 链上,每个 v1 工厂中。 工厂的构造函数会将一组代币代码写入
symbolRegistry并标记为预留,且无法解除预留,因此无人(包括我们)能在该工厂上使用这些代码发布代币。列表见scripts/reserved-symbols.json。每条链都预留相同的 16 个代码:六个0.11.0市场(ADEXTO、ADT、ZEEBO、WOMBO、BLOOP、PARCEL),防止有人冒名使用这些名称上线,以及十个主要资产名称(ETH、WETH、USDC、USDT、BTC、WBTC、0G、A0GI、MON、ARB)。Robinhood Chain 还额外预留了 196 个:USDG,以及工厂部署时在链 4663 上列为活跃状态的 195 种代币化股票,以防曲线代币冒充该链上的股票。该日期之后上市的股票不在保护范围内。可通过isSymbolAvailable查询上述任一代码。0.11.0工厂没有此类列表。 - 应用层。
src/lib/registry.ts中的checkSymbolAvailable会拒绝所有人的主要资产名称,以及协议自己的代币代码(ADEXTO、ADX、AEGIS、QNOVA、CSENT、MQUANT),除非调用者属于默认为空的ADEXTO_OFFICIAL_DEPLOYER。这只约束通过/api/deploy发布的代币;直接调用工厂时,仅受该工厂自身列表的约束。
许可证
Business Source License 1.1(BUSL-1.1)。条款见 LICENSE。
变更日期:2030-09-29(MIT)。
© 2026 ADEXTO Core Contributors · adexto.xyz
横幅背景由 0G Compute router 上的 z-image-turbo 生成。图表和图标由 render.mjs 渲染。来源记录:SOURCES.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
