Pular para o conteúdo

util_keylet

Slots e Keylets
  • Calcula um keylet do keylet_type especificado de acordo com os parâmetros a a f, dependendo do tipo.
  • Escreve o keylet serializado de 34 bytes em write_ptr
int64_t util_keylet (
uint32_t write_ptr,
uint32_t write_len,
uint32_t keylet_type,
uint32_t a,
uint32_t b,
uint32_t c,
uint32_t d,
uint32_t e,
uint32_t f
);
uint8_t keylet[34];
if (util_keylet(keylet, 34, KEYLET_LINE,
hook_accid, 20,
account_field, 20,
currency_code, 20) != 34)
rollback("Keylet Failed.", 14, 1);
NomeTipoDescrição
write_ptruint32_tPonteiro para um buffer onde o keylet serializado será escrito
write_lenuint32_tTamanho do buffer de saída, deve ser pelo menos 34.
keylet_typeuint32_tUm dos tipos de keylet definidos em hookapi.h, ex: KEYLET_LINE para uma trustline.
auint32_tVeja a tabela de keylets abaixo
buint32_tVeja a tabela de keylets abaixo
cuint32_tVeja a tabela de keylets abaixo
duint32_tVeja a tabela de keylets abaixo
euint32_tVeja a tabela de keylets abaixo
fuint32_tVeja a tabela de keylets abaixo
Tipo de KeyletParâmetros
KEYLET_HOOK_STATE

a aponta para um Account ID
b é o tamanho do Account ID (deve ser 20)
c aponta para uma chave de estado do hook
d é o tamanho da chave (deve ser 32)
e aponta para um namespace de estado do hook
f é o tamanho do namespace (deve ser 32)

KEYLET_AMENDMENTS
KEYLET_FEES
KEYLET_NEGATIVE_UNL
KEYLET_EMITTED_DIR

a, b, c, d, e, f devem ser todos zero
KEYLET_SKIP

Ou:
a, b, c, d, e, f todos zero
Ou:
a é um LedgerIndex
b é 1
c, d, e, f devem ser todos zero

KEYLET_LINE

a aponta para o Account ID Alto (High)
b é o tamanho do anterior (deve ser 20)
c aponta para o Account ID Baixo (Low)
d é o tamanho do anterior (deve ser 20)
e aponta para o Código de Moeda
f é o tamanho do anterior (deve ser 20)

KEYLET_QUALITY

a aponta para um keylet serializado
b é o tamanho do anterior (deve ser 34)
c é os 32 bits superiores do uint64 a ser passado
d é os 32 bits inferiores do uint64 a ser passado
e, f devem ser todos zero

KEYLET_DEPOSIT_PREAUTH

a aponta para um Account ID
b é o tamanho (deve ser 20)
c aponta para um Account ID
d é o tamanho (deve ser 20)
e, f devem ser todos zero

KEYLET_UNCHECKED
KEYLET_CHILD
KEYLET_EMITTED_TXN

a aponta para uma chave.
b é o tamanho da chave (deve ser 32.)
c, d, e, f devem ambos ser zero

KEYLET_OWNER_DIR
KEYLET_SIGNERS
KEYLET_ACCOUNT
KEYLET_HOOK

a aponta para um Account ID.
b é o tamanho (deve ser 20.)
c, d, e, f devem ser todos zero.

KEYLET_PAGE

a aponta para uma chave.
b é o tamanho da chave (deve ser 32.)
c é os 32 bits superiores do uint64 a ser passado
d é os 32 bits inferiores do uint64 a ser passado
e, f devem ambos ser zero

KEYLET_OFFER
KEYLET_CHECK
KEYLET_ESCROW
KEYLET_NFT_OFFER

a aponta para um Account ID.
b é o tamanho (deve ser 20.)
E, ou:
c é um inteiro de 32 bits sem sinal (sequence)
d é 0
Ou:
c aponta para uma chave de 32 bytes
d é o tamanho da chave (32).
Em ambos os casos:
e e f devem ser 0.

KEYLET_PAYCHAN

a aponta para um Account ID
b é o tamanho (deve ser 20)
c aponta para um Account ID
d é o tamanho (deve ser 20)
E, ou:
e inteiro de 32 bits sem sinal a ser passado
f é zero
Ou:
e aponta para uma chave de 32 bytes
f é o tamanho da chave (32)

TipoDescrição
int64_t

O número de bytes escritos, deve ser sempre 34.

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

INVALID_ARGUMENT
- A chamada não seguiu a tabela acima.

TOO_SMALL
- O buffer de escrita era menor que 34 bytes.