Interoperabilidade Ethereum

Você pode incluir transações baseadas em Ethereum em um fluxo de trabalho de transação atômica.

O uso crescente de blockchains públicos e recursos de tokenização em blockchains públicos e permitidos impulsiona a necessidade de sua interoperabilidade. Cenários comuns incluem troca de ativos em diferentes livros contábeis, transações comerciais em blockchains com permissão que estão vinculadas a pagamentos de criptomoedas em cadeias públicas, publicação de prova de uma transação blockchain com permissão em um blockchain público e assim por diante. Para permitir a interoperabilidade para esses e outros cenários, o Oracle Blockchain Platform fornece interoperabilidade com Ethereum e com qualquer rede baseada em EVM que suporte protocolos web3 padrão. A função de interoperabilidade funciona incorporando o cliente Geth Ethereum no proxy REST e permitindo orquestrar um protocolo de commit de duas fases otimizado que inclui transações do Oracle Blockchain Platform e Ethereum/EVM por meio de uma única API REST chamada atomicTransactions. Você pode usar a API atomicTransactions para enviar várias transações de chaincode para vários canais do Oracle Blockchain Platform e, opcionalmente, pode adicionar uma transação Ethereum que será executada atomicamente com as transações do Oracle Blockchain Platform.

Ao contrário das transações do Oracle Blockchain Platform, as transações Ethereum não podem ser divididas nas fases de preparação e commit do protocolo de commit de duas fases. Para incluir transações Ethereum como parte de um fluxo de trabalho atômico, o Oracle Blockchain Platform usa uma última otimização de commit de recursos (LRC). Depois que todas as transações do Oracle Blockchain Platform estiverem no estado preparado, a transação Ethereum será iniciada. Se a transação Ethereum for bem-sucedida, as transações do Oracle Blockchain Platform serão confirmadas. Se a transação Ethereum falhar, as transações do Oracle Blockchain Platform serão revertidas.

As transações Ethereum têm um conceito de finalidade. Uma transação Ethereum pode ser executada com sucesso, mas não atinge a finalidade até que seja parte de um bloco que não pode mudar. Você pode usar os parâmetros finalityParams para controlar se deve verificar a finalidade e quanto tempo esperar por ela, em blocos ou em segundos. Normalmente, se você esperar que seis blocos sejam gerados na rede pública de blockchain Ethereum (Mainnet), poderá assumir que a finalidade da transação foi alcançada. Em redes Ethereum privadas, normalmente você não precisa esperar tanto tempo para a finalidade.

Transferindo um NFT para uma rede Ethereum

A API atomicTransactions também suporta interações com contratos inteligentes implantados em redes Ethereum. Você pode usar essa funcionalidade para transferir tokens não fungíveis (NFTs) que foram cunhados no código de cadeia do Hyperledger Fabric no Oracle Blockchain Platform para uma rede Ethereum ou Polygon, chamando duas transações atomicamente. Atributos NFT, como ID do token, preço e histórico do token, também podem ser transmitidos do Oracle Blockchain Platform para o Ethereum atomicamente. Depois de transferir um NFT do Oracle Blockchain Platform para o Ethereum, o NFT pode ser listado em um mercado NFT público.

Para transferir um NFT do Oracle Blockchain Platform para o Ethereum, você usa duas etapas básicas em uma transação atômica:

  1. Grave o NFT no Oracle Blockchain Platform. Chame o método burnNFT para gravar (excluir) o NFT do chaincode do Hyperledger Fabric no Oracle Blockchain Platform. O Oracle Blockchain Platform suporta NFTs em versões aprimoradas de dois padrões, ERC-721 e ERC-1155, com a ferramenta Blockchain App Builder. Para obter mais informações sobre o método burnNFT, consulte o tópico relevante para seu ambiente:
  2. Mint o NFT no Ethereum. Chame um contrato inteligente na rede Ethereum ou Polygon para cunhar o NFT nessa rede, usando os parâmetros retornados pelo método burnNFT. Versões de amostra de contratos inteligentes gravados na linguagem Solidity para NFTs estão disponíveis no seguinte arquivo: solidity-smartcontracts-fab253.zip. Os contratos inteligentes, um para cada um dos padrões de token aprimorados ERC-721 e ERC-1155, incluem um método mintNFT, que cria NFTs com propriedades personalizadas, como histórico de preços e tokens, que podem ser extraídos da saída do método burnNFT na etapa anterior.
    Para solicitações não assinadas, se as propriedades personalizadas estiverem no parâmetro ParamKeys e os parâmetros dinâmicos correspondentes forem informados no parâmetro params, a API de transações atômicas poderá extrair os parâmetros do método burnNFT e enviá-los para o contrato inteligente Ethereum. O método mintNFT usa os seguintes argumentos:
    • to - O endereço Ethereum da conta em que o NFT será cunhado.
    • id - O ID do token do NFT.
    • price - O preço do NFT.
    • tokenHistory - O histórico do NFT do chaincode do Oracle Blockchain Platform.

    O contrato inteligente exige que o ID do token do NFT seja uma string numérica (uma string que pode ser convertida em um número inteiro). Por exemplo, um ID de token pode ser 2, mas não token2.

    O URI do token do NFT no chaincode implantado no Oracle Blockchain Platform deve seguir um determinado formato para torná-lo compatível com contratos inteligentes da Solidity:
    • ERC-1155: Um URI para todos os tipos de token que depende da substituição de ID, como https://token-cdn-domain/{id}.json.
    • ERC-721: Um URI em que todos os tokens compartilham um prefixo (um URI base) seguido por um URI de token, como http://api.myproject.example.com/token/<tokenURI>.

    Você pode usar o Remix IDE para gerar uma interface binária de aplicativos (ABI) para o contrato inteligente. O ABI pode então ser usado com a API atomicTransactions. Se você alterar qualquer método no contrato inteligente, deverá recompilar o contrato e gerar o ABI novamente.

Para obter mais informações sobre os parâmetros a serem usados para transações Ethereum em um workflow atômico, incluindo um exemplo de transferência de um NFT para uma rede Ethereum, consulte Pontos Finais REST de Transações Atômicas.