使用Node.js建立Genesis Block(创世区块)的方法
2025-09-17 07:36:00
使用Node.js 发展区块链的下一个动作,就是建立Genesis Block。
Step 1:定义区块资料结构
区块的资料结构包含 4 个栏位如下:
hash:区块的 hash IDpreviousHash:纪录前一个区块的 hash IDtimestamp:区块建立的时间merkleRoot:区块的 merkle tree以 Node.js 来实作此资料结构,方式是以 function 关键字来定义 Block 类别(Class):
function Block(block) { this.hash = block.hash || ''; this.previousHash = block.previousHash || ''; this.timestamp = block.timestamp || new Date(); this.merkleRoot = block.merkleRoot || {};}
Step 2:生成 Hash ID
每个Block 都有一个独一无二(uniquely)的编号,这个编号是使用SHA256 算法产生,称之为Block Hash(即Block Hash ID)。
Genesis block 的hash ID 要如何生成呢?原则上是使用SHA256 算法来产生,当然开发者也能自行定义Block Hash 的生成方式。在这篇教学里,笔者打算根据Merkle tree 的算法来生成Hash ID。
Merkle tree 同样是使用SHA256 算法来产生Hash ID,标准的Merkle tree 会使用二次的SHA256 来计算出hash ID,这样的做法也称为double SHA256。本文的Block Hash 就以double SHA256 来产生。
Node.js 内建的 crypto 模组,就提供了 SHA256 算法函数。先引入 crypto 模组:
var crypto = require('crypto');
使用 createHmac 函数,计算出第 1 个 hash 值,用法如下:
第1 个参数,填写sha256第2 个参数,填写secret:任意一段句子即可执行后,createHmac 会建立 Hmac 的实例化(instance),再呼叫 Hmac 物件的 update 函数,并传入一段本文来进行 sha256 编码运算。完成后,呼叫 digest 将结果转为 hex 格式。
完整范例:
var secret = 'blockchain developer';var hash1 = crypto.createHmac('sha256', secret) .update('created by jollen') .digest('hex');
得到第1 个的hash 值。接着,使用这个hash 值做为新的secret,进行第2 次的hash 运算:
var hash3 = crypto.createHmac('sha256', hash1) .update('powered by flowchain') .digest('hex');console.log(hash3);
输出结果:
dd0e2b79d79be0dfca96b4ad9ac85600097506f06f52bb74f769e02fcc66dec6
这就是genesis block 的hash ID 了。
Step 3:定义Genesis Block
建立 genesis block 最简单的方式,就是直接「定义」它。建立一个名为 config.js 的档案,并且直接定义好 genesis block 的栏位资讯:
// Filename: config.js'use strict'; exports.genesis = { hash: 'dd0e2b79d79be0dfca96b4ad9ac85600097506f06f52bb74f769e02fcc66dec6', prevHash: '0000000000000000000000000000000000000000000000000000000000000000', timestamp: new Date(), merkleRoot: {}};
Step 4:建立 Genesis Block
终于来到历史性的一刻了。先引入事先准备好的genesis block 定义:
var config = require('../config.js');
接著,再实例化 Block,得到的物件,就是 Genesis Block 了。
// Filename: index.jsvar genesis = new Block(config.genesis);
后续可以将 genesis 物件,储存在 NoSQL 资料库里。
小结
创建出Genesis Block 后,下一个步骤就是帮它加入一个空的merkle tree。
相关阅读
-
比特币创世区块诞生15周年,全球爱好者庆祝里程碑链百科 2025-09-17 07:08:22
-
区块链去中心化的历史演进:E-gold,Napster以及BitTorrent链百科 2025-09-17 06:41:08
-
什么是分布式分类帐?链百科 2025-09-17 06:12:52
-
公有链、私有链、联盟链的简单介绍链百科 2025-09-17 05:45:36
-
什么是联盟链?联盟链的种类有哪些?链百科 2025-09-17 05:17:16
-
以太坊交易的前世今生链百科 2025-09-17 04:49:10
-
挖矿奖励减产前的提前套利模式链百科 2025-09-17 04:21:16
-
2020年区块链备忘录:公链大航海时代的到来!链百科 2025-09-17 03:53:09
-
认识Genesis Block(创世区块)链百科 2025-09-17 03:24:43
-
区块链:辨识分布式分类帐的风险链百科 2025-09-17 02:57:38