En travaillant sur Cesium 2 et la gestion multi-noeuds, je me demande comment faire pour gérer le cas de fork, afin qu’une transaction émise soit compatible par les branches majoritaires.
Voici un diagramme d’un cas de fork simple (source ici) ou une 1ere transaction génère un fork avec des sources #2 et #2’ différentes (référence de block différente).
La question est :
- Comment générer les transactions #2 et #2’ qui utiliseraient toutes les sources produites sur chaque branche ?
Evidemment, en théorie, je vois bien comment faire, mais le gros problème, ce sont les performances…
Comment faire, donc, pour :
- éviter d’interroger à tous les noeuds (pour avoir toutes les sources et leur dernier bloc) ?
- => on peut sélectionner seulement un noeud par branche, à partir des heads WS2P (à reporter dans GVA, du coup). OK
- éviter de demander toutes les sources du portefeuille, à chaque noeud de branche interrogé ?
- Pour éviter cela, il faudrait connaître la liste des sources qui sont spécifique à la branche, et qu’on n’a pas encore en local (dans le client). Je dois donc mettre en place une mini-DB côté client, avec les sources. OK pour ca.
Mais ensuite, par exemple si on a déjà récupéré les sources #1 #2 et #3 (via un noeud de la branche A)
comment éviter de redemander la source #1, qui est en commun entre les deux branches ?
- Pour éviter cela, il faudrait connaître la liste des sources qui sont spécifique à la branche, et qu’on n’a pas encore en local (dans le client). Je dois donc mettre en place une mini-DB côté client, avec les sources. OK pour ca.
Je préssens qu’un arbre de merkle (des sources) pourrait être utile, pour pouvoir synchroniser rapidement les manquantes, mais j’aimerai votre avis. D’autant que les ressources côté client sont limités (espace de stockage et perf de la mini-DB, mémoire vive, etc.). Mais peut-être n’est-ce pas si coûteux ?
De même, côté Noeud GVA, comment faire pour que ne plombe pas les perfs ? A moins de s’appuyer sur autre chose ?
EDIT: j’ai mis à jour le diagramme (en ajoutant les TX #2 qu’on cherche à émettre)