Interoperabilità di Ethereum
È possibile includere transazioni basate su Ethereum in un flusso di lavoro di transazione atomica.
L'uso crescente delle blockchain pubbliche e delle funzionalità di tokenizzazione su blockchain pubbliche e autorizzate determina la necessità della 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 sulle catene pubbliche, la pubblicazione della prova 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 i protocolli web3 standard. La funzione di interoperabilità funziona incorporando il client Ethereum Geth nel proxy REST e abilitandolo a orchestrare un protocollo di commit a due fasi ottimizzato che include sia le transazioni Oracle Blockchain Platform che Ethereum/EVM tramite un'unica API REST denominata atomicTransactions. Puoi utilizzare l'API atomicTransactions per inviare più transazioni con codice concatenato per più canali di Oracle Blockchain Platform e, facoltativamente, aggiungere una transazione Ethereum che verrà eseguita atomicamente con le transazioni di 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'ottimizzazione dell'ultimo commit delle risorse (LRC). Dopo che tutte le transazioni di Oracle Blockchain Platform sono state preparate, viene avviata la transazione Ethereum. Se la transazione Ethereum riesce, viene eseguito il commit delle transazioni di Oracle Blockchain Platform. Se la transazione Ethereum non riesce, 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 la finalità delle transazioni sia stata raggiunta. Nelle reti private di Ethereum, in genere non è necessario attendere fino alla fine.
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 token non fungibili (NFT) coniati nel codice concatenato Hyperledger Fabric su Oracle Blockchain Platform a una rete Ethereum o Polygon, richiamando due transazioni atomicamente. Gli attributi NFT come l'ID token, il prezzo e la cronologia dei token possono anche essere passati da Oracle Blockchain Platform a Ethereum atomicamente. Dopo aver trasferito un NFT da Oracle Blockchain Platform a Ethereum, NFT può essere elencato in un marketplace NFT pubblico.
Per trasferire un NFT da Oracle Blockchain Platform a Ethereum, è possibile utilizzare due passaggi di base in una transazione atomica:
- Utilizza NFT su Oracle Blockchain Platform. Chiama il metodo
burnNFTper masterizzare (eliminare) 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 pertinente in Blockchain App Builder for Oracle Blockchain Platform: - Mint l'NFT su Ethereum. Chiama uno smart contract sulla rete Ethereum o Polygon per mintare il NFT su quella rete, utilizzando i parametri restituiti dal metodo
burnNFT. Versioni di esempio degli smart contract scritti nel linguaggio Solidity per NFT sono disponibili nel seguente file di archivio: solidity-smartcontracts-fab253.zip. Gli smart contract, uno per ciascuno degli standard di token potenziati ERC-721 ed ERC-1155, includono un metodomintNFT, che crea NFT con proprietà personalizzate come il prezzo e la cronologia dei token, che possono essere recuperati dall'output del metodoburnNFTnel passo precedente.Per le richieste non firmate, se le proprietà personalizzate si trovano nel parametroParamKeyse i corrispondenti parametri dinamici vengono passati nel parametroparams, l'API delle transazioni atomiche può recuperare i parametri dal metodoburnNFTe inviarli allo smart contract di Ethereum. Il metodomintNFTutilizza i seguenti argomenti:to– L'indirizzo Ethereum per l'account in cui verrà coniato il NFT.id: l'ID token di NFT.price– Il prezzo del NFT.tokenHistory: la cronologia di NFT dal codice concatenato di Oracle Blockchain Platform.
Lo smart contract richiede che l'ID token di NFT sia una stringa numerica (una stringa che può essere convertita in un numero intero). Ad esempio, un ID token può essere
2, ma nontoken2.L'URI token di 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 che si basano sulla sostituzione dell'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 token, ad esempio
http://api.myproject.example.com/token/<tokenURI>.
È possibile utilizzare Remix IDE per generare un'interfaccia binaria dell'applicazione (ABI) per lo smart contract. 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.