[{"data":1,"prerenderedAt":366},["ShallowReactive",2],{"docs:ko:\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview":3},{"id":4,"title":5,"body":6,"cover":357,"description":358,"extension":359,"meta":360,"navigation":361,"path":362,"seo":363,"stem":364,"__hash__":365},"docs\u002Fko\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview.md","컨트랙트",{"type":7,"value":8,"toc":347},"minimark",[9,12,16,108,112,130,133,136,139,191,194,197,271,274,278,324,328],[10,11,5],"h1",{"id":5},[13,14,15],"p",{},"Duel은 Robinhood Chain의 Uniswap V4 배포 위에 만들어진 여섯 개의 컨트랙트로, 그중 다섯 개는 Robinhood Chain에 배포되고 하나는 배포되지 않습니다. 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억 개, 소각 가능, 소유자 없음, permit(EIP-2612) 지원.",[23,71,72,77],{},[37,73,74],{},[40,75,76],{},"DuelRouter",[37,78,79,80,83,84,87],{},"앱이 거래할 때 쓰는 정확한 입력량 라우터로, 매도의 permit도 함께 받습니다. 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],{},"이 런치패드는 코드명 Petunia인 Duel V1입니다. 모든 컨트랙트가 이를 알려 주고(팩토리, 훅, 라우터, 렌즈의 ",[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,209],{},[20,200,201],{},[23,202,203,206],{},[26,204,205],{},"콜백",[26,207,208],{},"하는 일",[32,210,211,221,231,241,251,261],{},[23,212,213,218],{},[37,214,215],{},[40,216,217],{},"beforeInitialize",[37,219,220],{},"훅 위에 풀을 열 수 있는 것은 팩토리뿐이며, 등록된 대결의 풀만 가능합니다.",[23,222,223,228],{},[37,224,225],{},[40,226,227],{},"beforeAddLiquidity",[37,229,230],{},"유동성을 더할 수 있는 것은 런칭 때의 팩토리뿐입니다.",[23,232,233,238],{},[37,234,235],{},[40,236,237],{},"beforeRemoveLiquidity",[37,239,240],{},"항상 되돌립니다. 유동성은 영구히 잠겨 있습니다.",[23,242,243,248],{},[37,244,245],{},[40,246,247],{},"beforeDonate",[37,249,250],{},"항상 되돌립니다.",[23,252,253,258],{},[37,254,255],{},[40,256,257],{},"beforeSwap",[37,259,260],{},"끝난 라운드를 정산하고, 평균을 갱신하고, 수수료와 세금을 받습니다.",[23,262,263,268],{},[37,264,265],{},[40,266,267],{},"afterSwap",[37,269,270],{},"스왑이 지정하지 않은 쪽 금액에 붙는 수수료를 받고, 미리 수수료를 낸 스왑이 전부 체결되었는지 확인한 뒤, 세 풀을 재정렬합니다.",[13,272,273],{},"수수료는 훅의 return delta로 받으므로, 누가 스왑을 라우팅하든 적용됩니다.",[109,275,277],{"id":276},"누가-무엇을-할-수-있나","누가 무엇을 할 수 있나",[17,279,280,290],{},[20,281,282],{},[23,283,284,287],{},[26,285,286],{},"주체",[26,288,289],{},"할 수 있는 일",[32,291,292,300,308,316],{},[23,293,294,297],{},[37,295,296],{},"누구나",[37,298,299],{},"런칭, 거래, 끝난 라운드 정산, 크리에이터 또는 재무 청구 실행, 48시간이 지난 제안된 조건 적용",[23,301,302,305],{},[37,303,304],{},"대결 크리에이터",[37,306,307],{},"해당 대결의 크리에이터 수수료 수령, 수락하는 주소에 수수료와 함께 역할 넘기기",[23,309,310,313],{},[37,311,312],{},"팩토리 소유자",[37,314,315],{},"새 런칭 일시 중지, 48시간 뒤 앞으로의 대결에 한도 안의 조건 적용 또는 프로토콜 재무 주소 변경. 누적 프로토콜 수수료는 청구 시 현재 재무 주소로 지급됨. 모든 대결의 스왑 수수료에서 프로토콜 몫을 즉시 낮추거나 다시 올리기(조건을 넘을 수는 없음).",[23,317,318,321],{},[37,319,320],{},"누구도",[37,322,323],{},"유동성 인출, 토큰 민팅, 팟 이동, 기존 대결에서 트레이더가 내는 수수료나 크리에이터 몫 변경, 프로토콜 몫을 대결의 조건보다 높이기, 대결의 크리에이터 역할 빼앗기, 컨트랙트 업그레이드",[109,325,327],{"id":326},"더-보기","더 보기",[329,330,331,340],"ul",{},[332,333,334,339],"li",{},[335,336,338],"a",{"href":337},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","보안",": 자금을 지키는 장치와 검증 방법.",[332,341,342,346],{},[335,343,345],{"href":344},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","Duel 위에서 개발하기",": 내 코드에서 대결을 읽고 거래하기.",{"title":348,"searchDepth":349,"depth":350,"links":351},"",2,3,[352,353,354,355,356],{"id":111,"depth":349,"text":111},{"id":132,"depth":349,"text":132},{"id":193,"depth":349,"text":193},{"id":276,"depth":349,"text":277},{"id":326,"depth":349,"text":327},null,"Robinhood Chain의 Duel 컨트랙트: 팩토리, Uniswap V4 훅, 토큰, 라우터, 렌즈. 주소, 훅의 콜백, 그리고 권한.","md",{},true,"\u002Fko\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview",{"title":5,"description":358},"ko\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview","AZXhB5Hx4_Z1pBos81YKY7dVCxzKAVaCxmynp7fUHsI",1791232783630]