6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Hyperledger composerで投票システムを作ってみた【作成編】

Last updated at Posted at 2017-10-17

最近はやりのブロックチェーンを触ってみよう!
ということで、手っ取り早く試せると定評のある「Hyperledger composer」で投票システムを作ってみました。

なぜ投票システムかというツッコミは無しで

★★
スクリーンショットを取りながら書くとかなり長くなりそうだったので、
作成編とテスト編の2部構成に分けています。

テスト編はこちら → https://qiita.com/sh003/items/d15afc786417d86b64a6

なお、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)
    • トランザクション処理の内容を記載するファイル。チェーンコードに相当。

以下、作成手順

Hyperledger composer Playgroundの準備

Hyperledger composerにアクセス

スクリーンショット 2017-10-17 9.05.32.png

ローカル環境でHyperledger composerを利用する場合、Install〜を選択しますが、今回はサクッとテストしたいのでTry it Onlineからテスト環境を起動します。

Let's Blockchain!

スクリーンショット 2017-10-17 9.05.44.png

Hyperledger Composer Playgroundへようこそ!

Business Network選択画面

スクリーンショット 2017-10-17 9.05.54.png

この時点でbasic-sample-networkがすでにできています。が、今回は利用しません。
隣のDeploy a new business networkを選択します。

新規Business Networkの作成

スクリーンショット 2017-10-17 9.06.09.png

早速サンプルを作ってみます。

  1. 最上段に任意の名前を入力します
  2. デフォルトではbasic-sample-networkが選択されていますが、今回はempty-business-networkを選択
  3. 画面右下のDeployを選択

ここで選択したempty-business-networkは最低限の権限設定(permissions.acl)のみが用意されたbusiness networkです。
もっと手っ取り早く色々作りたい方は、サンプルがいくつか用意されているので、そちらを利用されると良いかと思います。
(自分はこれから勉強・・・)

新しいBusiness Networkに接続

スクリーンショット 2017-10-17 9.06.17.png

先ほどDeployしたNWが作成されています。
パネル下段のConnect now →から設定を始めます

サンプルシステムのダッシュボード

スクリーンショット 2017-10-17 9.06.24.png

empty-business-networkで作成したため、ほぼ空っぽです。
ここから左側の+ Add a file...を選択して各ファイルを記載していきます。

各ファイルの作成

model fileの作成

スクリーンショット 2017-10-17 9.06.31.png

最上段Model Fileを選択。

スクリーンショット 2017-10-17 9.06.44.png

ブラウザ上でコーディングできます。
文法間違いは随時確認してくれているので、ミスがあると教えてくれます。
(エディタ部分下部のEverything looks good!の部分が変わります)

中身の説明はまた別の機会に...

script fileの作成

スクリーンショット 2017-10-17 9.18.20.png

同様にscript fileも作成。
script fileはJavascriptなので、お好きなエディタでコーディングしましょう

サンプルのソースコードは以下の通りです。

script.js
/**
 * add new user and new vote.
 * @param {org.acme.sample.AddUser} user name
 * @transaction
 */
function addUser(tx) {
  var name = tx.name;
  var factory = getFactory();
  
  // create new Resource(User and Vote)
  var user = factory.newResource('org.acme.sample','User',name);
  user.type = 'voter';
  var vote = factory.newResource('org.acme.sample','Vote',name);
  vote.owner = user;
  
  // add new asset(Vote)
  getAssetRegistry('org.acme.sample.Vote')
    .then(function (assetRegistry) {
      return assetRegistry.add(vote);
  });
  
  // add new participant(User)
  getParticipantRegistry('org.acme.sample.User')
    .then(function (participantRegistry) {
      return participantRegistry.add(user);
  });
  
  return 0;
}

/**
 * voting 
 * @param {org.acme.sample.Voting} candidate 
 * @transaction
 */
function voting(tx) {
  tx.vote.owner = tx.candidate;
  return getAssetRegistry('org.acme.sample.Vote')
    .then(function (assetRegistry) {
      return assetRegistry.update(tx.vote);
  });
}

調べながらなんとなく書いたので、
ちゃんとした書き方をご存知の方がいらっしゃればご指摘ください。。。

Business networkを更新

スクリーンショット 2017-10-17 9.18.25.png

サイドバー上のUpdateからBusiness networkを更新します。
いずれかのファイルにエラーがあるとUpdateボタンが押せない仕様になっているので、文法的には正しい状態でUpdateできるようになっています。


ここまででファイルの作成は完了です。
ここからはテスト編に続きます。

テスト編 → https://qiita.com/sh003/items/d15afc786417d86b64a6

6
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?