#opg $OPG J’ai une chose que je n’arrive pas à comprendre. Un appel d’IA arrive, une douzaine de nœuds le voient… qui doit le prendre ?
Si celui qui prend le plus vite l’emporte, alors le réseau rapide aura toujours du travail, tandis que le réseau lent n’en aura jamais. À la fin, il ne reste plus que deux ou trois gros acteurs, et le reste des nœuds meurt de faim. Dans ce cas, à quoi bon se dire « décentralisé » ?
Dans son livre blanc, OpenGradient propose une solution : tirer au sort.
Ce n’est pas du hasard arbitraire. Le système prend le hash du bloc courant, y ajoute l’ID de cette requête, et le tout est envoyé à un module appelé VRF, qui calcule un nombre aléatoire. Ensuite, ce nombre aléatoire sert à classer tous les nœuds en ligne. Le nœud classé premier prend la requête en priorité. Il doit rendre le résultat et la preuve dans un délai donné. S’il dépasse le délai ou triche, on passe au deuxième, puis au troisième, etc.
Le point clé, c’est que ce nombre aléatoire est vérifiable. Les nœuds ne peuvent pas tricher : la logique de classement est publique, et tout le monde peut recalculer. Le livre blanc indique que c’est garanti via des preuves à divulgation nulle de connaissance (ZKP), pour prouver que le nombre aléatoire a bien été généré selon les règles. Tu veux connaître à l’avance le prochain nœud qui recevra la requête ? Impossible.
J’avais vu un autre projet qui faisait aussi du VRF : au final, le classement était quand même « raflé » par des gens plus rapides. Je me suis rendu compte que la graine aléatoire pouvait être devinée à l’avance par certains nœuds. De ce côté, OpenGradient lie la graine au hash du bloc : comme le hash du bloc ne peut pas être prédit, cela bouche cette faille.
Mais ce design a un côté pénible. Si un nœud provoque volontairement un dépassement de délai, il n’est pas immédiatement puni par une slashing de mise ; il est simplement temporairement retiré de la file. Il faut plusieurs dépassements consécutifs pour déclencher une sanction. Le livre blanc appelle ça une « soft penalty » (pénalité douce). Je comprends : tout le monde peut avoir des soucis de gigue réseau. Punir direct par une amende à chaque dépassement serait trop sévère. Mais ça laisse aussi une marge pour des gens mal intentionnés : certains peuvent répéter volontairement les dépassements, afin de ralentir l’efficacité globale. Tu ne peux rien faire tant qu’ils n’ont pas atteint le seuil de punition.
Le livre blanc ne précise pas le nombre exact de dépassements de délai ni les seuils de sanction. Je suppose qu’ils seront ajustés une fois le mainnet lancé, selon la réalité.
En résumé, je pense que la direction du mécanisme de tirage au sort est bonne, mais qu’elle protège les gens de bonne foi, pas les mal intentionnés. S’il y a quelqu’un qui bloque volontairement avec un bug, il faudra peut-être compter sur les signalements de la communauté.
Et vous, qu’en pensez-vous ? Vous trouvez ce mode de classement équitable ? N’hésitez pas à me critiquer. @OpenGradient
Si celui qui prend le plus vite l’emporte, alors le réseau rapide aura toujours du travail, tandis que le réseau lent n’en aura jamais. À la fin, il ne reste plus que deux ou trois gros acteurs, et le reste des nœuds meurt de faim. Dans ce cas, à quoi bon se dire « décentralisé » ?
Dans son livre blanc, OpenGradient propose une solution : tirer au sort.
Ce n’est pas du hasard arbitraire. Le système prend le hash du bloc courant, y ajoute l’ID de cette requête, et le tout est envoyé à un module appelé VRF, qui calcule un nombre aléatoire. Ensuite, ce nombre aléatoire sert à classer tous les nœuds en ligne. Le nœud classé premier prend la requête en priorité. Il doit rendre le résultat et la preuve dans un délai donné. S’il dépasse le délai ou triche, on passe au deuxième, puis au troisième, etc.
Le point clé, c’est que ce nombre aléatoire est vérifiable. Les nœuds ne peuvent pas tricher : la logique de classement est publique, et tout le monde peut recalculer. Le livre blanc indique que c’est garanti via des preuves à divulgation nulle de connaissance (ZKP), pour prouver que le nombre aléatoire a bien été généré selon les règles. Tu veux connaître à l’avance le prochain nœud qui recevra la requête ? Impossible.
J’avais vu un autre projet qui faisait aussi du VRF : au final, le classement était quand même « raflé » par des gens plus rapides. Je me suis rendu compte que la graine aléatoire pouvait être devinée à l’avance par certains nœuds. De ce côté, OpenGradient lie la graine au hash du bloc : comme le hash du bloc ne peut pas être prédit, cela bouche cette faille.
Mais ce design a un côté pénible. Si un nœud provoque volontairement un dépassement de délai, il n’est pas immédiatement puni par une slashing de mise ; il est simplement temporairement retiré de la file. Il faut plusieurs dépassements consécutifs pour déclencher une sanction. Le livre blanc appelle ça une « soft penalty » (pénalité douce). Je comprends : tout le monde peut avoir des soucis de gigue réseau. Punir direct par une amende à chaque dépassement serait trop sévère. Mais ça laisse aussi une marge pour des gens mal intentionnés : certains peuvent répéter volontairement les dépassements, afin de ralentir l’efficacité globale. Tu ne peux rien faire tant qu’ils n’ont pas atteint le seuil de punition.
Le livre blanc ne précise pas le nombre exact de dépassements de délai ni les seuils de sanction. Je suppose qu’ils seront ajustés une fois le mainnet lancé, selon la réalité.
En résumé, je pense que la direction du mécanisme de tirage au sort est bonne, mais qu’elle protège les gens de bonne foi, pas les mal intentionnés. S’il y a quelqu’un qui bloque volontairement avec un bug, il faudra peut-être compter sur les signalements de la communauté.
Et vous, qu’en pensez-vous ? Vous trouvez ce mode de classement équitable ? N’hésitez pas à me critiquer. @OpenGradient