mookim

mookim

mookim.eth

azuro程式碼分析

https://azuro.org

最近的池子 profit 的 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

profit = finalReserve-lockedReserve
profit>0 的時候只分發給 leaf 之前的節點
profit<0 的時候所有 LP 提供者都要虧錢

所以如果你想投入資金,建議先看看當前的 locked 資金佔總體的比例,這個比例就是你投入後短時間內面臨的最大虧損(因為在這段時間內 lockedReserve 可能被消耗就是 LP 全體虧錢,但如果賺錢了不會分給你)

Core1._calcReserve#

max( abs(reinforcement-funds[0]), abs(reinforcement-funds[1]) )

就是 LP 對這個 condition 最大可能的虧損,所有 condition 加在一起就是 LP 的 locked

Core1.resolveCondition#

只在 Core1 裡有

所有的 condition 都是只有兩方的,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 從池子裡面扣錢

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。