Saltearse al contenido

Campo HookOn

Cada bit en este entero sin signo de 256 bits indica si el Hook debe ejecutarse para un tipo de transacción concreto. Todos los bits son activo bajo excepto el bit 22, que es activo alto. Dado que el 22 corresponde a ttHOOK_SET, esto significa que el valor por defecto de todos los bits en 0 no activará el Hook en una transacción SetHook, pero sí en todos los demás tipos de transacción. Esta es una decisión de diseño intencionada para evitar que los usuarios bloqueen su cuenta de Xahau con un Hook defectuoso.

Los bits se numeran de derecha a izquierda:

  • bit 0 - el más a la derecha, es decir, el bit menos significativo.
  • bit 63 - el más a la izquierda, es decir, el bit más significativo.

Ejemplos (asumiendo un entero sin signo de 256 bits):

  1. Si queremos desactivar completamente el Hook:
~(1ULL << 22) /* todos los bits son 1 excepto el bit 22 que es 0 */
  1. Si queremos desactivar el Hook en todo excepto ttPAYMENT:
~(1ULL << 22) & ~(1ULL)
  1. Si queremos activar el Hook en todo excepto ttHOOK_SET:
0
  1. Si queremos activar el Hook en ttHOOK_SET (peligroso) y en todos los demás tipos de transacción:
(1ULL << 22)

(Añadido por la enmienda HookCanEmit.)

HookCanEmit usa la misma sintaxis de máscara de bits de 256 bits que HookOn, pero controla qué tipos de transacción puede emitir un Hook, en lugar de qué tipos lo activan.

  • Usa la misma semántica activo-bajo que HookOn, con el bit 22 (ttHOOK_SET) siendo activo-alto.
  • Si HookCanEmit está ausente, el Hook puede emitir cualquier tipo de transacción, incluyendo SetHook.

(Añadido por la enmienda HookOnV2.)

En lugar de especificar un único campo HookOn, los Hooks pueden opcionalmente reemplazarlo con dos campos separados que diferencian la dirección de la transacción que los activa:

  • HookOnIncoming — activa el Hook en transacciones originadas desde otra cuenta (la cuenta del Hook no es el iniciador).
  • HookOnOutgoing — activa el Hook en transacciones originadas desde la propia cuenta del Hook.

Ambos campos usan la misma sintaxis de campo de bits que HookOn. HookOnIncoming y HookOnOutgoing son mutuamente excluyentes con HookOn — debes usar HookOn solo o el par HookOnIncoming/HookOnOutgoing, no ambos. Si solo se especifica uno del par, el Hook no se activará en la dirección no especificada.

Nota: Los campos HookOnIncoming y HookOnOutgoing no pueden configurarse con exactamente los mismos ajustes. Si necesitas que un Hook responda en ambas direcciones usando criterios idénticos, usa el campo HookOn en su lugar, ya que ofrece una forma más simple y apropiada de definir el comportamiento de activación compartida.

Usar HookOn solo continúa funcionando exactamente como antes.