python的工作原理_用Python简单演示区块链的工作原理

一直对区块链只是了解个大概,恰好最近工作中遇到了可能需要使用区块链的情况,于是就开始学习相关资料,首先想到的就是咱成开论坛,拜读了几位同事的神贴,讲得浅显易懂,比网上那些艰涩难懂的文章好太多,必须手动给成开论坛和各位大神点个赞。

本文主要根据我自己对区块链的理解,用一段Python代码简单演示一下区块链的工作原理,其中有不正确的地方,还请各位大神轻点拍。好了,下面进入正题。

29381f30e924b899166f4ab6863e72910b7bf6ae.jpeg?token=6313d751a4c7f5bcf03cbd7a2de9b188&s=2EC8D01083F0682148482C530300C0F1

Demo工程总共只有3个文件:

Block.py:区块类,封装了区块的数据结构和构建方法。

Node.py:节点类,封装了网络中节点的计算逻辑。

Main.py:主程序入口。

下面就对Demo中的关键代码进行说明:

Block.py

562c11dfa9ec8a13250de8161c3bfe8ba1ecc0ea.jpeg?token=5fc5eb527fdb918de453838b2502144d&s=CD10E51319DECCCA06F571DE000080B0

区块类的数据结构,字段包括“区块编号、创建时间、数据内容、上一区块的hash值、当前区块的hash值”。

Main.py

9f510fb30f2442a7fdfeac2d207bc24fd0130206.jpeg?token=79829cf7eb48d5a6abe1fe150484f6ce&s=A118643287344C2314F4A1DA000080B1

创建3个节点类,模拟网络中的三个节点,并且用节点1初始化了一条区块链。这里为了简化分布式数据库的数据同步过程,在Node类种定义了一个静态成员变量保存区块链,保证各节点的数据一致。

Main.py

8435e5dde71190ef690cb2152923f212fffa60c5.jpeg?token=268d038f7ed76cc756dd1eb44bddc474&s=6410E033174255604C5580DA000080B2

然后我们开始模拟网络上的消息广播,消息由主程序发出后,3个节点同时开始计算下一区块的hash值,最先计算出下一区块hash值的节点,将区块添加到链上,其他节点则不可再写入。这里省略了共识算法,谁先写入,就用谁的区块,简单粗暴。

Node.py

58ee3d6d55fbb2fb87787a41a3724fa04723dccb.jpeg?token=3fabf766585b8160ca4681171cee5e3e&s=CD42E4139FC06D431EEDE1DB0000D0B2

48540923dd54564e8277ea105ae6f386d1584f41.jpeg?token=c17f671e7522dc9aba1dd0166a40f53e&s=CA40E01A97704C215C719CDB0000C0B0

下面看看运行结果吧:

55e736d12f2eb938152ad2a33c5aea31e4dd6fdd.jpeg?token=39374a36a150f380f40a017ad1fdc469&s=8112E43315584DC840D541DA000050B0

eaf81a4c510fd9f917d0546fce15bb2e2934a4aa.jpeg?token=b89389f26a179ea6f86b01bd8ec5f0cd&s=C910E413115C4DCC4EFD45DA0000D0B3

由运行结果可以看出,总共广播了5条消息,三个节点在接到广播的消息内容后,同时开始计算下一区块的hash值,先计算出来的节点将区块写入区块链,另外2个节点就不能再写入了。从最终形成的区块链结果来看:

A节点写入了编号为3、5的区块。

B节点写入了编号为1、2的区块。

C节点写入了编号为4的区块。

9213b07eca806538fb248b9b7fe5ce40ac34822d.jpeg?token=b65b25b9942fdd5487660a55a895e803&s=7A8DA1448AA0090D6DB2AD8B0300E09B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值