Come posso capire perché una transazione non è andata a buon fine?
1 risposta
- voti
-
- 2019-02-02
Letransazioninon riuscite dovrebberoessere rilevatee ottenere un codice dierrore restituitonellapreapply (RPC). Inmodo che questatransazione sia stata ancheiniettataindica unbug o una cattivagestione deglierroriin unportafoglio. Èmoltofacile capireperché questatransazionenon è riuscita. Hatentato diinviareil saldo completoe non hafondi sufficientiper coprire l'ustione.
Puoi utilizzare rpcper ottenerei metadati. In questoesempio dovresti controllaregli ophash al livello
296452
. L'ophash che ciinteressa daltuo link originale èonuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs
Èpossibile accedere atutte leinformazioni relative alblocco all'indirizzo
https://rpc.tezrpc.me/chains/main/blocks/296452
Per semplificarepossiamofiltrare l'operazione specifica a cui siamointeressati. Le operazioni sonoindicizzateper 2 valori. Ilprimoindice sarà sempre 3per le operazionieseguite da unportafoglio.
https://rpc.tezrpc.me/chains/main/blocks/296452 /operation_hashes/3
""ooeujV9F66p54xzKL3d8UgsdriAPwqroipLZRdVXVJKpD6oAMJA","onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs
La seconda operazione hash (indice 1) qui è quella che ciinteressa,quinditroveremoiltuo ophashnellaposizione 3/1.
https://rpc.tezrpc.me/chains/main/blocks/296452 /operation_hashes/3/1
"onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs"
Infine chiediamo a rpcilblocco
296452
e l'operazionenellaposizione3/1
.https://rpc.tezrpc.me/chains/main/blocks/296452 /operations/3/1
{ "protocollo": "PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP", "chain_id": "NetXdQprcVkpaWU", "hash": "onuEbjVrbaXtn4iK8KFzc4a8xTkfkyAfxiNE698SLm3MtnimdUs", "branch": "BMVq2BDfVH4Y3NdNa9Dr8smiHHkFkFqiD7qRKT9SH6TH4zrr74M", "Contenuti": [ { "kind": "transazione", "source": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "tariffa": "1420", "counter": "302028", "gas_limit": "10300", "storage_limit": "300", "amount": "1681485669", "destinazione": "tz1MNEqXdtu8YT4ppF5tRJ7PLS8vRZJ19FRQ", "metadati": { "balance_updates": [ { "kind": "contratto", "contract": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "modifica": "-1420" }, { "kind": "freezer", "category": "fee", "delegato": "tz1Yju7jmmsaUiG9qQLoYv35v5pHgnWoLWbt", "livello": 72, "change": "1420" } ], "operation_result": { "status": "backtracked", "errori": [ { "kind": "temporaneo", "id": "proto.003-PsddFKi3.contract.cannot_pay_storage_fee" }, { "kind": "permanente", "id": "proto.003-PsddFKi3.context.storage_error", "missing_key": [ "contratti", "indice", "ed25519", "cc", "fb", "95", "87", "2a", "59f77f5729e9376bcb315e917e322e", "equilibrio" ], "funzione": "ottieni" } ], "balance_updates": [ { "kind": "contratto", "contract": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "modifica": "-1681485669" }, { "kind": "contratto", "contratto": "tz1MNEqXdtu8YT4ppF5tRJ7PLS8vRZJ19FRQ", "change": "1681485669" }, { "kind": "contratto", "contratto": "tz1eKsvd2G7QXsJvim5ZBYhxnuN7SJLe2phy", "modifica": "-257000" } ], "consumed_gas": "10260", "allocation_destination_contract":true } } } ], "firma": "sigS5LzsJh9wuk4vniGtB2xn8jiFgBjVujd3nrWXVSZhigQhKwm7scVoEVgWmGSrqPq5uM3frp6b1dBZYzfnhAYTiSv1YEw5" }
Vedrai cheilprimo codice dierrore è
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
Codici dierrore ditransazione?
Una transazione diesempio sutzscan.io casualenonfornisce uno specifico codice dierrore .È statoiniettato da unnodo sconosciuto senza accesso all'output delterminale.
C'è unmodoper ricostruire come èemerso l'erroree questo semplicementenon vienemostratoin tzscan?