Interopérabilité Ethereum

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

L'utilisation croissante des chaînes de blocs publiques et des capacités de création de jetons sur les chaînes de blocs publiques et les chaînes de blocs avec droits d'accès répond au besoin d'interopérabilité. Les scénarios courants incluent l'échange d'actifs entre différents livres, les transactions commerciales sur des chaînes de blocs autorisées liées aux paiements de crypto-monnaie sur les chaînes publiques, la publication de la preuve d'une transaction de blockchain autorisée sur une blockchain publique, etc. Pour permettre l'interopérabilité de ces scénarios et d'autres, Oracle Blockchain Platform fournit l'interopérabilité avec Ethereum et avec tous les réseaux basés sur EVM qui prennent en charge les protocoles web3 standard. La fonction d'interopérabilité fonctionne en intégrant le client Geth Ethereum dans le proxy REST et en lui permettant d'orchestrer un protocole de validation en deux phases optimisé qui inclut les transactions Oracle Blockchain Platform et Ethereum/EVM via une API REST unique appelée atomicTransactions. Vous pouvez utiliser l'API atomicTransactions pour envoyer plusieurs transactions de code chaîne pour plusieurs canaux Oracle Blockchain Platform, et vous pouvez éventuellement ajouter une transaction Ethereum qui sera exécutée 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 le cadre d'un workflow 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 annulées (rollback).

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 déterminer si la finalité doit être vérifiée et combien de temps l'attendre, en blocs ou en secondes. En règle générale, 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é des transactions a été atteinte. Dans les réseaux Ethereum privés, vous n'avez généralement pas besoin d'attendre aussi longtemps que 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 les jetons non fongibles (NFT) qui ont été extraits dans le code chaîne Hyperledger Fabric sur Oracle Blockchain Platform vers un réseau Ethereum ou Polygon, en appelant deux transactions atomiquement. Les attributs NFT tels que l'ID de jeton, le prix et l'historique de jeton peuvent également être transmis de manière atomique d'Oracle Blockchain Platform à Ethereum. Une fois que vous avez transféré une NFT d'Oracle Blockchain Platform vers Ethereum, la NFT peut être répertoriée sur une place de marché NFT publique.

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

  1. Gravez le NFT sur Oracle Blockchain Platform. Appelez la méthode burnNFT pour graver (supprimer) le NFT à partir du code 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, reportez-vous à la rubrique pertinente pour votre environnement :
  2. Mentez le NFT sur Ethereum. Appelez un contrat intelligent sur le réseau Ethereum ou Polygon pour frapper le NFT sur ce réseau, en utilisant les paramètres renvoyé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'archive 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 des prix et 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 figurent 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 accepte les arguments suivants :
    • to - L'adresse Ethereum pour le compte où la NFT sera frappée.
    • id : l'ID de jeton du NFT.
    • price - Le prix du NFT.
    • tokenHistory : historique du NFT du code chaîne Oracle Blockchain Platform.

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

    L'URI de jeton du NFT dans le code chaîne déployé sur Oracle Blockchain Platform doit suivre un certain format pour le rendre compatible avec les contrats intelligents Solidity :
    • ERC-1155 : URI de tous les types de jeton reposant sur la substitution d'ID, tels que 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 workflow atomique, y compris un exemple de transfert d'une NFT vers un réseau Ethereum, reportez-vous à la section Atomic Transactions REST Endpoints.