La plupart des chaînes de blocs fonctionnent comme une file unique. Un mineur gagne, un bloc est ajouté, et tout le monde attend le suivant. Si deux mineurs terminent au même moment, un seul bloc survit et l’autre est rejeté.
ATON est conçue autrement. Les mineurs peuvent créer des blocs en même temps, et la chaîne les garde. Cela soulève une question évidente. Les paiements ont besoin d’un ordre unique. Si deux blocs dépensent chacun la même pièce, un seul de ces paiements peut compter. Alors, comment une toile de blocs devient-elle une seule liste sur laquelle chaque nœud s’entend ?
Ce qu’est un DAG de blocs
Dans une chaîne ordinaire, chaque bloc pointe vers un seul parent. Dans ATON, chaque nouveau bloc pointe vers tous les blocs récents que son mineur a vus et vers lesquels rien d’autre ne pointe encore. Le résultat n’est pas une ligne, mais une toile. Les blocs pointent toujours vers le passé, jamais vers l’avant, et rien ne boucle. C’est cette structure qu’on appelle un DAG de blocs, un graphe orienté sans cycle. Vous pouvez l’imaginer comme une chaîne qui a le droit d’être large.
La toile elle-même n’est pas le problème. Le problème, c’est de la lire. Deux nœuds qui regardent la même toile doivent arriver exactement à la même liste ordonnée, en n’utilisant rien d’autre que les blocs eux-mêmes. C’est le travail de la règle d’ordonnancement.
Première étape : trouver les blocs bien connectés
La règle part d’une observation simple sur le comportement honnête. Un mineur honnête apprend vite l’existence des nouveaux blocs et pointe vers eux. Les blocs honnêtes, pris ensemble, sont donc étroitement connectés. Chacun fait référence à la plupart des blocs créés peu avant lui, et la plupart des blocs créés peu après lui y font référence.
Un bloc créé en isolement a une autre allure. Si quelqu’un mine en privé et publie ses blocs en retard, ces blocs pointent vers peu de choses, et peu de choses pointent vers eux. Ils restent lâchement accrochés en bordure de la toile.
La règle exploite cette différence. Elle repère le plus grand groupe de blocs qui sont tous étroitement connectés entre eux et traite ce groupe comme le corps principal de la chaîne. Les blocs mal connectés sont tout de même conservés, mais ils sont placés après le corps principal, pas à l’intérieur.
Deuxième étape : choisir une colonne vertébrale dans le corps principal
À l’intérieur du groupe bien connecté, la règle choisit une colonne vertébrale. En partant des blocs les plus récents et en remontant, elle préfère à chaque pas le bloc dont le passé connecté est le plus lourd. C’est proche de l’idée familière qui consiste à suivre la chaîne qui a le plus de travail derrière elle. La différence, c’est que le poids compte toute la toile connectée derrière un bloc, pas seulement une mince ligne d’ancêtres.
Comme la colonne vertébrale est choisie selon le poids, la prolonger honnêtement est la façon la plus facile d’y contribuer. Retenir des blocs n’aide pas, puisque les blocs retenus finissent mal connectés et pèsent peu.
Troisième étape : remplir le reste
La colonne vertébrale donne une ossature. Chaque bloc de la colonne tire ensuite les blocs auxquels il fait référence et qui n’ont pas encore été placés, dans un ordre fixe. Quand deux blocs sont vraiment à égalité, un bris d’égalité fondé sur le hachage du bloc tranche, de sorte que chaque nœud tranche de la même façon.
Le résultat est une seule liste. Chaque bloc de la toile y occupe une position, et tout nœud qui détient les mêmes blocs produit la même liste. Personne ne vote, personne ne se coordonne et personne n’est tenu pour digne de confiance. L’ordre est une pure fonction des données.
Ce que l’ordre signifie pour un paiement
Une fois la liste établie, les transactions sont appliquées dans l’ordre de la liste. Si un bloc plus tardif contient un paiement en conflit avec un paiement antérieur, le paiement plus tardif est simplement sauté. Le bloc qui le transportait compte toujours, et le travail du mineur tient toujours.
C’est là tout l’intérêt pratique de cette conception. Le travail n’est pas rejeté parce que deux mineurs ont terminé à peu de temps d’intervalle. Plus de blocs par unité de temps, c’est plus de place pour les paiements, sans demander aux mineurs de se disputer une seule case.
Table : Une chaîne unique et un DAG de blocs côte à côte
| Chaîne unique | DAG de blocs | |
|---|---|---|
| Blocs créés en même temps | Un seul survit | Tous sont conservés |
| Chaque bloc pointe vers | Un seul parent | Tous les blocs récents non référencés |
| L’ordre vient de | La position dans la ligne | Une règle appliquée à toute la toile |
| Paiements en conflit | Perdent avec leur bloc | Le plus tardif est sauté, le bloc reste |
Limites honnêtes
L’ordonnancement n’est pas la finalité. La position d’un bloc très récent peut encore bouger un peu à mesure que de nouveaux blocs arrivent et que la colonne vertébrale se stabilise. Plus un bloc est profond, plus le poids connecté accumulé au-dessus de lui est grand, et plus il devient difficile à déplacer. Combien de temps vous devriez attendre pour un paiement d’un montant donné, c’est une question à laquelle nous répondrons avec des paramètres publiés, pas avec une promesse aujourd’hui.
[ !NOTE] ATON n’a pas encore été lancée. La règle d’ordonnancement décrite ici est l’approche vers laquelle nous travaillons. Les paramètres exacts seront publiés avant le premier bloc.
Si vous voulez suivre le travail à mesure qu’il avance, la page d’accueil du projet se trouve à aton-chain.com.