VMware Blockchain 1.6 リリース、 Ethereum に対応
VMware Blockchain 1.6 が2022年5月にリリースされスマートコントラクトにDaml とEthereum の両方に対応出来るようになりました。これによりブロックチェーン分野のデファクトスタンダードと言ってよいEthereum 関係の技術を活用したユースケースを利用できるようになります。第四回ではスマートコントラクトとしてのEthereum のユースケースにおいてVMware Blockchain の活用方法を触れていきたいと思います。
スマートコントラクトとしての Ehereum
Ethereum と言えば仮想通貨の有名どころとして実際に保有している方も多いかもしれません。スマートコントラクトとしてのEthereum の実態を見てみると、また違った世界観が広がっていてそこにはしっかりとしたエコシステムが存在しています。そのいくつかを紹介しながら先ずはEthereum とスマートコントラクトの関係をおさらいしてみましょう。
そこで、手っ取り早くEthereum のスマートコントラクトを作成してみましょう。いきなりそんな事言われても・・・と思う方も多いと思いますが、先に述べたエコシステムが存在しており便利なツールが一通り揃っています。簡単なスマートコントラクトのビルドなら Remix を利用すると良いでしょう。もしくは玄人志向であればsolc (ソルク)があり、どちらもsolidity と言うEthereum のスマートコントラクトを開発する際に必要な言語、ビルド環境を提供してくれまます。先ずは下記ゴールイメージを設定して順に作業してみましょう。
<<ゴールイメージ>>
- 簡単なスマートコントラクトを作成、ビルド
- Ethereum のテストネットにコントラクトをデプロイ
- VMware Blockchain との接続を考える
1.簡単なスマートコントラクトを作成、ビルド
スマートコントラクトの作成にはRemix を使用しましょう。これはweb ブラウザ上で完結できるツールです。今回はGoogle chrome を利用します。
https://remix.ethereum.org/
実際にコードを書いてみましょう。左側ツリーで、contracts->artifacts を展開し右クリックして”New File” を選択します。ファイル名は”Greater.sol”、下記のSolibity言語で記述したコードをコピペしましょう。
Greater.sol コード
//////ここから
//SPDX-License-Identifier: Unlicense
pragmasolidity^0.8.0;
contract Greeter {
stringprivate greeting;
constructor(stringmemory _greeting){
greeting = _greeting;
}
function greet()publicviewreturns(stringmemory){
return greeting;
}
function setGreeting(stringmemory _greeting)public{
greeting = _greeting;
}
}
//////ここまで
Solidity はオブジェクト指向言語なので、オブジェクトが作成する際にconstructor() が作成されて、メッセージの送受信をgreet() とsetGreeting() で行います。
ファイルの編集が終わった左側のSoilidity Compiler のボタンを押しましょう。Compile Greeter.sol を押すとコンパイルが自動的にはじまります。一通り完了しましたら同様に左側のボタンでDeploy & run transactionを押下しましょう。画面が切り替わります。
2.Ethereum のテストネットにコントラクトをデプロイ
次にいよいよ上記の空っぽなコントラクトですがデプロイしてみます。このまま下記Web ブラウザ上のオレンジ色の”Deploy” ボタンを押してもデフォルトで用意されているEthereumのテストネット(スマートコントラクトの開発用に開放されているネットワーク)に飛ばされるだけでイマイチ動きが見えません。そこでお使いのWeb ブラウザにウオレットを入れてみましょう。今回は比較的有名どころのMetamask を導入します。google chrome のExtention からMetamask をインストールしましょう。その後、下記の手順を実行するとMetaMaskとRemix がコネクトされます。
・手順
-
Remix のENVIRONMENT をIngected Web3 に変更
-
Remix のACCOUNT をMetaMask で表示されているAccount の番号を選択(この場合 0x2D….8132)
-
Metamask にConnected と表示(緑色の〇印)されることを確認
最後にDeploy ボタンを押します、横のText boxに任意の文字列”Hello”を入力しましょう。
結果はご覧の通り、何かメッセージが出ているようです。実はこの操作はMetaMask上でEthereum のMainnet という本番用のネットワークを指定していたため、上記で作成したコントラクトのトランザクションを実行する際に利用料、いわゆる”ガス代”についての確認事項が表示されています。とりあえず無視してConfirm ボタンを押下しましょう。
ブラウザ上からMetaMask にエラーが出ているのがわかります。平たく言えばウオレットに仮想通貨の残高が無いのでトランザクション費用が払えませんと言っています。Ethereum Mainnet でスマートコントラクトの開発をする際にはテストネットを利用すればこの問題は回避できます。もしくはTruffle、Ganacheを使えばローカルでテストネットを構築できます。
しかしこれらは試験用ですので、商用には向きません。もし企業が自由に自前のコントラクトをデプロイでき、トランザクション費用をコントロールすることができればNFT ビジネスに新しいユースケースを創出することが可能になると思います。そこでようやくVMware Blockchain の出番になります。
3.VMware Blockchain との接続を考える
本blog の第二回でVMware Blockchain はレプリカノードとクライアントノードを提供するとお伝えしました。レプリカノードは最小構成で4台、クライアントノードは1台でこのVMware Blockchain Network を立ち上げることができます。クライアントノードを立ち上げる際にIPアドレスが提供されます。実はこのアドレスをMetaMask の接続先としてRPC 形式で指定すればMetaMask とVMware Blockchain が接続されます。つまりEthereum 向けのインターフェイスを製品として提供しているという事です。
MetaMask の設定画面よりNetwork Name に”VMBC-JP” と命名したネットワークを作成します。New RPC URL にクライアントノードのIPアドレスを設定、Chain IDに関してはVMware Blockchain を Deploy する際に作成するgenesis ファイルにて指定するので、そちらを利用すればOKです。genesis.json を作成する際に、自由にアカウントを設定でき、その際のBalance つまり残高も自由に設定できます。
その後、genesis.jsonに登録されているAccount のプライベートキーを元にユーザを追加すれば完了です。
9.2334 ETHほど残高があることが分かります。なかなの金額かと思われるかもしれませんが、右上がVMBC-JP となっており、上記で作成したプライベートチェーンであることに注意してください。なのでこのETHは対外的な資産価値はありません。Ethererum Mainnet であればちょっとした贅沢ができる金額ですね。
まとめ
VMware Blockchain が簡単にEthereum のスマートコントラクトをDeoloy できることを共有してみました。都合、Metamask を利用してRemix とVMBC-JP なるVMware Blockchain ベースのプライベートネットワークと接続しました。本番環境であるMainnet であればコントラクトをDeploy する際に発生する”ガス代”もVMBC-JP では発生しません。(VMware Blockchain のコンセンサスアルゴリズムは PoW/PoSではないのでこのプロトコルがありません)
本blog では実際のIPアドレスの公開は控えたく思いますが、ご興味ある方は弊社営業までお気軽にご連絡ください。