-
Notifications
You must be signed in to change notification settings - Fork 286
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[oracle/swap] discussion topic on oracle/swap mechanism #133
Comments
Oracle update is scheduled in next release. Here's our thoughts:
Decreasing voting cycle to shorter period is another consideration. |
Thanks for the information. Even though the suggested methods does not ultimately prevent manipulation, it might help to cap the sudden huge swap function manipulation, ONLY IF the cap percentage decrease significantly. Currently the cap for LUNA minting per day is 1%, which is 30 million dollars based on current LUNA market price in Coinone, which is quite enormous amount for untested functionality. Therefore I still think current cap parameter is very risky to launch the swap market. |
Thanks for starting this conversation @dlguddus. I have also potential vectors for abuse with the current oracle system.
With regard to the above, (1) is solved by using blind voting. That is, the votes of other voters are not visible until after the voting period ends. This is trivial to implement in terms of removing output from the cli/lcd, but anyone watching the transactions will still have visibility of this; so we'd need a cryptographic method to do this. And I haven't figured that out yet 👍 In response to (2), rewarding all validators who vote incentivised decentralisation, but doesn't disincentivise attempting to manipulate markets. Slashing would disincentivise this, but feels like a disproportionate punishment for a single awry vote (external services can't be relied upon, of course). I have some thoughts around this, mostly around temporary bans from voting (and thus reward claims) for repeat offenders and will update later. |
I could imagine a 2-phase process where,
As long as we include a random nonce in the votes and use a preimage resistance this could mostly solve the issue 1). |
Thanks for bringing up another pain point. Hendrik's solution generally solve the problem but seems little bit complex. There should exist easy terracli method to mitigate those functionality imo. We also need the precise target consensus of Oracle price. Because we (will) have various exchanges to trade Luna and also the price changes during the Oracle voting period, we need a consensus that which price rule(something like volume weighted average price of voting period, how to average up different exchanges, how to deal with extremely over/under-priced exchange, etc) we should target to vote. Terra team can just let validators know the price rule. |
Do you consider breaking the voting period into two phases then? A vote phase, and a reveal phase. E.g. Period is VotinPhase Starts at height Multiple infractions here: A, C-X should receive some reward for voting (maybe 0,.25 of reward pool / validators), plus A, C-W should some additional element for being within 1 stddev of mean (0.75 of pool / validators) Values are somewhat arbitrary at the moment. @dlguddus - I do think in needs to be more complex though in order to avoid the kind of attack vectors we see today. |
Yes exactly Joe. Very nice write-up 👍 I agree that we should reward everyone who reveals a vote instead of slashing. That incentivizes revealing the true preimage/vote and encouraged diversity. The incentive could still be higher proportionally to how close the vote is to the weighted median. We probably don't need to slash for revealing the wrong preimage but rather just let the tx fail i.e. be rejected before it is added to the mempool. |
@joe-bowman only problem i have with the bipartite commit / reveal vote scheme is that every oracle price commit has a 1 period delay. So during times of extreme volatility we will likely trade off price-responsiveness for vote confidentiality... can anyone think of a scheme with a more optimal tradeoff? Suppose trivial way to do this is to drastically shorten oracle vote periods |
I close this issue because many of the suggestion has been implemented in the codebase. |
I hope this topic leads to fruitful discussion among validator community members for better possible adjustment strategies.
The text was updated successfully, but these errors were encountered: