
3/2-4でMicrosoft Ignite 2021が開催されていますね。
Microsoft Meshなど新し戦略的なサービスが展開されていてとてもワクワクしますね。
さて、Blockchainは興味はありましたがどこから手をつけていく?となり、触れていませんでした。今年の1月ににオライリーから「SolidityとEthereumによる実践スマートコントラクト開発」が発売されて読み始めたので今更感はありますがBlockchain入門をしてみようと思い、Azure Blockchain Serviceを動かしてみました。
ここでは以下のことを記載していきます。
・Azure Blockchain Serviceの構築
・簡単なコントラクトの開発とデプロイ
・構築していてBlockchainの分からなかった用語の解説
Azure Blockchain Serviceを構築する
環境構築はとても簡単にできました。フルマネージドサービスのメリットですね。
構造は以下のようになっているようです。Azure Portal上ではこれらのサービスが一つに見えます。

プロトコルは、Quorumのみがサポートされているのでデフォルトのまま、コンソーシアムはプライベートで繋がるときのユニークな名前を指定します(グループみたいなもの?)。あとはメンバーの名称にユニークな名前を指定し、それぞれのパスワードを設定し利用する価格レベルを指定すれば設定は完了です。価格レベルには、ベーシック(開発とテスト用途向け)とスタンダード(本番ワークロード)がありそれぞれノードのコア数と検証ノードの数が違います。以下、構築したときのAzure Portalの画面です。

簡単なコントラクトの開発とデプロイ
Azureの「MetaMask を使用してスマート コントラクトを接続およびデプロイする」を実行してみています。MetaMaskやRemixが、そもそも何をするものか分からなかったので調べたことと設定を中心に書いていきます。
Metamaskとは
ブロックチェーンサービスに接続するためにはクライアントソフトウェアが必要になります。WebだったらChromeなどのブラウザだったりするのですが、ブロックチェーンも様々なクライアントから接続することができます。そのクライアントの一つがMetamaskで、Chrome拡張機能で公開されています。インストールは他のアプリと同じでウェブストアで検索してアプリを選択するだけで簡単にインストールすることができます。
iosとandroidのモバイルアプリもあるようです。今回は、MetaMaskのカスタムRPC接続でAzure Blockchain Serviceに接続していきます。
Azure Blockchain ServiceとMetaMaskを接続する
接続の仕方は、?がついているところでネットワークを切替えができるのですが、そこでカスタムRPCを選択します。ネットワークの追加ができるので、手順に従って登録します。ネットワーク名は自分で識別しやすい名前を、RPC URLはBlockchain Serviceのトランザクションノードの接続文字列を入れます。チェーンIDが何を入れていいか分からなかったのですが、1を入れて実行したら、入力すべき値がメッセージが返却されてきたのでそれを入れたら接続できました。


Remixとは
Remixは、スマートコントラクトの開発環境です。SolidityやYulというのがスマートコントラクトを実装するための開発言語でRemixでコード編集、ビルド、デプロイ、スマートコントラクト実行まで行えます。
Remixを使って、スマートコントラクトの実装、デプロイ、実行を行う
HOME画面は以下のような形になっています。左にメニューが並んでいます。上からファイルエクスプローラ、コンパイル、デプロイみたいな順番で並んでいます。
ファイルエクスプローラではremix上のフォルダやファイルが参照できます。新規にファイルを作ったり、ローカルと接続することも可能です。ここで手順に従って、新しいファイルを作成しコードをコピーします。

次にコンパイラメニューで、ソースコードを選択(タブでコードを表示した状態)するとデフォルトの設定でコンパイルボタンが押せるようになります。対象のソースコードがコンパイルされていないと赤く、コンパイルされると青くなります。コンパイルボタンを押してコンパイルを実行します。

コンパイルされるとファイルエクスプローラのartifactsにメタデータと本体のビルドオブジェクトが配置されました。コンパイルされたファイルはこのような感じです。インターフェイスになる変数や実行内容が変換されて記載されています。

次はDEPLOY & RUN TRANSACTIONSになります。ここでは、ENVIRONMENTでInjected Web3を選択すると自動的にMetamaskと連携し(ACCOUNTが自動的に選択)Deployが選択できるようになります。

Deployを選択すると、Metamaskが起動し以下のような画面が表示されます。こちらで確認を押すと、Azure Blockchain Serviceで作成したブロックチェーンにコントラクトがデプロイされます。

詳細を見ると以下のようになっています。ちゃんとトランザクションは確定されました。

remixに戻り、Deployed ContractsのところにあるSIMPLE AT xxxを選択すると実装したコントラクトのメソッドがあるのでaddを選択するとMetamaks経由でコントラクトが実行されます。

結果

確定後にRemixに戻り、getを選択すると先ほど登録した200が返却されてくるのが分かります。

これで、ブロックチェーンの環境を作りスマートコントラクトの実装、ビルド、デプロイ、実行まで行いました。言葉やツールのイメージがはじめはつかなかったので何がどこで行われているか分からなかったですがすこし歩けるようになった感じがしました。
構築していてBlockchainの分からなかった言葉の解説
プロトコルのQuorumとは
イーサリアムをベースとして開発されたオープンソースの企業向けスマートコントラクト基盤企業向けと言われているのは、プライベートネットワークや許可型でイーサリアムをベースに改善されているためAzure Blockchainサービスでは、QuorumのIstanbul Byzantine Fault Tolerance (IBFT) コンセンサス メカニズムが利用されています。
Istanbul Byzantine Fault Tolerance (IBFT)とは
コンセンサスを取るための実装方式の一つ。
技術的な文書は以下にある。
https://medium.com/getamis/istanbul-bft-ibft-c2758b7fe6ff
コンソーシアムとは
プライベートのグループを作るための識別子がコンソーシアム。メンバーをあとから追加するときは、コンソーシアムを指定して参加をする。
Gasとは
イーサリアムのネットワーク上で処理を実行するための対価
まとめ
はじめてスマートコントラクトの一連の流れを操作してみました。あまりにわかってないことばかりで記事としてどうだろう書きながら感じていましたがこれから勉強してきますのでご容赦ください。Azure Blockchain Serviceのおかげで、ブロックチェーンを試してみるのが非常にやりやすくなっていました。日本語のハンズオンてきな書籍もでてきているので、ぜひこれを機会にチャレンジしてみてはいかがでしょうか。