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基础知识小结之集合
Nov 25 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
Django实现快速分页的方法实例
Oct 22 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
python多进程实现文件下载传输功能
Jul 28 Python
python绘制多个子图的实例
Jul 07 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 Python
Python json格式化打印实现过程解析
Jul 21 Python
python中threading和queue库实现多线程编程
Feb 06 Python
Python 统计序列中元素的出现频度
Apr 26 Python
方法汇总:Python 安装第三方库常用
Apr 26 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
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
图片完美缩放
2006/09/07 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python使用cookie库操保存cookie详解
2014/03/03 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
Python随机函数random()使用方法小结
2018/04/29 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
结构工程研究生求职信
2013/10/13 职场文书
倡导文明标语
2014/06/16 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
小学少先队活动总结
2015/05/08 职场文书