最近はやりのブロックチェーンを触ってみよう!
ということで、手っ取り早く試せると定評のある「Hyperledger composer」で投票システムを作ってみました。
★★
スクリーンショットを取りながら書くとかなり長くなりそうだったので、
作成編とテスト編の2部構成に分けています。
作成編はこちら → https://qiita.com/sh003/items/8add167b71943aff9e73
なお、Hyperledger composer自体の解説は別の方が書かれているのでここでは割愛します
このサンプルの概要
やりたかったこと
- 候補者A,B,Cの誰かに投票できるシステム
- 投票者は任意に追加できる
- 追加された投票者には投票権(1票)が付与される
- 投票を行うと、投票された票の所有者がA,B,Cいずれかの有権者に変わる
利用したもの
- Hyperledger composer Playground v0.14.0
- Playground?:Hyperledger composerをWEB UIベースのお試し環境で触ってみれるもの(と認識しています)
作成したもの
- model file(.cto)
- 参加者(participant)、資産(Asset)、トランザクションなどを定義するファイル
- script file(.js)
- トランザクション処理の内容を記載するファイル。チェーンコードに相当。
以下、テスト手順
参加者(Participant)の生成
テスト画面を開く
作成編の最後で実施したUpdate処理後に上部のTestタブ
を選択するとチェインコードのテスト実行モードになります。
この時点では、参加者も資産も生成されていないので、画面上にはempty
と表示されます。
候補者の情報を入力
左側のメニューでParticipant > User
を選んだ状態で右上の+ Create New Participant
を選択すると、新しい参加者を生成する画面になります。
今回は候補者「Aさん」を生成します。
- name:A
- type:候補者(candidate)
typeを定義していますが、現時点では特に意味はありません。
候補者の生成
候補者情報を入力後、Create New
ボタンを押すと、Test画面に生成された候補者の情報が表示されます。
同様に候補者B,Cも生成します。
トランザクション実行
投票者生成トランザクションの設定
画面左側下部Submit Transaction
ボタンから、投票者を新しく作成するトランザクションの情報を入力します。
- name:testUser001
投票者の生成
情報入力後、submit
ボタンを押すとトランザクションが実行されます。
トランザクションの実行と同時に、Asset:Vote(この例では1票に相当)が生成されます。
正確には、ユーザ生成のトランザクション(addUser)のチェインコードにAssetを同時生成するように記述しています。
投票者生成トランザクション実施後にParticipant > User
を確認すると、testUser001が増えていることを確認できます。
同様に、testUserを3人生成しました。
次のステップでようやく投票を実施します。
投票先の設定
画面左側下部`Submit Transaction`ボタンから、トランザクション情報入力画面を開き、 上部のプルダウンから`Transaction type : Voting`を選択します。 これにより、JSON dataの表示が投票者と候補者の入力画面に変化します。 上記画面の例では「testUser001がAさんに投票する」という内容を設定しています。投票の実施
投票トランザクションでSubmit
ボタンを押すと、投票が実施されtestUser001の票の所有者(owner)がAさんに変わります。
これらを各ユーザで繰り返し、任意の候補者に投票を実施します。
なお、投票時に誤ったユーザ情報(例ではtestUserXXX)を設定してSubmit
しようとすると、そんなユーザはいませんと怒られます。
まとめ
以上、Hyperledger composerを使ってざっくり投票システムを作成してみました。
サンプルシステムの構成やチェーンコードの内容など、ちゃんと紹介できていない部分もありますが、
こんな感じ
という使用感を掴んでもらえたら幸いです。
参考:トランザクションの確認
左側メニューTRANSACTIONS > All Transactions
から、実行したトランザクションの結果を確認できます。
この例は、上3つが候補者A,B,Cを生成したトランザクションです。
ブロックチェーン上に記録されるトランザクション(と認識しています)