区块链是一项在21世纪诞生的革命性技术,它正在不断发展壮大,但其潜力没有彻底发掘。区块链本质上是一个去中心化的数据集,与传统的私有数据库不同,它是揭露的,任何人都能够拥有完整或部分的复制。在区块链中,数据的写入有必要得到其他人的统一才干进行。此外,区块链也使加密数字钱银和智能合约得以完成。

在这一系列文章中,咱们将基于区块链的原理来完成一个简略的加密数字钱银体系。

区块是区块链的根本组成部分。它起到存储有价值数据的作用。举个比如,比特币的区块中存储了交易信息,而交易是加密数字钱银的中心构成部分。一个区块还能够包括一些技术信息,如版本号、时刻戳和上一个区块的哈希值。

在这篇文章中,咱们只会完成区块的一些重要信息,而不是完整完成区块链或比特币中的区块。下面是区块的结构定义:

其间,timestamp是当时区块被创立的时刻戳,data是存储有价值信息的地方,prevBlockHash存储了上一个区块的哈希值,hash是当时区块的哈希值。在比特币中,timestamp、prevBlockHash和hash构成了区块头的数据结构,而transactions(在咱们当时的完成中称为data)则是与区块头分开的数据结构。现在,咱们将这两者放在一同,以简化咱们的工作。

那么,咱们如何核算哈希值呢?哈希值的核算在区块链中是一项十分重要的规划,这种核算方式保证了区块链的安全性。实际上,核算哈希值是一项十分耗费核算资源的操作,即便对于速度很快的核算机来说,也需求一定的时刻(这也是为什么人们购买GPU来挖比特币的原因)。这是一种故意规划的架构,旨在添加区块的难度,然后避免在区块被添加到区块链数据库后被篡改。咱们将在后续具体讨论和完成这套机制。

现在,咱们仅仅将区块中的字段连接在一同,然后核算其SHA-256哈希值。下面是完成的代码:
(注:其间Hashes是github上的一个项目,网址是https://github.com/h2non/jshashes)

现已介绍完了区块,接下来咱们创立一个简略的函数来构造区块。

完毕!这便是一个区块!

现在,咱们来完成区块链。从定义上来看,区块链本质上是一个有特定结构的数据库,它是一个按时刻顺序排列、串联的链表。也便是说,区块链中的区块按照插入的时刻顺序排列,而且每个区块与前一个区块相连。因而,能够快速获取最新的区块,而且依据哈希值高效地获取一个区块。

在JavaScript中,咱们能够使用array和map来完成这种结构:array用于保证哈希值按顺序排列,map使得能够快速查找到区块。不过,在咱们行将完成的原型中,咱们暂时只使用array,因为咱们现在不需求依据哈希值来查找对应的区块。

十分简略对吧!

现在咱们来完成一个添加区块的函数。

完成了!不过,还有一个遗失的地方。

假如当时没有区块,则此函数将犯错。因而,咱们有必要保证区块链至少有一个区块。在区块链完成中,咱们通常将第一个区块称为“创世块”。现在来完成创世块:

this.blocks[this.blocks.length-1]

因而,创立新的区块链时,需求同时创立创世块。

好了,区块链的根本原型就完成了。

接下来,咱们来测验代码。

在这个Node.js程序中,咱们在package.json中添加了mocha测验代码。然后运转能够看到测验成果。

"scripts":{"test":"mocha"},

npm test

最后

咱们建立了区块链的简略原型,其间包括一个由区块组成的数组,每个区块与前一个区块相连。然而,真实的区块链体系比此原型愈加杂乱。在该体系中,添加一个区块是简略而快速的,但在真实的区块链中,添加一个区块需求进行一些杂乱的操作:有必要耗费大量的核算资源才干取得添加区块的权限(该机制被称为工作量证明)。此外,区块链仍是一个没有中心决策角色的去中心化数据库。因而,新区块的生成有必要经过网络中的其他成员的确认和授权(该机制被称为一致)。嗯,现在咱们的区块链完成没有包括交易。

来源:娑婆诃花开

此时快讯

【MetisDAO发布新项目ZKM】7月13日消息,以太坊扩容解决方案MetisDAO发布其孵化的新项目ZKM。ZKM将在年底前上线测试网,将现有的OptimisticRollup升级为HybridRollup,实现及时提款(原来OP的提款期为7天)并确保安全性。
ZKM采用MIPS指令集,从CPU级别实现所有虚拟机(VMs)和应用的零知识证明(ZKP)安全性,并支持多种区块链智能合约引擎。此外,ZKM的即插即用特性使开发者无需更改代码库即可应用ZKP,降低采用成本。借助以太坊的大型分散安全基础设施,ZKM可以验证所有区块链和非区块链交易。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注