Ethereumの相互運用性

Ethereumベースのトランザクションをアトミック・トランザクション・ワークフローに含めることができます。

パブリック・ブロックチェーンとトークン化機能をパブリック・ブロックチェーンと許可型ブロックチェーンの両方で利用できるようになることで、相互運用性が求められます。一般的なシナリオには、異なる元帳間の資産交換、パブリック・チェーンでの暗号通貨支払にリンクされた許可されたブロックチェーン上のビジネス・トランザクション、パブリック・ブロックチェーンでの許可されたブロックチェーン・トランザクションの証明などが含まれます。これらのシナリオやその他のシナリオの相互運用性を実現するために、Oracle Blockchain Platformは、Ethereumおよび標準のweb3プロトコルをサポートするEVMベースのネットワークとの相互運用性を提供します。相互運用性関数は、Geth EthereumクライアントをRESTプロキシに組み込み、Oracle Blockchain PlatformとEthereum/EVMの両方のトランザクションを含む最適化された2フェーズ・コミット・プロトコルを、atomicTransactionsという単一のREST APIを介してオーケストレーションできるようにすることで機能します。atomicTransactions APIを使用すると、複数のOracle Blockchain Platformチャネルに対して複数のチェーンコード・トランザクションを送信でき、オプションで、Oracle Blockchain Platformトランザクションで原子的に実行されるEthereumトランザクションを追加できます。

Oracle Blockchain Platformトランザクションとは異なり、Ethereumトランザクションは、2フェーズ・コミット・プロトコルの準備およびコミット・フェーズに分割できません。Oracle Blockchain Platformでは、アトミック・ワークフローの一部としてEthereumトランザクションを含めるために、最後のリソース・コミット(LRC)最適化を使用します。すべてのOracle Blockchain Platformトランザクションが準備済状態になると、Ethereumトランザクションが開始されます。Ethereumトランザクションが成功すると、Oracle Blockchain Platformトランザクションがコミットされます。Ethereumトランザクションが失敗すると、Oracle Blockchain Platformトランザクションがロールバックされます。

Ethereumトランザクションには、ファイナリティという概念があります。Ethereumトランザクションは正常に実行されますが、変更できないブロックの一部になるまで、最終的なトランザクションは実現されません。finalityParamsパラメータを使用して、ファイナリティをチェックするかどうか、およびその待機時間(ブロック単位または秒単位)を制御できます。通常、パブリックEthereumブロックチェーン・ネットワーク(Mainnet)で6つのブロックが生成されるのを待機すると、トランザクションのファイナリティが達成されたと想定できます。プライベートEthereumネットワークでは、通常、ファイナリティのために長く待つ必要はありません。

EthereumネットワークへのNFTの転送

atomicTransactions APIは、Ethereumネットワークにデプロイされているスマート・コントラクトとの対話もサポートします。この機能を使用すると、2つのトランザクションを原子的に呼び出すことで、Oracle Blockchain PlatformのHyperledger Fabricチェーンコードでミントされた非真菌性トークン(NFT)をEthereumまたはPolygonネットワークに転送できます。トークンID、価格、トークン履歴などのNFT属性は、Oracle Blockchain PlatformからEthereumに原子的に渡すこともできます。Oracle Blockchain PlatformからEthereumにNFTを転送した後、NFTをパブリックNFTマーケットプレイスにリストできます。

NFTをOracle Blockchain PlatformからEthereumに転送するには、1つの原子性トランザクションで2つの基本ステップを使用します:

  1. Oracle Blockchain PlatformでNFTを書き込みます。burnNFTメソッドをコールして、Oracle Blockchain PlatformのHyperledger FabricチェーンコードからNFTを書き込み(削除)します。Oracle Blockchain Platformは、ブロックチェーン・アプリケーション・ビルダー・ツールを使用して、ERC-721およびERC-1155という2つの標準の拡張バージョンでNFTをサポートしています。burnNFTメソッドの詳細は、環境に関連するトピックを参照してください。
  2. EthereumでNFTをミントします。burnNFTメソッドによって返されるパラメータを使用して、EthereumまたはPolygonネットワークでスマート・コントラクトを呼び出して、そのネットワーク上のNFTをミントします。NFTのSolidity言語で記述されたスマート・コントラクトのサンプル・バージョンは、solidity-smartcontracts-fab253.zipのアーカイブ・ファイルにあります。スマート・コントラクトは、拡張されたトークン標準ERC-721およびERC-1155ごとに1つずつ、mintNFTメソッドを含めます。このメソッドは、前のステップのburnNFTメソッドの出力からフェッチできる、価格やトークン履歴などのカスタム・プロパティを持つNFTを作成します。
    署名されていないリクエストの場合、カスタム・プロパティがParamKeysパラメータにあり、対応する動的パラメータがparamsパラメータで渡されると、アトミック・トランザクションAPIはburnNFTメソッドからパラメータをフェッチし、Ethereumスマート・コントラクトに送信できます。mintNFTメソッドには、次の引数があります。
    • to - NFTがミントされるアカウントのEthereumアドレス。
    • ID - NFTのトークンID。
    • price - NFTの価格。
    • tokenHistory - Oracle Blockchain PlatformチェーンコードからのNFTの履歴。

    スマート・コントラクトでは、NFTのトークンIDが数値文字列(整数に変換できる文字列)である必要があります。たとえば、トークンIDには2を指定できますが、token2は使用できません。

    Oracle Blockchain Platformにデプロイされたチェーンコード内のNFTのトークンURIは、特定の形式に従って、Solidityスマート・コントラクトと互換性を持つようにする必要があります:
    • ERC-1155: https://token-cdn-domain/{ID}.jsonなど、ID置換に依存するすべてのトークン・タイプのURI。
    • ERC-721: すべてのトークンが接頭辞(ベースURI)とトークンURI(http://api.myproject.example.com/token/<tokenURI>など)を共有するURI。

    Remix IDEを使用して、スマート・コントラクトのアプリケーション・バイナリ・インタフェース(ABI)を生成できます。その後、ABIをatomicTransactions APIとともに使用できます。スマート・コントラクトの方法を変更した場合は、契約を再コンパイルし、ABIを再生成する必要があります。

NFTをEthereumネットワークに転送する例など、アトミック・ワークフローでEthereumトランザクションに使用するパラメータの詳細は、アトミック・トランザクションのRESTエンドポイントを参照してください。