跳转到主要内容

概览

本指南演示如何在 Anchor 框架下,借助 MagicBlock 的 Ephemeral Rollups(ER) 实现 crank。整体流程如下:
  1. 在 Solana 基础层初始化 counter
  2. 将 counter account 委托到 Ephemeral Rollup 以获得更快执行
  3. 调度一个自动递增 counter 的 crank 任务
  4. 按指定间隔自动执行 crank
  5. 完成后将 account 取消委托并提交回 Solana 基础层

执行流程

核心组成部分

被调度的函数

假设你想为一个 counter 调度下面这个简单的递增指令。

调度递增函数

核心的 crank 调度逻辑如下:
关键点:
  • 创建一个用于递增 counter 的指令
  • 将其序列化为发送给 MagicBlock 的 ScheduleTask 指令
  • 使用 CPI(Cross-Program Invocation)调用 MagicBlock program
  • 由 MagicBlock program 负责实际的调度与执行

调度参数

ScheduleIncrement 上下文

重要说明:这里使用 AccountInfo 而不是 Account<Counter>,以避免 Anchor 在 CPI 调用后重新序列化过期数据。