分类: 协议

  • 🔒 Merkle DAG的可验证性

    在构建去中心化网络的数据结构时,使用加密强度的哈希算法来生成内容标识符(CID),为我们的数据提供了高度的可验证性。当用户通过内容地址检索数据时,他们总是可以自己计算CID,以确保获得了所需的内容。这种机制不仅保证了数据的永久性(通过内容地址的数据永远不会改变),还提供了防止恶意篡改的保护(恶意行为者无法在用户未意识到的情况下诱使其下载错误的文件)。

    🌳 Merkle DAG的特点

    在Merkle DAG中,每个节点的CID依赖于其每个子节点的CID。因此,根节点的CID不仅唯一标识该节点,还独特地标识整个DAG。这意味着我们可以将CID的安全性、完整性和永久性保障扩展到整个数据结构,而不仅仅是它所包含的数据。

    想象一下,你在编辑过程中临时备份了一个文件目录,几个月后发现这两个目录并不相同。这时,你可以计算每个备份的Merkle DAG:如果根目录的CID匹配,你就可以安全地删除一个备份,从而释放硬盘空间!

    🌟 任何节点都可以是根节点

    DAG可以视为递归数据结构,每个DAG由更小的DAG构成。在我们的示例中,CID “baf…8″标识一个DAG,而CID “baf…6″也标识一个DAG,只是它识别的是一个更小的子图。只要在正确的上下文中,这两个节点都是根节点。

    这一特性极为强大且实用。当我们检索结构为DAG的内容时,我们不必检索整个DAG:我们可以选择检索一个子图,使用其顶节点的CID来识别(这个子图的顶节点将成为其根节点)。如果我们想与他人分享这个子图,我们只需发送子图的CID,而无需包含我们原本检索的数据的上下文。如果我们想将这个子图嵌入到一个不同的、更大的DAG中,我们也可以做到,因为DAG的CID(即其根节点的CID)依赖于其后代的根节点,而不是其祖先。

    🔄 确保存在根节点

    有时,我们的数据没有立即呈现单一的根节点:这并不是DAG的严格要求。例如,考虑以下员工层级结构,其中有两个没有上级的经理和一个有两个经理的员工。

    在这种情况下,没有单一节点可以作为所有五个节点的根节点,因此无法使用任何baf…1-5来共享或检索整个DAG。然而,这并不妨碍我们创建一个新的DAG:我们可以通过创建一个附加节点,使“Asif”和“Ciara”节点作为其子节点,从而使用这个新节点作为根节点。

    另一种选择是将“Asif”或“Ciara”作为各自的根节点,创建两个独立的数据结构(Padma的节点将同时包含在这两个DAG中)。重要的区别在于,这将构成两个独立的Merkle DAG,因为你无法从其中一个根节点导航到该数据集中的所有节点(DAG中的链接是有向的,而“Padma”和“Ciara”之间没有链接,因此无法从“Asif”的根节点到达“Ciara”或“Aiden”)。


    参考文献

    1. ProtoSchool. (n.d.). IPLD Tutorial | Merkle DAGs: Structuring Data for the Distributed Web (Lesson 5).
    2. Protocol Labs. (n.d.). Overview of IPFS and Filecoin.

    通过了解Merkle DAG的可验证性和灵活性,我们能够更有效地构建和管理去中心化网络中的数据结构,确保数据的安全性和完整性。让我们继续深入探索更多精彩内容!

  • 🌟 正确结构化数据的优势

    在去中心化网络的世界里,数据的结构与组织显得尤为重要。我们在ProtoSchool的《Merkle DAG教程》中了解到,数据结构的选择将直接影响我们与数据的互动方式。想象一下,一个包含数年照片的图库,每张图片展现了不同的人、地方和事件。我们可以用多种方式来构建这个数据,甚至选择不构建任何结构!然而,每一种选择都将产生重要的后果。

    📂 结构的意义

    数据的结构不仅是为了美观,它更像是一个索引,直接影响我们找到和检索特定图片的速度。结构还可以为数据增加语义,通过将相关对象进行分组,帮助我们更好地理解和管理信息。

    例如,考虑以下的目录结构:

    pics
    ├── cats
    │   ├── 2018-02-23-tabby.png
    │   └── 2019-12-16-black.png
    └── fish
        ├── 2017-03-05-freshwater.png
        ├── 2018-04-14-tropical.png
        └── 2020-10-02-blowfish.png

    在这个示例中,我们有一个名为“pics”的根目录,里面包含了我们的整个照片集合。我们将照片分为“cats”和“fish”两个子目录,以便根据主题进行分类。每张照片的文件名还反映了拍摄日期,这种结构帮助我们快速识别文件的相关性。例如,“2018-04-14-tropical”与“fish”和“pics”有直接的联系,而“pics”则是这个文件所包含集合的更一般描述。

    🔄 结构化的权衡

    没有一种绝对最佳的数据结构方式;每种选择都伴随着显著的权衡。随着数据集的规模扩大,量身定制其结构以适应我们的使用和访问方式变得尤为重要。在这个例子中,按照动物类型组织照片使我们能够轻松查找特定动物的图片。但如果我们想要找到所有文件中时间戳最早的图片,这就会变得相对困难,需要逐个查看所有目录。

    如果我们的目录中有成千上万的照片,这种查找将会极其繁琐。相反,如果我们将照片按照拍摄日期的先后进行组织,情况将会完全不同。

    🛠️ 数据结构与CID的结合

    结构赋予我们的数据意义和组织,而内容标识符(CID)让我们能够在去中心化网络中以安全、可验证且无需协调的方式引用数据。在接下来的课程中,我们将看到如何构建可内容寻址的数据结构,使我们能够同时拥有这两种强大的能力!

    通过理解数据结构的重要性和优势,我们能够更有效地管理和访问信息,使去中心化网络的潜力得以充分发挥。


    参考文献

    1. ProtoSchool. (n.d.). IPLD Tutorial | Merkle DAGs: Structuring Data for the Distributed Web (Lesson 2).
    2. Protocol Labs. (n.d.). Overview of IPFS and Filecoin.

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网