-
Notifications
You must be signed in to change notification settings - Fork 109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
POI null after allocation closed despite full sync #186
Comments
Thanks so much for the detailed report, @hyperbot16. I've root-caused it and now understand why this happens: Right now, graph-node doesn't always have all block information available for creating POIs. In those cases it will return a We have to improvements planned:
I'm actively working on 1 right now and should have a fix ready soon! |
For 1, this is what needs to get done. I'll track the progress here:
|
This is to avoid `null` POIs if the block hash isn't found in the block store (which could be the case on one indexer but not on another). This can lead to indexers losing rewards despite indexing a subgraph correctly. By requiring e.g. the indexer agent to always provide block number and hash in `proofOfIndexing` queries, we can compute the POI on any indexer, regardless of what is in their block store. This is easier than resolving the block hash -> number on-demand in the `proofOfIndexing` resolver. The agent already knows both values anyway. Part of fixing graphprotocol/indexer#186.
This adds passing the epoch start block number to the `proofOfIndexing` query, which is being added to graph-node in graphprotocol/graph-node#2100. This change is necessary so that we can reliably obtain a POI even if the graph-node block store doesn't have the Ethereum block in question. This fixes the main problem in #186. For another improvement (allowing indexers to deal with legitimate 0x0 POIs by closing allocations with manual intervention), we'll create a separate issue.
The necessary changes are now in review. I'll create a new issue for the improvement of capturing potential 0x0 POIs and allowing indexers do deal with them manually in a bit. |
This is to avoid `null` POIs if the block hash isn't found in the block store (which could be the case on one indexer but not on another). This can lead to indexers losing rewards despite indexing a subgraph correctly. By requiring e.g. the indexer agent to always provide block number and hash in `proofOfIndexing` queries, we can compute the POI on any indexer, regardless of what is in their block store. This is easier than resolving the block hash -> number on-demand in the `proofOfIndexing` resolver. The agent already knows both values anyway. Part of fixing graphprotocol/indexer#186.
This is to avoid `null` POIs if the block hash isn't found in the block store (which could be the case on one indexer but not on another). This can lead to indexers losing rewards despite indexing a subgraph correctly. By requiring e.g. the indexer agent to always provide block number and hash in `proofOfIndexing` queries, we can compute the POI on any indexer, regardless of what is in their block store. This is easier than resolving the block hash -> number on-demand in the `proofOfIndexing` resolver. The agent already knows both values anyway. Part of fixing graphprotocol/indexer#186.
This adds passing the epoch start block number to the `proofOfIndexing` query, which is being added to graph-node in graphprotocol/graph-node#2100. This change is necessary so that we can reliably obtain a POI even if the graph-node block store doesn't have the Ethereum block in question. This fixes the main problem in #186. For another improvement (allowing indexers to deal with legitimate 0x0 POIs by closing allocations with manual intervention), we'll create a separate issue.
I updated the agent, service and cli to version 0.9.3 and graph-node 0.21.1 and closed the allocation after 10 days. Subgraph was synced to the latest block at the time of the closure. It seems that I have lost all the rewards for this period because of what is probably a bug. Transaction Hash: 0x6ea2554c3967c046783e2515a09739999ccd6babfa598a17dc67127eea89215f
GitHub (https://github.com/graphprotocol/indexer/blob/master/docs/errors.md) |
Just had the same issue with the allocation. All the indexer rewards lost
|
The graph node is latest, but build is with warning
|
@Grom81 @Bambarello Both of your errors mean that graph-node was not updated to 0.21.1. The compilation warning is something you can ignore. |
) This properly prevents #186. We'll still want to capture these cases and allow indexers to retry them later through `graph indexer` or resolve them manually.
) This properly prevents #186. We'll still want to capture these cases and allow indexers to retry them later through `graph indexer` or resolve them manually.
This adds passing the epoch start block number to the `proofOfIndexing` query, which is being added to graph-node in graphprotocol/graph-node#2100. This change is necessary so that we can reliably obtain a POI even if the graph-node block store doesn't have the Ethereum block in question. This fixes the main problem in #186. For another improvement (allowing indexers to deal with legitimate 0x0 POIs by closing allocations with manual intervention), we'll create a separate issue.
) This properly prevents #186. We'll still want to capture these cases and allow indexers to retry them later through `graph indexer` or resolve them manually.
I have closed an allocation after 10 days and have noticed that my POI was null despite ensuring that everything subgraph was synced to the latest block at the time of the closure. It seems that I have lost all the rewards for this period because of what is probably a bug.
Transaction Hash: 0x9c7e7429ccba712ae94e34656fa00375bdf32f0d0eeb139ac99304d7c712e033
{"level":30,"time":1609893313576,"pid":1,"hostname":"indexer-agent-8684f44768-6k94w","name":"IndexerAgent","component":"Network","indexer":"0xE0C1aF3235Ecee2c085eaD8e918cd394986d2303","operator":"0xA87c60067A47Cb1Ce79FecB2a6FdC2b4F3d01435","allocation":"0x9354Fd32Fe90D33936311D1D7BbFeCe76352497F","deployment":{"bytes32":"0x31edcacc9a53bc8ab4be2eeb0d873409da4c4228cb2d60e4243bd3b4e8af7500","ipfsHash":"QmRhYzT8HEZ9LziQhP6JfNfd4co9A7muUYQhPMJsMUojSF"},"createdAtEpoch":13,"poi":"0x0000000000000000000000000000000000000000000000000000000000000000","createdAtBlockHash":"0x5a340c71b5995c078adf5651a3f4ead963498ac4c0bccff8dda9f069d405c5f8","msg":"Successfully closed allocation"}
POI at time of allocation creation:
I main changes I have performed during that period are:
The text was updated successfully, but these errors were encountered: