Pular para o conteúdo

state_foreign_set

  • Lê uma chave do Estado do Hook de 32 bytes a partir de kread_ptr
  • Lê uma quantidade arbitrária de dados a partir de read_ptr (o valor)
  • Lê um Namespace de 32 bytes a partir de nread_ptr
  • Lê um ID de Conta de 20 bytes a partir de aread_ptr
  • Atualiza a chave do Estado do Hook na conta especificada, dentro do namespace especificado, com o valor
  • Mas apenas se uma Concessão naquela conta permitir isso.
  • Se a Conta Hook for especificada em aread_ptr, então o comportamento é o mesmo de state_set, mas ainda permite a especificação do namespace através de 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: could not set foreign state!"), 1);
NomeTipoDescrição
read_ptruint32_t

Ponteiro para os dados (valor) a serem escritos no Estado do Hook.
Se for 0 (nulo), então os dados nessa chave são excluídos. Pode ser nulo.

read_lenuint32_t

O tamanho dos dados.
Se for 0 (nulo), então os dados nessa chave são excluídos. Pode ser nulo.

kread_ptruint32_tUm ponteiro para a chave do Estado do Hook na qual armazenar o valor.
kread_lenuint32_tO tamanho da chave. (Deve ser sempre 32.)
nread_ptruint32_tUm ponteiro para o namespace ao qual a chave pertence.
nread_lenuint32_tO tamanho do namespace. (Deve ser sempre 32.)
aread_ptruint32_tUm ponteiro para o ID de Conta cujo estado estamos tentando modificar.
aread_lenuint32_tO tamanho do ID de Conta. (Deve ser sempre 20.)
TipoDescrição
int64_t

O número de bytes escritos no Estado do Hook (o tamanho dos dados.)

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

TOO_BIG
- kread_len era maior que 32, ou
- read_len era maior que o tamanho máximo de dados do hook.

TOO_SMALL
- kread_len era 0.

NOT_AUTHORIZED
- nenhum HookGrant apropriado estava presente na conta estrangeira para permitir essa mutação de estado.

PREVIOUS_FAILURE_PREVENTS_RETRY
- durante esta execução, uma chamada anterior a state_foreign_set falhou com NOT_AUTHORIZED e, consequentemente, nenhuma nova chamada a esta API é permitida durante esta execução.