Los errores en las cadenas basadas en Substrate suelen ir acompañados de mensajes descriptivos. Sin embargo, para leer estos mensajes, una herramienta que analice los datos de la blockchain necesita solicitar metadatos de la cadena a un nodo. Esos metadatos explican cómo leer los mensajes. Una de estas herramientas con un analizador integrado de metadatos de cadena es Polkadot-JS Apps UI.
Si esta página no responde a tu pregunta, intenta buscar tu problema en la Base de Conocimientos de Polkadot para obtener más información sobre cómo solucionar tu problema.
Explorador de PolkadotJS Apps #
Aquí encontrarás la descripción detallada del error a través de Polkadot-JS Apps.
Una típica transacción fallida se parece a esto:
La imagen muestra sólo el nombre del error definido en el código, no su mensaje de error. A pesar de que este error es bastante auto-explicativo, encontremos sus detalles.
En la pestaña del explorador, busca el bloque en el que se ha producido este fallo. A continuación, expande el marco system.ExtrinsicFailed
:
Observa que el campo details
contiene una descripción legible del error. La mayoría de los errores tendrán esto, si se buscan de esta manera.
Este bloque es un ejemplo vivo de lo anterior.
Si no puedes buscar el error de esta manera, o no hay ningún mensaje en el campo details
, consulta la tabla siguiente.
Polkascan y Subscan #
Polkascan y Subscan muestran el evento ExtrinsicFailed
cuando una transacción no tiene éxito (ejemplo). Este evento nos da los índices de error
e index
del error pero no nos da un lindo mensaje para entender lo que significa. Nosotros mismos buscaremos el error en el código base para entender qué ha fallado.
En primer lugar, debemos entender que el número de index
es el índice del pallet en el runtime desde la que se originó el error. El error
es igualmente el índice de los errores de ese pallet, que es exactamente el que estamos buscando. Ambos índices empiezan a contar desde 0.
Por ejemplo, si index
es 5 y error
es 3, como en el ejemplo enlazado más arriba, tenemos que buscar en el runtime el cuarto error (índice 3) en el sexto pallet (índice 5).
Mirando el código del runtime vemos que el pallet en el índice 5 es balances
. Ahora comprobaremos el código del pallet Balances que está alojada en el repositorio Substrate, y buscaremos el cuarto error en el Error enum
. Según su fuente el error que tenemos es InsufficientBalance
, o lo que es lo mismo, “Balance demasiado bajo para enviar valor”.
Errores comunes #
La siguiente tabla enumera los errores más comunes y las formas de resolverlos.
Error | Descripción | Solución |
---|---|---|
BadOrigin | No está permitido realizar esta operación, por ejemplo, intentar crear una moción del consejo con una cuenta que no sea del consejo. | O bien cambia a una cuenta que tenga los permisos necesarios, o comprueba si la operación que estás intentando ejecutar está permitida en absoluto (por ejemplo, llamando a system.setCode para hacer una actualización del runtime directamente, sin votar). |
BadProof | La firma de la transacción parece inválida. | Es posible que el nodo al que estás conectado esté siguiendo un fork (bifurcación) obsoleto. Inténtalo de nuevo después de que se ponga al día, normalmente se resuelve el problema. Para comprobar si hay problemas mayores, inspecciona el último bloque finalizado y el mejor bloque actual del nodo al que estás conectado y compara los valores con las estadísticas de cadena expuestas por otros nodos: ¿están sincronizados? Si no es así, intenta conectarte a otro nodo. |
Future | El nonce de la transacción es demasiado alto, es decir, es “del futuro”, véase la nota siguiente. | Reduce el nonce a +1 del nonce actual. Comprueba el nonce actual inspeccionando la dirección que estás utilizando para enviar la transacción. |
Stale | Nonce de transacción demasiado bajo. | Aumenta el nonce a +1 del nonce actual. Comprueba el nonce actual inspeccionando la dirección que estás utilizando para enviar la transacción. |
ExhaustsResources | No quedan recursos suficientes en el bloque actual para enviar esta transacción. | Inténtalo de nuevo en el siguiente bloque. |
Payment | Imposibilidad de pagar el fee de la TX. | Es posible que no dispongas de suficiente balance libre para cubrir los fees en que incurrirías en esta transacción. |
Temporarily banned | La transacción está temporalmente prohibida. | La tx ya está en el pool. Inténtalo en otro nodo o espera a ver si se realiza la transacción inicial. |
ERROR FUTURO
Este error no hará que la TX se descarte inmediatamente. En su lugar, se enviará a la cola de futuros, donde esperará a ser ejecutado en el lugar correcto en la secuencia de nonce O se descartará debido a algún otro error (por ejemplo, el período de validez expira).*
Tabla de errores #
La siguiente tabla es una referencia de los errores que existen en Polkadot. Se genera a partir de los metadatos del runtime.
Pallet | Error | Documentación |
---|---|---|
System (0) | ||
InvalidSpecName (0) | El nombre de la especificación no coincide entre el runtime actual y el nuevo runtime. | |
SpecVersionNeedsToIncrease (1) | No se permite que la versión de la especificación disminuya entre el runtime actual y el nuevo runtime. | |
FailedToExtractRuntimeVersion (2) | Falló en extraer la versión de runtime del nuevo runtime. Falló la llamada a Core_version o la decodificación de RuntimeVersion . | |
NonDefaultComposite (3) | Llamado suicidio cuando la cuenta tiene datos compuestos no predeterminados. | |
NonZeroRefCount (4) | Hay un recuento de referencias distinto de cero que impide que la cuenta se purgue. | |
Scheduler (1) | ||
FailedToSchedule (0) | No se pudo programar una llamada | |
NotFound (1) | No se puede encontrar la llamada programada. | |
TargetBlockNumberInPast (2) | Dado el número de bloque objetivo está en el pasado. | |
RescheduleNoChange (3) | La reprogramación falló porque no cambia la hora programada. | |
Balances (5) | ||
VestingBalance (0) | Balance vesting demasiado alto para enviar valor | |
LiquidityRestrictions (1) | Las restricciones de liquidez de la cuenta impiden el retiro (withdrawal) | |
Overflow (2) | Se produce un desbordamiento después de añadir | |
InsufficientBalance (3) | Balance demasiado bajo para enviar valor | |
ExistentialDeposit (4) | Valor demasiado bajo para crear una cuenta debido a un depósito existencial | |
KeepAlive (5) | La transferencia/pago mataría la cuenta | |
ExistingVestingSchedule (6) | Ya existe un calendario de vesting para esta cuenta | |
DeadAccount (7) | La cuenta beneficiaria debe ser preexistente | |
Authorship (6) | ||
InvalidUncleParent (0) | El uncle parent no está en la cadena. | |
UnclesAlreadySet (1) | Uncles ya seteados en el bloque. | |
TooManyUncles (2) | Demasiados uncles. | |
GenesisUncle (3) | El uncle es génesis. | |
TooHighUncle (4) | El uncle es demasiado alto en la cadena. | |
UncleAlreadyIncluded (5) | El uncle ya está incluido. | |
OldUncle (6) | El uncle no es lo suficientemente reciente como para ser incluido. | |
Staking (7) | ||
NotController (0) | No es una cuenta controladora. | |
NotStash (1) | No es cuenta stash. | |
AlreadyBonded (2) | Stash ya está bonded. | |
AlreadyPaired (3) | El controller ya está emparejado. | |
EmptyTargets (4) | Los targets no pueden estar vacíos. | |
DuplicateIndex (5) | Index duplicado. | |
InvalidSlashIndex (6) | Índice de registro de slash fuera de los límites. | |
InsufficientValue (7) | No puede vincularse con un valor inferior al balance mínimo. | |
NoMoreChunks (8) | No se pueden programar más chunks de desbloqueo. | |
NoUnlockChunk (9) | No se puede hacer rebond sin desbloquear chunks. | |
FundedTarget (10) | Intentando apuntar a un stash que aún tiene fondos. | |
InvalidEraToReward (11) | Era inválida para recompensar. | |
InvalidNumberOfNominations (12) | Número de nominaciones no válido. | |
NotSortedAndUnique (13) | Los artículos no están ordenados ni son únicos. | |
AlreadyClaimed (14) | Las recompensas de esta era ya se reclamaron para este validador. | |
OffchainElectionEarlySubmission (15) | El resultado enviado se recibe fuera de la ventana abierta. | |
OffchainElectionWeakSubmission (16) | El resultado presentado no es tan bueno como el almacenado en cadena. | |
SnapshotUnavailable (17) | Faltan los datos del snapshot de la ventana actual. | |
OffchainElectionBogusWinnerCount (18) | Se presentó un número incorrecto de ganadores. | |
OffchainElectionBogusWinner (19) | Uno de los ganadores presentados no es un candidato activo en la cadena (el índice está fuera de rango en el snapshot). | |
OffchainElectionBogusCompact (20) | Error al construir el tipo de asignación a partir del compacto. Esto puede ocurrir si un índice no es válido, o si los pesos están overflow. | |
OffchainElectionBogusNominator (21) | Uno de los nominadores presentados no es un nominador activo en la cadena. | |
OffchainElectionBogusNomination (22) | Uno de los nominadores presentados tiene un edge al que no han votado en cadena. | |
OffchainElectionSlashedNomination (23) | Uno de los nominadores presentados tiene un edge que se presenta antes del último slash no nulo del target. | |
OffchainElectionBogusSelfVote (24) | Un autovoto sólo debe ser originado por un validador SÓLO para él mismo. | |
OffchainElectionBogusEdge (25) | El resultado presentado tiene aristas desconocidas que no se encuentran entre los ganadores presentados. | |
OffchainElectionBogusScore (26) | La puntuación reclamada no coincide con la calculada a partir de los datos. | |
OffchainElectionBogusElectionSize (27) | El tamaño de la elección es inválido. | |
CallNotAllowed (28) | La llamada no está permitida en ese momento debido a las restricciones del periodo de elección. | |
IncorrectHistoryDepth (29) | Se proporcionó un input de profundidad de historial anterior incorrecto. | |
IncorrectSlashingSpans (30) | número incorrecto de slashings spans proporcionados. | |
Session (9) | ||
InvalidProof (0) | Prueba de propiedad inválida. | |
NoAssociatedValidatorId (1) | No hay ID de validador asociado para la cuenta. | |
DuplicatedKey (2) | Clave duplicada registrada. | |
NoKeys (3) | No hay claves asociadas a esta cuenta. | |
Grandpa (11) | ||
PauseFailed (0) | Intento de señal de pausa GRANDPA cuando el conjunto de autoridades no está en directo (o en pausa o ya pendiente de pausa). | |
ResumeFailed (1) | Intento de señal de reanudación de GRANDPA cuando el conjunto de autoridades no está en pausa (en directo o ya pendiente de reanudación). | |
ChangePending (2) | Intento de señal de cambio de GRANDPA con uno ya pendiente. | |
TooSoon (3) | No se puede señalar un cambio forzoso tan poco tiempo después del último. | |
InvalidKeyOwnershipProof (4) | Una prueba de propiedad de clave proporcionada como parte de un informe de error es inválida. | |
InvalidEquivocationProof (5) | Una prueba de equivocación aportada como parte de un informe de equivocación es inválida. | |
DuplicateOffenceReport (6) | Un determinado informe de equivocación es válido pero ya ha sido comunicado anteriormente. | |
ImOnline (12) | ||
InvalidKey (0) | Clave pública inexistente. | |
DuplicatedHeartbeat (1) | Duplicado heartbeat. | |
Democracy (14) | ||
ValueLow (0) | Valor demasiado bajo | |
ProposalMissing (1) | La propuesta no existe | |
BadIndex (2) | Índice desconocido | |
AlreadyCanceled (3) | No se puede cancelar dos veces la misma propuesta | |
DuplicateProposal (4) | Propuesta ya realizada | |
ProposalBlacklisted (5) | La propuesta sigue en la lista negra (blacklist) | |
NotSimpleMajority (6) | Próxima propuesta exterior no mayoría simple | |
InvalidHash (7) | Hash inválido | |
NoProposal (8) | Ninguna propuesta externa | |
AlreadyVetoed (9) | Identidad no puede vetar una propuesta dos veces | |
NotDelegated (10) | No delegado | |
DuplicatePreimage (11) | Preimagen ya señalada | |
NotImminent (12) | No inminente | |
TooEarly (13) | Demasiado temprano | |
Imminent (14) | Imminente | |
PreimageMissing (15) | Preimagen no encontrada | |
ReferendumInvalid (16) | Votación del referéndum nulo | |
PreimageInvalid (17) | Preimagen inválida | |
NoneWaiting (18) | Ninguna propuesta en espera | |
NotLocked (19) | La cuenta de destino no tiene bloqueo. | |
NotExpired (20) | El bloqueo de la cuenta que se desea desbloquear aún no ha expirado. | |
NotVoter (21) | La cuenta dada no votó en el referéndum. | |
NoPermission (22) | El actor no tiene permiso para llevar a cabo la acción. | |
AlreadyDelegating (23) | La cuenta ya está delegando. | |
Overflow (24) | Se ha producido un desbordamiento de entero inesperado. | |
Underflow (25) | Se ha producido un desbordamiento de enteros inesperado. | |
InsufficientFunds (26) | Se proporcionó un balance demasiado alto que la cuenta no puede afrontar. | |
NotDelegating (27) | La cuenta no está delegando actualmente. | |
VotesExist (28) | La cuenta actualmente tiene votos adjuntos y la operación no puede tener éxito hasta que estos sean removidos, ya sea a través de unvote o reap_vote . | |
InstantNotAllowed (29) | El origin instantáneo del referéndum está actualmente desautorizado. | |
Nonsense (30) | Delegar en uno mismo no tiene sentido. | |
WrongUpperBound (31) | Límite superior no válido. | |
MaxVotesReached (32) | Número máximo de votos alcanzado. | |
InvalidWitness (33) | Los datos de los witness proporcionados son erróneos. | |
TooManyProposals (34) | Número máximo de propuestas alcanzado. | |
Council (15) | ||
NotMember (0) | La cuenta no es miembro | |
DuplicateProposal (1) | No se admiten propuestas duplicadas | |
ProposalMissing (2) | La propuesta debe existir | |
WrongIndex (3) | Índice no coincidente | |
DuplicateVote (4) | Voto duplicado ignorado | |
AlreadyInitialized (5) | Los miembros ya están inicializados!. | |
TooEarly (6) | La llamada de cierre se tomó demasiado pronto, antes del final de la votación. | |
TooManyProposals (7) | Sólo puede haber un máximo de MaxProposals propuestas activas. | |
WrongProposalWeight (8) | El límite de peso dado a la propuesta era demasiado bajo. | |
WrongProposalLength (9) | El límite de longitud dado para la propuesta era demasiado bajo. | |
TechnicalCommittee (16) | ||
NotMember (0) | La cuenta no es miembro | |
DuplicateProposal (1) | No se admiten propuestas duplicadas | |
ProposalMissing (2) | La propuesta debe existir | |
WrongIndex (3) | Índice no coincidente | |
DuplicateVote (4) | Voto duplicado ignorado | |
AlreadyInitialized (5) | Los miembros ya están inicializados. | |
TooEarly (6) | La decisión se tomó demasiado pronto, antes del final de la votación. | |
TooManyProposals (7) | Sólo puede haber un máximo de MaxProposals propuestas activas. | |
WrongProposalWeight (8) | El límite de peso dado a la propuesta era demasiado bajo. | |
WrongProposalLength (9) | El límite de longitud dado para la propuesta era demasiado bajo. | |
ElectionsPhragmen (17) | ||
UnableToVote (0) | No se puede votar cuando no hay candidatos o miembros. | |
NoVotes (1) | Debe votar al menos a un candidato. | |
TooManyVotes (2) | No se puede votar a más candidatos. | |
MaximumVotesExceeded (3) | No se puede votar más del máximo permitido. | |
LowBalance (4) | No se puede votar con una participación inferior al balance mínimo. | |
UnableToPayBond (5) | El votante no puede pagar el bond de votación. | |
MustBeVoter (6) | Debe ser un votante. | |
ReportSelf (7) | No puede denunciarse a sí mismo. | |
DuplicatedCandidate (8) | Presentación duplicada de candidatos. | |
MemberSubmit (9) | El miembro no puede volver a presentar su candidatura. | |
RunnerSubmit (10) | El runner no puede volver a presentar su candidatura. | |
InsufficientCandidateFunds (11) | El candidato no dispone de fondos suficientes. | |
NotMember (12) | No es miembro. | |
InvalidCandidateCount (13) | El recuento proporcionado del número de candidatos es incorrecto. | |
InvalidVoteCount (14) | El recuento de votos proporcionado es incorrecto. | |
InvalidRenouncing (15) | El origin renunciante presentó un parámetro Renouncing erróneo. | |
InvalidReplacement (16) | La predicción sobre la sustitución tras la remoción de un miembro es errónea | |
Treasury (19) | ||
InsufficientProposersBalance (0) | El balance del proponente es demasiado bajo. | |
InvalidIndex (1) | Ninguna propuesta o recompensa en ese índice. | |
ReasonTooBig (2) | La razón esgrimida es demasiado grande. | |
AlreadyKnown (3) | El tip ya estaba encontrado/iniciado. | |
UnknownTip (4) | El hash de la tip es desconocido. | |
NotFinder (5) | La cuenta que intenta retraer el tip no es la que la encuentra. | |
StillOpen (6) | No se puede reclamar/cerrar la propina porque aún no hay suficientes tippers. | |
Premature (7) | La propina/tip no se puede reclamar/cerrar porque todavía está en el periodo de cuenta atrás. | |
UnexpectedStatus (8) | El estado del bounty es inesperado. | |
RequireCurator (9) | Requiere curador de recompensas. | |
InvalidValue (10) | Valor del bounty no válido. | |
InvalidFee (11) | Tarifa de bounty inválida. | |
PendingPayout (12) | El pago del bounty está pendiente. Para cancelar el bounty, debes desasignar y hacer slashing al curador. | |
Claims (24) | ||
InvalidEthereumSignature (0) | Firma Ethereum inválida. | |
SignerHasNoClaim (1) | La dirección de Ethereum no tiene reclamo. | |
SenderHasNoClaim (2) | El ID de la cuenta que envía tx no tiene ninguna reclamo. | |
PotUnderflow (3) | No hay suficiente en el bote para pagar alguna cantidad no invertida. Generalmente implica un error lógico. | |
InvalidStatement (4) | No se incluyó una declaración necesaria. | |
VestedBalanceExists (5) | La cuenta ya tiene un saldo vested. | |
Vesting (25) | ||
NotVesting (0) | La cuenta que se da no es vesting. | |
ExistingVestingSchedule (1) | Ya existe un plan de vesting para esta cuenta que no se puede modificar. | |
AmountLow (2) | El importe transferido es demasiado bajo para crear un calendario de vesting. | |
Identity (28) | ||
TooManySubAccounts (0) | Demasiadas subcuentas. | |
NotFound (1) | No se encuentra la cuenta. | |
NotNamed (2) | La cuenta no tiene nombre. | |
EmptyIndex (3) | Índice vacío. | |
FeeChanged (4) | Fee se modifica. | |
NoIdentity (5) | No se encontró ninguna identidad. | |
StickyJudgement (6) | Sticky Judgement. | |
JudgementGiven (7) | Sentencia dictada. | |
InvalidJudgement (8) | Sentencia inválida. | |
InvalidIndex (9) | El índice no es válido. | |
InvalidTarget (10) | El objetivo es inválido. | |
TooManyFields (11) | Demasiados campos adicionales. | |
TooManyRegistrars (12) | Se alcanzó el número máximo de registradores. No se pueden añadir más. | |
AlreadyClaimed (13) | El ID de cuenta ya tiene nombre. | |
NotSub (14) | El remitente no es una subcuenta. | |
NotOwned (15) | La subcuenta no es propiedad del remitente. | |
Proxy (29) | ||
TooMany (0) | Hay demasiados proxies registrados o demasiados anuncios pendientes. | |
NotFound (1) | No se encontró el registro del proxy. | |
NotProxy (2) | El remitente no es un proxy de la cuenta a apoderar. | |
Unproxyable (3) | Se ha intentado realizar una llamada incompatible con el filtro del tipo de proxy. | |
Duplicate (4) | La cuenta ya es un proxy. | |
NoPermission (5) | La llamada no puede hacerse por proxy porque puede escalar sus privilegios. | |
Unannounced (6) | El anuncio, si es que se hizo, fue demasiado reciente. | |
Multisig (30) | ||
MinimumThreshold (0) | El umbral debe ser 2 o superior. | |
AlreadyApproved (1) | La call ya ha sido aprobada por este firmante. | |
NoApprovalsNeeded (2) | La call no necesita (más) aprobaciones. | |
TooFewSignatories (3) | Hay muy pocos firmantes en la lista. | |
TooManySignatories (4) | Hay demasiados firmantes en la lista. | |
SignatoriesOutOfOrder (5) | Los firmantes fueron proporcionados fuera de orden; deben ser ordenados. | |
SenderInSignatories (6) | El remitente figuraba entre los demás firmantes; no debería ser así. | |
NotFound (7) | Operación multisig no encontrada al intentar cancelar. | |
NotOwner (8) | Sólo la cuenta que creó originalmente la multisig puede cancelarla. | |
NoTimepoint (9) | No se ha dado ningún plazo, pero la operación multisig ya está en marcha. | |
WrongTimepoint (10) | Se ha dado un plazo diferente a la operación multisig que está en marcha. | |
UnexpectedTimepoint (11) | Se ha dado un punto de tiempo, pero no hay ninguna operación multisig en curso. | |
WeightTooLow (12) | La información sobre el peso máximo facilitada era demasiado baja. | |
AlreadyStored (13) | Los datos a almacenar ya están almacenados. |