合约
Duel 由六个合约组成,其中五个部署在 Robinhood Chain 上,一个从未部署,构建于该链的 Uniswap V4 部署之上。使用 Solidity 0.8.26、Foundry、OpenZeppelin 和 v4-core。对决存在于链上:应用通过本站服务器或直接读取链上数据,并从索引链上事件的索引器读取对决的历史。
| 合约 | 作用 |
|---|---|
DuelFactory | 在一笔交易中发射一场对决:两个代币、三个池子、锁定的仓位、创建者的发射买入。持有未来对决的受限配置;每次发射都锁定发射者读取的配置(configHash),若期间另一配置已生效则失败。 |
DuelHook | 所有对决的三个池子共用的 Uniswap V4 钩子:手续费、防狙击税、切换销毁、再平衡、占比平均值、回合与回购,以及每场对决的奖池、创建者手续费和协议手续费。 |
DuelToken | 每个阵营的普通 ERC-20:10 亿枚,可销毁,没有所有者,支持许可(EIP-2612)。 |
DuelRouter | 应用进行交易所用的精确输入路由器,也接受卖出时的许可;当其 ETH 池无法一次承接卖出时,只有它会分多次卖出一个阵营(SALE_PASSES),并把该池即便如此仍无法买回的部分经另一个阵营卖出(sell)。任何 V4 路由器同样可用,但只做一次兑换。 |
DuelLens | 为应用汇总对决状态的只读视图。 |
DuelSimulator | 从不部署。应用会在一次只读调用中把它的代码放到你自己的地址上(state override),让一笔交易像你实际发送那样执行,并告诉你会收到多少,以及池子再平衡后占比会落在哪里。 |
版本
这个发射平台是 Duel V1,代号 Petunia。它的每个合约都会注明这一点(工厂、钩子、路由器和 lens 上的 VERSION() 与 CODENAME()),它发射的每个代币也会永久记录(LAUNCHPAD_VERSION() 与 LAUNCHPAD_CODENAME()):对决的“简介”栏按代币的记录显示它。以后另行部署的发射平台会使用下一个版本号和自己的代号,它的代币也会记录自己的版本。
地址
| 合约 | Robinhood Chain 上的地址 |
|---|---|
DuelFactory | 0x3c6e7f9Bc507a442237AF1721B2294686495BD54 |
DuelHook | 0x5F746B7B1722e9bb3849EEa97061Df50F715AAEc |
DuelRouter | 0x9e484C17E7d263F084Ab226a72FCdf301145d6D1 |
DuelLens | 0x1677d3C0a1F9Ae00519AD08C68674f63fe945389 |
Duel 依赖以下 Robinhood Chain 合约:
| Uniswap V4 PoolManager | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| Universal Router(主网) | 0x204FAca1764B154221e35c0d20aBb3c525710498 |
| V4 Quoter | 0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
钩子
V4 钩子的地址中编码了它实现的回调列表。Duel 的钩子使用:
| 回调 | 作用 |
|---|---|
beforeInitialize | 只有工厂合约可以在钩子上开设池子,且只能是已登记对决的池子。 |
beforeAddLiquidity | 只有工厂合约可以在发射时添加流动性。 |
beforeRemoveLiquidity | 始终回滚:流动性永久锁定。 |
beforeDonate | 始终回滚。 |
beforeSwap | 结算已结束的回合,更新平均值,收取手续费和税。 |
afterSwap | 收取兑换未指定的那一侧金额上应付的手续费,确认事先收费的兑换已完全成交,然后对三个池子再平衡。 |
手续费通过钩子的 return delta 收取,因此无论由谁路由兑换,都会生效。
谁能做什么
| 角色 | 能做的事 |
|---|---|
| 任何人 | 发射、交易、结算已结束回合、触发创建者或金库领取、在 48 小时过后应用已提议的条款 |
| 对决创建者 | 领取该对决的创建者手续费;把角色连同手续费转让给接受它的地址 |
| 工厂所有者 | 暂停新发射;在 48 小时后更改未来对决的受限条款或协议金库。当前金库在领取时接收累计协议手续费。立即降低所有对决兑换手续费中的协议份额,或重新调高,但绝不超过其条款。 |
| 任何人都不能 | 撤出流动性、增发代币、移动奖池、更改现有对决中交易者支付的手续费或其创建者的份额、把协议份额提高到对决条款之上、夺取对决的创建者角色、升级合约 |
更多
- 安全:保护资金的机制,以及如何验证。
- 基于 Duel 开发:在你自己的代码中读取对决和进行交易。