最近の池の利益の 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 に支払う必要のある payout を引いたものです
したがって、次のようになります:
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 を呼び出してプールからお金を引き出します