Dans cet article, je vais vous parler du DAG (Directed Acyclic Graph) et de son utilisation dans les registres distribués, et nous le comparerons avec la blockchain.

DAG n'est pas nouveau dans le monde des crypto-monnaies. Vous avez peut-être entendu parler de lui comme d'une solution aux problèmes d'évolutivité de la blockchain. Mais aujourd'hui, nous ne parlerons pas d'évolutivité, mais de ce qui différencie les crypto-monnaies de tout le reste: la décentralisation, l'absence d'intermédiaires et la résistance à la censure.

Je vais également vous montrer que le DAG est en réalité plus résistant à la censure et qu'il n'y a pas d'intermédiaire pour accéder au registre.

Dans les blockchains habituelles pour nous, les utilisateurs n'ont pas d'accès direct au registre lui-même. Lorsque vous souhaitez ajouter une transaction au registre, vous devez «demander» au producteur de blocs (producteur de blocs, alias «mineur») de le faire. Ce sont les mineurs qui décident quelle transaction ajouter au bloc suivant, et laquelle non. Ce sont les mineurs qui ont un accès exclusif aux blocs et le droit de décider quelle transaction accepter pour l'ajouter au registre.
Les mineurs sont des intermédiaires entre vous et le registre distribué.

En pratique, généralement un petit nombre de pools de mineurs contrôlent collectivement plus de la moitié de la puissance de calcul du réseau. Pour le bitcoin, ce sont quatre pools, pour Ethereum - deux. En cas de collusion, ils peuvent bloquer toutes les transactions qu'ils souhaitent.

Au cours des dernières années, de nombreuses variantes de chaînes de blocs ont été proposées, différant dans les principes de choix des producteurs de blocs. Mais les producteurs de blocs eux-mêmes ne vont nulle part, ils sont toujours "debout sur la barrière": chaque transaction doit passer par le producteur de blocs, et s'il ne l'accepte pas, alors la transaction, en fait, n'existe pas.

C'est un problème inévitable dans le cas de la blockchain. Et si nous voulons le résoudre, nous devons changer radicalement la conception et nous débarrasser complètement des blocs et des fabricants de blocs. Et au lieu de construire une chaîne de blocs, nous joindrons les transactions elles-mêmes, y compris les hachages de plusieurs précédents dans chaque transaction. En conséquence, nous obtenons une structure connue en mathématiques sous la forme d'un graphique acyclique dirigé - DAG.
Désormais, tout le monde a un accès direct au registre, sans intermédiaires. Lorsque vous souhaitez ajouter une transaction au registre, vous l'ajoutez simplement. Choisissez plusieurs transactions parentes, ajoutez vos données, signez et envoyez votre transaction à des pairs sur le réseau. C'est fait. Il n'y a personne pour vous empêcher de faire cela, donc votre transaction est déjà dans le registre.
Il s'agit du moyen le plus décentralisé et le plus exempt de censure pour ajouter des transactions au registre sans intermédiaires. Parce que tout le monde veut simplement ajouter ses transactions au registre sans demander la permission à personne.

Le DAG peut être considéré comme la troisième étape de l'évolution du registre. Au début, il y avait des registres centralisés, où un côté en contrôlait l'accès. Viennent ensuite les blockchains, dans lesquelles il y a déjà plusieurs contrôleurs qui enregistrent les transactions dans le registre. Et enfin, dans le DAG, il n'y a aucun contrôleur, les utilisateurs ajoutent directement leurs transactions.

Maintenant que nous avons une telle liberté, cela ne devrait pas conduire au chaos. Nous devons avoir un accord sur le statut du registre. Et ce consentement, ou consensus, signifie généralement un accord sur deux choses:
- Qu'est-il arrivé?
- Dans quel ordre est-ce arrivé?
Nous pouvons facilement répondre à la première question: dès qu'une transaction correctement créée a été ajoutée au registre, elle s'est produite. Et le point. Les informations à ce sujet peuvent atteindre tous les participants à des moments différents, mais à la fin, tous les nœuds recevront cette transaction et découvriront qu'elle s'est produite.
S'il s'agissait d'une blockchain, les mineurs décideraient de ce qui se passait. Tout ce que le mineur décide d'inclure dans le bloc est ce qui se passe. Tout ce qu'il n'inclut pas dans le bloc ne se produit pas.
Sur les blockchains, les mineurs résolvent également le deuxième problème de consensus: l'ordre. Ils sont autorisés à organiser les transactions dans le bloc à leur guise.
Comment déterminer l'ordre des transactions dans le DAG?

Tout simplement parce que notre graphique est dirigé, nous avons déjà un peu d'ordre. Chaque transaction fait référence à un ou plusieurs parents précédents. Les parents, à leur tour, se réfèrent à leurs parents, etc. Les parents apparaissent évidemment avant les transactions des enfants. Si l'une des transactions peut être atteinte en cliquant sur les liens parent-enfant, nous savons avec certitude l'ordre entre les transactions dans cette chaîne de transactions.

Mais l'ordre entre les transactions ne peut pas toujours être déterminé uniquement à partir de la forme du graphique. Par exemple, lorsque deux transactions se trouvent sur des branches parallèles d'un graphique.

Afin de résoudre l'ambiguïté dans de tels cas, nous comptons sur les soi-disant fournisseurs de commandes. Nous les appelons également «témoins». Ce sont des utilisateurs ordinaires dont la tâche est d'envoyer constamment des transactions au réseau de manière ordonnée, c'est-à-dire afin que chacune de leurs transactions précédentes puisse être réalisée en cliquant sur les liens "parent-enfant". Les fournisseurs de commandes sont des utilisateurs de confiance et l'ensemble du réseau compte sur eux pour ne pas enfreindre cette règle. Afin de leur faire
une confiance
rationnelle , nous exigeons que chaque fournisseur de commande soit une personne ou une organisation bien connue (non anonyme) et ait quelque chose qui pourrait être perdu s'il enfreint les règles, par exemple, une réputation ou une entreprise basée sur la confiance.

Les fournisseurs de commandes sont sélectionnés par les utilisateurs, et chaque utilisateur inclut une liste de ses fournisseurs de confiance dans chaque transaction qu'il envoie au réseau. Cette liste comprend 12 fournisseurs. Il s'agit d'un nombre assez faible pour qu'une personne puisse vérifier l'identité et la réputation de chacun d'entre eux, et suffisant pour que le réseau continue de fonctionner en cas de problèmes inévitables avec une minorité de fournisseurs de commandes.
Cette liste de fournisseurs varie d'un utilisateur à l'autre, mais les listes de transactions voisines peuvent différer d'un maximum d'un fournisseur.

Maintenant que nous avons les fournisseurs de commandes, nous pouvons mettre en évidence leurs transactions dans le DAG et organiser toutes les autres transactions autour de la commande créée par eux. Il est possible de créer un tel algorithme (voir le
livre blanc d'Obyte pour les détails techniques).
Mais la commande dans l'ensemble du réseau ne peut pas être déterminée instantanément, nous avons besoin de temps pour que les fournisseurs de commandes envoient un nombre suffisant de leurs transactions pour garantir l'ordre final des transactions passées.
Et, puisque l'ordre n'est déterminé que par les positions des transactions des fournisseurs dans le DAG, tous les nœuds du réseau recevront tôt ou tard toutes les transactions et arriveront à la même conclusion concernant l'ordre des transactions.

Donc, nous sommes d'accord sur ce que nous considérons comme étant arrivé: toute transaction entrant dans le DAG s'est produite. Nous convenons également de l'ordre des événements: celui-ci est soit visible sur la base des transactions liées, soit déduit de l'ordre des transactions envoyées par les fournisseurs de commandes. Nous avons donc un consensus.

Nous avons cette option consensuelle à Obyte. Malgré le fait que l'accès au registre d'Obyte soit complètement décentralisé, le consensus sur l'ordre des transactions est toujours centralisé, comme 10 fournisseurs sur 12 sont contrôlés par le créateur (Anton Churyumov), et seulement deux d'entre eux sont indépendants. Nous recherchons des candidats qui souhaitent devenir l'un des prestataires indépendants de l'ordre pour nous aider à décentraliser l'établissement de l'ordre dans le registre.
Récemment, un troisième candidat indépendant est apparu qui souhaite établir et maintenir un nœud du fournisseur de commandes - l'Université de Nicosie.

Maintenant, comment contrôlons-nous les doubles dépenses?
Selon les règles, lors de la détection de deux transactions dépensant la même pièce, cette transaction qui est apparue plus tôt dans l'ordre final de toutes les transactions l'emporte. Le second est désactivé par l'algorithme de consensus.

S'il est possible d'établir un ordre entre deux transactions dépensant une pièce (sur les relations parent-enfant), alors tous les nœuds rejettent immédiatement une telle tentative de double dépense.

Si la commande n'est pas visible à partir de la relation parentale entre deux de ces transactions, elles sont toutes les deux acceptées dans le registre, et nous devrons attendre un consensus et établir la commande entre elles en utilisant les fournisseurs de commande. Ensuite, la transaction précédente gagne et la seconde devient invalide.

Bien que la deuxième transaction devienne invalide, elle reste dans le registre, car elle a déjà des transactions ultérieures qui s'y réfèrent, qui n'ont rien violé et ne savaient pas qu'à l'avenir cette transaction deviendrait invalide. Sinon, nous devions retirer le parent des bonnes transactions ultérieures, ce qui violerait le principe principal du réseau - toute transaction correcte est acceptée dans le registre.

Il s'agit d'une règle très importante qui permet à l'ensemble du système de résister aux tentatives de censure.
Imaginons que tous les fournisseurs d'ordres conspirent pour tenter de «censurer» une transaction particulière. Ils peuvent l'ignorer et ne jamais choisir un «parent» pour leurs transactions, mais cela ne suffit pas, cette transaction peut toujours être incluse indirectement en tant que parent d'une autre transaction émise par tout utilisateur du réseau qui n'est pas impliqué dans le complot. Au fil du temps, une telle transaction recevra de plus en plus d'enfants, petits-enfants et arrière-petits-enfants d'utilisateurs ordinaires, se développant comme une boule de neige, et tous les fournisseurs de commandes convenus devront également ignorer ces transactions. Au final, ils devront censurer l'ensemble du réseau, ce qui équivaut à du sabotage.

Ainsi, le DAG reste résistant à la censure, même en cas de collusion des fournisseurs d'ordres, dépassant ainsi la blockchain dans la résistance à la censure, dans laquelle nous ne pouvons rien faire si les mineurs décident de ne pas inclure les transactions. Et cela découle de la propriété principale de DAG: la participation au registre est absolument indépendante et sans intermédiaires, et les transactions sont irréversibles.