Est-ce que «previousblockhash» est toujours renvoyé des appels RPC getblock?

Matthew Roberts

Est-ce que «previousblockhash» est toujours renvoyé des appels RPC getblock?


L’appel RPC getblock (hachage) renvoie-t-il toujours un champ « previousblockhash » et sinon: dans quelles conditions ne le renvoie-t-il pas?

Contexte: de nombreux algorithmes suggèrent d’utiliser ce champ pour reculer dans la blockchain lorsqu’un orphelin ou une réorganisation se produit, mais le code C ++ indiquerait que ce champ n’est pas toujours présent.

 if (blockindex->pprev) result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); 

Serait-ce dû aux réorganisations de chaînes et aux orphelins? Quelqu’un peut-il expliquer quelle dynamique ferait échouer ce contrôle et quelle serait la prochaine étape s’il le faisait?

Anonyme

Voulez-vous vraiment dire des blocs orphelins, ou plutôt des blocs périmés? Un bloc ne peut jamais devenir orphelin, Bitcoin Core ne peut pas connecter un bloc sans son précédent.

Matthew Roberts

Je suppose que bloc périmé pourrait être le terme que je recherche ensuite. Bonne observation

George Kimionis

Il ne renverra pas d’informations sur le bloc previousblockhash pour le bloc de genesis , par exemple.

Pieter Wuille

@Bitcoin Belle analyse, mais ce n’est pas correct. getblockheader a en effet été ajouté car getblock peut échouer lorsqu’un bloc est élagué, mais même dans ce cas, les entrées d’index restent. Voir ma réponse.

Anonyme

@PieterWuille C’est vrai, cela a beaucoup plus de sens.

Réponses


 Pieter Wuille

Elle ne sera jamais présente pour le bloc de genèse.

Un bloc n’est ajouté à l’index de bloc que lorsque tous ses ancêtres s’y trouvent également.

L’index des blocs est conceptuellement un arbre: chaque bloc peut avoir plusieurs descendants mais un seul ancêtre. Une réorganisation passe d’une branche de l’arbre à une autre et n’affecte pas cela.

Les blocs orphelins (au sens de blocs sans parent connu) n’existent plus depuis Bitcoin Core 0.10 (nous ne téléchargeons les blocs qu’après avoir validé leurs en-têtes, donc le parent n’est jamais inconnu), et même avant cela, les blocs orphelins étaient juste stockés dans une file d’attente en mémoire et pas réellement ajoutée à l’index jusqu’à ce que leurs parents soient trouvés.

 

«previousblockhash», appels, des, est, Est-ce, getBlock, que, renvoyé, RPC:, toujours

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *