Fonction d’appel pour le bloc n sur la blockchain

Aliakbar Ahmadi

Fonction d’appel pour le bloc n sur la blockchain


J’ai parcouru main.cpp afin de savoir à peu près quelle fonction appelle le meilleur bloc et j’ai découvert qu’en fonction de la situation, il existe plusieurs noms de fonction et extraits de code similaires que je soupçonne d’appeler le meilleur bloc. Voici ma liste:

  • CBlockIndex * pindexBestKnownBlock
  • uint256 CCoinsView :: GetBestBlock () const
  • CBlockIndex * pindexBestHeader
  • CBlockIndex * pindexBestForkTip
  • pindexBestInvalid
  • // déplace le meilleur pointeur de bloc vers le bloc prevout
    view.SetBestBlock (pindex-> ​​pprev-> GetBlockHash ());
  • chainActive.Tip () -> GetBlockHash (). ToString ()

Maintenant ma question: Lequel des éléments de la liste ci-dessus puis-je utiliser et modifier d’une manière qui appelle un bloc qui est n blocs plus profond que le meilleur bloc sur la même blockchain ?

Réponses


 StephenM347

La variable chainActive stocke la chaîne de blocs la plus connue. Mais il s’agit essentiellement de la chaîne d’en-têtes de bloc, pas des blocs eux-mêmes. Pour charger le bloc réel à partir du disque, utilisez la fonction ReadBlockFromDisk (). Mais sachez que c’est une fonction coûteuse à utiliser, elle ne revient pas immédiatement.

chainActive[0] ou chainActive.Genesis() [1]

Donne l’en-tête du bloc genesis.

chainActive[chainActive.Height()] ou chainActive.Tip() [2]

Donne l’en-tête du bloc le plus récent de la chaîne active.

 chainActive[chainActive.Height()-10] 

Donne l’en-tête de bloc pour le bloc avec 10 blocs construits au-dessus.

Utilisez l’un de ces pointeurs CBlockIndex comme ci-dessous pour obtenir le bloc.

 CBlock block; if (ReadBlockFromDisk(block, pindex)) { // do something } 
Aliakbar Ahmadi

Merci! ReadBlockFromDisc() accède-t-il à blk ?????. Dat ? Existe-t-il un logiciel ou une application pour ouvrir et lire blk ?????. Dat ?

StephenM347

Je crois qu’il accède aux fichiers blk ___. Dat. Ces fichiers ne contiennent que des octets de bloc concaténés bruts, vous aurez donc probablement besoin d’un analyseur de chaîne de blocs pour y accéder. Qu’est-ce que vous essayez de faire exactement? Je pourrais peut-être vous indiquer un bon outil pour le travail.

Aliakbar Ahmadi

Je vais simuler et analyser les résultats d’une « course à l’extraction de blocs ». Je veux faire une reconstruction de bitcoin-0.10.0 avec du code modifié qui prescrit un algorithme de minage égoïste. Pour cette partie, j’ai eu l’indication que le code bitcoin doit fonctionner avec un pointeur (parlant au niveau du processeur) qui est décalé d’avant en arrière en fonction de l’état d’un nœud. Et ici, je veux implémenter le comportement égoïste: le code modifié doit « pointer vers des blocs » selon l’algorithme de l’attaque. Avec l’idée d’un pointeur, j’espère pouvoir «masquer» des blocs – cela signifierait un pointeur rétrogradé vers un bloc connu du public.

Aliakbar Ahmadi

Pour la simulation, par exemple, je prévois d’exécuter 1 nœud égoïste (nœud modifié) avec 4 autres nœuds honnêtes (code original), bifurquer la blockchain et commencer à explorer les deux branches.

StephenM347

Je pense que le code est à peu près la meilleure documentation à ce stade. Lisez simplement main.cpp, chainparams.cpp et chainparamsbase.cpp. Recherchez les éléments de code dont vous n’êtes pas sûr de voir leur documentation (par exemple std :: vector ou std :: map, ou tout ce qui concerne le boost). Bonne chance!

 

#la, #pour, bloc, blockchain, d’appel, fonction, Le, n, sur

 

yahoo

Laisser un commentaire

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