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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Ubuntu下安装PyV8
Mar 13 Python
Python处理JSON数据并生成条形图
Aug 05 Python
详解python中的json的基本使用方法
Dec 21 Python
TensorFlow数据输入的方法示例
Jun 19 Python
详解python 注释、变量、类型
Aug 10 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
python存储16bit和32bit图像的实例
Dec 05 Python
对python函数签名的方法详解
Jan 22 Python
详解Python sys.argv使用方法
May 10 Python
python 中如何获取列表的索引
Jul 02 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 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(3)
2006/10/09 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
python压包的概念及实例详解
2021/02/17 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
个人思想理论学习的自我鉴定
2013/11/30 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
优秀团队获奖感言
2014/02/19 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
投诉书范文
2015/07/02 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
python 爬取吉首大学网站成绩单
2021/06/02 Python
Python实现拼音转换
2021/06/07 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技