Fork non résolu sur la Ğ1 le 27 Juin 2019

Je me suis rendu compte ce soir en rentrant du boulot que mes 2 nœuds Ğ1 étaient désynchronisés, je vois que c’est aussi le cas de @jytou @shepeng @Jokeur @PiNguyen @Attilax @shaolinux et quelques autres dont je ne connais pas le pseudo sur ce forum (certains ne sont peut-être même pas inscrits sur ce forum ?).

Le fork a perduré plus de 100 blocs, donc il ne pourra pas être résolu automatiquement. Les membres désynchronisés doivent effectuer une resync manuelle. Capture de l’état du réseau :

Le fork s’est produit au bloc #232587 (le dernier bloc commun étant le #232586).
La seule différence c’est que la branche qui l’a emportée a exclue l’identité DE51TW7H1pi9KrhimQ7GKvXMbk6kMHg9yR8VJ2zTBZ3M.

Avant de resync mon nœud g1.librelois.fr j’ai zieuté les logs, voici ce que j’ai trouvé :

2019-06-27T19:59:26+02:00 - info: SIDE Block #232752-0000030E added to the blockchain in 1 ms
2019-06-27T19:59:26+02:00 - info: Block resolution: 6 potential blocks after current#232585...
2019-06-27T19:59:26+02:00 - error:  Error: ruleNumber
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:62:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T19:59:26+02:00 - error:  Error: ruleNumber
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:62:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T19:59:26+02:00 - error:  Error: ruleNumber
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:62:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T19:59:26+02:00 - error:  Error: ruleNumber
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:62:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T19:59:26+02:00 - error:  Error: ruleNumber
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:62:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T19:59:26+02:00 - error:  Error: ruleNumber
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:62:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T19:59:26+02:00 - info: Fork resolution: 121 potential block(s) found...
2019-06-27T19:59:26+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:26+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:26+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:26+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:26+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:26+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:27+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:27+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:27+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:27+02:00 - info: Fork resolution: block #232586-000004A5 is known as incorrect. Skipping.
2019-06-27T19:59:27+02:00 - info: Fork resolution: 8 potential suite(s) found...
2019-06-27T19:59:27+02:00 - info: Fork resolution: HEAD = block#232585
2019-06-27T19:59:27+02:00 - info: Fork resolution: suite 1/8 (-> #232589-000000) revert to fork point block#232583
2019-06-27T19:59:27+02:00 - error: Unhandled rejection: BLOCK_TO_REVERT_NOT_FOUND
2019-06-27T19:59:27+02:00 - error: BLOCK_TO_REVERT_NOT_FOUND

Mon nœud s’est interrompu la, je ne sais pas si c’est normal ou non. Je viens de le relancer a l’instant sans resync pour voir ce que me disent les logs sur le bloc de fork :

2019-06-27T20:23:13+02:00 - info: Block resolution: 6 potential blocks after current#232585...
2019-06-27T20:23:13+02:00 - error:  Error: ruleMedianTime
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:84:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T20:23:13+02:00 - error:  Error: ruleMedianTime
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:84:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T20:23:13+02:00 - error:  Error: ruleMedianTime
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:84:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T20:23:13+02:00 - error:  Error: ruleMedianTime
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:84:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T20:23:13+02:00 - info: Block #232586 added to the blockchain in 87 ms
2019-06-27T20:23:13+02:00 - info: Block resolution: 3 potential blocks after current#232586...
2019-06-27T20:23:13+02:00 - error:  Error: ruleToBeKickedArePresent
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:179:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-06-27T20:23:13+02:00 - info: Block #232587 added to the blockchain in 35 ms
2019-06-27T20:23:13+02:00 - info: Block resolution: 1 potential blocks after current#232587...
2019-06-27T20:23:13+02:00 - info: Block #232588 added to the blockchain in 100 ms
2019-06-27T20:23:13+02:00 - info: Block resolution: 1 potential blocks after current#232588...
2019-06-27T20:23:14+02:00 - info: Block #232589 added to the blockchain in 148 ms
2019-06-27T20:23:14+02:00 - info: Block resolution: 0 potential blocks after current#232589...
2019-06-27T20:23:14+02:00 - info: Fork resolution: 109 potential block(s) found...
2019-06-27T20:23:15+02:00 - info: Fork resolution: 9 potential suite(s) found...
2019-06-27T20:23:15+02:00 - info: Fork resolution: HEAD = block#232589
2019-06-27T20:23:15+02:00 - info: Fork resolution: suite 1/9 (-> #232686-000003) revert to fork point block#232586
2019-06-27T20:23:18+02:00 - info: Fork resolution: suite 1/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:18+02:00 - info: Block #232587 added to the blockchain in 32 ms
2019-06-27T20:23:18+02:00 - info: Block #232588 added to the blockchain in 17 ms
2019-06-27T20:23:19+02:00 - info: Block #232589 added to the blockchain in 185 ms
2019-06-27T20:23:19+02:00 - info: Fork resolution: suite 2/9 (-> #232686-000006) revert to fork point block#232586
2019-06-27T20:23:22+02:00 - info: Fork resolution: suite 2/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:22+02:00 - info: Block #232587 added to the blockchain in 73 ms
2019-06-27T20:23:22+02:00 - info: Block #232588 added to the blockchain in 43 ms
2019-06-27T20:23:23+02:00 - info: Block #232589 added to the blockchain in 626 ms
2019-06-27T20:23:23+02:00 - info: Fork resolution: suite 3/9 (-> #232672-000009) revert to fork point block#232586
2019-06-27T20:23:25+02:00 - info: Fork resolution: suite 3/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:25+02:00 - info: Block #232587 added to the blockchain in 44 ms
2019-06-27T20:23:25+02:00 - info: Block #232588 added to the blockchain in 31 ms
2019-06-27T20:23:26+02:00 - info: Block #232589 added to the blockchain in 114 ms
2019-06-27T20:23:26+02:00 - info: Fork resolution: suite 4/9 (-> #232655-000007) revert to fork point block#232586
2019-06-27T20:23:28+02:00 - info: Fork resolution: suite 4/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:28+02:00 - info: Block #232587 added to the blockchain in 23 ms
2019-06-27T20:23:28+02:00 - info: Block #232588 added to the blockchain in 21 ms
2019-06-27T20:23:29+02:00 - info: Block #232589 added to the blockchain in 157 ms
2019-06-27T20:23:29+02:00 - info: Fork resolution: suite 5/9 (-> #232641-000000) revert to fork point block#232586
2019-06-27T20:23:32+02:00 - info: Fork resolution: suite 5/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:32+02:00 - info: Block #232587 added to the blockchain in 54 ms
2019-06-27T20:23:32+02:00 - info: Block #232588 added to the blockchain in 36 ms
2019-06-27T20:23:32+02:00 - info: Block #232589 added to the blockchain in 101 ms
2019-06-27T20:23:32+02:00 - info: Fork resolution: suite 6/9 (-> #232634-000005) revert to fork point block#232586
2019-06-27T20:23:35+02:00 - info: Fork resolution: suite 6/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:36+02:00 - info: Block #232587 added to the blockchain in 35 ms
2019-06-27T20:23:36+02:00 - info: Block #232588 added to the blockchain in 68 ms
2019-06-27T20:23:36+02:00 - info: Block #232589 added to the blockchain in 111 ms
2019-06-27T20:23:36+02:00 - info: Fork resolution: suite 7/9 (-> #232624-000002) revert to fork point block#232586
2019-06-27T20:23:39+02:00 - info: Fork resolution: suite 7/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:39+02:00 - info: Block #232587 added to the blockchain in 53 ms
2019-06-27T20:23:39+02:00 - info: Block #232588 added to the blockchain in 24 ms
2019-06-27T20:23:39+02:00 - info: Block #232589 added to the blockchain in 108 ms
2019-06-27T20:23:39+02:00 - info: Fork resolution: suite 8/9 (-> #232613-000002) revert to fork point block#232586
2019-06-27T20:23:43+02:00 - info: Fork resolution: suite 8/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:44+02:00 - info: Block #232587 added to the blockchain in 56 ms
2019-06-27T20:23:44+02:00 - info: Block #232588 added to the blockchain in 35 ms
2019-06-27T20:23:44+02:00 - info: Block #232589 added to the blockchain in 116 ms
2019-06-27T20:23:44+02:00 - info: Fork resolution: suite 9/9 (-> #232609-000002) revert to fork point block#232586
2019-06-27T20:23:47+02:00 - info: Fork resolution: suite 9/9 REFUSED block#232587: ruleToBeKickedArePresent
2019-06-27T20:23:47+02:00 - info: Block #232587 added to the blockchain in 45 ms
2019-06-27T20:23:47+02:00 - info: Block #232588 added to the blockchain in 33 ms
2019-06-27T20:23:48+02:00 - info: Block #232589 added to the blockchain in 122 ms
2019-06-27T20:23:48+02:00 - info: Web administration accessible at following address: http://localhost:9220
2019-06-27T20:23:48+02:00 - info: WS2P server D9D2zaJoWYWveii1JRYLVK3J4Z7ZH3QczoKrnQeiM6mx listening on 127.0.0.1:20901

Apparemment mon noeud refuse le bloc #232587- 000004A5 :

2019-06-27T20:23:18+02:00 - info: Fork resolution: suite 1/9 REFUSED block#232587: ruleToBeKickedArePresent

Je n’ai pas le temps d’investiguer plus loin, mais ce n’est pas normal que certains nœuds aient refusé le bloc, j’ai pensé à un différentiel de versions, mais on retrouve des nœuds en 1.7.18 et 1.7.19 sur les 2 branches.

@Moul @cgeek j’espère que ce début d’analyse pourra vous servir pour comprendre ce qu’il s’est passé :slight_smile:

1 J'aime

Merci, en effet fork relativement important car nous sommes tombés à 39 nœuds synchronisés sur 50 habituellement.

Je ne sais pas si l’on pourra investiguer aussi tardivement.

Erf. Ça veux dire que les transactions récentes via mon noeud vont sauter ?

Si tu les a émisis avec un client qui s’est basé sur ton nœud pour générer le document de transaction alors oui, a cause du blockstamp du document qui n’est pas valable sur la branche qui l’a emportée.

En tout cas je met a jour mon nœud dès que j’ai 5 minutes

J’ai relancé… Très habituel avec mon raspi :-/

Rémuniter a mal vécu ce fork.

Tiens… Ça fait deux fois que je le relance et qu’il s’arrête après 2-3 heures de calcul. Bizarre.

bon j’ai mis à jour mon noeud et je l’ai relancé avec une synchro. J’espère que le fork était après mes transactions… bon ça va j’en ai pas beaucoup…

t’as augmenté la swap de ton raspberry ?

Yep, 2GB. C’est sur une carte M2, pas SD.

1 J'aime

Et boum, replantade au bloc 232588, apparemment on est un paquet à avoir bloqué sur celui-là…

Hello.

Comment savoir si mon noeud s’est désynchronisé ?
A priori, plus de transaction “remuniter” depuis 7 jours sur mon compte membre associé à mon noeud yunohost.
Une resync manuelle obligatoire ?

Enjoy.

Un silkaj diffi ou silkaj blocs me permet de te dire que tu es toujours synchronisé car dans la fenêtre courante.

3 J'aimes

@Moul est ce que tu peux détailler comment tu détermines ça stp ? J’ai lancé les commandes… et je suis pas trop sur de ce que j’ai vu lol

silkaj blocks
Last 206 blocks from n°234124 to n°234329 from 41 issuers                                                                          
|       uid        |   blocks |   percent |                                                                                        
|------------------+----------+-----------|                                                                                        
|     pafzedog     |       10 |       4.9 |                                                                                        
|      Petrus      |        9 |       4.4 |                                                                                        
|     nicoleC      |        9 |       4.4 |                                                                                        
|     jfoucher     |        9 |       4.4 |                                                                                        
|  BenoitLavenier  |        8 |       3.9 |                                                                                        
|      paidge      |        8 |       3.9 |                                                                                        
|     charles      |        8 |       3.9 |                                                                                        
|     ji_emme      |        8 |       3.9 |                                                                                        
|     Fabwice      |        8 |       3.9 |                                                                                        
|       moul       |        8 |       3.9 |                                                                                        
|      cgeek       |        7 |       3.4 |                                                                                        
|     art15te      |        7 |       3.4 |                                                                                       
…

Tu peux voir art15te en dernière position.

Ou, s’il est affiché avec la commande diffi il est dans la fenêtre courante et a écrit au moins un bloc récemment :

…
|     Fabwice      |     00000[0-4]*      |  1.2 × 10^7  |        91 |                                                             
|       moul       |     00000[0-4]*      |  1.2 × 10^7  |        91 |                                                             
|     art15te      |     00000[0-5]*      |  1.0 × 10^7  |        90 |                                                             
|    Mententon     |     00000[0-5]*      |  1.0 × 10^7  |        90 |                                                             
…
1 J'aime

Si j’ai bien compris le principe d’un fork de la block chain c’est justement qu’on écrit des blocks sur une autre branche. Mais si on fork, il n’y a que nous qu’il allons utiliser la branche donc on va écrire très peu de block. Donc assez rapidement on apparaît plus dans la fenêtre dont tu parles, c’est bien ça ?

Merci @Moul

Donc pour “remuniter” je ne suis pas le seul à être impacté ?

Note à moi-même, installer et utiliser silkaj car la ligne de commande, c’est la vie.

1 J'aime

Dans ce cas, le nœud va écrire des blocs dans la fenêtre courante d’une autre branche.
Ça dépend de quel point de vue tu regardes le réseau. Pour ça, Silkaj permet d’observer le réseau du point de vue du nœud en spécifiant l’option -p host:post.

Oui, Rémuniter est bloqué. cc @cgeek.

Un outil en ligne de commande, c’est surtout plus simple à développer.
Ça a aussi d’autres avantages, comme aller à l’essentiel sans artifices.

1 J'aime

Ok du coup on peut créer un script pour tester si on a “forké” par rapport à certain noeud… intéressant :smiley: