以下是一个简单的区块链示例代码,它使用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)