Open Robert-MacWha opened 4 months ago
This might be because of my lack of EVM knowledge, but looking at the decompiled byte code. It seems like it should be returning non-zero in the create call?
contract Contract {
function main() {
memory[0x40:0x60] = 0x60;
var temp0 = memory[0x40:0x60];
memory[temp0:temp0 + 0x60] = code[0x0a44:0x0aa4];
memory[0x40:0x60] = temp0 + 0x60;
storage[0x00] = memory[0x60:0x80] | (storage[0x00] & ~0xffffffffffffffffffffffffffffffffffffffff);
storage[0x01] = memory[0x80:0xa0] | (storage[0x01] & ~0xffffffffffffffffffffffffffffffffffffffff);
storage[0x02] = memory[0xa0:0xc0];
memory[0x00:0x09a8] = code[0x9c:0x0a44];
return memory[0x00:0x09a8];
}
}
The last two lines are memory[0x00:0x09a8] = code[0x9c:0x0a44];
and return memory[0x00:0x09a8];
. The init bytecode should thus be copying the rest of the bytes into the runtime code, right?
6060604052604051606080610a448339016040526060805190602001805190602001805190602001505b82600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff02191690830217905550806002600050819055505b5050506109a88061009c6000396000f30060606040523615610074576000357c0100000000000000000000000000000000000000000000000000000000900480630fe65b361461007657806366d003ac146100b357806386d1a69f146100ea5780638da5cb5b146100f7578063b91d40011461012e578063ea8a1af01461014f57610074565b005b610087600480359060200150610291565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100be600450610182565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100f56004506101b1565b005b61010260045061015c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101396004506101a8565b6040518082815260200191505060405180910390f35b61015a6004506101fd565b005b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026000505481565b600260005054421015156101fa57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561028e57600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b600060006000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103b25760009150600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16823073ffffffffffffffffffffffffffffffffffffffff1631866040516105ed806103bb833901808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050604051809103906000f090508073ffffffffffffffffffffffffffffffffffffffff16ff8092506103b3565b5b5050919050560060606040526040516080806105ed8339016040526060805190602001805190602001805190602001805190602001505b83600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555081600260005081905550806003600050819055505b50505050610540806100ad6000396000f3006060604052361561008a576000357c010000000000000000000000000000000000000000000000000000000090048063119f87471461008c57806329dcb0cf146100995780633c24b7d7146100ba578063552079dc146100fe57806366d003ac14610135578063702c35fb1461016c57806386d1a69f1461018d578063c9e7e29b1461019a5761008a565b005b6100976004506102cc565b005b6100a4600450610210565b6040518082815260200191505060405180910390f35b6100cb600480359060200150610219565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6101096004506101bb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101406004506101e1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61017760045061026f565b6040518082815260200191505060405180910390f35b610198600450610278565b005b6101a5600450610207565b6040518082815260200191505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026000505481565b60036000505481565b60046000508181548110156100025790600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160005054905082565b60056000505481565b600360005054421015156102c95761028e610497565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b60003411156104945760406040519081016040528033815260200134815260200150600460005060046000508054809190600101909081548183558181151161037857600202816002028360005260206000209182019101610377919061032e565b808211156103735760006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600050600090555060010161032e565b5090565b5b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff02191690830217905550602082015181600101600050559050503460056000828282505401925050819055507f8fc4de83eddb2e6be67e269b8bfdc735778c7339168d5f734290f474f5647e143334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160026000505460056000505410151561049357610458610497565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b5b565b60006000600091505b60046000505482101561053b57600460005082815481101561000257906000526020600020906002020160005090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008260010160005054604051809050600060405180830381858888f19350505050505b81806001019250506104a0565b5b50505600000000000000000000000014fea711dca8fcea6be47e14ea1406384f18c7cc000000000000000000000000bfe465e7eb5a2928b5bf22bef93ad06089dc61790000000000000000000000000000000000000000000000000000000055fa171f
But the on-chain state is definitely 0x
and there were no other transactions made to 0x02820E4bEE488C40f7455fDCa53125565148708F
:
curl -H "Content-Type: application/json" -X POST --data '{
"jsonrpc":"2.0",
"method":"eth_getCode",
"params":["0x02820E4bEE488C40f7455fDCa53125565148708F", "latest"],
"id":1
}' http://192.168.2.212:8545
{"jsonrpc":"2.0","result":"0x","id":1}%
Seems like this bug only affects ~2 transactions from the pre-homestead days. Results from the fact that "CREATE" calls would silently fail without reverting if there wasn't enough gas. Doesn't feel worthwhile to clutter the codebase with a fix for a single-digit number of instances that don't impact the current chain state, so I'd say this can be closed. Will leave open for someone else to take a look at in case people have strong opinions.
System information
Erigon version:
thorax/erigon:v2.60.0
OS & Version: Linux | Docker
Commit hash:
Erigon Command (with flags/config):
Consensus Layer: lighthouse
Consensus Layer Command (with flags/config):
Chain/Network: Ethereum/Mainnet
Expected behaviour
The transaction trace for
0x9da5e2c5da5e44fbe867d4784f2a935139028efe58b1d31b7884d55551478ec8
should report, in theCREATE
call, that the contract is initialized with bytecode "0x
." This is the bytecode that is present on-chain.Reth demonstrates a correct transaction trace:
reth.json
Actual behaviour
Erigon incorrectly reports that the bytcode assigned to
0x02820e4bee488c40f7455fdca53125565148708f
by theCREATE
call is not equal to "0x
."erigon.json
Steps to reproduce the behaviour
Execute the below command to fetch the transaction trace from Erigon & Reth.
Backtrace