浅谈区块链1
区块链 是一份连续不断的交易记录文档。
挖矿是指 根据区块中交易数据data+时间戳,便利nonce值,计算出开头为0000(难度为哈希值前面0的个数,0越多难度越大)有效的哈希值为止计算获得所对应的nonce值。 这个过程叫挖矿。 https://anders.com/blockchain/block.html
CryptoJs.SHA256 ( index +previous hash +data +timestamp+nonce)=hash previous hash 代表上一个区块的哈希值。 创世区块的哈希值是00000000000000000000. 创世区块 index为0,第二个区块index为2.
这是哈希算法结果产生的公式。 前导0000 是有效散列的最低要求! 满足条件就是POW工作证明。
代码如下
function isValidHashDifficulty(hash, difficulty) // 验证是否
{
for (var i = 0, b = hash.length; i < b; i ++)
if (hash[i] !== '0'){
break;
}
}
return i >= difficulty;
}
let nonce =0;
let hash;
let input;
while(!isValidHashDifficulty(hash) ){
nonce = nonce + 1;
input = index + previousHash + timestamp + data + nonce;
hash = CryptoJS.SHA256(input)
}
区块链之中可能不止一个交易。因此有许多区块。后一个区块都存储前一个区块的哈希值。 每个区块之间因此而联系。组成区块链。 所有产生的区块的数据都是可以找到源头的!这是区块链的回溯性。 贵州茅台酒采用这种特性发布的贵人链。就是根据区块链可追溯,放篡改的特性而发布的。
区块链中用复杂的密码学。保证交易不被篡改和修复。为什么这么说呢。因为成本太大了。区块链使用的是是分布式的数据库,具有去中心化的特性。验证数据是否有效和真实,采取的原则是少数服从多数。所以想修改一个数据,需要修改百分之50以上包含这个数据的区块链。 一个区块链由许多区块构成, 每次修改区块的数据需要重写挖矿,便利nonce,得到正确的哈希值。 一个区块修改后会影响这个区块链后所有的区块。需要将这个区块后所有的区块重新挖矿。 也就说想篡改一个数据,需要将百分之50以上包含这个数据的区块链中的区块及这个区块之后的所有区块都需要修改。 这个工作量太大。成功太高。