• Duel открыт в Robinhood Chain
  • Запустите дуэль два токена, три пула, одна транзакция
  • Раунд закроется через --:--:--
  • Раунды по четыре часа выкуп победителя ограничен по цене
  • Ликвидность заблокирована навсегда, токенов команды нет

Контракты

Duel — это шесть контрактов, пять из которых развёрнуты в Robinhood Chain, а один никогда не разворачивался; все они построены на развёртывании Uniswap V4 в этой сети. Solidity 0.8.26, Foundry, OpenZeppelin, v4-core. Дуэли живут в сети: приложение читает её через сервер сайта или напрямую, а их историю — из индексатора событий сети.

КонтрактРоль
DuelFactoryЗапускает дуэль одной транзакцией: два токена, три пула, заблокированные позиции, покупки создателя при запуске. Хранит ограниченную конфигурацию будущих дуэлей; запуск фиксирует конфигурацию, которую прочитал запускающий (configHash), и откатывается, если за это время вступила в силу другая.
DuelHookHook 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()): раздел «О дуэли» показывает это так, как говорят её токены. Более поздний лаунчпад, развёрнутый отдельно, продолжил бы нумерацию с собственным кодовым именем, и его токены называли бы своё.

Адреса

Duel опирается на эти контракты Robinhood Chain:

Uniswap V4 PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
Universal Router (мейннет)0x204FAca1764B154221e35c0d20aBb3c525710498
V4 Quoter0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3

Hook

Адрес hook в V4 содержит список колбэков, которые он реализует. Hook Duel использует:

КолбэкЧто делает
beforeInitializeОткрыть пул на hook может только фабрика, и только зарегистрированные пулы дуэли.
beforeAddLiquidityДобавлять ликвидность может только фабрика, при запуске.
beforeRemoveLiquidityВсегда откатывается: ликвидность заблокирована навсегда.
beforeDonateВсегда откатывается.
beforeSwapРассчитывает завершённый раунд, обновляет средние, взимает комиссии и налоги.
afterSwapВзимает комиссии, причитающиеся с суммы, которую своп не задал, проверяет, что своп с предварительной оплатой исполнился полностью, а затем выравнивает три пула.

Комиссии взимаются через return deltas hook, поэтому применяются независимо от того, кто маршрутизирует своп.

Кто что может

УчастникМожет
Кто угодноЗапускать, торговать, рассчитывать завершённые раунды, запускать выплаты создателю или в казначейство, применять предложенные условия по истечении их 48 часов
Создатель дуэлиПолучать комиссии создателя этой дуэли; передать роль вместе с её комиссиями адресу, который её примет
Владелец фабрикиПриостанавливать новые запуски; через 48 часов менять ограниченные условия будущих дуэлей или казначейство протокола. Текущее казначейство получает накопленные комиссии протокола в момент выплаты. Сразу снизить долю протокола в комиссии за своп всех дуэлей или вернуть её, но никогда не выше их условий.
НиктоВывести ликвидность, выпустить токены, переместить банк, изменить комиссию, которую платят трейдеры действующей дуэли, или долю её создателя, поднять долю протокола выше условий дуэли, отнять у дуэли роль создателя, обновить контракты

Ещё