MultiBaasでのOmiseGO Plasmaの始め方

2020/04/27

技術的な詳細を避けて説明する場合は、私たちの OmiseGO Plasmaの概要ブログ記事をご覧ください。

MultiBaasは、Ethereumネットワーク上のスマートコントラクトと対話するためのシンプルなインターフェースを提供しており、OmiseGOのPlasmaネットワーク上での開発も簡素化します。この投稿では、MultiBaasを使用してOmiseGO上でDAppを構築するための出発点として使用できるデモアプリケーションを紹介します。

OmiseGO MultiBaas demo app architecture

MultiBaas omisego-demo-appは、Vue.jsに基づいて構築されており、MultiBaasのブロックチェーンミドルウェアとOmiseGO Plasma子チェーンとの対話のためにカスタムJavaScriptを使用しています。この時点では、トランザクションの作成には、フロントエンドから呼び出されるomg-jsライブラリが必要です。近い将来、MultiBaasはEthereumと同様に、OmiseGO Plasma子チェーントランザクションを直接作成するためのバックエンドサポートを追加します。

MultiBaasはTLS/SSL(HTTPS)を必要とするため、ローカルホストでの開発目的に基本的なHTTP-to-HTTPSプロキシを使用しています。MultiBaas APIキーはプロキシサーバーに存在します。

セットアップ

リポジトリをクローンし、サーバーとウェブディレクトリの両方でyarn installを実行することから始めましょう。アプリケーションを起動する前に、Ropsten Ethereumテストネット上のMultiBaasデプロイメントに接続するために有効なAPIキーを提供する必要があります。この手順は、Ropstenテストネット上にMultiBaasのデプロイメントが設定され、MultiBaasと対話するためのAPIキーが作成されていることを前提としています。無料で始めるための方法については、私たちのMultiBaasブログ記事の紹介をご覧ください。

MultiBaasデプロイメントを設定し、APIキーを作成したら、それらの詳細をserver/config/config.jsonファイルに追加します。ホストフィールドにはMultiBaasデプロイメントのURLを入力し、apiKeyフィールドにはAPIキー作成ページに表示されていたキーを入力します。

サンプルアプリケーションを介してOmiseGOスマートコントラクトと対話する前に、OmiseGOコントラクトをMultiBaasデプロイメント内の適切なRopstenアドレスにリンクする必要があります。スマートコントラクトは、MultiBaasコントラクトページに事前にロードされています。

各コントラクトのデプロイ/リンクページに移動し、それぞれのRopstenアドレスでコントラクトをリンクします。

Erc20Vault: 0x18E15C2cDc003b845B056f8D6b6a91ab33d3F182

EthVault: 0x895Cc6F20D386f5C0deae08B08cCFeC9f821E7D9

PaymentExitGame: 0x08C569c5774110EB84A80B292e6d6f039E18915A

PlasmaFramework: 0x96d5D8bc539694e5fa1ec0dAb0e6327CA9E680F9

Linking the Erc20Vault contract to its Ropsten address

これらの詳細が設定されたら、ターミナルを開いてserverディレクトリ内でyarn startを実行してローカルプロキシサーバーを起動します。

$ yarn start
yarn run v1.21.1
$ node app.js
MultiBaas Proxy Server running at http://127.0.0.1:3000/

アプリケーションのフロントエンドにアクセスするには、別のターミナルでwebディレクトリ内でyarn serveを実行します。後者のコマンドが完了すると、ターミナルウィンドウにフロントエンドにアクセスできるURLが表示されます。デフォルトでは、http://localhost:8080/です。

$ yarn serve
yarn run v1.21.1
$ vue-cli-service serve
 INFO  Starting development server...

  App running at:
  - Local:   http://localhost:8080/
  - Network: http://10.10.0.2:8080/

  Note that the development build is not optimized.
  To create a production build, run yarn build

ウェブブラウザをhttp://localhost:8080/に開いてください(または、ターミナルに表示されるもの)。OmiseGOアプリケーションの上部にRopstenアドレスが表示されていれば、サンプルアプリケーションがMultiBaasデプロイメントに成功裏に接続されたことになります。

The application has successfully connected

OmiseGOのフロー

OmiseGOネットワークにEtherを入金しましょう。入金タブで、Etherセクションを展開し、金額欄に10000000000000000(0.01 Etherに相当)を入力します。入金ボタンを押すと、アプリケーションは指定した引数でethvaultコントラクトの入金メソッドを呼び出すことを望んでいると、あなたのMultiBaasデプロイメントにAPIリクエストを送信します。MultiBaasはリクエストを処理し、未署名のトランザクションを返します。

Ready to deposit Ether

MetaMask(または他のweb3ブラウザ)ポップアップで返されたトランザクションを確認し、確認してください。

Confirm Ether deposit

トランザクションがマイニングされるのを待ちます。マイニングされてから、入金がOmiseGOネットワークに反映されるまでに、Ethereumネットワークでさらに10ブロックがマイニングされるのを待つ必要があります。

Ether deposit transaction has been confirmed

OmiseGOアプリケーションの残高セクションを使用して、入金が成功したことを確認します。

Ether deposit reflected in balance

OmiseGOネットワークにEtherがあるので、他のアドレスに送金しましょう。トランザクションタブで、メソッドを展開し、詳細を入力します。入金した金額の半分を別のアドレスに送金するために、金額欄に5000000000000000を入力します。ドロップダウンで通貨としてEtherを選択します。受取人フィールドに他のEthereumアドレスを入力します。この資金を引き出せるようにするためには、受取人アドレスがあなたがコントロールするものであることを確認してください。オプションとして、メタデータフィールドにテキストを含めることもできます。

Send an Ether transaction on the OmiseGO network

トランザクションボタンをクリックし、MetaMaskウィンドウでトランザクションを確認します。

Confirm the Ether transaction on the OmiseGO network

トランザクションが確認されたら、残高セクションを使って再度トランザクションが成功したことを確認します。新しい残高が反映されるまでには、わずかな遅延があります。

Ether transaction reflected in balance

OmiseGOネットワークで取引を行ったので、残っている資金をEthereumネットワークに引き出しましょう。出金タブに切り替え、メソッドを展開します。いくつかのEtherを使ったため、標準的なエグジットを開始する前にUTXO(未使用トランザクション出力)リストをリフレッシュすることが便利です。UTXO To Exitドロップダウンの右側にあるリフレッシュボタンをクリックし、引き出したいUTXOを選択します。標準的なエグジットを開始するボタンをクリックします。

Withdraw remaining Ether back to Ethereum

MetaMaskウィンドウでは、トランザクションに0.014 Etherの値が含まれていることに気付くでしょう。このEtherは、OmiseGOネットワークのセキュリティを確保するための担保として一時的に保持されています。引き出しは、チャレンジ期間中保留中であり、その間、ネットワーク上の他の当事者が、あなたの引き出しが非標準であると証明できる場合は、引き出しに異議を申し立てることができます。

Confirm Ether withdrawal

トランザクションが確認され、チャレンジ期間が終了したら、plasmaframeworkコントラクトのprocessExitsメソッドを呼び出すことで、OmiseGOネットワークからの引き出しを処理できます。この機能は、OmiseGOサンプルアプリケーションには含まれておらず、読者に演習として残されています。ヒント: MultiBaas内のPlasmaFrameworkコントラクトの契約ページで試してみてください。

エグジットが処理されると、引き出された資金とエグジット担保がEthereumネットワーク上の引き出し先アドレスに戻されます。

上記のプロセスは、ERC-20トークンとも繰り返すことができますが、2つの注意点があります:

  1. erc20vaultコントラクトの入金メソッドを呼び出す前に、ERC-20コントラクトのapproveメソッドを呼び出す必要があります。支出者アドレスはerc20vaultコントラクトのアドレスであり、指定された金額は将来の入金のために承認したい累積金額です。

  2. ERC-20のUTXOを選択した状態でpaymentexitgameコントラクトのstartStandardExitメソッドを呼び出す前に、指定されたERC-20トークンの引き出しキューが作成されていることを確認する必要があります。引き出しキューがすでに存在するかどうかは、plasmaframeworkコントラクトのhasExitQueueメソッドを呼び出すことで確認できます。ethvaultはボールトIDが1で、erc20vaultはボールトIDが2です。ERC-20トークンの引き出しキューが存在しない場合は、plasmaframeworkコントラクトのaddExitQueueメソッドを呼び出すことで作成する必要があります。これは、ERC-20トークンごとに一度だけ行う必要があります。

スマートコントラクトとのすべてのインタラクションと同様に、上記のメソッド呼び出しは、あなたのMultiBaasデプロイメントのウェブUIから、またはMultiBaas APIを介して直接実行できます。

結論

この手順がOmiseGO Plasmaネットワークとのインタラクションと、MultiBaasとOmiseGO PlasmaでDAppを構築する方法を示すのに役立つことを願っています。楽しい開発を!