重置 SMT 根节点

仅限操作员执行的指令,通过递增 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_indexu64重放防护;必须与 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 开始
  • 通过 EmitEvent CPI 发出事件

Is this page helpful?

Table of Contents

Edit Page
©️ 2026 Solana 基金会版权所有