默克尔树如何帮助验证区块链中的区块内容

How can merkle trees help validate the content of a block in a blockchain

据我了解,merkle-tree 可用于通过递归地将哈希函数应用于块内容来分离块的实际交易(或其他内容)及其验证过程。

这使得实现simplified payment validation(或块内任何其他数据的验证)成为可能。

链接的定义指出 SVP 是

[...] method for verifying if particular transactions are included in a block without downloading the entire block.

如果 merkle 树是一种检查特定交易是否属于区块的方法,这意味着我们不 "trust the block" 因此正在检查搜索到的交易的哈希值是否属于区块的一部分树。如果我们不信任该块(或该块的原始验证者),我们怎么会信任 merkle 树,它也可能是伪造的(或者不是?)。

我们是否"just"依赖于值是伪随机的事实,并且很难创建具有相同根值但节点值不同的假树?

谢谢!

理解默克尔树
Merkle 树允许我们在分类帐的单个块中复用多个交易。树的每个叶节点代表一个事务。而所有其他节点都是其 children 的哈希值。

这样做有什么好处?
交易块将只需要存储默克尔树的根。 SPV 声明的目的是任何在链上进行交易的客户都可以只存储从根到他们交易的哈希路径,而不是存储整个分类账,其规模可能非常大。

我们不信任这个区块?
一旦你的交易被处理,你可以通过跟踪从块中提供的根到作为你的交易的叶节点的路径来验证它是否已被添加到分类帐中。因此,您验证以确保您的交易是否已实际处理。

可以造假吗?
不可以。一旦一个区块被主链接受,通常是在比特币中添加大约 5 或 6 个区块,您的交易就不可逆转。区块链的概念是分类帐是不可变的。这意味着 merkle 树的根也永久存储在账本中,无法修改。现在要跟踪您的交易,您可以只存储 headers 和从根目录到您的交易的路径。