Aller au contenu

Composooor Snap : un facilitateur de composabilité pour les applications hybrides onchain et offchain

Lauréat du Hackathon ETHDenver

6 min de lecture
Composooor Snap : un facilitateur de composabilité pour les applications hybrides onchain et offchain

MetaMask Snaps est la feuille de route pour faire de MetaMask le wallet le plus extensible au monde. En tant que développeur, vous pouvez intégrer vos fonctionnalités et vos API à MetaMask de manières totalement inédites. Les développeurs Web3 sont au cœur de cette croissance, et cette série vise à mettre en lumière les MetaMask Snaps innovants en cours de développement.

Composooor Snap

Dépôt du Snap : https://github.com/kairos-loan/composooor/tree/main/packages/snap

Pourquoi l'avez-vous développé ?

Au cours de notre expérience dans le développement de protocoles financiers basés sur des smart contracts et d'autres applications blockchain, nous avons remarqué un schéma récurrent. De plus en plus d'applications utilisent des ressources off-chain (comme le calcul ou le stockage de données) dont la validité est vérifiée dans la logique du contrat, en raison des limitations techniques des blockchains. Parmi les exemples, on trouve les carnets d'ordres, les arbres de Merkle pour les airdrops, les listes triées, les attributs de tokens, etc.

Dans chaque cas, des informations précieuses sont stockées ou calculées off-chain, mais peuvent être utilisées et ont un impact important sur les interactions on-chain. Pour rendre cela possible, les contrats utilisent différentes techniques cryptographiques, comme les hachages ou les signatures, pour vérifier la validité. Les dapps nécessitent alors des frontends/APIs avec une logique spécifique capable de fournir les informations pertinentes au contrat. Malheureusement, ce schéma brise la composabilité : par exemple, une application DeFi reposant sur un carnet d'ordres propriétaire hébergé sur AWS ne peut pas être facilement intégrée par un autre smart contract.

Lassés de ces limitations, nous avons décidé de créer un standard et une infrastructure permettant à toutes les applications d'être facilement intégrées dans n'importe quel contexte. Nous sommes convaincus que simplifier à nouveau les intégrations ouvre de nombreuses opportunités pour l'écosystème.

Pouvez-vous nous expliquer l'implémentation technique ?

Introduction

Le snap MetaMask Composooor est utilisé pour standardiser et gérer la communication entre un client web, une ou plusieurs ressources arbitraires off-chain, et un nombre arbitraire de smart contracts implémentant le standard Composooor. Toutes les ressources standard sont facilement accessibles via un package npm qui permet d'utiliser les super-pouvoirs de Composooor en une seule ligne dans la plupart des cas.

Étape par étape

  • Lors de la préparation d'une transaction, notre wallet snap MetaMask effectue une estimation de gas sur le contrat on-chain souhaité.

  • Si le contrat a besoin de données ou de calculs effectués off-chain pour fonctionner, il reviendra avec une erreur standardisée contenant les spécifications permettant de trouver ces données manquantes. L'erreur standardisée ressemble à ceci :

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
Copier

Cette erreur est exposée par le ComposooorRegister que les contrats doivent étendre pour accéder aux ressources off-chain.

  • Le wallet snap MetaMask peut alors décoder cette erreur et trouver les données manquantes, soit en les récupérant sur un protocole décentralisé, soit via une API, soit en exécutant du code récupéré depuis ces sources pour les produire. Pour le hackathon ETHDenver, nous avons implémenté l'option la plus simple, à savoir l'appel API.

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • Le wallet effectue ensuite une nouvelle estimation de gas, cette fois en ajoutant une instruction pour stocker les données récupérées dans le registre standardisé du contrat correspondant, avant d'appeler la méthode souhaitée.

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
Copier
  • Lors de l'exécution de la transaction, le même contrat ou un autre peut avoir besoin d'une autre ressource off-chain pour fonctionner. Le cas échéant, le wallet boucle sur les étapes de préparation de la transaction jusqu'à ce qu'aucune ressource off-chain ne soit plus nécessaire. Cela permet une composabilité infinie entre protocoles accédant à de riches ressources off-chain.

  • Lorsque l'estimation de gas est réussie, l'utilisateur est invité à signer la transaction préparée, pour l'exécuter avec succès en incluant toutes les ressources nécessaires.

À quoi ressemble l'intégration d'une application compatible Composooor / la création de la vôtre.

Lors d'ETHDenver, nous avons montré comment Composooor réduit la complexité du code du schéma habituel d'application hybride d'au moins 80 à 90 %.

Côté smart contract

Importez avec import "@composooor/ComposooorRegister.sol". Exemple d'utilisation :

contract Example is ComposooorRegister {
    function action() public {
        bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
        (uint256 offchainNumber) = abi.decode(data, (uint256));
        (...)
    }
}
Copier

ComposooorRegister est développé en Solidity.

Côté front-end

Le snap Composooor offre le plus grand bénéfice côté front-end : il réduit des intégrations qui nécessitent généralement 200+ lignes de code à… 0 ! La logique du snap gère tout.

Démo

Nous avons réalisé une démo entièrement intégrée sous la forme d'une dapp react-wagmi. Cette dapp permet d'acheter un NFT en ne payant qu'une petite fraction du prix à l'avance et en contractant un prêt à rembourser ultérieurement pour financer le reste. On-chain, pas moins de 8 contrats sont impliqués dans la transaction. Au cœur de celle-ci, la marketplace NFT requiert une signature off-chain du vendeur du NFT. Le snap Composooor est capable de détecter l'erreur, de la décoder et de fournir l'information on-chain (après récupération via une API), malgré la complexité de la transaction. Composooor a rendu cette application bien plus simple à implémenter.

Quelles sont les prochaines étapes si vous deviez implémenter cela ?

Une innovation de cette nature, qui permet aux développeurs de gagner un temps considérable et d'ouvrir de nouveaux cas d'usage blockchain, repose en grande partie sur son adoption. Nous implémenterions et déploierions plusieurs applications destinées aux utilisateurs utilisant le snap Composooor en arrière-plan et fonctionnant avec le snap correspondant. Si ces applications gagnent en popularité, nous établirions des partenariats pour les composer avec d'autres applications, déclenchant ainsi un effet boule de neige alimenté par une expérience de développement simplifiée. Au fil du temps, le snap et le standard évolueraient vers un produit plus général et standardisé, fidèle à la vision initiale : connecter les blockchains de manière synchrone à des ressources arbitraires, de façon agnostique quant à la décentralisation et aux cas d'usage.

Pouvez-vous nous parler un peu de vous et de votre équipe ?

Nous sommes une équipe qui développe un protocole de prêt permettant d'utiliser des NFTs comme garantie, avec une approche plus efficiente en capital. Nous avons opté pour une architecture utilisant des composants off-chain, comme un carnet d'ordres. Ce choix permet d'améliorer l'efficience en capital et l'expérience utilisateur, mais peut limiter l'interopérabilité avec d'autres protocoles. C'est pourquoi nous avons développé le snap Composooor, qui facilite l'intégration avec d'autres protocoles. Nous espérons que cette bibliothèque sera utilisée par d'autres équipes, ouvrant de nouvelles possibilités et simplifiant leur travail.

Quelles opportunités voyez-vous avec MetaMask Snaps et les possibilités qu'il ouvre pour l'écosystème Web3 ?

Les wallets sont l'un des piliers incontournables du Web3, et MetaMask est le wallet par défaut de facto pour la plupart des utilisateurs. Permettre aux développeurs de l'exploiter pour de nouveaux cas d'usage arbitraires me semble crucial. L'essentiel, c'est que nous ne pouvons pas anticiper ni préparer toutes les innovations auxquelles les wallets devront participer. Leur ouvrir un certain accès, c'est un peu comme la transition de Bitcoin à Ethereum : permettre des cas d'usage arbitraires au-dessus de votre technologie génère des retombées positives exponentielles et imprévisibles. Il est donc difficile de répondre à cette question, mais ce qui m'enthousiasme le plus, ce sont les applications qui permettent au wallet de faire bien plus que simplement signer des messages, et qui optimisent les interactions de manière contextuelle et enrichie pour l'utilisateur.

Avez-vous des conseils à partager avec les développeurs souhaitant essayer MetaMask Snaps ?

Utilisez le template fourni, veillez à demander correctement chaque approbation utilisateur nécessaire et limitez-en le nombre au maximum.

Développer avec MetaMask Snaps

Pour démarrer avec MetaMask Snaps :

  1. Consultez la documentation développeur

  2. Installez MetaMask Flask

  3. Consultez un guide MetaMask Snaps

  4. Restez connecté avec nous sur Twitter, les discussions GitHub et Discord

Gardez un œil sur notre équipe lors du prochain hackathon près de chez vous ! Bonne construction ⚒️

Avertissement : Les MetaMask Snaps sont généralement développés par des tiers autres que Consensys Software. L'utilisation de MetaMask Snaps développés par des tiers se fait à votre seule discrétion et à vos propres risques, et implique votre accord selon lequel vous serez seul responsable de toute perte ou dommage résultant de ces activités. Consensys ne donne aucune garantie expresse ou implicite, qu'elle soit orale ou écrite, concernant les MetaMask Snaps développés par des tiers, et décline toute responsabilité pour les Snaps développés par des tiers. L'utilisation de logiciels liés à la blockchain comporte des risques que vous assumez entièrement lors de l'utilisation de MetaMask Snaps.

Traduit par IA. Peut contenir des erreurs. Veuillez toujours vérifier les informations.

Évaluer la traduction

Cet article a été rédigé par :

  • MetaMask

    MetaMask, anciennement Consensys Software Inc, est la plus grande plateforme financière self-custodial au monde, offrant aux utilisateurs un espace unique pour détenir, dépenser, épargner et faire fructifier leur argent, aussi bien en crypto qu'en actifs traditionnels. La société développe la plateforme grand public au sein de laquelle tout cela se concrétise, en réunissant paiements, épargne, investissement et actifs numériques dans une expérience fluide et unifiée. Issu du wallet self-custodial le plus utilisé au monde, MetaMask donne aux utilisateurs un contrôle direct sur leur argent et leurs actifs, avec une présence dans environ 190 pays. MetaMask joue un rôle fondateur dans la croissance d'Ethereum depuis 2016. Aujourd'hui, MetaMask occupe une place centrale dans l'économie blockchain, en construisant le système d'exploitation de l'Open Money et en donnant aux individus un contrôle total sur leur vie financière.

    Lire tous les articles