blockchain 是一条包含前一个区块的哈希值的链。每个块由单个哈希树(或 Merkle 树)组成。我在讨论的是区块链的整体结构。

由于区块链的值位于哈希树内,那么在区块链内查找值的最佳方法是什么?我想遍历整个区块链以在树中搜索您希望找到的值是不可行的。在区块链中搜索块内的值时,我是否缺少搜索方法?

最佳答案

如果你所拥有的只是一个在每个区块中都有 Merkle 树的区块链,那么这个数据结构根据定义并没有提供任何有效搜索任何东西的方法:

  • Merkle 树的叶子中的所有哈希值本质上都是伪随机的,并且不包含有关内容的可用信息
  • 默克尔树节点中的所有散列都是伪随机位序列,由伪随机位序列(密码学上强的伪随机无意义平方,log N 次)串联而成的伪随机位序列
  • 指向前一个块的哈希值除了找到前一个块外一无是处(伪随机废话的 M 幂,其中 M 是块数)
  • 同上块本身的哈希值

  • 结论:不,区块的哈希值和 Merkle 树对于搜索信息本质上是无用的。它不仅“效率低下”,而且是在设计上对区块链中包含的数据进行了最无用的“索引”(因为一旦数据中的一个位翻转,哈希值就会完全改变)。如果你想在这样的数据结构中找到任何东西,除了在线性时间内遍历它之外,你绝对无能为力。所有这些哈希值所做的就是确保区块链不被篡改,仅此而已。

    然而, 没有人强制你每次想要在其中查找一些信息时都要遍历整个区块链。相反,你可以
  • 遍历整个区块链一次
  • 构建您需要的任何其他数据结构,以便在区块链中查找所需内容(索引、搜索树、图形、指纹,以及您可以从区块链中的数据构建的任何内容)

  • 然后在每一个要求你简单地
  • 使用预先计算的数据结构高效地执行您的查询

  • 并且每次附加一个新块时
  • 更新所有预先计算的数据结构。

  • 或者:偶尔重建你的数据结构,单独处理最后几个块。

    这与“互联网”非常相似。它是一个包含内容的节点网络。你如何在这些节点中找到任何东西?每次要查找任何东西时,是否都要遍历所有节点?不,你问一个搜索引擎。因为搜索引擎已经在后台完成了这项工作,并且访问了网络中的(部分)节点,并将内容编入索引,以便您可以轻松找到其中的内容。同样的事情,除了你的图是线性的(如果你忘记了孤立分支),并且之前添加到图中的节点不会经常改变(永远不会,除非有人不成比例地攻击你的区块链)。当您更新数据结构时,当然应该使用先前添加的节点的不变性来提高效率:如果您已经看过这些节点,则无需每次都重新扫描它们(不像在互联网中,以前的内容 inode 节点可以更改)。

    另一个(明显的)替代方案,如果您可以影响区块链的设计:提前考虑可能有用的东西,从一开始就将所需的数据结构烘焙到区块链中,这样不仅区块链本身,而且帮助导航区块链的数据结构不能轻易修改。

    关于blockchain - 在区块链中搜索项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48817283/

    10-12 18:48