Economics of participating
Why submit an initial report?
An initial reporter can earn a fee, in ETH, by committing amounts of two tokens which attests to their price; however, if the price moves enough after attestation, the reporter will lose money to an honest disputer swapping profitably against them. Since the honest reporter receives a small percentage fee from the swap, the price needs to move outside this fee boundary in order for them to lose money. We define the initial reporter EV as: EV_initial = initial_report_reward - gas_fees - jump_loss + min(net_settler_reward, 0) If EV_initial > 0, the initial report is net profitable.
Why submit a dispute?
In the case of a report that should be disputed because the price moved enough before the settlement time, a disputer can earn the returns from swapping their tokens with those of the initial reporter at a good price. The disputer pays swap fees to the previous reporter. Any disputer is ineligible for the eth fee paid to the initial reporter. We define the disputer EV as: EV_disputer = abs(token1AmountToUsd - token2AmountToUsd) - gas_fees - swap_fees - jump_loss + min(net_settler_reward, 0) The absolute difference in token values in the prior report is what the disputer receives before expenses. If EV_disputer > 0, the dispute is net profitable.
Jump loss
Since reporters are effectively putting up a limit bid and ask at the same price, a jump in either direction results in a loss. You could put up $100 of WETH and $100 of USDC, and the price of ETH can instantly drop -50% and then you get swapped against, losing $50 from the swap + $50 from the price itself dropping. This is a cost to a reporter, and should be modeled in the decision on whether to report or dispute, which we represent as jump_loss above. There is no "best" way to calculate jump loss. The oracle network will end up adopting the best methodology which will not be public. Given an oracle swap fee parameter (say 2000 for 0.02%) and given some settlement time, we find the first price outside +0.02% / -0.02%, take its distance from the nearest fee barrier and call this jump loss. So if the price jumps up +0.05%, the jump loss is 0.03%. If the price jumps down -0.06%, the jump loss is 0.04%. Sometimes, the price doesn't ever go outside the fee barrier, so the jump loss for that window is 0. You can add in a network dispute latency of 100-200ms as well to simulate the real world oracle game. The method by which you collect data and try to estimate real world jump loss may vary. Once you have an empirical jump loss figure, for example 0.0025%, the jump_loss cost term in the initial reporting or disputing EV is 0.0025% * (newAmount1ToUsd + newAmount2ToUsd). Note how higher multipliers result in more jump loss for reporters because you are exposed to jump loss on your capital commitment in the next round.
Settler reward
An initial reporter or disputer may need the oracle reportId to be settled before getting their money back. It is recommended to include net_settler_reward (settler reward minus settle gas cost) in the dispute and initial report EV calculation to ensure it is economical to free your money. Note that you do not need to use prevailing gas fees to calculate the settle gas cost if willing to wait until gas prices are lower.
Last updated