merkle树代码
时间: 2023-07-23 09:07:30 浏览: 71
下面是一个简单的 Python 实现 Merkle 树的代码示例:
```python
import hashlib
class MerkleTree:
def __init__(self, transactions):
self.transactions = transactions
self.tree = self._build_tree()
def _build_tree(self):
# 如果交易数为偶数,则复制最后一个交易
if len(self.transactions) % 2 != 0:
self.transactions.append(self.transactions[-1])
# 计算叶子节点的哈希值
leaf_nodes = [hashlib.sha256(tx.encode('utf-8')).hexdigest() for tx in self.transactions]
# 计算中间节点的哈希值
tree = []
for i in range(0, len(leaf_nodes), 2):
node_hash = hashlib.sha256((leaf_nodes[i] + leaf_nodes[i+1]).encode('utf-8')).hexdigest()
tree.append(node_hash)
# 递归构建树
while len(tree) > 1:
if len(tree) % 2 != 0:
tree.append(tree[-1])
level = []
for i in range(0, len(tree), 2):
node_hash = hashlib.sha256((tree[i] + tree[i+1]).encode('utf-8')).hexdigest()
level.append(node_hash)
tree = level
return tree[0]
def get_root_hash(self):
return self.tree
```
在上面的示例中,我们首先将交易列表作为 MerkleTree 类的构造函数参数传递。在 `_build_tree` 方法中,我们首先计算交易的哈希值,并将其存储在 `leaf_nodes` 列表中。然后,我们计算每个叶子节点的父节点的哈希值,并将其存储在 `tree` 列表中。最后,我们递归地构建树,直到只剩下一个根节点。
通过调用 `get_root_hash` 方法,我们可以获取 Merkle 树的根哈希。
阅读全文