Auteurs : Ash Li, Noah Ho

Source : https://www.spectrumlab.io/zh/reports/erc6551%E7%95%B6nft%E7%A2%B0%E4%B8%8A%E5%90%88%E7%B4%84%E9% 8C%A2%E5%8C%85

Les discussions sur le protocole ERC-6551 s'intensifient progressivement dans la communauté. Ce protocole apporte un énorme potentiel d'expansion à NFT. ERC-6551 crée un portefeuille de contrat unique pour chaque NFT via un compte Token Bond (TBA), lui permettant de détenir des actifs et d'enregistrer les actions associées. Cela crée la possibilité de vérifier l’identité des jetons non fongibles (NFT) et des NFT combinés. En creusant plus profondément, nous pouvons découvrir que l'ERC-6551 fournit en fait un portefeuille entièrement fonctionnel pour les NFT, et que la « clé » de ce portefeuille est le NFT lui-même. Cet article passera en revue l'historique de développement standard de NFT et couvrira les tentatives précédentes d'extension de NFT. Étant donné que le cœur de TBA est le portefeuille de contrats, nous donnerons également une brève introduction au portefeuille de contrats. Enfin, nous plongerons dans les détails de mise en œuvre du protocole et ses applications potentielles.

1. Historique et situation actuelle des normes NFT

En tant qu'actif spécial de crypto-monnaie et d'art numérique, NFT fournit un nouveau support numérique pour les œuvres d'art et étend les scénarios d'application de la technologie blockchain. Contrairement aux jetons fongibles traditionnels, chaque NFT est unique et associé à des métadonnées spécifiques, telles que des œuvres d'art, des accessoires de jeu, de la musique et d'autres matériels électroniques. Par conséquent, NFT peut être utilisé comme certificat de propriété de données électroniques que les personnes peuvent collecter ou échanger. Le 3 mai 2014, l'artiste numérique Kevin McCoy a créé la première œuvre NFT connue « Quantum ». C'est un octogone pixelisé composé de formes variées, rendu de manière psychédélique. Cependant, ce n'est qu'avec l'émergence de l'ERC-721 (Ethereum Request for Comments 721) que NFT disposait véritablement d'une norme unifiée, permettant aux développeurs de l'appliquer facilement dans différents projets.

ERC-721

ERC-721 est étroitement lié à l’histoire du développement de CryptoPunks. CryptoPunks est sorti en 2017 et comprend 10 000 images pixel art uniques de 24 x 24. C’est son succès qui a attiré l’attention des développeurs et de la communauté, permettant à un plus grand nombre de personnes de prendre conscience de l’énorme potentiel du NFT. Depuis, il est devenu le modèle de nombreux projets NFT et a conduit à la formulation de la norme ERC-721. La norme a été fondée par Dieter Shirley, CTO de CryptoKitties. En janvier 2018, William Entriken, Dieter Shirley, Jacob Evans et Nastassia Sachs ont proposé conjointement la norme ERC-721. Cette norme de jeton non fongible implémente l'ABI liée aux jetons dans les contrats intelligents, jetant les bases de la création, de la gestion et du transfert d'actifs numériques uniques sur Ethereum, ouvrant ainsi un nouveau chapitre aux artistes, aux collectionneurs et au marché de l'art numérique.

Les principales caractéristiques de l'ERC-721 sont les suivantes :

  • Unicité : contrairement aux jetons ERC-20 (qui sont fongibles et chaque jeton est identique à tous les autres jetons), chaque jeton ERC-721 est unique.

  • Propriété et transfert : cette norme de jeton permet de déterminer le propriétaire d'un jeton donné et permet au propriétaire ou à la personne approuvée de transférer le jeton.

  • Association de métadonnées : permet d'associer des métadonnées à chaque jeton, qui peuvent inclure une image, une description ou d'autres propriétés pertinentes du jeton.

Pour garantir son statut de norme, l'ERC-721 définit les méthodes et événements clés suivants :

  • Méthodes telles que balanceOf(),ownerOf(), apply(), getApproved(), setApprovalForAll(), isApprovedForAll(), transferFrom() et safeTransferFrom().

  • et des événements tels que Transfer() et Approval().

En bref, la norme ERC-721 fournit un mécanisme pour les actifs uniques sur Ethereum, garantissant l'unicité et la propriété de chaque actif et permettant leur vérification, leur échange et leur gestion. ERC-721, la norme pour les jetons non fongibles, a connu un succès explosif dans les domaines de l'art numérique et des objets de collection. ERC-721 définit de manière importante

Cependant, bien que cela ait amené de nombreux projets célèbres aux applications NFT, il existe encore certaines limitations, telles que le fait qu'ils ne peuvent pas fonctionner en tant qu'agents ou être directement liés à d'autres actifs en chaîne. Afin de résoudre ces problèmes, la communauté a proposé une série d'extensions et de nouveaux standards dont les plus représentatifs sont EIP3664 et EIP3525.

ERC-3664

Dès mai 2021, l'équipe DRepublic a proposé EIP-3664, un protocole d'extension d'attributs NFT. De manière ingénieuse, cette proposition résout les limites des normes NFT traditionnelles telles que ERC-721 ou ERC-1155, telles que l'expressivité insuffisante des attributs, la difficulté d'intégration entre les NFT et le stockage centralisé des attributs.

Plus précisément, EIP-3664 ne nécessite pas de modifications des normes ERC-721 et ERC-1155 existantes. Il ajoute dynamiquement des propriétés au NFT en utilisant la fonction de rappel de l'interface IERC721Receiver ou IERC1155Receiver dans la méthode mint du NFT. Ou cela peut être fait en réécrivant la méthode de casting. Grâce à ce protocole, un NFT peut être associé à n'importe quel nombre d'attributs sans limite.

Dans EIP-3664, tous les attributs implémentent l'interface IERC3664. Les attributs de base incluent plusieurs champs de base tels que l'ID, le nom, le symbole, l'adresse URI, le solde, etc., qui sont utilisés pour décrire les métadonnées du NFT. Avec EIP-3664, les extensions d'attributs NFT deviennent plus flexibles et personnalisables. Il fournit une méthode de mise en œuvre standardisée pour les fonctions d'attribut NFT et s'intègre de manière transparente à l'écosystème NFT existant.

ERC-3525

EIP-3525 introduit les jetons semi-fongibles (SFT), qui peuvent être considérés comme des actifs entre les jetons fongibles (FT) et les jetons non fongibles (NFT). Semblables aux NFT, les jetons SFT peuvent être transférés intacts d’une adresse de portefeuille à une autre. Mais comme FT, SFT permet de transférer seulement une partie de la valeur entre différents jetons. Par exemple, il est possible de transférer seulement une partie de la « vie » d’un terrain vers un autre terrain. Sans aucun doute, SFT surpasse FT en termes de personnalisation et surpasse NFT en efficacité.

ERC3525 permet la construction de structures SFT multi-niveaux, similaires aux poupées matriochka russes, pour réaliser des mondes virtuels plus complexes et définir des règles d'interaction entre différents niveaux. En utilisant ERC3525, NFT peut transporter n'importe quelle monnaie numérique. Cela signifie que les jetons ayant une valeur économique peuvent être intégrés dans NFT pour obtenir des fonctions et des méthodes d'interaction plus riches. Par exemple, un SFT peut contenir un NFT porteur de valeur, et d'autres jetons peuvent être imbriqués dans le NFT. Grâce à ERC3525, les développeurs peuvent définir les règles et la logique de SFT via des contrats intelligents et personnaliser des règles de comportement et des règles de transaction spécifiques. Ces caractéristiques font de l'ERC3525 l'une des normes importantes dans le domaine NFT, offrant aux développeurs et aux parties au projet plus de marge de créativité.

2.ERC-6551

introduire

Afin d'améliorer l'évolutivité et le caractère pratique du NFT, la proposition ERC-6551 vise à donner à chaque NFT les mêmes droits et intérêts que les utilisateurs d'Ethereum. Cela signifie que NFT peut non seulement détenir des actifs, mais également enregistrer l'historique des transactions, augmentant considérablement sa portée d'application. Dans le cadre de cette proposition, les détenteurs de NFT peuvent créer un portefeuille contractuel exclusif appelé TBA (Token Bond Account) pour que leur NFT puisse effectuer diverses opérations sur la chaîne. Ceci est réalisé en définissant un registre unifié - Registry. Ce registre est dédié à l'attribution d'adresses de compte de contrat intelligent uniques et fixes à tous les NFT et à garantir que le contrôle du compte reste entièrement entre les mains du titulaire du NFT. Notamment, cette proposition est entièrement compatible avec les normes ERC-721 ou 1155 existantes sans aucune modification, tout en s'adaptant également à la plupart des infrastructures prenant en charge les comptes Ethereum.

Cette innovation fournit à NFT les mêmes fonctions que les comptes Ethereum, ouvrant ainsi de nombreux nouveaux scénarios d'application pour NFT. Par exemple, des actifs complexes dans la réalité, tels que des personnages de jeux de rôle, des voitures composées de plusieurs pièces, des portefeuilles d'investissement diversifiés et même des cartes de membre, peuvent tous être convertis en formulaires NFT grâce à cette proposition. De plus, cette proposition est non seulement compatible avec toutes les normes d'actifs en chaîne existantes, mais offre également des possibilités d'expansion pour de nouvelles normes d'actifs à l'avenir.

Comme mentionné ci-dessus, ERC-6551 permet la création d'un portefeuille dédié aux interactions en chaîne pour chaque NFT. Ce type de portefeuille est différent des portefeuilles que nous utilisons couramment sur des plateformes telles que Metamask. Il s'agit en fait d'un portefeuille de contrat, qui est un contrat intelligent déployé sur le réseau Ethereum. Avant d’examiner comment il est mis en œuvre, comprenons d’abord les principales différences entre ces deux portefeuilles.

Compte de contrat

Un compte Ethereum est une entité qui détient un solde d’Ethereum (ETH) et peut envoyer des transactions sur le réseau Ethereum. Les comptes peuvent être contrôlés par les utilisateurs ou déployés sous forme de contrats intelligents.

Les comptes dans Ethereum ont 4 champs :

  • nonce : Un compteur permettant d'afficher le nombre de transactions envoyées par le compte externe ou le nombre de contrats créés par le compte de contrats. Chaque compte ne peut exécuter qu'une seule transaction avec un nombre occasionnel donné pour empêcher les attaques par rejeu, qui font référence à la diffusion et à la réexécution d'une transaction signée plusieurs fois.

  • solde : modèle de comptabilité de solde, le nombre de Wei appartenant à cette adresse. Wei est l’unité de mesure d’Ethereum.

  • codeHash : Ce hachage représente le code de compte sur la machine virtuelle Ethereum (EVM). Les comptes de contrat ont programmé des extraits de code qui peuvent effectuer différentes actions. Ce code EVM est exécuté si le compte reçoit un message d'appel. Contrairement aux autres champs du compte, cela ne peut pas être modifié. Tous les extraits de code sont enregistrés sous le hachage correspondant dans la base de données d'état pour une récupération ultérieure. Cette valeur de hachage est appelée codeHash. Pour les comptes externes, le champ codeHash est le hachage de la chaîne vide.

  • storageRoot : hachage de stockage. Merkle Patricia trie un hachage de 256 bits du nœud racine qui a codé le contenu stocké du compte (une carte de valeurs entières de 256 bits) et codé sous forme de trie en tant que carte du hachage Keccak de 256 bits à partir d'un entier de 256 bits clés pour le codage RLP d’une valeur entière de 256 bits. Ce Trie code un hachage du contenu du stockage de ce compte et est vide par défaut.

Il existe deux types de comptes Ethereum : les comptes externes (clés privées gérées par l'utilisateur) et les comptes contractuels.

  1. Comptes externes (EOA) : contrôlés par la clé privée, son codeHash est vide. Ces comptes peuvent envoyer et recevoir des crypto-monnaies et interagir avec des contrats intelligents. Notre portefeuille Metamask couramment utilisé en fait partie.

  2. Compte contractuel (CA) : Il n'y a pas de clé privée et son codeHash n'est pas vide. Il s'agit d'un contrat intelligent déployé sur le réseau Ethereum qui contrôle le portefeuille du contrat via des comptes externes interagissant avec le contrat.

Il existe des portefeuilles de contrat standard en Californie, tels que les portefeuilles abstraits de compte ERC4337, et des portefeuilles de type Native AA, tels que les chaînes ZkSync et StarkNet, dans lesquels il n'y a pas de transactions traditionnelles et tous les comptes sont des comptes de contrat. Actuellement, le portefeuille présente des problèmes de propriété et de droits de signature. Par exemple, la clé privée est difficile à protéger. Les utilisateurs perdront tous leurs actifs s'ils perdent la clé privée. Il existe également des problèmes liés à la petite taille de l'algorithme de signature et aux autorisations. De plus, les frais de traitement ne peuvent être réglés que dans une seule devise via la question de paiement ETH.

Sans modifier la couche de protocole de consensus, cela peut aider Ethereum à évoluer vers l'abstraction des comptes. ERC4337 peut réaliser la mise à niveau de l'abstraction des comptes via des contrats intelligents, depuis le lancement initial de l'ensemble de la transaction jusqu'à son inclusion dans l'ensemble de la blockchain. a été mis à jour et modifié, et UserOperation a été introduit pour décrire la structure des transactions envoyées au nom des utilisateurs. Bundler regroupera les transactions dans ces pools de mémoire pour réduire les coûts de transaction des utilisateurs. Le scénario multi-signes est plus complet pour réaliser une récupération sociale. , etc. Mises à niveau fonctionnelles.

accomplir

Selon la norme ERC-6551, les détenteurs de NFT peuvent déployer un nouveau contrat intelligent, à savoir TBA, sur le réseau Ethereum ou d'autres blockchains prises en charge par EVM en interagissant avec le contrat de registre. La propriété de TBA appartient au détenteur du NFT et changera avec le transfert de NFT. Seul le détenteur du NFT peut contrôler ce TBA. Le code de TBA, ses règles, proviennent de l'appel du Contrat d'Application.

L'illustration suivante montre le fonctionnement de l'ERC-6551 : Supposons qu'un utilisateur soit titulaire d'un NFT et que son compte utilisateur possède deux NFT, le n° 123 du contrat A et le n° 456 du contrat B. Le compte utilisateur interagit avec le registre sans autorisation, c'est-à-dire le contrat de registre, et saisit les informations NFT et l'adresse du contrat pour créer un TBA. Lorsque le compte utilisateur appelle le contrat d'enregistrement, entrez les informations NFT du jeton#123et l'adresse de l'implémentation A (0x321…), et le compte portefeuille de contrat A (0x123…) sera créé. Sa propriété appartient au détenteur du jeton NFT #123, et ses fonctions et règles découlent des dispositions de la mise en œuvre A. Lorsque le compte utilisateur appelle à nouveau le contrat d'enregistrement et modifie le contenu d'entrée, un autre TBA est généré. Mais pour un NFT et un contrat de mise en œuvre spécifiques, il ne peut y avoir qu'un seul TBA correspondant unique.

La création et le comportement de TBA dépendent entièrement du contrat d'enregistrement et du contrat de mise en œuvre. Les règles de ces contrats déterminent les caractéristiques et les fonctions du TBA. EIP-6551 fournit des modèles de code pour ces contrats. Nous approfondirons ces modèles dans les sections suivantes. Cependant, ces modèles ne sont pas les seules options ; leur code détermine la manière dont TBA est déployé et fonctionnellement implémenté. Cela offre aux développeurs un large éventail de possibilités d’extension. Par exemple, un contrat d'enregistrement peut définir quels NFT peuvent être enregistrés à l'aide du contrat d'enregistrement. Le contrat de mise en œuvre peut définir les fonctions et les règles de TBA, telles que la fixation de la limite quotidienne de transactions de TBA ou la spécification des types d'actifs qu'elle peut détenir.

Contrat de mise en œuvre

Tous les TBA créés en enregistrant un contrat peuvent sélectionner le contrat de mise en œuvre qu'ils souhaitent utiliser pour le compte. Le contrat de mise en œuvre enregistre les fonctions et les règles du compte de contrat intelligent. Il doit mettre en œuvre au minimum les fonctions suivantes :

executeCall() : une fonction utilisée pour exécuter toute fonction de contrat intelligent qui interagit avec un contrat externe. Par exemple, pour vendre les actifs inclus dans un compte lié à un NFT, vous devrez peut-être appeler une fonction dans le contrat Uniswap. executeCall vous permet d'effectuer cet appel de fonction au nom de votre compte de contrat intelligent, vous permettant d'acheter, de vendre/d'échanger n'importe quel actif de votre choix.

token() : une fonction d'affichage en lecture seule qui renvoie l'identifiant du NFT propriétaire du compte lié au jeton. Il renvoie l'ID de la chaîne (si le NFT est sur le réseau principal, Polygon, Optimism, etc.), l'adresse du contrat NFT et l'ID du jeton NFT.

Owner() : renvoie l'adresse du propriétaire du NFT qui contrôle le compte lié au token. En suivant l'exemple ci-dessus, il s'agirait de l'adresse du compte utilisateur.

nonce() : renvoie le nonce actuel de ce portefeuille de contrat intelligent. Chaque transaction réussie augmentera le nonce de 1, avec une valeur initiale de 0.

Enfin, bien qu'il ne s'agisse pas d'un appel de fonction, le contrat d'implémentation qui lie le compte au token doit avoir une fonction recevoir() pour pouvoir recevoir l'actif natif (comme l'ETH) directement à son adresse.

Enregistrer le contrat

Ce qui suit est un contrat intelligent de registre écrit en langage Solidity :

Ce code peut montrer que les paramètres requis pour créer un compte pour un certain NFT incluent l'adresse du contrat d'exécution de la mise en œuvre, chainId l'identifiant de la chaîne cible, tokenContract correspondant au contrat auquel appartient le NFT, tokenId correspondant à l'identifiant auquel le NFT appartient. NFT appartient, et la valeur d'obscurcissement est le sel. Pour créer un compte NFT basé sur Fast Dapp Demo, il vous suffit de saisir l'adresse et l'identifiant du contrat NFT, et le reste des champs est généré automatiquement. Les étapes sont relativement simples.

La proposition ERC-6551 est une nouvelle norme de jeton qui constitue une mise à niveau subversive de la norme NFT d'origine qui utilise un registre sans autorisation compatible avec l'ERC-721 NFT existant. Le registre est un contrat intelligent qui sert d'usine et de répertoire pour les TBA. N'importe qui peut créer un TBA pour n'importe quel jeton ERC-721 en appelant une fonction du registre et en payant une somme modique. Le contrat intelligent du registre a deux fonctions :

createAccount : déploie un nouveau compte lié à un jeton pour un NFT ERC-721 donné et une implémentation spécifique.

compte : une fonction d'affichage en lecture seule qui renvoie l'adresse du compte lié au jeton pour un NFT ERC-721 donné, et son implémentation est donnée.

applications potentielles

Depuis l’incident d’Azuki, les NFT à image statique unique sont devenus nettement moins attrayants, entraînant une baisse de la valeur de nombreux projets de premier plan. Cependant, les NFT hautement interactifs et composables pourraient être la clé de la reprise du marché. Des jeux blockchain, de la musique, du DID au métaverse, ces domaines regorgent d'un potentiel infini.

Les NFT sont plus que de simples actifs : ils possèdent également leur propre identité en chaîne et leurs propres propriétés de conteneur, et peuvent interagir avec des applications décentralisées (Dapps). Cela signifie que toutes les interactions avec le NFT sont enregistrées directement sur le NFT lui-même, plutôt que sur le compte de son titulaire. De plus, les NFT étant basés sur des contrats intelligents, leur comportement et leurs interactions peuvent être définis et contrôlés via des règles contractuelles, offrant ainsi flexibilité et sécurité.

Le protocole ERC-6551 a apporté des changements révolutionnaires dans le domaine du NFT, déplaçant l'attention des portefeuilles des utilisateurs vers le NFT lui-même, offrant de nouvelles possibilités de transactions, de jeux, de traçabilité et de gouvernance. Avec le développement ultérieur de NFT, ce protocole nous mènera vers une ère numérique plus personnalisée, interactive et significative.

Considérez les quatre directions d’application potentielles suivantes :

  1. Conditionnement d'actifs : NFT peut servir de conteneur d'actifs, permettant de regrouper et d'échanger plusieurs actifs dans un seul NFT. Par exemple, un album de musique NFT peut contenir plusieurs NFT de chansons, ou une collection d'art NFT peut contenir plusieurs NFT d'œuvres d'art. Cela rend non seulement la collecte plus systématique, mais réduit également les frais de gaz lors des transactions.

  2. Portefeuille d'investissement : NFT peut être utilisé comme outil de gestion d'actifs, permettant aux utilisateurs de stocker et de gérer plusieurs jetons dans un TBA. En outre, les détenteurs de NFT peuvent également autoriser des gestionnaires tiers à effectuer des transactions sur des actifs et définir clairement les autorisations du gestionnaire dans les contrats intelligents pour garantir la sécurité des actifs.

  3. Gestion de l'identité NFT : NFT peut enregistrer toutes ses activités sur la chaîne, ce qui en fait une véritable identité en chaîne. Les utilisateurs peuvent utiliser un seul portefeuille ENS pour se représenter et utiliser différents TBA pour représenter leurs rôles dans différentes communautés ou applications.

  4. NFT modulaires : Un NFT maître peut générer des TBA pour stocker ses NFT composants. Par exemple, dans le jeu, le personnage NFT peut être équipé de divers équipements NFT. Cela rend non seulement la réalisation du Metaverse plus possible, mais peut également être combiné avec l'IA pour créer des personnages PNJ plus réalistes.

Bref, l’avenir du NFT regorge de possibilités infinies. De la gestion des actifs à la vérification d’identité en passant par la conception de jeux modulaires, ils joueront un rôle clé dans le monde numérique.