Voici le détail du bug ayant provoqué le fork du 24/12/2018.
Le fait technique
Un membre ayant rejoint la Ğ1 au même moment que le DU a, en dépensant sa production de Ğ1, séparé le réseau en deux : ceux considérant que sa production de Ğ1 était légitime, et ceux considérant que non.
La cause
Ce bug n’est pas nouveau puisqu’il s’est déjà produit le 26/05/2018 de façon similaire : à cette époque les nœuds étaient majoritairement en dernière version (1.6.21 … 1.6.23) et celle-ci, lors de la synchro, implémentait la règle “un membre lors du DU = 1 DU” tandis que les autres nœuds disaient “= 0 DU”. Du coup à la moindre dépense de ces DU, le réseau se coupait en deux : ceux d’accord avec la dépense, et les autres.
Ce bug a donc été corrigé en version 1.6.24, et tout était rentré dans l’ordre.
Ou presque.
Et l’oubli
Le problème, c’est que ces nœuds 1.6.21 … 1.6.23 implémentaient bien la règle “un membre lors du DU = 1 DU” durant la synchro, mais pas lors de leur fonctionnement « normal » en rythme de croisière (ce qui soit dit en passant, était totalement incohérent, un vrai bug). La version corrective 1.6.24 ne s’y est d’ailleurs pas trompée, puisque cette règle “= 1 DU” a été totalement adoptée dans le protocole à la fois lors de la synchro et de la croisière.
Mais donc pour les nœuds en version 1.6.21 … 1.6.23, les nœuds non mis à jour en 1.6.24, dès que cet événement où un membre est arrivé simultanément au DU s’est produit, la bombe à retardement s’y est installée ! Ce qui s’est produit à trois reprises :
- au bloc#133533, le 03/07/2018 à 11h00m27s GMT
- au bloc#157453, le 27/09/2018 à 11h00m27s GMT (une vraie horloge Duniter ! à la seconde près !
)
- au bloc#177604, le 09/12/2018 à 11h05m45s GMT
Vous le déduisez certainement : la bombe qui a explosé, c’est la dernière (sinon le réseau aurait été secoué plus tôt bien entendu). C’est donc le membre arrivé au bloc#177604 qui a dépensé son DU d’arrivée la veille de Noël qui a tout déclenché sans s’en rendre compte.
Notez que cet événement “un membre arrive en même temps que le DU” est un fait assez rare depuis le début de la Ğ1, puisqu’il ne s’est produit que 7 fois sur les 1500 entrées de membres que compte la monnaie à ce jour (~0,47% des membres).
Quelle solution pour remédier définitivement au problème ?
Pour y remédier totalement, il aurait fallu que tous les nœuds 1.6.21 … 1.6.23 aient été mis à jour en version 1.6.24 et qu’ils aient, au choix :
- resynchronisé totalement la blockchain avec cette version (ou supérieure)
- été mis à jour en 1.6.24 avant le bloc#133533, où la première “bombe de croisière” s’est installée
Tous ceux qui n’ont pas pu respecter cette condition ont vu leur nœud forker au 24/12/2018.