Ich rufe einen Vertrag über geth RPC mit sendTransaction auf und erhalte einen Transaktions-Hash. Gibt es eine Möglichkeit, über die Geth-RPC-Schnittstelle zu überprüfen, ob diese Transaktion aufgrund eines VM-Abbruchs fehlgeschlagen ist (Solidity throw-Anweisung, ähnlich)?
Der Transaktionsbeleg scheint keine Variablen zu bieten, die dies sagen.
Die Antwort von @eth ist nicht korrekt.
Verwenden Sie eth_getTransactionReceipt, um den Status zu erhalten: QUANTITY entweder 1 (Erfolg) oder 0 (Fehler) ist genauer
Referenz:
https://eth.wiki/json-rpc/API
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'
// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {
transactionHash: '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238',
transactionIndex: '0x1', // 1
blockNumber: '0xb', // 11
blockHash: '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',
cumulativeGasUsed: '0x33bc', // 13244
gasUsed: '0x4dc', // 1244
contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', // or null, if none was created
logs: [{
// logs as returned by getFilterLogs, etc.
}, ...],
logsBloom: "0x00...0", // 256 byte bloom filter
status: '0x1'
}
}
Das Überprüfen des Transaktionsbelegs auf gas == gasUsed
ist eine praktische Heuristik , da die VM nur dann abbricht, wenn sie das gesamte Gas verbraucht.
Derzeit gibt es keinen Indikator für eine Transaktion, bei der das Benzin ausgegangen ist, daher ist nichts Präziseres als die Heuristik über RPC verfügbar.
Mikko Ohtamaa
status
Feld zu diesem Zeitpunkt in keiner API existierte.