Pular para o conteúdo

sto_subfield

Objetos Serializados
  • Analisa um STObject apontado por read_ptr
  • Encontra o campo especificado por field_id
  • Se o campo for encontrado, e:
    1. For um array, então retorna o início e o tamanho do array incluindo os bytes de leadin/leadout, ou
    1. Não for um array, então retorna o início e o tamanho do PAYLOAD do campo (excluindo os bytes de leadin).
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 was not found in the STObject pointed at by memo_ptr
}
else
{
// sfMemos was found and its location is as follows:
uint8_t* memos_ptr = SUB_OFFSET(memos_lookup) + memos_ptr;
int64_t memos_len = SUB_LENGTH(memos_lookup);
}
NomeTipoDescrição
read_ptruint32_tPonteiro para o buffer contendo o STObject
read_lenuint32_tTamanho do STObject
field_iduint32_t

O código sf do campo que você está procurando.

Para calcular isso manualmente, pegue o type serializado e desloque-o para os 16 bits mais altos de um uint32_t, depois pegue o field e coloque-o nos 16 bits mais baixos.

Por exemplo:
sfEmitNonce tem type 5 e field 11, portanto seu valor é 0x050BU

TipoDescrição
int64_t

A localização do campo dentro do buffer especificado:
- Os 32 bits superiores são o deslocamento (offset).
- Os 32 bits inferiores são o tamanho.

Se negativo, um erro:
OUT_OF_BOUNDS
- ponteiros/tamanhos especificados fora da memória do hook.

TOO_SMALL
- O buffer de entrada não é grande o suficiente para possivelmente conter um STObject válido.

DOESNT_EXIST
- O campo buscado não está presente no STObject fornecido.

PARSE_ERROR
- O STObject fornecido está malformado ou não é um STObject.