2

我想在 holochain 中显示特定应用程序的所有用户列表,以使活跃用户能够与某人达成协议。鉴于数据流的链接性质,获取所有用户列表的最佳实践是什么?

创建一个链接到所有用户以访问完整用户列表的中央代理是否有意义?有没有更好的方法?

4

1 回答 1

5

来自 DNA 哈希的链接(不推荐;阅读下面的锚点)

每个用户都可以在genesis()函数中从 DNA 哈希链接到他们自己——DNA 哈希是 DHT 上每个人都知道的一个哈希。那么你需要做的就是getLinks(App.DNA.Hash, "user")把它们全部拿走。(注意,它可能会成为一个巨大的列表。我也为 DNA 哈希附近的可怜节点感到难过……这是要存储的大量元数据。

在创世纪中这样做

这可以在创世函数中完成。如果你不介意的话,我会用旧的 holochain-proto 语言来做:

function genesis() {
    commit({ Links: [ { Base: App.DNA.Hash, Link: App.Key.Hash, Tag: "registered_user" } ] };
}

这将为每个加入的新人创建一种“注册代理”的东西。

这种方法的问题

这有点反模式,因为 DNA 的冗余副本也存在于 DHT 中,节点位于 DNA 的 DHT 散列邻域中的可怜的灵魂将比其他人有更高的负载。现在我会推荐锚点。锚点不过是由字符串条目 + 链接组成的模式。因此,您将创建一个内容为 的锚点"registered_users",并从该锚点链接到任何加入的代理。仍然为持有锚条目的人创建一个热点,但预计您的应用将有几个这样的锚,至少它们不必全部挂起一个 DNA 哈希。

与锚链接

anchors mixin (目前仅与 hc-proto 兼容)具有创建锚点的幂等函数,因此每个用户都可以安全地调用anchor()而无需重新创建现有锚点。

于 2018-11-22T23:07:10.323 回答