Un nœud de blockchain stocke les données dans un format optimisé pour le consensus et la vérification, et non pour l'interrogation. Si vous souhaitez connaître le solde actuel d'une adresse Ethereum, un nœud peut vous le dire. Mais si vous voulez connaître toutes les transactions que cette adresse a effectuées, ou tous les jetons qu'elle détient, ou son historique d'interactions avec un contrat intelligent précis, vous avez besoin d'un indexeur.
Les indexeurs fonctionnent en lisant chaque bloc d'une blockchain, en décodant les transactions et les événements, puis en stockant les données traitées dans une base de données optimisée pour les types de requêtes que les utilisateurs souhaitent réellement exécuter. Cela s'apparente conceptuellement à la façon dont un moteur de recherche explore le web et construit un index. Le code HTML brut de chaque page web existe, mais les moteurs de recherche le rendent utile en l'indexant et en l'organisant.
The Graph est le protocole d'indexation décentralisé le plus connu. Il permet aux développeurs de définir des sous-graphes qui précisent exactement quelles données extraire d'une blockchain et comment les stocker. Lorsqu'un événement pertinent se produit on-chain, les fonctions de mappage du sous-graphe traitent l'événement et mettent à jour les données stockées. Les applications interrogent ensuite le sous-graphe en GraphQL plutôt que d'interagir directement avec la blockchain.
Le processus d'indexation est gourmand en calcul. Pour Ethereum, un indexeur doit traiter chaque transaction dans chaque bloc depuis la genèse, décoder les données d'entrée et les journaux d'événements, et maintenir un état à jour de toutes les données pertinentes. Un nœud d'archive Ethereum complet stocke plus de 15 téraoctets de données. Les traiter pour les transformer en formats indexés utiles nécessite des ressources informatiques importantes et peut prendre des jours ou des semaines pour une synchronisation historique complète.
Les journaux d'événements constituent la principale source de données pour la plupart des indexeurs. Lorsqu'un contrat intelligent émet un événement, comme un événement Transfer pour les jetons ERC-20, il crée une entrée de journal que les indexeurs peuvent filtrer et traiter efficacement. Les contrats bien conçus émettent des événements pour chaque changement d'état significatif, ce qui facilite l'indexation. Les contrats qui modifient l'état sans émettre d'événements sont plus difficiles à indexer, car l'indexeur doit tracer l'exécution de la transaction pour détecter les changements.
Différents services d'indexation s'optimisent pour différents cas d'usage. Dune Analytics propose une interface SQL vers les données blockchain indexées, la rendant accessible aux analystes qui connaissent le SQL mais pas Solidity. Nansen combine l'indexation on-chain avec l'étiquetage des portefeuilles, reliant les adresses à des entités connues. Flipside fournit des ensembles de données organisés pour des protocoles spécifiques. Chacun fait des choix différents sur ce qu'il faut indexer et sur la manière de le présenter.
L'indexation en temps réel présente des défis supplémentaires. La production de blocs sur Ethereum a lieu toutes les 12 secondes, et un indexeur doit traiter les données de chaque nouveau bloc et mettre à jour sa base de données avant l'arrivée du bloc suivant. Lors des périodes de forte activité, un seul bloc peut contenir des milliers d'événements pertinents. L'indexeur doit gérer cette charge tout en desservant également le trafic de requêtes provenant des applications.
La gestion des réorganisations est un aspect subtil mais crucial de l'indexation. Les blockchains se réorganisent parfois, ce qui signifie qu'un bloc précédemment traité est remplacé par un bloc différent à la même hauteur. Un indexeur doit détecter ces réorganisations et annuler toute modification de données issue du bloc remplacé. Ne pas gérer correctement les réorganisations peut conduire à des données incohérentes qui affichent des transactions ou des changements d'état qui ne se sont jamais réellement produits.
Pour les traders et les analystes, les indexeurs sont ce qui rend l'analyse on-chain réalisable. Sans eux, surveiller les portefeuilles baleines, suivre les flux de jetons, analyser l'utilisation des protocoles DeFi ou construire des signaux de trading à partir des données on-chain nécessiterait de faire tourner votre propre infrastructure à un coût important. La qualité et la couverture de l'indexeur sur lequel vous vous appuyez influent directement sur la qualité de votre analyse.