区块链 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("区块链包含区块个数:%d\n" %len(blockchain.blocks))
for block in blockchain.blocks:
    print("父区块区块哈希: %s" %block.prev_hash)
    print('区块内容:%s' %block.data)
    print('区块哈希:%s' %block.hash)
    print('\n')

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值