Pular para o conteúdo

Códigos de Retorno

O web assembly permite exceções (traps), porém esse recurso da linguagem não é utilizado pelos Hooks. Em vez disso, existe apenas uma forma de retornar de qualquer API de Hooks (você pode pensar em toda API de Hooks como sendo noexcept).

Para proporcionar um tratamento de erros eficiente:

  1. Todas as funções da API de Hooks retornam um inteiro com sinal.
  2. Todos os códigos de retorno negativos representam um erro.
  3. Todos os códigos de retorno 0 ou maiores são uma saída específica da função, geralmente, mas não sempre, o número de bytes lidos ou escritos.

Os códigos de erro são globais em todas as APIs de Hooks e podem ser encontrados na tabela abaixo.

NomeValorDescrição
SUCCESS>= 0Códigos de retorno não negativos sempre indicam sucesso e geralmente indicam o número de bytes escritos ou eventos realizados, dependendo da API específica.
OUT_OF_BOUNDS-1Um ponteiro ou tamanho de buffer fornecido como parâmetro descreveu memória fora da região de memória permitida do Hook.
INTERNAL_ERROR-2Reservado para violações de invariantes internas, geralmente não relacionadas às entradas. Devem ser reportadas por meio de um issue.
TOO_BIG-3Tentativa de definir um parâmetro ou valor maior que o espaço permitido.
TOO_SMALL-4A API não conseguiu produzir saída para o write_ptr porque o write_len especificado era muito pequeno.
DOESNT_EXIST-5O objeto ou item solicitado não foi encontrado.
NO_FREE_SLOTS-6O Hook tentou alocar um item em um slot, mas não havia slots livres. Para evitar isso, garanta a reutilização dos slots existentes. O número máximo de slots é 255.
INVALID_ARGUMENT-7Um ou mais dos parâmetros da API eram inválidos de acordo com a especificação da API individual.
ALREADY_SET-8Algumas APIs permitem que um parâmetro seja definido apenas uma vez por execução. Uma segunda tentativa de definir um parâmetro de uso único por execução resulta neste erro.
PREREQUISITE_NOT_MET-9Uma API exigia que o Hook fizesse algo antes que a API pudesse ser chamada. Verifique a documentação da API.
FEE_TOO_LARGE-10Durante o cálculo da taxa, se uma taxa absurdamente grande for calculada, este erro é retornado.
EMISSION_FAILURE-11Uma tentativa de emit() de uma TXN não foi bem-sucedida por um dos vários motivos possíveis. Verifique o log de trace do rippled ao qual você está submetendo a TXN de origem.
TOO_MANY_NONCES-12Um Hook pode usar no máximo 256 chamadas a nonce() por execução. Chamadas adicionais resultam neste código de erro.
TOO_MANY_EMITTED_TXN-13

Um Hook deve declarar antecipadamente quantas TXN pretende emit().
Se ele emitir menos que esse número, isso é permitido.
Se ele emitir mais que esse número, este erro é retornado.

NOT_IMPLEMENTED-14Enquanto os Hooks estavam/estão em desenvolvimento, uma API pode retornar isso se parte ou toda essa API estiver planejada, mas ainda não implementada.
INVALID_ACCOUNT-15Uma API que aceita um ID de conta de 20 bytes pode retornar isso se, em sua avaliação, o ID da conta não for válido por qualquer motivo.
GUARD_VIOLATION-16Todos os loops dentro de um Hook devem declarar no topo do loop, como a primeira instrução não trivial, antes de qualquer instrução de desvio, o número máximo prometido de iterações do loop. Se essa promessa for violada, o hook termina imediatamente com este código de erro.
INVALID_FIELD-17O campo serializado solicitado não pôde ser encontrado no objeto especificado.
PARSE_ERROR-18Durante a análise de conteúdo serializado, um erro foi encontrado (tipicamente indicando um objeto serializado de forma inválida).
RC_ROLLBACK-19Usado internamente para comunicar um evento de rollback.
RC_ACCEPT-20Usado internamente para comunicar um evento de accept.
NO_SUCH_KEYLET-21O keylet especificado não pôde ser encontrado, ou o keylet é inválido
NOT_AN_ARRAY-22A API foi solicitada a assumir que o objeto em análise é um STArray, mas não era.
NOT_AN_OBJECT-23A API foi solicitada a assumir que o objeto em análise é um STObject, mas não era.
INVALID_FLOAT-10024Uma operação de ponto flutuante resultou em Not-A-Number, ou a chamada de API tentou especificar um número de ponto flutuante XFL fora do intervalo expressável de XFL.
DIVISION_BY_ZERO-25A chamada de API resultaria em uma divisão por zero, então a API foi encerrada antecipadamente.
MANITSSA_OVERSIZED-26Ao tentar criar um XFL, a mantissa deve ter 16 dígitos decimais.
MANTISSA_UNDERSIZED-27Ao tentar criar um XFL, a mantissa deve ter 16 dígitos decimais.
EXPONENT_OVERSIZED-28Ao tentar criar um XFL, o expoente não pode exceder 80.
EXPONENT_UNDERSIZED-29Ao tentar criar um XFL, o expoente não pode ser menor que -96.
OVERFLOW-30Uma operação de ponto flutuante realizada em um XFL resultou em um valor maior do que o formato XFL é capaz de representar.
NOT_IOU_AMOUNT-31Uma API assumiu que um STAmount era um IOU, quando na verdade era XRP.
NOT_AN_AMOUNT-32Uma API assumiu que um STObject era um STAmount, quando na verdade não era.
CANT_RETURN_NEGATIVE-33Uma API teria retornado um inteiro negativo, exceto que inteiros negativos são reservados para códigos de erro (ou seja, o que você está lendo.)
NOT_AUTHORIZED-34O Hook tentou definir estado externo, mas não estava autorizado a fazê-lo (a concessão estava ausente ou era inválida.)
PREVIOUS_FAILURE_PREVENTS_RETRY-35O Hook recebeu anteriormente um código de retorno NOT_AUTHORIZED e não tem permissão para tentar novamente.
TOO_MANY_PARAMS-36Tentativa de definir um parâmetro de hook para um hook posterior na cadeia, mas agora há muitos parâmetros.
INVALID_TXN-37A transação serializada não era uma transação válida (geralmente devido a um campo obrigatório ausente ou corrupção/truncamento de dados.)
RESERVE_INSUFFICIENT-38Definir um objeto de estado adicional nesta conta faria com que os requisitos de reserva excedessem o saldo da conta.
COMPLEX_NOT_SUPPORTED-39A API de Hooks seria forçada a retornar um número complexo, o que ela não pode fazer.
DOES_NOT_MATCH-40Dois argumentos deveriam ser do mesmo tipo, mas não são.
INVALID_KEY-41A chave pública fornecida não era válida.
NOT_A_STRING-42O buffer não continha uma string terminada em nul.
MEM_OVERLAP-43O ponteiro de escrita aponta para um buffer que se sobrepõe ao ponteiro de leitura.
TOO_MANY_STATE_MODIFICATIONS-44Mais de 5000 entradas de estado modificadas nas cadeias de hooks combinadas
TOO_MANY_NAMESPACES-45Mais de 256 namespaces nesta conta