[前回] Web3.0検証(3)-分散型アプリをTruffleで作ってみる
はじめに
前回は、Truffleフレームワークを使ってローカルに開発環境を構築し、
シンプルなWeb3.0分散型アプリ(DApp)を作成・実行してみました。
今回はブラウザベースの統合開発環境Remixを使ってDAppを検証してみます。
Remixは、簡単にスマートコントラクトの記述言語Solidityを使った開発ができるだけでなく、
MetaMaskとも接続でき、DAppを直接ブロックチェーンのネットワーク上で実行できるようです。
検証シナリオ
Solidityドキュメントのサンプル 投票システム(Voting) を使って検証します。
この投票システムでは、自動かつ公正な電子投票を実現しているようです。
- 投票権を正しい人に渡す
- 投票数カウントの不正操作を防ぐ
検証環境
Web3.0対応ブラウザである Brave を使って検証します。
ご興味ある方は Web3.0検証(1)-Web3.0対応ブラウザに触れてみる もご参照ください。
検証スタート
コントラクトの記述
- Braveから
Remix - Ethereum IDE
にアクセス
https://remix.ethereum.org/ - Remix IDE左上
File explorers
タブをクリック -
Create New File
アイコンをクリック - vote.solを作成
ソースコードは、Solidityドキュメントの投票サンプル「Voting」をそのまま使用しました。
https://solidity-jp.readthedocs.io/ja/latest/solidity-by-example.html#voting
投票システムのアイデア、
- 投票ごとにコントラクトを作り、オプションごとに短い名前をつける
- コントラクトの作成者は管理者として各アドレス(投票者)に投票権を付与
- そのアドレスを持っている人は自分で投票または委任できる
コントラクトのコンパイルとデプロイ
- コンパイル
-
Solidity compiler
タブをクリック -
Compile vote.sol
ボタンをクリック。
- デプロイ
-
Deploy & run transactions
タブをクリック -
ENVIRONMENT
は"JavaScript VM"(ブラウザ上の一時的なブロックチェーン)- "Injected Web3"で、実際MetaMaskに接続し、ブロックチェーンにコントラクトをデプロイできます
- が、イーサ(ETH)の購入が必要なので今回は。。。
-
候補3人の名前をbytes32型配列に変換した結果を入力
-
Deploy
ボタンの右側に入力 - 名前からbytes32値への変換方法は後続
-
["0xe5a4aae9838e0000000000000000000000000000000000000000000000000000","0xe6aca1e9838e0000000000000000000000000000000000000000000000000000","0xe4b889e9838e0000000000000000000000000000000000000000000000000000"]
候補3名:
太郎: 0xe5a4aae9838e0000000000000000000000000000000000000000000000000000
次郎: 0xe6aca1e9838e0000000000000000000000000000000000000000000000000000
三郎: 0xe4b889e9838e0000000000000000000000000000000000000000000000000000
4. Deploy
ボタンをクリックしデプロイ
メタデータ発行成功とのメッセージが、
Deploy結果として、画面の左下に「BALLOT AT アドレス(MEMORY)」が表示されます。
- 先頭の右矢印をクリックし、展開します
- アドレスを控えておきます、以降の操作で使用します
投票操作
投票システムで、以下の操作が行えます。
- 投票を委任(delegate)
- 委任先アドレスを入力
- 投票権を付与(giveRightToVote)
- 付与先アドレスを入力
- 投票(vote)
- 候補番号を入力(1,2,3)
- 管理者(生成者)は1票付与済(コントラクトを生成時)
- 管理者の確認(chairperson)
- 候補の確認(proposals)
- 現在の最高投票数を獲得している候補の確認(winnerName)
- 現在の最高投票数を獲得している候補番号の確認(winningProposal)
候補3名の名前をbytes32型配列に変換する(おまけ)
- コントラクトを作成
candidate.solを作成します。
/// @title convert name to bytes32.
contract Candidate {
function getBytes32ArrayForInput() pure public
returns (bytes32[3] memory b32Arr) {
b32Arr = [bytes32("太郎"), bytes32("次郎"), bytes32("三郎")];
}
}
- Compile、Deploy
画面左下から3名候補それぞれのbytes32値を確認できます。
MetaMaskの登録(おまけ)
MetaMaskとは、ソフトウェアウォレットです。
以下の機能を持っています。
- Ethereum系ブロックチェーンの通貨やNFTを一括で補完・管理
- 秘密鍵の管理
- コントラクトへの署名
- ブラウザ拡張機能版とモバイルアプリ版がある
BraveにMetaMask拡張機能をインストールします。
- すると、開始画面が表示されるので、
開始
をクリック
-
ウォレットを作成
をクリック
「MetaMaskの品質向上へのご協力のお願い」は一旦「結構です」を選びました。
- パスワード設定
シークレットリカバリーフレーズは、大事に保管する必要があります。
- これでMetaMaskに登録できました
おわりに
Remixを使って、簡単に分散型アプリ(DApp)の開発ができそうです。
今後は、DAppでブロックチェーン技術がどのように利用されているか深掘りしてみます。
お楽しみに。