On oracle reliability

Terra’s stability mechanism, and indeed the very creation of its eponymous stable-coins, are predicated on bringing real-time, reliable exchange rates of luna with various supported fiat currencies. Currently an oracle rate is “activated” on-chain when in each VotePeriod (approx. 1.2 mins) more than 50% of validating power submits a vote on a particular exchange rate.

Problem is, incentives are not always set up to ensure reliable oracle voting (i.e. less than 50% of oracles may be voting on exchange rates).

  • Given that rewards for voting “correctly” on any given VotePeriod is dependent on the sum of swap spread fees that were paid in the same period, validators may be incentivized to stop submitting oracle price vote transactions (and incurring the attendant fees) if they predict a low volume of swaps. This can come from Terra consistently trading close to the peg, which eliminates on-chain arbitrage opportunities (and thereby reduces incentives to perform swaps).
  • In some sense, tying oracle participation rewards to swap fees produces incentives to vote dishonestly. Swaps increase if Terra arb opportunities arise, which is likely to be produced if Terra’s on-chain rate diverges significantly from its open market rate.
  • Rewarding votes in a tight band around the elected median encourages the formulation of cartels, and centralization of data feeds (in some sense, worse)

To solve the above problems, I propose the following solution:

  • Add a slashing condition for low availability on oracle votes: Validators missing more than 95% of the recent 1000 votes get slashed 0.1% of their stake. Missing here is defined as more than 95% of votes straying outside of the elected median, or no votes submitted.
  • Decouple validator rewards from swap fees: validators get paid swap fees from an average of the previous 1000 voteperiods. More simply put, swap fees from every vote period gets submitted to a global swap fee pool, and 1/1000th of the pool gets doled out as rewards at the end of every voteperiod.

What do you think?