使用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 hash2 = crypto.createHmac('sha256', hash1) .update('powered by flowchain') .digest('hex');console.log(hash2);输出结果:
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。
以上就是使用Node.js建立Genesis Block(创世区块)的方法的全部内容,望能这篇使用Node.js建立Genesis Block(创世区块)的方法可以帮助您解决问题,能够解决大家的实际问题是塔岸网一直努力的方向和目标。
香港持牌加密货币交易所HashKey Exchange 周三(1日)正式推出行动端应用程序,为专业投资人和零售用户提供服务。HashKey 营运长Livio Weng 受访表示,HashKey 还计划铸造自己的ERC-20 应用型代币HSK,可能会在明年年中上市。App 正式上线根据《The Blo...
11-15
Sushi 社群成员在治理论坛发布提案,拟议恢复SUSHI 代币的价值与功能,并让DAO 重新掌握协议治理权。Sushi 社群起义重拾治理权社群成员Trantor 表示,自从Kanpai 2.0 于2022 年12 月推出以来,所有协议费用都流入国库,尽管这有助于确保国库能够获得充足的资金,但核心团...
11-15
继贝莱德的IBTC 之后,景顺(Invesco)与Galaxy 共同提交的比特币现货ETF 也在美国证券存托清算公司的清单(DTCC)上架,股票代码为BTCO。标志着这两档ETF 申请正朝着标准程序持续推进。需要再次重申的是,许多人甚至会误将「上架DTCC」视为比特币现货ETF 批准的预告,但事实上...
11-15
由于传统金融体系缺乏信任而诞生的加密行业,逐渐崭露头角,并引发了人们的思考以及全球范围内的广泛关注,迄今已经成长为万亿美元市场。但作为没有任何参考的新兴行业,加密市场为传统金融市场带来创新与注入活力的同时,各种突现的黑天鹅事件也不容忽视,合规透明正成为其未来发展的主旋律。作为全球领先的加密资产交易所...
11-15
根据英国金融行为监理总署 (Financial Conduct Authority, FCA) 官方公告显示,知名交易所 Bitfinex 被列为未经当局授权的警告名单。FCA:Bitfinex 在未经授权下推广英国金融行为监理总署 (Financial Conduct Authority, FCA...
11-15