EST. 2023 — Token Bound Function Oracle AMM

从一纸标准,到两条链上的产品:
ERC-7527 函数预言机 AMM 全景解读

让 NFT 自带定价函数与流动性 —— 无需买家、无需 LP、无需订单簿。本站解读 ERC-7527 标准作者本人的完整技术栈:标准参考实现、生产级拍卖定价引擎,以及 Ethereum 与 BNB Chain 上的两代前端。

01
EIP 草案 · ERC-7527
04
源码仓库
02
链 · Ethereum + BNB
01
原创定价范式 · FOAMM
(01) TL;DR
FOAMM IN THREE LINES

这套体系在做什么?

核心思想可以压缩成三句话:

N°1 — LIQUIDITY

包装即流动性

用户把 ETH / ERC20「包装(wrap)」成 NFT,随时可「解包(unwrap)」按函数报价赎回。合约本身就是永远在场的对手方,资产发行即可交易。

N°2 — ORACLE

函数即预言机

价格不靠订单簿、不靠外部喂价,而是由合约内嵌的确定性数学函数(getWrapOracle / getUnwrapOracle)当场算出 —— 这就是 FOAMM(Function Oracle AMM)。

N°3 — SOLVENCY

结构即偿付保证

对称取价(参考实现)或 LIFO 价格栈(生产实现)在构造上保证:无论谁、以什么顺序退出,池内本金永远刚好够付。偿付能力由数据结构保证,而非信任。

(02) Repositories
STANDARD → CODE → PRODUCT

四个仓库,一条垂直技术栈

仓库所有者 lanyinzly(Lanyin/Elaine Zhang)正是 ERC-7527 标准草案第一作者 —— 这是「标准 → 参考实现 → 生产合约 → 产品前端」的完整闭环。

合约 · Foundry教学参考

EIP7527 — 标准参考实现

ERC-7527 的最小可运行实现:Agency(托管+做市)、App(NFT)、Factory(克隆部署)三件套。README 本身是一篇完整的中文教程。

  • 线性定价 f(x) = k·(1 + x/100),k = basePremium
  • ClonesWithImmutableArgs:策略参数写进字节码、零存储读取
  • wrap / unwrap 对称取价,保证池子可全额清算
合约 · Foundry生产引擎

wrap-auction — 拍卖定价引擎

生产级 Agency 策略 WrapV3Aution:把线性曲线换成时间衰减拍卖,叠加持有人分红、ERC-6551 收入账户与 ERC-7615 回调。

  • Q96 定点数学 + 5 节点有理插值 + 指数衰减
  • LIFO 价格栈:赎回价 = 最近一次成交价,本金恒可清算
  • 5% 费用 → 3/5 给池主与金库(rebase)、2/5 给持有人分红
  • 42 个集成测试,lcov 覆盖率约 95%
前端 · Next.js 13Ethereum 主网 / Sepolia

wrap-interface — 协议级控制台

Wrap Protocol 全功能前端:竞拍 .agency 域名 NFT → 工厂部署自己的池 → wrap/unwrap → 质押 / Uniswap 集成,The Graph 驱动历史价格图表。

  • wagmi CLI + GraphQL codegen,工程化程度高
  • dotAgency 竞拍:commit + priceNonce 机制
  • 对接链上 WrapV2 版本合约(仓库引擎为 V3 演进版)
前端 · Vite + React 19BNB 主网

wrapx_app — 消费级产品(最新)

WrapX:去门槛的简化产品。任何人一键建池,把 BNB/ERC20 包装成命名 NFT(WToken),主打 loyalty / retention 的「用户—协议关系凭证」叙事。

  • deployWrapX(name, basePremium, maxSupply, token) 一步建池
  • 可插拔 TokenURI 引擎 + IPFS 图片管理(apply-to-all)
  • The Graph Studio 子图 + Pinata IPFS
(03) Architecture
FOUR DIAGRAMS

架构关系

四张图看懂整个体系:仓库之间的关系、链上合约的组织、一笔交易的完整生命周期、以及标准依赖。

FIG.01总体关系:标准 → 合约 → 应用 → 数据

flowchart TB subgraph STD["标准层"] ERC7527["ERC-7527 草案
Token Bound Function Oracle AMM
(作者: Elaine Zhang 等, 2023-09)"] end subgraph CONTRACT["合约层 (Foundry)"] EIP["EIP7527
标准参考实现
线性定价 f(x)=k(1+x/100)"] AUCTION["wrap-auction
WrapV3Aution 生产策略
时间衰减拍卖 + LIFO 价格栈
+ ERC-6551 + ERC-7615"] end subgraph FRONTEND["应用层"] WI["wrap-interface
Next.js · Ethereum
协议级控制台"] WX["wrapx_app
React 19 · BNB
消费级产品 WrapX"] end subgraph DATA["数据层"] SG["The Graph 子图 ×2"] IPFS["IPFS / Pinata"] end ERC7527 -->|"规范 → 代码"| EIP EIP -->|"接口继承 IERC7527Agency/App"| AUCTION AUCTION -->|"WrapV2 ABI 对接"| WI AUCTION -.->|"架构延续"| WX WI --> SG WX --> SG WX --> IPFS style ERC7527 fill:#16261b,stroke:#2bee4b,color:#e9f2ea style EIP fill:#1a221c,stroke:#c8d2c8,color:#e9f2ea style AUCTION fill:#1a221c,stroke:#2bee4b,color:#e9f2ea style WI fill:#1a221c,stroke:#91a194,color:#e9f2ea style WX fill:#1a221c,stroke:#fafffa,color:#e9f2ea

FIG.02链上合约架构(以太坊体系)

每个「池」= Factory 用 ClonesWithImmutableArgs 克隆出的一对 Agency + App;池主收入经 rebase 打入其 .agency NFT 的 ERC-6551 账户。

flowchart TB OWNER(("池主")) -->|"竞拍铸造"| DOT["DotAgency NFT
(.agency 域名式资产)"] DOT -->|createAccount| TBA["ERC-6551 代币绑定账户
(收款账户)"] OWNER -->|"deployERC7527"| F["WrapV2Factory"] F -->|"clone + immutable args"| AG["Agency 实例
托管资产 · 定价 · 分红 · feeCount"] F -->|clone| APP["App 实例 (Agent NFT)
ERC721Enumerable · 命名 · tokenURI"] AG <-->|"onlyAgency 双向绑定"| APP USER(("用户")) -->|"wrap: 存入资产"| AG AG -->|"mint NFT"| APP USER -->|"unwrap: 销毁赎回"| AG AG -->|"rebase: 费用 5/6"| TBA AG -->|"费用 1/6"| V["Vaults
foundation / swap / staking / DAO"] AG -.->|"push 回调 (ERC-7615)"| PW["PushWhitelist"] style DOT fill:#16261b,stroke:#2bee4b,color:#e9f2ea style TBA fill:#16261b,stroke:#2bee4b,color:#e9f2ea style AG fill:#1a221c,stroke:#fafffa,color:#e9f2ea style APP fill:#1a221c,stroke:#91a194,color:#e9f2ea

FIG.03一笔 wrap → unwrap 的完整时序

sequenceDiagram participant U as 用户 participant AG as Agency (拍卖引擎) participant APP as App (NFT) participant TBA as 池主 6551 账户 U->>AG: wrap(to, data) + 支付 AG->>AG: getWrapOracle() → 拍卖报价 + 5% 费 AG->>APP: mint(to) → tokenId AG->>AG: 价格压栈 push(swap) AG->>AG: 费 3/5 → feeCount, 2/5 → 持有人分红 AG-->>U: NFT (WToken) Note over U,AG: 时间流逝,他人 wrap,价格沿曲线上行… U->>AG: unwrap(to, tokenId) AG->>APP: burn(tokenId) AG->>AG: 取栈顶价并弹栈 pop() AG-->>U: 栈顶价 − 5% 费 + 累计分红 Note over AG,TBA: 任何人可调 rebase() AG->>TBA: feeCount × 5/6 → 池主

FIG.04标准依赖图

flowchart LR AUC["wrap-auction 实现"] --> E7527["ERC-7527
FOAMM 核心"] AUC --> E6551["ERC-6551
代币绑定账户"] AUC --> E7615["ERC-7615
原子推送钩子"] E7527 --> E721["ERC-721 / Enumerable"] E7527 --> E20["ERC-20"] E7527 --> E1167["EIP-1167 + CWIA
最小代理克隆"] E7527 -.-> E5679["ERC-5679
mint/burn 扩展"] style E7527 fill:#16261b,stroke:#2bee4b,color:#e9f2ea style AUC fill:#1a221c,stroke:#fafffa,color:#e9f2ea
(04) Mechanism
TWO CURVES, ONE STACK

核心机制:两条定价曲线 + 一个价格栈

参考实现用最简单的线性曲线立论;生产引擎换成「成交瞬时抬价、随时间回落、永不破上次成交价」的时间衰减拍卖。下面的图表与模拟器帮助直观理解。

线性键合曲线(EIP7527 参考实现)

f(x) = k·(1 + x/100),k = 0.1 ETH。第 n 个 NFT 比第 1 个贵 (n−1)%。完全确定、可手算、无套利。

时间衰减拍卖溢价(wrap-auction)

距上次成交的时间 → 下一次成交相对上次价的溢价倍数。示意图,基于源码(Q96 定点 + 有理插值 + expWad)反推的近似。

LIFO 价格栈模拟器 — 为什么池子永远付得起?

每次 wrap 把成交价压栈(此处简化为 +3%/次),每次 unwrap 按栈顶价(最近一次成交价)赎回并弹栈。注意观察:池内本金始终恰好等于栈内价格之和 —— 偿付能力是结构性的。

0
NFT 流通量
0.000 ETH
池内本金
0.100 ETH
下一次 wrap 价
当前 unwrap 可得(栈顶价)
✓ 可全额清算
本金 = 栈内价格之和

注意 LIFO 语义:赎回价是「最近一次成交价」,不是你自己的买入价 —— 早买晚卖者赚取曲线上行差价,这是一个有顺序博弈的退出游戏。

价格不是被发现的,而是被计算的。
偿付能力由结构保证,而非信任。
— FOAMM · Function Oracle AMM 设计哲学
(05) Highlights
SIX THESES

六大亮点

1

范式级:函数预言机解决长尾流动性

AMM 要 LP、订单簿要对手方、NFT 市场要买家;FOAMM 把价格内嵌为确定性函数,发行即流动、零冷启动、无无常损失。

2

「可解包性」作为安全不变量

对称取价 / LIFO 价格栈让「池子永远付得起」由数据结构数学保证,而非依赖治理或超额抵押 —— 干净的安全设计哲学。

3

极致的克隆 + 不可变参数模式

每个池的策略参数写进代理字节码尾部、零 storage 读取,建池成本极低且参数不可篡改。

4

协议收入 NFT 化(ERC-6551)

池主收入打入 .agency NFT 绑定账户,收入权随 NFT 转让自动转移 —— 「经营一个池」变成「持有一个生息 NFT」。

5

面向可组合性的钩子(ERC-7615)

unwrap 原子推送回调给白名单合约,让借贷、清算、自动复投等下游协议可实时消费「解包」事件。

6

标准→实现→产品的完整闭环

EIP 作者亲自走完「立标准 — 做旗舰协议(Ethereum)— 做消费产品(BNB)」全链路,在 EIP 生态中相当少见。

(06) Risks & Issues
MITIGATIONS & CHECKLIST

风险与开放问题

基于全量源码审阅,分两部分:先看生产实现(wrap-auction)已经把哪些坑填掉了,再给打算自己实现这个开放标准的人一份注意清单。

现有实现已落地的对策

以下每条措施都可以在 WrapV3Aution 源码中直接验证。

已落地

标准重入锁

WrapV3Aution 继承 OpenZeppelin ReentrancyGuard,wrap / unwrap / rebase 全部 nonReentrant —— 取代了参考实现中脆弱的 totalSupply 差值断言。

已落地

资金路径全面 SafeERC20

所有代币转账统一 safeTransfer / safeTransferFrom,USDT 类非标准代币不再静默失败。

已落地

调用方滑点保护

wrap 由调用方传入 slippagePrice,链上报价一旦超出立即 revert(WrapV3AutionExceededSlippagePrice)—— 签名与上链之间报价跳变不会导致超付。

已落地

偿付能力的结构化保证

LIFO 价格栈(autionPriceList)+ basePremium 锚点:赎回价恒等于最近成交价,池内本金按构造恒可全额清算,不依赖治理与人为承诺。

已落地

测试纪律

42 个集成测试、lcov 覆盖率约 95%,覆盖 wrap / unwrap / rebase / 分红等核心路径。

想自己实现 ERC-7527?七条注意清单

ERC-7527 是开放标准,任何人都可以实现自己的 Agency / App。参考实现是教学模板,不是安全基线 —— 动手前先核对:

01

用标准重入锁

不要照抄参考实现的 totalSupply 差值断言;复用任何代码前,先重新审视它「先转账、后铸造」的调用顺序。

02

资产与 id 的基本卫生

统一 SafeERC20;tokenId 用自增或由 App.mint 统一分配,不要直接信任外部 calldata。

03

守住「可解包」不变量

任何自定义定价函数都必须保证:池内本金 ≥ 全部未赎回 NFT 的应付总额,且对任意退出顺序成立。对称取价与价格栈都只是实现这条不变量的手段。

04

定价常数要可验证

公开拟合常数的推导脚本,补 differential / invariant 测试。当前拍卖曲线的 Q96 魔数链上不可验证,仍是这套体系最大的未关闭盲区。

05

部署、源码与审计要有映射

公示「部署地址 ↔ 源码 commit ↔ 审计报告」对照表。当前链上 V2 合约与仓库 V3 源码不一致,就是这条的反面教材。

06

处理经济参数的边界情况

供应量极小时,首批铸造者会捕获不成比例的分红(应设最小供应门槛或调整权重);分账取整产生的尘埃也要有明确去处。

07

把 LIFO 语义讲给用户听

赎回所得是「最近一次成交价」,不是持有人自己的买入价。前端若不明示,迟早演变成客诉与信任危机 —— 请把它写在每个 unwrap 按钮旁边。

(07) Ecosystem
STANDARDS & SIBLINGS

它和什么东西有关联?

直接依赖的标准,以及概念上的「近亲」赛道。

ERC-7527 · FOAMM 本体 ERC-721 · NFT 表达 ERC-20 · 计价货币 EIP-1167 + CWIA · 克隆部署 ERC-6551 · 代币绑定账户 ERC-7615 · 原子推送 ERC-5679 · mint/burn 扩展 The Graph · 索引 IPFS · 元数据
概念近亲相同点差异点
键合曲线 / friend.tech / pump.fun价格沿确定函数随供应移动,合约即对手方WrapX 标的是「用户—协议关系凭证」,且持有者分享后来者交易费
渐进荷兰拍 GDA(Paradigm)成交瞬时抬价 + 随时间指数衰减wrap-auction 加了「永不破上次成交价」的硬地板与有理插值平滑
NFT-AMM(sudoswap / NFTX)都为 NFT 提供链上流动性sudoswap 仍需 LP 注入流动性,FOAMM 连这一步都省去
DeFi 2.0(OlympusDAO)rebase、金库、协议自有流动性、分红WrapX 的本金清算由价格栈结构性保证,不靠 (3,3) 博弈
ENS / 域名资产dotAgency 即 ENS 式命名 + resolver.agency 名称本身可生息(池子收入归其 6551 账户)
(08) Future
NEAR / MID / FAR

未来可以应用在哪里?

按「与现有代码的距离」从近到远分三档。

近场 · 架构几乎可直接支撑

流动性与会员经济

中场 · 需补合约 / 经济模型

结构化金融与游戏经济

远场 · 需更多研究 / 标准成熟

可组合金融基元

(09) FAQ
QUICK ANSWERS

常见问题

关于 ERC-7527,人们(以及 AI 助手)问得最多的问题,给出简短、可独立引用的回答。

ERC-7527 是什么?
ERC-7527 是一个以太坊标准——「代币绑定的函数预言机 AMM(Token Bound Function Oracle AMM)」。它让 NFT 自带链上定价函数与流动性,可以直接对合约铸造(wrap)和赎回(unwrap),无需买家、无需流动性提供者、无需订单簿。该标准由 Elaine Zhang 等人撰写,并于 2023 年 9 月发布为草案。
FOAMM(函数预言机 AMM)是什么?
FOAMM 即 Function Oracle AMM(函数预言机 AMM)。价格不来自订单簿或外部喂价,而是由合约内嵌的确定性数学函数(getWrapOracle / getUnwrapOracle)当场算出——函数本身就充当预言机。
ERC-7527 和 friend.tech、pump.fun 这类键合曲线有什么不同?
它们的共同点是价格沿确定函数随供应移动、合约即对手方。ERC-7527 的不同在于三点:被包装的资产代表「用户—协议关系凭证」;池子的偿付能力由结构(LIFO 价格栈或对称取价)保证;持有者还能分享后来者支付的交易费。
为什么 ERC-7527 的池子永远偿付得起?
赎回按 LIFO 价格栈上的最近成交价支付(生产版 wrap-auction 引擎),或采用对称取价(参考实现)。池内本金始终恰好等于应付价格之和,因此无论以什么顺序退出都能全额付清——偿付能力是数据结构的性质,而非依赖信任或治理。
LIFO 赎回对持有人意味着什么?
当你 unwrap 时,拿到的是最近一次成交价(栈顶),而不是你自己的买入价。早买晚卖者赚取曲线的上行空间,因此退出顺序本身就是博弈的一部分。前端应在每个 unwrap 操作旁明确提示这一点。
WrapX 是什么?
WrapX 是基于 ERC-7527 构建的消费级产品,部署在 BNB Chain 上。任何人都能一键建池,把 BNB 或 ERC-20 代币包装成命名 NFT(WToken),定位为忠诚度 / 会员凭证。
ERC-7527 是谁创建的?
标准的第一作者是 Elaine(Lanyin)Zhang,她同时构建了参考实现(EIP7527)、生产级拍卖引擎(wrap-auction),以及两个前端——以太坊上的 wrap-interface 和 BNB Chain 上的 WrapX。