pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验

pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验

需要改进的地方,还是一个指定关系。指定用户生成。

一、搭建环境

from qu import *#自己写的,没法下载,哈哈哈

自己学的区块链简易实现。
这里两个可以学学。1、落拓大佬,里面有区块检验,交易区块生成,js写的。2、python写的区块链。

二、实验结果。
1、基本介绍

pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第1张图片
2、导出日志的hash作为区块值
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第2张图片
3、服务器生成区块pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第3张图片
4、客户节点同步区块
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第4张图片同步结果
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第5张图片具体显示
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第6张图片5、检验合法性。包括区块检验和日志的检验。
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第7张图片
6、篡改结果
(1)、篡改日志

pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第8张图片pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第9张图片
(2)篡改区块值,第三个区块的前向hash

pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第10张图片检验:
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第11张图片终端结果:
pyside2入门–药品管理ui3.0,对于导出日志的简易区块链生成、同步、校验_第12张图片三、代码分析。
1、区块生成,附上简易的生成代码

import hashlib
from datetime import datetime
import json

#block
class Block:
    def __init__(self,value,prehash,time):
        self.value=value
        self.prehash=prehash
        self.time=time
        self.hash=self.computehash()
    def computehash(self):
        sha256 = hashlib.sha256()
        sha256.update((str(self.value)+self.prehash+self.time).encode('utf8'))#错在update写成updata了
        return  sha256.hexdigest()
    def outblock(self):
        print('Block:\n\t\tvalue:{}\n\t\tprehash:{}\n\t\tnowhash:{}\n\t\ttime:{}'.format(self.value,self.prehash,self.hash,self.time),end='\n')
#chain
class Chain:
    def __init__(self):
        self.chainlist=[self.genesisblock()]
    def genesisblock(self):
        return Block('genesisblock','',str(datetime.today()))
    def insertblock(self,value,time):
        newblock=Block(value,self.chainlist[-1].hash,time)
        self.chainlist.append(newblock)
    def outchain(self):
        print('chain:')
        for i in range(len(self.chainlist)):
            print('第%d个'%(i+1),end='')
            self.chainlist[i].outblock()

2、区块检验
对日志和区块的前向hash、现在的hash依次检验,一个循环即可。
3、区块同步
将区块的time和value写在列表中,转json格式,用socket加密发送过去,用户再转回列表格式,用以上两个值自行生成区块,即同步成功。
注意判断,当前用户区块个数是否为1,为1要从头开始同步。不为1不用。因为用户自建区块开始的time和服务器不一样,所以要从头同步。

你可能感兴趣的:(区块链,区块链,python)