如何隔离 Gunjs 数据库?

Fre*_*roo 6 javascript gun gundb

我已经尝试 GunJs 几天了,我真的很喜欢它。作为一个入门项目,我关注了Fireship 聊天 dapp 视频,旨在构建您自己的聊天。

问题是,既然我已经完成了教程,我想创建自己的聊天。然而,由于某种原因,如果我在自己的应用程序中获得一个“聊天”节点,它似乎会在与在线教程相同的“聊天”节点上进行操作。

onMount(() => {

    // Get Messages in large chat
    db.get('chat')
    .map()
    .once(async (data, id) => {
        if (data) {
            // key for E2E - to do: change for web3
            const key = '#foo';

            var message = {
                //transform the data
                who: await db.user(data).get('alias'),
                what: (await SEA.decrypt(data.what, key)) + '',
                when: GUN.state.is(data, 'what'), 
            };

            if (message.what) {
                messages = [...messages.slice(-100), message]
            }
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

如果我更改加密密钥,情况也会如此(然后消息将变得未定义)。由此产生多个问题:

  • 图节点名称在整个 GunDb 中是否唯一?
  • 当两个基于枪的应用程序调用同一节点名称时,如何处理冲突?
  • 这个问题通常是通过使用 'header' 属性进行过滤来解决的吗?
  • 如何让它只接收我的数据?

即使我已经阅读了大部分文档,但在理解应用程序之间的图表通常如何分离时,我似乎仍然缺少一些东西。任何有关其工作原理的见解将不胜感激。

Yok*_*sis 6

图节点名称在整个 GunDb 中是否唯一?

是的。

当两个基于枪的应用程序调用同一节点名称时,如何处理冲突?

你不知道。预期的结果是,它们会互相覆盖。

这个问题通常是通过使用 'header' 属性进行过滤来解决的吗?

我认为这不是正确的做法。

如何让它只接收我的数据?

使用您自己的中继服务器。

结论:gunDB 并不真正关心谁获取/放置数据。如果你想保护你的数据,请使用你自己的中继服务器(不是公共的),并将数据放在你的用户空间中。用户空间对公众来说是只读的,但对所有者来说是读/写的。