0007-separate-slashing-percentages
Abstract
This proposal introduces two different slashing percentages, one for indexing disputes and another for query disputes. This change allows slashing percentages to be set in such a way that accounts for the different risks of producing slashable faults while indexing and querying.
Motivation
One of the security mechanisms in The Graph relies on filing disputes whenever an Indexer presents a wrong Proof of Indexing (PoI) or if it returns a query with inaccurate data.
After any participant files a dispute, the Arbitrators will decide if the dispute is valid according to norms established via protocol governance. If the Arbitrator accepts the dispute, the offending Indexer's stake is slashed according to a governance parameter called slashingPercentage
.
The issue with having a single slashingPercentage
parameter for both indexing and query disputes is that an Indexer, in the regular day-to-day operation, will return a disproportionately higher amount of queries than PoIs. As a result, servicing queries is a higher-risk activity than indexing.
This proposal allows two different slashing percentages to balance the risk, one for indexing disputes and another for query disputes.
Detailed Specification
All the changes required to implement this proposal are related to the DisputeManager contract.
Current Behavior
By default, every time disputes are accepted, indexers get slashed on the their total stake using the single slashingPercentage
protocol parameter, both for indexing dispute and query disputes.
Proposed Changes
1) Introduce separate protocol parameters for query and indexing slashing
Change set slashing percentage signature to accept two different parameters.
Add two state variables in the contract storage:
2) Add dispute type when created
Whenever a new dispute is created we store the dispute type. This way the contract can resolve using the appropiate slashing percentage.
3) Dispute resolution
Update the acceptDispute
function to slash based on the dispute type.
Backwards Compatibility
The current solution changes the getter of the previous slashingPercentage
variable. Anyone doing an integration with the contracts need to take special care to call the proper idxSlashingPercentage
or qrySlashingPercentage
according to their needs.
Additionally, the function setSlashingPercentage(uint32 _percentage)
changed to setSlashingPercentage(uint32 _qryPercentage, uint32 _idxPercentage)
.
Validation
Audits
An audit of the changes described in this document has been performed by OpenZeppelin.
Testnet
The implementation is yet to be deployed to testnet and the source code verified in Etherscan.
Copyright Waiver
Copyright and related rights waived via CC0.
Last updated