以下是一个基于Python的简单区块链实现示例,包含核心功能及详细注释,后续将解释其技术架构和实现逻辑。
“`python
blockchain.py
import hashlib
import json
from time import time
from typing import List, Dict
class Blockchain:
def __init__(self):
self.chain: List[Dict] = []
self.pending_transactions: List[Dict] = []
创建创世区块
self.new_block(previous_hash=’1′, proof=100)
def new_block(self, proof: int, previous_hash: str = None) -> Dict:
block = {
‘index’: len(self.chain) + 1,
‘timestamp’: time(),
‘transactions’: self.pending_transactions,
‘proof’: proof,
‘previous_hash’: previous_hash or self.hash(self.chain[-1]),
}
self.pending_transactions = []
self.chain.append(block)
return block
@property
def last_block(self) -> Dict:
return self.chain[-1]
@staticmethod
def hash(block: Dict) -> str:
block_string = json.dumps(block, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
def proof_of_work(self, last_proof: int) -> int:
proof = 0
while not self.valid_proof(last_proof, proof):
proof += 1
return proof
@staticmethod
def valid_proof(last_proof: int, proof: int) -> bool:
guess = f'{last_proof}{proof}’.encode()
guess_hash = hashlib.sha256(guess).hexdigest()
return guess_hash[:4] == “0000”
def new_transaction(self, sender: str, recipient: str, amount: int) -> int:
self.pending_transactions.append({
‘sender’: sender,
‘recipient’: recipient,
‘amount’: amount,
})
return self.last_block[‘index’] + 1
示例用法
if __name__ == ‘__main__’:
bc = Blockchain()
添加交易
bc.new_transaction(“Alice”, “Bob”, 5)
bc.new_transaction(“Bob”, “Charlie”, 3)
挖矿生成新区块
last_block = bc.last_block
last_proof = last_block[‘proof’]
proof = bc.proof_of_work(last_proof)
bc.new_block(proof)
print(“区块链结构:”, json.dumps(bc.chain, indent=2))
“`
技术说明(约800字)
1. 数据结构设计
本区块链采用链式结构存储区块,每个区块包含以下核心字段:
– index:区块高度标识
– timestamp:区块创建时间戳
– transactions:当前区块包含的交易列表
– proof:工作量证明数值
– previous_hash:前序区块哈希值
通过`previous_hash`字段实现区块的链式连接,任何对历史区块的篡改都会导致后续哈希值不匹配。
2. 加密哈希机制
采用SHA-256算法生成区块哈希:
“`python
@staticmethod
def hash(block: Dict) -> str:
block_string = json.dumps(block, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
“`
该方法将区块字典序列化为JSON字符串后进行哈希计算,`sort_keys=True`确保字段顺序一致性。
3. 工作量证明(PoW)
实现简单的工作量证明算法:
“`python
def proof_of_work(self, last_proof: int) -> int:
proof = 0
while not self.valid_proof(last_proof, proof):
proof += 1
return proof
@staticmethod
def valid_proof(last_proof: int, proof: int) -> bool:
guess = f'{last_proof}{proof}’.encode()
guess_hash = hashlib.sha256(guess).hexdigest()
return guess_hash[:4] == “0000”
“`
要求计算出的哈希值前四位为0,通过暴力搜索找到符合条件的proof值。增加前导零数量可提升挖矿难度。
4. 交易处理
交易暂存至`pending_transactions`列表,待挖矿时打包进新区块:
“`python
def new_transaction(self, sender: str, recipient: str, amount: int) -> int:
self.pending_transactions.append({
‘sender’: sender,
‘recipient’: recipient,
‘amount’: amount,
})
return self.last_block[‘index’] + 1
“`
该方法返回即将包含该交易的区块高度,提供交易确认的预期位置。
5. 网络共识机制
当前实现为单节点版本,实际分布式系统需补充:
– 节点注册/发现协议
– 最长链共识算法
– 网络广播机制
– 冲突解决策略
6. 运行示例
执行脚本将:
1. 初始化区块链并创建创世区块
2. 添加两笔模拟交易
3. 执行PoW计算找到有效proof
4. 生成包含交易的新区块
5. 输出完整的区块链结构
7. 扩展方向
– 智能合约:增加交易脚本解析引擎
– P2P网络:使用WebSocket实现节点通信
– 持久化存储:集成SQLite/LevelDB数据库
– 加密钱包:添加椭圆曲线数字签名
– 共识优化:改为权益证明(PoS)机制
该实现展示了区块链的核心技术原理,实际生产系统需要添加网络层、安全机制和性能优化模块。通过调整PoW难度系数和区块容量参数,可平衡系统安全性与吞吐量需求。