在比特币的世界里,挖矿是有奖励的,而且奖励的力度会随时间而逐渐减少,一半一半地减少。当初挖矿(记账)成功会得到 50 个比特币的奖励,而现在只有 25。以后会更少。今天我们就用 js 简单地实现激励记账的过程。
修改 data 为 transactions ,transactions 为交易的集合,通过控制计算 hash 值难度将出矿的时间控制为需要一段时间才能出矿。所以在这段时间内发生交易我们会添加到这个 transactions 数组,
我们去掉 index,因为只需要块在区块链数组位置就可以判断块位置,无需 index。
相应地修改 createGensisBlocak 方法,去掉第一个参数。
创建 Transaction 类表示每一笔交易,参数表示交易的发出方,接收方和交易的数量
在 BlockChain 的构造函数中添加每次挖矿的奖励为 100,pendingTransactions 用于保存在两个出块之间发生的所有交易。
将 addBlock 方法修改为 minePendingTransactions,并修改其具体内容见注释。
createTransaction 方法用于将发生的交易写入 pendingTransactions 的数组中。
getBalaceOfAddress 方法用于计算发生交易后,根据交易内容,对交易双方进行收支平衡计算。实现交易的结果
完成了代码实现,可以来测试一下,从下面打印结果来看,矿工完成挖矿(也就是记账)后,是在下一次交易时才得到自己应得的激励 100 比特币。
当然真正的区块链要比这里代码复杂的多的多,不过我相信一切都是从简单开始。

网友评论