仅限操作员执行的指令,通过递增
Instance.current_tree_index 并重置提款根节点来轮换稀疏默克尔树,从而允许新的
epoch 执行 65,536 次提款。
托管程序正在从此稀疏默克尔树设计迁移至
链上 nonce 位图(上游跟踪中),届时该指令将变更为
RotateBitmap。本页内容准确反映当前托管程序的状态,
待该变更落地后将进行修订。
账户
| 账户 | 可写 | 签名者 | 描述 |
|---|---|---|---|
payer | ✓ | ✓ | 手续费支付方 |
operator | ✓ | 操作员签名者 | |
instance | ✓ | 托管实例 PDA(current_tree_index 已递增) | |
operator_pda | 证明签名者已配置的操作员 PDA | ||
event_authority | 用于 EmitEvent CPI 的事件权限 PDA | ||
private_channel_escrow_program | 托管程序(CPI 自引用) |
参数
| 参数 | 类型 | 描述 |
|---|---|---|
expected_current_tree_index | u64 | 重放防护;必须与 Instance.current_tree_index 匹配,否则调用失败 |
返回值
返回一个 TransactionBuilder,可用于构建并发送
交易。
示例
import { getResetSmtRootInstruction } from "../private-channel-escrow-program/clients/typescript/src/generated";const resetIx = getResetSmtRootInstruction({payer: operatorPayerSigner,operator: operatorSigner,instance: instancePda,operatorPda: operatorPdaAddress,eventAuthority: eventAuthorityPda,privateChannelEscrowProgram: ESCROW_PROGRAM_ID,expectedCurrentTreeIndex: currentTreeIndex // u64});
重要说明
- 仅限操作员:需要有效的
operator_pda,否则抛出InvalidOperatorPda异常 - 调用时
expected_current_tree_index必须等于Instance.current_tree_index; 过期值将抛出UnexpectedTreeIndex,防止重放已完成的重置操作 - 递增
Instance.current_tree_index;在上一个树 epoch 中有效的 nonce 在轮换后将失效 - 当
transaction_nonce % 65536 == 0(且nonce > 0)时,operator-private-channel服务会自动调用此指令,标志新 epoch 的开始;在正常运行情况下无需手动调用 - 轮换后,提款根节点重置为空树,新的提款将从全新的 SMT 开始
- 通过
EmitEventCPI 发出事件
Is this page helpful?