In the Byzantium Revision of the Yellow Paper, Appendix K:
Here is equation 195:
Here is the transaction, It was made during efforts to de-bloat the state post EIP-150. It appears that the txn was a call to a contract which called to the RIPEMD precompile (at address 0x03), with 0 gas, 0 value, and 0x0 for data:
{
"action": {
"callType": "call",
"from": "0x0e879ae28cdddeb31a405a9db354505a5560b0bd",
"gas": "0x0",
"input": "0x",
"to": "0x0000000000000000000000000000000000000003",
"value": "0x0"
},
My rough understanding of what happened: the precompile was added to the list of 'touched addresses', and then it was removed from the state because it had no balance and no code. Then the transaction ran out of gas, but it seems the contract wasn't restored to the state. (Please correct any errors).
I'm very curious about what happened here! A few specific questions:
- What does it mean to 'delete' account 0x03? (Presumably the precompile was still available after being deleted, since it's hard coded into the client).
- How was there not a consensus failure? Did all clients correctly implement the exact same bug?
- The same transaction also called to the precompiles at the addresses 0x01, 0x02, and 0x04. Why were they not affected?