预定公链开发视频课

黎跃春区块链博客


黎跃春,江湖人称春哥,孔壹学院、 链乎创始人,区块链职业教育布道师,通信和信息技术培养工程区块链高级授课专家。


链乎问答社区
链乎公众号

001 - 通过一个App的演示深入理解区块链运行原理

作者:黎跃春

博客:http://liyuechun.org

官网:http://kongyixueyuan.com

下载安装

如果没有安装nodejs,需要先安装 nodejs

# Clone this repository
$ git clone https://github.com/seanseany/blockchain-cli

# Go into the repository
$ cd blockchain-cli

# Install dependencies
$ npm install

# Run the app
$ npm start

运行结果:

创建区块

在 blockchian ->后面输入 bc查看创始区块结构。

当一个区块挖矿时都发生了什么?

在 blockchian ->后面输入 mine kongyixueyuan.com 挖矿并创建一个新的模块。

Hash是怎么计算的?

Hash值是一个十六进制固定长度为64位的唯一的标识。

hash值是由index, previous block hash, timestamp, block datanonce 作为输入数据计算而得。

CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
The SHA256 algorithm will calculate a unique hash, given those inputs. The same inputs will always return the same hash.

SHA256算法将根据给出的输入数据计算出一个唯一的hash值,只要输入值不变,永远返回相同的结果。

在线演示: https://anders.com/blockchain/hash.html

你是否注意到块哈希中的四个前导0?

四个前导0是有效散列的最低要求。 所需的前导0的数量称为难度

下面的方法验证hash难度是否有效。

function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i >= difficulty;
}

这就是我们所熟知的工作量证明系统 - Proof-of-Work system

什么是nonce?

nonce是一个用来找到满足条件的hash值的数字。

let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}

nonce 值一直迭代,直到 hash 值有效为止。在我们案例中一个有效的hash 值是最少有4个前导0。找到nonce 值以满足合适条件的hash值的过程就叫做挖矿。

随着难度的增加,可能的有效散列数减少。 使用较少可能的有效散列,需要更多的处理能力才能找到有效的散列。

在线地址:

https://anders.com/blockchain/block.html

版权声明:博客中的文章版权归博主所有,未经授权,禁止转载,转载请注明出处,合作请联系:liyc1215(微信)

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦