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 autorizados impulsiona a necessidade de sua interoperabilidade. Cenários comuns incluem troca de ativos em diferentes livros contábeis, transações comerciais em blockchains autorizados que estão vinculados a pagamentos de criptomoedas em cadeias públicas, publicação de prova de uma transação blockchain autorizada 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 que ele orquestre 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 workflow atômico, o Oracle Blockchain Platform usa uma última otimização de commit de recurso (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 submetidas a rollback.
As transações Ethereum têm um conceito de finalidade. Uma transação Ethereum pode ser executada com sucesso, mas não alcança 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 privadas Ethereum, 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 que são implantados em redes Ethereum. Você pode usar essa funcionalidade para transferir tokens não fungíveis (NFTs) que foram cunhados no chaincode 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 passados 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 marketplace 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:
- Grave o NFT no Oracle Blockchain Platform. Chame o método
burnNFTpara gravar (excluir) o NFT do chaincode 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 no Blockchain App Builder for Oracle Blockchain Platform: - Mint o NFT em 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 escritas 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étodomintNFT, que cria NFTs com propriedades personalizadas, como histórico de preço e token, que podem ser extraídos da saída do métodoburnNFTna etapa anterior.Para solicitações não assinadas, se as propriedades personalizadas estiverem no parâmetroParamKeyse os parâmetros dinâmicos correspondentes forem passados no parâmetroparams, a API de transações atômicas poderá extrair os parâmetros do métodoburnNFTe enviá-los ao contrato inteligente Ethereum. O métodomintNFTusa os seguintes argumentos:to– O endereço Ethereum para a conta onde o NFT será cunhado.id– O ID do token do NFT.price– O preço do NFT.tokenHistory– O histórico do NFT do código de cadeia do Oracle Blockchain Platform.
O contrato inteligente requer que o ID do token do NFT deve ser uma string numérica (uma string que pode ser convertida em um inteiro). Por exemplo, um ID de token pode ser
2, mas nãotoken2.O URI do token do NFT no chaincode implantado no Oracle Blockchain Platform deve seguir um determinado formato para torná-lo compatível com os contratos inteligentes Solidity:- ERC-1155: Um URI para todos os tipos de token que dependem 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 ABI (Application Binary Interface) para o contrato inteligente. O ABI pode então ser usado com a API
atomicTransactions. Se você alterar qualquer método no contrato inteligente, será necessário 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 fluxo de trabalho atômico, incluindo um exemplo de transferência de uma NFT para uma rede Ethereum, consulte Pontos Finais REST de Transações Atômicas.