Saltearse al contenido

state_foreign_set

  • Lee una clave de Hook State de 32 bytes desde kread_ptr
  • Lee una cantidad arbitraria de datos desde read_ptr (el valor)
  • Lee un namespace de 32 bytes desde nread_ptr
  • Lee un Account ID de 20 bytes desde aread_ptr
  • Actualiza la clave de Hook State en la cuenta especificada dentro del namespace indicado con el valor dado
  • Pero solo si un Grant en esa cuenta lo permite
  • Si la cuenta del Hook se especifica en aread_ptr, el comportamiento será el de state_set, pero permitiendo aún especificar el namespace mediante nread_ptr
int64_t state_foreign_set (
uint32_t read_ptr,
uint32_t read_len,
uint32_t kread_ptr,
uint32_t kread_len,
uint32_t nread_ptr,
uint32_t nread_len,
uint32_t aread_ptr,
uint32_t aread_len
);
#define SBUF(str) (uint32_t)(str), sizeof(str)
if (state_foreign_set(SBUF(vault), SBUF(vault_key), SBUF(namespace), SBUF(account)) < 0)
rollback(SBUF("Error: no se pudo establecer el estado externo!"), 1);
NombreTipoDescripción
read_ptruint32_t

Puntero a los datos (valor) a escribir en el Hook State.
Si es 0 (null), se elimina el dato en esa clave. Puede ser null.

read_lenuint32_t

Longitud de los datos.
Si es 0 (null), se elimina el dato en esa clave. Puede ser null.

kread_ptruint32_tPuntero a la clave de Hook State donde se almacenará el valor
kread_lenuint32_tLongitud de la clave (debe ser siempre 32)
nread_ptruint32_tPuntero al namespace al que pertenece la clave
nread_lenuint32_tLongitud del namespace (debe ser siempre 32)
aread_ptruint32_tPuntero al Account ID cuyo estado se desea modificar
aread_lenuint32_tLongitud del Account ID (debe ser siempre 20)
TipoDescripción
int64_t

Número de bytes escritos en el Hook State (longitud de los datos)

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_BIG
- kread_len mayor que 32 o
- read_len mayor que el tamaño máximo permitido

TOO_SMALL
- kread_len es 0

NOT_AUTHORIZED
- no existe un HookGrant válido en la cuenta externa

PREVIOUS_FAILURE_PREVENTS_RETRY
- una llamada previa falló con NOT_AUTHORIZED y no se permite reintentar