L’un des principaux défis d’ingénierie dans l’industrie de la blockchain est la scalabilité. La scalabilité fait référence au développement de technologies ou de protocoles qui peuvent traiter un plus grand nombre de transactions dans un laps de temps déterminé. Alors que les réseaux de paiement traditionnels comme Visa peuvent traiter des milliers de transactions par seconde, la plupart des blockchains ne peuvent traiter qu’une poignée de transactions dans la même période de temps.

Nous travaillons sur deux solutions de mise à l’échelle : Les Sidechains et un protocole Block-DAG. Cet article se penchera sur ce dernier point, tandis que nous avons consacré un autre article à notre développement du système de sidechains.

Qu’est-ce qu’un DAG ?

Le terme DAG vient de l’anglais Directed Acyclic Graph (Graphique Acyclique dirigé). La structure à gauche de l’image ci-dessous est un graphique simple composé de noeuds reliés par les bords. Dans un graphique dirigé, chaque connexion a une direction, indiquée ici par des flèches. Un graphique acyclique dirigé - DAG - ne permet pas les les noeuds soient reliés de manière circulaire, comme ce que vous pouvez voir dans la partie inférieure du graphique dirigé.

DAG DAG

Il y a deux façons différentes de configurer un DAG afin qu’il puisse être utilisé pour une cryptomonnaie. Les nœuds peuvent être constitués de transactions individuelles ou de blocs contenant plusieurs transactions. Le premier protocole DAG notable a été Tangle de l’IOTA. Dans Tangle, chaque nœud est constitué d’une transaction. Chaque transaction fait référence à deux transactions antérieures et contient une petite preuve de travail.

Horizen envisage l’utilisation d’un protocole Block-DAG. Dans ce cas, chaque nœud du DAG est un bloc, similaire à un bloc de la blockchain. Il a également un en-tête de bloc contenant des informations importantes telles qu’un horodatage et des références aux blocs précédents, ainsi qu’un ensemble de transactions. La principale différence par rapport à un bloc d’une blockchain est qu’un bloc dans le Block-DAG peut contenir des références à plus d’un prédécesseur. Cela permet à la structure de données de devenir bidimensionnelle par rapport à la structure de données unidimensionnelle ou linéaire d’une blockchain. Nous ne modifions que la structure des données par rapport à une blockchain, mais nous conservons le même mécanisme de consensus, la preuve de travail, pour que le réseau s’entende sur un seul historique des transactions.

chain DAG chain DAG

Les mineurs d’un Block-DAG

Comme vous le savez peut-être, il y a des mineurs dans les blockchains traditionnelles de preuve de travail qui sécurisent le registre avec de grandes quantités de puissance informatique. Les mineurs sont encouragés à faire ce travail en étant récompensés par des coins nouvellement crées. Il y aura aussi des mineurs dans notre protocole Block-DAG. Ce que nous modifions fondamentalement, c’est la structure des données de l’enregistrement de transaction. Le mécanisme de consensus utilisé par le réseau pour parvenir à un accord sur l’ordre des transactions reste le même, à savoir la preuve de travail.

Une différence dans la structure de récompense de notre DAG par rapport à une blockchain est que non seulement le mineur qui résout un bloc obtient une récompense pour ce bloc particulier, mais aussi un certain nombre de mineurs qui confirment que ce bloc, plus tard, recevront une récompense sous la forme de coins nouvellement crées. Cela incite les mineurs à référencer tous les blocs non référencés. Les blocs nouvellement créés qui ne sont pas encore référencés par d’autres blocs sont appelés les “feuilles” du DAG.

Le minage dans le Block-DAG d’Horizen sera similaire au minage traditionnel, mais nous nous attendons à ce qu’un plus grand nombre de blocs soient minés au total avec une difficulté globale moindre, ce qui devrait conduire à une plus grande décentralisation du minage car moins de mineurs auront besoin de rejoindre les pools de minage.

leaves leaves

Horizen répond au besoin d’une autre adaptation qui doit être faite concernant la règle de la plus chaîne la plus longue utilisée dans les blockchains pour déterminer quelle branche, ou fork, est celle qui est valide en cas de dédoublement de la chaîne. Dans notre DAG, il existe un algorithme un peu plus complexe qui détermine la validité de deux blocs en conflit, en fonction du nombre de fois qu’ils ont été confirmés. Le principe de base de la règle de la chaîne la plus longue ou Consensus Nakamoto demeure. Plus un bloc de DAG est confirmé, plus il est probable qu’il soit le bon bloc des deux blocs en conflit.

Difficulté d’ajustement

Nous avons modifié l’algorithme d’ajustement de difficulté pour notre Block-DAG. La difficulté détermine à quel point il est difficile de créer un nouveau bloc et combien de blocs sont créés dans un laps de temps donné. Habituellement, la difficulté est ajustée en comparant le temps moyen qui devrait être nécessaire aux mineurs pour créer un nouveau bloc et le temps qu’il leur faut en réalité. Si des blocs sont créés trop souvent, la difficulté augmente. Si cela prend trop de temps aux mineurs, la difficulté diminue.

Nous avons l’intention de baser notre ajustement de la difficulté pour le Block-DAG non seulement sur le temps qu’il faut pour extraire de nouveaux blocs, mais aussi sur la taille des derniers blocs. Lorsque plusieurs blocs d’affilée atteignent la limite de taille d’un bloc, c’est un indicateur d’une activité élevée du réseau. Cela signifierait traditionnellement qu’il faut plus de temps pour que des transactions valides soient incluses dans un bloc. Dans notre DAG, la difficulté diminue en cas de forte activité du réseau, ce qui permet aux mineurs de produire plus de blocs pour la même période de temps. Il en résulte qu’un plus grand nombre de transactions peuvent être traitées dans le même laps de temps et que le débit global est augmenté. Ce mécanisme permet à notre DAG de gérer dynamiquement les différentes activités du réseau sans sacrifier la sécurité.

Le principal défi

Du point de vue de l’ingénierie, il y a un défi principal à résoudre avec un tel protocole Block-DAG : établir un ordre parmi tous les blocs. Alors que l’ordre des blocs d’une blockchain est toujours linéaire, il doit être établi dans un DAG par un ensemble de règles prédéfinies. La disposition des blocs dans notre DAG sera basée sur l’intersection des blocs. Une transaction valide peut être incluse dans deux blocs valides différents dans un DAG. En examinant le “chevauchement” des transactions d’un ensemble de blocs, on peut établir un ordre final de l’ensemble.

Résumé

Le débit atteint par un Block-DAG nous motive à faire de ce protocole une réalité dans l’écosystème Horizen. La plupart des registres basés sur DAG sont des DAGs de transaction alors que nous travaillons sur un Block-DAG.

Le minage dans notre Block-DAG sera similaire au minage traditionnel avec de légères adaptations de la structure de récompense. Nous avons légèrement adapté la règle de la chaîne la plus longue, de sorte qu’elle fonctionne dans un contexte de DAG et nous avons conçu un nouvel algorithme afin de déterminer la difficulté d’extraction basée non seulement sur le temps de production des blocs mais aussi sur le nombre de transactions par bloc. Si les blocs atteignent la limite de taille de bloc, cela indique une activité réseau élevée et la difficulté diminuera de sorte que plus de blocs seront minés durant une même période de temps. Le principal défi de la conception du protocole Block-DAG est d’arriver à établir un ordre linéaire parmi tous les blocs, basé sur le chevauchement des transactions qui sont incluses dans plus d’un bloc.