2017年3月30日木曜日

RFIDとブロックチェーン その1

冒頭から何ですが最近投稿が少なくなっておりますので、いきなり大きな話題を持ち出して逃げられないようにする作戦で参りたいと存じます。

大きな話題とはそう、「ブロックチェーン」です。うわー、でかいなー、大丈夫かー? しかしブロックチェーンとRFIDってすごい親和性があると勝手に思っていますのでこの組み合わせで何かしらできたらいーなーと。

で、何からやればいいんだい?ブロックチェーンを使ったシステムとしては Bitcoin、Ethereum、Nxtなどいっぱいあるようです。しかしまぁ、ここはひとつ元祖ブロックチェーンということで Bitcoin からはじめてみます。

ソースは GitHubからとれます。開発環境としては Ubuntu がいいみたいなんですが適当なマシンがなかったので試しに Raspberry Pi3 にUbuntu Mate を入れてソースを QtCreator で確認するところまではできました。がビルドが重くて固まってしまったのであきらめました(笑

ソースの解読はさておき、どんな動作をするのかを確認したいと思います。お手軽にWindows版の Bitcoin を以下からダウンロードします。

https://bitcoin.org/ja/download

そのまま起動してしまうと Bitcoin の本番ネットワークに接続してしまい、120G くらいの Bitcoinの過去のブロックデータを全部ダウンロードしてきてしまうのでコマンドプロンプトでオプションを付けて起動します。

C:\bitcoin>bitcoin-qt -regtest

-regtest オプションを付けると、プライベートブロックチェーンになるようです。
で、1台でやっても面白くないのでもう1台使って同じように起動します。2台目は1台目に接続するようにオプションを付けます。

C:\bitcoin>bitcoin-qt -regtest -addnode=[1台目のIP]

-addnodeオプションで接続するノードのIPアドレスを指定します。


起動したら、コインの採掘をします。プライベートなので掘り放題! メニューから「ヘルプ」→「デバッグウィンドウ」→「コンソール」でコマンドが実行できますので、採掘コマンドを実行します。

generate 101

101個のブロックを採掘します。何で101個かというと、採掘してすぐのブロックは使用できず、その後100個の採掘を経てようやく使えるようになるということのようです。で、101個採掘して実際に使えるのが1個になります。そうすると採掘の報酬で50ビットコインが利用可能になります。

さらに10ビットコインをコマンドを使って自分に送金します。自分のアドレスは、メニューの「ファイル」→「受け取り用アドレス」を参照して得られます。

sendtoaddress [自分のアドレス] 10

この時点ではまだ取引が確定しておらず、ブロックチェーンにブロックとして登録されてはじめて確定されます。

確定前の情報を見てみます。

listunspent 0
[
  {
    "txid": "50141e5b67f70d4cb1f2052dbf2c743649acaaa08d91885b4ccdabcbcf785580",
    "vout": 0,
    "address": "mk7ySUPXjHiUfWZZ1R4kNTH7Yti1A8kjtt",
    "account": "",
    "scriptPubKey": "76a91432800489a4d7b08cb3f983e1a9bc588ba722013088ac",
    "amount": 10.00000000,
    "confirmations": 0,
    "spendable": true,
    "solvable": true
  },
  {
    "txid": "50141e5b67f70d4cb1f2052dbf2c743649acaaa08d91885b4ccdabcbcf785580",
    "vout": 1,
    "address": "mja78wU2XsyPok6WsbCTnDfiEBkBys1ZfT",
    "scriptPubKey": "76a9142c7921f6885fe065b9834b4eda5a84473835171c88ac",
    "amount": 39.99996160,
    "confirmations": 0,
    "spendable": true,
    "solvable": true
  }
]

1個目のが受け取った方、10ビットコインになってます。2個目が送った方で50ビットコインから10ビットコイン送ったので40ビットコインと思いきや、手数料が取られて微妙な数字になっています。この確定前情報はどうやって確定されるかというと、ブロックを採掘することでこの確定前情報がブロックチェーンにブロックとして登録されます。ということで1個採掘

generate 1

確定されました。(画面取り忘れた)

せっかくもう1台いるので、そちらに今度は3ビットコインを送信してみます。これは画面から。


で、また1個採掘する(確定させる)と


きました。もう1台に3ビットコイン

基本的なところはこんなところです。これと RFID をどう繋いでいくかを考えていきます。まずはビットコインを改修して RFID の ID をブロックに登録できるようにすることからやってみます。EPCIS との連携も考えておいた方がよさそうです。重要な採掘のロジックをどうするのかというのもありますし、こりゃまぁ大変な作業になりそうですが少しずつ進めていきます。