但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固。通过构建一个区块链可以加深对区块链的理解。在学习区块链技术之前,先来了解一下什么是hash算法。
#python 3.6
#蔡军生
#http://blog.csdn.net/caimouse/article/details/51749579
#
from hashlib import sha256
sha = sha256('abc'.encode()).hexdigest()
print('abc :', sha)
sha = sha256('abc1'.encode()).hexdigest()
print('abc1 :',sha)
结果输出如下:
每次计算一次hash是需要大量的计算,这样非常消耗CPU资源,那么CPU就非常费电,需要大量的电力。下面就来做一个简单的工作量证明例子。
#python 3.6
#蔡军生
#http://blog.csdn.net/caimouse/article/details/51749579
#
from hashlib import sha256
x = 5
y = 0 # y未知
while True:
sha = sha256(f'{x*y}'.encode()).hexdigest()
print(sha)
#if sha[:4] == "0000":
# break
if sha[:2] == "00":
break
y += 1
print(f'The solution is y = {y}')
...
63727ee4cff30e597899af01a4a355ea91e54c9a055e1da18e25b89dfa90352c
75ca28395bfc9ad121e29198a3124a330e4ad2c10463dd7b9bae68f48423fe71
23d2c2e28f2dcbc3ffa0437156d70329f119c70f2f9a72479efe4e33111fc6d7
6c6ece85b5d6ea8c5b1901b34909d170569478006b74472e49d7535ab4b4a94d
c63bd0d975c69098ee4739650068349dd2812231b5b0a17c0772093ef07bbebd
00150bc11aeeaa3cdbdc1e27085b0f6c584c27e05f255e303898dcd12426f110
The solution is y = 530
在比特币中,使用称为Hashcash的工作量证明算法,它和上面的问题很类似。矿工们为了争夺创建区块的权利而争相计算结果。通常,计算难度与目标字符串需要满足的特定字符的数量成正比,矿工算出结果后,会获得比特币奖励。