脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python区块链Creating Miners教程

Python区块链Creating Miners教程

2023-02-15 14:12菜鸟教程 Python

这篇文章主要为大家介绍了Python区块链Creating Miners教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

为了实现挖掘,我们需要开发一个挖掘功能.挖掘功能需要在给定的消息字符串上生成摘要并提供工作证明.让我们在本章讨论这个.

消息摘要函数

我们将编写一个名为 sha256 的实用程序函数来创建给定消息的摘要 :

?
1
2
def sha256(message):
return hashlib.sha256(message.encode('ascii')).hexdigest()

sha256 函数将消息作为参数进行编码它为ASCII,生成十六进制摘要并将值返回给调用者.

挖掘函数

我们现在开发 mine 实现我们自己的挖掘策略的功能.在这种情况下,我们的策略是在给定消息上生成一个前缀为给定数字1的散列.给定的1的数量被指定为 mine 函数的参数,指定为难度级别.

例如,如果指定难度级别为2,则在给定消息上生成的散列应该从两个1开始 - 如11xxxxxxxx.如果难度级别为3,则生成的散列应以三个1开始 - 如111xxxxxxxx.鉴于这些要求,我们现在将开发挖掘函数,如下面给出的步骤所示.

第1步

挖掘函数有两个参数 - 消息和难度级别.

?
1
def mine(message, difficulty=1):

第2步

难度级别需要大于或等于1,我们使用以下断言语句 : 确保这一点;

?
1
assert difficulty >= 1

第3步

我们创建前缀变量使用设定的难度级别.

?
1
prefix = '1' * difficulty

请注意,如果难度级别为2,则前缀为"11",如果难度级别为3,则前缀为"111",依此类推.我们将检查生成的消息摘要中是否存在此前缀.为了消化消息本身,我们使用以下两行代码 :

?
1
2
for in range(1000):
   digest = sha256(str(hash(message)) + str(i))

我们继续添加一个新的数字 i 到每次迭代中的消息哈希并在组合消息上生成新摘要.由于 sha256 函数的输入在每次迭代中都会发生变化,因此摘要值也会发生变化.我们检查此摘要值是否高于前缀.

?
1
if digest.startswith(prefix):

如果条件满足,我们将终止 for 循环并返回摘要给来电者的价值.

这里显示的是整个我的代码 :

?
1
2
3
4
5
6
7
8
def mine(message, difficulty=1):
   assert difficulty >= 1
   prefix = '1' * difficulty
   for in range(1000):
      digest = sha256(str(hash(message)) + str(i))
      if digest.startswith(prefix):
         print ("after " + str(i) + " iterations found nonce: "+ digest)
      return digest

为了您的理解,我们添加了打印摘要的 print 语句值和在从函数返回之前满足条件所需的迭代次数.

测试挖掘函数

测试我们的迷你ng函数,只需执行以下语句 :

?
1
mine("test message"2)

当你运行上面的代码时,你会看到类似于下面和下面的输出;

after 138 iterations found nonce:

11008a740eb2fa6bf8d55baecda42a41993ca65ce66b2d3889477e6bfad1484c

请注意,生成的摘要以"11"开头.如果将难度级别更改为3,则生成的摘要将以"111"开头,当然,它可能需要更多次迭代.如您所见,具有更强处理能力的矿工将能够更早地挖掘给定的消息.这就是矿工们为了赚取收入而相互竞争的方式.

现在,我们准备为区块链添加更多区块.让我们在下一章中学习这一点,更多关于Python区块链Creating Miners的资料请关注服务器之家其它相关文章!

原文链接:https://www.it1352.com/OnLineTutorial/python_blockchain/python_blockchain_creating_miners.html

延伸 · 阅读

精彩推荐
  • PythonPython合并pdf文件的工具

    Python合并pdf文件的工具

    PDF文件合并工具是非常好用可以把多个pdf文件合并成一个,本文以5个pdf文件为例给大家分享具体操作方法,通过实例代码给大家介绍的非常详细,需要的朋...

    滑稽研究所5342021-12-10
  • Python解析pandas apply() 函数用法(推荐)

    解析pandas apply() 函数用法(推荐)

    这篇文章主要介绍了pandas apply() 函数用法,大家需要掌握函数作为一个对象,能作为参数传递给其它函数,也能作为函数的返回值,具体内容详情跟随小编一...

    stone08239232022-02-21
  • Pythonpython实现在windows下操作word的方法

    python实现在windows下操作word的方法

    这篇文章主要介绍了python实现在windows下操作word的方法,涉及Python操作word实现打开、插入、转换、打印等操作的相关技巧,非常具有实用价值,需要的朋友可以...

    重负在身4972020-06-15
  • PythonPandas的read_csv函数参数分析详解

    Pandas的read_csv函数参数分析详解

    这篇文章主要介绍了Pandas的read_csv函数参数分析详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    Lavi_qq_29101380257492021-07-29
  • PythonPython遍历pandas数据方法总结

    Python遍历pandas数据方法总结

    本篇文章给大家详细介绍了Python中遍历pandas数据方法以及相关注意点,对此有兴趣的朋友参考学习下吧。...

    脚本之家18932021-01-13
  • PythonPython学习之线程池与GIL全局锁详解

    Python学习之线程池与GIL全局锁详解

    本文我们将学习线程池的创建与全局锁。线程池的创建于进程池的原理是相同的;关于GIL全局锁,暂时没有代码上的练习,而是对其概念进行一个简单的启...

    渴望力量的哈士奇3712022-11-28
  • PythonPython代码阅读--列表元素逻辑判断

    Python代码阅读--列表元素逻辑判断

    本篇阅读的三份代码的功能分别是判断列表中的元素是否都符合给定的条件;判断列表中是否存在符合给定的条件的元素;以及判断列表中的元素是否都不...

    FelixZ11572022-01-13
  • PythonMATLAB 如何求取离散点的曲率最大值

    MATLAB 如何求取离散点的曲率最大值

    这篇文章主要介绍了MATLAB 求取离散点的曲率最大值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    天上地芒果6002021-10-11