Dans le monde des crypto-monnaies et des échanges décentralisés, Ethereum fait partie des protocoles phares. Les contrats intelligents déployés par la plateforme sont publiés dans une blockchain publique. Pour garder une trace de tous les échanges, il faut garder une preuve indélébile de toutes les interactions. Pour cela, Ethereum écrit des transactions qui sont enregistrées dans des regroupements nommés blocs qui sont eux-même stockés dans la blockchain.
Chaque bloc contient des données organisées via des arbres de Merkle. En cryptographie, un arbre de hachage permet de vérifier l’intégrité des données sans les avoir toutes à disposition. Dit simplement, si les hash (résumés) sont valides, alors les données sous-jacentes complètes sont valides. Dans un bloc Ethereum, on a les arbres de hachage suivants :
- State Trie : clé de 160 bits et valeur de chaque compte sur Ethereum ;
- Storage Trie : données du contrat. Hash de 256 bits ;
- Transaction Trie : un par bloc. Chaque transaction au sein d’un bloc a une adresse qui ne change pas ;
- Receipts Trie : reçus des transactions validées.
Les données de travail sont stockées dans une base de données non relationnelle de type clé-valeur. Ce type de base permet de stocker des tableaux associatifs et des tables de hachage. Ce type de bases de données convient bien aux données décentralisées, lorsque beaucoup de flexibilité est attendu et lorsque le volume de données est très important. Pour Ethereum, les outils utilisés sont RocksDB et LevelDB. LevelDB, le principal outil utilisé est une librairie Open source NoSQL proposée par Google. L’outil permet de compresser les données à des vitesses très importantes mais ne dispose pas d’index et n’est pas requêtable en SQL.