@canvas-js/ core (中文(简体) )
此套件导出 a Canvas 用于手动的类
即时化 Canvas 应用程序 .
如果您想要精细控制何时使用此软件包
应用程序开始/停止。 否则,你可以使用 useCanvas 内
@canvas-js/hooks,它具有相同的 API,但处理初始化
内在反应为你.
目录
安装
$ npm i @canvas-js/core
如何运作
在引擎盖下,每个 Canvas 应用程序复制并执行 a
已签名动作的日志, 来源于 GossipLog, 有读取/写入访问权限
改为模型DB数据库.
每项申请都接受若干论点:
contract选择扩展的类Contract,或含有 JS 模块的字符串,导出扩展的默认类Contract。 。 。 .topic取一个字符串snapshot(可选)Snapshot为应用程序提供初始数据库内容的对象.signers(可选的)需要一系列的签名符,这允许在应用程序中添加不同的认证方法.
使用 await Canvas.initialize 以启动应用程序。 (关于同步初始化,参见 Canvas Loadable.ts.)
要将应用程序连接到其它同步端点, 请使用 app.connect() 改为
启动 WebSocket 连接, 或 app.listen() 来聆听
服务器的 WebSocket 连接 .
或者说,用 app.startLibp2p() 启动 libp2p 节点.
程序启动后,您可以使用 app.actions 访问
您定义的每个动作 .
行动呼吁会签署并代理合同.
import { Canvas, Contract } from "@canvas-js/core"
class Chat extends Contract<typeof Chat.models> {
static models = {
posts: {
id: "primary",
user: "string",
content: "string",
updated_at: "integer",
},
}
async createPost(content: string) {
const { id, chain, address, timestamp, db } = this
const user = [chain, address].join(":")
await db.set("posts", { id, user, content, updated_at: timestamp })
}
async deletePost(postId: string) {
const { chain, address, db } = this
const post = await db.get("posts", postId)
if (post === null) {
return
}
const user = [chain, address].join(":")
if (post.user !== user) {
throw new Error("not authorized")
}
await db.delete("posts", postId)
}
}
const app = await Canvas.initialize({
topic: "example.xyz",
contract: Chat,
})
await app.actions.createPost("hello world!")
const results = await app.db.query("posts", {})
// [
// {
// id: '09p5qn7affkhtbflscr663tet8ddeu41',
// user: 'did:pkh:eip155:1:0x79c5158f81ebb0c2bcF877E9e1813aed2Eb652B7',
// content: 'hello world!',
// updated_at: 1698339861041
// }
// ]
API 密码
@././packages/core/src/types.ts