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 dans les chaînes de blocs publiques et autorisées rend nécessaire leur 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 qui sont liées aux paiements de crypto-monnaie sur des 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 Ethereum Geth dans le proxy REST et en lui permettant d'orchestrer un protocole de validation en deux phases optimisé qui inclut à la fois 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 é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 un workflow atomique, Oracle Blockchain Platform utilise une optimisation de dernière validation de 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 annulé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 être modifié. Vous pouvez utiliser les paramètres finalityParams
pour déterminer s'il faut vérifier la finalité et la durée d'attente, 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 des jetons non fongibles (NFT) 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é un NFT d'Oracle Blockchain Platform vers Ethereum, le NFT peut être répertorié sur un marché NFT public.
Pour transférer un NFT d'Oracle Blockchain Platform vers Ethereum, vous utilisez deux étapes de base dans une transaction atomique :
- 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 appropriée pour votre environnement : - Mentez le NFT sur Ethereum. Appelez un contrat intelligent sur le réseau Ethereum ou Polygon pour connaître 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 écrites en langage Solidity pour les NFT sont disponibles dans le fichier d'archive 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éthodemintNFT
, 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éthodeburnNFT
à l'étape précédente.Pour les demandes non signées, si les propriétés personnalisées figurent dans le paramètreParamKeys
et que les paramètres dynamiques correspondants sont transmis dans le paramètreparams
, l'API des transactions atomiques peut extraire les paramètres de la méthodeburnNFT
et les envoyer au contrat intelligent Ethereum. La méthodemintNFT
accepte les arguments suivants :to
: adresse Ethereum du compte sur lequel le NFT sera extrait.id
: l'ID de jeton du NFT.price
– Le prix du NFT.tokenHistory
: historique du NFT à partir du code chaîne Oracle Blockchain Platform.
Le contrat intelligent exige que l'ID de jeton du NFT soit une chaîne numérique (chaîne pouvant être convertie en nombre entier). Par exemple, un ID de jeton peut être
2
, mais pastoken2
.L'URI de jeton du NFT dans le code chaîne déployé sur Oracle Blockchain Platform doit respecter un certain format pour être compatible avec les contrats intelligents Solidity :- ERC-1155 : URI de tous les types de jeton reposant 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 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'un NFT vers un réseau Ethereum, reportez-vous à Adresses REST de transactions atomiques.