Ethereumの相互運用性

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

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

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

Ethereumトランザクションには、finalityという概念があります。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に渡すこともできます。NFTをOracle Blockchain PlatformからEthereumに転送した後、NFTをパブリックNFTマーケットプレイスにリストできます。

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

  1. Oracle Blockchain PlatformでNFTを焼きます。burnNFTメソッドをコールして、Oracle Blockchain Platform上のHyperledger FabricチェーンコードからNFTを書き込み(削除)します。Oracle Blockchain Platformは、ブロックチェーン・アプリケーション・ビルダー・ツールを使用して、2つの標準(ERC-721およびERC-1155)の拡張バージョンでNFTをサポートしています。burnNFTメソッドの詳細は、ご使用の環境に関連するトピックを参照してください。
  2. EthereumでNFTをミントします。EthereumまたはPolygonネットワークでスマート・コントラクトをコールし、burnNFTメソッドによって返されたパラメータを使用して、そのネットワーク上の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の価格。
    • tokenHistoryOracle Blockchain PlatformチェーンコードからのNFTの履歴。

    スマート・コントラクトでは、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 (http://api.myproject.example.com/token/<tokenURI>など)を共有するURI。

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

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