SMT 루트 재설정

오퍼레이터 전용 명령어로, Instance.current_tree_index를 증가시켜 Sparse Merkle Tree를 순환하고 출금 루트를 재설정하여 65,536건의 출금으로 구성된 새로운 epoch를 허용합니다.

에스크로 프로그램은 이 Sparse Merkle Tree 설계에서 온체인 논스 비트맵(업스트림에서 추적 중)으로 마이그레이션 중이며, 이 명령어는 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?

목차

페이지 편집