🦊

【Dev】Blockchainをjsで実装してみる(その2:Blockの中身編)

2021/09/20に公開

環境作成

まずは環境構築から。開発用ディレクトリをつくって、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