Interoperabilità Ethereum

È possibile includere transazioni basate su Ethereum in un flusso di lavoro di transazione atomica.

L'uso crescente di blockchain pubbliche e funzionalità di tokenizzazione nelle blockchain pubbliche e autorizzate rende necessaria la loro interoperabilità. Gli scenari comuni includono lo scambio di asset tra diversi libri contabili, le transazioni commerciali su blockchain autorizzate che sono collegate ai pagamenti di criptovaluta su catene pubbliche, la pubblicazione di prove di una transazione blockchain autorizzata su una blockchain pubblica e così via. Per abilitare l'interoperabilità per questi e altri scenari, Oracle Blockchain Platform fornisce l'interoperabilità con Ethereum e con qualsiasi rete basata su EVM che supporta protocolli web3 standard. La funzione di interoperabilità funziona incorporando il client Geth Ethereum nel proxy REST e consentendogli di orchestrare un protocollo di commit a due fasi ottimizzato che include sia transazioni Oracle Blockchain Platform che transazioni Ethereum/EVM tramite una singola API REST chiamata atomicTransactions. È possibile utilizzare l'API atomicTransactions per inviare più transazioni con codice concatenato per più canali Oracle Blockchain Platform e, facoltativamente, aggiungere una transazione Ethereum che verrà eseguita in modo atomico con le transazioni Oracle Blockchain Platform.

A differenza delle transazioni Oracle Blockchain Platform, le transazioni Ethereum non possono essere suddivise nelle fasi di preparazione e commit del protocollo di commit a due fasi. Per includere le transazioni Ethereum come parte di un flusso di lavoro atomico, Oracle Blockchain Platform utilizza un'ultima ottimizzazione LRC (Resource Commit). Dopo che tutte le transazioni di Oracle Blockchain Platform sono state preparate, viene avviata la transazione Ethereum. Se la transazione Ethereum ha esito positivo, viene eseguito il commit delle transazioni Oracle Blockchain Platform. Se la transazione Ethereum fallisce, viene eseguito il rollback delle transazioni Oracle Blockchain Platform.

Le transazioni Ethereum hanno un concetto di finalità. Una transazione Ethereum può essere eseguita con successo ma non raggiunge la finalità fino a quando non fa parte di un blocco che non può cambiare. È possibile utilizzare i parametri finalityParams per controllare se verificare la finalità e il tempo di attesa, in blocchi o in secondi. In genere, se aspetti che vengano generati sei blocchi sulla rete blockchain pubblica di Ethereum (Mainnet), puoi presumere che sia stata raggiunta la finalità della transazione. Nelle reti private di Ethereum, in genere non è necessario attendere tanto tempo per la finalità.

Trasferimento di un NFT a una rete Ethereum

L'API atomicTransactions supporta anche le interazioni con gli smart contract distribuiti sulle reti Ethereum. È possibile utilizzare questa funzionalità per trasferire i token non fungibili (NFT) coniati nel codice concatenato Hyperledger Fabric su Oracle Blockchain Platform a una rete Ethereum o Polygon, richiamando due transazioni atomicamente. Anche gli attributi NFT come l'ID token, il prezzo e la cronologia token possono essere passati da Oracle Blockchain Platform a Ethereum atomicamente. Dopo aver trasferito un NFT da Oracle Blockchain Platform a Ethereum, l'NFT può essere elencato su un marketplace NFT pubblico.

Per trasferire un NFT da Oracle Blockchain Platform a Ethereum, si utilizzano due passaggi di base in una transazione atomica:

  1. Masterizza l'NFT su Oracle Blockchain Platform. Chiamare il metodo burnNFT per masterizzare (eliminare) l'NFT dal codice concatenato Hyperledger Fabric su Oracle Blockchain Platform. Oracle Blockchain Platform supporta NFT in versioni avanzate di due standard: ERC-721 ed ERC-1155, con lo strumento Blockchain App Builder. Per ulteriori informazioni sul metodo burnNFT, vedere l'argomento rilevante per l'ambiente in uso:
  2. Menta l'NFT su Ethereum. Chiama uno smart contract sulla rete Ethereum o Polygon per coniare l'NFT su quella rete, utilizzando i parametri restituiti dal metodo burnNFT. Le versioni di esempio degli smart contract scritte nel linguaggio Solidity per gli NFT sono disponibili nel file di archivio seguente: solidity-smartcontracts-fab253.zip. Gli smart contract, uno per ciascuno degli standard avanzati di token ERC-721 ed ERC-1155, includono un metodo mintNFT, che crea NFT con proprietà personalizzate come il prezzo e la cronologia dei token, che possono essere recuperati dall'output del metodo burnNFT nel passo precedente.
    Per le richieste non firmate, se le proprietà personalizzate si trovano nel parametro ParamKeys e i corrispondenti parametri dinamici vengono passati nel parametro params, l'API delle transazioni atomiche può recuperare i parametri dal metodo burnNFT e inviarli allo smart contract di Ethereum. Il metodo mintNFT accetta i seguenti argomenti:
    • to - L'indirizzo Ethereum per l'account in cui verrà coniato il NFT.
    • id: l'ID del token NFT.
    • price - Il prezzo del NFT.
    • tokenHistory: la cronologia dell'NFT dal codice concatenato Oracle Blockchain Platform.

    Lo smart contract richiede che l'ID token dell'NFT sia una stringa numerica (una stringa che può essere convertita in un numero intero). Ad esempio, un ID token può essere 2 ma non token2.

    L'URI token dell'NFT nel codice concatenato distribuito su Oracle Blockchain Platform deve seguire un determinato formato per renderlo compatibile con gli smart contract Solidity:
    • ERC-1155: URI per tutti i tipi di token basati sulla sostituzione degli ID, ad esempio https://token-cdn-domain/{id}.json.
    • ERC-721: URI in cui tutti i token condividono un prefisso (un URI di base) seguito da un URI di token, ad esempio http://api.myproject.example.com/token/<tokenURI>.

    È possibile utilizzare Remix IDE per generare un'interfaccia binaria di applicazione (ABI) per lo smart contract. L'ABI può quindi essere utilizzato con l'API atomicTransactions. Se si modifica un metodo nello smart contract, è necessario ricompilare il contratto e generare di nuovo l'ABI.

Per ulteriori informazioni sui parametri da utilizzare per le transazioni Ethereum in un flusso di lavoro atomico, incluso un esempio di trasferimento di un NFT a una rete Ethereum, vedere Endpoint REST delle transazioni atomiche.