Block Triggers hash write-up
@That3Percent ci sta già lavorando.
Dal 16/5/2022.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
One of The Graph's coolest features is that queries are deterministic, and
given a Qm subgraph hash, indexing it should always give the same result.
This is possible because we inherit the blockchain's determinism property,
however there's a big loophole which can break this amazing feature, which is
the chain provider.
Currently the main (or only) type of connection we give as option to indexers
(in The Graph Network) is the JSON-RPC one. To use it, they can either run a
node themselves or use a third party service like Alchemy. Either way the
provider can be faulty and give incorrect results for a number of different
reasons.
To be a little more specific, let's say there are indexers/nodes A and B.
Both are indexing subgraph Z. Indexer A is using Alchemy and B is using
Infura.
Given a block 14_722_714 of a determined hash, both providers will very
likely give the same result for these two values (block number and hash),
however other fields such as gas_used or total_difficulty could be
incorrect. And yes, ideally they would always be correct since they are chain
providers, that's their main job, however what I'm describing is the exact
issue we've faced when testing indexing Ethereum mainnet with the Firehose.
These field/value differences between providers are directly fed into the
subgraph mappings, which are the current input of the POI algorithm and the
base of The Graph's determinism property. Not taking the possible faultyness
of the chain providers into account, can break determinism altogether.
And the biggest problem today is that, to spot these POI differences, we have
to index subgraphs that use those values in their mappings. If by any chance
in Firehose shootout we've done in the integration cluster, there were no
subgraphs using these values we wouldn't spot any POI differences, which
is a very severe issue.
POI differences described in the Firehose shootout for reference:
https://gist.github.com/evaporei/660e57d95e6140ca877f338426cea200.
So in summary, the problems being described above are:
- That currently we consider the chain provider as a source of truth,
which can only be questioned in behalf of re-orgs; - We don't have a good way to compare provider input (that could spot POI
differences) without the indirection of a subgraph mapping.
- Lingua principale
- Rust
- Stelle
- 3.2k
- Fork
- 1.1k
- Merge medio
- 4g 1h
- PR unite (30g)
- 1
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di graphprotocol/graph-node
-
current: include emits an all-null bucket for dimensionless aggregations, nulling the whole response Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
graphprotocol/graph-node#6719 ·
-
RUSTSEC-2026-0194: Quadratic run time when checking a start tag for duplicate attribute names Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
graphprotocol/graph-node#6673 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
graphprotocol/graph-node#6650 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
graphprotocol/graph-node#6722 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
graphprotocol/graph-node#6721 ·
Tutte le issue di graphprotocol/graph-node
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
bevyengine/bevy#25861 ·
-
comp-datalake
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
ClickHouse/ClickHouse#121222 ·
-
enhancement remote
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100