Redefinir Raiz SMT

Instrução exclusiva do operador que rotaciona a Árvore de Merkle Esparsa incrementando Instance.current_tree_index e redefinindo a raiz de saque, permitindo uma nova epoch de 65.536 saques.

O programa de escrow está migrando deste design de Árvore de Merkle Esparsa para um bitmap de nonce on-chain (rastreado upstream), onde esta instrução passa a ser RotateBitmap. Esta página está precisa em relação ao programa de escrow atual e será revisada assim que essa alteração entrar em vigor.

Contas

ContaGravávelSignatárioDescrição
payer✓✓Pagador de taxas
operator✓Signatário do operador
instance✓PDA da instância de escrow (current_tree_index incrementado)
operator_pdaPDA do operador comprovando que o signatário está provisionado
event_authorityPDA de autoridade de evento para CPI EmitEvent
private_channel_escrow_programPrograma de Escrow (autorreferência para CPI)

Parâmetros

ParâmetroTipoDescrição
expected_current_tree_indexu64Proteção contra replay; deve corresponder a Instance.current_tree_index ou a chamada falha

Retornos

Retorna um TransactionBuilder que pode ser usado para construir e enviar a transação.

Exemplo

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
});

Notas Importantes

  • Exclusivo do operador: requer um operator_pda válido; caso contrário, lança InvalidOperatorPda
  • expected_current_tree_index deve ser igual a Instance.current_tree_index no momento da chamada; um valor desatualizado lança UnexpectedTreeIndex, protegendo contra o replay de uma redefinição que já foi aplicada
  • Incrementa Instance.current_tree_index; nonces válidos na epoch anterior da árvore são invalidados após a rotação
  • O serviço operator-private-channel chama isso automaticamente quando transaction_nonce % 65536 == 0 (e nonce > 0), sinalizando o início de uma nova epoch; não deve ser necessário chamá-lo manualmente em operação normal
  • Após a rotação, a raiz de saque é redefinida para a árvore vazia, portanto os novos saques começam a partir de uma SMT limpa
  • Emite um evento via CPI EmitEvent

Is this page helpful?

Índice

Editar Página
© 2026 Fundação Solana. Todos os direitos reservados.