当前位置: 首页 > 工具软件 > Ceramic > 使用案例 >

ceramic research

周阳成
2023-12-01

1 入口(账户,身份)

3ID DID

格式:

3idv1 = "did:3:<StreamId>"

由于DID 文档存储为 Ceramic 流,因此支持多个身份验证密钥和轮换这些密钥等功能
依赖于ceramic网络服务,使用参考self.id

1.selfid使用

 const getEthereumAuthProvider = async () => {
    const wrappedProvider = await getProvider();
    const signer = wrappedProvider.getSigner();
    const address = await signer.getAddress();
    return new EthereumAuthProvider(wrappedProvider.provider, address);
  };

  const getProvider = async () => {
    const provider = await web3ModalRef.current.connect();
    const wrappedProvider = new Web3Provider(provider);
    return wrappedProvider;
  };

2. 3ID DID resolver 3ID DID provider 3ID Connect

支持使用 authID 和 secret创建3id
权限

Key DID

不可修改

DataModel

使用

已注册的模型不需要配置,SelfId中默认可用

自定义的模型,加载使用

import { Core } from '@self.id/core'

const aliases = {
  definitions: {
    profile: 'kjzl6cwe1jw145cjbeko9kil8g9bxszjhyde21ob8epxuxkaon1izyqsu8wgcic',
  },
  schemas: {
    Profile:
      'ceramic://k3y52l7qbv1frxt706gqfzmq6cbqdkptzk8uudaryhlkf6ly9vx21hqu4r6k1jqio',
  },
  tiles: {},
}

const core = new Core({ ceramic: 'testnet-clay', aliases })

const profile = await core.get('profile', id)

创建模型

glaze model:add my-model schema MySchema '{"$schema":"http://json-schema.org/draft-07/schema#","title":"MySchema","type":"object","properties":{}}' --key=<your key>

glaze model:deploy my-model

注册

如果想共享,可以部署后向官方提交注册

思考

同一个StreamId频繁修改会影响性能
stream太多,需要聚合,多维度聚合如何实现
数据量大,如何整理,计算(链下统计)
目前一个流都是一个用户管控,不支持多用户

节点

个人认为作为协议方,不需要太关心这个。
开发连接测试节点即可
生产连接自己的节点更稳定,需要注册锚定服务
节点只关心相关的流

数据可用性

提交过程中重启或关闭,可能造成数据丢失
日志存储在IPLD上
状态存储在节点上
目前没有激励机制

总结

动态数据存储,基于did的索引,scheam的索引,适合用作web3的数据管理

开发框架为SELF.ID
包含用户认证 数据管理模块
用户认证默认采用3id did 能通过钱包进行用户认证,已封装REACT组件
更高级的功能可使用3ID DID resolver 3ID DID provider 3ID Connect 来实现

可以同时支持key did

数据模块
支持根据dataModel获取,设置数据
高级的读取流工具tile-loader 可以批量读取,提高客户端性能
更高级的用户相关可以使用DID data store

通过GLAZE套件发布自己的模型,所有调用实现同一个model的id

隐患:
提交过程中重启或关闭,可能造成数据丢失
目前没有激励机制

同一个StreamId频繁修改会影响性能
stream太多,需要聚合,多维度聚合如何实现
数据量大,如何整理,计算(链下统计)
目前一个流都是一个用户管控,不支持多用户

流数据会被定时的垃圾回收,要永久保存需要使用Pinning
最好让多个 IPFS 节点在不同的环境中运行并固定相同的流。

后续会支持归档

协议:
输入:
定义不同类型的model 尽量每次产生新的streamId

输出:
针对不同model聚合数据,可以考虑链下存储

 类似资料:

相关阅读

相关文章

相关问答