区块链-工作量证明算法

目录:https://blog.csdn.net/qq_40452317/article/details/89646633

比特币的去中心化共识由所有网络节点的 4 种独立过程相互作用而产生:

  • 每个全节点依据综合标准对每个交易进行独立验证
  • 通过完成工作量证明算法的验算,挖矿节点将交易记录独立打包进新区块
  • 每个节点独立的对新区块进行校验并组装进区块链
  • 每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链。

按照上面四个过程,现在时第二步,在前面已经将交易打包到区块中构造好区块头。节点已经构建了一个候选区块,那么就轮到矿机对这个新区块进行“挖掘”,求解工作量证明算法以使这个区块有效。我们已经学习了比特币系统中不同地方用到的哈希加密函数。比特币挖矿过程使用的是SHA256哈希函数。

 哈希函数输入一个任意长度的数据,输出一个长度固定且绝不雷同的值,可将其视为输入的数字指纹。对于特定输入,哈希的结果每次都一样,任何人都可以用相同的哈希函数,计算和验证哈希结果。一个加密哈希函数的主要特征就是不同的输入几乎不可能出现相同的数字指纹。因此,有意的选择一个输入去生成一 个想要的哈希值值是几乎不可能的,更别提用随机的方式生成想要的哈希值了。

无论输入的大小是多少,SHA256函数的输出的长度总是256bit。我们将使用Python解释器来计算语句 "I am Satoshi Nakamoto" 的SHA256的哈希值。

import hashlib

text = "I am Satoshi Nakamoto"

print hashlib.sha256(text).hexdigest()
5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47989e

 5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47989e是"I am Satoshi Nakamoto"的哈希值。改变原句中的任何一个字母、标点、或增加字母都会产生不同的哈希值。

如果改变原句,得到的应该是完全不同的哈希值。例如,在句子末尾加上一个数字,通过反复修改nonce来生成不同哈希值的脚本(SHA256)。

import hashlib

text = "I am Satoshi Nakamoto"

for nonce in xrange(20):
    input = text + str(nonce)

    hash = hashlib.sha256(inp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值