# How can I understand why a transaction has failed?

Transaction error codes?

A random failed example transaction on tzscan.io does not provide a specific error code. It has been injected by an unknown node without access to its terminal output.

Is there a way to retrace how the error emerged and is this simply not shown in tzscan?

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 is onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs

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 location 3/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",
{
"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"
}
],
{
"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