[{"data":1,"prerenderedAt":370},["ShallowReactive",2],{"docs:vi:\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview":3},{"id":4,"title":5,"body":6,"cover":361,"description":362,"extension":363,"meta":364,"navigation":365,"path":366,"seo":367,"stem":368,"__hash__":369},"docs\u002Fvi\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview.md","Hợp đồng",{"type":7,"value":8,"toc":351},"minimark",[9,13,17,109,114,132,136,139,142,194,198,201,275,278,282,328,332],[10,11,5],"h1",{"id":12},"hợp-đồng",[14,15,16],"p",{},"Duel gồm sáu hợp đồng, năm trong số đó được triển khai trên Robinhood Chain và một không bao giờ được triển khai, được xây dựng trên bản triển khai Uniswap V4 của chuỗi. Solidity 0.8.26, Foundry, OpenZeppelin, v4-core. Các trận đấu tồn tại trên chuỗi: ứng dụng đọc chuỗi qua máy chủ của trang hoặc trực tiếp, và đọc lịch sử của chúng từ một bộ lập chỉ mục các sự kiện của chuỗi.",[18,19,20,32],"table",{},[21,22,23],"thead",{},[24,25,26,29],"tr",{},[27,28,5],"th",{},[27,30,31],{},"Vai trò",[33,34,35,51,61,71,89,99],"tbody",{},[24,36,37,44],{},[38,39,40],"td",{},[41,42,43],"code",{},"DuelFactory",[38,45,46,47,50],{},"Khởi chạy một trận đấu trong một giao dịch: hai token, ba pool, các vị thế bị khóa và các lệnh mua khi ra mắt của người tạo. Giữ cấu hình có giới hạn cho các trận đấu sau này; một lần ra mắt cam kết với cấu hình mà người ra mắt đã đọc (",[41,48,49],{},"configHash",") và bị hoàn tác nếu trong lúc đó một cấu hình khác được áp dụng.",[24,52,53,58],{},[38,54,55],{},[41,56,57],{},"DuelHook",[38,59,60],{},"Hook Uniswap V4 dùng chung cho ba pool của mọi trận đấu: phí, thuế chống snipe, việc đốt khi chuyển phe, tái cân bằng, mức trung bình của tỷ lệ, các vòng và việc mua lại, cùng quỹ, phí người tạo và phí giao thức của mỗi trận đấu.",[24,62,63,68],{},[38,64,65],{},[41,66,67],{},"DuelToken",[38,69,70],{},"ERC-20 thông thường của mỗi phe: một tỷ đơn vị, có thể đốt, không có chủ sở hữu, hỗ trợ permit (EIP-2612).",[24,72,73,78],{},[38,74,75],{},[41,76,77],{},"DuelRouter",[38,79,80,81,84,85,88],{},"Router đầu vào chính xác mà ứng dụng dùng để giao dịch, bao gồm cả permit của lệnh bán; chỉ router này bán một phe qua nhiều lượt khi pool ETH của phe đó không thể nhận lệnh bán trong một lần (",[41,82,83],{},"SALE_PASSES","), còn phần mà ngay cả khi đó pool ấy vẫn không mua lại được thì bán qua phe kia (",[41,86,87],{},"sell","). Router V4 nào cũng dùng được, trong một swap.",[24,90,91,96],{},[38,92,93],{},[41,94,95],{},"DuelLens",[38,97,98],{},"Các view chỉ đọc tổng hợp trạng thái của một trận đấu cho ứng dụng.",[24,100,101,106],{},[38,102,103],{},[41,104,105],{},"DuelSimulator",[38,107,108],{},"Không bao giờ được triển khai. Ứng dụng đặt mã của nó lên chính địa chỉ của bạn trong một lần gọi chỉ đọc (state override), để giao dịch chạy đúng như khi bạn gửi và trả lời bạn sẽ nhận được gì và tỷ lệ sẽ ở đâu sau khi các pool được tái cân bằng.",[110,111,113],"h2",{"id":112},"phiên-bản","Phiên bản",[14,115,116,117,120,121,124,125,120,128,131],{},"Launchpad này là Duel V1, tên mã Petunia. Mỗi hợp đồng của nó đều cho biết điều đó (",[41,118,119],{},"VERSION()"," và ",[41,122,123],{},"CODENAME()"," trên factory, hook, router và lens), và mỗi token nó khởi chạy đều giữ thông tin đó vĩnh viễn (",[41,126,127],{},"LAUNCHPAD_VERSION()",[41,129,130],{},"LAUNCHPAD_CODENAME()","): mục Giới thiệu của một trận đấu hiển thị điều đó, đúng như các token của nó cho biết. Một launchpad sau này, được triển khai riêng, sẽ đánh số tiếp với tên mã riêng, và các token của nó sẽ cho biết tên của chúng.",[110,133,135],{"id":134},"địa-chỉ","Địa chỉ",[137,138],"contract-addresses",{},[14,140,141],{},"Duel dựa vào các hợp đồng sau của Robinhood Chain:",[18,143,144,152],{},[21,145,146],{},[24,147,148,150],{},[27,149],{},[27,151],{},[33,153,154,164,174,184],{},[24,155,156,159],{},[38,157,158],{},"Uniswap V4 PoolManager",[38,160,161],{},[41,162,163],{},"0x8366a39CC670B4001A1121B8F6A443A643e40951",[24,165,166,169],{},[38,167,168],{},"Universal Router (mainnet)",[38,170,171],{},[41,172,173],{},"0x204FAca1764B154221e35c0d20aBb3c525710498",[24,175,176,179],{},[38,177,178],{},"V4 Quoter",[38,180,181],{},[41,182,183],{},"0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94",[24,185,186,189],{},[38,187,188],{},"Permit2",[38,190,191],{},[41,192,193],{},"0x000000000022D473030F116dDEE9F6B43aC78BA3",[110,195,197],{"id":196},"hook","Hook",[14,199,200],{},"Địa chỉ của một hook V4 mang danh sách các callback mà nó triển khai. Hook của Duel dùng:",[18,202,203,213],{},[21,204,205],{},[24,206,207,210],{},[27,208,209],{},"Callback",[27,211,212],{},"Chức năng",[33,214,215,225,235,245,255,265],{},[24,216,217,222],{},[38,218,219],{},[41,220,221],{},"beforeInitialize",[38,223,224],{},"Chỉ factory mới được mở pool trên hook, và chỉ các pool đã đăng ký của một trận đấu.",[24,226,227,232],{},[38,228,229],{},[41,230,231],{},"beforeAddLiquidity",[38,233,234],{},"Chỉ factory mới được thêm thanh khoản, khi ra mắt.",[24,236,237,242],{},[38,238,239],{},[41,240,241],{},"beforeRemoveLiquidity",[38,243,244],{},"Luôn bị hoàn tác: thanh khoản bị khóa vĩnh viễn.",[24,246,247,252],{},[38,248,249],{},[41,250,251],{},"beforeDonate",[38,253,254],{},"Luôn bị hoàn tác.",[24,256,257,262],{},[38,258,259],{},[41,260,261],{},"beforeSwap",[38,263,264],{},"Chốt một vòng đã kết thúc, cập nhật các mức trung bình, thu phí và thuế.",[24,266,267,272],{},[38,268,269],{},[41,270,271],{},"afterSwap",[38,273,274],{},"Thu các khoản phí đến hạn trên số lượng mà swap không chỉ định, kiểm tra rằng một swap đã bị thu phí trước được khớp hoàn toàn, rồi tái cân bằng ba pool.",[14,276,277],{},"Phí được thu bằng các return delta của hook, nên áp dụng bất kể ai định tuyến swap.",[110,279,281],{"id":280},"ai-làm-được-gì","Ai làm được gì",[18,283,284,294],{},[21,285,286],{},[24,287,288,291],{},[27,289,290],{},"Bên",[27,292,293],{},"Có thể",[33,295,296,304,312,320],{},[24,297,298,301],{},[38,299,300],{},"Bất kỳ ai",[38,302,303],{},"Khởi chạy, giao dịch, chốt các vòng đã kết thúc, kích hoạt việc nhận của người tạo hoặc kho bạc, áp dụng các điều khoản đã đề xuất khi 48 giờ của chúng đã trôi qua",[24,305,306,309],{},[38,307,308],{},"Người tạo một trận đấu",[38,310,311],{},"Nhận phí người tạo của trận đấu đó; chuyển giao vai trò, cùng các khoản phí, cho một địa chỉ chấp nhận nó",[24,313,314,317],{},[38,315,316],{},"Chủ sở hữu factory",[38,318,319],{},"Tạm dừng các lần ra mắt mới; thay đổi các điều khoản có giới hạn cho trận đấu sau này hoặc kho bạc giao thức sau 48 giờ. Kho bạc hiện tại nhận phí giao thức đã tích lũy vào lúc nhận. Giảm ngay phần của giao thức trong phí swap của mọi trận đấu, hoặc tăng lại, không bao giờ vượt quá điều khoản của chúng.",[24,321,322,325],{},[38,323,324],{},"Không ai",[38,326,327],{},"Rút thanh khoản, mint token, di chuyển một quỹ, thay đổi mức phí mà trader của một trận đấu đang hoạt động phải trả hay phần của người tạo trận đấu đó, nâng phần của giao thức vượt quá điều khoản của một trận đấu, chiếm vai trò người tạo của một trận đấu, nâng cấp hợp đồng",[110,329,331],{"id":330},"thêm","Thêm",[333,334,335,344],"ul",{},[336,337,338,343],"li",{},[339,340,342],"a",{"href":341},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","Bảo mật",": điều gì bảo vệ tiền, và nó đã được kiểm tra thế nào.",[336,345,346,350],{},[339,347,349],{"href":348},"\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","Xây dựng trên Duel",": đọc các trận đấu và giao dịch từ mã của riêng bạn.",{"title":352,"searchDepth":353,"depth":354,"links":355},"",2,3,[356,357,358,359,360],{"id":112,"depth":353,"text":113},{"id":134,"depth":353,"text":135},{"id":196,"depth":353,"text":197},{"id":280,"depth":353,"text":281},{"id":330,"depth":353,"text":331},null,"Các hợp đồng của Duel trên Robinhood Chain: factory, hook Uniswap V4, token, router và lens, địa chỉ của chúng, các callback của hook và ai làm được gì.","md",{},true,"\u002Fvi\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview",{"title":5,"description":362},"vi\u002Fdocs\u002Fduel\u002Fcontracts\u002Foverview","hxP1h_YJEBUKy8EY-BINzHbcexPdm5Y0dgEcTJfC1pA",1791232802273]