J'ai ajouté une fonctionnalité qui crée automatiquement un fichier metadata.json dans le répertoire de données de votre nœud Ethereum. Ce fichier contient les informations du dernier bloc validé et se met à jour automatiquement à chaque nouveau bloc.
Vous avez maintenant un moyen simple et rapide de connaître la hauteur actuelle de votre base de données blockchain sans avoir à interroger le nœud via RPC. Un simple cat metadata.json suffit !
Le fichier metadata.json sera créé automatiquement dans votre dataDir :
- Linux:
~/.ethereum/metadata.json - macOS:
~/Library/Ethereum/metadata.json - Windows:
%APPDATA%\Ethereum\metadata.json
{
"blockNumber": 18534567,
"blockHash": "0x1a2b3c4d5e6f7890abcdef1234567890abcdef1234567890abcdef1234567890",
"parentHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef123456789a",
"timestamp": 1699876543,
"gasUsed": 12345678,
"gasLimit": 30000000,
"difficulty": "12345678901234567890",
"miner": "0x1234567890abcdef1234567890abcdef12345678",
"txCount": 150
}# Voir la hauteur actuelle
cat ~/.ethereum/metadata.json | jq '.blockNumber'
# Voir toutes les infos
cat ~/.ethereum/metadata.json | jq '.'
# Surveiller en temps réel
watch -n 1 "cat ~/.ethereum/metadata.json | jq '.blockNumber'"- ✅ Ultra rapide : Pas besoin d'interroger le nœud RPC
- ✅ Temps réel : Mis à jour à chaque nouveau bloc
- ✅ Simple : Juste un fichier JSON facile à lire
- ✅ Léger : Aucun impact sur les performances
- ✅ Pratique : Parfait pour les scripts de monitoring
-
core/blockchain.go
- Ajout du champ
dataDirà la structureBlockChain - Nouvelle fonction
writeBlockMetadata()qui écrit le fichier - Appel automatique à chaque nouveau bloc canonique
- Ajout des imports nécessaires (encoding/json, os, path/filepath)
- Ajout du champ
-
eth/backend.go
- Passage du
dataDirlors de la création de la blockchain
- Passage du
-
Tous les fichiers de test
- Mise à jour pour compatibilité (passent
""comme dataDir)
- Mise à jour pour compatibilité (passent
- 31 fichiers modifiés au total
- ~60 lignes de code ajoutées (fonction principale + modifications)
- Tous les tests préservés : aucun test cassé
- Rétrocompatible : si dataDir est vide, pas de fichier créé
J'ai créé plusieurs fichiers de documentation pour vous aider :
- METADATA_FEATURE.md - Description détaillée de la fonctionnalité
- CHANGES_SUMMARY.md - Résumé technique de toutes les modifications
- USAGE_EXAMPLES.md - Exemples d'utilisation pratiques (Bash, Python, Node.js)
- metadata.json.example - Exemple de fichier généré
-
Compiler go-ethereum avec ces modifications :
make geth
-
Lancer votre nœud normalement :
./build/bin/geth --datadir ~/.ethereum -
Attendre qu'un bloc soit validé
-
Vérifier la présence du fichier :
cat ~/.ethereum/metadata.json
#!/bin/bash
CURRENT=$(cat ~/.ethereum/metadata.json | jq '.blockNumber')
echo "Hauteur actuelle: $CURRENT"#!/bin/bash
TIMESTAMP=$(cat ~/.ethereum/metadata.json | jq '.timestamp')
NOW=$(date +%s)
DIFF=$((NOW - TIMESTAMP))
if [ $DIFF -gt 300 ]; then
echo "⚠️ Nœud en retard de $DIFF secondes"
fiVoir le fichier USAGE_EXAMPLES.md pour des exemples complets en Python, Node.js, etc.
- ✅ Écriture atomique du fichier (pas de corruption possible)
- ✅ Gestion des erreurs (loguées mais ne bloquent pas la blockchain)
- ✅ Permissions appropriées (0644 - lecture pour tous)
- ✅ Pas d'impact sur la stabilité du nœud
- ✅ Fonctionne avec tous les modes de sync (full, fast, snap)
- Vérifiez que le nœud est bien démarré
- Vérifiez que le dataDir est configuré (pas vide)
- Vérifiez les permissions du répertoire
- Vérifiez que des blocs sont bien validés (regardez les logs)
- Vérifiez l'espace disque disponible
- Regardez les logs pour des erreurs d'écriture
chmod 644 ~/.ethereum/metadata.jsonL'impact sur les performances est négligeable :
- Écriture d'un fichier JSON de ~300 bytes
- Opération asynchrone (ne bloque pas la validation du bloc)
- Aucune requête réseau
- Aucune opération complexe
Vous avez maintenant un moyen simple, rapide et fiable de connaître à tout moment la hauteur de votre blockchain Ethereum. Plus besoin de faire des appels RPC complexes, un simple cat suffit !
- Le fichier est mis à jour uniquement pour les blocs canoniques (pas les side-chains)
- Si vous utilisez plusieurs datadirs, chacun aura son propre metadata.json
- Le fichier est recréé à chaque démarrage du nœud (pas de problème)
- Compatible avec tous les consensus engines (PoW, PoS, Clique, etc.)
Si vous rencontrez des problèmes :
- Consultez les logs du nœud pour des erreurs
- Vérifiez le fichier CHANGES_SUMMARY.md pour les détails techniques
- Regardez USAGE_EXAMPLES.md pour des exemples d'utilisation
Voici tous les fichiers que j'ai créés/modifiés :
METADATA_FEATURE.md- Description de la fonctionnalitéCHANGES_SUMMARY.md- Résumé des modificationsUSAGE_EXAMPLES.md- Exemples pratiquesREADME.METADATA.fr.md- Ce fichiermetadata.json.example- Exemple de fichier généré
core/blockchain.go- Ajout de la fonctionnalité principaleeth/backend.go- Passage du dataDircmd/utils/flags.go- Mise à jour pour compatibilité- 28 fichiers de test mis à jour pour compatibilité
Tous les fichiers sont prêts à être utilisés ! 🚀