Skip to content

feat(oracle): oracle gas needs to be low/negligible  #1592

@Unique-Divine

Description

@Unique-Divine

Problem

Currently, votes for x/oracle are expensive for node operators even with lowered fixed gas. Currently, it costs 500 unibi and is dictated by the OracleMessageGas constant from ante/fixed_gas.go. Although this gas cost is low compared to something like MsgMarketOrder (200k unibi), it adds up to be a lot due to the frequency of transactions that have to be sent for the oracle voting rounds.

Prohibitive costs on x/oracle make it unlikely for us to have full participation from every active validator, so we need to make it more cost-efficient without increasing the potential for spam.

MVP Solution

Add a module-specific ante handler similar to the one in x/devgas/ante that has access to the OracleKeeper. When a tx comes in:

  1. Check if it has an oracle pre-vote or vote msg. Otherwise, don't change its gas (exit).
  2. Check if the sender is an eligible oracle voter (active validator or delegated feeder). Otherwise, exit.
  3. Ensure that the tx only has one message. Otherwise, exit.
  4. If the oracle has not already voted or prevoted at the current ctx.BlockHeight and voteHash, lower the gas cost significantly.

Open Problems

Spam prevention: We need to make sure that a single active validator can't troll by filling up blocks with low-gas oracle transactions. This becomes more challenging as we lower the gas for the oracle voting messages.

What ways can step 4 of the MVP solution be exploited to spam the network?


Log:

  • 2023-09-18: Description follows a recent discussion with @jgimeno

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

Status

➡️ Pending Review/Merge

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions