- pipとvirtualenvをインストールする。
$ apt-get install python-pip python-dev python-virtualenv - virtualenv環境を構築する。
$ mkdir /home/bushidoyasu/tensorflow
$ virtualenv --system-site-packages /home/bushidoyasu/tensorflow - virtualenv環境をアクティベートする。
$ source /home/bushidoyasu/tensorflow/bin/activate - virtualenv環境上でTensorFlowをインストールするために、以下のコマンドを実行する。
$ pip install --upgrade tensorflow - Tensorflowが正常に動作することを確認する。
$ python
以下のプログラムを実行して、「Hello, TensorFlow!」と表示されることを確認する。# Python import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello))
2017年6月29日木曜日
人工知能OSS TensorFlowをインストールしてみる
Googleが提供している人工知能OSSである「TensorFlow」をインストールする。
2017年6月27日火曜日
Ethereumで独自ネットワークをたちあげる
Ethereumで独自のブロックチェーンネットワークを構築するための手順を説明する。
- 内部ネットワーク用のノード情報などを格納するディレクトリを作成する。
$ mkdir /home/bushidoyasu/test_e - ジェネシスブロックを定義したファイルを作成する。ファイル名は「myjenesis.json」とする。
{ "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "nonce": "0x00006d6f7264656e", "difficulty": "0x200", "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x", "gasLimit": "0x2FEFD8", "alloc": { } }
- ブロックチェーン情報を初期化する。
$ geth --datadir /home/bushidoyasu/test_e init /home/bushidoyasu/test_e/genesis.json - Peerを起動する。
$ geth --datadir /home/bushidoyasu/test_e --networkid 15 console
あとは、2人分のアカウントを作成して、送金してみる。
■1人目の作成
> personal.newAccount("bushitya")
INFO [06-26|22:39:33] New wallet appeared url=keystore:///home/bushidoyasu/te… status=Locked
"0xd550f995919d10ca17c40f0ea217038ee4df7580"
■2人目の作成
> personal.newAccount("masako")
"0xf7d4f230533737e67d4489f789b71dd89b784d93"
> INFO [06-26|22:43:49] New wallet appeared url=keystore:///home/bushidoyasu/te… status=Locked
■アカウントの確認
> eth.accounts
["0xd550f995919d10ca17c40f0ea217038ee4df7580", "0xf7d4f230533737e67d4489f789b71dd89b784d93"]
■発掘の開始
※1人目のユーザに報酬が蓄積されていく
> miner.start()
■アカウントのアンロック
※タイムアウト時間は300秒。
> personal.unlockAccount(eth.accounts[0])
Unlock account 0xd550f995919d10ca17c40f0ea217038ee4df7580
Passphrase:
true
■資産の確認
> eth.getBalance(eth.accounts[0])
5000000000000000000
> eth.getBalance(eth.accounts[1])
0
■送金
> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1, "ether")})
■1人目の作成
> personal.newAccount("bushitya")
INFO [06-26|22:39:33] New wallet appeared url=keystore:///home/bushidoyasu/te… status=Locked
"0xd550f995919d10ca17c40f0ea217038ee4df7580"
■2人目の作成
> personal.newAccount("masako")
"0xf7d4f230533737e67d4489f789b71dd89b784d93"
> INFO [06-26|22:43:49] New wallet appeared url=keystore:///home/bushidoyasu/te… status=Locked
■アカウントの確認
> eth.accounts
["0xd550f995919d10ca17c40f0ea217038ee4df7580", "0xf7d4f230533737e67d4489f789b71dd89b784d93"]
■発掘の開始
※1人目のユーザに報酬が蓄積されていく
> miner.start()
■アカウントのアンロック
※タイムアウト時間は300秒。
> personal.unlockAccount(eth.accounts[0])
Unlock account 0xd550f995919d10ca17c40f0ea217038ee4df7580
Passphrase:
true
■資産の確認
> eth.getBalance(eth.accounts[0])
5000000000000000000
> eth.getBalance(eth.accounts[1])
0
■送金
> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1, "ether")})
2017年6月23日金曜日
Ethereumを動かしてみた
ブロックチェーン基盤の1つであるEtheruemを動かしてみる。
- Etheruemの実行基盤として、GethとEthの2種類ある。GethはGO言語で記載されている。EthはC++言語で記載されている。今回はGethのほうを動かす。
- 本番用ネットワークではなく、テスト用のネットワーク(通称:テストネット)につないでみる。
- 構築環境はUbuntu OSを利用する。
- 最初に、必要なパッケージ一式をダウンロードする。
$ apt-get install software-properties-common - レポジトリにEtheruemを追加する。
$ add-apt-repository -y ppa:ethereum/ethereum
$ add-apt-repository -y ppa:ethereum/ethereum-dev - Etheruem資材一式をダウンロードする。
$ apt-get update
$ apt-get install ethereum - データディレクトリを作成する。
$ mkdir /home/bushidoyasu/etheruem_data - テストネットにつないでみる。デーモンではなく、コンソールモードで起動する。
$ geth --networkid "10" --datadir "/home/bushidoyasu/etheruem_data" console
WARN [06-23|21:10:08] No etherbase set and no accounts found as default
INFO [06-23|21:10:08] Starting peer-to-peer node instance=Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1
INFO [06-23|21:10:08] Allocated cache and file handles database=/home/bushidoyasu/etheruem_data/geth/chaindata cache=128 handles=1024
INFO [06-23|21:10:08] Initialised chain configuration config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Metropolis: 9223372036854775807 Engine: ethash}"
INFO [06-23|21:10:08] Disk storage enabled for ethash caches dir=/home/bushidoyasu/etheruem_data/geth/ethash count=3
INFO [06-23|21:10:08] Disk storage enabled for ethash DAGs dir=/root/.ethash count=2
INFO [06-23|21:10:08] Initialising Ethereum protocol versions="[63 62]" network=10
INFO [06-23|21:10:08] Loaded most recent local header number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [06-23|21:10:08] Loaded most recent local full block number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [06-23|21:10:08] Loaded most recent local fast block number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [06-23|21:10:08] Starting P2P networking
INFO [06-23|21:10:11] UDP listener up self=enode://455d82dddebbb30f51d98cdddd674c4c7ea91a74e226f5a7b51f5dc38bc8b1266e33bd55771633f2f20f74fb1c159b0ca13e51bc5bb53e425231c24cd6836071@[::]:30303
INFO [06-23|21:10:11] RLPx listener up self=enode://455d82dddebbb30f51d98cdddd674c4c7ea91a74e226f5a7b51f5dc38bc8b1266e33bd55771633f2f20f74fb1c159b0ca13e51bc5bb53e425231c24cd6836071@[::]:30303
INFO [06-23|21:10:11] IPC endpoint opened: /home/bushidoyasu/etheruem_data/geth.ipc
Welcome to the Geth JavaScript console!
instance: Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
>
上記でノードが立ち上がった。 - アカウントの作成してみる。
> personal.newAccount("bushitya")
"0x9dff1a413f42870453f2d2bb9c105cdd0108897b"
INFO [06-23|21:14:19] New wallet appeared url=keystore:///home/bushidoyasu/et… status=Locked
>
> eth.accounts
["0x9dff1a413f42870453f2d2bb9c105cdd0108897b"] - さっそく、発掘してみる。
> miner.start()
INFO [06-23|21:15:38] Updated mining threads threads=0
INFO [06-23|21:15:38] Transaction pool price threshold updated price=18000000000
・・・ - しばらく放置して、自分のアカウントにEtheコインがふえているかを確認する。
> eth.getBalance("0x9dff1a413f42870453f2d2bb9c105cdd0108897b")
0
0コイン。。。テストネットといえど、発掘の道は厳しい。。。。。。
2017年6月18日日曜日
Dashingをつかってみた
簡単にダッシュボード画面を作成できるフレームワーク「Dashing」を使ってみる。
Rubyで実装されている。
Rubyで実装されている。
- Rubyをインストールする。
$ apt-get install ruby ruby-dev ruby-bundler - gemコマンドを実行し、Dashingをインストールする。
$ gem install dashing - サンプルプロジェクト「sample-dashboard」を作成する。
$ dashing new sample-dashboard - bundleコマンドを実行する。
$ cd sample-dashboard/
$ bundle - dashingサービスを起動する。
$ dashing start
http://localhost:3030 にアクセスし、以下のサンプルのダッシュボード画面が表示されることを確認する。10分ぐらいで動かせた。
2017年6月17日土曜日
FTPサーバを立ち上げる
vsftpdというOSSを使ってFTPサーバを立ち上げる。
- vsftpdをインストールする。
$ apt-get update
$ apt-get install vsftpd - /etc/vsftpd.confを開き、以下を変更する。
listen=NO
↓
listen=YES
write_enable=NO
↓
write_enable=YES
listen_ipv6=YESをコメントアウトする。 - vsftpdサービスを再起動する。
$ service vsftpd restart - ftpコマンドを実行できることを確認する。
$ ftp localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:bushidoyasu): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Grafanaを使ってみた
Grafanaで簡単にダッシュボードを作ってみる。
以上でインストールは完了。
- 必要なパッケージをダウンロードする。
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.3.1_amd64.deb
$ sudo apt-get install -y adduser libfontconfig
$ sudo dpkg -i grafana_4.3.1_amd64.deb - 「/etc/apt/sources.list」に以下を追記する。
deb https://packagecloud.io/grafana/stable/debian/ jessie main
- Package Could Keyをインストールする。
curl https://packagecloud.io/gpg.key | sudo apt-key add -
- Grafanaをインストールする。
sudo apt-get update sudo apt-get install grafana
- Grafanaサーバを起動する。
sudo service grafana-server start
以下のURLでアクセスし、ログイン画面が表示されることを確認する。
また、admin/adminでログインできることを確認する。
http://localhost:3000/login
Grafanaが利用するデータソースとしては「MySQL」を利用することにする。
以下の手順でMySQLをインストールする。
$ sudo apt install mysql-server mysql-client
mysql -u root -p でログインできることを確認する。
セキュリティ設定を行う場合は以下を実行する。
$ sudo mysql_secure_installation
mysql -u root -p でログインできることを確認する。
セキュリティ設定を行う場合は以下を実行する。
$ sudo mysql_secure_installation
アクセスするユーザをあらかじめ作成しておく。
mysql>CREATE USER loginuser2@localhost IDENTIFIED BY '***';
Grafana用のDBを作成する。
mysql> create database grafanadb;
ユーザに対してDB操作の権限を付与する。
mysql> GRANT ALL ON grafanadb.* TO loginuser2@localhost IDENTIFIED BY '***';
Grafanaにログインしたら、「Add data source」を押す。
以下のように設定し、「Add」ボタンを押す。
「New dashbord」ボタンを押して、好きなコンテンツを追加していく。
あとはやりたい放題だ。
2017年6月16日金曜日
Hyperledger Fabric Client SDK ( node) が提供しているRESTを使ってみる
Hyperledger Fabric Client SDK ( node) β版では、REST APIのサンプルを提供している。さっそく使ってみる。
■jimというユーザでログイン
- node、npm 、gulpをインストールする。
$ apt-get install build-essential libssl-dev
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
$ . ~/.profile
$ nvm install 6.9.5
$ node -v
v6.9.5
$ npm -v
3.10.10
$ npm install -g gulp
$ gulp -v
[00:52:30] CLI version 3.9.1 - β版のソース一式をダウンロードする。
$ git clone -b v1.0.0-beta https://github.com/hyperledger/fabric-sdk-node.git - 必要なパッケージをインストールする。
$ cd fabric-sdk-node/examples/balance-transfer/
$ sudo npm install - 付属のDocker-compose.yamlを使って、必要なDockerイメージをダウンロードする。
$ docker-compose -f artifacts/docker-compose.yaml pull - 別のターミナル端末を起動し、RESTサービスを起動する。
$ cd fabric-sdk-node/examples/balance-transfer
$ sudo ./runApp.sh
起動途中で以下のエラーが発生した。
■エラー内容①
7357 verbose stack Error: grpc@1.2.4 install: `node-pre-gyp install --fallback-to-build`
その場合は、以下のコマンドを実行してトライしてみる。
$ sudo npm install -g @google-cloud/functions-emulator
<参考>
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/107
■エラー内容②
Error: Cannot find module '/root/fabric-sdk-node/examples/balance-transfer/node_modules/grpc/src/node/extension_binary/grpc_node.node'
上記のエラーがでた場合は、いったんリビルドをする。
$ sudo npm rebuild
以上でセットアップは完了。
実際にREST APIを呼び出してみる。
$ curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=org1'
{"success":true,"secret":"WVjrlkvYHDnw","message":"Jim enrolled Successfully","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A"}
HTTP応答レスポンスにトークンが含まれる(赤色箇所)。
以降の操作では、このトークンをヘッダに含める。
■チャネルの作成
$ curl -s -X POST \
http://localhost:4000/channels \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
-H "content-type: application/json" \
-d '{
"channelName":"mychannel",
"channelConfigPath":"../artifacts/channel/mychannel.tx"
}'
{"success":true,"message":"Channel 'mychannel' created Successfully"}
■チャネルへのPeerの追加
$ curl -s -X POST http://localhost:4000/channels/mychannel/peers -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" -H "content-type: application/json" -d '{"peer
s": ["localhost:7051","localhost:7056"]}'
{"success":true,"message":"Successfully joined peers in organization org1 to the channel 'mychannel'"}
■チェーンコードのインストール
$curl -s -X POST \
http://localhost:4000/chaincodes \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" \
-H "content-type: application/json" \
-d '{"peers": ["localhost:7051","localhost:7056"],"chaincodeName":"mycc","chaincodePath":"github.com/example_cc","chaincodeVersion":"v0"}'
Successfully Installed chaincode on organization org1root
■チェーンコードのイニシエイト
$ curl -s -X POST http://localhost:4000/channels/mychannel/chaincodes -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" -H "content-type: application/json" -d '{"peers": ["localhost:7051"],"chaincodeName":"mycc","chaincodeVersion":"v0","functionName":"init","args":["a","100","b","200"]}'
Chaincode Instantiateion is SUCCESS'
■チェーンコードのINVOKE
$ curl -s -X POST \
http://localhost:4000/channels/mychannel/chaincodes/mycc \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" \
-H "content-type: application/json" \
-d '{"peers": ["localhost:7051", "localhost:7056"],"fcn":"invoke","args":["move","a","b","10"]}'
b3e514c0e13e55adcd32525a955dc684fae9857f177c6977164c0d6d24bd1d65
■チェーンコードのQuery
$ curl -s -X GET \
"http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&args=%5B%22query%22%2C%22a%22%5D" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" \
-H "content-type: application/json"
User b now has 90 after the move
■ブロックチェーン情報の取得
$ curl -s -X GET \
"http://localhost:4000/channels/mychannel?peer=peer1" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" \
-H "content-type: application/json"
{"height":{"low":3,"high":0,"unsigned":true},"currentBlockHash":{"buffer":{"type":"Buffer","data":[8,3,18,32,238,74,52,185,78,207,197,24,251,103,242,39,149,43,68,78,203,29,98,6,212,199,91,181,66,242,181,26,41,251,254,183,26,32,103,135,106,238,68,1,243,164,59,180,96,123,114,148,65,25,148,216,71,229,31,37,60,207,244,85,206,92,237,33,53,8]},"offset":4,"markedOffset":-1,"limit":36,"littleEndian":true,"noAssert":false},"previousBlockHash":{"buffer":{"type":"Buffer","data":[8,3,18,32,238,74,52,185,78,207,197,24,251,103,242,39,149,43,68,78,203,29,98,6,212,199,91,181,66,242,181,26,41,251,254,183,26,32,103,135,106,238,68,1,243,164,59,180,96,123,114,148,65,25,148,216,71,229,31,37,60,207,244,85,206,92,237,33,53,8]},"offset":38,"markedOffset":-1,"limit":70,"littleEndian":true,"noAssert":false}}
■ブロック情報の取得
$curl -s -X GET \
"http://localhost:4000/channels/mychannel/blocks/2?peer=peer1" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTc2NTQzMzIsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTc2MTgzMzJ9.If05JN4VdqqcOU4rr_0FhuP6ppPcm7xRMJvFrQp9u1A" \
-H "content-type: application/json"
{"header":{"number":{"low":2,"high":0,"unsigned":true},"previous_hash":"67876aee4401f3a43bb4607b7294411994d847e51f253ccff455ce5ced213508","data_hash":"7f82a6cb269ffce48cf318a880a75afb2d85d41b4ef3ab9b7eab92c180c78465"},"data":{"data":[{"signature":{"type":"Buffer","data":[48,68,2,32,60,157,40,51,123,55,4,182,68,132,218,122,141,74,117,54,8,49,117,25,248,64,128,89,210,108,219,12,145,54,25,128,2,32,93,50,247,22,170,72,137,21,57,103,217,212,174,121,149,9,159,19,223,255,244,190,252,47,228,47,148,54,71,85,46,190]},"payload":{"header":{"channel_header":{"type":"ENDORSER_TRANSACTION","version":3,"timestamp":"Fri Jun 16 2017 22:27:22 GMT+0900 (JST)","channel_id":"mychannel","tx_id":"b3e514c0e13e55adcd32525a955dc684fae9857f177c6977164c0d6d24bd1d65","epoch":0,"extension":{"type":"Buffer","data":[18,6,18,4,109,121,99,99]}},"signature_header":{"creator":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN CERTIFICATE-----\nMIIB7zCCAZWgAwIBAgIUNLc4T4ZCmXhsM1Fgooi4FMSFNe4wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjE2MTMwMTAwWhcNMTgwNjE2MTMw\nMTAwWjAOMQwwCgYDVQQDEwNKaW0wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARg\nwqB1kG2Bn5yrMRqQN59KHOI2O1G8xSy14sRE6Ls2a6opRo7OE90jTESuvFge/TJq\nG3GzApIEDk7Sf/cVhwjgo2wwajAOBgNVHQ8BAf8EBAMCAgQwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUlF6Ndc38jvQfZqoiLKTRSsPZHIIwKwYDVR0jBCQwIoAgsKWn\nPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYIKoZIzj0EAwIDSAAwRQIh\nAMJilFPdkTsGYYXyRrqKqC69OIIrVdERhUm+DuJNKnGiAiASZWwVxHQCM+zniuKz\nfka8oLlP5qPeefBKW8CruV1Rzg==\n-----END CERTIFICATE-----\n"},"nonce":{"type":"Buffer","data":[162,94,185,37,84,27,79,1,97,219,219,180,254,64,132,36,90,229,28,126,139,36,11,14]}}},"data":{"actions":[{"header":{"creator":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN CERTIFICATE-----\nMIIB7zCCAZWgAwIBAgIUNLc4T4ZCmXhsM1Fgooi4FMSFNe4wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjE2MTMwMTAwWhcNMTgwNjE2MTMw\nMTAwWjAOMQwwCgYDVQQDEwNKaW0wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARg\nwqB1kG2Bn5yrMRqQN59KHOI2O1G8xSy14sRE6Ls2a6opRo7OE90jTESuvFge/TJq\nG3GzApIEDk7Sf/cVhwjgo2wwajAOBgNVHQ8BAf8EBAMCAgQwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUlF6Ndc38jvQfZqoiLKTRSsPZHIIwKwYDVR0jBCQwIoAgsKWn\nPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYIKoZIzj0EAwIDSAAwRQIh\nAMJilFPdkTsGYYXyRrqKqC69OIIrVdERhUm+DuJNKnGiAiASZWwVxHQCM+zniuKz\nfka8oLlP5qPeefBKW8CruV1Rzg==\n-----END CERTIFICATE-----\n"},"nonce":{"type":"Buffer","data":[162,94,185,37,84,27,79,1,97,219,219,180,254,64,132,36,90,229,28,126,139,36,11,14]}},"payload":{"chaincode_proposal_payload":{"input":"\n$\b\u0001\u0012\u0006\u0012\u0004mycc\u001a\u0018\n\u0006invoke\n\u0004move\n\u0001a\n\u0001b\n\u000210"},"action":{"proposal_response_payload":{"proposal_hash":"b07d7721b74f5e0ad948648c514797e395b9cf53a9bc56d3dd5f397ec01fa1ed","extension":{"results":{"data_model":0,"ns_rwset":[{"namespace":"lscc","rwset":{"reads":[{"key":"mycc","version":{"block_num":{"low":1,"high":0,"unsigned":true},"tx_num":{"low":0,"high":0,"unsigned":true}}}],"range_queries_info":[],"writes":[]}},{"namespace":"mycc","rwset":{"reads":[{"key":"a","version":{"block_num":{"low":1,"high":0,"unsigned":true},"tx_num":{"low":0,"high":0,"unsigned":true}}},{"key":"b","version":{"block_num":{"low":1,"high":0,"unsigned":true},"tx_num":{"low":0,"high":0,"unsigned":true}}}],"range_queries_info":[],"writes":[{"key":"a","is_delete":false,"value":"90"},{"key":"b","is_delete":false,"value":"210"}]}}]},"events":{"chaincode_id":"","tx_id":"","event_name":"","payload":{"type":"Buffer","data":[]}},"response":{"status":200,"message":"","payload":""}}},"endorsements":[{"endorser":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN -----\nMIICWjCCAgGgAwIBAgIRAPGLVnARPOpXbAd4X38Sg60wCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2\nWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ\nMBMGByqGSM49AgEGCCqGSM49AwEHA0IABP68ne3e/ND5mJbQBgD/uFJai+6pND7p\nsucoOuQh7onYKt7YGafxUPTleAIdtM0BXUpvfcG8T612Qe0wOz/+VbyjgY0wgYow\nDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC\nMAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw\nKAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIFcGVlcjAwCgYIKoZI\nzj0EAwIDRwAwRAIgbQiRzF3Y1NKEHOy809ZHLLj8KS535l4p5W9kWBUjr/0CICYs\ny2MGqiWbH8EV/J3viNR25QL8yniybnfdCGrJKZWy\n-----END -----\n"},"signature":{"type":"Buffer","data":[48,68,2,32,1,214,86,206,84,180,130,208,63,161,245,73,165,182,182,133,11,5,217,95,157,252,81,75,132,145,31,96,167,113,147,198,2,32,96,251,10,164,122,252,80,205,32,214,85,249,233,160,133,62,68,47,130,82,206,168,3,44,164,38,68,183,82,73,232,33]}},{"endorser":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN -----\nMIICWjCCAgGgAwIBAgIRAPxYG1oPao/E8U8Lyvr5U3MwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2\nWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ\nMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOtQO5PNelHBjyYXsP1J9r3d6qv/xMpX\n70w5g/wRFTzdDU78sVsOmiEShPIU7Klf3sv7nhwcqHapgly/n5AnjqqjgY0wgYow\nDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC\nMAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw\nKAYDVR0RBCEwH4IWcGVlcjEub3JnMS5leGFtcGxlLmNvbYIFcGVlcjEwCgYIKoZI\nzj0EAwIDRwAwRAIgJ0/jdJFdQSHEG/mY1xhefSur0kOqomwT85Ngvxjk2UQCIBBF\ndjbzrCMPYOUHxLMJ94gXIpKgE3ReHec1fCBcsty7\n-----END -----\n"},"signature":{"type":"Buffer","data":[48,69,2,33,0,179,53,0,99,27,119,155,180,132,240,15,64,4,1,169,166,234,22,27,66,97,167,13,140,57,123,118,170,178,213,117,55,2,32,8,251,185,112,243,125,30,245,236,167,153,254,58,106,137,165,249,191,160,217,77,110,219,108,33,3,144,49,143,81,71,42]}}]}}}]}}}]},"metadata":{"metadata":[{"value":"","signatures":[{"signature_header":{"creator":{"Mspid":"OrdererMSP","IdBytes":"-----BEGIN -----\nMIICTTCCAfOgAwIBAgIRAPgOpt3+Nfk+01sMdz6kzN4wCgYIKoZIzj0EAwIwaTEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt\ncGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMFgxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp\nc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI\nKoZIzj0DAQcDQgAENf3ZkpKtXwTy9erYtMCBYeeSU/4u996yTkzYABFRjJUCPHJF\nLBZjSf2RSLZ8dlEN9FlP6amXuMy6ESmlJr/5eqOBjDCBiTAOBgNVHQ8BAf8EBAMC\nBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAi\ngCDKy+d5gMYuWR00XMdeft2au4DqZ8BUogACgPt3Vq5ihjAnBgNVHREEIDAeghNv\ncmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49BAMCA0gAMEUCIQD6\n5QcBFKKi6z8PTr4aXG+y0f6/xDS1MsG+iObnwGJntwIgROOBaIgOsYWqF4RAsTTk\n3UbaTPHBRgfC9n1ikfF4jHA=\n-----END -----\n"},"nonce":{"type":"Buffer","data":[55,114,35,43,55,236,240,19,29,148,206,31,37,186,133,193,185,113,21,111,220,13,245,114]}},"signature":{"type":"Buffer","data":[48,68,2,32,100,57,88,147,254,14,203,244,186,35,180,73,41,65,188,19,111,217,239,167,180,38,49,172,82,203,250,251,198,36,15,106,2,32,125,121,136,118,156,56,132,60,100,76,232,215,5,247,105,147,216,87,105,55,216,182,209,233,211,182,6,109,160,31,83,124]}}]},{"value":{"index":{"low":0,"high":0,"unsigned":true}},"signatures":[{"signature_header":{"creator":{"Mspid":"OrdererMSP","IdBytes":"-----BEGIN -----\nMIICTTCCAfOgAwIBAgIRAPgOpt3+Nfk+01sMdz6kzN4wCgYIKoZIzj0EAwIwaTEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt\ncGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMFgxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp\nc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI\nKoZIzj0DAQcDQgAENf3ZkpKtXwTy9erYtMCBYeeSU/4u996yTkzYABFRjJUCPHJF\nLBZjSf2RSLZ8dlEN9FlP6amXuMy6ESmlJr/5eqOBjDCBiTAOBgNVHQ8BAf8EBAMC\nBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAi\ngCDKy+d5gMYuWR00XMdeft2au4DqZ8BUogACgPt3Vq5ihjAnBgNVHREEIDAeghNv\ncmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49BAMCA0gAMEUCIQD6\n5QcBFKKi6z8PTr4aXG+y0f6/xDS1MsG+iObnwGJntwIgROOBaIgOsYWqF4RAsTTk\n3UbaTPHBRgfC9n1ikfF4jHA=\n-----END -----\n"},"nonce":{"type":"Buffer","data":[232,75,153,152,127,237,61,253,104,27,97,201,8,10,69,39,25,105,48,228,9,145,186,76]}},"signature":{"type":"Buffer","data":[48,68,2,32,110,209,136,243,215,85,58,109,143,69,201,5,41,112,191,134,229,34,26,6,123,254,37,186,238,54,56,40,185,255,138,120,2,32,70,54,73,69,1,36,130,77,94,38,33,159,225,145,135,70,94,217,55,78,35,234,33,58,187,251,231,168,56,166,24,210]}}]},[]]}}
{"header":{"number":{"low":2,"high":0,"unsigned":true},"previous_hash":"67876aee4401f3a43bb4607b7294411994d847e51f253ccff455ce5ced213508","data_hash":"7f82a6cb269ffce48cf318a880a75afb2d85d41b4ef3ab9b7eab92c180c78465"},"data":{"data":[{"signature":{"type":"Buffer","data":[48,68,2,32,60,157,40,51,123,55,4,182,68,132,218,122,141,74,117,54,8,49,117,25,248,64,128,89,210,108,219,12,145,54,25,128,2,32,93,50,247,22,170,72,137,21,57,103,217,212,174,121,149,9,159,19,223,255,244,190,252,47,228,47,148,54,71,85,46,190]},"payload":{"header":{"channel_header":{"type":"ENDORSER_TRANSACTION","version":3,"timestamp":"Fri Jun 16 2017 22:27:22 GMT+0900 (JST)","channel_id":"mychannel","tx_id":"b3e514c0e13e55adcd32525a955dc684fae9857f177c6977164c0d6d24bd1d65","epoch":0,"extension":{"type":"Buffer","data":[18,6,18,4,109,121,99,99]}},"signature_header":{"creator":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN CERTIFICATE-----\nMIIB7zCCAZWgAwIBAgIUNLc4T4ZCmXhsM1Fgooi4FMSFNe4wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjE2MTMwMTAwWhcNMTgwNjE2MTMw\nMTAwWjAOMQwwCgYDVQQDEwNKaW0wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARg\nwqB1kG2Bn5yrMRqQN59KHOI2O1G8xSy14sRE6Ls2a6opRo7OE90jTESuvFge/TJq\nG3GzApIEDk7Sf/cVhwjgo2wwajAOBgNVHQ8BAf8EBAMCAgQwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUlF6Ndc38jvQfZqoiLKTRSsPZHIIwKwYDVR0jBCQwIoAgsKWn\nPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYIKoZIzj0EAwIDSAAwRQIh\nAMJilFPdkTsGYYXyRrqKqC69OIIrVdERhUm+DuJNKnGiAiASZWwVxHQCM+zniuKz\nfka8oLlP5qPeefBKW8CruV1Rzg==\n-----END CERTIFICATE-----\n"},"nonce":{"type":"Buffer","data":[162,94,185,37,84,27,79,1,97,219,219,180,254,64,132,36,90,229,28,126,139,36,11,14]}}},"data":{"actions":[{"header":{"creator":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN CERTIFICATE-----\nMIIB7zCCAZWgAwIBAgIUNLc4T4ZCmXhsM1Fgooi4FMSFNe4wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjE2MTMwMTAwWhcNMTgwNjE2MTMw\nMTAwWjAOMQwwCgYDVQQDEwNKaW0wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARg\nwqB1kG2Bn5yrMRqQN59KHOI2O1G8xSy14sRE6Ls2a6opRo7OE90jTESuvFge/TJq\nG3GzApIEDk7Sf/cVhwjgo2wwajAOBgNVHQ8BAf8EBAMCAgQwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUlF6Ndc38jvQfZqoiLKTRSsPZHIIwKwYDVR0jBCQwIoAgsKWn\nPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYIKoZIzj0EAwIDSAAwRQIh\nAMJilFPdkTsGYYXyRrqKqC69OIIrVdERhUm+DuJNKnGiAiASZWwVxHQCM+zniuKz\nfka8oLlP5qPeefBKW8CruV1Rzg==\n-----END CERTIFICATE-----\n"},"nonce":{"type":"Buffer","data":[162,94,185,37,84,27,79,1,97,219,219,180,254,64,132,36,90,229,28,126,139,36,11,14]}},"payload":{"chaincode_proposal_payload":{"input":"\n$\b\u0001\u0012\u0006\u0012\u0004mycc\u001a\u0018\n\u0006invoke\n\u0004move\n\u0001a\n\u0001b\n\u000210"},"action":{"proposal_response_payload":{"proposal_hash":"b07d7721b74f5e0ad948648c514797e395b9cf53a9bc56d3dd5f397ec01fa1ed","extension":{"results":{"data_model":0,"ns_rwset":[{"namespace":"lscc","rwset":{"reads":[{"key":"mycc","version":{"block_num":{"low":1,"high":0,"unsigned":true},"tx_num":{"low":0,"high":0,"unsigned":true}}}],"range_queries_info":[],"writes":[]}},{"namespace":"mycc","rwset":{"reads":[{"key":"a","version":{"block_num":{"low":1,"high":0,"unsigned":true},"tx_num":{"low":0,"high":0,"unsigned":true}}},{"key":"b","version":{"block_num":{"low":1,"high":0,"unsigned":true},"tx_num":{"low":0,"high":0,"unsigned":true}}}],"range_queries_info":[],"writes":[{"key":"a","is_delete":false,"value":"90"},{"key":"b","is_delete":false,"value":"210"}]}}]},"events":{"chaincode_id":"","tx_id":"","event_name":"","payload":{"type":"Buffer","data":[]}},"response":{"status":200,"message":"","payload":""}}},"endorsements":[{"endorser":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN -----\nMIICWjCCAgGgAwIBAgIRAPGLVnARPOpXbAd4X38Sg60wCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2\nWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ\nMBMGByqGSM49AgEGCCqGSM49AwEHA0IABP68ne3e/ND5mJbQBgD/uFJai+6pND7p\nsucoOuQh7onYKt7YGafxUPTleAIdtM0BXUpvfcG8T612Qe0wOz/+VbyjgY0wgYow\nDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC\nMAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw\nKAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIFcGVlcjAwCgYIKoZI\nzj0EAwIDRwAwRAIgbQiRzF3Y1NKEHOy809ZHLLj8KS535l4p5W9kWBUjr/0CICYs\ny2MGqiWbH8EV/J3viNR25QL8yniybnfdCGrJKZWy\n-----END -----\n"},"signature":{"type":"Buffer","data":[48,68,2,32,1,214,86,206,84,180,130,208,63,161,245,73,165,182,182,133,11,5,217,95,157,252,81,75,132,145,31,96,167,113,147,198,2,32,96,251,10,164,122,252,80,205,32,214,85,249,233,160,133,62,68,47,130,82,206,168,3,44,164,38,68,183,82,73,232,33]}},{"endorser":{"Mspid":"Org1MSP","IdBytes":"-----BEGIN -----\nMIICWjCCAgGgAwIBAgIRAPxYG1oPao/E8U8Lyvr5U3MwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2\nWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ\nMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOtQO5PNelHBjyYXsP1J9r3d6qv/xMpX\n70w5g/wRFTzdDU78sVsOmiEShPIU7Klf3sv7nhwcqHapgly/n5AnjqqjgY0wgYow\nDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC\nMAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw\nKAYDVR0RBCEwH4IWcGVlcjEub3JnMS5leGFtcGxlLmNvbYIFcGVlcjEwCgYIKoZI\nzj0EAwIDRwAwRAIgJ0/jdJFdQSHEG/mY1xhefSur0kOqomwT85Ngvxjk2UQCIBBF\ndjbzrCMPYOUHxLMJ94gXIpKgE3ReHec1fCBcsty7\n-----END -----\n"},"signature":{"type":"Buffer","data":[48,69,2,33,0,179,53,0,99,27,119,155,180,132,240,15,64,4,1,169,166,234,22,27,66,97,167,13,140,57,123,118,170,178,213,117,55,2,32,8,251,185,112,243,125,30,245,236,167,153,254,58,106,137,165,249,191,160,217,77,110,219,108,33,3,144,49,143,81,71,42]}}]}}}]}}}]},"metadata":{"metadata":[{"value":"","signatures":[{"signature_header":{"creator":{"Mspid":"OrdererMSP","IdBytes":"-----BEGIN -----\nMIICTTCCAfOgAwIBAgIRAPgOpt3+Nfk+01sMdz6kzN4wCgYIKoZIzj0EAwIwaTEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt\ncGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMFgxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp\nc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI\nKoZIzj0DAQcDQgAENf3ZkpKtXwTy9erYtMCBYeeSU/4u996yTkzYABFRjJUCPHJF\nLBZjSf2RSLZ8dlEN9FlP6amXuMy6ESmlJr/5eqOBjDCBiTAOBgNVHQ8BAf8EBAMC\nBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAi\ngCDKy+d5gMYuWR00XMdeft2au4DqZ8BUogACgPt3Vq5ihjAnBgNVHREEIDAeghNv\ncmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49BAMCA0gAMEUCIQD6\n5QcBFKKi6z8PTr4aXG+y0f6/xDS1MsG+iObnwGJntwIgROOBaIgOsYWqF4RAsTTk\n3UbaTPHBRgfC9n1ikfF4jHA=\n-----END -----\n"},"nonce":{"type":"Buffer","data":[55,114,35,43,55,236,240,19,29,148,206,31,37,186,133,193,185,113,21,111,220,13,245,114]}},"signature":{"type":"Buffer","data":[48,68,2,32,100,57,88,147,254,14,203,244,186,35,180,73,41,65,188,19,111,217,239,167,180,38,49,172,82,203,250,251,198,36,15,106,2,32,125,121,136,118,156,56,132,60,100,76,232,215,5,247,105,147,216,87,105,55,216,182,209,233,211,182,6,109,160,31,83,124]}}]},{"value":{"index":{"low":0,"high":0,"unsigned":true}},"signatures":[{"signature_header":{"creator":{"Mspid":"OrdererMSP","IdBytes":"-----BEGIN -----\nMIICTTCCAfOgAwIBAgIRAPgOpt3+Nfk+01sMdz6kzN4wCgYIKoZIzj0EAwIwaTEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt\ncGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMFgxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp\nc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI\nKoZIzj0DAQcDQgAENf3ZkpKtXwTy9erYtMCBYeeSU/4u996yTkzYABFRjJUCPHJF\nLBZjSf2RSLZ8dlEN9FlP6amXuMy6ESmlJr/5eqOBjDCBiTAOBgNVHQ8BAf8EBAMC\nBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAi\ngCDKy+d5gMYuWR00XMdeft2au4DqZ8BUogACgPt3Vq5ihjAnBgNVHREEIDAeghNv\ncmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49BAMCA0gAMEUCIQD6\n5QcBFKKi6z8PTr4aXG+y0f6/xDS1MsG+iObnwGJntwIgROOBaIgOsYWqF4RAsTTk\n3UbaTPHBRgfC9n1ikfF4jHA=\n-----END -----\n"},"nonce":{"type":"Buffer","data":[232,75,153,152,127,237,61,253,104,27,97,201,8,10,69,39,25,105,48,228,9,145,186,76]}},"signature":{"type":"Buffer","data":[48,68,2,32,110,209,136,243,215,85,58,109,143,69,201,5,41,112,191,134,229,34,26,6,123,254,37,186,238,54,56,40,185,255,138,120,2,32,70,54,73,69,1,36,130,77,94,38,33,159,225,145,135,70,94,217,55,78,35,234,33,58,187,251,231,168,56,166,24,210]}}]},[]]}}
1トランザクションを含んだブロックのデータサイズが予想以上に大きい。。。
2017年6月15日木曜日
Hyperledger Fabric V1.0 β のインストール方法
ブロックチェーン基盤であるFabric V1.0 β のインストール方法について説明する。
Ubuntu OSには、Dockcer及びDocker-composeをインストール済みであること。
(参照元URL)
https://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html
Ubuntu OSには、Dockcer及びDocker-composeをインストール済みであること。
(参照元URL)
https://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html
- Ubuntu OSにTeratermでログインする。
- 以下のフォルダを作成する。
$ mkdir fabric-sample$ cd fabric-sample - 以下のコマンドを実行する。このコマンドを実行すると、インストールに必要なパッケージをダウンロードしてくれる。(結構時間がかかる)
$curl -sSL https://goo.gl/LQkuoh | bash - docker imagesコマンドでFabricイメージがダウンロードされていることを確認する。
- configtxgentツールを使うと、Fabricを動かすために必要となる以下の4つの設定情報ファイルを自動的に作成してくれる。
・bootstrap block
・チャネルトランザクション
・2つのアンカーPeerトランザクション
まず、bootstrap blockを作成するために、以下のコマンドを実行する。
$ cd release/linux-amd64/
$ ./bin/cryptogen generate --config=./crypto-config.yaml
以下の警告が大量に出力されるが無視する。
[bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP. - 次に、チャネルトランザクションを作成する。
$ export FABRIC_CFG_PATH=$PWD
$ ./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
$ ./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel2017-06-15 23:31:19.449 JST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-15 23:31:19.460 JST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2017-06-15 23:31:19.461 JST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx - Org1という組織にアンカーPeerを登録する。
$ ./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
2017-06-05 22:28:12.620 JST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-05 22:28:12.625 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2017-06-05 22:28:12.625 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update
同様に、Org2という組織にアンカーPeerを登録する。
$ ./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychnnel -asOrg Org2MSP
2017-06-05 22:30:01.798 JST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-05 22:30:01.805 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2017-06-05 22:30:01.805 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update - 以下のコマンドを実行する。
$ ./generateArtifacts.sh mychannel - docker-compose-cli.yamlをviで開いて、以下をbashコマンドをコマンドアウトする。
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'
volumes: - クライアントのDockerコンテナを起動する。
$ CHANNEL_NAME=mychannel TIMEOUT=60 docker-compose -f docker-compose-cli.yaml up -d - docker psコマンドを実行し、cliというコンテナが起動していることを確認する。
- cliコンテナにログインする。
$ docker exec -it cli bash - 「mychannel」というチャネルを作成する。
$ CHANNEL_NAME=mychannel
# peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem - 「mychannel」チャネルに「peer0.org1.example.com」を追加する。
$ peer channel join -b mychannel.block - Fabric付属のexample02というチェーンコードをインストールする。
$ peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 - チェーンコードをイニシエトする。
$ peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" - aという値をクエリしてみる。
$peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
・・・
Query Result: 100
・・・ - チェーンコードをinvokeして、aからbに10資産移動させる。
$ peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
aの資産が90になっていることを確認する。
$peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
・・・
Query Result: 90
・・・
bの資産が110になっていることを確認する。
$peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","b"]}'
・・・
Query Result: 110
・・・
2017年6月8日木曜日
Git bashプロンプト上でdockerコマンドが使えないときの対処
Git bashとDocker for windowsをインストール済みの状態。
Git bashプロンプトを起動し、docker ps コマンドを実行すると、以下のエラーが表示された。
$ docker ps
An error occurred trying to connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/json: open //./pipe/docker_engine: The system cannot find the file specified.
Git bashプロンプトを起動し、docker ps コマンドを実行すると、以下のエラーが表示された。
$ docker ps
An error occurred trying to connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/json: open //./pipe/docker_engine: The system cannot find the file specified.
上記のエラーを解決する手順を説明する。
参考URL
https://github.com/moby/moby/issues/22338
2017年6月4日日曜日
簡単に個人間送金ができる Interledger
簡単に個人間送金ができるアプリとして、「Interledger」 なるものがあるらしい。
デモがあるということなので、さっそくアカウントを登録して(ウォレットを作成)、ログインしてみた。デザインが非常にシンプル。
わかったこと
デモがあるということなので、さっそくアカウントを登録して(ウォレットを作成)、ログインしてみた。デザインが非常にシンプル。
- Interledgerでは、Interledger Protocol(略してILP)というプロトコルを使って送金を実現しているらしい。このプロトコルは、 RFC 1122, RFC 1123 、RFC 1009といったRFC規約に強く準拠しているらしい。
- 株、為替、債券などの異なる資産や台帳でも相互にやりとりできるらしい。この相互のやりとりを実現するために、W3Cが標準規約のAPIやプロトコルを策定中である。
https://w3c.github.io/webpayments/proposals/interledger-payment-method.html - コアな処理はJava言語で実装されている。
- Interledgerのモデルは下図を参照(Interledgerサイトより抜粋)。「Connector」というものが様々な台帳のつなぎ役になっている。また、Connector同士が情報を交換しやって、SenderからReceiverまでの最適なルートを決定するらしい(multi-hop paymentといわれる 。これが肝か)。
(執筆途中)
Dockerを使ってWindows OS上でUbuntu OSを動かしてみる
自宅のWindows OSにDocker for windowsをインストールした。ついでに、DockerリポジトリからUbuntu OSイメージをダウンロードして動かしてみる。
登録:
投稿 (Atom)