🦊
【Dev】Blockchainをjsで実装してみる(その2:Blockの中身編)
環境作成
まずは環境構築から。開発用ディレクトリをつくって、jsファイルを作ってください。以下、macOSをベースに説明します。また、npmは事前に実行できるよう環境を準備してください。npm initの中の選択項目は全てデフォルト(return連打)でいいです。
mkdir blockchain
cd blockchain
mkdir dev
cd dev
touch blockchain.js
cd ..
npm init
ディレクトリ構成はこんな感じになります。
では、blockchain.jsのコーディングに入りましょう! Blockchainをどこからまずコーディングをするのか...Blockchainはその名のごとく BlockをChainとして繋いだものです(そしてそれが台帳として扱われる)。はじめにChainとして繋がることになるBlockをつくる処理を書きます。
function Blockchain() {
this.chain = [];
this.pendingTransactions = []; //PendingTransactions
}
Blockchain.prototype.createNewBlock = function(nonce, previousBlockHash, hash) {
const newBlock = {
index: this.chain.length + 1,
timestamp: Date.now(),
transactions: this.pendingTransactions,
nonce: nonce,
hash: hash,
previousBlockHash: previousBlockHash
};
this.pendingTransactions = [];
this.chain.push(newBlock);
return newBlock;
}
createNewBlockメソッドは、Blockchainの一つ一つのブロックに必要な項目に対して値をセットし、新規ブロックとして戻り値を返します。それぞれの項目は以下のような意味合いを持っています。
index: 何番目のブロックなのか、ブロック番号
timestamp: データ作成日時
transactions: このブロックが保持することになるトランザクション
nonce: おまじないとなる値
hash: ハッシュ値、これがマイニングのときに重要になる。後々解説予定。
previousBlockHash: ひとつ前のブロックのハッシュ値
さて、createNewBlockメソッドを書いてみましたが、ここのtransactionsにはどのような値が入るのでしょう。次回はこのtransactionについて書いてみることにします。
Discussion