Kontrakty
Duel to sześć kontraktów, pięć z nich wdrożonych w Robinhood Chain i jeden nigdy niewdrożony, zbudowanych na wdrożeniu Uniswap V4 tej sieci. Solidity 0.8.26, Foundry, OpenZeppelin, v4-core. Pojedynki żyją w sieci: aplikacja odczytuje ją przez serwer strony lub bezpośrednio, a ich historię z indeksera zdarzeń sieci.
| Kontrakt | Rola |
|---|---|
DuelFactory | Uruchamia pojedynek w jednej transakcji: dwa tokeny, trzy pule, zablokowane pozycje, zakupy twórcy przy starcie. Przechowuje ograniczoną konfigurację przyszłych pojedynków; uruchomienie wiąże się z konfiguracją, którą odczytał uruchamiający (configHash), i jest cofane, jeśli w międzyczasie zaczęła obowiązywać inna. |
DuelHook | Hook Uniswap V4 wspólny dla trzech pul każdego pojedynku: opłaty, podatek antysnajperski, spalanie przy zmianach strony, wyrównanie, średnia podziału, rundy i odkupy, a także pula nagród, opłaty twórcy i opłaty protokołu każdego pojedynku. |
DuelToken | Zwykły ERC-20 każdej strony: miliard jednostek, spalany, bez właściciela, z permitami (EIP-2612). |
DuelRouter | Router z dokładnym wejściem, przez który handluje aplikacja, łącznie z permitem sprzedaży; tylko on sprzedaje stronę w kilku przebiegach, gdy jej pula ETH nie może przyjąć sprzedaży za jednym razem (SALE_PASSES), a to, czego ta pula nie może odkupić nawet wtedy, przez drugą stronę (sell). Działa też dowolny router V4, w jednym swapie. |
DuelLens | Widoki tylko do odczytu, które zbierają stan pojedynku dla aplikacji. |
DuelSimulator | Nigdy niewdrażany. Aplikacja umieszcza jego kod na twoim własnym adresie na czas jednego wywołania tylko do odczytu (state override), aby transakcja wykonała się tak, jak byś ją wysłał, i odpowiedziała, co byś otrzymał i gdzie wylądowałby podział po wyrównaniu pul. |
Wersja
Ten launchpad to Duel V1, nazwa kodowa Petunia. Mówi o tym każdy jego kontrakt (VERSION() i CODENAME() w fabryce, hooku, routerze i lensie), a każdy token, który uruchamia, zachowuje to na zawsze (LAUNCHPAD_VERSION() i LAUNCHPAD_CODENAME()): sekcja Informacje pojedynku to pokazuje, tak jak mówią jego tokeny. Późniejszy launchpad, wdrożony osobno, kontynuowałby numerację z własną nazwą kodową, a jego tokeny podawałyby swoją.
Adresy
| Kontrakt | Adres na Robinhood Chain |
|---|---|
DuelFactory | 0x3c6e7f9Bc507a442237AF1721B2294686495BD54 |
DuelHook | 0x5F746B7B1722e9bb3849EEa97061Df50F715AAEc |
DuelRouter | 0x9e484C17E7d263F084Ab226a72FCdf301145d6D1 |
DuelLens | 0x1677d3C0a1F9Ae00519AD08C68674f63fe945389 |
Duel opiera się na tych kontraktach Robinhood Chain:
| PoolManager Uniswap V4 | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| Universal Router (mainnet) | 0x204FAca1764B154221e35c0d20aBb3c525710498 |
| V4 Quoter | 0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
Hook
Adres hooka V4 niesie listę callbacków, które implementuje. Hook Duel używa:
| Callback | Co robi |
|---|---|
beforeInitialize | Tylko fabryka może otworzyć pulę na hooku, i tylko zarejestrowane pule pojedynku. |
beforeAddLiquidity | Tylko fabryka może dodać płynność, przy starcie. |
beforeRemoveLiquidity | Zawsze jest cofany: płynność jest zablokowana na zawsze. |
beforeDonate | Zawsze jest cofany. |
beforeSwap | Rozlicza zakończoną rundę, aktualizuje średnie, pobiera opłaty i podatki. |
afterSwap | Pobiera opłaty należne od kwoty, której swap nie określił, sprawdza, czy swap obciążony z góry wypełnił się w całości, a potem wyrównuje trzy pule. |
Opłaty są pobierane przez return deltas hooka, więc obowiązują niezależnie od tego, kto kieruje swapem.
Kto co może
| Podmiot | Może |
|---|---|
| Każdy | Uruchamiać, handlować, rozliczać zakończone rundy, wywoływać odbiór dla twórcy lub skarbca, stosować zaproponowane warunki po upływie ich 48 godzin |
| Twórca pojedynku | Otrzymywać opłaty twórcy tego pojedynku; przekazać rolę, wraz z opłatami, adresowi, który ją przyjmie |
| Właściciel fabryki | Wstrzymywać nowe uruchomienia; po 48 godzinach zmieniać ograniczone warunki przyszłych pojedynków lub skarbiec protokołu. Bieżący skarbiec otrzymuje zgromadzone opłaty protokołu w chwili odbioru. Od razu obniżyć udział protokołu w opłacie za swap we wszystkich pojedynkach albo podnieść go z powrotem, nigdy ponad ich warunki. |
| Nikt | Wycofać płynności, mintować tokenów, przenieść puli nagród, zmienić opłaty, którą płacą traderzy trwającego pojedynku, ani udziału jego twórcy, podnieść udziału protokołu ponad warunki pojedynku, odebrać pojedynkowi roli twórcy, zaktualizować kontraktów |
Więcej
- Bezpieczeństwo: co chroni środki i jak to sprawdzono.
- Budowanie na Duel: odczytywanie pojedynków i handel z własnego kodu.