Контракты
Duel — это шесть контрактов, пять из которых развёрнуты в Robinhood Chain, а один никогда не разворачивался; все они построены на развёртывании Uniswap V4 в этой сети. Solidity 0.8.26, Foundry, OpenZeppelin, v4-core. Дуэли живут в сети: приложение читает её через сервер сайта или напрямую, а их историю — из индексатора событий сети.
| Контракт | Роль |
|---|---|
DuelFactory | Запускает дуэль одной транзакцией: два токена, три пула, заблокированные позиции, покупки создателя при запуске. Хранит ограниченную конфигурацию будущих дуэлей; запуск фиксирует конфигурацию, которую прочитал запускающий (configHash), и откатывается, если за это время вступила в силу другая. |
DuelHook | Hook Uniswap V4, общий для трёх пулов каждой дуэли: комиссии, антиснайп-налог, сжигание при переходах, выравнивание, среднее соотношения, раунды и выкупы, а также банк, комиссии создателя и комиссии протокола каждой дуэли. |
DuelToken | Обычный ERC-20 каждой стороны: миллиард единиц, сжигаемый, без владельца, с permit (EIP-2612). |
DuelRouter | Роутер с точным входом, через который торгует приложение, включая permit для продажи; только он продаёт сторону в несколько проходов, когда её пул ETH не может принять продажу сразу (SALE_PASSES), а то, что этот пул не может выкупить даже тогда, — через другую сторону (sell). Подойдёт и любой роутер V4, одним свопом. |
DuelLens | Представления только для чтения, которые собирают состояние дуэли для приложения. |
DuelSimulator | Никогда не развёртывается. Приложение помещает его код на ваш собственный адрес на время одного вызова только для чтения (state override), чтобы сделка выполнилась так, как вы бы её отправили, и показала, что вы получите и где окажется соотношение после выравнивания пулов. |
Версия
Этот лаунчпад — Duel V1, кодовое имя Petunia. Об этом сообщает каждый его контракт (VERSION() и CODENAME() у фабрики, hook, роутера и lens), и каждый запущенный им токен хранит это навсегда (LAUNCHPAD_VERSION() и LAUNCHPAD_CODENAME()): раздел «О дуэли» показывает это так, как говорят её токены. Более поздний лаунчпад, развёрнутый отдельно, продолжил бы нумерацию с собственным кодовым именем, и его токены называли бы своё.
Адреса
| Контракт | Адрес в Robinhood Chain |
|---|---|
DuelFactory | 0x3c6e7f9Bc507a442237AF1721B2294686495BD54 |
DuelHook | 0x5F746B7B1722e9bb3849EEa97061Df50F715AAEc |
DuelRouter | 0x9e484C17E7d263F084Ab226a72FCdf301145d6D1 |
DuelLens | 0x1677d3C0a1F9Ae00519AD08C68674f63fe945389 |
Duel опирается на эти контракты Robinhood Chain:
| Uniswap V4 PoolManager | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| Universal Router (мейннет) | 0x204FAca1764B154221e35c0d20aBb3c525710498 |
| V4 Quoter | 0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
Hook
Адрес hook в V4 содержит список колбэков, которые он реализует. Hook Duel использует:
| Колбэк | Что делает |
|---|---|
beforeInitialize | Открыть пул на hook может только фабрика, и только зарегистрированные пулы дуэли. |
beforeAddLiquidity | Добавлять ликвидность может только фабрика, при запуске. |
beforeRemoveLiquidity | Всегда откатывается: ликвидность заблокирована навсегда. |
beforeDonate | Всегда откатывается. |
beforeSwap | Рассчитывает завершённый раунд, обновляет средние, взимает комиссии и налоги. |
afterSwap | Взимает комиссии, причитающиеся с суммы, которую своп не задал, проверяет, что своп с предварительной оплатой исполнился полностью, а затем выравнивает три пула. |
Комиссии взимаются через return deltas hook, поэтому применяются независимо от того, кто маршрутизирует своп.
Кто что может
| Участник | Может |
|---|---|
| Кто угодно | Запускать, торговать, рассчитывать завершённые раунды, запускать выплаты создателю или в казначейство, применять предложенные условия по истечении их 48 часов |
| Создатель дуэли | Получать комиссии создателя этой дуэли; передать роль вместе с её комиссиями адресу, который её примет |
| Владелец фабрики | Приостанавливать новые запуски; через 48 часов менять ограниченные условия будущих дуэлей или казначейство протокола. Текущее казначейство получает накопленные комиссии протокола в момент выплаты. Сразу снизить долю протокола в комиссии за своп всех дуэлей или вернуть её, но никогда не выше их условий. |
| Никто | Вывести ликвидность, выпустить токены, переместить банк, изменить комиссию, которую платят трейдеры действующей дуэли, или долю её создателя, поднять долю протокола выше условий дуэли, отнять у дуэли роль создателя, обновить контракты |
Ещё
- Безопасность: что защищает средства и как это проверялось.
- Разработка на Duel: чтение дуэлей и торговля из вашего собственного кода.