最近の池の利益の Dune クエリ:https://dune.com/queries/2513483
プールの収益ダッシュボード:https://tools.defieye.io/superset/dashboard/azuro/?standalone=true
コントラクトアドレス#
Polygon のコードを例にすると、
Oracle 0x94429f3d92ad38c70e44218460a97021548d17ad
LP 0x7043E4e1c4045424858ECBCED80989FeAfC11B36
Core1 0x3B182e9FbF50398A412d17D7969561E3BfcC4fA4 Core コード
Core2 0xbb13f8981cefd19ddc5338f0f1e11de45e8a11ca BetExpress コード は Core1 の組み合わせベットです
LP.addReserve#
gameId、lockedReserve、finalReserve、leaf を渡す
利益 = finalReserve - lockedReserve
利益が 0 より大きい場合、leaf の前のノードにのみ配布されます
利益が 0 より小さい場合、すべての LP プロバイダーが損失を被ります
したがって、資金を投入する場合は、現在の locked 資金の全体に対する割合を確認することをお勧めします。この比率は、投資後の短期間内に直面する最大の損失です(この期間中に lockedReserve が消費されると、LP 全体が損失を被りますが、利益がある場合はあなたには分配されません)。
Core1._calcReserve#
max( abs(reinforcement-funds[0]), abs(reinforcement-funds[1]) )
これは、LP がこの条件で最大の損失を被る可能性です。すべての条件を合わせると、LP の locked になります。
Core1.resolveCondition#
Core1 のみで使用されます
すべての条件は 2 つの側面のみであり、outcomeIndex は 0 または 1 です
0 が勝ったと仮定すると、プールはどれだけの資金を獲得できるでしょうか?それは 1 が投入した資金から 0 に支払われるべき配当を引いたものです
したがって、次のようになります:
lockedReserve = _calcReserve(reinforcement, funds);
profitReserve = lockedReserve + funds[oppositeIndex] - reinforcement;
addReserve(condition.gameId, lockedReserve, profitReserve, condition.leaf)
ここで、プールの利益はfunds[oppositeIndex] - reinforcement;
です。つまり、失敗したユーザーが投入した元本から、利益を得たユーザーが得た部分を差し引いたものです。なぜなら、funds のデフォルト値は reinforcement から始まり、ユーザーの元本は彼がいる側の funds を増やし、拡大されたオッズの対戦相手側の funds を差し引くからです。
LP.bet#
ユーザーのベットトランザクション:https://dashboard.tenderly.co/tx/polygon/0x97935416834c48f2bce822d1cd18ba01fb58e14b5191f8bd80f9f94a45dc6882
これは Core1 のものです
ユーザーは USDT を LP に提供し、それが Core.putBet に入ります
現在の virtualFunds、ユーザーが投入した amount の数量、および設定された margin に基づいて、スリッページを更新します。CoreTools.calcOdds
このトランザクションでは、ユーザーは 0 に 2u をベットし、funds と virtualFunds は両方とも 0 です。この側面は 2u 増加し、対戦相手の側面 1 は元本に乗じたオッズ 2 * 1.219464097168 = 2.438928u を減少させます。
Core2 の betData はSubBet[] memory subBets, uint64 minOdds
です
LP.withdrawPayout#
Core.resolvePayout に最初に入ります
Core1 は単に NFT の所有者と viewPayout の結果を返します
しかし、Core2 はまだ lp.addReserve を呼び出してプールからお金を引き出します