python简单区块链模拟详解


Posted in Python onJuly 03, 2019

最近学习了一点python,那就试着做一做简单的编程练习。

首先是这个编程的指导图,如下:

python简单区块链模拟详解

对的,类似一个简单区块链的模拟。

代码如下:

class DaDaBlockCoin:

 #index 索引,timestamp 时间戳,data 交易记录,self_hash交易hash,last_hash,上个hash
 def __init__(self,idex,timestamp,data,last_hash):
  self.idex = idex
  self.timestamp = timestamp
  self.data = data
  self.last_hash = last_hash
  self.self_hash=self.hash_DaDaBlockCoin()


 def hash_DaDaBlockCoin(self):
  sha = hashlib.md5()#加密算法,这里可以选择sha256,sha512,为了打印方便,所以选了md5
  #对数据整体加密
  datastr = str(self.idex)+str(self.timestamp)+str(self.data)+str(self.last_hash)
  sha.update(datastr.encode("utf-8"))
  return sha.hexdigest()

def create_first_DaDaBlock(): # 创世区块

 return DaDaBlockCoin(0, datetime.datetime.now(), "love dadacoin", "0")

# last_block,上一个区块
def create_money_DadaBlock(last_block): # 其它块
 this_idex = last_block.idex + 1 # 索引加1
 this_timestamp = datetime.datetime.now()
 this_data = "love dada" + str(this_idex) # 模拟交易数据
 this_hash = last_block.self_hash # 取得上一块的hash
 return DaDaBlockCoin(this_idex, this_timestamp, this_data, this_hash)

DaDaBlockCoins = [create_first_DaDaBlock()] # 区块链列表,只有一个创世区块
nums = 10
head_block = DaDaBlockCoins[0]
print(head_block.idex, head_block.timestamp, head_block.self_hash, head_block.last_hash)
for i in range(nums):
 dadaBlock_add = create_money_DadaBlock(head_block) # 创建一个区块链的节点
 DaDaBlockCoins.append(dadaBlock_add)
 head_block = dadaBlock_add
 print(dadaBlock_add.idex, dadaBlock_add.timestamp, dadaBlock_add.self_hash, dadaBlock_add.last_hash)

打印结果如下:

python简单区块链模拟详解

与开头的指导思路完美契合,虽然只是很简单的模拟。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python函数返回多个值的示例方法
Dec 04 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
详解python持久化文件读写
Apr 06 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python使用requests.session模拟登录
Aug 09 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
如何真正的了解python装饰器
Aug 14 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
python使用递归的方式建立二叉树
Jul 03 #Python
python挖矿算力测试程序详解
Jul 03 #Python
如何用Python做一个微信机器人自动拉群
Jul 03 #Python
Python中的正则表达式与JSON数据交换格式
Jul 03 #Python
python实现共轭梯度法
Jul 03 #Python
python实现微信自动回复及批量添加好友功能
Jul 03 #Python
Python 中Django安装和使用教程详解
Jul 03 #Python
You might like
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP制作万年历
2015/01/07 PHP
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
python多维数组切片方法
2018/04/13 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python将数组n等分的实例
2019/12/02 Python
什么是事务?事务有哪些性质?
2012/03/11 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
装潢设计专业推荐信模板
2013/11/26 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
2014年科技工作总结
2014/11/26 职场文书
电话营销开场白
2015/05/29 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
pytorch中[..., 0]的用法说明
2021/05/20 Python
使用Ajax实现无刷新上传文件
2022/04/12 Javascript