Interopérabilité Ethereum

Vous pouvez inclure des transactions basées sur Ethereum dans un flux de travail de transaction atomique.

L'utilisation croissante des chaînes de blocs publiques et des capacités de segmentation en unités dans les chaînes de blocs publiques et autorisées rend nécessaire leur interopérabilité. Les scénarios courants comprennent l'échange d'actifs entre différents livres, les transactions commerciales sur des chaînes de blocs avec autorisation qui sont liées à des paiements de crypto-monnaie sur des chaînes publiques, la publication de la preuve d'une transaction de chaîne de blocs avec autorisation sur une chaîne de blocs publique, etc. Pour permettre l'interopérabilité pour ces scénarios et pour d'autres, Oracle Blockchain Platform assure l'interopérabilité avec Ethereum et avec tous les réseaux basés sur la gestion de la valeur acquise qui prennent en charge les protocoles web3 standard. La fonction d'interopérabilité fonctionne en intégrant le client Geth Ethereum dans le mandataire REST et en lui permettant d'orchestrer un protocole de validation en deux phases optimisé qui inclut à la fois Oracle Blockchain Platform et les transactions Ethereum/EVM au moyen d'une API REST unique appelée atomicTransactions. Vous pouvez utiliser l'API atomicTransactions pour envoyer plusieurs transactions de code de chaîne pour plusieurs canaux Oracle Blockchain Platform et, facultativement, ajouter une transaction Ethereum qui s'exécutera de manière atomique avec les transactions Oracle Blockchain Platform.

Contrairement aux transactions Oracle Blockchain Platform, les transactions Ethereum ne peuvent pas être décomposées en phases de préparation et de validation du protocole de validation en deux phases. Pour inclure des transactions Ethereum dans un flux de travail atomique, Oracle Blockchain Platform utilise une dernière optimisation de validation de ressource (LRC). Une fois que toutes les transactions Oracle Blockchain Platform sont à l'état préparé, la transaction Ethereum est démarrée. Si la transaction Ethereum réussit, les transactions Oracle Blockchain Platform sont validées. Si la transaction Ethereum échoue, les transactions Oracle Blockchain Platform sont repositionnées.

Les transactions Ethereum ont un concept de finalité. Une transaction Ethereum peut être exécutée avec succès, mais elle n'atteint pas la finalité tant qu'elle ne fait pas partie d'un bloc qui ne peut pas changer. Vous pouvez utiliser les paramètres finalityParams pour contrôler la finalité et la durée d'attente, en blocs ou en secondes. En général, si vous attendez que six blocs soient générés sur le réseau de chaîne de blocs Ethereum public (Mainnet), vous pouvez supposer que la finalité de la transaction a été atteinte. Dans les réseaux Ethereum privés, vous n'avez généralement pas besoin d'attendre aussi longtemps pour la finalité.

Transfert d'un NFT vers un réseau Ethereum

L'API atomicTransactions prend également en charge les interactions avec les contrats intelligents déployés sur les réseaux Ethereum. Vous pouvez utiliser cette fonctionnalité pour transférer des jetons non fongibles (NFT) qui ont été frappés dans le code de chaîne Hyperledger Fabric sur Oracle Blockchain Platform vers un réseau Ethereum ou Polygone, en appelant deux transactions de manière atomique. Les attributs NFT tels que l'ID jeton, le prix et l'historique de jeton peuvent également être transmis atomiquement d'Oracle Blockchain Platform à Ethereum. Après avoir transféré un NFT d'Oracle Blockchain Platform vers Ethereum, le NFT peut être répertorié sur un marché public NFT.

Pour transférer un transfert NFT d'Oracle Blockchain Platform vers Ethereum, vous utilisez deux étapes de base dans une transaction atomique :

  1. Gravez la couche NFT sur Oracle Blockchain Platform. Appelez la méthode burnNFT pour graver (supprimer) le NFT du code de chaîne Hyperledger Fabric sur Oracle Blockchain Platform. Oracle Blockchain Platform prend en charge les NFT dans les versions améliorées de deux normes, ERC-721 et ERC-1155, avec l'outil Blockchain App Builder. Pour plus d'informations sur la méthode burnNFT, voir la rubrique pertinente dans Blockchain App Builder for Oracle Blockchain Platform :
  2. Mentez la NFT sur Ethereum. Appelez un contrat intelligent sur le réseau Ethereum ou Polygon pour extraire le NFT sur ce réseau, à l'aide des paramètres retournés par la méthode burnNFT. Des exemples de versions de contrats intelligents écrits dans le langage Solidity pour les NFT sont disponibles dans le fichier d'archives suivant : solidity-smartcontracts-fab253.zip. Les contrats intelligents, un pour chacun des standards de jeton améliorés ERC-721 et ERC-1155, incluent une méthode mintNFT, qui crée des NFT avec des propriétés personnalisées telles que l'historique de prix et de jeton, qui peuvent être extraites de la sortie de la méthode burnNFT à l'étape précédente.
    Pour les demandes non signées, si les propriétés personnalisées se trouvent dans le paramètre ParamKeys et que les paramètres dynamiques correspondants sont transmis dans le paramètre params, l'API de transactions atomiques peut extraire les paramètres de la méthode burnNFT et les envoyer au contrat intelligent Ethereum. La méthode mintNFT prend les arguments suivants :
    • to – L'adresse Ethereum pour le compte où la NFT sera frappée.
    • id – ID jeton de NFT.
    • price – Le prix de la NFT.
    • tokenHistory – Historique du code NFT du code de chaîne Oracle Blockchain Platform.

    Le contrat intelligent exige que l'ID jeton du NFT soit une chaîne numérique (chaîne pouvant être convertie en nombre entier). Par exemple, un ID jeton peut être 2 mais pas token2.

    L'URI du jeton NFT dans le code de chaîne déployé sur Oracle Blockchain Platform doit respecter un certain format pour être compatible avec les contrats intelligents Solidity :
    • ERC-1155 : URI pour tous les types de jeton qui dépendent de la substitution d'ID, par exemple https://token-cdn-domain/{id}.json.
    • ERC-721 : URI où tous les jetons partagent un préfixe (URI de base) suivi d'un URI de jeton, tel que http://api.myproject.example.com/token/<tokenURI>.

    Vous pouvez utiliser l'IDE Remix pour générer une interface binaire d'application (ABI) pour le contrat intelligent. L'ABI peut ensuite être utilisé avec l'API atomicTransactions. Si vous modifiez une méthode dans le contrat intelligent, vous devez recompiler le contrat et générer à nouveau l'ABI.

Pour plus d'informations sur les paramètres à utiliser pour les transactions Ethereum dans un flux de travail atomique, notamment un exemple de transfert d'un NFT vers un réseau Ethereum, voir Points d'extrémité REST de transactions atomiques.