ソフトウェアエンジニア@横浜の徒然日記

SDGs,人と組織,ソフトウェア開発について知ったことを徒然なるままに発信

MENU

ブロックチェーンを実装するZEEE

ブロックチェーンとは要するになんぞや?
ということは随分前に理解したものの,
それを使って何ができるか想像できない。
嗚呼貧困なる想像力かな。

www.field-stone.com

ブロックチェーンを実装してみれば,
用途を想像することができるのではないか?
シンプルなブロックチェーンの
実装サンプルはないものか?あった。

postd.cc

やったこと
・githubからclone
・READMEに従いHTTPサーバとP2Pサーバ起動
 (node.js/npmが必要)
・ブロックをチェーンに追加して行く
以上,3STEPのみ。


最初にブロック追加する。
Received message{"type":2,"data":"[{\"index\":1,\"previousHash\":\"816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7\",\"timestamp\":1524576948.054,\"data\":\"Some data to the firstblock\",\"hash\":\"1bc3916e7a61d4389bac3a8e059aa300e8504c2f887f1b275e0061eba3c624a2\"}]"}

次のブロック追加する。
block added: {"index":2,"previousHash":"1bc3916e7a61d4389bac3a8e059aa300e8504c2f887f1b275e0061eba3c624a2","timestamp":1524577081.42,"data":"Some data to the first block","hash":"32b507dcf1f7fa8c33657eaa1fa3febd3b95a1fce99aa803138807f3919d1a1d"}

Hash1←Hash1・Hash2←Hash2・Hash3
という形でハッシュが繋がっていくようだ。
またブロックを追加すると起動している
全てのアプリケーションに対して
追加されたブロック
を通知する。
ふむなるほど。

コードはmain.jsにまとまっている。
読んでみよう。
ハッシュ生成のロジックはこんな感じ。

/*ハッシュ生成*/
var calculateHash = (index, previousHash, timestamp, data) => {
  return CryptoJS.SHA256(index + previousHash + timestamp +     
  data).toString();
};

新しいハッシュ値を生成するときに
前のハッシュ値を利用する。ふむ。

あるノードでブロックが追加された場合,
他のノードに通知される。
それが不正ブロックの場合は
追加されない仕組みになっているが
ここでハッシュ値を使う。

var isValidNewBlock = (newBlock, previousBlock) => {
if (previousBlock.index + 1 !== newBlock.index) {
 console.log('invalid index');
 return false;
} else if (previousBlock.hash !== newBlock.previousHash) {
 console.log('invalid previoushash');
 return false;
} else if (calculateHashForBlock(newBlock) !== newBlock.hash) {
 console.log(typeof (newBlock.hash) + ' ' + typeof
 calculateHashForBlock(newBlock));
 console.log('invalid hash: ' + calculateHashForBlock(newBlock) + ' ' +
 newBlock.hash);
 return false;
}
return true;
}; 

基本的な仕組みは
・最新ブロックのハッシュ値からハッシュ値を生成。
・送られてきた追加ブロックのハッシュ値
この2つを照合する形。
よくあるパスワード認証の仕組みとあまり変わらんな。

重要なポイントはチェーンに新しいブロックを
追加した場合は他のノード追加ブロックを送る
(ここで先のチェック行われる)ことで
各ノードで最新状態を共有することだろうか。

基本的なことは分かったつもりになったが,
まだ雲を掴むような感じである。
ブロックチェーンを利用すると
データの改竄が不可になるというが,
それがどう実現されるのか?

次にブロックチェーンを活用した
アプリケーションの事例も見てみよう。
techacademy.jp