一直对区块链只是了解个大概,恰好最近工作中遇到了可能需要使用区块链的情况,于是就开始学习相关资料,首先想到的就是咱成开论坛,拜读了几位同事的神贴,讲得浅显易懂,比网上那些艰涩难懂的文章好太多,必须手动给成开论坛和各位大神点个赞。
本文主要根据我自己对区块链的理解,用一段Python代码简单演示一下区块链的工作原理,其中有不正确的地方,还请各位大神轻点拍。好了,下面进入正题。
Demo工程总共只有3个文件:
Block.py:区块类,封装了区块的数据结构和构建方法。
Node.py:节点类,封装了网络中节点的计算逻辑。
Main.py:主程序入口。
下面就对Demo中的关键代码进行说明:
Block.py
区块类的数据结构,字段包括“区块编号、创建时间、数据内容、上一区块的hash值、当前区块的hash值”。
Main.py
创建3个节点类,模拟网络中的三个节点,并且用节点1初始化了一条区块链。这里为了简化分布式数据库的数据同步过程,在Node类种定义了一个静态成员变量保存区块链,保证各节点的数据一致。
Main.py
然后我们开始模拟网络上的消息广播,消息由主程序发出后,3个节点同时开始计算下一区块的hash值,最先计算出下一区块hash值的节点,将区块添加到链上,其他节点则不可再写入。这里省略了共识算法,谁先写入,就用谁的区块,简单粗暴。
Node.py
下面看看运行结果吧:
由运行结果可以看出,总共广播了5条消息,三个节点在接到广播的消息内容后,同时开始计算下一区块的hash值,先计算出来的节点将区块写入区块链,另外2个节点就不能再写入了。从最终形成的区块链结果来看:
A节点写入了编号为3、5的区块。
B节点写入了编号为1、2的区块。
C节点写入了编号为4的区块。