Pour ta première approche, je reformule pour être sûr de bien comprendre : il s’agit de ne pas scanner quoi que ce soit et de se connecter directement à un nœud dit « de confiance » inscrit en dur, choisi par le développeur ? Genre g1.duniter.org par exemple ?
Mais tu sembles spécifier ton fallback uniquement sous le critère de la suspicion (que j’ai un peu du mal à déterminer là comme ça).
C’est probablement parce que c’est trop évident que tu ne le précises pas, mais le critère de fallback numéro un est la non-disponibilité du nœud principal, ou son mauvais fonctionnement, qui est le cas qui pourra arriver le plus souvent, au-delà d’une attaque ou d’un fork isolé.
Pour le reste on retombe sur le théorème de CAP si cher à notre Fred national. Donc oui, sachant ça, on est bien d’accord qu’il n’y a pas de solution absolue, simplement un best as we can.
Je crois qu’on est globalement sur la même approche (de toute façon je n’en vois pas beaucoup d’autres possibles), simplement je choisis de systématiser le scan réseau, mais en arrière-plan. C’est-à-dire que l’app se connecte très rapidement à un nœud bootstrap ou mis en cache, mais en arrière-plan un scan se fait pour peupler le cache Network. Si un meilleur nœud est trouvé (fork majoritaire), alors l’app switch simplement de endpoint (et doit relancer le scan de Squid du coup, toujours en arrière-plan, pour être sûre de toujours être sur une paire Duniter/Squid cohérente).
Tout mon système de différentes couches est un peu compliqué (et pourrait probablement être simplifié/clarifié) mais est simplement là pour garantir le meilleur compromis possible entre rapidité de connexion et confiance du réseau.
Par contre, en te lisant j’ai l’impression que tu comptes afficher à l’utilisateur un choix à faire en cas d’incertitude ?
Je mets un gros warning là-dessus : il faut oublier l’idée de proposer à l’utilisateur de choisir quoi que ce soit, il n’en saura rien. Il ne faut absolument pas reproduire ce que fait Cesium v1 avec ses pop-ups de demande de confirmation de fallback sur un autre nœud en cascade, c’est un véritable enfer qui a été grandement critiqué par beaucoup de gens — je pense que tous les utilisateurs passant par là seront d’accord là-dessus.
Je pense qu’il faut rendre l’intégralité du flux totalement transparente, en arrière-plan, juste une petite notification qui indique en gros si le réseau est en ligne ou hors ligne, ou s’il y a un problème de réseau.
Laisser la possibilité aux utilisateurs avancés de choisir eux-mêmes le nœud, mais dans un sous-menu un peu planqué, et ne pas se focaliser sur ce flux du tout.
Il faudra songer à un système de backlist si un noeud connu est corrompu.