ブロックチェーンを実装するZEEE
ブロックチェーンとは要するになんぞや?
ということは随分前に理解したものの,
それを使って何ができるか想像できない。
嗚呼貧困なる想像力かな。
ブロックチェーンを実装してみれば,
用途を想像することができるのではないか?
シンプルなブロックチェーンの
実装サンプルはないものか?あった。
やったこと
・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