Saltearse al contenido

sto_subfield

Objetos Serializados
  • Parsea un STObject apuntado por read_ptr
  • Encuentra el campo especificado por field_id
  • Si el campo se encuentra, y:
    1. Es un array, devuelve el inicio y la longitud del array incluyendo los bytes de cabecera y cierre, o
    1. No es un array, devuelve el inicio y la longitud del PAYLOAD del campo (excluyendo los bytes de cabecera)
int64_t sto_subfield (
uint32_t read_ptr,
uint32_t read_len,
uint32_t field_id
);
#define SUB_OFFSET(x) ((int32_t)(x >> 32))
#define SUB_LENGTH(x) ((int32_t)(x & 0xFFFFFFFFULL))
int64_t memos_lookup =
sto_subfield(txn_ptr, txn_len, sfMemos);
if (memos_lookup < 0)
{
// sfMemos no fue encontrado en el STObject apuntado por memo_ptr
}
else
{
// sfMemos fue encontrado y su ubicación es la siguiente:
uint8_t* memos_ptr = SUB_OFFSET(memos_lookup) + memos_ptr;
int64_t memos_len = SUB_LENGTH(memos_lookup);
}
NombreTipoDescripción
read_ptruint32_tPuntero al buffer que contiene el STObject
read_lenuint32_tLongitud del STObject
field_iduint32_t

Código sf del campo que se desea buscar.

Para calcularlo manualmente, toma el type serializado y desplázalo a los 16 bits más altos de un uint32_t, luego toma el field y colócalo en los 16 bits más bajos.

Ejemplo:
sfEmitNonce tiene type 5 y field 11, por lo que su valor es 0x050BU

TipoDescripción
int64_t

Ubicación del campo dentro del buffer especificado:
- Los 32 bits altos son el desplazamiento (offset)
- Los 32 bits bajos son la longitud

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

TOO_SMALL
- el buffer es demasiado pequeño para contener un STObject válido

DOESNT_EXIST
- el campo no existe en el STObject

PARSE_ERROR
- el STObject es inválido o mal formado