python交易记录链的实现过程详解


Posted in Python onJuly 03, 2019

接着上篇的内容,这里实现一个交易记录链,废话不多说,先看图:

python交易记录链的实现过程详解

跟之前的逻辑类似,但也有少许不同,这里多了一个payloadhash,以及对payloadhash和prehash的hash,下面看代码实现:

import hashlib
import datetime
# 交易记录类
class DaDaMessage:

  def __init__(self, data):
    self.hash = None # 自身hash
    self.preHash = None # 上一个区块hash
    self.data = data # 交易信息
    self.timestamp = datetime.datetime.now() # 交易时间
    self.payloadHash = self.payload_hash() # 交易后的哈希,防止篡改

  #对交易信息进行hash
  def payload_hash(self):
    sha = hashlib.md5()
    datastr = (str(self.data) + str(self.timestamp)).encode("utf-8")
    sha.update(datastr)
    return sha.hexdigest()
  #密封,锁定交易信息
  def seal(self):
    self.hash = self.hash_message()
  #将交易信息和上一个区块密封
  def hash_message(self):
    sha = hashlib.md5()
    datastr = (str(self.preHash) + str(self.payloadHash)).encode("utf-8")
    sha.update(datastr)
    return sha.hexdigest()
  #校验区块信息
  def validate(self):
    if self.hash != self.hash_message():
      raise InvalidateMessage("交易哈希?接?h修改")
    if self.payloadHash != self.payload_hash():
      raise InvalidateMessage("交易?r?????恍薷?)
  #?接?^?K
  def link(self,Message):
    self.preHash = Message.hash
  def __repr__(self):
    return "hash:{},preHash:{},data:{}".format(self.hash,self.preHash,self.data)

自定义异常类:

class InvalidateMessage(Exception):
  def __init__(self,*args,**kwargs):
    super(Exception,self).__init__(*args,**kwargs)

编写测试模块:

if __name__=="__main__":
  m1 = DaDaMessage("I love coins 12")
  m2 = DaDaMessage("I love coins 13")
  m3 = DaDaMessage("I love coins 14")
  try:
    m1.seal()
    m2.link(m1)
    m2.seal()
    m3.link(m2)
    m3.seal()
    m1.hash = "0xaaaajjjjj"
    m1.data = "I don't love "
    m1.validate()
    m2.validate()
    m3.validate()
    print(m1)
    print(m2)
    print(m3)
  except InvalidateMessage as e:
    print(e)

查看打印结果:

python交易记录链的实现过程详解

跟上面的逻辑完美契合,然后我们在测试下篡改数据的结果:

python交易记录链的实现过程详解

当然,你也可以尝试不用try…except 看下结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 自动补全(vim)
Nov 30 Python
python字符串,数值计算
Oct 05 Python
使用python为mysql实现restful接口
Jan 05 Python
python3的输入方式及多组输入方法
Oct 17 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
Python分支语句与循环语句应用实例分析
May 07 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
解决echarts中饼图标签重叠的问题
May 16 Python
Python基于execjs运行js过程解析
Nov 27 Python
python 实现ping测试延迟的两种方法
Dec 10 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 #Python
python简单区块链模拟详解
Jul 03 #Python
python使用递归的方式建立二叉树
Jul 03 #Python
python挖矿算力测试程序详解
Jul 03 #Python
如何用Python做一个微信机器人自动拉群
Jul 03 #Python
Python中的正则表达式与JSON数据交换格式
Jul 03 #Python
python实现共轭梯度法
Jul 03 #Python
You might like
PHP 读取Postgresql中的数组
2013/04/14 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
python赋值操作方法分享
2013/03/23 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Python切片工具pillow用法示例
2018/03/30 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python对象属性自动更新操作示例
2018/06/15 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
好家长事迹材料
2014/01/23 职场文书
写景作文评语集锦
2014/12/25 职场文书
2015年工会工作总结
2015/03/30 职场文书
德能勤绩工作总结
2015/08/11 职场文书
JavaScript组合继承详解
2021/11/07 Javascript