Abstract:
There have been lots of discussions lately regarding indexer centralization, primarily in regards to a collection of stake that seems to have congregated into the hands of a small number of indexers within the protocol. Many of us agree that a huge addition of value to The Graph is its decentralization, and many attempts to remediate this issue have been presented. Taking into consideration many of them, I am proposing a rather simple solution to the issue that penalizes success nor gives an unfair advantage to any single party within the ecosystem. With this proposal, I suggest that delegation capacity multipliers (currently set at a static 16x for all indexers) be calculated as a factor of indexer self-stake in the protocol, as a strictly decreasing exponential decay function representing the multiplier at which an indexer can be considered overdelegated.
A few starting points that underpin this proposal:
- Decentralization is a massive part of The Graph’s value, and its expansion benefits all parties and network roles in the long-term.
- Indexer stake, and the distribution thereof, is a somewhat touchy subject. Attempts to remediate this issue should not give special economic privileges to one party over another, or attempt to “steal” market share from any single party. Parties should be open to competition at a base level of the protocol.
- The delegation market is based on free-market principles of competition, and this should not be undercut for ease of implementation. Indexers should always have to compete with one another for delegation stake, and any proposal to decentralize future or current stake should not change that.
- Indexing on the mainnet is currently a capital-intensive operation due to infrastructure costs and variable costs such as gas fees and stake amount, and this makes smaller indexing operations (above the threshold of 100k) harder to operate without large delegations.
With that said, the current system works as follows:
Allowed delegation amounts operate on a multiplier of owned stake => delegated stake at a constant factor, currently set to 16. Thus, if an indexer self-stakes the minimum GRT allowed by the protocol (100k GRT), they will be allowed to accept 16 times that amount as delegations, which is 1.6 million GRT. This is the same for all indexers- as the number of self-stake grows, so does their overall capacity. Thus, as indexers get larger, they are incentivized to add to their self-stake in order to grow larger. As we have seen, however, this makes it much more difficult for smaller indexers to operate, as they require much more delegated GRT to be profitable.
The proposal:
Instead of the constant 16x multiplier, the delegation multiplier should be a strictly decreasing function that models exponential decay of a given factor.
Currently, this function is modeled as y = 16
, where
• y represents the multiplier for an indexer, and
• x represents the indexer’s owned stake (a straight line)
The proposed function is as follows:
y = (a - c)b^x + c, where
• a > 0,
• 0 < b < 1
• c >= 0
and
• y represents the multiplier for an indexer,
• x represents the indexer’s owned stake (either in relation to the largest network stake, or a percentage of the total network self-stake. This measure is open for discussion.)
• a represents the maximum delegation multiplier possible (for indexers with at least X self-stake)
• b represents decay rate between 0 and 1 (likely .999999) to determine the rate at which delegated GRT allowed decreases, and
• c represents the minimum delegation multiplier possible (to receive delegations)
This would make the multiplier curve look like this:
Which may be observed at the following link: Desmos | Graphing Calculator
Pros:
- This solution does not require shifting of stake- instead, it gives smaller indexers greater opportunity to leverage their own stake as they grow, while still being required to compete for delegators in the same capacity as today.
- This solution is a relatively simple implementation- the getIndexerCapacity() function found here Staking | Address 0xc3d14a6e96bcbd7915b940504537ab9a4ca1e55c | Etherscan would simply require another math function (likely in a library) that uses the indexer and network details to calculate the indexer’s multiplier based on their size (either arbitrary or relative to the network). It goes without saying that the getters/setters would also need to be slightly updated as well.
- This solution sets both a maximum and minimum multiplier on delegation stake allowed (determined by variable “c”), so large indexers still have the ability to leverage their self-stake at a factor higher than they were.
- All these variables may be easily tweaked as the network (and testing) progresses. This includes the multipliers themselves, as well as the decay rate (use desmos to adjust “b”).
Cons:
- This solution may not address the direct root of the issue, as current evidence seems to indicate that delegation cap isn’t what prevents smaller indexers from succeeding. This can be seen at Indexers | Graph Explorer , which indicates that very few indexers are overdelegated. Going forward, however, this may not be the case, especially as overall delegated network stake grows in relation to the indexer self-stake.
- There is a risk that this sort of system would simply shift larger indexers to break their operation(s) into smaller indexers to reap greater rewards- this sybil effect is common in a permissionless network such as indexing, and I believe that this is not a very large issue at scale, as the overhead to run (gas fees, variable costs, etc.) multiple indexing nodes on the mainnet is too complicated a task for most operations. Additionally, if this sort of effect occurs, the values of the function can change (less/more steep curve, or a lower maximum multiplier) to accommodate this to still incentivize large indexer self-stake in the protocol.
Open Questions:
- Do you think this improvement would lead to more opportunity for smaller indexers, helping further decentralize the indexer-owned stake in the long term?
- Does this proposal miss anything?
- Are there any potential unintended consequences of this sort of change in the protocol?
- What sort of conjunction might make this proposal more potent in order for smaller indexers to still compete fairly?
Feel free to comment here and/or reach out to ethwiz#2744 on Discord for any questions.