python构建区块链_用python构建区块链(1)---基本结构
目录
背景
比特币从诞生到现在已经10年了,最近一段时间因为工作原因接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我们就从头开始构建一个简单的区块链。在行动之前我们先看一下比特币的整体结构.
比特币内部结构
可以看到比特币主要有四个部分
previous hash(前一个区块的hash)
merkle root(默克尔树根节点,内部存储交易数据)
timestamp(当前区块生成的时间)
nonce(旷工计算hash值次数)
transaction_structure.png
我们实现的区块链数据结构(简单实现并不完整)
index 当前第几个区块
timestamp 该区块创建时的时间戳
data 交易信息
previousHash 前一个区块的hash
hash 当前区块的hash
注意点
第一个区块叫做创世区块(genesis block),区块链创建的时候默认生产的
这里用的是单纯的链表,不是用默克尔树存储
coding
from hashlib import sha256
//区块schema
class Block:
def __init__(self,index,timestamp,data,previousHash=""):
self.index = index
self.timestamp = timestamp
self.data = data
self.previousHash = previousHash
self.hash = self.calculateHash()
//计算当前区块的hash值
def calculateHash(self):
plainData = str(self.index)+str(self.timestamp)+str(self.data)
return sha256(plainData.encode('utf-8')).hexdigest()
def __str__(self):
return str(self.__dict__)
//区块链schema
class BlockChain:
//初始化的时候 创建 创世区块
def __init__(self):
self.chain = [self.createGenesisBlock()]
//构建创世区块
def createGenesisBlock(self):
return Block(0,"01/01/2018","genesis block","0")
//获取最后一个区块
def getLatestBlock(self):
return self.chain[len(self.chain)-1]
//往区块链里面添加区块
def addBlock(self,newBlock):
newBlock.previousHash = self.getLatestBlock().hash
newBlock.hash = newBlock.calculateHash()
self.chain.append(newBlock)
def __str__(self):
return str(self.__dict__)
//校验区块链是不是有效的 有没有人被篡改
def chainIsValid(self):
for index in range(1,len(self.chain)):
currentBlock = self.chain[index]
previousBlock = self.chain[index-1]
if (currentBlock.hash != currentBlock.calculateHash()):
return False
if previousBlock.hash != currentBlock.previousHash:
return False
return True
myCoin = BlockChain()
myCoin.addBlock(Block(1,"02/01/2018","{amount:4}"))
myCoin.addBlock(Block(2,"03/01/2018","{amount:5}"))
#print block info 打印区块链信息
print("print block info ####:")
for block in myCoin.chain:
print(block)
#check blockchain is valid 检查区块链是不是有效的
print("before tamper block,blockchain is valid ###")
print(myCoin.chainIsValid())
#tamper the blockinfo 篡改区块2的数据
myCoin.chain[1].data = "{amount:1002}"
print("after tamper block,blockchain is valid ###")
print(myCoin.chainIsValid())
输出结果
print block info ####:
{'index': 0, 'timestamp': '01/01/2018', 'data': 'genesis block', 'previousHash': '0', 'hash': 'd8d21e5ba33780d5eb77d09d3b407ceb8ade4e5545ef951de1997b209d91e264'}
{'index': 1, 'timestamp': '02/01/2018', 'data': '{amount:4}', 'previousHash': 'd8d21e5ba33780d5eb77d09d3b407ceb8ade4e5545ef951de1997b209d91e264', 'hash': '15426e32db30f4b26aa719ba5e573f372f41e27e4728eb9e9ab0bea8eae63a9d'}
{'index': 2, 'timestamp': '03/01/2018', 'data': '{amount:5}', 'previousHash': '15426e32db30f4b26aa719ba5e573f372f41e27e4728eb9e9ab0bea8eae63a9d', 'hash': '75119e897f21c769acee6e32abcefc5e88e250a1f35cc95946379436050ac2f0'}
before tamper block,blockchain is valid ###
True
after tamper block,blockchain is valid ###
False
python构建区块链_用python构建区块链(1)---基本结构相关推荐
- python画交互式地图_使用Python构建交互式地图-入门指南
python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...
- keras构建卷积神经网络_在python中使用tensorflow s keras api构建卷积神经网络的初学者指南...
keras构建卷积神经网络 初学者的深度学习 (DEEP LEARNING FOR BEGINNERS) Welcome to Part 2 of the Neural Network series! ...
- python爬房源信息_用python爬取链家网的二手房信息
题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...
- python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议
<Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: <Python之禅>中对于Pyt ...
- 基于python的房地产数据分析_基于Python的数据分析
转载 | CSDN 编辑 | 雷课小雷 下面来介绍一下基于Python的数据分析,主要介绍数据分析的概念.数据分析流程.Python优势.常用模块的用途以及使用Python进行数据分析的学习方法及步骤 ...
- python大数据免费_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础
本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...
- python库开源网站_开源Python库
开源Python库 Python 一个很受人欢迎的原因之一是其有很丰富的第三方库,到本文开始写的时候已经在 PyPI 上有108298个第三方包提供.有人还对第三方库做了很好的总结 Awesome P ...
- python 预编译加速_让Python代码运行更快的最佳方式
Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样的应用程序.工作流程和领域中得到了广泛应用.但是就语言的设计,也就是它天然的解释能力还有它的运行时的动态性而言,Pyth ...
- python做股票分析_利用Python进行股票投资组合分析(调试)
pythonsp500-robo-advisor-edition Python for Financial Analyses 需要的镜像文件和数据--Robo Advisor edition. 小结 ...
最新文章
- 2020职场人裸辞三大原因:不开心、工资低、没有盼头
- XLS封装成EXE制作全攻略
- python如何移动文件却不覆盖现有文件_解决python不能覆盖文件内容的方法
- vsftpd 的配置项目
- ( 转)Hibernate常用API
- 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览
- mysql语句获取当前时间,系列篇
- asp.net web.config连接mysql数据库_ASP.NET中使用web.config配置数据库连接
- Android界面布局基本属性
- java调用第三方短信接口 本地能发送短信,服务器却发不了,直到超时
- 此加载项为计算机上的所有用户安装但只能,win7系统控件无法安装的解决方法...
- 如何解决--Mac的磁盘工具无法对移动硬盘分区,分区按钮是灰色的?
- 生成对抗网络 Generative Adversarial Nets(GAN)详解
- python报KeyError: ('Age', 'occurred at index PassengerId')错误
- unity之使用FPS第一人称后鼠标消失
- java里面的scanner怎么关闭_作业。scanner怎么不能关闭
- 机器学习笔记(九)聚类算法Birch和层次聚类Hierarchical clustering
- 不买新电脑不能升级Win 11 ?旧版PC被踢出Win 11预览计划
- ui设计移动端字体适配_移动端UI设计尺寸规范(示例代码)
- 北方民族大学计算机科学与技术硕士,2014年北方民族大学计算机科学与技术考研调剂信息(第二批)...
热门文章
- 魔幻的“净醛产品”:宜家被罚“亡羊”,欧派用视频“补牢”?
- 那些赞助世界杯的金主,正在变成赌徒
- aspen plus大小_AspenPlus
- 数据库能承受多少并发量_在工业应用中,高温套管能承受多少度?
- 微波炉定时c语言程序,微波炉控制系统c语言编程.doc
- 组件skype服务器,Skype for Business Server 中的中介服务器组件
- php根据指定时间日历,php学习笔记(十三)时间处理与日历的实现
- Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
- 5种Python统计次数的方法
- python如何判断两个数组完全相等?