Home
Connect Wallet
渡边
@0xEc
837B

如何基于 Rum 开发应用?

2022-12-21 09:57 Words count: 1449
帮助您开发 Rum 应用

Rum 可以提供一个去中心化同步内容的基础功能。

比如:

  • 你运行一个 Rum 节点 A
  • 我运行一个 Rum 节点 B
  • 我们两个节点互相连接、互相同步数据
  • 那么数据就是我们自己掌握的,你我都存储了一份

这是 Rum 能提供的基础功能。

当你自己这份数据丢了,可以从别人那里拿回来。听起来有点像是分布式数据库?是的,确实可以这么理解。

作为开发者,我们可以基于这个做什么呢?举例来说,假如你要做一个产品,你可以运行一个 Rum 节点,然后把产品的所有数据都存储在 Rum 节点里面。

假如这个 Rum 节点没有连接其他人,那么就是单机版,也就是说,数据存储在你个人电脑上,弄没了就是没了。这并不是去中心化的,和传统的数据库没有什么区别。

只有当多个 Rum 节点互相同步时,才是真正的去中心化。也就是变成了分布式的数据库,对吧。

从产品开发的角度,把 Rum 节点类比成分布式数据库,是合适的。那么接下来我们就可以了解一下,如何操作这个“数据库”,也就是说,如何写数据和读数据。

这里我们还需要了解另外一个东西 – Group。

假如你跑了一个 Rum 节点,你就可以根据需要,在节点上新建 group。简单解释一下就是:

  1. 一个节点上面可以建立无数个 groups
  2. 每个 group 都有一个 seed(种子)
  3. 我们通过 seed 来使用 group、同步 group、加入 group
  4. 一般我们开发一个 app,都是建一个 group,然后把数据都存储在里面就够了
  5. 你可以把 group 类比我们平时使用的云服务的对象存储,你建立一个 bucket,然后把数据都存储在里面

好,下面我们使用 Rum JS SDK 来示范一下

写一条数据:

import QuorumLightNodeSDK from 'quorum-light-node-sdk';
(async () => {
  const seed = 'rum://seed?xxx';
  const group = QuorumLightNodeSDK.cache.Group.add(seed);
  const wallet = ethers.Wallet.createRandom();
  const result = await QuorumLightNodeSDK.chain.Trx.create({
    groupId: group.groupId,
    object: {
      type: 'Note',
      content: 'send from JavaScript SDK',
    },
    privateKey: wallet.privateKey,
  });
  console.log(result);
})();

// { trx_id: '41f1e91e-5604-4539-8dee-7cf7e3ef5046' }

我们通过一个 seed,给一个 group 提交了一条内容,或者也称为一条 trx

结果返回的是这条 trx 的 id。

这条 trx 通过 Rum 节点的上链、同步之后,我们就可以它读取回来,如下:

import QuorumLightNodeSDK from 'quorum-light-node-sdk';

(async () => {
  const seed = 'rum://seed?xxx';
  const group = QuorumLightNodeSDK.cache.Group.add(seed);
  const result = await QuorumLightNodeSDK.chain.Content.list({
    groupId: group.groupId,
  });
  console.log(result);
})();

// [
//   {
//     Data: { type: 'Note', content: 'send from JavaScript SDK' },
//     Expired: 1657279269056000000,
//     GroupId: "8136923b-8203-4e08-bfe7-50eb3b558e2c",
//     Nonce: 1,
//     SenderPubkey: "Ak0RxoYwYhkAfg0ImkLh-ukRIHkoQ-Kw6QCRr_o83bmq",
//     SenderSign: "Dz436tcTh+NSUjF38oUBjXkIezVfENb/pit9BY1v8jZrjzcwu66YE8OFO9/MzRNIkhgTK2wulfmk51mzJz/9Txs=",
//     TimeStamp: "1657279239056000000",
//     TrxId: "41f1e91e-5604-4539-8dee-7cf7e3ef5046",
//     Version: "1.0.0",
//   }
// ]

这就是写和读的方法,具体的使用说明可以参考 Rum JS SDK

那么现在的问题就是如何通过写特定的数据,来实现你想要的功能,对吧?

这个问题我觉得最好使用例子来说明,rum-demo 就是这样一个真实的例子。

你通过使用它以及阅读它的代码实现,应该就可以弄明白整个来龙去脉。

这里还有一个很好的资源可以帮助你了解 Rum – awesome-quorum

希望能帮助到您开发自己的 Rum 应用。

(本文的 Github 链接:https://github.com/okdaodine/rum-demo/blob/main/intro.md)

Reward
7 0
0 times bought
•
4 times reward
0.0
Price(BTC)
4
Paid Times
$3.54
Revenue
0.0%
My Share(%)
Comments 0
Subscribe
渡边
@0xEc
837B
1 Posts 5 Subscribers 0 Subscribing
Joined at December 21, 2022
Didn't leave anything
Subscribe
© 2026 Quill
Rules Stats Help Github
如何基于 Rum 开发应用?
Reward