116个版本

0.5.0-dev.12 2024年8月23日
0.5.0-dev.102024年7月17日
0.4.0-beta-dev.322024年3月27日
0.4.0-beta-dev.202023年12月22日
0.0.15 2022年7月28日

#389魔法豆

Download history 1169/week @ 2024-05-05 1084/week @ 2024-05-12 1386/week @ 2024-05-19 1339/week @ 2024-05-26 1590/week @ 2024-06-02 1344/week @ 2024-06-09 1371/week @ 2024-06-16 1436/week @ 2024-06-23 708/week @ 2024-06-30 1318/week @ 2024-07-07 1612/week @ 2024-07-14 539/week @ 2024-07-21 1631/week @ 2024-07-28 1028/week @ 2024-08-04 746/week @ 2024-08-11 875/week @ 2024-08-18

4,336 每月下载量
用于 44 个crate(10个直接使用)

CAL-1.0AGPL-3.0 WITH mif-exception

515KB
10K SLoC

hdi

Project Forum Chat

Twitter Follow

Crate API Docs

Holochain确定性完整性(HDI)是Holochain用于编写zome的数据模型和完整性工具集。

Holochain DNA的逻辑可以分为两部分:完整性和协调。完整性是hApp中定义数据类型和验证数据操作的组成部分。协调包括领域逻辑,并实现了操作数据的函数。

示例

一个具有数据定义和数据验证的完整性zome的示例可以在Holochain仓库的wasm工作区中找到:https://github.com/holochain/holochain/blob/develop/crates/test_utils/wasm/wasm_workspace/integrity_zome/src/lib.rs

数据定义

DNA的数据模型在完整性zome中定义。它们包含所有数据类型定义以及这些类型之间的关系。完整性zome完全是定义,不包含操作数据的函数。因此,hApp的数据模型是封装的,并且完全独立于编码在协调器zome中的领域逻辑。

MVC(模型、视图、控制器)设计模式可以作为一个类比。应用程序的完整性区域包括其模型层——定义数据形状的一切。在实践中,这意味着三件事

  • 条目类型定义
  • 链接类型定义
  • 一个验证回调,它限制了可以称为条目和链接的这些类型数据的种类(也参见 Op)。

协调区域包括应用程序的控制器层——实际写入和检索数据、处理签名会话以及在不同节点或单元格与其UI之间发送和接收消息的代码。换句话说,所有区域功能、init 函数、远程信号接收器和调度回调都将位于协调区域中。

这种方法的优点是

  • 只要完整性区域保持不变,DNA散列就保持不变。DNA的对等网络与其散列相关联。DNA散列的更改会导致新的对等网络。然而,协调区域中封装的域逻辑的更改不会影响DNA散列。因此,DNAs和hApps可以在不创建每个部署的新对等网络的情况下进行修改。
  • 完整性区域可以在DNAs之间共享。任何协调区域都可以导入完整性区域的数据类型并实现数据操作的功能。这种完整性和协调区域的组合性允许具有共享完整性区域的多种排列,即共享数据模型。

数据验证

完整性区域的第二个基本部分是数据验证。对于由动作产生的每个操作,都可以指定一个验证规则。可以验证数据类型和数据值。

所有这些验证规则都在 validate 回调中声明。每个验证权限都会为新动作执行它。

有一个名为 FlatOp 的辅助类型,可以在验证操作时轻松访问所有链接和条目变体。在许多情况下,此类型比裸 Op 更容易使用。 FlatOp 包含与 Op 相同的信息,但具有比 Op 的深层嵌套和简洁结构更平、更易于访问的数据结构。

match op.flattened()? {
    FlatOp::StoreEntry(OpEntry::CreateEntry { app_entry, .. }) => match app_entry {
        EntryTypes::A(_) => Ok(ValidateCallbackResult::Valid),
        EntryTypes::B(_) => Ok(ValidateCallbackResult::Invalid(
            "No Bs allowed in this app".to_string(),
        )),
    },
    FlatOp::RegisterCreateLink {
        base_address: _,
        target_address: _,
        tag: _,
        link_type,
        action: _,
    } => match link_type {
        LinkTypes::A => Ok(ValidateCallbackResult::Valid),
        LinkTypes::B => Ok(ValidateCallbackResult::Invalid(
            "No Bs allowed in this app".to_string(),
        )),
    },
    _ => Ok(ValidateCallbackResult::Valid),
};

在WASM工作区中查看完整性区域中的 validate 回调的示例:[https://github.com/holochain/holochain/blob/develop/crates/test_utils/wasm/wasm_workspace/validate/src/integrity.rs](https://github.com/holochain/holochain/blob/develop/crates/test_utils/wasm/wasm_workspace/validate/src/integrity.rs)。在该工作区中可以浏览更多验证示例。

许可

License: CAL 1.0

版权(C)2019 - 2024,Holochain基金会

本程序是免费软件:您可以在LICENSE文件(CAL-1.0)中提供的许可条款下重新分配和/或修改它。本程序是在希望它将是有用的希望下分发的,但没有任何保证;甚至没有对适销性或适用于特定目的的隐含保证。

依赖项

~10–27MB
~378K SLoC