
Ce blog explique comment créer une dapp sans gas avec Permissionless.js et un smart contract paymaster personnalisé ERC-4337.

Lorsque nous effectuons des transactions sur une blockchain, de nombreux processus se déroulent en coulisses. Chacun de ces processus a un coût, que nous appelons le « Gas Cost ». Mais qu'est-ce que le Gas ?
Le Gas est une unité qui mesure le travail de calcul nécessaire pour effectuer des transactions ou exécuter des smart contracts sur un réseau blockchain, comme Ethereum. Le Gas est essentiel car il régule et priorise les transactions au sein du réseau. Les réseaux blockchain ayant une capacité de traitement limitée, les frais de Gas remplissent deux fonctions clés :
Inciter les validateurs ou les mineurs : les frais de Gas récompensent les validateurs ou les mineurs pour le traitement et la confirmation des transactions, garantissant ainsi la sécurité et le bon fonctionnement du réseau.
Prévenir les abus du système : en imposant un coût à chaque opération, ils découragent les attaques de spam et l'utilisation malveillante des ressources de calcul, protégeant ainsi le réseau contre d'éventuels abus.
Si l'on considère que le Gas est le « carburant » nécessaire au fonctionnement d'une blockchain, l'idée d'une dapp sans Gas peut sembler contradictoire — comme essayer de faire rouler une voiture sans carburant. Alors, comment une blockchain peut-elle fonctionner sans Gas ?
En réalité, le Gas ne disparaît pas. C'est simplement la responsabilité du paiement des frais de Gas qui est transférée de l'utilisateur à une autre partie — soit le fournisseur de services, soit la dapp elle-même. Cette approche permet aux utilisateurs d'interagir avec la dapp sans supporter directement les frais de Gas, améliorant ainsi l'expérience utilisateur et l'accessibilité.
En règle générale, les utilisateurs sont responsables du paiement des frais de Gas, qui peuvent augmenter le coût de leurs transactions en fonction du prix du Gas. Dans une dapp sans Gas, cependant, les frais de Gas sont pris en charge par un tiers, qui signe et paie la transaction au nom de l'utilisateur. Ce tiers est souvent un relayer, bien que dans certains cas, des mécanismes d'account abstraction soient utilisés à la place.
Il existe deux types de standards permettant de rendre une dapp sans Gas possible : ERC-4337 et ERC-2771. Examinons-les de plus près :
ERC-4337 : Ce standard introduit l'account abstraction, permettant aux comptes Ethereum de se comporter comme des smart contracts. Il offre une plus grande flexibilité dans la façon dont les transactions sont initiées et autorisées, notamment en découplant l'initiation des transactions des Externally Owned Accounts (EOA) traditionnels. Cela permet des workflows de transactions plus complexes, comme le regroupement de plusieurs actions en une seule transaction ou l'activation de wallets programmables.
ERC-2771 : Ce standard introduit un framework de meta-transactions, permettant aux utilisateurs d'interagir avec des dapps sans avoir besoin d'ETH pour payer directement les frais de Gas. Un forwarder de confiance gère la transaction au nom de l'utilisateur, et la dapp rembourse le forwarder pour les frais de Gas. Cela simplifie l'onboarding des nouveaux utilisateurs qui n'ont pas d'ETH dans leur wallet mais souhaitent tout de même interagir avec des dapps.
Dans ce cas, nous utiliserons permissionless.js et ERC-4337 pour créer un paymaster personnalisé avec des comptes qui couvrent la création de clients (clients public et Pimlico paymaster), la configuration d'un smart account et la définition d'une logique personnalisée pour le paymaster. Mais d'abord, comprenons ce qu'est un paymaster.
Un paymaster est un smart contract spécialisé dans le système d'account abstraction d'Ethereum (comme ERC-4337). Il agit en tant que sponsor des frais de Gas pour les transactions, permettant aux utilisateurs de payer avec des tokens autres que l'ETH, ou même de bénéficier d'une prise en charge totale des frais. Le paymaster décide de sponsoriser ou non le coût du Gas en fonction d'une logique personnalisée, offrant ainsi plus de flexibilité aux dapps, où les frais de transaction peuvent être gérés par un tiers, simplifiant le processus pour les utilisateurs sans qu'ils aient besoin de détenir des ETH.
Commençons par créer un fichier utils/index.ts dans lequel nous allons stocker notre code.
Créer le client public (optionnel) : il s'agit du client Pimlico paymaster qui sera utilisé pour interagir avec le SimpleSmartAccount :
Créer un compte : il peut s'agir de n'importe quel compte pris en charge par permissionless.js ou de comptes personnalisés conformes à l'interface. Pour cet exemple, nous utiliserons un SimpleSmartAccount.
Créer le client Smart Account avec une logique paymaster personnalisée : lors de la création du smartAccountClient, nous pouvons passer une fonction sponsorUserOperation qui sera appelée avant qu'une opération utilisateur soit signée et envoyée. Cette fonction doit retourner les champs paymasterAndData, preVerificationGas, verificationGasLimit et callGasLimit.
Envoyer une transaction : vous pouvez désormais envoyer des transactions normalement. La fonction sponsorUserOperation sera appelée avant chaque transaction signée et envoyée, appliquant la logique paymaster personnalisée que vous avez définie.
Nous avons configuré un smart account intégré avec une logique paymaster personnalisée en utilisant permissionless.js et le client Pimlico. Cette configuration permet une interaction fluide avec la blockchain tout en automatisant les frais de Gas et la gestion des transactions via le paymaster. À vous de jouer maintenant.
1. Relayers et paymasters de confiance : étant donné que les dapps sans Gas s'appuient sur des relayers ou des paymasters tiers pour gérer les transactions au nom des utilisateurs, il est essentiel de s'assurer que ces entités sont fiables et sécurisées. Un relayer malveillant ou compromis pourrait modifier ou bloquer des transactions. Utilisez des services réputés et mettez en place des mécanismes de secours en cas de défaillance du relayer.
2. Intégrité des transactions : lors de l'utilisation d'un relayer, la transaction peut être signée par le relayer au nom de l'utilisateur. Assurez-vous que le relayer ne modifie pas la transaction de manière malveillante avant de la soumettre à la blockchain. Vérifiez que le smart contract ou la logique confirme que les détails de la transaction (par exemple, l'adresse de destination, la valeur) correspondent à ce que l'utilisateur souhaitait.
3. Sécurité de la logique paymaster : étant donné que le paymaster détermine s'il doit sponsoriser les frais de Gas en fonction d'une logique personnalisée, assurez-vous que cette logique est sécurisée et n'autorise pas des parties non autorisées à exploiter le paymaster pour exécuter des transactions gratuites. Mettez en place des règles et des contrôles robustes pour éviter les abus ou le sponsoring involontaire de transactions.
4. Audits de smart contracts : les dapps sans Gas impliquent souvent des smart contracts complexes pour l'account abstraction ou les meta-transactions. Auditez régulièrement les smart contracts pour détecter les failles de sécurité, car ces contrats gèrent le flux des transactions et les frais. Les vulnérabilités des contrats pourraient conduire à des exploits potentiels où des attaquants manipulent les flux de transactions.
5. Manipulation du prix du Gas : dans une dapp sans Gas, où un paymaster couvre les frais de Gas, des attaquants pourraient tenter de manipuler les prix du Gas pour augmenter les coûts supportés par le paymaster. Intégrez des protections dans la logique du paymaster pour plafonner les frais de Gas et rejeter les opérations excessivement coûteuses.
6. Stockage sécurisé des clés privées : lors de l'utilisation de solutions comme permissionless.js ou Pimlico, assurez-vous que les clés privées utilisées pour signer les transactions sont stockées de manière sécurisée. Ne codez jamais en dur les clés privées dans votre application, et envisagez d'utiliser des environnements sécurisés tels que des hardware wallets ou des enclaves sécurisées pour la gestion des clés.
Les dapps sans Gas constituent une approche innovante pour améliorer l'expérience utilisateur sur les dapps en transférant les frais de Gas à un tiers. En utilisant des standards comme ERC-4337, les développeurs peuvent créer des applications plus flexibles et conviviales qui abaissent les barrières à l'entrée pour les nouveaux utilisateurs.
Les extraits de code fournis montrent comment implémenter des transactions sans Gas en utilisant permissionless.js, les clients Pimlico et une logique paymaster personnalisée. En suivant ces étapes, vous pouvez créer des dapps qui simplifient l'interaction avec la blockchain, la rendant plus accessible à un public plus large. À vous maintenant de construire et d'explorer le potentiel des dapps sans Gas !
Traduit par IA. Peut contenir des erreurs. Veuillez toujours vérifier les informations.