[{"data":1,"prerenderedAt":363},["ShallowReactive",2],{"docs:zh:\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview":3},{"id":4,"title":5,"body":6,"cover":354,"description":355,"extension":356,"meta":357,"navigation":358,"path":359,"seo":360,"stem":361,"__hash__":362},"docs\u002Fzh\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview.md","合约",{"type":7,"value":8,"toc":344},"minimark",[9,12,16,108,112,130,133,136,139,191,194,197,270,273,276,322,325],[10,11,5],"h1",{"id":5},[13,14,15],"p",{},"Duel 由六个合约组成，其中五个部署在 Robinhood Chain 上，一个从未部署，构建于该链的 Uniswap V4 部署之上。使用 Solidity 0.8.26、Foundry、OpenZeppelin 和 v4-core。对决存在于链上：应用通过本站服务器或直接读取链上数据，并从索引链上事件的索引器读取对决的历史。",[17,18,19,31],"table",{},[20,21,22],"thead",{},[23,24,25,28],"tr",{},[26,27,5],"th",{},[26,29,30],{},"作用",[32,33,34,50,60,70,88,98],"tbody",{},[23,35,36,43],{},[37,38,39],"td",{},[40,41,42],"code",{},"DuelFactory",[37,44,45,46,49],{},"在一笔交易中发射一场对决：两个代币、三个池子、锁定的仓位、创建者的发射买入。持有未来对决的受限配置；每次发射都锁定发射者读取的配置（",[40,47,48],{},"configHash","），若期间另一配置已生效则失败。",[23,51,52,57],{},[37,53,54],{},[40,55,56],{},"DuelHook",[37,58,59],{},"所有对决的三个池子共用的 Uniswap V4 钩子：手续费、防狙击税、切换销毁、再平衡、占比平均值、回合与回购，以及每场对决的奖池、创建者手续费和协议手续费。",[23,61,62,67],{},[37,63,64],{},[40,65,66],{},"DuelToken",[37,68,69],{},"每个阵营的普通 ERC-20：10 亿枚，可销毁，没有所有者，支持许可（EIP-2612）。",[23,71,72,77],{},[37,73,74],{},[40,75,76],{},"DuelRouter",[37,78,79,80,83,84,87],{},"应用进行交易所用的精确输入路由器，也接受卖出时的许可；当其 ETH 池无法一次承接卖出时，只有它会分多次卖出一个阵营（",[40,81,82],{},"SALE_PASSES","），并把该池即便如此仍无法买回的部分经另一个阵营卖出（",[40,85,86],{},"sell","）。任何 V4 路由器同样可用，但只做一次兑换。",[23,89,90,95],{},[37,91,92],{},[40,93,94],{},"DuelLens",[37,96,97],{},"为应用汇总对决状态的只读视图。",[23,99,100,105],{},[37,101,102],{},[40,103,104],{},"DuelSimulator",[37,106,107],{},"从不部署。应用会在一次只读调用中把它的代码放到你自己的地址上（state override），让一笔交易像你实际发送那样执行，并告诉你会收到多少，以及池子再平衡后占比会落在哪里。",[109,110,111],"h2",{"id":111},"版本",[13,113,114,115,118,119,122,123,118,126,129],{},"这个发射平台是 Duel V1，代号 Petunia。它的每个合约都会注明这一点（工厂、钩子、路由器和 lens 上的 ",[40,116,117],{},"VERSION()"," 与 ",[40,120,121],{},"CODENAME()","），它发射的每个代币也会永久记录（",[40,124,125],{},"LAUNCHPAD_VERSION()",[40,127,128],{},"LAUNCHPAD_CODENAME()","）：对决的“简介”栏按代币的记录显示它。以后另行部署的发射平台会使用下一个版本号和自己的代号，它的代币也会记录自己的版本。",[109,131,132],{"id":132},"地址",[134,135],"contract-addresses",{},[13,137,138],{},"Duel 依赖以下 Robinhood Chain 合约：",[17,140,141,149],{},[20,142,143],{},[23,144,145,147],{},[26,146],{},[26,148],{},[32,150,151,161,171,181],{},[23,152,153,156],{},[37,154,155],{},"Uniswap V4 PoolManager",[37,157,158],{},[40,159,160],{},"0x8366a39CC670B4001A1121B8F6A443A643e40951",[23,162,163,166],{},[37,164,165],{},"Universal Router（主网）",[37,167,168],{},[40,169,170],{},"0x204FAca1764B154221e35c0d20aBb3c525710498",[23,172,173,176],{},[37,174,175],{},"V4 Quoter",[37,177,178],{},[40,179,180],{},"0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94",[23,182,183,186],{},[37,184,185],{},"Permit2",[37,187,188],{},[40,189,190],{},"0x000000000022D473030F116dDEE9F6B43aC78BA3",[109,192,193],{"id":193},"钩子",[13,195,196],{},"V4 钩子的地址中编码了它实现的回调列表。Duel 的钩子使用：",[17,198,199,208],{},[20,200,201],{},[23,202,203,206],{},[26,204,205],{},"回调",[26,207,30],{},[32,209,210,220,230,240,250,260],{},[23,211,212,217],{},[37,213,214],{},[40,215,216],{},"beforeInitialize",[37,218,219],{},"只有工厂合约可以在钩子上开设池子，且只能是已登记对决的池子。",[23,221,222,227],{},[37,223,224],{},[40,225,226],{},"beforeAddLiquidity",[37,228,229],{},"只有工厂合约可以在发射时添加流动性。",[23,231,232,237],{},[37,233,234],{},[40,235,236],{},"beforeRemoveLiquidity",[37,238,239],{},"始终回滚：流动性永久锁定。",[23,241,242,247],{},[37,243,244],{},[40,245,246],{},"beforeDonate",[37,248,249],{},"始终回滚。",[23,251,252,257],{},[37,253,254],{},[40,255,256],{},"beforeSwap",[37,258,259],{},"结算已结束的回合，更新平均值，收取手续费和税。",[23,261,262,267],{},[37,263,264],{},[40,265,266],{},"afterSwap",[37,268,269],{},"收取兑换未指定的那一侧金额上应付的手续费，确认事先收费的兑换已完全成交，然后对三个池子再平衡。",[13,271,272],{},"手续费通过钩子的 return delta 收取，因此无论由谁路由兑换，都会生效。",[109,274,275],{"id":275},"谁能做什么",[17,277,278,288],{},[20,279,280],{},[23,281,282,285],{},[26,283,284],{},"角色",[26,286,287],{},"能做的事",[32,289,290,298,306,314],{},[23,291,292,295],{},[37,293,294],{},"任何人",[37,296,297],{},"发射、交易、结算已结束回合、触发创建者或金库领取、在 48 小时过后应用已提议的条款",[23,299,300,303],{},[37,301,302],{},"对决创建者",[37,304,305],{},"领取该对决的创建者手续费；把角色连同手续费转让给接受它的地址",[23,307,308,311],{},[37,309,310],{},"工厂所有者",[37,312,313],{},"暂停新发射；在 48 小时后更改未来对决的受限条款或协议金库。当前金库在领取时接收累计协议手续费。立即降低所有对决兑换手续费中的协议份额，或重新调高，但绝不超过其条款。",[23,315,316,319],{},[37,317,318],{},"任何人都不能",[37,320,321],{},"撤出流动性、增发代币、移动奖池、更改现有对决中交易者支付的手续费或其创建者的份额、把协议份额提高到对决条款之上、夺取对决的创建者角色、升级合约",[109,323,324],{"id":324},"更多",[326,327,328,337],"ul",{},[329,330,331,336],"li",{},[332,333,335],"a",{"href":334},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","安全","：保护资金的机制，以及如何验证。",[329,338,339,343],{},[332,340,342],{"href":341},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","基于 Duel 开发","：在你自己的代码中读取对决和进行交易。",{"title":345,"searchDepth":346,"depth":347,"links":348},"",2,3,[349,350,351,352,353],{"id":111,"depth":346,"text":111},{"id":132,"depth":346,"text":132},{"id":193,"depth":346,"text":193},{"id":275,"depth":346,"text":275},{"id":324,"depth":346,"text":324},null,"Robinhood Chain 上的 Duel 合约：工厂、Uniswap V4 钩子、代币、路由器和 lens，它们的地址、钩子的回调，以及谁能做什么。","md",{},true,"\u002Fzh\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview",{"title":5,"description":355},"zh\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview","_voe8Mfzo8UJyaPGo_p9welO-9YFSP8qrzYga_3WNjo",1791232785048]