Travaux en cours

Travaux en cours : nous construisons ce site en vue du MainNet. Les détails vont évoluer.

Ce site est encore en construction

ZooBC se construit au grand jour. Ce que vous voyez ici est actuel et honnête, mais pas terminé : lisez-le comme l'état des choses aujourd'hui, et non comme une version définitive.

D'ici le MainNet, des choses vont changer : formulations, structure, images et chiffres. Certaines pages sont provisoires.

L'écosystème ZooBC élargi arrive par étapes. Le portefeuille, l'explorateur et les canaux communautaires sont mis en ligne à mesure que le MainNet approche, et ce site grandit avec eux.

Si quelque chose vous semble erroné, cassé ou trompeur, dites-le-nous. Un retour aujourd'hui compte plus pour nous qu'un lancement soigné plus tard.

ZOOBC / SÉCURITÉ DE LA CHAÎNE

Sécurité de la chaîne

Ce qu'il en coûterait réellement de prendre le contrôle de cette chaîne. Le tirage est uniforme, l'influence est linéaire, et la seule cible qui vaille d'être attaquée est le registre : la file d'attente pour y entrer constitue donc la défense.

À chaque bloc, un nœud est tiré au sort pour le construire. Le tirage est une sélection aléatoire uniforme dans l'ensemble du registre, dérivée de la graine du bloc précédent. Pas le nœud le plus riche. Pas le nœud le plus exemplaire. Chaque nœud enregistré, à égalité, à chaque fois.

L'influence sur la chaîne correspond donc simplement à votre part du registre, et elle est linéaire. Il n'existe aucun seuil de 51 % où tout bascule. Détenez un dixième du registre et vous construisez un dixième des blocs ; c'est tout ce que vous obtenez.

Le registre devient ainsi la seule cible qui vaille d'être attaquée, et la file d'attente pour y entrer, la défense. Impossible d'acheter une place. Vous entrez un nœud à la fois, derrière tous ceux qui veulent aussi entrer, et les chiffres ci-dessous montrent ce que cela coûte.

01 / LE TIRAGE

Comment le constructeur de bloc est choisi

À partir de la graine du bloc précédent, chaque nœud calcule la même séquence infinie de tirages. Le tour 1 désigne un nœud ; s'il ne publie pas dans sa fenêtre de 15 secondes, le tour 2 en désigne un autre, et ainsi de suite. Le premier à publier construit le bloc.

La graine elle-même est sign(node_key, hash(previous seed)), vérifiée par chaque validateur. Les signatures Ed25519 sont déterministes : pour un constructeur donné, il existe donc exactement une graine valide, et un constructeur ne peut pas essayer des graines jusqu'à en trouver une qui l'avantage. La seule liberté dont dispose un attaquant est de publier ou de rester silencieux : un bit, une fois, par bloc pour lequel il est tiré au sort.

Le score de participation n'influe pas sur la sélection. On le suppose souvent, à tort. Le score ne décide que d'une chose : si vous restez ou non dans le registre. Il baisse quand vous manquez des tours, et à zéro vous êtes exclu et votre mise vous est restituée. Un score parfait ne vous donne pas plus de chances d'obtenir le prochain bloc qu'un nœud arrivé hier. La mise n'influe pas non plus sur la sélection ; elle ne fait que vous acheter une place dans la file d'attente pour entrer.

02 / L'INFLUENCE EST LINÉAIRE

Ce qu'achète réellement une part du registre

Part de l'attaquantBlocs qu'il construitA un nœud dans la fenêtre de contenuCensurer une transaction pendant 10 blocsNœuds honnêtes à faire taire pour voler un tour

La colonne du milieu ne mesure pas l'influence. Elle indique seulement à quelle fréquence au moins un de ses nœuds figure parmi les 10 premiers tirages : une place près de la tête de file pour ce bloc, rien de plus. L'attaquant ne construit un bloc que lorsqu'il est tiré en premier, ce qui correspond à la deuxième colonne, et c'est exactement sa part du registre.

C'est la censure qui décroît, et elle décroît vite. Pour tenir une transaction à l'écart, il faut détenir chaque tour consécutif pendant qu'elle attend. Avec un tiers du registre, la probabilité est de 1 sur 59,000 sur dix blocs, soit deux minutes et demie. En deçà du contrôle total, aucune part ne permet une censure durable.

03 / DÉNI DE SERVICE

La seule véritable attaque : faire taire le tirage

Un nœud ne peut inclure des transactions que s'il est tiré au sort parmi les 10 premiers tours (max_priority_blocksmiths). Tiré plus tard, il peut toujours construire, mais son bloc doit être vide. C'est cette règle qui fait avancer la chaîne quand des nœuds sont hors ligne : il faut que chacun de ces premiers tirages soit absent pour qu'un bloc perde son contenu.

C'est aussi le point le plus sensible de la conception. Ces nœuds sont désignés 15 secondes à l'avance, dès l'arrivée du bloc précédent. Un attaquant capable de les mettre tous hors ligne dans ce délai force un bloc vide, censurant tout le monde au lieu de simplement entrer en concurrence. C'est un problème de déni de service, pas de consensus, et c'est pourquoi ce nombre est fixé à 10 plutôt qu'à un chiffre plus petit et plus net.

Nœuds à faire taire

10

désignés, par bloc

Préavis

15 s

avant l'ouverture du tour

Bloc vide par accident

 

avec 20 % des nœuds hors ligne

Augmenter ce nombre ne coûte presque rien (seulement quelques nœuds de plus construisant des blocs candidats en même temps), et chaque nœud ajouté est une machine de plus qu'un attaquant doit trouver et neutraliser dans les mêmes 15 secondes.

04 / UN PRIX EN ANNÉES

Le coût d'achat d'une part

Formule
délai = clamp(base ÷ taille du registre, min, max)
Admissions
une à la fois, dans l'ordre des mises

La part des places est un ratio de mise. La file est ordonnée selon le solde bloqué : « remporte 100 % des places » n'est donc pas une question de chance, c'est l'hypothèse que personne ne surenchérit sur lui. Chaque chiffre présenté ici correspond au meilleur scénario pour l'attaquant.

Dès qu'un opérateur honnête mise davantage par nœud, il passe devant. Ne remportez que la moitié des admissions et votre part du registre tend vers la moitié et s'y arrête : les nœuds honnêtes qui prennent l'autre moitié font croître le registre aussi vite que vous faites croître votre part. Un objectif supérieur à votre part des places n'est pas lent à atteindre, il est inaccessible, ce que le tableau ci-dessous affiche comme jamais.

Attente actuelle

 

par nœud admis

Nœuds pour ⅓

 

pour construire un tiers des blocs

Durée pour ⅓

 

de file d'attente continue

Nœuds pour ½

 

pour construire la moitié des blocs

Durée pour ½

 

de file d'attente continue

ZBC bloqués

 

minimum, à 100 ZBC/nœud

05 / CROISSANCE

Comment l'attente évolue à mesure que la chaîne grandit

attente par nœud (semaines) années pour construire la moitié des blocs votre taille à la genèse

Selon la taille de la chaîne

RegistreAttente par nœudNœuds pour ⅓HeureNœuds pour ½Heure

06 / LE SEUL COMPROMIS

Pourquoi le registre à la genèse est le chiffre qui compte

Les admissions sont séquentielles : le temps nécessaire pour doubler un registre est donc simplement registry size × wait per node. C'est une identité, pas un paramètre, ce qui signifie qu'un petit registre ne peut pas avoir à la fois une attente courte et une prise de contrôle lente. C'est le seul compromis de toute la conception qu'aucune formule ne peut faire disparaître.

Registre au lancementAttente de 1 semaineAttente de 2 semainesPour doubler en 2 ans, l'attente doit être de

Le levier, c'est donc le lancement, pas la courbe. Démarrez avec une douzaine de nœuds et chaque opérateur honnête attend des mois, car c'est ce qu'il faut pour que douze nœuds soient difficiles à doubler. Démarrez avec une centaine et une attente de deux semaines garantit déjà près de quatre ans, sans que personne ne soit laissé de côté. Un registre plus grand à la genèse vaut mieux que n'importe quel réglage du délai.

07 / QUATRE PROPRIÉTÉS

Pourquoi cela tient

Les admissions sont séquentielles. Le registre admet un nœud à la fois, à l'échelle de tout le réseau. Vouloir cent nœuds ne signifie pas attendre une fois, mais attendre cent fois, l'une après l'autre. Ce seul fait transforme une attaque financée en un projet de plusieurs années.

La part nécessaire grandit avec la chaîne. Un nœud sur dix, c'est un dixième de l'influence. Un sur mille, ce n'est rien. L'attente par nœud diminue à mesure que le registre grandit, mais jamais en dessous du minimum : le temps total augmente donc malgré tout.

La file d'attente a un prix. Les positions sont ordonnées selon le solde bloqué : un attaquant ne se contente donc pas d'attendre, il doit surenchérir sur chaque opérateur honnête qui veut aussi entrer, à chaque fois. Chaque place qu'il perd lui coûte l'attente et offre un nœud à un opérateur honnête.

L'attaquant finance la chaîne pendant qu'il essaie. Chaque nœud bloque des ZBC. Une attaque sur une décennie implique une position importante, illiquide et entièrement publique dans l'actif même qu'elle cherche à casser. Aucune pénalité n'est appliquée sur la mise : partez, ou soyez exclu pour avoir cessé de répondre, et la mise vous revient intégralement. La caution achète une place dans la file, pas un otage.

Et rien ne s'accumule. Chaque bloc est un tirage indépendant. Un nœud irréprochable depuis un an n'a pas plus de droit sur le prochain bloc qu'un nœud admis ce matin, et un attaquant qui a détenu les dix derniers tours n'a pas plus de chances de détenir le onzième. Il n'y a aucune position à consolider : c'est pourquoi la seule manière durable de gagner de l'influence ici est de représenter une part honnête plus importante du réseau.