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) |