Python区块链服务及API实现
下面我将创建一个完整的区块链服务,并使用Flask封装为RESTful API接口。这个实现包含区块链核心功能、工作量证明机制、交易处理、节点共识和网络同步等功能。
import hashlib
import json
import time
from uuid import uuid4
from flask import Flask, jsonify, request
import requests
from urllib.parse import urlparse
class Blockchain:
def __init__(self):
self.chain = []
self.current_transactions = []
self.nodes = set()
# 创建创世区块
self.new_block(previous_hash='1', proof=100)
def new_block(self, proof, previous_hash=None):
"""
创建新区块
:param proof: 工作量证明
:param previous_hash: 前一个区块的哈希值
:return: 新的区块
"""
block = {
'index': len(self.chain) + 1,
'timestamp': time.time(),
'transactions': self.current_transactions,
'proof': proof,
'previous_hash': previous_hash or self.hash(self.chain[-1]),
}
# 重置当前交易列表
self.current_transactions = []
self.chain.append(block)
return block
def new_transaction(self, sender, recipient, amount, data=None):
"""
创建新的交易
:param sender: 发送方地址
:param recipient: 接收方地址
:param amount: 交易金额
:param data: 附加数据(可选)
:return: 包含此交易的区块索引
"""
self.current_transactions.append({
'sender': sender,
'recipient': recipient,
'amount': amount,
'data': data,
'timestamp': time.time(),
'transaction_id': str(uuid4()).replace('-', '')
})
return self.last_block['index'] + 1
@property
def last_block(self):
"""返回链中的最后一个区块"""
return self.chain[-1]
@staticmethod
def hash(block):
"""
计算区块的SHA-256哈希值
:param block: 区块
:return: 哈希值
"""
# 确保字典是有序的,否则哈希值会不一致
block_string = json.dumps(block, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
def proof_of_work(self, last_proof):
"""
简单的工作量证明算法:
- 查找一个数p',使得hash(pp')以4个0开头
- p是上一个区块的证明,p'是新的证明
:param last_proof: 上一个区块的证明
:return: 新的证明
"""
proof = 0
while self.valid_proof(last_proof, proof) is False:
proof += 1
return proof
@staticmethod
def valid_proof(last_proof, proof):
"""
验证证明:是否hash(last_proof, proof)以

最低0.47元/天 解锁文章

2873

被折叠的 条评论
为什么被折叠?



