SMTルートのリセット

オペレーター専用のinstructionsで、Instance.current_tree_indexをインクリメントしてスパースマークルツリーをローテーションし、出金ルートをリセットすることで、65,536件の出金からなる新しいepochを開始できます。

エスクロープログラムは、このスパースマークルツリー設計からオンチェーンのノンスビットマップ(上流で追跡中)へ移行中であり、このinstructionsはRotateBitmapになります。このページは現在のエスクロープログラムに基づいた正確な内容であり、変更が反映され次第、改訂される予定です。

アカウント

アカウント書き込み可能署名者説明
payer✓✓手数料支払者
operator✓オペレーター署名者
instance✓エスクローインスタンスPDA(current_tree_indexがインクリメントされる)
operator_pda署名者がプロビジョニング済みであることを証明するオペレーターPDA
event_authorityEmitEvent 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で有効だったノンスは無効になります
  • operator-private-channelサービスは、transaction_nonce % 65536 == 0(かつnonce > 0)のとき、新しいepochの開始を示すために自動的にこれを呼び出します。通常の運用では手動で呼び出す必要はありません
  • ローテーション後、出金ルートは空のツリーにリセットされるため、新しい出金は新しいSMTから開始されます
  • EmitEvent CPIを通じてイベントを発行します

Is this page helpful?

目次

ページを編集
© 2026 Solana Foundation. 無断転載を禁じます。