用python实现简单的区块链

以下是一个简单的区块链示例代码,它使用Python类来实现区块和区块链的概念。

其中类Block用来存储区块的信息,它有四个属性,分别是时间戳、数据、前一个区块的哈希值和当前区块的哈希值。

Block类中的calc_hash函数用来计算当前区块的哈希值,它使用了 hashlib 库中的 sha256 算法来进行哈希,并将区块的时间戳、数据和前一个区块的哈希值作为哈希的输入。

Blockchain类用来存储整个区块链的信息,它包含一个区块链的列表,每个区块都是 Block 类的实例。

在初始化时,这个列表中的第一个区块被称为创世块,它使用 create_genesis_block 函数来创建。

add_block函数用来向区块链中添加新的区块。它首先获取上一个区块,然后使用这个区块的哈希值和新的数据来创建一个新的区块,最后将新区块添加到区块链中。

最后,代码使用一个循环来遍历整个区块链,并打印出每个区块的数据。

这只是一个简单的区块链示例,实际的区块链系统需要考虑的要素更多,如共识算法,账户体系,网络通信等等。

import hashlib

class Block:
    def __init__(self, timestamp, data, previous_hash):
        self.timestamp = timestamp #区块的时间戳
        self.data = data #区块的数据
        self.previous_hash = previous_hash #前一个区块的哈希值
        self.hash = self.calc_hash() #当前区块的哈希值
        
    def calc_hash(self):
        sha = hashlib.sha256() #使用sha256算法进行哈希
        hash_str = f"{self.timestamp}{self.data}{self.previous_hash}".encode('utf-8') #需要哈希的字符串
        sha.update(hash_str) #更新哈希
        return sha.hexdigest() #返回哈希值

class Blockchain:
    def __init__(self):
        self.chain = [self.create_genesis_block()] #创建创世块
        
    def create_genesis_block(self):
        return Block("2020-01-01", "Genesis Block", "0") #创世块的时间戳,数据,前一个区块的哈希值
    
    def add_block(self, data):
        previous_block = self.chain[-1] #获取上一个区块
        block = Block(data, previous_block.hash) #新区块的数据,前一个区块的哈希值
        self.chain.append(block) #添加新区块

bc = Blockchain()
bc.add_block("Block 1")
bc.add_block("Block 2")

for block in bc.chain:
    print(block.data)

给TA打赏
共{{data.count}}人
人已打赏
站长笔记

老话新谈:windows和linux 我应该选哪个操作系统?

2022-12-11 22:06:26

技术分析

区块链相关疑问解析

2023-1-20 11:34:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索