2

几天来我一直在尝试 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]
            }
        }
    })
})

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

  • 图形节点名称在整个 GunDb 中是唯一的吗?
  • 当两个基于枪的应用程序调用相同的节点名称时,您如何处理冲突?
  • 这个问题通常是通过使用“标题”道具过滤来解决的吗?
  • 如何让它只接收我的数据?

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

4

1 回答 1

2

图形节点名称在整个 GunDb 中是唯一的吗?

是的。

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

你没有。预期的结果是,它们将相互覆盖。

这个问题通常是通过使用“标题”道具过滤来解决的吗?

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

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

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

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

于 2021-09-25T11:02:46.300 回答