Ainsi, votre équipe a terminé la version alpha de votre blockchain, et il est temps de lancer le testnet, puis le mainnet. Vous avez une véritable blockchain, avec des participants indépendants, un bon modèle économique, une sécurité mise en place, vous avez conçu la gouvernance et maintenant il est temps de tout essayer en pratique. Dans un monde idéal crypto-anarchique, vous publiez le bloc genesis sur le réseau, le code final du nœud et les validateurs lancent tout eux-mêmes, mettent en place tous les services auxiliaires et tout se déroule naturellement. Mais ceci est un monde fictif, et dans la réalité, l'équipe doit préparer un bon nombre d'outils auxiliaires et diverses manipulations pour aider les validateurs à lancer un réseau durable. Cette article en traite.
Le lancement de réseaux basés sur des consensus de type « proof-of-stake », où les validateurs sont déterminés par les voix des détenteurs de tokens du système, est un événement assez spécifique, car même le lancement de systèmes traditionnels gérés de manière centralisée avec des dizaines et des centaines de... serveurs c'est en soi une tâche difficile, et la blockchain doit être lancée grâce aux efforts de participants loyaux mais indépendants. Et, alors que dans une entreprise, lors du lancement, les administrateurs ont un accès complet à toutes les machines, journaux, surveillance centrale, les validateurs ne laisseront personne accéder à leurs serveurs et, très probablement, préféreront construire leur propre infrastructure, car elle contrôle l'accès aux principaux actifs du validateurs — les staking votes. Ce comportement permet de construire des réseaux sécurisés et distribués — l'indépendance des fournisseurs de cloud utilisés, des serveurs virtuels et « baremetal », différents systèmes d'exploitation, tout cela rend les attaques contre ce réseau extrêmement inefficaces — trop de logiciels variés sont utilisés. Par exemple, Ethereum utilise deux principales implémentations de nœuds, en Go et en Rust, et une attaque efficace contre une implémentation ne fonctionne pas pour l'autre.
Par conséquent, tous les processus de lancement et d'exploitation des blockchains doivent être organisés de manière à ce que tout validateur, ou même un petit groupe de validateurs, puisse à tout moment jeter ses ordinateurs par la fenêtre et partir, sans que rien ne se casse, et les validateurs restants doivent continuer à maintenir efficacement le réseau et à connecter de nouveaux validateurs. Lors du lancement du réseau, lorsque l'un des validateurs est en Europe, un autre en Amérique du Sud, et le troisième en Asie, il est assez difficile d'obtenir un fonctionnement cohérent de plusieurs dizaines de groupes indépendants et de les intéresser au résultat.
Validateurs
Imaginons le lancement d'une hypothétique blockchain moderne (la majeure partie de ce qui est décrit s'applique aux blockchains basées sur toute famille de blockchains moderne : Ethereum, EOS, Polkadot, Cosmos, etc., qui prévoient un consensus proof-of-stake. Les principaux acteurs de telles blockchains sont des équipes de validateurs, qui installent leurs propres serveurs indépendants, valident et produisent de nouveaux blocs, et reçoivent les récompenses prévues par le réseau pour ceux qui participent au consensus. Pour lancer de nouveaux réseaux, plusieurs dizaines de validateurs sont nécessaires (c'est le nombre qu'il faut actuellement pour atteindre plus ou moins efficacement le consensus en quelques secondes), c'est pourquoi le projet annonce une inscription, au cours de laquelle les validateurs partagent des informations publiques sur eux-mêmes avec les utilisateurs, les convainquant qu'ils vont fournir un service de qualité au réseau en cours de lancement.
La validation est un métier qui permet d'évaluer très précisément le revenu potentiel d'un validateur, de transférer rapidement des capacités entre des projets, et en cas de succès du réseau choisi, le validateur peut, en tant que participant à part entière d'une DAO et responsable, développer le projet, ou simplement fournir un excellent service technique pour des fonds complètement transparents et honnêtement gagnés. Lors du calcul des récompenses pour les validateurs, les projets essaient de tenir compte des dépenses des validateurs et de faire en sorte que la récompense pour les blocs soit telle que cette activité soit rentable, tout en évitant que les validateurs ne saccagent l'économie en les inondant d'argent et en privant les autres utilisateurs du réseau.
Les validateurs d'entreprise nécessitent une haute résilience des services, ce qui implique un niveau élevé de préparation des développeurs et des devops ainsi que des ressources informatiques coûteuses. Même sans nécessité de miner des hashs dans les réseaux proof-of-work, un nœud blockchain est un grand service consommant beaucoup de mémoire, nécessitant de nombreux calculs, validant, enregistrant sur disque et transférant de gros volumes de données sur le réseau. Pour stocker le journal des transactions et les chaînes de blocs d'une blockchain avec plusieurs milliers de petites transactions par bloc, un espace de stockage d'au moins 50 Go est actuellement requis, et pour les blocs, cela doit être un SSD. La base de données d'état des blockchains avec prise en charge des contrats intelligents peut déjà dépasser 64 Go de RAM. Les serveurs avec les caractéristiques requises sont assez coûteux, un nœud Ethereum ou EOS peut coûter entre 100 et 200 $/mois. Ajoutez à cela l'augmentation des salaires pour le travail 24 heures sur 24 des développeurs et des devops, qui résolvent les problèmes même la nuit lors du lancement, car certains validateurs peuvent facilement être dans l'hémisphère opposé. Cependant, à certains moments propices, détenir un nœud validateur peut générer un revenu sérieux (dans le cas d'EOS, jusqu'à 10 000 $ par jour).
La validation n'est qu'un des nouveaux rôles informatiques potentiels pour les entrepreneurs et les entreprises, au fur et à mesure que les programmeurs inventent des algorithmes de plus en plus sophistiqués. Ces algorithmes permettent de récompenser l'honnêteté et de punir la tromperie et le vol, et ouvrent la voie à des services exerçant des fonctions de publication de données importantes (oracles), de surveillance (coupure de dépôts et punition des fraudeurs par la publication de preuves de fraude), de résolution de litiges, d'assurances et d'options. Même la collecte des déchets représente un marché potentiel important dans les systèmes de contrats intelligents, où il est nécessaire de payer pour le stockage des données.
Problèmes de démarrage de la blockchain
La transparence de la blockchain, qui permet une participation libre au réseau d'ordinateurs de divers pays et la simplicité de connexion de n'importe quel script kiddie suivant un guide sur GitHub, n'est pas toujours un avantage. La course pour un nouveau token pousse souvent les validateurs à "miner une nouvelle pièce au lancement", dans l'espoir d'une hausse de sa valeur et de la possibilité de vendre rapidement les gains. Cela signifie également que votre validateur peut être n'importe qui, même anonyme, et qu'il peut être voté comme les autres validateurs (bien qu'il soit difficile pour un anonyme de recueillir des voix de stakers, laissons donc les contes effrayants sur les cryptomonnaies anonymes aux politiciens). Néanmoins
L'équipe du projet a pour mission de recruter ceux qui peuvent garantir un fonctionnement stable des nœuds à l'avenir, qui comprennent la sécurité, qui peuvent résoudre rapidement des problèmes, coopérer avec d'autres validateurs et agir ensemble — la qualité du token dans lequel les participants du réseau souhaitent investir leur temps et leurs ressources dépend entièrement de ces compétences. Les fondateurs éclairés, évaluant les risques, savent bien qu'au lancement d'un logiciel d'une telle ampleur, il faudra inévitablement faire face à des erreurs de code, de configuration des nœuds, et que la stabilité du réseau dépend de la manière dont développeurs et validateurs résoudront ensemble ces problèmes.
L'équipe est prête à voter dans le mainnet pour tout validateurs, mais encore faudrait-il savoir lesquels, qui sont les bons ? Ceux avec le plus grand portefeuille ? Même cela n'est presque le cas de personne. D'après les profils d'équipe sur Linkedin ? Les DevOps et les experts en sécurité ne vont pas vous fournir de profils sur Linkedin. D'après les déclarations dans le chat, les posts et l'aide apportée à d'autres lors de la phase de préparation ? C'est bien, mais subjectif et inexact.
Dans de telles conditions, il ne reste qu'une chose — trouver une solution qui résout les problèmes de tous — un jeu, où il sera possible de sélectionner les meilleurs validateurs, mais surtout — tester la blockchain en profondeur et réaliser un test complet de la blockchain dans des conditions d'utilisation active, avec des changements de consensus, ainsi que la survenue et la correction d'erreurs. Pour la première fois, cette procédure a été proposée comme un jeu par des membres du projet Cosmos, et cette idée est sans aucun doute une excellente façon de préparer le réseau au lancement d'un mainnet fiable et résilient.
Jeu des Validateurs
Je vais décrire le jeu des validateurs tel que nous l'avons conçu pour la blockchain DAO.Casino (DAOBet), basée sur un fork d'EOS appelé Haya, qui possède un mécanisme de governance similaire — les validateurs sont élus par vote de n'importe quel compte, où une partie du solde utilisé pour voter pour un validateur est gelée. Tout compte détenant le jeton principal BET peut voter pour le validateur choisi avec n'importe quelle partie de son solde. Les voix sont additionnées et un classement des validateurs est établi. Dans différentes blockchains, ce processus est organisé différemment, et c'est généralement dans cette partie que la nouvelle blockchain diffère de la blockchain parente. Il est à noter que dans notre cas, EOS respecte pleinement son appellation d'"OS", car nous utilisons effectivement EOS comme système d'exploitation de base pour déployer une version modifiée de la blockchain destinée aux besoins de DAOBet.
Je vais décrire des problèmes spécifiques et comment les résoudre dans le cadre du jeu. Imaginons un réseau où ton serveur peut être ouvertement attaqué, où pour maintenir la position de validateur, il faut interagir en permanence avec le réseau, promouvoir son validateur et s'assurer qu'il produit des blocs et qu'ils sont livrés à temps aux autres validateurs, sinon, le validateur sera exclu de la liste.
Comment choisir les meilleurs gagnants?
L'exigence technique principale pour le jeu est que ses résultats doivent être vérifiables publiquement. Cela signifie que les résultats du jeu : le classement des meilleurs gagnants, doivent être établis strictement sur la base de données que tout participant peut vérifier. Dans un système centralisé, nous pourrions mesurer le "uptime" de chaque validateur et récompenser ceux qui étaient le plus en ligne ou qui ont traité le maximum de trafic réseau. On pourrait recueillir des données sur l'utilisation du processeur, de la mémoire et récompenser ceux qui ont travaillé efficacement. Mais toute collecte de ce type de métriques implique l'existence d'un centre de collecte, et de plus, toutes les nœuds sont indépendants et peuvent se comporter comme ils le souhaitent et envoyer n'importe quelles données.
Ainsi, la solution naturelle est de déterminer les gagnants sur la base des données de la blockchain, car elle permet de voir quel validateur a produit quel bloc et quelles transactions ont été incluses. Nous avons nommé ce chiffre les Points Validateur (VP), et leur accumulation est l'objectif principal des validateurs dans le jeu. Dans notre cas, la métrique la plus simple, facilement vérifiable publiquement et efficace pour mesurer 'l'utilité' d'un validateur est VP = nombre_de_blogs_produits_par_le_validateur pendant une période donnée.
Ce choix simple est dû au fait que la gouvernance dans EOS prévoit déjà de nombreux problèmes potentiels, étant donné qu'EOS est l'héritier de trois générations de blockchains opérationnelles avec une grande expérience en gestion complexe de réseau. Pratiquement tous les problèmes d'un validateur liés au réseau, au processeur ou au disque ne conduisent qu'à un seul problème : il signe moins de blocs, reçoit moins de rémunération pour son travail, ce qui nous ramène simplement au nombre de blocs signés — pour EOS, c'est une option excellente et simple.
Pour d'autres blockchains, la méthode de calcul des Points Validateur peut différer ; par exemple, pour les consensus basés sur pBFT (Tendermint / Cosmos, le consensus Aura de Parity Substrate), où chaque bloc doit être signé par de nombreux validateurs, il est judicieux de compter les signatures individuelles des validateurs, plutôt que les blocs. Il peut également être pertinent de prendre en compte les tours de consensus non terminés, qui consomment les ressources d'autres validateurs ; en général, cela dépend fortement du type de consensus.
Comment modéliser les conditions réelles d'exploitation
La tâche des fondateurs est de vérifier les validateurs dans des conditions proches de la réalité, tout en n'ayant aucun contrôle centralisé. Ce problème peut être résolu grâce à un contrat de faucet qui distribue des quantités égales du token principal aux validateurs et à tous ceux qui le souhaitent. Pour obtenir des tokens sur le solde, il est nécessaire de former une transaction et de faire en sorte que le réseau l'inclue dans un bloc. Ainsi, pour qu'un validateur puisse gagner, il doit constamment alimenter son solde avec de nouveaux tokens et voter pour lui-même, le propulsant ainsi dans le haut du classement. Cette activité crée une charge constante sur le réseau, et les paramètres peuvent être ajustés pour que le flux de requêtes soit suffisamment important pour un test complet du réseau. Il est donc important de planifier le contrat de faucet à l'avance, en tant qu'outil essentiel pour le lancement du réseau, et de commencer à ajuster ses paramètres rapidement.
La demande de tokens via le faucet et le vote des validateurs n'émule pas complètement de manière équitable le fonctionnement de la blockchain, en particulier dans des modes très congestionnés. Par conséquent, l'équipe de la blockchain devra inévitablement rédiger des benchmarks supplémentaires permettant de solliciter le réseau. Des contrats intelligents spécialement créés à l'avance jouent un rôle essentiel dans ce processus, permettant de tester des sous-systèmes spécifiques. Pour tester le stockage, le contrat enregistre des données aléatoires dans la blockchain, et pour vérifier les ressources réseau, le contrat de test exige un grand volume de données d'entrée, augmentant ainsi le volume des transactions – en lançant un flux de telles transactions à des moments aléatoires, l'équipe teste simultanément la stabilité du code et la résilience des validateurs.
Une question distincte concerne la mise à jour du code des nœuds et la réalisation de hard forks. Il est nécessaire que, en cas de bugs, de vulnérabilités ou de collusion de validateurs malveillants, les validateurs aient un plan d'action déjà établi dans le cadre du jeu des validateurs. On peut envisager des schémas d'attribution de VP pour une mise en œuvre rapide du hard fork, par exemple en pénalisant tous les validateurs qui n'ont pas encore implémenté la nouvelle version du code du nœud, mais cela est complexe à réaliser et rend le calcul plus difficile. Simuler une situation d'urgence nécessitant un hard fork peut être fait en
Comment informer les participants sur l'état du réseau et corriger les erreurs
Malgré la méfiance entre les validateurs, il est bénéfique pour tous d'obtenir des informations à jour sur l'état du réseau en temps opportun afin de prendre des décisions plus rapidement. C'est pourquoi l'équipe du projet met en place un service de collecte et de visualisation de plusieurs métriques des serveurs des validateurs, permettant de voir la situation simultanément pour l'ensemble du réseau, facilitant ainsi la détermination rapide de ce qui se passe. De plus, il est avantageux tant pour les validateurs que pour le projet que l'équipe corrige rapidement les erreurs détectées. Ainsi, en plus de la collecte des métriques, il est pertinent de lancer immédiatement la collecte des journaux et des données d'erreur depuis les machines des validateurs vers une machine accessible aux développeurs de la blockchain. Ici, personne n'a intérêt à déformer l'information, donc ces services sont mis en place par l'équipe du projet et ils sont dignes de confiance. Il est judicieux de collecter des métriques système des validateurs et, obligatoirement, les métriques les plus importantes de la blockchain elle-même — pour DAOBet, il s'agit du temps de finalisation et du retard du dernier bloc finalisé. Grâce à cela, l'équipe peut observer l'augmentation de la consommation de mémoire sur les nœuds lors de l'exécution d'un benchmark, ainsi que les problèmes rencontrés par certains validateurs.
Points importants concernant la réalisation du jeu des validateurs
Il s'avère que si vous souhaitez autoriser officiellement les validateurs à attaquer les machines les unes les autres (officieusement, ils peuvent déjà le faire) - il faut le formuler légalement comme un test de sécurité, car selon la législation de certains pays, des sanctions peuvent être appliquées pour DDoS ou attaques réseau. Une autre question importante est de savoir comment récompenser les validateurs. Les récompenses naturelles sont des tokens du projet, qui seront transférés sur le mainnet, mais une distribution massive de tokens à quiconque a réussi à lancer un nœud n'est pas non plus la meilleure option. Il est probable que vous deviez équilibrer entre deux options extrêmes :
Distribuer l'ensemble du fonds de récompenses en fonction des VP gagnés
c'est très démocratique et permet à tous ceux qui ont investi du temps et des ressources dans le jeu des validateurs de gagner
mais cela attire des personnes aléatoires dans le jeu sans infrastructure préparée
Distribuer le fonds de récompenses aux validateurs top-N en fonction des résultats du jeu
les gagnants seront probablement les validateurs qui ont tenu le plus longtemps durant le jeu, très motivés pour gagner
certaines validateurs ne voudront pas participer, estimant leurs chances de gagner trop faibles, surtout s'il y a des validateurs chevronnés parmi les participants
À vous de décider quelle option privilégier
Il y a aussi un autre point - il n'est pas du tout sûr que des dizaines de validateurs se précipiteront pour participer à votre appel, et parmi ceux qui décideront d'essayer, tous ne pourront même pas installer et lancer un nœud - généralement, à ce stade, les projets ont une documentation assez pauvre, des erreurs peuvent se produire, et les développeurs débordés répondent aux questions sans grande réactivité. Par conséquent, avant de lancer le jeu, il faut également prévoir des actions au cas où le nombre requis de validateurs ne serait pas atteint. Dans ce cas, au début du jeu, les validateurs manquants sont lancés par l'équipe du projet, participent au consensus, mais ne peuvent pas être des gagnants.
Conclusion
En conclusion, j'ai essayé de rassembler dans ce qui précède une liste de ce qu'il faut imaginer, faire et lancer pour un déroulement efficace du jeu des validateurs
Que faut-il faire pour lancer un véritable jeu de validateurs :
développer votre propre blockchain 🙂
- créer et déployer une interface web et fournir une CLI pour voter pour les validateurs
- S'assurer que les métriques de nœuds de validateurs actifs peuvent être envoyées à un service centralisé (par exemple, Prometheus)
- Déployer un serveur de collecte de métriques (Prometheus + Grafana) pour le jeu des validateurs
- Trouver comment les points de validateur (VP) seront calculés
- Développer un script public pour calculer les VP d'un valideur à partir des données de la blockchain
- Développer une interface web pour afficher le top des validateurs et l'état du jeu des validateurs (combien de temps reste jusqu'à la fin, combien de VP pour chacun, etc.)
- Développer et automatiser le lancement d'un nombre arbitraire de nœuds propres, concevoir le processus de connexion des validateurs au jeu (quand et comment désactiver ses nœuds, voter pour eux et retirer les votes)
- Calculer combien de jetons doivent être émis et développer un contrat-faucet
- Créer un script de benchmark (transferts de jetons, utilisation massive de stockage, utilisation massive du réseau)
- Rassembler tous les participants dans un seul chat pour une communication rapide
- Lancer la blockchain un peu avant le début du jeu
- Attendre le bloc de départ, commencer le jeu
- Tester le réseau avec plusieurs types de transactions
- Appliquer un hard fork
- Modifier la liste des validateurs
- Répéter les points 13, 14 et 15 dans un ordre différent, tout en maintenant la stabilité du réseau
- Attendre le bloc final, terminer le jeu, calculer les VP
Il faut dire que le jeu des validateurs est une histoire nouvelle, et n'a été organisé que quelques fois, donc il ne faut pas considérer ce texte comme un guide complet. Il n'existe pas d'analogue dans le secteur IT moderne — imaginez que les banques, avant de lancer un système de paiement, rivalisent pour voir qui réussira le mieux à traiter les transactions des clients. Les approches traditionnelles ne vous aideront probablement pas à créer de grands réseaux décentralisés, alors adoptez de nouveaux modèles commerciaux, organisez vos propres jeux, identifiez les méritants, récompensez-les et laissez vos systèmes distribués fonctionner rapidement et de manière stable.
Source : habr.com
