📅  最后修改于: 2023-12-03 15:06:26.074000             🧑  作者: Mango
区块链是一种去中心化的分布式账本技术,具有高度透明性、去信任化、不可篡改等特点。而分布式账本则是区块链中的核心结构,它记录着每一次交易的信息和状态。
区块链分布式账本由多个节点组成,每个节点维护一个完整的账本副本。当有新的交易发生时,这个交易会被所有节点接收并验证,然后加入一个新的区块中,该区块又会被广播给其他节点,每个节点都会将该区块添加到自己的账本中。
分布式账本中的每个区块包含着一个或多个交易记录和它们的状态,每个区块都有自己的哈希值和时间戳,每个区块还包含了指向前一个区块的引用,这样就形成了一个不可篡改的链式结构。
由于所有节点都有完整的账本副本,因此分布式账本具有高度的鲁棒性和容错性。即使一些节点发生故障或被攻击,其他节点仍可以维护账本的完整性和一致性。
在区块链中,每个用户都有一个公钥和一个私钥,公钥可以被用来接收加密货币,而私钥则用于签署该用户所发出的交易以及对其进行身份验证。
因此,区块链分布式账本是一种去中心化、安全、可靠、不可篡改的交易记录和状态存储方式,它为区块链技术提供了强大的支持和保障。
class Blockchain:
def __init__(self):
self.chain = []
self.current_transactions = []
# 创建创世块
self.new_block(proof=100, previous_hash=1)
def new_block(self, proof, previous_hash=None):
"""
生成新块
:param proof: <int> 工作量证明算法提供的证明
:param previous_hash: (Optional) <str> 前一个块的hash值
:return: <dict> 新块
"""
block = {'index': len(self.chain) + 1,
'timestamp': time(),
'transactions': self.current_transactions,
'proof': proof,
'previous_hash': previous_hash or self.hash(self.last_block)}
# 重置当前交易记录
self.current_transactions = []
self.chain.append(block)
return block
def new_transaction(self, sender, recipient, amount):
"""
生成新交易信息,信息将加入到下一个待挖的区块中
:param sender: <str> 发送者地址
:param recipient: <str> 接收者地址
:param amount: <int> 金额
:return: <int> 本次交易的区块索引
"""
self.current_transactions.append({'sender': sender,
'recipient': recipient,
'amount': amount})
return self.last_block['index'] + 1
@staticmethod
def hash(block):
"""
生成块的 SHA-256 hash值
:param block: <dict> 块
:return: <str>
"""
# 对块排序并转化为字符串
block_string = json.dumps(block, sort_keys=True).encode()
# 返回其 SHA-256 值
return hashlib.sha256(block_string).hexdigest()
@property
def last_block(self):
#返回链中的最后一个块
return self.chain[-1]