Les transactions multipartites avec Anoma

Comme je l’avais expliqué dans ma première vidéo, Anoma apporte d’incroyables innovations en ce qui concerne l’échange de valeur, notamment grâce à son système d’intentions et de prédicats de validité qui permet de personnaliser les requêtes. Mais, ce n’est pas le seul nouvel élément apporté : Anoma dispose également d’une machine d’état (state machine) capable de gérer efficacement des transactions concernant plus de deux personnes.

Contrairement à la plupart des plateformes de contrats intelligents actuelles, qui ont du mal avec un grand nombre de participants, Anoma n’a aucun problème avec des transactions où 10, 50, 100 personnes participent. Pourquoi une telle différence ? En fait, c’est essentiellement parce que ce genre d’échanges fonctionne beaucoup mieux avec des intentions et des prédicats de validité. Ou pour tout dire, c’est même plutôt l’inverse : c’est extrêmement difficile d’y parvenir sans le système d’intentions et prédicats.

Vous savez déjà comment ce système fonctionne si vous avez regardé la première vidéo, donc je ne vais pas le décrire de nouveau. Nous allons plutôt nous pencher sur les nouvelles possibilités offertes par Anoma et son système d’intentions/prédicats de validité, comme dans le cas des transactions multipartites.

Le futur du commerce décentralisé, chez vous demain

Comme expliqué dans l’introduction, les nombres de gens impliqués dans les transactions multipartites peuvent être énormes. Nous pourrons certainement voir de temps en temps des enchaînements de 100 intentions combinées les unes aux autres pour former une seule transaction valide. Mais ça n’est pas très pratique comme exemple dans un article comme celui-ci, donc pour illustrer les choses, nous allons nous contenter d’une transaction impliquant 3 personnes.

Disons que cette transaction multipartite hypothétique comprend les participants suivants :

  • Alice, qui a une vingtaine de tickets pour un concert et veut se débarrasser de ceux qu’elle n’utilisera pas en échange d’ETH, BTC ou USDC,
  • Bob, qui veut acheter 2 tickets pour un maximum de 1.5 ETH,
  • Charlie, qui veut acheter 3 à 5 tickets pour un maximum de 0.2 BTC.

Cette transaction sera ajoutée à un bloc si tous les prédicats de validité sont satisfaits. En l’occurrence il s’agit des prédicats de validité d’Alice, Bob et Charlie, mais pas seulement : il faudra aussi que les prédicats de validité des actifs utilisés soient satisfaits. Par exemple, si Charlie paye en USDC et que le prédicat de validité de l’USDC dicte qu’il est sur une liste noire et qu’il a l’interdiction de déplacer ses actifs, alors la transaction ne pourra pas avoir lieu avec lui. En principe, à cause de ça, aucun nœud solveur ne proposera de solution dont Charlie fait partie. En revanche, si un solveur fait erreur et l’inclut dans la transaction, cette transaction sera simplement rejetée.

Imaginons plutôt que Charlie paye avec un actif qui n’a pas de problème de centralisation dans ce genre-là, et que rien ne s’oppose à sa participation. Tant que tous les prédicats de validité de toutes les adresses dont l’état sera modifié ne s’opposent pas à cette transaction, alors les changements d’état seront mis en œuvre, et la transaction sera validée.

Et puisqu’on parle de prédicats de validité, voilà à quoi pourrait ressembler celui d’Alice, qui veut conserver au moins 3 tickets pour elle-même et ses amis, peu importe la quantité qu’elle réussit à vendre.

use anoma_vm_env::*;
[validity_predicate]
fn validate_tx(

tx_data: Vec,
addr: Address,
keys_changed: HashSet,
verifiers: HashSet,
) -> {
post_state[“NFT_CONCERT/Alice/balance"] >= 3
}

Avec ce prédicat de validité, toute transaction qui amènerait le total de tickets dans le portefeuille d’Alice à moins de 3 serait rendue invalide. Et ce, peu importe ce qu’elle pourrait écrire dans son intention.

Elle n’a donc pas vraiment besoin de spécifier de montant maximal dans l’intention, et elle peut faire confiance au système pour lui laisser ce dont elle a besoin. Tout ce qui est nécessaire au niveau de l’intention, c’est d’exprimer quel actif est mis en vente, quel prix est désiré, et quels actifs sont acceptés comme moyen de paiement. Ensuite, elle n’aura plus rien à faire à part attendre et profiter du concert. En supposant qu’elle ait fixé un prix raisonnable. Si personne ne souhaite acheter parce que le prix est trop élevé, ce n’est pas le système d’intentions qui va résoudre le problème.

Et ce qui est intéressant également, c’est que si Alice change d’avis et ne veut plus aller au concert, elle peut simplement modifier son prédicat de validité ou le supprimer pour que la ligne concernant le nombre minimal de tickets à garder n’apparaisse plus ou soit ≥ 0.

Tout cela permet donc de valider des transactions impliquant plusieurs personnes, mais qu’en est-il de la négociation multipartite qui peut parfois la précéder ?

L’étape préliminaire : la négociation multipartite

Le scénario ici est assez simple : imaginez un groupe d’amis qui partent en vacances et veulent louer un appartement ou une maison quelque part à la plage. Dans ce cas, nous avons un groupe qui souhaite collectivement négocier avec une entité unique, le bailleur. Il y a peut-être 10 personnes dans l’histoire, mais seulement deux « groupes » : les locataires et le propriétaire.

Le groupe d’amis devra d’abord se mettre d’accord sur les caractéristiques de la location recherchée, le prix, la répartition des coûts, etc. Une fois que c’est fait, c’est très simple : ils devront tous publier la même intention. Pour éviter de se retrouver casés avec des inconnus, ils devront certainement également préciser la liste des participants attendus, en plus de toutes les autres caractéristiques de la transaction. Ensuite, on passe par le procédé normal, les prédicats de validité sont vérifiés, les montants présents sur l’adresse, et cetera.

Des micro-DAO instantanées : les engagements collectifs décentralisés

Vous savez sans nul doute ce qu’est une DAO, et au fond, on peut dire que ceux qui en sont membres s’engagent à œuvrer pour accomplir les missions de ladite DAO, dans un grand nombre de cas. Mais les DAO, ce ne sont pas des solutions multipartites universelles, notamment lorsque les utilisateurs du réseau ont besoin d’un moyen plus éphémère de faire alliance pour atteindre un objectif quelconque. Comment faire sans avoir recours à une DAO ?

Pour l’instant, sur les réseaux traditionnels, il n’y a pas réellement de réponse à cette question, mais vous avez de la chance : Anoma dispose d’une solution.

Imaginons, pour expliquer tout ça, qu’un groupe d’utilisateurs souhaite s’unir comme consommateurs pour inciter les grandes sociétés à fabriquer des produits de manière écoresponsable. Ces gens n’ont pas envie de monter une association. En effet, c’est un procédé chronophage et qui ne garantit pas de résultats : ils préfèrent directement taper dans le portefeuille des fabricants.

Sur Anoma, ils peuvent avoir recours aux engagements collectifs : il s’agit simplement de publier une intention selon laquelle ils déclarent tous désirer la même chose, c’est-à-dire l’achat d’un produit qui respecte certaines normes de pollution, ou par exemple l’achat d’un produit dont le producteur a prouvé qu’il avait acheté X unités de crédit carbone.

En ayant recours à un oracle fiable qui fournit des données sur la production des produits concernés, il est possible de rédiger une intention qui bloque toute transaction liée à des produits polluants.

Avec ce système, les producteurs pourront voir combien de clients exigent le respect de ces normes, et pourront par conséquent calculer l’impact de ces exigences sur leurs bénéfices. Si suffisamment de gens s’engagent, les producteurs seront naturellement incités à respecter leurs exigences pour pouvoir vendre leurs produits.

Le seul inconvénient potentiel de tout ce système, c’est que dans le cas de produits existant dans le monde réel et pas sur la blockchain, on doit disposer d’un oracle fiable, bien sûr… S’il n’y a pas d’oracle fiable, c’est plus difficile à mettre en œuvre. Cela dit, une solution « fait maison » où des participants se contentent de communiquer sur un forum et de décider en interne quels produits correspondent à leurs critères pourrait tout à fait fonctionner. En fait, en pratique, ça ne serait pas si différents des « listes adblock » que l’on a aujourd’hui : des utilisateurs militants pourraient se réunir et compiler une liste de produits agréés dans une liste, puis publier cette liste à une adresse bien définie, sur internet ou sur une chaîne comme Arweave et Ceramic. Ensuite, les utilisateurs finaux pourraient simplement s’abonner à ces listes, les intégrer à une intention ou à leur prédicat de validité, et c’est tout. Si les portefeuilles intègrent nativement cette fonctionnalité de listes, ou permettent l’utilisation de plugins qui le feront, les utilisateurs finaux pourraient tout de même concrétiser leurs convictions très facilement.

Les engagements collectifs permettent donc aux consommateurs de s’unir d’une nouvelle manière sans avoir à se soucier des intermédiaires. Ils peuvent directement influencer les fabricants de leurs produits préférés, d’une manière totalement décentralisée, sans avoir à véritablement s’organiser formellement et créer une association ou un groupement quelconque. Les intentions, qui ne sont que des bouts de code, pourront se propager par email, entre amis, entre inconnus sur des plateformes comme Twitter, Telegram, ou même 4chan… Et permettront quand même d’aboutir à des résultats concrets.

Les intentions relationnelles : des intentions complexes mais très utiles

Ce type d’intentions a été conçu pour répondre aux demandes les plus complexes que peuvent avoir les utilisateurs du réseau. C’est-à-dire qu’elles permettent de conditionner la validité d’une intention à celle d’une autre intention, de sorte à ce qu’une transaction ne soit validée que si certaines intentions bien spécifiques en font toutes partie simultanément.

Le cas le plus emblématique que l’on peut imaginer, c’est celui de quelqu’un qui a besoin de voyager, de trouver un hôtel sur place, et d’aller faire quelque chose une fois arrivé, comme aller à un concert ou une pièce de théâtre. Pour satisfaire cette personne, chacune des opérations doit respecter certains critères (date, nombre d’étoiles de l’hôtel, temps de trajet en train…), et l’ensemble des trois ne doit pas dépasser un certain prix total.

C’est là que les intentions relationnelles deviennent utiles. Pour atteindre les objectifs fixés, il est possible de publier une intention un peu particulière qui dispose de son propre prédicat de validité, lequel fait référence à 3 « sous-intentions », chacune de ces sous-intentions portant sur une des trois transactions à réaliser. Il y a une sous-intention pour le train, une sous-intention pour l’hôtel, une sous-intention pour le ticket de spectacle/théâtre, et un prédicat de validité dictant que les trois doivent être satisfaits simultanément pour qu’une transaction puisse être validée. De cette manière, même les utilisateurs les plus exigeants pourront être satisfaits… Tant qu’il y a bel et bien des vendeurs prêts à leur céder les produits demandés aux conditions demandées, bien sûr.

Grâce aux intentions et prédicats de validité, Anoma est capable de satisfaire tous les besoins des utilisateurs, y compris les plus excentriques. Et en plus, il n’y a pas de limite réelle au nombre de participants si une transaction concerne plusieurs personnes, ce qui en fait vraiment un système adapté au grand public.

Benjamin Martin

Dans la crypto depuis quelques années maintenant, je suis un passionné de nouvelles technologies en général, et plus particulièrement de tous les nouveaux projets crypto qui s’apparentent à la philosophie originelle du Bitcoin. C’est un peu ma quête du Graal, mais avec moins de récipients et de pierres incandescentes.