graphprotocol / graphprotocol/graph-node

POI is generated for invalid block number and hash

Ouverte
#4,369 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Stale
Langage dominant
Rust
Étoiles
3.2k
Forks
1.1k
Merge moyen
4 j 1 h
PR mergées (30 j)
1

Description

Do you want to request a feature or report a bug?
bug

What is the current behavior?
Currently when querying proofOfIndexing in the admin API with incorrect block hash or invalid block number will each return different POIs. Since invalid POIs can be generated this way, would it make sense for graph-node to error out saying that the block number or hash is invalid for the subgraph (and network that the subgraph is indexing)?

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem.
Example query for a goerli subgraph with combination of POI queries on the same subgraph:

{
  indexingStatuses(subgraphs: ["QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC"]) {
    subgraph
    synced
    health
    fatalError {
      handler
      message
    }
    chains {
      network
      ... on EthereumIndexingStatus {
        latestBlock {
          number
          hash
        }
        chainHeadBlock {
          number
          hash
        }
      }
    }
  }
  blockHashFromNumber(network:"goerli", blockNumber:8491464)
  right_hash: proofOfIndexing(subgraph:"QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC",
  	blockNumber:8491464,
    blockHash: "5d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
  )
  wrong_hash: proofOfIndexing(subgraph:"QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC",
  	blockNumber:8491464,
    blockHash: "3d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
  )
  very_wrong_hash: proofOfIndexing(subgraph:"QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC",
  	blockNumber:8491464,
    blockHash: "636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
  )
  wrong_number: proofOfIndexing(subgraph:"QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC",
  	blockNumber:7491464,
    blockHash: "3d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
  )
  very_wrong_number: proofOfIndexing(subgraph:"QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC",
  	blockNumber:1464,
    blockHash: "3d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
  )
}

Corresponding output

{
  "data": {
    "indexingStatuses": [
      {
        "subgraph": "QmfDSEUwk2Wp1cVEQ8FcJLVJLbPRfLpG75gLTEHkrSEFRC",
        "synced": true,
        "health": "healthy",
        "fatalError": null,
        "chains": [
          {
            "network": "goerli",
            "latestBlock": {
              "number": "8491464",
              "hash": "5d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
            },
            "chainHeadBlock": {
              "number": "8491464",
              "hash": "5d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488"
            }
          }
        ]
      }
    ],
    "blockHashFromNumber": "5d80892e197d636d669af71f06e3fb23ffe5b16b0f3165ac866bdb34ec417488",   // correct hash from the block number
    "right_hash": "0xb632fc83cb304ce0dfc3697901b848b97dabcdeac0229bd097c94296a2f5ff66",                   // with valid hash and number
    "wrong_hash": "0xd8fc7f59e4f010a070f5b0096841db437085fdfab8e2c5c9575b24e0c1dbd24a",                  // expected error of invalid hash corresponding to the number
    "very_wrong_hash": "0x11a87231123516f68b93a13860a63e5c6773824be33299b7e2339a27dff7a4a4",        // expected error from invalid hash string length
    "wrong_number": "0x2a39bcf82d41759c16e669483969bea5a15ed2de4941dc6bc3b25eb78cf8b464",         // invalid block number
    "very_wrong_number": "0x2a39bcf82d41759c16e669483969bea5a15ed2de4941dc6bc3b25eb78cf8b464" // same answer when invalid block number
  }
}

What is the expected behavior?
It would be great if Graph node would validate the block inputs during a proof of indexing query, as it should prevent manual/accidental input errors

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par la requête proofOfIndexing de l'admin API et comparez ses entrées de bloc avec les résultats de blockHashFromNumber et indexingStatuses affichés dans le rapport. Reproduisez les combinaisons de hash et de numéro valides et invalides de l'exemple. C'est terminé lorsque les entrées de bloc invalides renvoient une erreur au lieu de générer des POIs différents.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
graphql, rust
Domaine
api, blockchain
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.