栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 前沿技术 > 区块链 > 其他

区块链 01(简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过 哈希算法计算而成)

其他 更新时间:发布时间: 百科书网 趣学号
"""区块包括区块头和区块体两个部分。区块头由版本、父区块哈希值、数据、Merkle根、时间戳、目标难度、
#Nonce值组成;区块体实际上可以包含任何内容,在比特币中包含交易输入数量、交易输出数量
和长度不等的交易记录等信息。在以太坊中的区块体中除了交易数据还包含中智能合约"""

#简单版区块链
"""简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过
哈希算法计算而成"""

import hashlib
from datetime import datetime

class Block:
    '''区块结构
               prev_hash:   父区块哈希值
               data:        区块内容
               timestamp:   区块创建时间
               hash:        区块哈希值
    '''
    def __init__(self,data,prev_hash):
        #将传入的父区块哈希值和数据保存到类变量中
        self.prev_hash = prev_hash
        self.data = data
        #获取当前时间
        self.timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

        #计算区块的哈希值


        message = hashlib.sha256()
        message.update(str(self.prev_hash).encode('utf-8'))
        message.update(str(self.data).encode('utf-8'))
        message.update(str(self.timestamp).encode('utf-8'))
        self.hash = message.hexdigest()
'''区块链是由区块组成的链条,定义了区块的结构后还需要定义一个区块链的结构。将各个区块通过哈希值前后依次相连,然后
将这些区块都放到一个数组中,初始化时列表为空,新的区块依次放到这个列表中,再定义一个函数来是实现向这个列表中
添加区块的功能,从而定义了这个区块链的结构'''
class BlockChain:
    """区块链结构体
    blocks: 包含的区块列表"""
    def __init__(self):
        self.blocks = []
    def add_block(self,block):
        '''添加区块'''
        self.blocks.append(block)

'''以上完成了最简单的区块链结构,下面在此基础上一步步对其完善直至实现一个真正的区块链系统。
实现区块链原型'''
'''(1)先创建第一个区块,或者叫作创世区块'''
#生成创世区块     创世区块是第一个区块,无父区块哈希;
genesis_block = Block(data='创世区块',prev_hash="")
'''(2)再创建2个区块,prev_hash 分别为父区块哈希值'''

'''创建两个区块,数据是关于张三的转账记录,pre_hash依次是前一个区块的哈希值'''
new_block = Block(data="张三转给李四1比特币", prev_hash=genesis_block.hash)
new_block2 = Block(data="张三转给王五2个比特币",prev_hash = new_block.hash)

'''(3)新创建一个区块链,并将上面的区块添加到区块链中'''
#新建一个区块链
blockchain =  BlockChain()
#将上面的几个区块添加到区块链中
blockchain.add_block(genesis_block)
blockchain.add_block(new_block)

blockchain.add_block(new_block2)

'''最后打印输出当前区块链的信息,可以看到这个区块链包含了三个区块'''
#打印区块链
print("区块链包含区块个数:%dn" %len(blockchain.blocks))
for block in blockchain.blocks:
    print("父区块区块哈希: %s" %block.prev_hash)
    print('区块内容:%s' %block.data)
    print('区块哈希:%s' %block.hash)
    print('n')

以上代码源于《自学区块链》  范凌杰 机械工业出版社

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/848397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号