【区块链】PoW 挖矿过程-python代码实现

PoW 工作量证明

       因为比特币采用了 PoW 共识机制,所以这个概念才得以被广泛传播。PoW 全称 Proof of Work,中文名是工作量证明, PoW 的核心设计思路是提出一个计算难题,但是这个难题答案的验证过程是非常容易 的,这种特性我们称之为计算不对称特性,即计算困难,验证简单。
       在分析拜占庭将军问题的时候可以看出,如果所有节点在同一时刻发起提案,那么这个系统的 记 账过程将会非常的复杂混乱,为了 降低具有 提案权的节点数量,采用工作量证明不失为一个好办法。 所以我们需要构造一个计算不对称的难题,这个难题在比特币中被选定为 以 SHA256 算法计算一个目标哈希,使得这个哈希值符合前 N 位全是 0。
       举个例子,假设我们给定一个字符串“helloworld”,我们提出的难题是,计算一个数字,与给定的字符串连接起来,使这个字符串的 SHA256 计算结果的前 4 位是 0,这个数字我们称作 nonce, 比如字符串 "helloworld1234",nonce 就是 1234,我们要找到符合条件的 nonce。
import hashlib
def main(str_start):
 base_sring = "helloworld"
 nonce = 10000
 count = 0
 while True:
     target_sring = base_sring + str(nonce)
     m = hashlib.sha256()
     m.update(target_sring.encode('utf-8'))
     pow_hash = m.hexdigest()
     count = count + 1  # 统计次数
     if pow_hash.startswith(str_start):
         print(pow_hash)
         print("nonce: %s scan_times: %s" % (nonce, count))
         break
     nonce = nonce + 1  # nonce从10000往上增长

if __name__ == '__main__':
    main("0000")  # 前4位为0,以此类推
    main("00000")
    main("000000")
    main("0000000")

运行结果:

【区块链】PoW 挖矿过程-python代码实现_第1张图片

 

        可以看出,每次要求哈希结果的前 N 位多一个 0,计算次数就多了很多倍,当要求前 7 位都是 0 时,计算次数达到了 6.5 亿次,CPU 负载长时间达到 100%。
        通过上述程序,希望你对区块链 PoW 机制有个直观的了解。 由于结果只能暴力搜索,而且搜索空间非常巨大,作弊几乎不可能,另外符合条件的 nonce 值也是均匀分布在整个空间中的,所以哈希是一个非常公平且粗暴的算法。
以上代码的基本逻辑就是 PoW 挖矿过程,搜索到一个目标值就会获得记账权 

你可能感兴趣的:(区块链,算法)