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实现端口复用实例代码
Jul 03 Python
Python读写文件方法总结
Jun 09 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
pyinstaller还原python代码过程图解
Jan 08 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
Python实现给PDF添加水印的方法
Jan 25 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
php数组去除空值函数分享
2015/02/02 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
毕业生的自我评价分享
2013/12/18 职场文书
美容师的职业规划书
2013/12/27 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
运动会广播稿50字
2015/08/19 职场文书
晚会开幕词范文
2016/03/04 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang