Interopérabilité d'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 entraîne la nécessité de leur interopérabilité. Les scénarios courants incluent l'échange d'actifs sur différents livres, les transactions commerciales sur les chaînes de blocs autorisées qui sont liées aux paiements de crypto-monnaie sur les chaînes publiques, la publication de la preuve d'une transaction de chaîne de blocs autorisée sur une chaîne de blocs publique, etc. Pour permettre l'interopérabilité de ces scénarios et 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 incorporant le client Geth Ethereum au mandataire REST et en lui permettant d'orchestrer un protocole de validation en deux phases optimisé qui comprend à la fois des transactions Oracle Blockchain Platform et Ethereum/EVM au moyen d'une seule API REST 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 éventuellement 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 optimisation de validation de dernière ressource (LRC). Une fois que toutes les transactions Oracle Blockchain Platform ont 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 s'exécuter 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 s'il faut vérifier 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 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 qui ont été frappés dans le code de chaîne Hyperledger Fabric sur Oracle Blockchain Platform vers un réseau Ethereum ou Polygon, en appelant deux transactions de manière atomique. Les attributs NFT tels que l'ID jeton, le prix et l'historique des jetons peuvent également être transmis d'Oracle Blockchain Platform à Ethereum de manière atomique. Après avoir transféré une transaction NFT d'Oracle Blockchain Platform vers Ethereum, la transaction NFT peut être listée sur un marché NFT public.

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

  1. Burn the NFT sur Oracle Blockchain Platform. Appelez la méthode burnNFT pour graver (supprimer) le NFT à partir du code de chaîne Hyperledger Fabric sur Oracle Blockchain Platform. Oracle Blockchain Platform prend en charge les transactions 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, consultez la rubrique pertinente pour votre environnement :
  2. Mint le NFT sur Ethereum. Appelez un contrat intelligent sur le réseau Ethereum ou Polygon pour extraire le NFT sur ce réseau, en utilisant les paramètres retournés par la méthode burnNFT. Des exemples de versions de contrats intelligents rédigées dans le langage Solidity pour les transactions de transfert de fonds réseau sont disponibles dans le fichier d'archives suivant : solidity-smartcontracts-fab253.zip. Les contrats intelligents, un pour chacune des normes de jeton améliorées ERC-721 et ERC-1155, incluent une méthode mintNFT, qui crée des NFT avec des propriétés personnalisées telles que le prix et l'historique des jetons, 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 des 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 du NFT.
    • price - Le prix de la NFT.
    • tokenHistory - Historique du NFT à partir 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 le rendre compatible avec les contrats intelligents Solidity :
    • ERC-1155 : URI pour tous les types de jeton qui repose sur 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 la base de données autonome.

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 transfert NFT vers un réseau Ethereum, voir Points d'extrémité REST de transactions atomiques.