Encadenamiento
Historia
Sección titulada «Historia»En los primeros días de los Hooks, solo era posible instalar un Hook por cuenta. Esto obligaba a los usuarios a crear Hooks monolíticos si querían hacer más de una cosa: por ejemplo, compensar carbono y actuar como firewall al mismo tiempo.
Esto iba en contra de la Filosofía de diseño de Hooks, por lo que se introdujo el Encadenamiento de Hooks.
Encadenamiento
Sección titulada «Encadenamiento»Una cadena de Hooks es una secuencia de hasta 10 Hooks instalados en una cuenta de Xahau.
- Una cadena de Hooks se ejecuta correctamente cuando cada Hook de la cadena ha sido ejecutado individualmente y posteriormente llama a accept.
- La ejecución de cada cadena comienza en la posición 0 y termina en la posición 9. Si una posición está vacía (porque nunca fue ocupada o porque el Hook instalado allí ha sido eliminado), entonces esa posición se omite y se considera exitosa.
- Para que una transacción tenga éxito, ambos extremos de la transacción (lado emisor y lado receptor) deben haberse ejecutado correctamente. Esto significa que, si hay una cadena de Hooks instalada en ambos lados, ambas cadenas deben ejecutarse correctamente para que la transacción tenga éxito.
Los Hooks se instalan en la cadena utilizando la transacción SetHook. Al instalarlos, quien los instala puede especificar parámetros en el momento de la instalación, los cuales pueden cambiar el comportamiento del Hook instalado.
Manipulación de la cadena
Sección titulada «Manipulación de la cadena»Además de las operaciones en el momento de la instalación especificadas en la transacción SetHook, los Hooks tienen cierto control en tiempo de ejecución sobre la ejecución de la cadena:
- Un Hook puede determinar su propio
HookHashllamando a hook_hash. - Un Hook puede determinar su posición en la cadena de Hooks utilizando hook_pos.
- Un Hook puede omitir (o volver a habilitar) otro Hook más adelante en la cadena utilizando hook_skip.
- Un Hook puede modificar los parámetros de otro Hook más adelante en la cadena utilizando hook_param_set.
Ejecuciones débiles
Sección titulada «Ejecuciones débiles»Las cadenas de Hooks se ejecutan de forma fuerte. Sin embargo, cualquier Hook en cualquier cadena puede indicar que requiere una segunda ejecución débil llamando a hook_again. Si todas las cadenas de Hooks se ejecutan correctamente, entonces la transacción original se aplica. Una vez aplicada la transacción original, pueden producirse ejecuciones débiles en el siguiente orden:
- Ejecución
cbaksi se trata de una transacción emitida. - Participantes transaccionales débiles que hayan optado por permitir una Collect Call. El orden de ejecución es por orden de llegada según el evento que provocó que el participante fuera marcado (como el pathing).
- Cualquier Hook marcado como Again as Weak (AAW). El orden de ejecución para AAW es primero numérico según el ID de la cuenta y luego numérico según la posición del Hook.