Cardano JS SDK 预测
这个软件包是一个通用投影类型和公用事业的库.
[TIP] 事件驱动架构中的预测和阅读模型指南
如果您有兴趣投影到 PostgreSQL 数据库,请查看 投影类型 软件包.
如果你对莱斯运行的投影仪应用感兴趣,请看 设置 财务报告和审定财务报表 读取 内 cardano-services 软件包.
先决条件
为了了解 cardano-js-sdk 首先你需要基本了解:
类型
投影事件“ 外部Props”
所有预测从获得来源/制作者开始1个,这是一个 Observable<ProjectionEvent<{}>>。这些事件与链同步事件非常相近,但有一些重要的区别:
- 块格式与类型兼容
@cardano-sdk/core软件包. - 事件包括一些额外的属性 :
{eraSumaries, genesisParameters, epochNo, crossEpochBoundary}。 。 。 . RollBackward事件包括块数据(而不是仅仅指定回滚点),并且为 每个 向后滚动.
外推( 通用参数)
源可观测到的可被管道通过一系列RxJS运算符,这些运算符可能会给事件添加一些属性. 简言之, ProjectionEvent<T> = ProjectionEvent<{}> & T。详见 地图员。 。 。 .
稳定窗口
自兹 ProjectionEvent{eventType=RollBackward} 包括块数据,我们必须存储一些数字( 至少 k,这是最新块的"安全参数",这样如果一个叉子/回滚发生,我们可以调用 StabilityWindowBuffer.getBlock(hash) 用于构建有效的 ProjectionEvent。 。 。 .
可观测卡尔德诺节点
这是我们与卡尔达诺节点的链条同步和本地状态查询协议的接口. 唯一可用的执行 cardano-js-sdk 实值 OgmiosObservableCardanoNode。 。 。 .
公用事业
来自卡尔德诺节点的靴子
创建投影源( E)Observable<ProjectionEvent>来源:
---
title: Bootstrap Algorithm
---
flowchart LR
subscribe[Subscribe] --> find-intersect{Find node\nintersection\nwith local tip}
find-intersect --> |Found| start[Start ChainSync\nfrom intersection]
start --> get-event{Get event\nfrom node,\ncheck type}
get-event --> |RollBackward| get-block[Get block from StabilityWindowBuffer]
get-event --> |RollForward| hydrate
start --> hydrate[Hydrate event\nwith additional\npropertes]
hydrate --> emit[Emit\nProjectionEvent]
find-intersect --> |Not Found| get-block[Get block from\nStabilityWindowBuffer]
get-block --> rollback[Create\nRollBackward\nevent]
rollback --> hydrate
rollback --> wait[Wait for\nlocal tip change]
wait --> is-rollback-point{Is rollback point?}
is-rollback-point --> |No| get-block
is-rollback-point --> |Yes| started-sync{Already started\nChain Sync?}
started-sync --> |Yes| get-event
started-sync --> |No| find-intersect
地图员
预测通常是
- 解释块(如从所有交易中提取出一些相关的属性).
Mappers是包含 RxJS 运算符的命名空间,这些运算符处理ProjectionEvent(块)并发出一个具有一些额外属性的新事件对象. - 用它做一些事情(例如存储到数据库中).
举个例子:
// source$: Observable<ProjectionEvent<{}>>
source$.pipe(
// policyId is a parameter that should be provided
// by handle issuer, e.g. ADA Handle
Mappers.withHandles({ policyId }),
// type WithHandles = { handles: HandleOwnership; }
// Event type can also be inferred (no need for explicit type declaration)
tap((event: ProjectionEvent<WithHandles>) => {
console.log('Handles found by withHandles operator', event.handles);
})
);
其他用户
在记忆中窗口窗口
如果您的应用程序不需要持久性, 您可以使用模拟执行 稳定窗口,也可以用作 Bootstrap 的本地提示跟踪器(提供 Observable<TipOrOrigin>) (中文(简体) ).
1个目前我们观测到的投影源 不是纯粹的“生产者”,因为事件有 requestNext 用于控制源的方法。 这一点将来会有所改变.