Format du contenu d'une clé de bloc dans LevelDB de Bitcoin  ?


Ce sujet m’a fait beaucoup chercher car ce message est presque tout ce qu’il y a comme forme de documentation (merci Pieter pour cela). La pièce manquante, du moins de mon point de vue, est que ces champs sont encodés en base 128 / Varint. Pour compliquer les choses, il ne s’agit pas du même Varint que dans les représentations de tailles en bloc Bitcoin sérialisé (comme expliqué ici).

Donc, pour tenter d’apporter un peu de lumière sur ce sujet, voici 2 morceaux de code, l’un en python et l’autre en golang, qui décoderont et liront ces champs à l’aide d’une fonction de décodage base128. Le premier est adapté du livre « The Undocumented Internals of Bitcoin, Ethereum and blockchains ».

La version golang est ma propre adaptation de ce code python.

Format du contenu d'une clé de bloc dans LevelDB de Bitcoin  ?

version Python :

import leveldb import sys def reverse(hash) : return «  ».join(reversed( for i in range(0, len(hash), 2)])) def base128(ans, off) : n = 0 while True : ch = ord(ans) print ch off = off + 1 n = (n