Ethereum 互通性

您可以在單元交易工作流程中包括以太坊為基礎的交易。

在公共和許可的區塊鏈之間不斷使用公共區塊鏈和代碼化功能,推動了互通性的需求。常見案例包括不同分類帳之間的資產交換、認許制區塊鏈上的業務交易,這些區塊鏈連結至公共鏈上的加密貨幣付款、在公共區塊鏈上發布認許制區塊鏈交易證明等。為了實現這些和其他場景的互通性,Oracle Blockchain Platform 提供與以太坊的互通性,以及支援標準 web3 通訊協定的任何以 EVM 為基礎的網路。互通性功能可在 REST 代理中結合 Geth Ethereum 用戶端,並使其能夠透過稱為 atomicTransactions 的單一 REST API 協調包含 Oracle Blockchain Platform 和 Ethereum/EVM 交易的最佳化雙階段確認協定。您可以使用 atomicTransactions API 傳送多個 Oracle Blockchain Platform 通道的多個鏈碼交易,也可以選擇新增將以 Oracle Blockchain Platform 交易原子方式執行的乙太網路交易。

Oracle Blockchain Platform 交易不同,以太坊交易無法細分為兩階段確認通訊協定的準備和確認階段。為了將 Ethereum 交易納入原子工作流程中,Oracle Blockchain Platform 使用上次資源確認 (LRC) 最佳化。在所有 Oracle Blockchain Platform 交易都處於已準備狀態之後,就會開始進行以太坊交易。如果以太坊交易成功,則會確認 Oracle Blockchain Platform 交易。若以太坊交易失敗,則會回復 Oracle Blockchain Platform 交易。

以太坊交易的概念是最終。Ethereum 交易可成功執行,但要到它是無法變更的區塊的一部分,才能達到最終目的。您可以使用 finalityParams 參數來控制是否以區塊或秒為單位來檢查是否為最終,以及等待的時間長度。一般而言,如果您等待在公用乙太區塊鏈網路 ( Mainnet) 上產生六個區塊,則可以假設已達成交易的最終目標。在專用 Ethereum 網路中,通常您不需要等待冗長才能完成。

將 NFT 傳輸至乙太網路

atomicTransactions API 也支援與部署在乙太網路上的智能合約的互動。您可以使用此功能,透過原子方式呼叫兩個交易,將 Oracle Blockchain Platform 上 Hyperledger Fabric 鏈碼中提示的非可行權杖 (NFT) 傳輸至乙太網路或多邊形網路。NFT 屬性 (例如權杖 ID、價格及權杖歷史記錄) 也可從 Oracle Blockchain Platform 原子傳送至 Ethereum。將 NFT 從 Oracle Blockchain Platform 傳輸至 Ethereum 之後,NFT 即可列在公用 NFT 市場上。

若要將 NFT 從 Oracle Blockchain Platform 傳輸至 Ethereum,請在一次單元交易中使用兩個基本步驟:

  1. Oracle Blockchain Platform 上啟動 NFT。呼叫 burnNFT 方法,從 Oracle Blockchain Platform 上的 Hyperledger Fabric 鏈碼燒錄 (刪除) NFT。Oracle Blockchain Platform 使用 Blockchain App Builder 工具支援增強版 ERC-721 和 ERC-1155 兩種標準的 NFT。如需有關 burnNFT 方法的詳細資訊,請參閱您環境的相關主題:
  2. 在 Ethereum 上鑄造 NFT。使用 burnNFT 方法傳回的參數,呼叫 Ethereum 或 Polygon 網路上的智慧合約來提示該網路上的 NFT。以 Solidity 語言針對 NFT 撰寫的智能合約範例版本可在下列封存檔案中使用: solidity-smartcontracts-fab253.zip 。智慧合約 (針對每個增強型權杖標準 ERC-721 和 ERC-1155) 都包含 mintNFT 方法,此方法會建立具有自訂特性 (例如價格和權杖歷史記錄) 的 NFT,此特性可從上一個步驟的 burnNFT 方法輸出中擷取。
    對於未簽署的要求,如果自訂特性在 ParamKeys 參數中,且對應的動態參數在 params 參數中傳遞,則單元交易 API 可以從 burnNFT 方法擷取參數,然後將它們傳送到乙太智慧合約。mintNFT 方法採用下列引數:
    • to – 提示 NFT 之帳戶的 Ethereum 位址。
    • id – NFT 的記號 ID。
    • price – NFT 的價格。
    • tokenHistory – NFT 從 Oracle Blockchain Platform 鏈碼的歷史。

    智慧型合約要求 NFT 的記號 ID 必須是數值字串 (可轉換為整數的字串)。例如,記號 ID 可以是 2,但不能是 token2

    Oracle Blockchain Platform 上部署之鏈碼中的 NFT 權杖 URI 必須遵循特定格式,才能與 Solidity 智慧合約相容:
    • ERC-1155:依賴 ID 替代之所有記號類型的 URI,例如 https://token-cdn-domain/{id}.json
    • ERC-721:所有記號都共用前置碼 (基礎 URI) 後面接著記號 URI 的 URI,例如 http://api.myproject.example.com/token/<tokenURI>

    您可以使用 Remix IDE 為智能合約產生應用程式二進位介面 (ABI)。然後 ABI 可與 atomicTransactions API 搭配使用。如果您變更智慧合約中的任何方法,則必須重新編譯合約,並再次產生 ABI。

如需有關在單元工作流程中用於乙太網路交易之參數的詳細資訊,包括將 NFT 傳輸至乙太網路的範例,請參閱單元交易 REST 端點