[{"data":1,"prerenderedAt":371},["ShallowReactive",2],{"docs:pt:\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview":3},{"id":4,"title":5,"body":6,"cover":362,"description":363,"extension":364,"meta":365,"navigation":366,"path":367,"seo":368,"stem":369,"__hash__":370},"docs\u002Fpt\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview.md","Contratos",{"type":7,"value":8,"toc":352},"minimark",[9,13,17,110,115,133,137,140,143,195,199,202,276,279,283,329,333],[10,11,5],"h1",{"id":12},"contratos",[14,15,16],"p",{},"O Duel são seis contratos, cinco deles implantados na Robinhood Chain e um nunca implantado, construídos sobre a implantação da Uniswap V4 na rede. Solidity 0.8.26, Foundry, OpenZeppelin, v4-core. Os duelos vivem na rede: o app a lê, pelo servidor do site ou diretamente, e o histórico deles em um indexador dos eventos da rede.",[18,19,20,33],"table",{},[21,22,23],"thead",{},[24,25,26,30],"tr",{},[27,28,29],"th",{},"Contrato",[27,31,32],{},"Papel",[34,35,36,52,62,72,90,100],"tbody",{},[24,37,38,45],{},[39,40,41],"td",{},[42,43,44],"code",{},"DuelFactory",[39,46,47,48,51],{},"Lança um duelo em uma transação: dois tokens, três pools, posições travadas e as compras de lançamento do criador. Guarda a configuração limitada dos duelos futuros; um lançamento se compromete com a configuração que quem lança leu (",[42,49,50],{},"configHash",") e reverte se outra tiver sido aplicada nesse meio-tempo.",[24,53,54,59],{},[39,55,56],{},[42,57,58],{},"DuelHook",[39,60,61],{},"O hook da Uniswap V4 compartilhado pelos três pools de cada duelo: taxas, imposto antissnipe, queima das trocas, realinhamento, média da divisão, rodadas e recompras, e o pote, as taxas do criador e as taxas do protocolo de cada duelo.",[24,63,64,69],{},[39,65,66],{},[42,67,68],{},"DuelToken",[39,70,71],{},"O ERC-20 comum de cada lado: um bilhão de unidades, queimável, sem dono, com permits (EIP-2612).",[24,73,74,79],{},[39,75,76],{},[42,77,78],{},"DuelRouter",[39,80,81,82,85,86,89],{},"O router de entrada exata pelo qual o app negocia, incluindo o permit de uma venda; só ele vende um lado em várias passagens quando o pool de ETH desse lado não consegue absorver a venda de uma vez (",[42,83,84],{},"SALE_PASSES","), e o que esse pool nem assim consegue recomprar, pelo outro lado (",[42,87,88],{},"sell","). Qualquer router V4 também funciona, em um único swap.",[24,91,92,97],{},[39,93,94],{},[42,95,96],{},"DuelLens",[39,98,99],{},"Visões somente leitura que reúnem o estado de um duelo para o app.",[24,101,102,107],{},[39,103,104],{},[42,105,106],{},"DuelSimulator",[39,108,109],{},"Nunca é implantado. O app coloca o código dele no seu próprio endereço durante uma chamada somente leitura (um state override), para que uma negociação rode como você a enviaria e responda o que você receberia e onde a divisão ficaria depois que os pools se realinhassem.",[111,112,114],"h2",{"id":113},"versão","Versão",[14,116,117,118,121,122,125,126,121,129,132],{},"Este launchpad é o Duel V1, codinome Petunia. Cada um dos contratos diz isso (",[42,119,120],{},"VERSION()"," e ",[42,123,124],{},"CODENAME()"," na fábrica, no hook, no router e na lens), e cada token que ele lança guarda isso para sempre (",[42,127,128],{},"LAUNCHPAD_VERSION()",[42,130,131],{},"LAUNCHPAD_CODENAME()","): a seção Sobre de um duelo mostra isso, como os tokens dele dizem. Um launchpad posterior, implantado à parte, seguiria a numeração com um codinome próprio, e os tokens dele diriam o deles.",[111,134,136],{"id":135},"endereços","Endereços",[138,139],"contract-addresses",{},[14,141,142],{},"O Duel depende destes contratos da Robinhood Chain:",[18,144,145,153],{},[21,146,147],{},[24,148,149,151],{},[27,150],{},[27,152],{},[34,154,155,165,175,185],{},[24,156,157,160],{},[39,158,159],{},"PoolManager da Uniswap V4",[39,161,162],{},[42,163,164],{},"0x8366a39CC670B4001A1121B8F6A443A643e40951",[24,166,167,170],{},[39,168,169],{},"Universal Router (mainnet)",[39,171,172],{},[42,173,174],{},"0x204FAca1764B154221e35c0d20aBb3c525710498",[24,176,177,180],{},[39,178,179],{},"V4 Quoter",[39,181,182],{},[42,183,184],{},"0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94",[24,186,187,190],{},[39,188,189],{},"Permit2",[39,191,192],{},[42,193,194],{},"0x000000000022D473030F116dDEE9F6B43aC78BA3",[111,196,198],{"id":197},"o-hook","O hook",[14,200,201],{},"O endereço de um hook V4 carrega a lista de callbacks que ele implementa. O hook do Duel usa:",[18,203,204,214],{},[21,205,206],{},[24,207,208,211],{},[27,209,210],{},"Callback",[27,212,213],{},"O que faz",[34,215,216,226,236,246,256,266],{},[24,217,218,223],{},[39,219,220],{},[42,221,222],{},"beforeInitialize",[39,224,225],{},"Só a fábrica pode abrir um pool no hook, e só os pools registrados de um duelo.",[24,227,228,233],{},[39,229,230],{},[42,231,232],{},"beforeAddLiquidity",[39,234,235],{},"Só a fábrica pode adicionar liquidez, no lançamento.",[24,237,238,243],{},[39,239,240],{},[42,241,242],{},"beforeRemoveLiquidity",[39,244,245],{},"Sempre reverte: a liquidez fica travada para sempre.",[24,247,248,253],{},[39,249,250],{},[42,251,252],{},"beforeDonate",[39,254,255],{},"Sempre reverte.",[24,257,258,263],{},[39,259,260],{},[42,261,262],{},"beforeSwap",[39,264,265],{},"Liquida uma rodada encerrada, atualiza as médias, cobra taxas e impostos.",[24,267,268,273],{},[39,269,270],{},[42,271,272],{},"afterSwap",[39,274,275],{},"Cobra as taxas devidas sobre o valor que o swap não fixou, verifica se um swap cobrado antes se completou por inteiro e depois realinha os três pools.",[14,277,278],{},"As taxas são cobradas com os return deltas do hook, então valem para quem quer que roteie o swap.",[111,280,282],{"id":281},"quem-pode-fazer-o-quê","Quem pode fazer o quê",[18,284,285,295],{},[21,286,287],{},[24,288,289,292],{},[27,290,291],{},"Ator",[27,293,294],{},"Pode",[34,296,297,305,313,321],{},[24,298,299,302],{},[39,300,301],{},"Qualquer pessoa",[39,303,304],{},"Lançar, negociar, liquidar rodadas encerradas, acionar resgates do criador ou da tesouraria, aplicar termos propostos depois que as 48 horas deles passarem",[24,306,307,310],{},[39,308,309],{},"O criador de um duelo",[39,311,312],{},"Receber as taxas de criador desse duelo; passar o papel, com as taxas dele, para um endereço que o aceite",[24,314,315,318],{},[39,316,317],{},"Dono da fábrica",[39,319,320],{},"Pausar novos lançamentos; mudar, depois de 48 horas, os termos limitados de duelos futuros ou a tesouraria do protocolo. A tesouraria atual recebe as taxas do protocolo acumuladas no momento do resgate. Reduzir na hora a parte do protocolo na taxa de swap de todos os duelos, ou aumentá-la de novo, nunca acima dos termos deles.",[24,322,323,326],{},[39,324,325],{},"Ninguém",[39,327,328],{},"Retirar liquidez, cunhar tokens, mover um pote, mudar a taxa que os traders de um duelo ativo pagam ou a parte do criador dele, aumentar a parte do protocolo acima dos termos de um duelo, tomar o papel de criador de um duelo, atualizar contratos",[111,330,332],{"id":331},"mais","Mais",[334,335,336,345],"ul",{},[337,338,339,344],"li",{},[340,341,343],"a",{"href":342},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","Segurança",": o que protege os fundos e como isso foi verificado.",[337,346,347,351],{},[340,348,350],{"href":349},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","Construir no Duel",": ler duelos e negociar a partir do seu próprio código.",{"title":353,"searchDepth":354,"depth":355,"links":356},"",2,3,[357,358,359,360,361],{"id":113,"depth":354,"text":114},{"id":135,"depth":354,"text":136},{"id":197,"depth":354,"text":198},{"id":281,"depth":354,"text":282},{"id":331,"depth":354,"text":332},null,"Os contratos do Duel na Robinhood Chain: fábrica, hook da Uniswap V4, token, router e lens, seus endereços, os callbacks do hook e quem pode fazer o quê.","md",{},true,"\u002Fpt\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview",{"title":5,"description":363},"pt\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview","m2Jlr_2TH2ibxaU7MsEqI2SknVV04DWbEatq3Cuynco",1791232790257]