学习区块链的基础知识--工作量证明
2023-09-14 09:16:25 时间
作者认为最快的学习区块链的方式是自己创建一个,就跟随作者用Python来创建一个区块链。
对数字货币的崛起感到新奇的我们,并且想知道其背后的技术——区块链是怎样实现的。
我们知道区块链是由区块的记录构成的不可变、有序的链结构,记录可以是交易、文件或任何你想要的数据,重要的是它们是通过 哈希值(hashes)链接起来的。下面就来通过python代码来了解hash的特性。在python里是使用hashlib来实现这个功能的。
hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. 另外,模块中所定义的 new(name, string=”) 方法可通过指定系统所支持的hash算法来构造相应的hash对象。
简单例子代码如下:
abc : ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
abc1 : dbfcfd0d87220f629339bd3adcf452d083fde3246625fb3a93e314f833e20d37
在这里是产生256位的HASH摘要,64个字符的16进制的文本字符串。
新的区块依赖工作量证明算法(POW)来构造。PoW的目标是找出一个符合特定条件的数字,这个数字很难计算出来,但容易验证。这就是工作量证明的核心思想。为了方便理解,举个例子:
假设一个整数 x 乘以另一个整数 y 的积的 Hash 值必须以 0 开头,即 hash(x * y) = 00...ac23dc。设变量 x = 5,求 y 的值?
用Python实现如下:
输出结果如下:
深入浅出Matplotlib
深入浅出Numpy
五子棋游戏开发
http://edu.csdn.net/course/detail/5487
对数字货币的崛起感到新奇的我们,并且想知道其背后的技术——区块链是怎样实现的。
但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固。通过构建一个区块链可以加深对区块链的理解。在学习区块链技术之前,先来了解一下什么是hash算法。
我们知道区块链是由区块的记录构成的不可变、有序的链结构,记录可以是交易、文件或任何你想要的数据,重要的是它们是通过 哈希值(hashes)链接起来的。下面就来通过python代码来了解hash的特性。在python里是使用hashlib来实现这个功能的。
hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. 另外,模块中所定义的 new(name, string=”) 方法可通过指定系统所支持的hash算法来构造相应的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)
结果输出如下:
abc : ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
abc1 : dbfcfd0d87220f629339bd3adcf452d083fde3246625fb3a93e314f833e20d37
在这里是产生256位的HASH摘要,64个字符的16进制的文本字符串。
每次计算一次hash是需要大量的计算,这样非常消耗CPU资源,那么CPU就非常费电,需要大量的电力。下面就来做一个简单的工作量证明例子。
新的区块依赖工作量证明算法(POW)来构造。PoW的目标是找出一个符合特定条件的数字,这个数字很难计算出来,但容易验证。这就是工作量证明的核心思想。为了方便理解,举个例子:
假设一个整数 x 乘以另一个整数 y 的积的 Hash 值必须以 0 开头,即 hash(x * y) = 00...ac23dc。设变量 x = 5,求 y 的值?
用Python实现如下:
#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的工作量证明算法,它和上面的问题很类似。矿工们为了争夺创建区块的权利而争相计算结果。通常,计算难度与目标字符串需要满足的特定字符的数量成正比,矿工算出结果后,会获得比特币奖励。
深入浅出Matplotlib
https://edu.csdn.net/course/detail/6859
深入浅出Numpy
http://edu.csdn.net/course/detail/6149
Python游戏开发入门
你也能动手修改C编译器
纸牌游戏开发
http://edu.csdn.net/course/detail/5538
五子棋游戏开发
http://edu.csdn.net/course/detail/5487
RPG游戏从入门到精通
http://edu.csdn.net/course/detail/5246
WiX安装工具的使用
http://edu.csdn.net/course/detail/5207
俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通
http://edu.csdn.net/course/detail/3324
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579
Visual Studio 2015开发C++程序的基本使用
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672
相关文章
- 【华为云技术分享】区块链与数据库如何结合?
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
- 区块链技术中的智能合约究竟是怎么一回事
- 不要为了区块链而区块链
- [BlockChain] 三方互惠是公共区块链得以发展的基石, dApp数字通证的运转需要可持续性玩法
- AI&BlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之区块链技术
- 〖大前端 - 基础入门三大核心之 html 篇⑫〗- 区块标签与小语义标签
- 【华为云技术分享】区块链与数据库如何结合?
- 区块链学习笔记:DAY01 区块链的技术原理
- 只用200行Go代码写一个自己的区块链!
- 区块链技术应用多元化,覆盖多领域
- BC:带你温习并解读《中国区块链技术和应用发展白皮书》—概述
- BlockChain:《2016年中国区块链产业概况》听课笔记
- BlockChain:《世界经济论坛:区块链将如何重塑金融业?》—20160812—听课笔记
- BlockChain:Scene application区块链场景应用集合
- 大势所趋——区块链
- 小米进军区块链,有那些技术要求?