以下是一个基于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难度系数和区块容量参数,可平衡系统安全性与吞吐量需求。