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
| Cuenta | Escribible | Firmante | Descripción |
|---|---|---|---|
payer | ✓ | ✓ | Pagador de comisiones |
operator | ✓ | Firmante del operador | |
instance | ✓ | PDA de la instancia de custodia (current_tree_index incrementado) | |
operator_pda | PDA del operador que acredita que el firmante está aprovisionado | ||
event_authority | PDA de autoridad de eventos para el CPI de EmitEvent | ||
private_channel_escrow_program | Programa de custodia (autorreferencia para CPI) |
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
expected_current_tree_index | u64 | Protecció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_pdaválido; de lo contrario, lanzaInvalidOperatorPda expected_current_tree_indexdebe ser igual aInstance.current_tree_indexen el momento de la llamada; un valor desactualizado lanzaUnexpectedTreeIndex, 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-channelllama a esto automáticamente cuandotransaction_nonce % 65536 == 0(ynonce > 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?