Lorsqu’on lance un noeud en mode dev, si nous ne fournissons pas de genesis, laissant ainsi les données de dev par defaut (Alice, Bob ect …), alors tout va bien.
Cependant, si nous fournissons un genesis, avec la première identité par ordre alphabétique bien dans le groupe smith, alors BABE fonctionne correctement avec cette identité forgeant, mais grandpa ne finalise aucun bloc.
Dans les 2 cas le storage semble indiquer les mêmes états pour ce que je regarde, notamment grandpa.state() est “Live”, 1 onlineAuthorities, mais dans le seconds cas, pas de finalisation.
Globalement ça signifie que commenter simplement la ligne 15 de ce yaml change le comportement de granpa.
Quelqu’un serait dire pourquoi ce comportement ?
C’est embêtant pour travailler sur l’indexer v2s à partir d’une blockchain local dont ont maîtrise le genesis.
Certaines infos sur les forums parlent de la nécessité d’avoir au moins 2 noeuds validateurs en ligne pour déclencher la finalisation, mais ce n’est pourtant pas le cas en mode Alice alors que ça finalise dans ce cas.
Je vais creuser, mais ça me semble être un problème entre forgeron et autorité.
Dans le cas avec DUNITER_GENESIS_CONFIG, on appelle generate_genesis_data qui a un argument maybe_force_authority. Dans l’autre cas, on génère directement des chainspecs depuis un genesis créé par une fonction gen_genesis_for_local_chain.
Je ne sais pas encore d’où vient la différence.
C’est possible aussi que --force-authoring force à ajouter des blocs même en offline mais du coup la finalisation ne peut pas se faire.
Je galère bien sur ce bug, ça fait plus d’une journée que j’y suis. C’est pas perdu, j’ai appris des choses, et j’ai un peu avancé, on dirait qu’il y a une différence de session keys alors que dans les deux cas on devrait avoir celles d’Alice (j’ai remplacé test1 par Alice avec sa clé pour avoir moins de différences).
On note que dans le premier cas, c’est la clé grandpa qui est différente alors que dans le deuxième cas c’est la clé im_online. J’espère que le problème vient de là.
I finally found the exact reason of the bug: the development_chain_spec function was sending encoded AuthorityKeys to genesis_data_to_gdev_genesis_conf function which was expecting SessionKeys and decoding as such. The result was that Ed25519 grandpa keys were given to im_online instead, blocking the finalisation.
@poka, cette fois-ci j’espère que je ne te ferai pas de mauvaise surprise. Est-ce que tu peux tester à nouveau la branche et me dire si ça fonctionne ?