NodeJS区块链实践(1)Nodejs搭建简易区块链

区块链的目的之一是让我们所需要的“有价值”的信息得以保存且不可更改,这些信息都储存在一个叫做“区块(block)”的结构中。以比特币为例,被认为是有价值的信息是“交易”,所有的交易储存在区块中,通过区块的hash、时间戳等实现信息的可追溯以及不可更改性。

我们这里首先实现的是一个简易的区块链,并不是像比特币这样成熟的区块链,暂不涉及交易结构、验证以及UTXO。

一、区块(block)

首先,创建一个区块(Block)类。我们的区块仅包含了一部分关键信息,它的结构如下:

class Block{
  constructor(data){
     this.hash = "",  // 当前区块的Hash值
     this.height = 0,  // 当前区块的高度
     this.body = data,  // 区块实际存储的有效信息
     this.time = 0,  // 时间戳,即区块创建的时间
     this.previousBlockHash = ""。// 前一个区块的Hash值
  }
}

这里,hash、height、time和previousBlockHash在比特币规范中属于区块头(header),区块头是一个单独的数据结构,而body部分用于储存交易信息或者其他数据。

二、区块链(blockchain)

首先,我们要把区块存在哪里?我们可以把区块直接放进一个数组(let blockchain = arr[]),但是这显然不是我们想要的。这里我们选择leveldb作为底层的数据储存方案。

const level = require('level');
const chainDB = './.data/blockchain';
const db = level(chainDB);

然后,我们要思考一下,一个blockchain实例需要具有哪些功能?

1、getBlockHeight():获取当前区块的高度,即该区块链的高度;
2、getBlockByHeight(height):通过区块高度来获取区块;
3、getBlockByHash(hash):通过区块哈希来获取区块;
4、validateBlock(height):验证某高度的区块是否有效;
5、validateChain():验证整条链的每个区块是否均有效;

通过上面几个函数,我们定义了对一个区块链(blockchain)的基本描述,我们通过当前区块的高度获取当前区块的hash和前一个区块的hash,进而可以向前回溯出整个区块链。

下面我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值