Códigos de Retorno
Design dos códigos de retorno
Seção intitulada “Design dos 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:
- Todas as funções da API de Hooks retornam um inteiro com sinal.
- Todos os códigos de retorno negativos representam um erro.
- Todos os códigos de retorno
0ou maiores são uma saída específica da função, geralmente, mas não sempre, o número de bytes lidos ou escritos.
Códigos de erro
Seção intitulada “Códigos de erro”Os códigos de erro são globais em todas as APIs de Hooks e podem ser encontrados na tabela abaixo.
| Nome | Valor | Descrição |
|---|---|---|
| SUCCESS | >= 0 | Có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 | -1 | Um ponteiro ou tamanho de buffer fornecido como parâmetro descreveu memória fora da região de memória permitida do Hook. |
| INTERNAL_ERROR | -2 | Reservado para violações de invariantes internas, geralmente não relacionadas às entradas. Devem ser reportadas por meio de um issue. |
| TOO_BIG | -3 | Tentativa de definir um parâmetro ou valor maior que o espaço permitido. |
| TOO_SMALL | -4 | A API não conseguiu produzir saída para o write_ptr porque o write_len especificado era muito pequeno. |
| DOESNT_EXIST | -5 | O objeto ou item solicitado não foi encontrado. |
| NO_FREE_SLOTS | -6 | O 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 | -7 | Um ou mais dos parâmetros da API eram inválidos de acordo com a especificação da API individual. |
| ALREADY_SET | -8 | Algumas 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 | -9 | Uma API exigia que o Hook fizesse algo antes que a API pudesse ser chamada. Verifique a documentação da API. |
| FEE_TOO_LARGE | -10 | Durante o cálculo da taxa, se uma taxa absurdamente grande for calculada, este erro é retornado. |
| EMISSION_FAILURE | -11 | Uma 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 | -12 | Um 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 |
| NOT_IMPLEMENTED | -14 | Enquanto 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 | -15 | Uma 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 | -16 | Todos 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 | -17 | O campo serializado solicitado não pôde ser encontrado no objeto especificado. |
| PARSE_ERROR | -18 | Durante a análise de conteúdo serializado, um erro foi encontrado (tipicamente indicando um objeto serializado de forma inválida). |
| RC_ROLLBACK | -19 | Usado internamente para comunicar um evento de rollback. |
| RC_ACCEPT | -20 | Usado internamente para comunicar um evento de accept. |
| NO_SUCH_KEYLET | -21 | O keylet especificado não pôde ser encontrado, ou o keylet é inválido |
| NOT_AN_ARRAY | -22 | A API foi solicitada a assumir que o objeto em análise é um STArray, mas não era. |
| NOT_AN_OBJECT | -23 | A API foi solicitada a assumir que o objeto em análise é um STObject, mas não era. |
| INVALID_FLOAT | -10024 | Uma 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 | -25 | A chamada de API resultaria em uma divisão por zero, então a API foi encerrada antecipadamente. |
| MANITSSA_OVERSIZED | -26 | Ao tentar criar um XFL, a mantissa deve ter 16 dígitos decimais. |
| MANTISSA_UNDERSIZED | -27 | Ao tentar criar um XFL, a mantissa deve ter 16 dígitos decimais. |
| EXPONENT_OVERSIZED | -28 | Ao tentar criar um XFL, o expoente não pode exceder 80. |
| EXPONENT_UNDERSIZED | -29 | Ao tentar criar um XFL, o expoente não pode ser menor que -96. |
| OVERFLOW | -30 | Uma 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 | -31 | Uma API assumiu que um STAmount era um IOU, quando na verdade era XRP. |
| NOT_AN_AMOUNT | -32 | Uma API assumiu que um STObject era um STAmount, quando na verdade não era. |
| CANT_RETURN_NEGATIVE | -33 | Uma 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 | -34 | O 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 | -35 | O Hook recebeu anteriormente um código de retorno NOT_AUTHORIZED e não tem permissão para tentar novamente. |
| TOO_MANY_PARAMS | -36 | Tentativa de definir um parâmetro de hook para um hook posterior na cadeia, mas agora há muitos parâmetros. |
| INVALID_TXN | -37 | A 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 | -38 | Definir um objeto de estado adicional nesta conta faria com que os requisitos de reserva excedessem o saldo da conta. |
| COMPLEX_NOT_SUPPORTED | -39 | A API de Hooks seria forçada a retornar um número complexo, o que ela não pode fazer. |
| DOES_NOT_MATCH | -40 | Dois argumentos deveriam ser do mesmo tipo, mas não são. |
| INVALID_KEY | -41 | A chave pública fornecida não era válida. |
| NOT_A_STRING | -42 | O buffer não continha uma string terminada em nul. |
| MEM_OVERLAP | -43 | O ponteiro de escrita aponta para um buffer que se sobrepõe ao ponteiro de leitura. |
| TOO_MANY_STATE_MODIFICATIONS | -44 | Mais de 5000 entradas de estado modificadas nas cadeias de hooks combinadas |
| TOO_MANY_NAMESPACES | -45 | Mais de 256 namespaces nesta conta |