查看原文
其他

互联网计算机:Canister Timers

Dfifans Internet Computer 2023-07-20


与其他区块链不同,互联网计算机可以在指定的延迟或定期后自动执行容器智能合约,自 12 月以来,早期采用者就可以使用 Canister Timers 功能。
仅在三个月内,计时器就融入了许多内部和社区项目:OpenChat、比特币集成、ckBTC、Azle 等等……
虽然计时器还处于早期阶段,但过去一个月的使用量已经翻了一番。


示例
下面是一些鼓舞人心的模式,计时器可能会派上用场。
记忆化
存储昂贵操作的结果并返回缓存的结果。
例如,容器可以每 15 分钟对 Coinbase 进行一次昂贵的 HTTP 调用以更新汇率,使用更新之间的缓存汇率。
这种模式可能是最常用的一种,例如,它在生产 Bitcoin Integration ckBTC Minter 和 Rosetta API Total Value Locked canisters 中。
限时活动
在特定日期和时间安排一次性任务。
例如,在 SNS 发布活动期间,治理代币销售在特定时间点开始和结束。
非常长的计算
将一个很长的计算拆分成多个块。
借助确定性时间分片功能,互联网计算机可以执行数十亿条指令,而不会阻塞子网进程,但即使是数十亿也有其限制,因此对于更长时间的执行,计时器可能会很方便。
例如,考虑一个生成许多资产的容器。


  • 开始:用户通过调用资产生成器容器来启动流程,容器创建零延迟 Canister Timer 以生成第一个资产,然后立即回复用户:“0% done so far”。

  • 执行上下文的分离:实际的资产生成发生在计时器处理程序中,请注意,生成过程中的任何陷阱都不会影响进度报告。

  • 状态报告:生成第一个资产后,容器再次使用零延迟容器计时器安排下一个资产,用户不时跟踪进度,容器会立即报告“到目前为止已完成 n%”。

  • 结束:重复该过程,直到生成所有资产。

计时器的故事
Canister Timer 并不是所有的新功能,从互联网计算机的起源开始,就有了 heartbeats 周期性的容器调用,其间隔接近区块链最终确定率(1s)。
Heartbeats 工作正常,并继续工作得很好,有许多基于此的生产解决方案,但是因为 heartbeats 间隔很短而且没有办法调整间隔或暂停,所以 heartbeats 对于许多用例来说成本太高了。
DFINITY 工程师与社区一起提出了以下解决方案:
  • 保持当前 heartbeat 功能不变以实现向后兼容性,然后,根据 heartbeats 体验和实际用例,实现一个新功能 —— Canister Timers。

  • 简约的协议级别更改,互联网计算机协议通过 ic0.global_timer_set() 系统 API 调用和 canister_global_timer 处理程序支持每个容器的单个发射计时器(请参阅互联网计算机接口规范)。

  • 方便的 CDK 定时器库,该库包装了简约的协议实现,实现了多个周期性定时器,容器开发人员可以使用 Rust 或 Motoko 的 CDK 定时器库享受熟悉的定时器功能。

这种方法有助于协议的更改,并且可以在不破坏现有容器的情况下轻松改进 CDK 库中的功能。
新定时器和旧的 heartbeats 之间的三个主要区别:
  • 费用heartbeats 在设计上是周期性的,禁用 heartbeats 的唯一方法是将容器升级到不导出方法的版本 canister_heartbeat,计时器通过允许安排一次性任务来解决这个问题,从而降低总体成本。

  • 灵活性heartbeat 间隔是实现定义的,无法调整,虽然计时器仍然不提供严格的调度保证,但保证遵守容器开发人员指定的最小延迟。

  • 可组合性heartbeats 是全局的,因此不可能在单个项目中使用不同的 heartbeats 库,定时器通过提供支持多个定时器的 CDK 库解决了这个问题。

在 Rust 中使用定时器
要在 Rust 项目中使用新功能,只需添加库:


它可以使用了:


有关详细信息,请参阅 Rust 后端教程 - 使用计时器:
  • internetcomputer.org/docs/current/developer-docs/backend/rust/timers

在 Motoko 中使用定时器
Motoko 是一种无缝支持互联网计算机编程模型的编程语言,可以更轻松地利用区块链的独特功能。
Motoko 中的定时器也是小菜一碟:


有关详细信息,请参阅 Motoko 开发人员指南 - 计时器:
  • internetcomputer.org/docs/current/motoko/main/timers

其它参考文献
后端开发者指南 - 周期性任务和定时器:
  • internetcomputer.org/docs/current/developer-docs/backend/periodic-tasks

Rust 示例 - 周期性任务和计时器(比较定时器和 heartbeats 的成本):
  • github.com/dfinity/examples/tree/master/rust/periodic_tasks

如果您有任何问题/建议或只是想见见互联网计算机开发人员和 DFINITY 工程师,请加入 forum.dfinity.org。


作者:Andriy Berestovskyy翻译:Catherine

-              -


互联网计算机发行“流动性比特币”,以实现更快、更便宜的 BTC 交易

NNS 和 ICP 代币指标季度报告,2023 年第一季度

创新无国界:ICP.Lab 虚拟化





你关心的 IC 内容
技术进展 | 项目信息 | 全球活动


长按关注 IC 微信公众号

掌握最新资讯


*添加小助手微信 comiocn 进交流社群


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存