コントラクト
Duel は6つのコントラクトで、そのうち5つは Robinhood Chain にデプロイされ、1つはデプロイされません。チェーン上の Uniswap V4 のデプロイを土台にしています。Solidity 0.8.26、Foundry、OpenZeppelin、v4-core を使っています。デュエルはチェーン上に存在します。アプリはサイトのサーバー経由または直接チェーンを読み、履歴はチェーンのイベントのインデクサーから読みます。
| コントラクト | 役割 |
|---|---|
DuelFactory | 1つのトランザクションでデュエルをローンチします。2つのトークン、3つのプール、ロックされたポジション、クリエイターのローンチ購入です。今後のデュエルの上限付き設定を持ちます。ローンチは、ローンチする人が読んだ設定(configHash)にコミットし、その間に別の設定が適用されていればリバートします。 |
DuelHook | すべてのデュエルの3つのプールが共有する Uniswap V4 の hook です。手数料、アンチスナイプ税、乗り換え時のバーン、再調整、比率の平均、ラウンドと買い戻し、そして各デュエルのポット、クリエイター手数料、プロトコル手数料を扱います。 |
DuelToken | 各陣営のシンプルな ERC-20 です。10億単位、バーン可能、オーナーなし、permit(EIP-2612)対応です。 |
DuelRouter | アプリが取引に使う入力額指定のルーターで、売りの permit にも対応します。ETH プールが売りを一度に受け止めきれないとき、陣営を何回かに分けて売り(SALE_PASSES)、それでもそのプールが買い戻せない分をもう一方の陣営を通して売る(sell)のは、このルーターだけです。ほかの V4 ルーターでも、1回のスワップで取引できます。 |
DuelLens | アプリのためにデュエルの状態をまとめる読み取り専用のビューです。 |
DuelSimulator | デプロイされることはありません。アプリは、1回の読み取り専用の呼び出しの間だけ、そのコードをあなた自身のアドレスに置きます(state override)。取引をあなたが送るとおりに実行し、受け取れる額と、プールが再調整された後に比率がどうなるかを返します。 |
バージョン
このローンチパッドは Duel V1、コードネームは Petunia です。各コントラクトがそれを示し(ファクトリー、hook、ルーター、lens の VERSION() と CODENAME())、ローンチされた各トークンもそれを永久に保持します(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
V4 の hook のアドレスには、それが実装するコールバックの一覧が含まれています。Duel の hook が使うのは次のとおりです:
| コールバック | 内容 |
|---|---|
beforeInitialize | hook 上でプールを開けるのはファクトリーだけで、しかもデュエルとして登録されたプールだけです。 |
beforeAddLiquidity | 流動性を追加できるのはファクトリーだけで、ローンチ時だけです。 |
beforeRemoveLiquidity | 常にリバートします。流動性は永久にロックされています。 |
beforeDonate | 常にリバートします。 |
beforeSwap | 終わったラウンドを精算し、平均を更新し、手数料と税を徴収します。 |
afterSwap | スワップが指定しなかった側の金額にかかる手数料を徴収し、事前に手数料を取ったスワップが完全に成立したかを確認してから、3つのプールを再調整します。 |
手数料は hook のリターンデルタで徴収されるため、誰がスワップをルーティングしても適用されます。
誰が何をできるか
| 主体 | できること |
|---|---|
| 誰でも | ローンチ、取引、終わったラウンドの精算、クリエイターやトレジャリーの受け取りの実行、48時間が過ぎた提案済みの条件の適用 |
| デュエルのクリエイター | そのデュエルのクリエイター手数料を受け取る。手数料ごと役割を、承諾したアドレスに譲る |
| ファクトリーのオーナー | 新しいローンチの一時停止。48時間後に、今後のデュエルの上限付き条件やプロトコルのトレジャリーを変更する。貯まったプロトコル手数料は、受け取り時点のトレジャリーに入ります。すべてのデュエルのスワップ手数料におけるプロトコルの取り分をすぐに下げる、または戻す(条件を超えることはない)。 |
| 誰にもできない | 流動性の引き出し、トークンのミント、ポットの移動、稼働中のデュエルでトレーダーが払う手数料やクリエイターの取り分の変更、デュエルの条件を超えるプロトコルの取り分の引き上げ、デュエルのクリエイターの役割の奪取、コントラクトのアップグレード |
その他
- セキュリティ:資金を守る仕組みと、その検証方法。
- Duel で開発する:自分のコードからデュエルを読み、取引する方法。