mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 11:20:45 +00:00
core: reject missing request predeploy code
This commit is contained in:
parent
2919267b64
commit
d3f8d0a2f1
32 changed files with 305 additions and 60 deletions
12
cmd/evm/testdata/33/alloc.json
vendored
12
cmd/evm/testdata/33/alloc.json
vendored
|
|
@ -21,6 +21,18 @@
|
||||||
"code": "0x6042805500",
|
"code": "0x6042805500",
|
||||||
"storage": {}
|
"storage": {}
|
||||||
},
|
},
|
||||||
|
"0x00000961ef480eb55e80d19ad83579a64c007002": {
|
||||||
|
"nonce": "0x01",
|
||||||
|
"balance": "0x0",
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd",
|
||||||
|
"storage": {}
|
||||||
|
},
|
||||||
|
"0x0000bbddc7ce488642fb579f8b00f3a590007251": {
|
||||||
|
"nonce": "0x01",
|
||||||
|
"balance": "0x0",
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd",
|
||||||
|
"storage": {}
|
||||||
|
},
|
||||||
"0x71562b71999873DB5b286dF957af199Ec94617F7": {
|
"0x71562b71999873DB5b286dF957af199Ec94617F7": {
|
||||||
"nonce": "0x00",
|
"nonce": "0x00",
|
||||||
"balance": "0x6124fee993bc0000",
|
"balance": "0x6124fee993bc0000",
|
||||||
|
|
|
||||||
58
cmd/evm/testdata/33/exp.json
vendored
58
cmd/evm/testdata/33/exp.json
vendored
|
|
@ -8,6 +8,16 @@
|
||||||
"code": "0x6042805500",
|
"code": "0x6042805500",
|
||||||
"balance": "0x29a2241af62c0000"
|
"balance": "0x29a2241af62c0000"
|
||||||
},
|
},
|
||||||
|
"0x00000961ef480eb55e80d19ad83579a64c007002": {
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd",
|
||||||
|
"balance": "0x0",
|
||||||
|
"nonce": "0x1"
|
||||||
|
},
|
||||||
|
"0x0000bbddc7ce488642fb579f8b00f3a590007251": {
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd",
|
||||||
|
"balance": "0x0",
|
||||||
|
"nonce": "0x1"
|
||||||
|
},
|
||||||
"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
|
"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
|
||||||
"balance": "0x2bf52"
|
"balance": "0x2bf52"
|
||||||
},
|
},
|
||||||
|
|
@ -35,29 +45,33 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"result": {
|
"result": {
|
||||||
"stateRoot": "0x9fdcacd4510e93c4488e537dc51578b5c6d505771db64a2610036eeb4be7b26f",
|
"stateRoot": "0x862606a83f3adba7e201d226aba4665e2781911fa129e0c0f04c3fd486883a2a",
|
||||||
"txRoot": "0x5d13a0b074e80388dc754da92b22922313a63417b3e25a10f324935e09697a53",
|
"txRoot": "0x5d13a0b074e80388dc754da92b22922313a63417b3e25a10f324935e09697a53",
|
||||||
"receiptsRoot": "0x504c5d86c34391f70d210e6c482615b391db4bdb9f43479366399d9c5599850a",
|
"receiptsRoot": "0x504c5d86c34391f70d210e6c482615b391db4bdb9f43479366399d9c5599850a",
|
||||||
"logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
|
"logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
|
||||||
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","receipts": [{
|
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"type": "0x4",
|
"receipts": [
|
||||||
"root": "0x",
|
{
|
||||||
"status": "0x1",
|
"type": "0x4",
|
||||||
"cumulativeGasUsed": "0x15fa9",
|
"root": "0x",
|
||||||
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","logs": [],"transactionHash": "0x0417aab7c1d8a3989190c3167c132876ce9b8afd99262c5a0f9d06802de3d7ef",
|
"status": "0x1",
|
||||||
"contractAddress": "0x0000000000000000000000000000000000000000",
|
"cumulativeGasUsed": "0x15fa9",
|
||||||
"gasUsed": "0x15fa9",
|
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"effectiveGasPrice": null,
|
"logs": [],
|
||||||
"blockHash": "0x1337000000000000000000000000000000000000000000000000000000000000",
|
"transactionHash": "0x0417aab7c1d8a3989190c3167c132876ce9b8afd99262c5a0f9d06802de3d7ef",
|
||||||
"blockNumber": "0x1",
|
"contractAddress": "0x0000000000000000000000000000000000000000",
|
||||||
"transactionIndex": "0x0"
|
"gasUsed": "0x15fa9",
|
||||||
}
|
"effectiveGasPrice": null,
|
||||||
],
|
"blockHash": "0x1337000000000000000000000000000000000000000000000000000000000000",
|
||||||
"currentDifficulty": null,
|
"blockNumber": "0x1",
|
||||||
"gasUsed": "0x15fa9",
|
"transactionIndex": "0x0"
|
||||||
"currentBaseFee": "0x7",
|
}
|
||||||
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
],
|
||||||
"requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
"currentDifficulty": null,
|
||||||
"requests": []
|
"gasUsed": "0x15fa9",
|
||||||
}
|
"currentBaseFee": "0x7",
|
||||||
|
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
||||||
|
"requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||||
|
"requests": []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
14
cmd/evm/testdata/34/alloc.json
vendored
14
cmd/evm/testdata/34/alloc.json
vendored
|
|
@ -2,5 +2,17 @@
|
||||||
"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
|
"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
|
||||||
"balance": "0x1000000000000000000",
|
"balance": "0x1000000000000000000",
|
||||||
"nonce": "0x0"
|
"nonce": "0x0"
|
||||||
|
},
|
||||||
|
"0x00000961ef480eb55e80d19ad83579a64c007002": {
|
||||||
|
"nonce": "0x01",
|
||||||
|
"balance": "0x0",
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd",
|
||||||
|
"storage": {}
|
||||||
|
},
|
||||||
|
"0x0000bbddc7ce488642fb579f8b00f3a590007251": {
|
||||||
|
"nonce": "0x01",
|
||||||
|
"balance": "0x0",
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd",
|
||||||
|
"storage": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
cmd/evm/testdata/34/exp.json
vendored
16
cmd/evm/testdata/34/exp.json
vendored
|
|
@ -1,17 +1,27 @@
|
||||||
{
|
{
|
||||||
"alloc": {
|
"alloc": {
|
||||||
|
"0x00000961ef480eb55e80d19ad83579a64c007002": {
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd",
|
||||||
|
"balance": "0x0",
|
||||||
|
"nonce": "0x1"
|
||||||
|
},
|
||||||
|
"0x0000bbddc7ce488642fb579f8b00f3a590007251": {
|
||||||
|
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd",
|
||||||
|
"balance": "0x0",
|
||||||
|
"nonce": "0x1"
|
||||||
|
},
|
||||||
"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
|
"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
|
||||||
"balance": "0x1000000000000000000"
|
"balance": "0x1000000000000000000"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"result": {
|
"result": {
|
||||||
"stateRoot": "0x01c28492482a1a1f66224726ef1059a7036fce69d1d2c991b65cd013725d5742",
|
"stateRoot": "0x483ed12ebbb83ddc8d5c6de80d5cb352580800285a5a141697bd922cac1d5a49",
|
||||||
"txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
"txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
||||||
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
||||||
"logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
|
"logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
|
||||||
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"currentDifficulty": null,
|
|
||||||
"receipts": [],
|
"receipts": [],
|
||||||
|
"currentDifficulty": null,
|
||||||
"gasUsed": "0x0",
|
"gasUsed": "0x0",
|
||||||
"currentBaseFee": "0x10",
|
"currentBaseFee": "0x10",
|
||||||
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
||||||
|
|
@ -20,4 +30,4 @@
|
||||||
"requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
"requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||||
"requests": []
|
"requests": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4016,6 +4016,22 @@ func TestEIP3651(t *testing.T) {
|
||||||
// Simple deposit generator, source: https://gist.github.com/lightclient/54abb2af2465d6969fa6d1920b9ad9d7
|
// Simple deposit generator, source: https://gist.github.com/lightclient/54abb2af2465d6969fa6d1920b9ad9d7
|
||||||
var depositsGeneratorCode = common.FromHex("6080604052366103aa575f603067ffffffffffffffff811115610025576100246103ae565b5b6040519080825280601f01601f1916602001820160405280156100575781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f8151811061007d5761007c6103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f602067ffffffffffffffff8111156100c7576100c66103ae565b5b6040519080825280601f01601f1916602001820160405280156100f95781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f8151811061011f5761011e6103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600867ffffffffffffffff811115610169576101686103ae565b5b6040519080825280601f01601f19166020018201604052801561019b5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f815181106101c1576101c06103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f606067ffffffffffffffff81111561020b5761020a6103ae565b5b6040519080825280601f01601f19166020018201604052801561023d5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f81518110610263576102626103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600867ffffffffffffffff8111156102ad576102ac6103ae565b5b6040519080825280601f01601f1916602001820160405280156102df5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f81518110610305576103046103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f8081819054906101000a900460ff168092919061035090610441565b91906101000a81548160ff021916908360ff160217905550507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c585858585856040516103a09594939291906104d9565b60405180910390a1005b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60ff82169050919050565b5f61044b82610435565b915060ff820361045e5761045d610408565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6104ab82610469565b6104b58185610473565b93506104c5818560208601610483565b6104ce81610491565b840191505092915050565b5f60a0820190508181035f8301526104f181886104a1565b9050818103602083015261050581876104a1565b9050818103604083015261051981866104a1565b9050818103606083015261052d81856104a1565b9050818103608083015261054181846104a1565b9050969550505050505056fea26469706673582212208569967e58690162d7d6fe3513d07b393b4c15e70f41505cbbfd08f53eba739364736f6c63430008190033")
|
var depositsGeneratorCode = common.FromHex("6080604052366103aa575f603067ffffffffffffffff811115610025576100246103ae565b5b6040519080825280601f01601f1916602001820160405280156100575781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f8151811061007d5761007c6103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f602067ffffffffffffffff8111156100c7576100c66103ae565b5b6040519080825280601f01601f1916602001820160405280156100f95781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f8151811061011f5761011e6103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600867ffffffffffffffff811115610169576101686103ae565b5b6040519080825280601f01601f19166020018201604052801561019b5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f815181106101c1576101c06103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f606067ffffffffffffffff81111561020b5761020a6103ae565b5b6040519080825280601f01601f19166020018201604052801561023d5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f81518110610263576102626103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600867ffffffffffffffff8111156102ad576102ac6103ae565b5b6040519080825280601f01601f1916602001820160405280156102df5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f81518110610305576103046103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f8081819054906101000a900460ff168092919061035090610441565b91906101000a81548160ff021916908360ff160217905550507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c585858585856040516103a09594939291906104d9565b60405180910390a1005b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60ff82169050919050565b5f61044b82610435565b915060ff820361045e5761045d610408565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6104ab82610469565b6104b58185610473565b93506104c5818560208601610483565b6104ce81610491565b840191505092915050565b5f60a0820190508181035f8301526104f181886104a1565b9050818103602083015261050581876104a1565b9050818103604083015261051981866104a1565b9050818103606083015261052d81856104a1565b9050818103608083015261054181846104a1565b9050969550505050505056fea26469706673582212208569967e58690162d7d6fe3513d07b393b4c15e70f41505cbbfd08f53eba739364736f6c63430008190033")
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
|
func addAmsterdamRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
alloc = addPragueRequestPredeploys(alloc)
|
||||||
|
alloc[params.BuilderDepositAddress] = types.Account{Nonce: 1, Code: params.BuilderDepositCode, Balance: common.Big0}
|
||||||
|
alloc[params.BuilderExitAddress] = types.Account{Nonce: 1, Code: params.BuilderExitCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
// This is a smoke test for EIP-7685 requests added in the Prague fork. The test first
|
// This is a smoke test for EIP-7685 requests added in the Prague fork. The test first
|
||||||
// creates a block containing requests, and then inserts it into the chain to run
|
// creates a block containing requests, and then inserts it into the chain to run
|
||||||
// validation.
|
// validation.
|
||||||
|
|
@ -4114,7 +4130,7 @@ func TestEIP7702(t *testing.T) {
|
||||||
)
|
)
|
||||||
gspec := &Genesis{
|
gspec := &Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{
|
||||||
addr1: {Balance: funds},
|
addr1: {Balance: funds},
|
||||||
addr2: {Balance: funds},
|
addr2: {Balance: funds},
|
||||||
aa: { // The address 0xAAAA calls into addr2
|
aa: { // The address 0xAAAA calls into addr2
|
||||||
|
|
@ -4127,7 +4143,7 @@ func TestEIP7702(t *testing.T) {
|
||||||
Nonce: 0,
|
Nonce: 0,
|
||||||
Balance: big.NewInt(0),
|
Balance: big.NewInt(0),
|
||||||
},
|
},
|
||||||
},
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sign authorization tuples.
|
// Sign authorization tuples.
|
||||||
|
|
@ -4432,7 +4448,7 @@ func TestGetCanonicalReceipt(t *testing.T) {
|
||||||
funds = big.NewInt(1000000000000000000)
|
funds = big.NewInt(1000000000000000000)
|
||||||
gspec = &Genesis{
|
gspec = &Genesis{
|
||||||
Config: params.MergedTestChainConfig,
|
Config: params.MergedTestChainConfig,
|
||||||
Alloc: types.GenesisAlloc{address: {Balance: funds}},
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{address: {Balance: funds}}),
|
||||||
BaseFee: big.NewInt(params.InitialBaseFee),
|
BaseFee: big.NewInt(params.InitialBaseFee),
|
||||||
}
|
}
|
||||||
signer = types.LatestSigner(gspec.Config)
|
signer = types.LatestSigner(gspec.Config)
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,10 @@ func TestGeneratePOSChain(t *testing.T) {
|
||||||
config = *params.MergedTestChainConfig
|
config = *params.MergedTestChainConfig
|
||||||
gspec = &Genesis{
|
gspec = &Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{
|
||||||
address: {Balance: funds},
|
address: {Balance: funds},
|
||||||
params.BeaconRootsAddress: {Code: params.BeaconRootsCode},
|
params.BeaconRootsAddress: {Code: params.BeaconRootsCode},
|
||||||
},
|
}),
|
||||||
BaseFee: big.NewInt(params.InitialBaseFee),
|
BaseFee: big.NewInt(params.InitialBaseFee),
|
||||||
Difficulty: common.Big1,
|
Difficulty: common.Big1,
|
||||||
GasLimit: 5_000_000,
|
GasLimit: 5_000_000,
|
||||||
|
|
|
||||||
|
|
@ -52,9 +52,9 @@ func TestEIP8246SelfdestructNoBurn(t *testing.T) {
|
||||||
|
|
||||||
gspec := &Genesis{
|
gspec := &Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addAmsterdamRequestPredeploys(types.GenesisAlloc{
|
||||||
addr1: {Balance: newGwei(1_000_000_000)},
|
addr1: {Balance: newGwei(1_000_000_000)},
|
||||||
},
|
}),
|
||||||
}
|
}
|
||||||
// The contract created by addr1's first (nonce 0) transaction.
|
// The contract created by addr1's first (nonce 0) transaction.
|
||||||
created := crypto.CreateAddress(addr1, 0)
|
created := crypto.CreateAddress(addr1, 0)
|
||||||
|
|
|
||||||
|
|
@ -82,11 +82,11 @@ func testEthTransferLogs(t *testing.T, value uint64) {
|
||||||
|
|
||||||
gspec := &Genesis{
|
gspec := &Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addAmsterdamRequestPredeploys(types.GenesisAlloc{
|
||||||
addr1: {Balance: newGwei(1000000000)},
|
addr1: {Balance: newGwei(1000000000)},
|
||||||
addr2: {Code: ethTransferTestCode},
|
addr2: {Code: ethTransferTestCode},
|
||||||
addr3: {Code: ethTransferTestCode},
|
addr3: {Code: ethTransferTestCode},
|
||||||
},
|
}),
|
||||||
}
|
}
|
||||||
_, blocks, receipts := GenerateChainWithGenesis(gspec, engine, 1, func(i int, b *BlockGen) {
|
_, blocks, receipts := GenerateChainWithGenesis(gspec, engine, 1, func(i int, b *BlockGen) {
|
||||||
tx := types.MustSignNewTx(key1, signer, &types.DynamicFeeTx{
|
tx := types.MustSignNewTx(key1, signer, &types.DynamicFeeTx{
|
||||||
|
|
|
||||||
|
|
@ -401,6 +401,9 @@ func ProcessBuilderExitQueue(requests *[][]byte, rules params.Rules, evm *vm.EVM
|
||||||
}
|
}
|
||||||
|
|
||||||
func processRequestsSystemCall(requests *[][]byte, rules params.Rules, evm *vm.EVM, requestType byte, addr common.Address, blockAccessIndex uint32, blockAccessList *bal.ConstructionBlockAccessList) error {
|
func processRequestsSystemCall(requests *[][]byte, rules params.Rules, evm *vm.EVM, requestType byte, addr common.Address, blockAccessIndex uint32, blockAccessList *bal.ConstructionBlockAccessList) error {
|
||||||
|
if evm.StateDB.GetCodeSize(addr) == 0 {
|
||||||
|
return fmt.Errorf("system contract address %s does not contain code", addr.Hex())
|
||||||
|
}
|
||||||
if tracer := evm.Config.Tracer; tracer != nil {
|
if tracer := evm.Config.Tracer; tracer != nil {
|
||||||
onSystemCallStart(tracer, evm.GetVMContext())
|
onSystemCallStart(tracer, evm.GetVMContext())
|
||||||
if tracer.OnSystemCallEnd != nil {
|
if tracer.OnSystemCallEnd != nil {
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"math"
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
|
@ -29,7 +30,10 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/consensus/misc/eip1559"
|
"github.com/ethereum/go-ethereum/consensus/misc/eip1559"
|
||||||
"github.com/ethereum/go-ethereum/consensus/misc/eip4844"
|
"github.com/ethereum/go-ethereum/consensus/misc/eip4844"
|
||||||
"github.com/ethereum/go-ethereum/core/rawdb"
|
"github.com/ethereum/go-ethereum/core/rawdb"
|
||||||
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
|
"github.com/ethereum/go-ethereum/core/tracing"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/keccak"
|
"github.com/ethereum/go-ethereum/crypto/keccak"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
|
|
@ -39,6 +43,80 @@ import (
|
||||||
|
|
||||||
func u64(val uint64) *uint64 { return &val }
|
func u64(val uint64) *uint64 { return &val }
|
||||||
|
|
||||||
|
func TestProcessRequestsSystemCallMissingCode(t *testing.T) {
|
||||||
|
config := *params.MergedTestChainConfig
|
||||||
|
number := big.NewInt(1)
|
||||||
|
time := uint64(10)
|
||||||
|
rules := config.Rules(number, true, time)
|
||||||
|
|
||||||
|
newEVM := func(t *testing.T, addr common.Address, code []byte) *vm.EVM {
|
||||||
|
t.Helper()
|
||||||
|
statedb, err := state.New(types.EmptyRootHash, state.NewDatabaseForTesting())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create state: %v", err)
|
||||||
|
}
|
||||||
|
if code != nil {
|
||||||
|
statedb.SetNonce(addr, 1, tracing.NonceChangeUnspecified)
|
||||||
|
statedb.SetCode(addr, code, tracing.CodeChangeUnspecified)
|
||||||
|
}
|
||||||
|
header := &types.Header{
|
||||||
|
Number: number,
|
||||||
|
Time: time,
|
||||||
|
GasLimit: 30_000_000,
|
||||||
|
Difficulty: new(big.Int),
|
||||||
|
}
|
||||||
|
vmContext := NewEVMBlockContext(header, &BlockChain{chainConfig: &config}, new(common.Address))
|
||||||
|
return vm.NewEVM(vmContext, statedb, &config, vm.Config{})
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range []struct {
|
||||||
|
name string
|
||||||
|
addr common.Address
|
||||||
|
code []byte
|
||||||
|
process func(*[][]byte, *vm.EVM) error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "withdrawal queue",
|
||||||
|
addr: params.WithdrawalQueueAddress,
|
||||||
|
code: params.WithdrawalQueueCode,
|
||||||
|
process: func(requests *[][]byte, evm *vm.EVM) error {
|
||||||
|
return ProcessWithdrawalQueue(requests, rules, evm, 0, nil)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "consolidation queue",
|
||||||
|
addr: params.ConsolidationQueueAddress,
|
||||||
|
code: params.ConsolidationQueueCode,
|
||||||
|
process: func(requests *[][]byte, evm *vm.EVM) error {
|
||||||
|
return ProcessConsolidationQueue(requests, rules, evm, 0, nil)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
t.Run(tt.name+"/missing code", func(t *testing.T) {
|
||||||
|
var requests [][]byte
|
||||||
|
err := tt.process(&requests, newEVM(t, tt.addr, nil))
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("expected missing system contract code error")
|
||||||
|
}
|
||||||
|
if !strings.Contains(err.Error(), "does not contain code") {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if len(requests) != 0 {
|
||||||
|
t.Fatalf("unexpected requests: %x", requests)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run(tt.name+"/empty queue", func(t *testing.T) {
|
||||||
|
var requests [][]byte
|
||||||
|
if err := tt.process(&requests, newEVM(t, tt.addr, tt.code)); err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if len(requests) != 0 {
|
||||||
|
t.Fatalf("unexpected requests: %x", requests)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestStateProcessorErrors tests the output from the 'core' errors
|
// TestStateProcessorErrors tests the output from the 'core' errors
|
||||||
// as defined in core/error.go. These errors are generated when the
|
// as defined in core/error.go. These errors are generated when the
|
||||||
// blockchain imports bad blocks, meaning blocks which have valid headers but
|
// blockchain imports bad blocks, meaning blocks which have valid headers but
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ func generateMergeChain(n int, merged bool) (*core.Genesis, []*types.Block) {
|
||||||
|
|
||||||
genesis := &core.Genesis{
|
genesis := &core.Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{
|
||||||
testAddr: {Balance: testBalance},
|
testAddr: {Balance: testBalance},
|
||||||
params.BeaconRootsAddress: {Balance: common.Big0, Code: common.Hex2Bytes("3373fffffffffffffffffffffffffffffffffffffffe14604457602036146024575f5ffd5b620180005f350680545f35146037575f5ffd5b6201800001545f5260205ff35b6201800042064281555f359062018000015500")},
|
params.BeaconRootsAddress: {Balance: common.Big0, Code: common.Hex2Bytes("3373fffffffffffffffffffffffffffffffffffffffe14604457602036146024575f5ffd5b620180005f350680545f35146037575f5ffd5b6201800001545f5260205ff35b6201800042064281555f359062018000015500")},
|
||||||
config.DepositContractAddress: {
|
config.DepositContractAddress: {
|
||||||
|
|
@ -86,7 +86,7 @@ func generateMergeChain(n int, merged bool) (*core.Genesis, []*types.Block) {
|
||||||
Nonce: 0,
|
Nonce: 0,
|
||||||
Balance: big.NewInt(0),
|
Balance: big.NewInt(0),
|
||||||
},
|
},
|
||||||
},
|
}),
|
||||||
ExtraData: []byte("test genesis"),
|
ExtraData: []byte("test genesis"),
|
||||||
Timestamp: 9000,
|
Timestamp: 9000,
|
||||||
BaseFee: big.NewInt(params.InitialBaseFee),
|
BaseFee: big.NewInt(params.InitialBaseFee),
|
||||||
|
|
@ -112,6 +112,15 @@ func generateMergeChain(n int, merged bool) (*core.Genesis, []*types.Block) {
|
||||||
return genesis, blocks
|
return genesis, blocks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
func TestEth2AssembleBlock(t *testing.T) {
|
func TestEth2AssembleBlock(t *testing.T) {
|
||||||
genesis, blocks := generateMergeChain(10, false)
|
genesis, blocks := generateMergeChain(10, false)
|
||||||
n, ethservice := startEthService(t, genesis, blocks)
|
n, ethservice := startEthService(t, genesis, blocks)
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,22 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/consensus/ethash"
|
"github.com/ethereum/go-ethereum/consensus/ethash"
|
||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
"github.com/ethereum/go-ethereum/core/rawdb"
|
"github.com/ethereum/go-ethereum/core/rawdb"
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/core/types/bal"
|
"github.com/ethereum/go-ethereum/core/types/bal"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/holiman/uint256"
|
"github.com/holiman/uint256"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
func makeTestBAL(minSize int) *bal.BlockAccessList {
|
func makeTestBAL(minSize int) *bal.BlockAccessList {
|
||||||
n := minSize/33 + 1 // 33 bytes per storage read slot in RLP
|
n := minSize/33 + 1 // 33 bytes per storage read slot in RLP
|
||||||
access := bal.AccountAccess{
|
access := bal.AccountAccess{
|
||||||
|
|
@ -56,6 +66,7 @@ func makeTestBAL(minSize int) *bal.BlockAccessList {
|
||||||
func getChainWithBALs(nBlocks int, balSize int) (*core.BlockChain, []common.Hash, []rlp.RawValue) {
|
func getChainWithBALs(nBlocks int, balSize int) (*core.BlockChain, []common.Hash, []rlp.RawValue) {
|
||||||
gspec := &core.Genesis{
|
gspec := &core.Genesis{
|
||||||
Config: params.MergedTestChainConfig,
|
Config: params.MergedTestChainConfig,
|
||||||
|
Alloc: addPragueRequestPredeploys(nil),
|
||||||
}
|
}
|
||||||
db := rawdb.NewMemoryDatabase()
|
db := rawdb.NewMemoryDatabase()
|
||||||
engine := beacon.New(ethash.NewFaker())
|
engine := beacon.New(ethash.NewFaker())
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,15 @@ func newTestBackend(t *testing.T, n int, gspec *core.Genesis, generator func(i i
|
||||||
return backend
|
return backend
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
func (b *testBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) {
|
func (b *testBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) {
|
||||||
return b.chain.GetHeaderByHash(hash), nil
|
return b.chain.GetHeaderByHash(hash), nil
|
||||||
}
|
}
|
||||||
|
|
@ -1389,12 +1398,12 @@ func TestTraceBlockWithBasefee(t *testing.T) {
|
||||||
target := common.HexToAddress("0x1111111111111111111111111111111111111111")
|
target := common.HexToAddress("0x1111111111111111111111111111111111111111")
|
||||||
genesis := &core.Genesis{
|
genesis := &core.Genesis{
|
||||||
Config: params.AllDevChainProtocolChanges,
|
Config: params.AllDevChainProtocolChanges,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{
|
||||||
accounts[0].addr: {Balance: big.NewInt(1 * params.Ether)},
|
accounts[0].addr: {Balance: big.NewInt(1 * params.Ether)},
|
||||||
target: {Nonce: 1, Code: []byte{
|
target: {Nonce: 1, Code: []byte{
|
||||||
byte(vm.BASEFEE), byte(vm.STOP),
|
byte(vm.BASEFEE), byte(vm.STOP),
|
||||||
}},
|
}},
|
||||||
},
|
}),
|
||||||
}
|
}
|
||||||
genBlocks := 1
|
genBlocks := 1
|
||||||
signer := types.HomesteadSigner{}
|
signer := types.HomesteadSigner{}
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,9 @@ func setupTestBlockchain(t *testing.T, genesis *core.Genesis, tx *types.Transact
|
||||||
} else {
|
} else {
|
||||||
engine = ethash.NewFaker()
|
engine = ethash.NewFaker()
|
||||||
}
|
}
|
||||||
|
if useBeacon {
|
||||||
|
genesis.Alloc = addPragueRequestPredeploys(genesis.Alloc)
|
||||||
|
}
|
||||||
|
|
||||||
_, blocks, _ := core.GenerateChainWithGenesis(genesis, engine, 1, func(i int, b *core.BlockGen) {
|
_, blocks, _ := core.GenerateChainWithGenesis(genesis, engine, 1, func(i int, b *core.BlockGen) {
|
||||||
b.AddTx(tx)
|
b.AddTx(tx)
|
||||||
|
|
|
||||||
|
|
@ -67,11 +67,21 @@ type supplyInfo struct {
|
||||||
|
|
||||||
func emptyBlockGenerationFunc(b *core.BlockGen) {}
|
func emptyBlockGenerationFunc(b *core.BlockGen) {}
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
func TestSupplyOmittedFields(t *testing.T) {
|
func TestSupplyOmittedFields(t *testing.T) {
|
||||||
var (
|
var (
|
||||||
config = *params.MergedTestChainConfig
|
config = *params.MergedTestChainConfig
|
||||||
gspec = &core.Genesis{
|
gspec = &core.Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
|
Alloc: addPragueRequestPredeploys(nil),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -84,7 +94,7 @@ func TestSupplyOmittedFields(t *testing.T) {
|
||||||
|
|
||||||
expected := supplyInfo{
|
expected := supplyInfo{
|
||||||
Number: 0,
|
Number: 0,
|
||||||
Hash: common.HexToHash("0x3055fc27d6b4a08eb07033a0d1ee755a4b2988086f28a6189eac1b507525eeb1"),
|
Hash: common.HexToHash("0x27c7fd72c3f07448e76eba06b5a3f95be9cfb948116c21d4ef4a8315adbe0bfb"),
|
||||||
ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
||||||
}
|
}
|
||||||
actual := out[expected.Number]
|
actual := out[expected.Number]
|
||||||
|
|
@ -273,6 +283,7 @@ func TestSupplyWithdrawals(t *testing.T) {
|
||||||
config = *params.MergedTestChainConfig
|
config = *params.MergedTestChainConfig
|
||||||
gspec = &core.Genesis{
|
gspec = &core.Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
|
Alloc: addPragueRequestPredeploys(nil),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,12 +65,21 @@ var (
|
||||||
revertCode = common.FromHex("7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f75736572206572726f7200000000000000000000000000000000000000000000604452604e6000fd")
|
revertCode = common.FromHex("7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f75736572206572726f7200000000000000000000000000000000000000000000604452604e6000fd")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
var genesis = &core.Genesis{
|
var genesis = &core.Genesis{
|
||||||
Config: params.AllDevChainProtocolChanges,
|
Config: params.AllDevChainProtocolChanges,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{
|
||||||
testAddr: {Balance: testBalance},
|
testAddr: {Balance: testBalance},
|
||||||
revertContractAddr: {Code: revertCode},
|
revertContractAddr: {Code: revertCode},
|
||||||
},
|
}),
|
||||||
ExtraData: []byte("test genesis"),
|
ExtraData: []byte("test genesis"),
|
||||||
Timestamp: 9000,
|
Timestamp: 9000,
|
||||||
BaseFee: big.NewInt(params.InitialBaseFee),
|
BaseFee: big.NewInt(params.InitialBaseFee),
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ func NewBackend(alloc types.GenesisAlloc, options ...func(nodeConf *node.Config,
|
||||||
ethConf.Genesis = &core.Genesis{
|
ethConf.Genesis = &core.Genesis{
|
||||||
Config: params.AllDevChainProtocolChanges,
|
Config: params.AllDevChainProtocolChanges,
|
||||||
GasLimit: ethconfig.Defaults.Miner.GasCeil,
|
GasLimit: ethconfig.Defaults.Miner.GasCeil,
|
||||||
Alloc: alloc,
|
Alloc: addRequestPredeploys(alloc),
|
||||||
}
|
}
|
||||||
ethConf.SyncMode = ethconfig.FullSync
|
ethConf.SyncMode = ethconfig.FullSync
|
||||||
ethConf.TxPool.NoLocals = true
|
ethConf.TxPool.NoLocals = true
|
||||||
|
|
@ -104,6 +104,18 @@ func NewBackend(alloc types.GenesisAlloc, options ...func(nodeConf *node.Config,
|
||||||
return sim
|
return sim
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
withPredeploys := make(types.GenesisAlloc, len(alloc)+4)
|
||||||
|
for address, account := range alloc {
|
||||||
|
withPredeploys[address] = account
|
||||||
|
}
|
||||||
|
withPredeploys[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
withPredeploys[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
withPredeploys[params.BuilderDepositAddress] = types.Account{Nonce: 1, Code: params.BuilderDepositCode, Balance: common.Big0}
|
||||||
|
withPredeploys[params.BuilderExitAddress] = types.Account{Nonce: 1, Code: params.BuilderExitCode, Balance: common.Big0}
|
||||||
|
return withPredeploys
|
||||||
|
}
|
||||||
|
|
||||||
// newWithNode sets up a simulated backend on an existing node. The provided node
|
// newWithNode sets up a simulated backend on an existing node. The provided node
|
||||||
// must not be started and will be started by this method.
|
// must not be started and will be started by this method.
|
||||||
func newWithNode(stack *node.Node, conf *eth.Config, blockPeriod uint64) (*Backend, error) {
|
func newWithNode(stack *node.Node, conf *eth.Config, blockPeriod uint64) (*Backend, error) {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
package simulated
|
package simulated
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
|
|
@ -128,6 +129,29 @@ func TestNewBackend(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewBackendRequestPredeploys(t *testing.T) {
|
||||||
|
sim := NewBackend(types.GenesisAlloc{})
|
||||||
|
defer sim.Close()
|
||||||
|
|
||||||
|
for _, tt := range []struct {
|
||||||
|
address common.Address
|
||||||
|
code []byte
|
||||||
|
}{
|
||||||
|
{params.WithdrawalQueueAddress, params.WithdrawalQueueCode},
|
||||||
|
{params.ConsolidationQueueAddress, params.ConsolidationQueueCode},
|
||||||
|
{params.BuilderDepositAddress, params.BuilderDepositCode},
|
||||||
|
{params.BuilderExitAddress, params.BuilderExitCode},
|
||||||
|
} {
|
||||||
|
code, err := sim.Client().CodeAt(context.Background(), tt.address, big.NewInt(0))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to retrieve code for %s: %v", tt.address, err)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(code, tt.code) {
|
||||||
|
t.Fatalf("code mismatch for %s: have %x, want %x", tt.address, code, tt.code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAdjustTime(t *testing.T) {
|
func TestAdjustTime(t *testing.T) {
|
||||||
sim := NewBackend(types.GenesisAlloc{})
|
sim := NewBackend(types.GenesisAlloc{})
|
||||||
defer sim.Close()
|
defer sim.Close()
|
||||||
|
|
|
||||||
|
|
@ -461,11 +461,23 @@ func fakeBlockHash(txh common.Hash) common.Hash {
|
||||||
return crypto.Keccak256Hash([]byte("testblock"), txh.Bytes())
|
return crypto.Keccak256Hash([]byte("testblock"), txh.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addPragueRequestPredeploys(alloc types.GenesisAlloc) types.GenesisAlloc {
|
||||||
|
if alloc == nil {
|
||||||
|
alloc = types.GenesisAlloc{}
|
||||||
|
}
|
||||||
|
alloc[params.WithdrawalQueueAddress] = types.Account{Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0}
|
||||||
|
alloc[params.ConsolidationQueueAddress] = types.Account{Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0}
|
||||||
|
return alloc
|
||||||
|
}
|
||||||
|
|
||||||
func newTestBackend(t *testing.T, n int, gspec *core.Genesis, engine consensus.Engine, generator func(i int, b *core.BlockGen)) *testBackend {
|
func newTestBackend(t *testing.T, n int, gspec *core.Genesis, engine consensus.Engine, generator func(i int, b *core.BlockGen)) *testBackend {
|
||||||
options := core.DefaultConfig().WithArchive(true)
|
options := core.DefaultConfig().WithArchive(true)
|
||||||
options.TxLookupLimit = 0 // index all txs
|
options.TxLookupLimit = 0 // index all txs
|
||||||
|
|
||||||
accman, acc := newTestAccountManager(t)
|
accman, acc := newTestAccountManager(t)
|
||||||
|
if gspec.Config != nil && gspec.Config.IsPrague(big.NewInt(1), gspec.Timestamp+10) {
|
||||||
|
gspec.Alloc = addPragueRequestPredeploys(gspec.Alloc)
|
||||||
|
}
|
||||||
gspec.Alloc[acc.Address] = types.Account{Balance: big.NewInt(params.Ether)}
|
gspec.Alloc[acc.Address] = types.Account{Balance: big.NewInt(params.Ether)}
|
||||||
|
|
||||||
// Generate blocks for testing
|
// Generate blocks for testing
|
||||||
|
|
@ -2526,10 +2538,10 @@ func TestSimulateV1ChainLinkage(t *testing.T) {
|
||||||
recipient = common.Address{0xbb, 0xbb}
|
recipient = common.Address{0xbb, 0xbb}
|
||||||
gspec = &core.Genesis{
|
gspec = &core.Genesis{
|
||||||
Config: params.MergedTestChainConfig,
|
Config: params.MergedTestChainConfig,
|
||||||
Alloc: types.GenesisAlloc{
|
Alloc: addPragueRequestPredeploys(types.GenesisAlloc{
|
||||||
sender: {Balance: big.NewInt(params.Ether)},
|
sender: {Balance: big.NewInt(params.Ether)},
|
||||||
contractAddr: {Code: common.Hex2Bytes("5f35405f8114600f575f5260205ff35b5f80fd")},
|
contractAddr: {Code: common.Hex2Bytes("5f35405f8114600f575f5260205ff35b5f80fd")},
|
||||||
},
|
}),
|
||||||
}
|
}
|
||||||
signer = types.LatestSigner(params.MergedTestChainConfig)
|
signer = types.LatestSigner(params.MergedTestChainConfig)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
{
|
{
|
||||||
"blobGasPrice": "0x1",
|
"blobGasPrice": "0x1",
|
||||||
"blobGasUsed": "0x20000",
|
"blobGasUsed": "0x20000",
|
||||||
"blockHash": "0x5f58514bcb3b216908f0aff6ced44666c3aa250df06093150ac850a7a7850f3c",
|
"blockHash": "0x81ea8f3118b9b11ccfb07900132340bf30b4560c85820dde65687756d3d00c96",
|
||||||
"blockNumber": "0x6",
|
"blockNumber": "0x6",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0xb3e447c77374fd285964cba692e96b1673a88a959726826b5b6e2dca15472b0a",
|
"blockHash": "0xcbc79a9d32e417b1bb6432917de4406c97d295b0c7d3c3092c4ca75889a1a2dc",
|
||||||
"blockNumber": "0x2",
|
"blockNumber": "0x2",
|
||||||
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
||||||
"cumulativeGasUsed": "0xcf50",
|
"cumulativeGasUsed": "0xcf50",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0x47cd44027bb55856a175e36be0396bad221e52172529d9c1bf12bf5424a041ae",
|
"blockHash": "0xc1fb0b8793d39eda962ab10af8400a5169f81402d0cab00f013c433b10b5c543",
|
||||||
"blockNumber": "0x4",
|
"blockNumber": "0x4",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5564",
|
"cumulativeGasUsed": "0x5564",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
"blockHash": "0x69bfe49b2fa20c994f5a45ed6feb4092569002de2743ca707c9210e1cc565d6a",
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5e28",
|
"cumulativeGasUsed": "0x5e28",
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
||||||
"transactionIndex": "0x0",
|
"transactionIndex": "0x0",
|
||||||
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
"blockHash": "0x69bfe49b2fa20c994f5a45ed6feb4092569002de2743ca707c9210e1cc565d6a",
|
||||||
"blockTimestamp": "0x1e",
|
"blockTimestamp": "0x1e",
|
||||||
"logIndex": "0x0",
|
"logIndex": "0x0",
|
||||||
"removed": false
|
"removed": false
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0xe9bd1d8c303b1af5c704b9d78e62c54a34af47e0db04ac1389a5ef74a619b9da",
|
"blockHash": "0x28a2e256d84975af5e27de6aa2ed6cd25824dba6fd59933ead3507d68c3a5281",
|
||||||
"blockNumber": "0x1",
|
"blockNumber": "0x1",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
{
|
{
|
||||||
"blobGasPrice": "0x1",
|
"blobGasPrice": "0x1",
|
||||||
"blobGasUsed": "0x20000",
|
"blobGasUsed": "0x20000",
|
||||||
"blockHash": "0x5f58514bcb3b216908f0aff6ced44666c3aa250df06093150ac850a7a7850f3c",
|
"blockHash": "0x81ea8f3118b9b11ccfb07900132340bf30b4560c85820dde65687756d3d00c96",
|
||||||
"blockNumber": "0x6",
|
"blockNumber": "0x6",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0xc74cf882395ec92eec3673d93a57f9a3bf1a5e696fae3e52f252059af62756c8",
|
"blockHash": "0xcd173e00a5594a27d245d3a532eb3136ac492d9ec2a7f2403ca0a253398225be",
|
||||||
"blockNumber": "0x7",
|
"blockNumber": "0x7",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"blobGasPrice": "0x1",
|
"blobGasPrice": "0x1",
|
||||||
"blobGasUsed": "0x20000",
|
"blobGasUsed": "0x20000",
|
||||||
"blockHash": "0x5f58514bcb3b216908f0aff6ced44666c3aa250df06093150ac850a7a7850f3c",
|
"blockHash": "0x81ea8f3118b9b11ccfb07900132340bf30b4560c85820dde65687756d3d00c96",
|
||||||
"blockNumber": "0x6",
|
"blockNumber": "0x6",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0xb3e447c77374fd285964cba692e96b1673a88a959726826b5b6e2dca15472b0a",
|
"blockHash": "0xcbc79a9d32e417b1bb6432917de4406c97d295b0c7d3c3092c4ca75889a1a2dc",
|
||||||
"blockNumber": "0x2",
|
"blockNumber": "0x2",
|
||||||
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
||||||
"cumulativeGasUsed": "0xcf50",
|
"cumulativeGasUsed": "0xcf50",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0x5bff93f8f94ba7ee52bef1a80062b9fed22c6d1eebb2b0e87a4a003365a7bd66",
|
"blockHash": "0x518b313d05ff3b4e9940719ba4f34ca2f40a5ceeead4094d9b115d310f7270f5",
|
||||||
"blockNumber": "0x5",
|
"blockNumber": "0x5",
|
||||||
"contractAddress": "0xfdaa97661a584d977b4d3abb5370766ff5b86a18",
|
"contractAddress": "0xfdaa97661a584d977b4d3abb5370766ff5b86a18",
|
||||||
"cumulativeGasUsed": "0xe01c",
|
"cumulativeGasUsed": "0xe01c",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0x47cd44027bb55856a175e36be0396bad221e52172529d9c1bf12bf5424a041ae",
|
"blockHash": "0xc1fb0b8793d39eda962ab10af8400a5169f81402d0cab00f013c433b10b5c543",
|
||||||
"blockNumber": "0x4",
|
"blockNumber": "0x4",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5564",
|
"cumulativeGasUsed": "0x5564",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0xe9bd1d8c303b1af5c704b9d78e62c54a34af47e0db04ac1389a5ef74a619b9da",
|
"blockHash": "0x28a2e256d84975af5e27de6aa2ed6cd25824dba6fd59933ead3507d68c3a5281",
|
||||||
"blockNumber": "0x1",
|
"blockNumber": "0x1",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
"blockHash": "0x69bfe49b2fa20c994f5a45ed6feb4092569002de2743ca707c9210e1cc565d6a",
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5e28",
|
"cumulativeGasUsed": "0x5e28",
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
||||||
"transactionIndex": "0x0",
|
"transactionIndex": "0x0",
|
||||||
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
"blockHash": "0x69bfe49b2fa20c994f5a45ed6feb4092569002de2743ca707c9210e1cc565d6a",
|
||||||
"blockTimestamp": "0x1e",
|
"blockTimestamp": "0x1e",
|
||||||
"logIndex": "0x0",
|
"logIndex": "0x0",
|
||||||
"removed": false
|
"removed": false
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue