Restablecer la raíz SMT

Instrucción exclusiva para el operador que rota el Sparse Merkle Tree incrementando Instance.current_tree_index y restableciendo la raíz de retiros, permitiendo un nuevo epoch de 65.536 retiros.

El programa de custodia está migrando desde este diseño de Sparse Merkle Tree hacia un mapa de bits de nonce en cadena (rastreado en upstream), donde esta instrucción se convierte en RotateBitmap. Esta página es precisa con respecto al programa de custodia actual y será revisada una vez que ese cambio entre en vigor.

Cuentas

CuentaEscribibleFirmanteDescripción
payer✓✓Pagador de comisiones
operator✓Firmante del operador
instance✓PDA de la instancia de custodia (current_tree_index incrementado)
operator_pdaPDA del operador que acredita que el firmante está aprovisionado
event_authorityPDA de autoridad de eventos para el CPI de EmitEvent
private_channel_escrow_programPrograma de custodia (autorreferencia para CPI)

Parámetros

ParámetroTipoDescripción
expected_current_tree_indexu64Protección contra repetición; debe coincidir con Instance.current_tree_index o la llamada fallará

Retorna

Retorna un TransactionBuilder que puede utilizarse para construir y enviar la transacción.

Ejemplo

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

  • Solo para el operador: requiere un operator_pda válido; de lo contrario, lanza InvalidOperatorPda
  • expected_current_tree_index debe ser igual a Instance.current_tree_index en el momento de la llamada; un valor desactualizado lanza UnexpectedTreeIndex, protegiéndose contra la repetición de un restablecimiento que ya se aplicó
  • Incrementa Instance.current_tree_index; los nonces válidos en el epoch anterior del árbol quedan invalidados tras la rotación
  • El servicio operator-private-channel llama a esto automáticamente cuando transaction_nonce % 65536 == 0 (y nonce > 0), indicando el inicio de un nuevo epoch; no debería ser necesario llamarlo manualmente en condiciones normales de operación
  • Tras la rotación, la raíz de retiros se restablece al árbol vacío, por lo que los nuevos retiros parten de un SMT limpio
  • Emite un evento mediante el CPI de EmitEvent

Is this page helpful?

Tabla de Contenidos

Editar Página