Le week-end, je me suis planqué dans le café juste en bas pour piquer un peu de clim pendant que je testais le réseau Dusk. Après trois essais ratés de suite avec le mauvais mot de passe, j’ai fini par enchaîner au bout d’une demi-heure la 21e transaction. J’ai longtemps fixé les journaux d’exécution de la machine virtuelle Rusk—auparavant j’avais joué avec quelques anciennes chaînes de confidentialité : soit ça bloquait une demi-journée avant de produire un bloc, soit l’anonymat était fait jusqu’au bout de façon à rendre impossible l’ouverture d’autorisations d’audit en conformité. Au départ, je n’attendais plus grand-chose de ce qu’on appelle une « blockchain de confidentialité », mais c’est en personne que j’ai été piégé : en fait, ce n’est pas juste une coque pour vendre un concept.

Au tout début, quand j’ai été chargé du consensus SBA, j’ai d’abord pensé à un PoS “relooké”. En parcourant les règles des nœuds et en faisant tourner dix mille simulations de double-spend, j’ai compris : SBA (Segregated Byzantine Agreement, accord byzantin isolé) répartit les nœuds en deux couches. Une couche s’occupe de produire les blocs et d’assembler les transactions via un comité, l’autre couche contient des valideurs qui font des audits aléatoires en vérification. La graine de l’audit aléatoire est générée par une VDF (fonction de délai vérifiable) : personne ne peut prédire à l’avance qui sera contrôlé. Le navigateur du testnet indiquait qu’il y avait 3 nœuds pénalisés pour avoir soumis des blocs invalides, avec confiscation de garantie. Deux d’entre eux ont subi une pénalité “douce” : ils ont manqué quelques blocs, ont été temporairement retirés de la file du consensus, et leur montant de dépôt effectif a été amputé. Le troisième a subi une pénalité “dure” : double signature démasquée, les jetons déposés ont été directement réduits de 20% puis détruits. Ce type de mécanisme de sanction fait fortement grimper le coût de la mauvaise conduite, et rend l’essai/erreur extrêmement cher.

Lors des tests de transaction, j’ai glissé d’un zéro en trop : le montant est sorti directement de la plage autorisée par le Range Proof. La transaction a été rejetée instantanément, et sur la chaîne il n’est même resté aucune trace de transaction “inutile”. Le protocole Phoenix verrouille fermement la plage des montants avec le Range Proof, et combiné aux engagements de Pedersen qui figent le total des actifs de chaque opération, aucune émission “à partir de rien” n’est possible. En plus, avec une Stealth Address à usage unique qui se renouvelle automatiquement pour chaque transaction, j’ai pu envoyer 5 fois des jetons de test : sur la chaîne, il est pratiquement impossible de relier ces 5 transferts au même compte. Les preuves PLONK d’agrégation récursive sont compressées à 287 octets : la vérification d’une transaction ne prend que 1,8 milliseconde. En pratique, c’est très fluide, et même pendant les heures de pointe du testnet, je n’ai pas rencontré d’engorgement.

La machine virtuelle Rusk a été écrite en Rust de zéro, et supporte nativement la norme d’actifs confidentiels. Pour déployer mon Token de test, je n’ai même pas eu besoin d’écrire plus de 200 lignes de code de confidentialité : le coût en Gas des contrats est inférieur de 63% par rapport à l’EVM lorsqu’on y ajoute une couche ZK. Et elle ménage aussi une porte d’entrée pour les audits côté conformité—confidentialité et conformité n’ont donc pas besoin de s’exclure mutuellement, on peut les avoir ensemble. La nuit où le testnet a tourné jusqu’au bout, j’étais bien plus serein que lors de tout projet auquel j’avais participé auparavant.
#dusk $DUSK @Dusk