Ajouter une transaction à la blockchain est parfois un casse tête. La taille des blocs étant limitée, les mineurs sélectionnent en priorité les transactions les plus profitables pour eux. 

Si vous êtes un développeur ou un utilisateur du réseau, vous avez probablement déjà été confronté au problème des transactions “stucks” (coincées). C’est un état qu’on pourrait qualifier d’attente interminable de traitement. 

Remark se retrouve-t-on dans cette state of affairs, pourquoi par “effet domino”, cela bloque-t-il toutes nouvelles transactions avec ce compte ? Quelles options peuvent apporter les relayeurs de transaction ?

Pour rappel, les transactions sur Ethereum sont ordonnancées par un nombre associé à la transaction et appelé « nonce ». Chaque compte sur la chaîne dispose d’un « nonce » qui est incrémenté à chaque transaction. Ainsi, la première transaction d’un compte aura le nonce 1, tandis que la troisième aura le nonce 3. Les transactions doivent s’exécuter dans l’ordre des nonces : la transaction Three d’un compte ne pourra être intégrée dans un bloc et exécutée avant la 2.

Si plusieurs comptes sont en compétition pour passer leur transaction dans les meilleurs délais, le gas price va subitement grimper. Imaginons dans ce contexte qu’un compte ait soumis une transaction avec un gasoline value trop bas, elle sera alors “coincée” par l’afflux de transactions plus rentables pour les mineurs. Le compteur de transaction (nonce) du compte n’étant plus incrémenté, ce sont toutes les transactions du compte émisent depuis l’incident qui se retrouvent alors bloquées. 

Pour sortir de cette state of affairs dans un délai raisonnable, il faut annuler ou remplacer la transaction “coincée” par une nouvelle avec un nonce identique et un gasprice plus élevé. Il faut répéter l’opération en augmentant le gasoline value jusqu’à l’inclusion de la transaction dans un bloc. 

Enfin, sauf à forcer un utilization séquentiel du compte (ce qui est inconceivable si les transactions sont émises depuis le pockets d’un utilisateur par exemple) il reste à gérer l’accumulation des transactions “en attente” du compte avec un gasoline value potentiellement décorrélé du nouveau prix du marché.

Rendu célèbre par Cryptokitty et les ICOs, c’est aujourd’hui aux protocoles de finance décentralisée de faire face à ce problem. Heureusement ces problèmes restent occasionnels sur Ethereum. Néanmoins lorsqu’ils se produisent, c’est un un bug critique pour l’utility. Côté utilisateur, la frustration ressemble à celle qu’on peut ressentir lorsque le paiement ne fonctionne pas sur un web site e-commerce. Côté utility, en plus du assist que cela génère, cela se traduit généralement pas une perte de revenu. 

Utilisateurs et développeurs ont hérité d’un problème inextricable sur Ethereum 1.x. Cette state of affairs a probablement contribué à ternir l’picture du protocole. Elle a aussi montré que la communauté est succesful de se mobiliser pour proposer des améliorations. 

L’une d’entre elles est basée sur l’utilisation des meta-transactions. 

Le idea de meta-transaction permet à des utilisateurs d’interagir avec la blockchain avec seulement une paire de clés publique/privée. Ce mécanisme est souvent utilisé pour rendre doable l’envoi de “gasless” transactions, c’est-à-dire émises depuis un compte (EOA) sans Ether. 

Côté utilisateur, la development de la meta-transaction est similaire à une transaction normal (from, to, worth… et signature) sauf qu’au lieu de l’envoyer directement à la Blockchain, il envoie sa meta-transaction à un tiers qui prendra en cost le gasoline. 

Ce tiers construit une nouvelle transaction qui contient la meta-transaction et l’envoie vers un sensible contract proxy (ou seulement une fonction proxy dans un contrat). Le contrat vérifie la validité de la meta-transaction (grâce à sa signature) avant de l’exécuter.

Ce mécanisme est de plus en plus utilisé par les purposes pour améliorer l’onboarding de leurs utilisateurs. Elles peuvent ainsi sponsoriser l’utilization de leur service en payant le gasoline tout en préservant les bénéfices d’un système décentralisé pour l’utilisateur. (non-corruptibility, non-repudiation, and many others).

Si l’utility peut assurer elle-même le relai des transactions de ses utilisateurs, à quel second a-t-on besoin d’un relayer?

Le dilemme entre “faire soi-même” ou “acheter une answer” est bien connu des développeurs.  La réponse dépend toujours du contexte. Pizza Hut proceed de livrer ses pizzas quand la majorité des restaurateurs utilisent Uber Eat ou Deliveroo. Comme pour les eating places, les infrastructures de relais étant complexes à développer et coûteuses à maintenir, de plus en plus d’purposes intègrent des APIs pour relayer leurs transactions.

En plus d’améliorer l’inclusion des transactions dans la blockchain, les relayeurs peuvent proposer des companies pour faciliter la mise en place de “gasless” transactions.

Remark un relayeur améliore-t-il l’inclusion des transactions dans la Blockchain ?

Pour un compte donné, les transactions doivent être ordonnées et validées de manière séquentielle. Dans le cas où l’on souhaite envoyer Three transactions par exemple, la transaction Three restera en attente tant que la 1 et la 2 n’auront pas été traitées. Le nombre de transactions en attente pour un compte est limité par le noeud (sur geth la limite par défaut est de 64 par exemple). Au delà de cette limite, le noeud peut arbitrairement supprimer des transactions de sa file d’attente.

Pour contourner ces limitations, un relayer peut dispatcher l’envoi de ses meta-transactions à partir de plusieurs comptes. Par exemple avec trois comptes le nombre de transactions pouvant être en attente sur un noeud passe de 64 à 192 dans le cas de Geth. De plus, quand une transaction est bloquée sur un des comptes, le relayer peut déporter l’envoi sur les deux comptes restant et ainsi continuer à distribuer ses transactions.

Un autre level à considérer est le système de nonce (permettant de se protéger contre le replay assault) utilisé par le sensible contract relayeur. La answer choisie aura un affect sur la façon dont les transactions seront traitées.Par exemple, si l’on souhaite faire de l’ancrage de certificat, on veut pouvoir envoyer un grand nombre de transactions simultanément et l’ordre n’a pas d’significance. 

Une utility peut avoir besoin d’envoyer certaines transactions de manière séquentielle et d’autres de manière simultané. En cas de quantity de transactions vital, les method pour estimer le prix du gasoline et et les options de safety contre les replay assault “on chain”  peuvent avoir des affect vital sur le coût des transactions. Les relayeurs permettent aux développeurs de s’affranchir de ces questions en leur mettant à disposition des companies simples prêt à l’utilization.

Remark un relayeur facilite-t-il la mise en place de “gasless” transactions?

La nécessité d’avoir de l’Ether sur son compte pour modifier l’état d’un sensible contract rend l’onboarding utilisateur laborieux sur Ethereum. Aucune utility grand public n’aura un taux de conversion élevée tant qu’elle imposera à ses utilisateurs d’acheter de l’Ether avant son utilisation.

Certaines purposes proposent tout simplement de payer le gasoline pour leurs utilisateurs. Cette approche est souvent négligée par les développeurs automotive elle s’écarte de la philosophie du protocole qui vise à garantir une indépendance dans l’utilization du réseau. Dans ce modèle plus traditionnel, l’utility considère le gasoline comme un coût d’infrastructure, au même titre qu’une consommation CPU sur AWS par exemple. La génération de revenus étant généralement corrélée à l’utilization des sensible contract, c’est un modèle économiquement viable dans la plupart des cas.

L’utility et l’utilisateur peuvent également s’accorder on chain pour un remboursement automatique des frais de gasoline. Avec l’émergence des companies de DeFi, de plus en plus d’utilisateurs possèdent des Token sans posséder d’Ether. Certains systèmes permettent alors à leurs utilisateurs de payer leurs transactions avec un token ERC20.

L’utility peut également distribuer à ses utilisateurs ses propres token au second de l’inscription. Ce mécanisme est comparable à une distribution de coupons gratuits utilisables seulement sur les contrats de l’utility.

Un relayeur aidera à mettre en place la bonne stratégie de remboursement de gasoline sans que cela ne nécessite de lourds investissements en recherche et développement. 

Remark s’utilise un relayeur ? 

Idéalement, tous ces companies doivent fonctionner de manière transparente pour les développeurs, c’est-à-dire sans modifier ses sensible contract ou le code de leurs purposes.

Les companies de relais sont généralement exposés through une API net classique. Ils peuvent également être disponibles en tant que proxy devant un “web3 supplier” entre l’utility et le noeud pour faciliter leur utilization avec des librairies comme web3js.

Enfin, le design de la answer doit permettre à ses utilisateurs de vérifier que le relayer ne peut ni rejouer, ni modifier les données des meta-transactions.

Le fonctionnement d’un relayer est finalement assez similaire à celui d’une liste d’attente d’un noeud, mais il ajoute plusieurs fonctionnalités indispensables pour les purposes en manufacturing (reside sur le mainnet).

Photograph by Daniel Jensen on Unsplash

Décentralisation, simplicité, vie privée, sécurité, … choisir remark relayer une transaction sur Ethereum implique de prendre en compte beaucoup de critères et à nouveau, selon le contexte, les purposes font des choix différents. 

GSN (Fuel Station Community) est une des initiatives les plus visibles dans ce domaine. Cette answer a permis la development d’un réseau de relayeurs décentralisés. L’utilisation d’un hub de relayeurs permet de mettre en compétition des acteurs prêts à traiter des transactions contre une fee. GSN nécessite d’importants efforts d’intégration. C’est une answer adaptée surtout lorsque l’utilisation d’un réseau P2P de relais est importante. Pour comprendre pourquoi aucun consensus autour d’un normal n’existe, comparons deux wallets: Metamask et Argent.xyz.

Le premier gère l’identité de ses utilisateurs avec un EOA, le second utilise des sensible contract. Implémenter naïvement un “proxy relayeur” sur des transactions émises depuis MetaMask se révèle plus complexe qu’il n’y paraît. L’utilisation de msg.sender dans les contrats de l’utility serait proscrite automotive elle contiendrait l’adresse du relayer et non l’adresse publique de l’utilisateur.

Argent.xyz utilise quand à lui un account contract qu’il faut déployer pour chaque utilisateur. C’est un coût supplémentaire pour Argent.xyz mais la vérification et le relai des transactions se font directement dans ce contrat, aucune modification sur les contrats de vacation spot n’est alors requise.

Les contrats des purposes peuvent aussi directement vérifier et exécuter la signature des meta-transactions en implémentant deux fonctions. Une pour se protéger contre les attaques par rejeu et l’autre pour vérifier et exécuter la transaction. Une answer qui présente de nombreux avantages mais qui reste inutilisable sur les contrats déjà déployés.

Pour aller plus loin sur les différentes philosophies de relai sur Ethereum, @wighawag à récemment proposé l’idée d’un “Minimal And Extensible Meta Transaction Forwarder” #2585. Cet EIP montre bien à quel level le sujet est vaste et activement débattu dans la communauté.

Les purposes avec d’importants volumes de transactions paient systématiquement des commissions de réseau beaucoup trop chères. Ce gaspillage ne leur évite pas de devoir intervenir lorsqu’une transaction est bloquée. Pour les purposes plus petites ou en cours de création, créer et maintenir une infrastructure de relai nécessite des investissements importants. Les prestataire de companies de paiement comme Paypal ou Stripe ont permis aux développeurs d’accepter des paiements électroniques simplement sur Web. Ethereum permet de supprimer ou limiter le pouvoir des intermédiaires. Ce protocole doit pourtant se doter de passerelles pour simplifier son utilisation. Les relayeurs répondent à ce problem en mettant à disposition des développeurs des infrastructures fiables d’acheminement de transactions tout en étant limité “by design” à leur rôle de relaie grâce à l’utilisation unique de transactions pré-autorisées par les utilisateurs.

Chez Rockside.io, nous nous sommes fixé pour objectif il y a eight mois de construire le meilleur relayeur sur Ethereum, nous traitons déjà des centaines de transactions quotidiennement pour des startups et des grands comptes. Cela traduit un besoin réel chez les développeurs. L’utilisation en development de ce kind de service montre également que le rapport des entreprises à la blockchain évolue. Nous passons d’une volonté de comprendre à une volonté d’utiliser la technologie.



Source link

LEAVE A REPLY

Please enter your comment!
Please enter your name here