织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 比特币 > 比特币资讯

区块链时代的世界宪章:代码即法律(4)

时间:2020-08-04 08:48来源:未知 作者:admin 点击:
e4b9cb27e1fa5e644dc53e20de8c108f 如果改变这串字符,会发生什么呢?是哈希值的微小变化还是什么? hash(liangzixuepai)=e4b9cb27e1fa5e644dc53e20de8c108fhash(lianzixuepai)

e4b9cb27e1fa5e644dc53e20de8c108f

如果改变这串字符,会发生什么呢?是哈希值的微小变化还是什么?

hash("liangzixuepai")=>e4b9cb27e1fa5e644dc53e20de8c108fhash("lianzixuepai")=>8a76b8bce8a03603003f23cce0e1b034

你将看到,在同一字符串上,调用该哈希函数将总是生成相同的哈希,但添加或改变其中的某一个字符,将会生成一种完全不同的哈希值。

代码实现了哈希函数的运行,在区块链中,通过代码就可以计算哈希值,基于哈希算法的数字加密也才得以更好地进行。

基于代码编程的区块链

想要区块链自规则能够完整运行,少不了代码的编程。下面从代码的角度实际讲一下如何形成一个完整的区块链。

① 逻辑步骤决定区块结构。

为了保证事情尽可能简单,我们只选择最必要的部分:Index(下标)、Timestamp(时间戳)、Data(数据)、Hash(哈希值)和Previous Hash(前区块哈希)。如图5-2所示。

图5-2 区块结构图

② 确保区块链的这个块中必能找到前一个块的哈希值,以此来保证整条链的完整性。代码如下:

classBlock{constructor(index,previousHash,timestamp,data,hash){this.index=index;this.previousHash=previousHash.toString();this.timestamp=timestamp;this.data=data;this.hash=hash.toString();

③ 哈希加密。这里采用的是SHA-256 算法(上面所用的是哈希MP5 算法出来的散列值),为了保存完整的数据,必须用哈希计算整个区块。SHA-256会对块的内容进行加密,记录这个值应该和“ 挖矿”毫无关系,因为这里不需要解决工作量证明的问题。其代码如下:

varcalculateHash=(index,previousHash,timestamp,data)=>{returnCryptoJS.SHA256(index+previousHash+timestamp+data).toString();};

④ 块的生成。要生成一个块,必须知道前一个块的哈希值,然后创造其余所需的内容(= Index, Hash, Data and Timestamp)。块的Data部分是由终端用户所提供的。代码如下:

vargenerateNextBlock=(blockData)=>{varpreviousBlock=getLatestBlock();varnextIndex=previousBlock.index+1;varnextTimestamp=newDate().getTime()/1000;varnextHash=calculateHash(nextIndex,previousBlock.hash,nextTimestamp,blockData);returnnewBlock(nextIndex,previousBlock.hash,nextTimestamp,blockData,nextHash);};

⑤ 块的存储。内存中的JavaScripta数组被用于存储区块链。区块链的第一个块通常被称为“起源块”,是硬编码的。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容