区块链运行原理demo,挖矿算法

地址:www.blockchaindemo.io

  • 终端演示 macOS 10.12
  • 先安装 npm ,node
  1. npm install blockchain-cli -g
  2. 输入 blockchain打开一个终端
  3. bc ,blockchaim简写,(看到了第一个创世区块)

    ┌─────────────────────────────────────────┐

                🏆  Genesis Block            

    ├────────────────────┬────────────────────┤

    │ ⏮  Previous Hash   │ 0                 

    ├────────────────────┼────────────────────┤

    │ 📅  Timestamp       │ Thu, 27 Jul 2017  

                        │ 02:30:00 GMT      

    ├────────────────────┼────────────────────┤

    │ 📄  Data            │ Welcome to        

                        │ Blockchain CLI!   

    ├────────────────────┼────────────────────┤

    │ 📛  Hash            │ 0000018035a828da0… │

    ├────────────────────┼────────────────────┤

    │ 🔨  Nonce           │ 56551             

    └────────────────────┴────────────────────┘

    Previous Hash ;上一个区块的哈希值                    Timestamp :挖矿的时间戳                                     Data:当前的交易数据                                               Hash:当前的哈希值                                                      Nonce:满足当前的哈希值某个难度的前导0随机数  (挖矿的时候找这个Nonce值。找到了成功)

  4. 挖矿 输入 命令 mine  zh17769225922 (参数随便写的)

挖矿成功以后产生新的区块

Block #1 第1号区块,创世区块时第0号

5. 输入 bc查看所有区块

6.可以继续挖,mine  你好   (数据中文也可以)

Hash是怎么计算的?

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

Hash值是由index,previous block hash ,timestamp,bloc data,和nonce作为数据计算的

CryptoJS.SHA256(index+previousHash+timestamp+data+nonce)

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

工作量证明系统Proof-of-Work system

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

function isValidHashDifficulty(hash,difficulty){

for(var i=0,b=hash.length;i<b;i++){

if(hash[i] !==’0′){

break;

}

}

return i>=difficulty;

}

什么是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);

发表评论

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