La commande rollback permet de revenir en arrière dans la blockchain en supprimant un ou plusieurs blocs récents. Cela repositionne la tête de la chaîne à un bloc antérieur.
geth rollback [nombre_de_blocs]nombre_de_blocs(optionnel) : Le nombre de blocs à revenir en arrière- Par défaut : 1 (un seul bloc)
- Doit être un nombre entier positif
- Ne peut pas dépasser le numéro du bloc actuel
geth rollbackCette commande supprime le dernier bloc et positionne la tête de la chaîne sur le bloc précédent.
geth rollback 5Cette commande supprime les 5 derniers blocs et positionne la tête de la chaîne 5 blocs en arrière.
geth rollback --datadir /path/to/data 3Cette commande effectue un rollback de 3 blocs sur une blockchain située dans un répertoire personnalisé.
La commande rollback supporte les options suivantes :
--datadir: Spécifie le répertoire de données de la blockchain--datadir.ancient: Spécifie le répertoire pour les données anciennes--cache: Mémoire allouée au cache interne (en Mo)--syncmode: Mode de synchronisation de la blockchain
Si le dernier bloc de votre chaîne est corrompu, vous pouvez le supprimer :
geth rollbackPour revenir à un état spécifique de la blockchain :
# Si vous savez que le problème a commencé il y a 10 blocs
geth rollback 10Après un rollback, si vous redémarrez geth normalement, il resynchronisera automatiquement avec le réseau pour obtenir les nouveaux blocs.
-
Sauvegardez vos données : Faites une copie complète de votre répertoire de données
cp -r ~/.ethereum ~/.ethereum.backup
-
Arrêtez geth : Assurez-vous que geth n'est pas en cours d'exécution
-
Vérifiez le numéro du bloc actuel :
geth attach > eth.blockNumber
- Vous ne pouvez pas revenir en arrière au-delà du bloc genesis (bloc 0)
- Les transactions et l'état associés aux blocs supprimés seront perdus
- Si d'autres nœuds ont ces blocs, ils seront retéléchargés lors de la resynchronisation
Vous essayez de revenir en arrière alors que vous êtes déjà au bloc genesis.
Le nombre de blocs spécifié est supérieur au nombre de blocs dans votre chaîne.
La base de données de la blockchain est vide ou corrompue.
La commande rollback utilise la méthode SetHead de la blockchain Ethereum, qui :
- Lit le bloc actuel
- Calcule le numéro du bloc cible (actuel - nombre_de_blocs)
- Repositionne la tête de la chaîne à ce bloc
- Supprime les données associées aux blocs ultérieurs (headers, corps, receipts, etc.)
- Met à jour les caches et les métadonnées
- Met à jour le fichier
metadata.jsonavec les informations du nouveau bloc courant
Après un rollback, le fichier metadata.json est automatiquement mis à jour pour refléter le nouveau bloc courant. Cela garantit que :
- Les scripts de monitoring ont toujours des informations à jour
- Le numéro de bloc dans
metadata.jsoncorrespond à l'état réel de la blockchain - Aucun redémarrage de geth n'est nécessaire pour la mise à jour
Vous pouvez vérifier la mise à jour avec :
cat ~/.ethereum/metadata.json | jq '.blockNumber'Les modifications se trouvent dans :
cmd/geth/chaincmd.go: Définition de la commande et implémentationcmd/geth/main.go: Enregistrement de la commande
La fonctionnalité sous-jacente utilise core/blockchain.go:SetHead().
geth dump: Pour inspecter l'état à un bloc donnégeth export: Pour exporter une plage de blocsgeth import: Pour importer des blocs depuis un fichier
Pour toute question ou problème, consultez :
- La documentation officielle de go-ethereum
- Les issues sur GitHub