Introduction to DVM

Monitoring and disputing values in Fetch Oracle.

Background

In order for the Fetch Oracle to provide accurate, quality data, the data submitted to the Oracle must be monitored, validated and — when the legitimacy of data is in question — disputed.

How to Dispute a Value Submitted to Fetch

The easiest way to dispute a value submitted to the Fetch Oracle is to use the Fetch Dashboard.

How to Run an Automated Monitoring and Disputing Tool (DVM)

For more advanced users, it's possible to run a DVM that will automatically monitor a values submitted to the Fetch Oracle. The solution that Fetch provides is DVM + Telliot.

The Disputable Values Monitor (DVM)

The DVM is a CLI dashboard and text alerts app for disputable values reported to Fetch oracles. The DVM constantly monitors Fetch data submissions and compares them to the data available on the API specified by the user.

By default, DVM will monitor for PLS prices and dispute them if the percentage difference against its source is greater than 10%.

Installation instructions can be found on the install page.

Once a disputable value is picked up by the DVM, it sends an alert to a specified communication channel such as a mobile phone number, Slack channel, or email address that you specify. (You'll need to take note of the QueryID and timestamp located in the transaction link you receive if you wish to maually dispute the transaction.)

The next set of pages in this section detail how to install, configure, run and maintain your own DVM.

Auto Disputer

The DVM has an Auto-Disputer. The Auto-Disputer is a complex event listener for any EVM chain, and it specifically listens for NewReport events from Fetch Oracle that the user wants to monitor.

When the Auto-Disputer receives new NewReport events, it parses the reported value from the log, then compares the reported value to the trusted value from the Fetch reporter reference implementation (which is Telliot).

In order to auto-dispute, users need to define what a "disputable value" is. To do this, users can set "thresholds" for feeds they want to monitor. Thresholds in the Auto-Disputer serve to set cutoffs between a healthy value and a disputable value. Users can pick from three types of thresholds: range, percentage, and equality.

Range

Range: if the difference between the reported value and the Telliot value is greater than or equal to a set amount, dispute!

For example, if the reported value is 250, and the Telliot value is 1000, and the monitoring threshold is a range of 500, then the difference is 750 (it is >= to the range amount of 500). This means the value is disputable!

Therefore, a reported value of 501, in this case, would not be disputable.

The smaller the range, the more strict the threshold.

Percentage

Percentage: if the difference between the Telliot value and the reported value is greater than or equal to a set percentage of the Telliot value, dispute!

For example, if the reported value is 250, and the Telliot value is 1,000, and the percentage threshold is 0.50 (50%), then the percent difference is 75% of the Telliot value (1,000), and the value is disputable! Therefore, a reported value of 750, in this case, would not be disputable.

The smaller the percentage, the more strict the threshold.

Equality

Equality: if there is any difference between the reported value and the Telliot value, send a dispute!

For example, if the reported value is "0xabc123", and the Telliot value is "0xabc1234", then the value is disputable!

However, to prevent false disputes due to checksummed addresses, the equality threshold sees "0xABC" and "0xabc" as equal.

Considerations

Range thresholds best monitor high variance price feeds where the percent difference in price between sources is an unreliable indicator of a bad value. They are incompatibale, however, with non-numeric data feeds.

Percentage thresholds best monitor standard price feeds. The percentage is measured relative to the Telliot value, not the reported value. In other words, if the Telliot value is 1,000, a 25% difference is 25% of 1,000. Like range thresholds, percentage thresholds are incompatibable with non-numeric data feeds.

Equality thresholds best monitor data feeds where there is only one right answer. For example, EVMCall requests should be exactly equal to their expected Telliot response. They aren't very useful for price feeds, though.

Last updated