fix: allow indexers from registering multiple times to set registration params #1215
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The
SubgraphService
contract only allows indexers to register once. This is achieved by reverting calls to theregister()
function if the indexer hasindexer.registeredAt != 0
. The idea behind this limitation is that registering is a "sign up" type of event that should only happen once for any given indexer.This in itself does not create problems. However
register()
is the only function that allows setting the indexer'surl
andgeoHash
, meaning that those cannot be changed once the indexer is registered. Since there is nounregister()
this means that an indexer would be locked forever with theurl
andgeoHash
they initially registered with.Fix
The proposed fix:
indexer.registeredAt !=0
check, allowing indexers to repeatedly callregister()
to set theurl
,geoHash
(andpaymentsDestination
). This puts theSubgraphService
's behavior in line with the legacyServiceRegistry
.registeredAt
property from the indexer struct. It was only being used to verify if an indexer was registered. The same behavior can be achieved by testing theurl
orgeohash
length, as the contract would not allow setting them to a 0 length string.