¿Cómo puedo entender por qué ha fallado una transacción?
1 respuesta
- votos
-
- 2019-02-02
Lastransaccionesfallidas deben detectarse y obtener un código deerror devueltoen la solicitudprevia (RPC). Para queestatransacciónincluso haya sidoinyectadaindica unerror o unmalmanejo deerroresen unabilletera. Esmuyfácil verpor quéfallóestatransacción. Intentóenviarel saldo completo ynotendráfondos suficientespara cubrir la quema.
Puede usar rpcpara obtener losmetadatos. Enesteejemplo,comprobaría las ophashesen elnivel
296452
. El ophash quenosinteresa de suenlace originalesonuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs
Sepuede acceder atoda lainformación sobreelbloqueoen
https://rpc.tezrpc.me/chains/main/blocks/296452
Para que seamásfácil,podemosfiltrar la operaciónespecífica quenosinteresa. Las operacionesestánindexadaspor 2 valores. Elprimer índice siempre será 3para operaciones realizadas desde unabilletera.
https://rpc.tezrpc.me/chains/main/blocks/296452 /operation_hashes/3
["ooeujV9F66p54xzKL3d8UgsdriAPwqroipLZRdVXVJKpD6oAMJA","onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3Mtnim/dUs"
El segundo hash de operación (índice 1) aquíesel quenosinteresa,por lo queencontraremos su ophashen la ubicación 3/1.
https://rpc.tezrpc.me/chains/main/blocks/296452 /operation_hashes/3/1
"onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs"
Finalmente lepedimos al rpcelbloque
296452
y la operaciónen la ubicación3/1
.https://rpc.tezrpc.me/chains/main/blocks/296452 /operations/3/1
{ "protocolo": "PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP", "chain_id": "NetXdQprcVkpaWU", "hash": "onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs", "rama": "BMVq2BDfVH4Y3NdNa9Dr8smiHHkFkFqiD7qRKT9SH6TH4zrr74M", "contenido": [ { "kind": "transacción", "fuente": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "tarifa": "1420", "contador": "302028", "gas_limit": "10300", "storage_limit": "300", "monto": "1681485669", "destino": "tz1MNEqXdtu8YT4ppF5tRJ7PLS8vRZJ19FRQ", "metadatos": { "balance_updates": [ { "kind": "contrato", "contrato": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "cambiar": "-1420" }, { "kind": "congelador", "categoría": "tarifas", "delegado": "tz1Yju7jmmsaUiG9qQLoYv35v5pHgnWoLWbt", "nivel": 72, "cambiar": "1420" } ], "resultado_operación": { "status": "retrocedido", "errores": [ { "kind": "temporal", "id": "proto.003-PsddFKi3.contract.cannot_pay_storage_fee" }, { "kind": "permanente", "id": "proto.003-PsddFKi3.context.storage_error", "missing_key": [ "contratos", "índice", "ed25519", "cc", "pensión completa", "95", "87", "2a", "59f77f5729e9376bcb315e917e322e", "equilibrar" ], "función": "obtener" } ], "balance_updates": [ { "kind": "contrato", "contrato": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "cambiar": "-1681485669" }, { "kind": "contrato", "contrato": "tz1MNEqXdtu8YT4ppF5tRJ7PLS8vRZJ19FRQ", "cambiar": "1681485669" }, { "kind": "contrato", "contrato": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "cambiar": "-257000" } ], "gas_consumido": "10260", "contrato_destino_asignado": verdadero } } } ], "firma": "sigS5LzsJh9wuk4vniGtB2xn8jiFgBjVujd3nrWXVSZhigQhKwm7scVoEVgWmGSrqPq5uM3frp6b1dBZYzfnhAYTiSv1YEw5" }
Verá queelprimer código deerrores
proto.003-PsddFKi3.contract.cannot_pay_storage_fee
Failed transactions should be detected and get an error code returned in the preapply (RPC). So that this transaction even have been injected indicate a bug or bad error handling in a wallet. It is very easy to see why this transaction failed. It tried to send the full balance and wont have enough funds to cover the burn.
You can use the rpc to get the metadata. In this example you would check the ophashes on level
296452
. The ophash we are interested in from your original link isonuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs
The entire information regarding the block can be accessed at
https://rpc.tezrpc.me/chains/main/blocks/296452
To make it easier we can filter out the specific operation we are interested in. Operations are indexed by 2 values. The first index will always be 3 for operations done from a wallet.
https://rpc.tezrpc.me/chains/main/blocks/296452/operation_hashes/3
["ooeujV9F66p54xzKL3d8UgsdriAPwqroipLZRdVXVJKpD6oAMJA","onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs"]
The second operation hash (index 1) here is the one we are interested in, so we'll find your ophash at location 3/1.
https://rpc.tezrpc.me/chains/main/blocks/296452/operation_hashes/3/1
"onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs"
Finally we ask the rpc for block
296452
and the operation at location3/1
.https://rpc.tezrpc.me/chains/main/blocks/296452/operations/3/1
{ "protocol": "PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP", "chain_id": "NetXdQprcVkpaWU", "hash": "onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs", "branch": "BMVq2BDfVH4Y3NdNa9Dr8smiHHkFkFqiD7qRKT9SH6TH4zrr74M", "contents": [ { "kind": "transaction", "source": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "fee": "1420", "counter": "302028", "gas_limit": "10300", "storage_limit": "300", "amount": "1681485669", "destination": "tz1MNEqXdtu8YT4ppF5tRJ7PLS8vRZJ19FRQ", "metadata": { "balance_updates": [ { "kind": "contract", "contract": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "change": "-1420" }, { "kind": "freezer", "category": "fees", "delegate": "tz1Yju7jmmsaUiG9qQLoYv35v5pHgnWoLWbt", "level": 72, "change": "1420" } ], "operation_result": { "status": "backtracked", "errors": [ { "kind": "temporary", "id": "proto.003-PsddFKi3.contract.cannot_pay_storage_fee" }, { "kind": "permanent", "id": "proto.003-PsddFKi3.context.storage_error", "missing_key": [ "contracts", "index", "ed25519", "cc", "fb", "95", "87", "2a", "59f77f5729e9376bcb315e917e322e", "balance" ], "function": "get" } ], "balance_updates": [ { "kind": "contract", "contract": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "change": "-1681485669" }, { "kind": "contract", "contract": "tz1MNEqXdtu8YT4ppF5tRJ7PLS8vRZJ19FRQ", "change": "1681485669" }, { "kind": "contract", "contract": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "change": "-257000" } ], "consumed_gas": "10260", "allocated_destination_contract": true } } } ], "signature": "sigS5LzsJh9wuk4vniGtB2xn8jiFgBjVujd3nrWXVSZhigQhKwm7scVoEVgWmGSrqPq5uM3frp6b1dBZYzfnhAYTiSv1YEw5" }
You will see that the first error code is
proto.003-PsddFKi3.contract.cannot_pay_storage_fee
¿Códigos deerror detransacción?
Una transacción deejemplo aleatoriaen tzscan.io noproporciona un código deerror específico.>.Ha sidoinyectadopor unnodo desconocido sin acceso a la salida de suterminal.
¿Hay algunamanera de rastrear cómo surgióelerror yesto simplementeno semuestraen tzscan?