跳到主要内容

使用 @blocklet/did-space-js 读写 DID Space

概览

概览

应用在大多数情况下希望能够读写用户在 DID Spaces 上的数据。一旦获取了 DID Space 的 endpoint,只需集成 @blocklet/did-space-js SDK,即可轻松实现对 DID Space 的读写操作。

先决条件

  • 您已经清楚如何在您的应用中引导用户连接 DID Spaces,并成功获取 DID Space endpoint,可以参考: Get the endpoint of DID Space

代码示例

你可以本地使用 blocklet create 命令创建一个集成了 DID Spaces 的待办事项列表模板,也可以参考代码仓库 https://github.com/blocklet/create-blocklet/tree/main/packages/create-app/templates/todo-list-example

javascript
╰─➤  blocklet create
blocklet create v1.16.37-beta-20250108-010153-e4bcd256
Need to install the following packages:
create-blocklet@0.9.14
Ok to proceed? (y) y

(node:82979) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)

                 Powered By
     _             ____  _            _
    / \   _ __ ___| __ )| | ___   ___| | __
   / _ \ | '__/ __|  _ \| |/ _ \ / __| |/ /
  / ___ \| | | (__| |_) | | (_) | (__|   <
 /_/   \_\_|  \___|____/|_|\___/ \___|_|\_\

            Create Blocklet v0.9.14

✔ Project name: … todo-list
? Choose one or more blocklet templates: ›
Instructions:
    ↑/↓: Highlight option
    ←/→/[space]: Toggle selection
    [a,b,c]/delete: Filter choices
    enter/return: Complete answer

Filtered results for: Enter something to filter

◯  [dapp] react + express.js
◯  [dapp] react + express + typescript
◯  [dapp: did-wallet] Full stack app (react.js + express.js) with DID Wallet integration
◉  [dapp: todo-list] react + express + typescript + DID Spaces // select did spaces template
◯  [dapp: did-connect] Full stack app (react.js + express.js) with DID Connect integration
◯  [dapp] solid + express.js
◯  [dapp] vue3 + express.js
◯  [dapp] svelte + express.js
◯  [static] react
◯  [static] solidjs

操作流程

安装 @blocklet/did-space-js

javascript
yarn add @blocklet/did-space-js
// pnpm install @blocklet/did-space-js
// npm install @blocklet/did-space-js

写入数据

通过以下代码,您可以将数据写入用户的 DID Space 中:

javascript
  const { SpaceClient, PutObjectCommand } = require('@blocklet/did-space-js');

  const spaceClient = new SpaceClient({
    endpoint,
    wallet,
  });

  await spaceClient.send(
    new PutObjectCommand({
      key: 'test.txt',
      data: 'hello world!',
    })
  );

数据写入成功后,您可以在 DID Space 上进入应用的组件(z8iZmWXt56EZqA5Y2VcmUX6qFhZaj5w7pFQx9)根目录,查看刚才写入的数据:

image.png

读取数据

通过以下代码,你可以从 DID Space 读取用户的数据:

javascript
  const { SpaceClient, GetObjectCommand } = require('@blocklet/did-space-js');

  const spaceClient = new SpaceClient({
    endpoint, // DID Space endpoint
    wallet, // Blocklet Wallet
  });

  const { data } = await spaceClient.send(
    new GetObjectCommand({
      key: 'test.txt',
    })
  );

  console.log(await streamToString(data)); // 'hello world!'

数据读取成功之后,会返回一个 data 对象,你可以通过 data 对象获取数据。

删除数据

通过以下代码,你可以从 DID Space 删除用户的数据:

javascript
  const { SpaceClient, DeleteObjectCommand } = require('@blocklet/did-space-js');

  const spaceClient = new SpaceClient({
    endpoint,
    wallet,
  });

  await spaceClient.send(
    new DeleteObjectCommand({
      key: 'test.txt',
    })
  );

更多

如果你想了解更多用法,请参阅 https://www.arcblock.io/docs/did-space-js