Blockchain 在区块链中搜索项目

Blockchain 在区块链中搜索项目,blockchain,Blockchain,A是一个链,其中包含前一个块的哈希。每个块由单个哈希树(或Merkle树)组成。我正在讨论的是区块链的整体结构 既然区块链的值在散列树中,那么在区块链中寻找值的最佳方式是什么?我想,要遍历整个区块链,在树中搜索您希望找到的值是不可行的。在区块链中搜索块内的值时,我是否缺少一种搜索方法?如果您只有一个在每个块中都有Merkle树的区块链,那么根据定义,此数据结构不能提供任何有效搜索任何内容的方法: Merkle树叶中的所有散列本质上都是伪随机的,并且不包含关于内容的可用信息 merkle树节点中

A是一个链,其中包含前一个块的哈希。每个块由单个哈希树(或Merkle树)组成。我正在讨论的是区块链的整体结构


既然区块链的值在散列树中,那么在区块链中寻找值的最佳方式是什么?我想,要遍历整个区块链,在树中搜索您希望找到的值是不可行的。在区块链中搜索块内的值时,我是否缺少一种搜索方法?

如果您只有一个在每个块中都有Merkle树的区块链,那么根据定义,此数据结构不能提供任何有效搜索任何内容的方法:

  • Merkle树叶中的所有散列本质上都是伪随机的,并且不包含关于内容的可用信息
  • merkle树节点中的所有散列都是伪随机比特序列,由伪随机比特序列的串联散列形成(加密强伪随机无意义平方,
    logn
    times)
  • 指向前一个块的散列除了查找前一个块之外没有任何用处(伪随机无意义到
    M
    的幂,其中
    M
    是块的数量)
  • 块本身的散列也是如此
总之:不,块和Merkle树的散列对于搜索信息基本上是无用的。它不仅“低效”,而且是通过设计,对区块链中包含的数据进行了最无用的“索引”(因为数据中的一个位一旦翻转,散列就完全改变)。如果您想在这样的数据结构中找到任何东西,除了在线性时间内遍历它之外,您绝对无能为力。所有这些散列所做的只是确保区块链不被篡改,而不是其他

然而,每当你想在区块链中找到一些信息时,没有人强迫你遍历整个区块链。相反,你可以

  • 遍历整个区块链一次
  • 构建您在区块链中查找所需内容所需的任何其他数据结构(索引、搜索树、图形、指纹,以及您可以从区块链中的数据构建的任何内容)
然后在每一个请求上,你只需

  • 使用预先计算的数据结构高效地执行查询
每次追加一个新块时

  • 更新所有预计算的数据结构
或者:偶尔重建数据结构,单独处理最后几个块

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


另一个(明显的)选择,如果你能影响区块链的设计:提前考虑哪些可能有用,从一开始就将所需的数据结构烘焙到区块链中,这样不仅区块链本身,但是,帮助导航区块链的数据结构也不容易修改。

这是否同样适用于比特币和以太币,或者这两者的结构和搜索是否存在任何差异?@AyushKumar这仅适用于区块链,作为纯理论数据结构。如回答中所述,实际实现可能会在块中保存额外的元数据,以简化数据的检索。