Gerenciamento de Estado
O que é Estado do Hook?
Seção intitulada “O que é Estado do Hook?”Estado em ciência da computação descreve informações mantidas por um sistema entre execuções (distinto de entradas e saídas). Por exemplo, seu navegador mantém você logado em um site mesmo após você fechá-lo e reabri-lo. O cookie de login é mantido no estado do navegador.
Estado do Hook refere-se a um mapeamento chave-valor que logicamente existe para cada conta no Xahau, independentemente de quaisquer chaves estarem atualmente presentes. As chaves são sempre 32 bytes (inteiro unsigned de 256 bits) e os valores são de comprimento variável com tamanho máximo determinado pela votação dos validadores, no momento da escrita 256 bytes.
O Gerenciamento de Estado é alcançado usando
Armazenando e buscando
Seção intitulada “Armazenando e buscando”O exemplo abaixo usa a API de Hook state_set para atribuir o valor 0xC001CAFE à chave 0x0..000001 (uint256 = 1) no Estado do Hook da Conta Hook.
uint8_t key[32] = { 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U};uint8_t value[4] = { 0xC0U, 0x01U, 0xCAU, 0xFEU };if (state_set(value, 4, key, 32) == 4){ // ... estado salvo com sucesso}Em uma execução subsequente do Hook, este valor agora pode ser recuperado usando a mesma chave:
uint8_t value[4];uint8_t key[32] = { 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U};if (state(value, 4, key, 32) < 0){ // ... busca de estado falhou}Após a execução do código acima, o buffer value será preenchido com o valor encontrado na chave.
Estado externo
Seção intitulada “Estado externo”De tempos em tempos pode ser vantajoso para um Hook rodando em uma conta ler o Estado do Hook de outro Hook rodando em outra conta. A API de Hook state_foreign faz exatamente isso. Como o ledger é público, não há expectativa razoável de privacidade de qualquer forma. Qualquer Hook pode, portanto, ler (mas não escrever) o Estado do Hook de qualquer outro Hook.
Namespaces e consultas
Seção intitulada “Namespaces e consultas”Por favor, veja Namespaces