python简单区块链模拟详解
作者:charles_lun 发布时间:2023-11-09 12:04:57
标签: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)
打印结果如下:
与开头的指导思路完美契合,虽然只是很简单的模拟。
来源:https://blog.csdn.net/baidu_17508977/article/details/80509069


猜你喜欢
- 拷贝副本复制一个二叉树副本,广度优先遍历同时设置两个队列,一个遍历一个复制创建。func Copy(bt *biTree) *biTree
- 大家好,今天给大家带来一篇如何优化time.After函数。最近我在做调度中心2.0的重构。本次重构使用的GO语言开发。在项目中,基本都离不
- 本文实例为大家分享了Python实现感知器模型、两层神经网络,供大家参考,具体内容如下python 3.4 因为使用了 numpy这里我们首
- 准备软件版本Django2.1.3Python3.7.1默认使用的是sqlite3DATABASES = { 'def
- http://www.cppcns.com/shujuku/mysql/283231.html 也可以参照这个8.0
- 数据集数据集为Barcelona某段时间内的气象数据,其中包括温度、湿度以及风速等。本文将简单搭建来对风速进行预测。特征构造对于风速的预测,
- 数据集中的图像,一般不可用在以下3个方面:1.图像过小2.无法打开3.“Premature end of JPEG fi
- #!/usr/bin/env pythonimport sysfrom PyQt4 import QtGui,QtCoreimport ht
- 今天,又由一到题目引发了一场我跟JS基础的较量:首先是var getName = function(){alert(1)};function
- 其实相信每个和mysql打过交道的程序员都应该会尝试去封装一套mysql的接口,这一次的封装已经记不清是我第几次了,但是每一次我希望都能做的
- 1.hashlib密码散列hashlib模块定义了一个API来访问不同的密码散列算法。要使用一个特定的散列算法,可以用适当的构造器函数或ne
- 这篇文章主要介绍了python框架flask表单实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 一、tensor的创建1.使用tensor小写字母的tensor接收具体的数据,可以直接按照numpy的方式输入数组。2.使用Tensor大
- 本文实例分析了JS获取年月日时分秒的方法。分享给大家供大家参考,具体如下:var d = new Date();var time = d.g
- 1 plot 函数语法plot:绘制二维线图NO.1 绘制横轴为X,竖轴为Y二维线图,Y值与X值一一对应。plot(X,Y)如果 X 和 Y
- 首先了解一下需要的几个类所在的packagefrom torchvision import transforms, datasets as
- D:document 文档 浏览器加载的页面 DOM O:object 对象 页面及页面中的任何元素都是对象 M:module 模型 页面中
- 这里假设你已经申请完微信支付1. 微信后台配置 如图我们先进行测试,所以先把测试授权目录和 测试白名单添加上。测试授权目录是你要
- 本文实例讲述了GO语言Defer用法。分享给大家供大家参考。具体分析如下:defer:调用一个被 defer 的函数时在函数刚要返回之前延迟
- 1:除非你现在已经过了不惑之年了,否则你就一定要保持年轻人特有的激情!这里的激情,包含了那种说不明白的近似于冲动的东西,或者idea。也包含