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