SetHook
[Source]
(Añadido por la enmienda [Hooks][].)
Ejemplo
Sección titulada «Ejemplo»{ "TransactionType": "SetHook", "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", "Flags": 0, "Hooks": [ { "Hook": { "HookHash": "610F33B8EBF7EC795F822A454FB852156AEFE50BE0CB8326338A81CD74801864", "CreateCode": "697066733A2F2F4445414442454546697066733A2F2F44454144424545467878", "HookGrants": [], "HookNamespace": "0000000000000000000000000000000000000000000000000000000000000000", "HookParameters": [], "HookOn": "0000000000000000000000000000000000000000000000000000000000000000", "HookApiVersion": 0, "Flags": 0 } } ]}| Campo | Tipo JSON | [Tipo Interno][] | Descripción |
|---|---|---|---|
Account | String | AccountID | La dirección de la cuenta que poseerá el hook. |
Hooks | Array | Array | El array de hooks a establecer. |
Costo de Transacción Especial
Sección titulada «Costo de Transacción Especial»La transacción SetHook tiene un costo de transacción estándar, que es el costo mínimo de transacción requerido para todas las transacciones.
Casos de Error
Sección titulada «Casos de Error»Además de los errores que pueden ocurrir para todas las transacciones, las transacciones SetHook pueden resultar en los siguientes códigos de resultado:
| Código de Error | Descripción |
|---|---|
tecDUPLICATE | Ocurre si ya existe un hook con el mismo hash. |
tecDIR_FULL | Ocurre si el directorio del propietario está lleno y no puede acomodar el nuevo hook. |
terNO_ACCOUNT | Ocurre si la cuenta emisora no existe. |
terNO_HOOK | Ocurre si no existe ningún hook con el hash especificado. |
temDISABLED | Ocurre si la Enmienda Hooks no está habilitada. |
temMALFORMED | Ocurre si la transacción está malformada. |
Operaciones SetHook
Sección titulada «Operaciones SetHook»Hay seis operaciones posibles: Sin Operación, Crear, Actualizar, Eliminar, Instalar y Eliminar Espacio de Nombres
Cada operación se especifica por la inclusión u omisión de ciertos campos del Objeto HookSet. Esencialmente, las operaciones HookSet son un tipo de diff entre los valores predeterminados, existentes y los campos recién especificados de un Hook específico.
Sin Operación
Sección titulada «Sin Operación»Ocurre cuando:
- El Objeto HookSet está vacío
Comportamiento:
- No se realiza ningún cambio.
Ejemplo:
{ Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", TransactionType: "SetHook", Fee: "2000000", Hooks: [ { Hook: {} } ]}Operación Crear
Sección titulada «Operación Crear»Ocurre cuando todas las condiciones siguientes se cumplen:
- El Hook Correspondiente no existe o se especifica
FLAG_OVERRIDE. - El campo
CreateCodeestá especificado y no está en blanco y contiene el bytecode WebAssembly válido para un Hook válido. - No existe ninguna instancia del mismo bytecode WebAssembly en el XRPL. (Si existe y todos los demás requisitos se cumplen, se interpreta como una Operación Instalar.)
Comportamiento:
- Se crea un objeto
HookDefinitioncon conteo de referencias en el XRPL. - Se crea un array
Hooksen la cuenta ejecutante, si no existe ya. - Se crea un objeto
Hooken la posición del Hook Correspondiente si no existe ya. - El objeto
Hookapunta a laHookDefinition.
Ejemplo:
{ Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", TransactionType: "SetHook", Fee: "2000000", Hooks: [ { Hook: { CreateCode: fs.readFileSync('accept.wasm').toString('hex').toUpperCase(), HookOn: '0000000000000000', HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), HookApiVersion: 0 } } ]}Operación Instalar
Sección titulada «Operación Instalar»Ocurre cuando todas las condiciones siguientes se cumplen:
- El Hook Correspondiente no existe o se especifica
FLAG_OVERRIDE. - El campo
HookHashestá especificado y no está en blanco y contiene el hash de un Hook que ya existe comoHookDefinitionen el ledger o el campoCreateCodecontiene bytecode WebAssembly válido para un hook que ya existe en el ledger comoHookDefinition.
Ejemplo:
{ Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", TransactionType: "SetHook", Fee: "2000000", Hooks: [ { Hook: { HookHash: "A5663784D04ED1B4408C6B97193464D27C9C3334AAF8BBB4FA5EB8E557FC4A2C", HookOn: '0000000000000000', HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), } } ]}Operación Actualizar
Sección titulada «Operación Actualizar»Ocurre cuando todas las condiciones siguientes se cumplen:
- El Hook Correspondiente existe.
HookHashestá ausente.CreateCodeestá ausente.- Uno o más de
HookNamespace,HookParametersoHookGrantsestá presente.
Ejemplo:
{ Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", TransactionType: "SetHook", Fee: "2000000", Hooks: [ { Hook: { HookNamespace: addr.codec.sha256('new_accept').toString('hex').toUpperCase(), } } ]}Operación Eliminar
Sección titulada «Operación Eliminar»Ocurre cuando todas las condiciones siguientes se cumplen:
- El Hook Correspondiente existe.
- Se especifica
hsfOVERRIDE. - Opcionalmente
hsfNSDELETEtambién está especificado. HookHashestá ausente.CreateCodeestá presente pero vacío.
Ejemplo:
{ Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", TransactionType: "SetHook", Fee: "2000000", Hooks: [ { Hook: { CreateCode: "", Flags: 1, } } ]}Restablecimiento de Espacio de Nombres
Sección titulada «Restablecimiento de Espacio de Nombres»Ocurre cuando todas las condiciones siguientes se cumplen:
flagsestá presente yhsfNSDELETEestá activado.HookNamespaceestá especificado.CreateCodeestá ausente.HookHashestá ausente.
Ejemplo:
{ Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", TransactionType: "SetHook", Fee: "2000000", Hooks: [ { Hook: { HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), Flags: 3, } } ]}Campos del Hook
Sección titulada «Campos del Hook»| Campo | Tipo JSON | Tipo Interno | Descripción |
|---|---|---|---|
HookHash | String | Hash256 | El hash del hook. |
CreateCode | String | Blob | El código WebAssembly del hook. |
HookGrants | Array | Array | Las concesiones asociadas con el hook. |
HookNamespace | String | Hash256 | El espacio de nombres del hook. |
HookParameters | Array | Array | Los parámetros del hook. |
HookOn | String | Hash256 | Las transacciones en las que se activa el hook. |
HookCanEmit | String | Hash256 | Las transacciones que el hook puede emitir. |
HookApiVersion | Number | UInt16 | La versión de API del hook. |
Flags | Number | UInt32 | Indicadores adicionales para el hook. |
Indicadores
Sección titulada «Indicadores»| Nombre del Indicador | Descripción |
|---|---|
hsfOVERRIDE | Permite que el hook sea eliminado aunque esté referenciado por otros objetos. |
hsfNSDELETE | Elimina un espacio de nombres completo de hooks. |
hsfCOLLECT | Recopila los objetos asociados del hook. |
Concesiones del Hook
Sección titulada «Concesiones del Hook»El campo HookGrants es un array de objetos que especifican las concesiones asociadas con el hook:
| Campo | Tipo JSON | Tipo Interno | Descripción |
|---|---|---|---|
HookHash | String | Hash256 | El hook al que aplicar la concesión. |
Authorize | String | AccountID | La dirección de la cuenta a la que se concede acceso. |
Flags | Number | Uint32 | Indicadores |
Parámetros del Hook
Sección titulada «Parámetros del Hook»El campo HookParameters es un array de objetos que especifican los parámetros del hook:
| Campo | Tipo JSON | Tipo Interno | Descripción |
|---|---|---|---|
HookParameterName | String | Blob | El nombre del parámetro. |
HookParameterValue | String | Blob | El valor del parámetro. |
Ejecuciones del Hook
Sección titulada «Ejecuciones del Hook»Cuando los Hooks se ejecutan, dejan información sobre el estado de esa ejecución. Esto aparece en los metadatos de la Transacción Originadora como un bloque sfHookExecutions:
| Campo | Tipo JSON | Tipo Interno | Descripción |
|---|---|---|---|
HookAccount | String | AccountID | La cuenta en la que se ejecutó el Hook. |
HookEmitCount | Number | UInt16 | El número total de Transacciones Emitidas producidas por el Hook. |
HookExecutionIndex | Number | UInt16 | El SHA512H del Hook en el momento en que fue ejecutado. |
HookHash | String | Hash256 | El valor del parámetro. |
HookInstructionCount | String | UInt64 | El número total de instrucciones WebAssembly que se ejecutaron cuando se ejecutó el Hook. |
HookResult | Number | UInt8 | Los Hooks pueden terminar de tres maneras: accept, rollback y error. ¡Esto no es lo mismo que sfHookReturnCode! |
HookReturnCode | String | UInt64 | El entero devuelto como tercer parámetro de accept o rollback. |
HookReturnString | String | Blob | La cadena devuelta en los dos primeros parámetros de accept o rollback, si la hay. |
HookStateChangeCount | Number | UInt16 | El número de cambios de Estado de Hook que el Hook realizó durante la ejecución. |