From 098d9975ed972a00097e1a073f00b0546b06fb42 Mon Sep 17 00:00:00 2001 From: Danno Ferrin Date: Tue, 30 Jan 2024 11:43:20 -0700 Subject: [PATCH] Add pragueTime configuration (#6473) Wire through configuration for the Prague fork, including speculative PragueGasCalculator, precompiles, genesis options, and implied forks in GenesisState. Signed-off-by: Danno Ferrin --- CHANGELOG.md | 1 + .../test-cases/01_cancun_prepare_payload.json | 10 +- .../test-cases/02_cancun_getPayloadV3.json | 8 +- .../test-cases/03_cancun_newPayloadV3.json | 6 +- .../04_cancun_forkchoiceUpdatedV3.json | 8 +- .../05_eip6110_forkchoiceUpdatedV3.json | 8 +- .../06_eip6110_getPayloadV6110.json | 10 +- .../09_eip6110_newPayloadV6110.json | 6 +- .../10_eip6110_forkchoiceUpdatedV3.json | 8 +- .../11_eip6110_getPayloadV6110.json | 6 +- .../org/hyperledger/besu/cli/BesuCommand.java | 4 +- .../besu/config/GenesisConfigOptions.java | 7 + .../besu/config/JsonGenesisConfigOptions.java | 22 +- .../besu/config/StubGenesisConfigOptions.java | 18 + .../besu/config/GenesisConfigFileTest.java | 88 +- .../besu/config/GenesisConfigOptionsTest.java | 83 +- config/src/test/resources/all_forks.json | 1 + .../besu/ethereum/chain/GenesisState.java | 20 +- .../MainnetPrecompiledContractRegistries.java | 8 + .../mainnet/MainnetProtocolSpecFactory.java | 10 + .../mainnet/MainnetProtocolSpecs.java | 44 +- .../mainnet/ProtocolScheduleBuilder.java | 2 + .../besu/ethereum/chain/GenesisStateTest.java | 79 +- .../mainnet/ProtocolScheduleBuilderTest.java | 27 +- .../besu/ethereum/chain/genesis_prague.json | 4077 +++++++++++++++++ .../evmtool/MainnetGenesisFileModule.java | 3 + .../evmtool/benchmarks/BenchmarkExecutor.java | 4 +- .../ReferenceTestProtocolSchedules.java | 3 +- .../besu/ethereum/core/TransactionTest.java | 7 + .../retesteth/methods/TestSetChainParams.java | 1 + .../hyperledger/besu/evm/EvmSpecVersion.java | 2 +- .../org/hyperledger/besu/evm/MainnetEVMs.java | 11 +- .../besu/evm/fluent/EVMExecutor.java | 6 +- .../gascalculator/CancunGasCalculator.java | 2 +- .../gascalculator/PragueGasCalculator.java | 44 + .../MainnetPrecompiledContracts.java | 25 + .../besu/evm/fluent/EVMExecutorTest.java | 4 + 37 files changed, 4507 insertions(+), 166 deletions(-) create mode 100644 ethereum/core/src/test/resources/org/hyperledger/besu/ethereum/chain/genesis_prague.json create mode 100644 evm/src/main/java/org/hyperledger/besu/evm/gascalculator/PragueGasCalculator.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e37654c305..ea8f543471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - Log blob count when importing a block via Engine API [#6466](https://github.com/hyperledger/besu/pull/6466) - Introduce `--Xbonsai-limit-trie-logs-enabled` experimental feature which by default will only retain the latest 512 trie logs, saving about 3GB per week in database growth [#5390](https://github.com/hyperledger/besu/issues/5390) - Introduce `besu storage x-trie-log prune` experimental offline subcommand which will prune all redundant trie logs except the latest 512 [#6303](https://github.com/hyperledger/besu/pull/6303) +- Added configuration options for `pragueTime` to genesis file for Prague fork development [#6473](https://github.com/hyperledger/besu/pull/6473) ### Bug fixes - Fix the way an advertised host configured with `--p2p-host` is treated when communicating with the originator of a PING packet [#6225](https://github.com/hyperledger/besu/pull/6225) diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/01_cancun_prepare_payload.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/01_cancun_prepare_payload.json index b398cda18a..47063a25e4 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/01_cancun_prepare_payload.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/01_cancun_prepare_payload.json @@ -4,8 +4,8 @@ "method": "engine_forkchoiceUpdatedV3", "params": [ { - "headBlockHash": "0x26118cf71453320edcebbc4ebb34af5b578087a32385b80108bf691fa23efc42", - "safeBlockHash": "0x26118cf71453320edcebbc4ebb34af5b578087a32385b80108bf691fa23efc42", + "headBlockHash": "0x78a301e0d846bd169889c9755c9aa4ce2972dfc4bd63de61f3303887d3e81f98", + "safeBlockHash": "0x78a301e0d846bd169889c9755c9aa4ce2972dfc4bd63de61f3303887d3e81f98", "finalizedBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { @@ -24,11 +24,11 @@ "result": { "payloadStatus": { "status": "VALID", - "latestValidHash": "0x26118cf71453320edcebbc4ebb34af5b578087a32385b80108bf691fa23efc42", + "latestValidHash": "0x78a301e0d846bd169889c9755c9aa4ce2972dfc4bd63de61f3303887d3e81f98", "validationError": null }, - "payloadId": "0x282643c14de2dfef" + "payloadId": "0x282643d459a6f711" } }, - "statusCode" : 200 + "statusCode": 200 } \ No newline at end of file diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/02_cancun_getPayloadV3.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/02_cancun_getPayloadV3.json index 73cbe51bde..c6180edaad 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/02_cancun_getPayloadV3.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/02_cancun_getPayloadV3.json @@ -3,7 +3,7 @@ "jsonrpc": "2.0", "method": "engine_getPayloadV3", "params": [ - "0x282643c14de2dfef" + "0x282643d459a6f711" ], "id": 67 }, @@ -12,7 +12,7 @@ "id": 67, "result": { "executionPayload": { - "parentHash": "0x26118cf71453320edcebbc4ebb34af5b578087a32385b80108bf691fa23efc42", + "parentHash": "0x78a301e0d846bd169889c9755c9aa4ce2972dfc4bd63de61f3303887d3e81f98", "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot": "0x9b8c4a9a86cb49252075c0db2f0e72fb1e49350a0f70ea36f26f700201961e62", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -28,8 +28,8 @@ "withdrawals": [], "blockNumber": "0x1", "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", - "blobGasUsed": "0x0" + "blobGasUsed": "0x0", + "blockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315" }, "blockValue": "0x0", "blobsBundle": { diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/03_cancun_newPayloadV3.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/03_cancun_newPayloadV3.json index d4d76df31d..b8ae8dbd89 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/03_cancun_newPayloadV3.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/03_cancun_newPayloadV3.json @@ -4,7 +4,7 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0x26118cf71453320edcebbc4ebb34af5b578087a32385b80108bf691fa23efc42", + "parentHash": "0x78a301e0d846bd169889c9755c9aa4ce2972dfc4bd63de61f3303887d3e81f98", "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot": "0x9b8c4a9a86cb49252075c0db2f0e72fb1e49350a0f70ea36f26f700201961e62", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -17,7 +17,7 @@ "transactions": [], "withdrawals": [], "blockNumber": "0x1", - "blockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "blockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "excessBlobGas": "0x0", "blobGasUsed": "0x0" @@ -32,7 +32,7 @@ "id": 67, "result": { "status": "VALID", - "latestValidHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "latestValidHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "validationError": null } }, diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/04_cancun_forkchoiceUpdatedV3.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/04_cancun_forkchoiceUpdatedV3.json index 80610561a0..3e7d9adcb4 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/04_cancun_forkchoiceUpdatedV3.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/04_cancun_forkchoiceUpdatedV3.json @@ -4,9 +4,9 @@ "method": "engine_forkchoiceUpdatedV3", "params": [ { - "headBlockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", - "safeBlockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", - "finalizedBlockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356" + "headBlockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", + "safeBlockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", + "finalizedBlockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315" }, null ], @@ -18,7 +18,7 @@ "result": { "payloadStatus": { "status": "VALID", - "latestValidHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "latestValidHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "validationError": null }, "payloadId": null diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/05_eip6110_forkchoiceUpdatedV3.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/05_eip6110_forkchoiceUpdatedV3.json index 4f83ac7dce..3031759786 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/05_eip6110_forkchoiceUpdatedV3.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/05_eip6110_forkchoiceUpdatedV3.json @@ -4,8 +4,8 @@ "method": "engine_forkchoiceUpdatedV3", "params": [ { - "headBlockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", - "safeBlockHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "headBlockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", + "safeBlockHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "finalizedBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { @@ -24,10 +24,10 @@ "result": { "payloadStatus": { "status": "VALID", - "latestValidHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "latestValidHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "validationError": null }, - "payloadId": "0x282643b9c2d2a4df" + "payloadId": "0x282643b909febddf" } }, "statusCode": 200 diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/06_eip6110_getPayloadV6110.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/06_eip6110_getPayloadV6110.json index 9b1653a198..e31b2f8f8a 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/06_eip6110_getPayloadV6110.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/06_eip6110_getPayloadV6110.json @@ -3,7 +3,7 @@ "jsonrpc": "2.0", "method": "engine_getPayloadV6110", "params": [ - "0x282643b9c2d2a4df" + "0x282643b909febddf" ], "id": 67 }, @@ -12,7 +12,7 @@ "id": 67, "result": { "executionPayload": { - "parentHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "parentHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot": "0x9b8c4a9a86cb49252075c0db2f0e72fb1e49350a0f70ea36f26f700201961e62", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -28,9 +28,9 @@ "withdrawals": [], "depositReceipts": [], "blockNumber": "0x2", - "blockHash": "0xf6c3f1180ba58d6ea4c69c9328c7afb1fda41df06c368741c1f8310567879de7", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x0" + "blockHash": "0xc8255831601171a628ef17f6601d3d1d30ff9b382e77592ed1af32354f6dafbb", + "blobGasUsed": "0x0", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" }, "blockValue": "0x0", "blobsBundle": { diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/09_eip6110_newPayloadV6110.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/09_eip6110_newPayloadV6110.json index 0964114e62..760b948129 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/09_eip6110_newPayloadV6110.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/09_eip6110_newPayloadV6110.json @@ -4,7 +4,7 @@ "method": "engine_newPayloadV6110", "params": [ { - "parentHash": "0x45811fa27a100ce9035e5e086b9669275041a4ec0ebbd920be028fd7b0aa2356", + "parentHash": "0x1dd4f141551d53ce393845e2873754e43396101a8ebc0fd0eeb2e6798a591315", "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot": "0x14208ac0e218167936e220b72d5d5887a963cb858ea2f2d268518f014a3da3fa", "logsBloom": "0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", @@ -23,7 +23,7 @@ {"amount":"0x773594000","index":"0x0","pubkey":"0x96a96086cff07df17668f35f7418ef8798079167e3f4f9b72ecde17b28226137cf454ab1dd20ef5d924786ab3483c2f9","signature":"0xb1acdb2c4d3df3f1b8d3bfd33421660df358d84d78d16c4603551935f4b67643373e7eb63dcb16ec359be0ec41fee33b03a16e80745f2374ff1d3c352508ac5d857c6476d3c3bcf7e6ca37427c9209f17be3af5264c0e2132b3dd1156c28b4e9","withdrawalCredentials":"0x003f5102dabe0a27b1746098d1dc17a5d3fbd478759fea9287e4e419b3c3cef2"} ], "blockNumber": "0x2", - "blockHash": "0xb3b483867217b83b1e4a2f95c84d2da30cbff12eb8636f2becbcc05f4507fa7a", + "blockHash": "0xddb65a684b9b8980b6231ee0e388566c10a9c4583bbddf16f8d68bbc0b8ed965", "receiptsRoot": "0x79ee3424eb720a3ad4b1c5a372bb8160580cbe4d893778660f34213c685627a9", "blobGasUsed": "0x0" }, @@ -37,7 +37,7 @@ "id": 67, "result": { "status": "VALID", - "latestValidHash": "0xb3b483867217b83b1e4a2f95c84d2da30cbff12eb8636f2becbcc05f4507fa7a", + "latestValidHash": "0xddb65a684b9b8980b6231ee0e388566c10a9c4583bbddf16f8d68bbc0b8ed965", "validationError": null } }, diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/10_eip6110_forkchoiceUpdatedV3.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/10_eip6110_forkchoiceUpdatedV3.json index 5a32569d61..ef779c959f 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/10_eip6110_forkchoiceUpdatedV3.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/10_eip6110_forkchoiceUpdatedV3.json @@ -4,8 +4,8 @@ "method": "engine_forkchoiceUpdatedV3", "params": [ { - "headBlockHash": "0xb3b483867217b83b1e4a2f95c84d2da30cbff12eb8636f2becbcc05f4507fa7a", - "safeBlockHash": "0xb3b483867217b83b1e4a2f95c84d2da30cbff12eb8636f2becbcc05f4507fa7a", + "headBlockHash": "0xddb65a684b9b8980b6231ee0e388566c10a9c4583bbddf16f8d68bbc0b8ed965", + "safeBlockHash": "0xddb65a684b9b8980b6231ee0e388566c10a9c4583bbddf16f8d68bbc0b8ed965", "finalizedBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { @@ -24,10 +24,10 @@ "result": { "payloadStatus": { "status": "VALID", - "latestValidHash": "0xb3b483867217b83b1e4a2f95c84d2da30cbff12eb8636f2becbcc05f4507fa7a", + "latestValidHash": "0xddb65a684b9b8980b6231ee0e388566c10a9c4583bbddf16f8d68bbc0b8ed965", "validationError": null }, - "payloadId": "0x282643daa04b7631" + "payloadId": "0x282643db882670cf" } }, "statusCode" : 200 diff --git a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/11_eip6110_getPayloadV6110.json b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/11_eip6110_getPayloadV6110.json index 6c546cd267..5214ee7cd5 100644 --- a/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/11_eip6110_getPayloadV6110.json +++ b/acceptance-tests/tests/src/test/resources/jsonrpc/engine/eip6110/test-cases/11_eip6110_getPayloadV6110.json @@ -3,7 +3,7 @@ "jsonrpc": "2.0", "method": "engine_getPayloadV6110", "params": [ - "0x282643daa04b7631" + "0x282643db882670cf" ], "id": 67 }, @@ -12,7 +12,7 @@ "id": 67, "result": { "executionPayload": { - "parentHash": "0xb3b483867217b83b1e4a2f95c84d2da30cbff12eb8636f2becbcc05f4507fa7a", + "parentHash": "0xddb65a684b9b8980b6231ee0e388566c10a9c4583bbddf16f8d68bbc0b8ed965", "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot": "0x14208ac0e218167936e220b72d5d5887a963cb858ea2f2d268518f014a3da3fa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -28,7 +28,7 @@ "withdrawals": [], "depositReceipts": [], "blockNumber": "0x3", - "blockHash": "0xa28bf4db3363ce5b67848eb2ad52dbfead62ddb2287ae7eed36daa002528d1af", + "blockHash": "0xf1e7093b5d229885caab11a3acb95412af80f9077b742020a8014cf81c8c75f2", "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "blobGasUsed": "0x0" }, diff --git a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java index 7cbb60f13c..0e8fd8e592 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -359,6 +359,7 @@ public class BesuCommand implements DefaultCommandValues, Runnable { description = "Identification for this node in the Client ID", arity = "1") private final Optional identityString = Optional.empty(); + // P2P Discovery Option Group @CommandLine.ArgGroup(validate = false, heading = "@|bold P2P Discovery Options|@%n") P2PDiscoveryOptionGroup p2PDiscoveryOptionGroup = new P2PDiscoveryOptionGroup(); @@ -1481,7 +1482,8 @@ public class BesuCommand implements DefaultCommandValues, Runnable { logger.info("Using the Java implementation of the blake2bf algorithm"); } - if (getActualGenesisConfigOptions().getCancunTime().isPresent()) { + if (getActualGenesisConfigOptions().getCancunTime().isPresent() + || getActualGenesisConfigOptions().getPragueTime().isPresent()) { if (kzgTrustedSetupFile != null) { KZGPointEvalPrecompiledContract.init(kzgTrustedSetupFile); } else { diff --git a/config/src/main/java/org/hyperledger/besu/config/GenesisConfigOptions.java b/config/src/main/java/org/hyperledger/besu/config/GenesisConfigOptions.java index a315ce7244..e3c935eca6 100644 --- a/config/src/main/java/org/hyperledger/besu/config/GenesisConfigOptions.java +++ b/config/src/main/java/org/hyperledger/besu/config/GenesisConfigOptions.java @@ -242,6 +242,13 @@ public interface GenesisConfigOptions { */ OptionalLong getCancunTime(); + /** + * Gets prague time. + * + * @return the prague time + */ + OptionalLong getPragueTime(); + /** * Gets future eips time. * diff --git a/config/src/main/java/org/hyperledger/besu/config/JsonGenesisConfigOptions.java b/config/src/main/java/org/hyperledger/besu/config/JsonGenesisConfigOptions.java index 29eaef9446..c2c8dad513 100644 --- a/config/src/main/java/org/hyperledger/besu/config/JsonGenesisConfigOptions.java +++ b/config/src/main/java/org/hyperledger/besu/config/JsonGenesisConfigOptions.java @@ -28,7 +28,6 @@ import java.util.Optional; import java.util.OptionalInt; import java.util.OptionalLong; import java.util.TreeMap; -import java.util.stream.Collectors; import java.util.stream.Stream; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -292,6 +291,11 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions { return getOptionalLong("cancuntime"); } + @Override + public OptionalLong getPragueTime() { + return getOptionalLong("praguetime"); + } + @Override public OptionalLong getFutureEipsTime() { return getOptionalLong("futureeipstime"); @@ -304,10 +308,7 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions { @Override public Optional getBaseFeePerGas() { - return Optional.ofNullable(configOverrides.get("baseFeePerGas")) - .map(Wei::fromHexString) - .map(Optional::of) - .orElse(Optional.empty()); + return Optional.ofNullable(configOverrides.get("baseFeePerGas")).map(Wei::fromHexString); } @Override @@ -448,6 +449,7 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions { getMergeNetSplitBlockNumber().ifPresent(l -> builder.put("mergeNetSplitBlock", l)); getShanghaiTime().ifPresent(l -> builder.put("shanghaiTime", l)); getCancunTime().ifPresent(l -> builder.put("cancunTime", l)); + getPragueTime().ifPresent(l -> builder.put("pragueTime", l)); getTerminalBlockNumber().ifPresent(l -> builder.put("terminalBlockNumber", l)); getTerminalBlockHash().ifPresent(h -> builder.put("terminalBlockHash", h.toHexString())); getFutureEipsTime().ifPresent(l -> builder.put("futureEipsTime", l)); @@ -582,14 +584,18 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions { .map(OptionalLong::getAsLong) .distinct() .sorted() - .collect(Collectors.toList()); + .toList(); } @Override public List getForkBlockTimestamps() { Stream forkBlockTimestamps = Stream.of( - getShanghaiTime(), getCancunTime(), getFutureEipsTime(), getExperimentalEipsTime()); + getShanghaiTime(), + getCancunTime(), + getPragueTime(), + getFutureEipsTime(), + getExperimentalEipsTime()); // when adding forks add an entry to ${REPO_ROOT}/config/src/test/resources/all_forks.json return forkBlockTimestamps @@ -597,6 +603,6 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions { .map(OptionalLong::getAsLong) .distinct() .sorted() - .collect(Collectors.toList()); + .toList(); } } diff --git a/config/src/main/java/org/hyperledger/besu/config/StubGenesisConfigOptions.java b/config/src/main/java/org/hyperledger/besu/config/StubGenesisConfigOptions.java index d36b823c74..bdff449728 100644 --- a/config/src/main/java/org/hyperledger/besu/config/StubGenesisConfigOptions.java +++ b/config/src/main/java/org/hyperledger/besu/config/StubGenesisConfigOptions.java @@ -48,6 +48,7 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions, Cloneable private OptionalLong mergeNetSplitBlockNumber = OptionalLong.empty(); private OptionalLong shanghaiTime = OptionalLong.empty(); private OptionalLong cancunTime = OptionalLong.empty(); + private OptionalLong pragueTime = OptionalLong.empty(); private OptionalLong futureEipsTime = OptionalLong.empty(); private OptionalLong experimentalEipsTime = OptionalLong.empty(); private OptionalLong terminalBlockNumber = OptionalLong.empty(); @@ -232,6 +233,11 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions, Cloneable return cancunTime; } + @Override + public OptionalLong getPragueTime() { + return pragueTime; + } + @Override public OptionalLong getFutureEipsTime() { return futureEipsTime; @@ -364,6 +370,7 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions, Cloneable getMergeNetSplitBlockNumber().ifPresent(l -> builder.put("mergeNetSplitBlock", l)); getShanghaiTime().ifPresent(l -> builder.put("shanghaiTime", l)); getCancunTime().ifPresent(l -> builder.put("cancunTime", l)); + getPragueTime().ifPresent(l -> builder.put("pragueTime", l)); getFutureEipsTime().ifPresent(l -> builder.put("futureEipsTime", l)); getExperimentalEipsTime().ifPresent(l -> builder.put("experimentalEipsTime", l)); getTerminalBlockNumber().ifPresent(l -> builder.put("terminalBlockNumber", l)); @@ -608,6 +615,17 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions, Cloneable return this; } + /** + * Prague time. + * + * @param timestamp the timestamp + * @return the stub genesis config options + */ + public StubGenesisConfigOptions pragueTime(final long timestamp) { + pragueTime = OptionalLong.of(timestamp); + return this; + } + /** * Future EIPs Time block. * diff --git a/config/src/test/java/org/hyperledger/besu/config/GenesisConfigFileTest.java b/config/src/test/java/org/hyperledger/besu/config/GenesisConfigFileTest.java index c61e97bf0b..8f2d2e09bd 100644 --- a/config/src/test/java/org/hyperledger/besu/config/GenesisConfigFileTest.java +++ b/config/src/test/java/org/hyperledger/besu/config/GenesisConfigFileTest.java @@ -38,14 +38,14 @@ import org.apache.tuweni.units.bigints.UInt256; import org.assertj.core.api.ThrowableAssert.ThrowingCallable; import org.junit.jupiter.api.Test; -public class GenesisConfigFileTest { +class GenesisConfigFileTest { private static final BigInteger MAINNET_CHAIN_ID = BigInteger.ONE; private static final BigInteger DEVELOPMENT_CHAIN_ID = BigInteger.valueOf(1337); private static final GenesisConfigFile EMPTY_CONFIG = fromConfig("{}"); @Test - public void shouldLoadMainnetConfigFile() { + void shouldLoadMainnetConfigFile() { final GenesisConfigFile config = GenesisConfigFile.mainnet(); // Sanity check some basic properties to confirm this is the mainnet file. assertThat(config.getConfigOptions().isEthHash()).isTrue(); @@ -58,7 +58,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldLoadDevelopmentConfigFile() { + void shouldLoadDevelopmentConfigFile() { final GenesisConfigFile config = GenesisConfigFile.development(); // Sanity check some basic properties to confirm this is the dev file. assertThat(config.getConfigOptions().isEthHash()).isTrue(); @@ -71,82 +71,82 @@ public class GenesisConfigFileTest { } @Test - public void shouldGetParentHash() { + void shouldGetParentHash() { assertThat(configWithProperty("parentHash", "844633").getParentHash()).isEqualTo("844633"); } @Test - public void shouldDefaultParentHashToEmptyString() { + void shouldDefaultParentHashToEmptyString() { assertThat(EMPTY_CONFIG.getParentHash()).isEmpty(); } @Test - public void shouldGetDifficulty() { + void shouldGetDifficulty() { assertThat(configWithProperty("difficulty", "1234").getDifficulty()).isEqualTo("1234"); } @Test - public void shouldRequireDifficulty() { + void shouldRequireDifficulty() { assertInvalidConfiguration(EMPTY_CONFIG::getDifficulty); } @Test - public void shouldGetExtraData() { + void shouldGetExtraData() { assertThat(configWithProperty("extraData", "yay").getExtraData()).isEqualTo("yay"); } @Test - public void shouldDefaultExtraDataToEmptyString() { + void shouldDefaultExtraDataToEmptyString() { assertThat(EMPTY_CONFIG.getExtraData()).isEmpty(); } @Test - public void shouldGetGasLimit() { + void shouldGetGasLimit() { assertThat(configWithProperty("gasLimit", "1000").getGasLimit()).isEqualTo(1000); } @Test - public void shouldRequireGasLimit() { + void shouldRequireGasLimit() { assertInvalidConfiguration(EMPTY_CONFIG::getGasLimit); } @Test - public void shouldGetMixHash() { + void shouldGetMixHash() { assertThat(configWithProperty("mixHash", "asdf").getMixHash()).isEqualTo("asdf"); } @Test - public void shouldDefaultMixHashToEmptyString() { + void shouldDefaultMixHashToEmptyString() { assertThat(EMPTY_CONFIG.getMixHash()).isEmpty(); } @Test - public void shouldGetNonce() { + void shouldGetNonce() { assertThat(configWithProperty("nonce", "0x10").getNonce()).isEqualTo("0x10"); } @Test - public void shouldDefaultNonceToZero() { + void shouldDefaultNonceToZero() { assertThat(EMPTY_CONFIG.getNonce()).isEqualTo("0x0"); } @Test - public void shouldGetCoinbase() { + void shouldGetCoinbase() { assertThat(configWithProperty("coinbase", "abcd").getCoinbase()).contains("abcd"); } @Test - public void shouldReturnEmptyWhenCoinbaseNotSpecified() { + void shouldReturnEmptyWhenCoinbaseNotSpecified() { assertThat(EMPTY_CONFIG.getCoinbase()).isEmpty(); } @Test - public void shouldGetTimestamp() { + void shouldGetTimestamp() { assertThat(configWithProperty("timestamp", "0x10").getTimestamp()).isEqualTo(16L); } @Test - public void shouldGetBaseFeeAtGenesis() { + void shouldGetBaseFeeAtGenesis() { GenesisConfigFile withBaseFeeAtGenesis = GenesisConfigFile.fromConfig("{\"config\":{\"londonBlock\":0},\"baseFeePerGas\":\"0xa\"}"); assertThat(withBaseFeeAtGenesis.getBaseFeePerGas()).isPresent(); @@ -154,7 +154,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldGetDefaultBaseFeeAtGenesis() { + void shouldGetDefaultBaseFeeAtGenesis() { GenesisConfigFile withBaseFeeAtGenesis = GenesisConfigFile.fromConfig("{\"config\":{\"londonBlock\":0}}"); // no specified baseFeePerGas: @@ -165,7 +165,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldGetBaseFeeExplicitlyAtGenesis() { + void shouldGetBaseFeeExplicitlyAtGenesis() { GenesisConfigFile withBaseFeeNotAtGenesis = GenesisConfigFile.fromConfig("{\"config\":{\"londonBlock\":10},\"baseFeePerGas\":\"0xa\"}"); // specified baseFeePerGas: @@ -176,14 +176,14 @@ public class GenesisConfigFileTest { } @Test - public void shouldOverrideConfigOptionsBaseFeeWhenSpecified() { + void shouldOverrideConfigOptionsBaseFeeWhenSpecified() { GenesisConfigOptions withOverrides = EMPTY_CONFIG.getConfigOptions(Map.of("baseFeePerGas", Wei.of(8).toString())); assertThat(withOverrides.getBaseFeePerGas()).contains(Wei.of(8L)); } @Test - public void shouldGetTerminalTotalDifficultyAtGenesis() { + void shouldGetTerminalTotalDifficultyAtGenesis() { GenesisConfigFile withTerminalTotalDifficultyAtGenesis = fromConfig("{\"config\":{\"terminalTotalDifficulty\":1000}}"); assertThat(withTerminalTotalDifficultyAtGenesis.getConfigOptions().getTerminalTotalDifficulty()) @@ -191,12 +191,12 @@ public class GenesisConfigFileTest { } @Test - public void shouldGetEmptyTerminalTotalDifficultyAtGenesis() { + void shouldGetEmptyTerminalTotalDifficultyAtGenesis() { assertThat(EMPTY_CONFIG.getConfigOptions().getTerminalTotalDifficulty()).isNotPresent(); } @Test - public void assertSepoliaTerminalTotalDifficulty() { + void assertSepoliaTerminalTotalDifficulty() { GenesisConfigOptions sepoliaOptions = GenesisConfigFile.genesisFileFromResources("/sepolia.json").getConfigOptions(); @@ -206,7 +206,7 @@ public class GenesisConfigFileTest { } @Test - public void assertGoerliTerminalTotalDifficulty() { + void assertGoerliTerminalTotalDifficulty() { GenesisConfigOptions goerliOptions = GenesisConfigFile.genesisFileFromResources("/goerli.json").getConfigOptions(); @@ -216,7 +216,7 @@ public class GenesisConfigFileTest { } @Test - public void assertMainnetTerminalTotalDifficulty() { + void assertMainnetTerminalTotalDifficulty() { GenesisConfigOptions mainnetOptions = GenesisConfigFile.genesisFileFromResources("/mainnet.json").getConfigOptions(); @@ -227,7 +227,7 @@ public class GenesisConfigFileTest { } @Test - public void assertTerminalTotalDifficultyOverride() { + void assertTerminalTotalDifficultyOverride() { GenesisConfigOptions sepoliaOverrideOptions = GenesisConfigFile.genesisFileFromResources("/sepolia.json") .getConfigOptions(Map.of("terminalTotalDifficulty", String.valueOf(Long.MAX_VALUE))); @@ -238,7 +238,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldFindMergeNetSplitForkAndAlias() { + void shouldFindMergeNetSplitForkAndAlias() { GenesisConfigFile mergeNetSplitGenesis = GenesisConfigFile.fromConfig( "{\"config\":{\"mergeNetsplitBlock\":11},\"baseFeePerGas\":\"0xa\"}"); @@ -255,12 +255,12 @@ public class GenesisConfigFileTest { } @Test - public void shouldDefaultTimestampToZero() { + void shouldDefaultTimestampToZero() { assertThat(EMPTY_CONFIG.getTimestamp()).isZero(); } @Test - public void shouldGetAllocations() { + void shouldGetAllocations() { final GenesisConfigFile config = fromConfig( "{" @@ -309,13 +309,13 @@ public class GenesisConfigFileTest { } @Test - public void shouldGetEmptyAllocationsWhenAllocNotPresent() { + void shouldGetEmptyAllocationsWhenAllocNotPresent() { final GenesisConfigFile config = fromConfig("{}"); assertThat(config.streamAllocations()).isEmpty(); } @Test - public void shouldGetLargeChainId() { + void shouldGetLargeChainId() { final GenesisConfigFile config = fromConfig( "{\"config\": { \"chainId\": 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095 }}"); @@ -326,7 +326,7 @@ public class GenesisConfigFileTest { } @Test - public void mustNotAcceptComments() { + void mustNotAcceptComments() { assertThatThrownBy( () -> fromConfig( @@ -336,7 +336,7 @@ public class GenesisConfigFileTest { } @Test - public void testOverridePresent() { + void testOverridePresent() { final GenesisConfigFile config = GenesisConfigFile.development(); final int bigBlock = 999_999_999; final String bigBlockString = Integer.toString(bigBlock); @@ -353,7 +353,7 @@ public class GenesisConfigFileTest { } @Test - public void testOverrideNull() { + void testOverrideNull() { final GenesisConfigFile config = GenesisConfigFile.development(); final Map override = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); override.put("istanbulBlock", null); @@ -367,7 +367,7 @@ public class GenesisConfigFileTest { } @Test - public void testOverrideCaseInsensitivity() { + void testOverrideCaseInsensitivity() { final GenesisConfigFile config = GenesisConfigFile.development(); final int bigBlock = 999_999_999; final String bigBlockString = Integer.toString(bigBlock); @@ -386,7 +386,7 @@ public class GenesisConfigFileTest { } @Test - public void testOverrideEmptyString() { + void testOverrideEmptyString() { final GenesisConfigFile config = GenesisConfigFile.development(); final Map override = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); override.put("istanbulBlock", ""); @@ -399,7 +399,7 @@ public class GenesisConfigFileTest { } @Test - public void testNoOverride() { + void testNoOverride() { final GenesisConfigFile config = GenesisConfigFile.development(); assertThat(config.getConfigOptions().getLondonBlockNumber()).hasValue(0); @@ -411,7 +411,7 @@ public class GenesisConfigFileTest { } @Test - public void testConstantinopleFixShouldNotBeSupportedAlongPetersburg() { + void testConstantinopleFixShouldNotBeSupportedAlongPetersburg() { // petersburg node final GenesisConfigFile config = GenesisConfigFile.genesisFileFromResources("/all_forks.json"); @@ -428,7 +428,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldLoadForksInSortedOrder() throws IOException { + void shouldLoadForksInSortedOrder() throws IOException { final ObjectNode configNode = new ObjectMapper() .createObjectNode() @@ -449,7 +449,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldLoadForksIgnoreClassicForkBlock() throws IOException { + void shouldLoadForksIgnoreClassicForkBlock() throws IOException { final ObjectNode configNode = new ObjectMapper() .createObjectNode() @@ -469,7 +469,7 @@ public class GenesisConfigFileTest { } @Test - public void shouldLoadForksIgnoreUnexpectedValues() throws IOException { + void shouldLoadForksIgnoreUnexpectedValues() throws IOException { final ObjectNode configNoUnexpectedForks = new ObjectMapper() .createObjectNode() @@ -533,7 +533,7 @@ public class GenesisConfigFileTest { * been case agnostic. */ @Test - public void roundTripForkIdBlocks() throws IOException { + void roundTripForkIdBlocks() throws IOException { final String configText = Resources.toString(Resources.getResource("all_forks.json"), StandardCharsets.UTF_8); final ObjectNode genesisNode = JsonUtil.objectNodeFromString(configText); diff --git a/config/src/test/java/org/hyperledger/besu/config/GenesisConfigOptionsTest.java b/config/src/test/java/org/hyperledger/besu/config/GenesisConfigOptionsTest.java index 7dcc21a2c7..f7e89eef9e 100644 --- a/config/src/test/java/org/hyperledger/besu/config/GenesisConfigOptionsTest.java +++ b/config/src/test/java/org/hyperledger/besu/config/GenesisConfigOptionsTest.java @@ -29,30 +29,30 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.tuweni.units.bigints.UInt256; import org.junit.jupiter.api.Test; -public class GenesisConfigOptionsTest { +class GenesisConfigOptionsTest { @Test - public void shouldUseEthHashWhenEthHashInConfig() { + void shouldUseEthHashWhenEthHashInConfig() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("ethash", emptyMap())); assertThat(config.isEthHash()).isTrue(); assertThat(config.getConsensusEngine()).isEqualTo("ethash"); } @Test - public void shouldNotUseEthHashIfEthHashNotPresent() { + void shouldNotUseEthHashIfEthHashNotPresent() { final GenesisConfigOptions config = fromConfigOptions(emptyMap()); assertThat(config.isEthHash()).isFalse(); } @Test - public void shouldUseIbft2WhenIbft2InConfig() { + void shouldUseIbft2WhenIbft2InConfig() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("ibft2", emptyMap())); assertThat(config.isIbft2()).isTrue(); assertThat(config.isPoa()).isTrue(); assertThat(config.getConsensusEngine()).isEqualTo("ibft2"); } - public void shouldUseQbftWhenQbftInConfig() { + void shouldUseQbftWhenQbftInConfig() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("qbft", emptyMap())); assertThat(config.isQbft()).isTrue(); assertThat(config.isPoa()).isTrue(); @@ -60,7 +60,7 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldUseCliqueWhenCliqueInConfig() { + void shouldUseCliqueWhenCliqueInConfig() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("clique", emptyMap())); assertThat(config.isClique()).isTrue(); assertThat(config.isPoa()).isTrue(); @@ -69,7 +69,7 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldNotUseCliqueIfCliqueNotPresent() { + void shouldNotUseCliqueIfCliqueNotPresent() { final GenesisConfigOptions config = fromConfigOptions(emptyMap()); assertThat(config.isClique()).isFalse(); assertThat(config.isPoa()).isFalse(); @@ -77,63 +77,63 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldGetHomesteadBlockNumber() { + void shouldGetHomesteadBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("homesteadBlock", 1000)); assertThat(config.getHomesteadBlockNumber()).hasValue(1000); } @Test - public void shouldGetDaoForkBlockNumber() { + void shouldGetDaoForkBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("daoForkBlock", 1000)); assertThat(config.getDaoForkBlock()).hasValue(1000); } @Test - public void shouldNotHaveDaoForkBlockWhenSetToZero() { + void shouldNotHaveDaoForkBlockWhenSetToZero() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("daoForkBlock", 0)); assertThat(config.getDaoForkBlock()).isEmpty(); } @Test - public void shouldGetTangerineWhistleBlockNumber() { + void shouldGetTangerineWhistleBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("eip150Block", 1000)); assertThat(config.getTangerineWhistleBlockNumber()).hasValue(1000); } @Test - public void shouldGetSpuriousDragonBlockNumber() { + void shouldGetSpuriousDragonBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("eip158Block", 1000)); assertThat(config.getSpuriousDragonBlockNumber()).hasValue(1000); } @Test - public void shouldGetByzantiumBlockNumber() { + void shouldGetByzantiumBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("byzantiumBlock", 1000)); assertThat(config.getByzantiumBlockNumber()).hasValue(1000); } @Test - public void shouldGetConstantinopleBlockNumber() { + void shouldGetConstantinopleBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("constantinopleBlock", 1000)); assertThat(config.getConstantinopleBlockNumber()).hasValue(1000); } @Test - public void shouldGetConstantinopleFixBlockNumber() { + void shouldGetConstantinopleFixBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("constantinopleFixBlock", 1000)); assertThat(config.getPetersburgBlockNumber()).hasValue(1000); } @Test - public void shouldGetPetersburgBlockNumber() { + void shouldGetPetersburgBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("petersburgBlock", 1000)); assertThat(config.getPetersburgBlockNumber()).hasValue(1000); } @Test - public void shouldFailWithBothPetersburgAndConstantinopleFixBlockNumber() { + void shouldFailWithBothPetersburgAndConstantinopleFixBlockNumber() { Map configMap = new HashMap<>(); configMap.put("constantinopleFixBlock", 1000); configMap.put("petersburgBlock", 1000); @@ -145,68 +145,74 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldGetIstanbulBlockNumber() { + void shouldGetIstanbulBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("istanbulBlock", 1000)); assertThat(config.getIstanbulBlockNumber()).hasValue(1000); } @Test - public void shouldGetMuirGlacierBlockNumber() { + void shouldGetMuirGlacierBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("muirGlacierBlock", 1000)); assertThat(config.getMuirGlacierBlockNumber()).hasValue(1000); } @Test - public void shouldGetBerlinBlockNumber() { + void shouldGetBerlinBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("berlinBlock", 1000)); assertThat(config.getBerlinBlockNumber()).hasValue(1000); } @Test - public void shouldGetLondonBlockNumber() { + void shouldGetLondonBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("londonblock", 1000)); assertThat(config.getLondonBlockNumber()).hasValue(1000); } @Test - public void shouldGetArrowGlacierBlockNumber() { + void shouldGetArrowGlacierBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("arrowGlacierBlock", 1000)); assertThat(config.getArrowGlacierBlockNumber()).hasValue(1000); } @Test - public void shouldGetGrayGlacierBlockNumber() { + void shouldGetGrayGlacierBlockNumber() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("grayGlacierBlock", 4242)); assertThat(config.getGrayGlacierBlockNumber()).hasValue(4242); } @Test - public void shouldGetShanghaiTime() { + void shouldGetShanghaiTime() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("shanghaiTime", 1670470141)); assertThat(config.getShanghaiTime()).hasValue(1670470141); } @Test - public void shouldGetCancunTime() { + void shouldGetCancunTime() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("cancunTime", 1670470142)); assertThat(config.getCancunTime()).hasValue(1670470142); } @Test - public void shouldGetFutureEipsTime() { + void shouldGetPragueTime() { + final GenesisConfigOptions config = fromConfigOptions(singletonMap("pragueTime", 1670470143)); + assertThat(config.getPragueTime()).hasValue(1670470143); + } + + @Test + void shouldGetFutureEipsTime() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("futureEipsTime", 1337)); assertThat(config.getFutureEipsTime()).hasValue(1337); } @Test - public void shouldGetExperimentalEipsTime() { + void shouldGetExperimentalEipsTime() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("experimentalEipsTime", 1337)); assertThat(config.getExperimentalEipsTime()).hasValue(1337); } @Test - public void shouldNotReturnEmptyOptionalWhenBlockNumberNotSpecified() { + void shouldNotReturnEmptyOptionalWhenBlockNumberNotSpecified() { final GenesisConfigOptions config = fromConfigOptions(emptyMap()); assertThat(config.getHomesteadBlockNumber()).isEmpty(); assertThat(config.getDaoForkBlock()).isEmpty(); @@ -224,19 +230,20 @@ public class GenesisConfigOptionsTest { assertThat(config.getMergeNetSplitBlockNumber()).isEmpty(); assertThat(config.getShanghaiTime()).isEmpty(); assertThat(config.getCancunTime()).isEmpty(); + assertThat(config.getPragueTime()).isEmpty(); assertThat(config.getFutureEipsTime()).isEmpty(); assertThat(config.getExperimentalEipsTime()).isEmpty(); } @Test - public void shouldGetChainIdWhenSpecified() { + void shouldGetChainIdWhenSpecified() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("chainId", BigInteger.valueOf(32))); assertThat(config.getChainId()).hasValue(BigInteger.valueOf(32)); } @Test - public void shouldSupportEmptyGenesisConfig() { + void shouldSupportEmptyGenesisConfig() { final GenesisConfigOptions config = GenesisConfigFile.fromConfig("{}").getConfigOptions(); assertThat(config.isEthHash()).isFalse(); assertThat(config.isClique()).isFalse(); @@ -245,7 +252,7 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldGetTerminalTotalDifficultyWhenSpecified() { + void shouldGetTerminalTotalDifficultyWhenSpecified() { final GenesisConfigOptions config = fromConfigOptions(singletonMap("terminalTotalDifficulty", BigInteger.valueOf(1000))); assertThat(config.getTerminalTotalDifficulty()).isPresent(); @@ -259,7 +266,7 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldNotReturnTerminalTotalDifficultyWhenNotSpecified() { + void shouldNotReturnTerminalTotalDifficultyWhenNotSpecified() { final GenesisConfigOptions config = fromConfigOptions(emptyMap()); assertThat(config.getTerminalTotalDifficulty()).isNotPresent(); // stubJsonGenesis @@ -267,28 +274,28 @@ public class GenesisConfigOptionsTest { } @Test - public void isZeroBaseFeeShouldDefaultToFalse() { + void isZeroBaseFeeShouldDefaultToFalse() { final GenesisConfigOptions config = GenesisConfigFile.fromConfig("{}").getConfigOptions(); assertThat(config.isZeroBaseFee()).isFalse(); } @Test - public void isZeroBaseFeeParsedCorrectly() { + void isZeroBaseFeeParsedCorrectly() { final GenesisConfigOptions config = fromConfigOptions(Map.of("zerobasefee", true)); assertThat(config.isZeroBaseFee()).isTrue(); } @Test - public void asMapIncludesZeroBaseFee() { + void asMapIncludesZeroBaseFee() { final GenesisConfigOptions config = fromConfigOptions(Map.of("zerobasefee", true)); assertThat(config.asMap()).containsOnlyKeys("zeroBaseFee").containsValue(true); } @Test - public void shouldGetDepositContractAddress() { + void shouldGetDepositContractAddress() { final GenesisConfigOptions config = fromConfigOptions( singletonMap("depositContractAddress", "0x00000000219ab540356cbb839cbe05303d7705fa")); @@ -297,13 +304,13 @@ public class GenesisConfigOptionsTest { } @Test - public void shouldNotHaveDepositContractAddressWhenEmpty() { + void shouldNotHaveDepositContractAddressWhenEmpty() { final GenesisConfigOptions config = fromConfigOptions(emptyMap()); assertThat(config.getDepositContractAddress()).isEmpty(); } @Test - public void asMapIncludesDepositContractAddress() { + void asMapIncludesDepositContractAddress() { final GenesisConfigOptions config = fromConfigOptions(Map.of("depositContractAddress", "0x0")); assertThat(config.asMap()) diff --git a/config/src/test/resources/all_forks.json b/config/src/test/resources/all_forks.json index a697a3748f..6c26c7703e 100644 --- a/config/src/test/resources/all_forks.json +++ b/config/src/test/resources/all_forks.json @@ -16,6 +16,7 @@ "mergeNetSplitBlock": 14, "shanghaiTime": 15, "cancunTime": 16, + "pragueTime": 17, "futureEipsTime": 98, "experimentalEipsTime": 99, "ecip1015Block": 102, diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/chain/GenesisState.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/chain/GenesisState.java index 14def049f1..4181b674e8 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/chain/GenesisState.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/chain/GenesisState.java @@ -281,7 +281,7 @@ public final class GenesisState { if (shanghaiTimestamp.isPresent()) { return genesis.getTimestamp() >= shanghaiTimestamp.getAsLong(); } - return false; + return isCancunAtGenesis(genesis); } private static boolean isCancunAtGenesis(final GenesisConfigFile genesis) { @@ -289,7 +289,23 @@ public final class GenesisState { if (cancunTimestamp.isPresent()) { return genesis.getTimestamp() >= cancunTimestamp.getAsLong(); } - return false; + return isPragueAtGenesis(genesis); + } + + private static boolean isPragueAtGenesis(final GenesisConfigFile genesis) { + final OptionalLong pragueTimestamp = genesis.getConfigOptions().getPragueTime(); + if (pragueTimestamp.isPresent()) { + return genesis.getTimestamp() >= pragueTimestamp.getAsLong(); + } + return isFutureEipsTimeAtGenesis(genesis); + } + + private static boolean isFutureEipsTimeAtGenesis(final GenesisConfigFile genesis) { + final OptionalLong futureEipsTime = genesis.getConfigOptions().getFutureEipsTime(); + if (futureEipsTime.isPresent()) { + return genesis.getTimestamp() >= futureEipsTime.getAsLong(); + } + return isExperimentalEipsTimeAtGenesis(genesis); } private static boolean isExperimentalEipsTimeAtGenesis(final GenesisConfigFile genesis) { diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetPrecompiledContractRegistries.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetPrecompiledContractRegistries.java index a70e20cf24..abee2a5dcb 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetPrecompiledContractRegistries.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetPrecompiledContractRegistries.java @@ -22,6 +22,7 @@ import static org.hyperledger.besu.evm.precompile.MainnetPrecompiledContracts.po import static org.hyperledger.besu.evm.precompile.MainnetPrecompiledContracts.populateForFrontier; import static org.hyperledger.besu.evm.precompile.MainnetPrecompiledContracts.populateForFutureEIPs; import static org.hyperledger.besu.evm.precompile.MainnetPrecompiledContracts.populateForIstanbul; +import static org.hyperledger.besu.evm.precompile.MainnetPrecompiledContracts.populateForPrague; import org.hyperledger.besu.ethereum.mainnet.precompiles.privacy.FlexiblePrivacyPrecompiledContract; import org.hyperledger.besu.ethereum.mainnet.precompiles.privacy.PrivacyPluginPrecompiledContract; @@ -59,6 +60,13 @@ public interface MainnetPrecompiledContractRegistries { return registry; } + static PrecompileContractRegistry prague( + final PrecompiledContractConfiguration precompiledContractConfiguration) { + final PrecompileContractRegistry registry = new PrecompileContractRegistry(); + populateForPrague(registry, precompiledContractConfiguration.getGasCalculator()); + return registry; + } + static PrecompileContractRegistry futureEips( final PrecompiledContractConfiguration precompiledContractConfiguration) { final PrecompileContractRegistry registry = new PrecompileContractRegistry(); diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java index bcf5cdcc0b..de7f92465b 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java @@ -168,6 +168,16 @@ public class MainnetProtocolSpecFactory { evmConfiguration); } + public ProtocolSpecBuilder pragueDefinition(final GenesisConfigOptions genesisConfigOptions) { + return MainnetProtocolSpecs.pragueDefinition( + chainId, + contractSizeLimit, + evmStackSize, + isRevertReasonEnabled, + genesisConfigOptions, + evmConfiguration); + } + /** * The "future" fork consists of EIPs that have been approved for Ethereum Mainnet but not * scheduled for a fork. This is also known as "Eligible For Inclusion" (EFI) or "Considered for diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java index e477bf6f75..2e5f114157 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java @@ -51,6 +51,7 @@ import org.hyperledger.besu.evm.gascalculator.HomesteadGasCalculator; import org.hyperledger.besu.evm.gascalculator.IstanbulGasCalculator; import org.hyperledger.besu.evm.gascalculator.LondonGasCalculator; import org.hyperledger.besu.evm.gascalculator.PetersburgGasCalculator; +import org.hyperledger.besu.evm.gascalculator.PragueGasCalculator; import org.hyperledger.besu.evm.gascalculator.ShanghaiGasCalculator; import org.hyperledger.besu.evm.gascalculator.SpuriousDragonGasCalculator; import org.hyperledger.besu.evm.gascalculator.TangerineWhistleGasCalculator; @@ -661,7 +662,7 @@ public abstract class MainnetProtocolSpecs { feeMarket -> new CancunTargetingGasLimitCalculator( londonForkBlockNumber, (BaseFeeMarket) feeMarket)) - // EVM changes to support EOF EIPs (3670, 4200, 4750, 5450) + // EVM changes to support EIP-1153: TSTORE and EIP-5656: MCOPY .evmBuilder( (gasCalculator, jdCacheConfig) -> MainnetEVMs.cancun( @@ -703,7 +704,7 @@ public abstract class MainnetProtocolSpecs { .name("Cancun"); } - static ProtocolSpecBuilder futureEipsDefinition( + static ProtocolSpecBuilder pragueDefinition( final Optional chainId, final OptionalInt configContractSizeLimit, final OptionalInt configStackSizeLimit, @@ -712,6 +713,7 @@ public abstract class MainnetProtocolSpecs { final EvmConfiguration evmConfiguration) { final int contractSizeLimit = configContractSizeLimit.orElse(SPURIOUS_DRAGON_CONTRACT_SIZE_LIMIT); + return cancunDefinition( chainId, configContractSizeLimit, @@ -719,6 +721,44 @@ public abstract class MainnetProtocolSpecs { enableRevertReason, genesisConfigOptions, evmConfiguration) + // EVM changes to support EOF EIPs (3670, 4200, 4750, 5450) + .gasCalculator(PragueGasCalculator::new) + .evmBuilder( + (gasCalculator, jdCacheConfig) -> + MainnetEVMs.prague( + gasCalculator, chainId.orElse(BigInteger.ZERO), evmConfiguration)) + // change contract call creator to accept EOF code + .contractCreationProcessorBuilder( + (gasCalculator, evm) -> + new ContractCreationProcessor( + gasCalculator, + evm, + true, + List.of( + MaxCodeSizeRule.of(contractSizeLimit), EOFValidationCodeRule.of(1, false)), + 1, + SPURIOUS_DRAGON_FORCE_DELETE_WHEN_EMPTY_ADDRESSES)) + // use prague precompiled contracts + .precompileContractRegistryBuilder(MainnetPrecompiledContractRegistries::prague) + .name("Prague"); + } + + static ProtocolSpecBuilder futureEipsDefinition( + final Optional chainId, + final OptionalInt configContractSizeLimit, + final OptionalInt configStackSizeLimit, + final boolean enableRevertReason, + final GenesisConfigOptions genesisConfigOptions, + final EvmConfiguration evmConfiguration) { + final int contractSizeLimit = + configContractSizeLimit.orElse(SPURIOUS_DRAGON_CONTRACT_SIZE_LIMIT); + return pragueDefinition( + chainId, + configContractSizeLimit, + configStackSizeLimit, + enableRevertReason, + genesisConfigOptions, + evmConfiguration) // Use Future EIP configured EVM .evmBuilder( (gasCalculator, jdCacheConfig) -> diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java index 519450b42f..ec2ffc7bae 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java @@ -235,6 +235,7 @@ public class ProtocolScheduleBuilder { // Begin timestamp forks lastForkBlock = validateForkOrder("Shanghai", config.getShanghaiTime(), lastForkBlock); lastForkBlock = validateForkOrder("Cancun", config.getCancunTime(), lastForkBlock); + lastForkBlock = validateForkOrder("Prague", config.getPragueTime(), lastForkBlock); lastForkBlock = validateForkOrder("FutureEips", config.getFutureEipsTime(), lastForkBlock); lastForkBlock = validateForkOrder("ExperimentalEips", config.getExperimentalEipsTime(), lastForkBlock); @@ -313,6 +314,7 @@ public class ProtocolScheduleBuilder { // Timestamp Forks timestampMilestone(config.getShanghaiTime(), specFactory.shanghaiDefinition(config)), timestampMilestone(config.getCancunTime(), specFactory.cancunDefinition(config)), + timestampMilestone(config.getPragueTime(), specFactory.pragueDefinition(config)), timestampMilestone(config.getFutureEipsTime(), specFactory.futureEipsDefinition(config)), timestampMilestone( config.getExperimentalEipsTime(), specFactory.experimentalEipsDefinition(config)), diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/chain/GenesisStateTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/chain/GenesisStateTest.java index 0a8fc12b62..ea4d113267 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/chain/GenesisStateTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/chain/GenesisStateTest.java @@ -40,7 +40,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; -public final class GenesisStateTest { +final class GenesisStateTest { /** Known RLP encoded bytes of the Olympic Genesis Block. */ private static final String OLYMPIC_RLP = @@ -63,7 +63,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void createFromJsonWithAllocs(final DataStorageFormat dataStorageFormat) throws Exception { + void createFromJsonWithAllocs(final DataStorageFormat dataStorageFormat) throws Exception { final GenesisState genesisState = GenesisState.fromJson( dataStorageFormat, @@ -93,7 +93,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void createFromJsonNoAllocs(final DataStorageFormat dataStorageFormat) throws Exception { + void createFromJsonNoAllocs(final DataStorageFormat dataStorageFormat) throws Exception { final GenesisState genesisState = GenesisState.fromJson( dataStorageFormat, @@ -136,8 +136,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void createFromJsonWithContract(final DataStorageFormat dataStorageFormat) - throws Exception { + void createFromJsonWithContract(final DataStorageFormat dataStorageFormat) throws Exception { assertContractInvariants( dataStorageFormat, "genesis3.json", @@ -146,7 +145,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void createFromJsonWithNonce(final DataStorageFormat dataStorageFormat) throws Exception { + void createFromJsonWithNonce(final DataStorageFormat dataStorageFormat) throws Exception { final GenesisState genesisState = GenesisState.fromJson( dataStorageFormat, @@ -162,7 +161,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void encodeOlympicBlock(final DataStorageFormat dataStorageFormat) throws Exception { + void encodeOlympicBlock(final DataStorageFormat dataStorageFormat) throws Exception { final GenesisState genesisState = GenesisState.fromJson( dataStorageFormat, @@ -183,7 +182,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void genesisFromShanghai(final DataStorageFormat dataStorageFormat) throws Exception { + void genesisFromShanghai(final DataStorageFormat dataStorageFormat) throws Exception { final GenesisState genesisState = GenesisState.fromJson( dataStorageFormat, @@ -196,8 +195,8 @@ public final class GenesisStateTest { Hash.fromHexString( "0xfdc41f92053811b877be43e61cab6b0d9ee55501ae2443df0970c753747f12d8")); assertThat(header.getGasLimit()).isEqualTo(0x2fefd8); - assertThat(header.getGasUsed()).isEqualTo(0); - assertThat(header.getNumber()).isEqualTo(0); + assertThat(header.getGasUsed()).isZero(); + assertThat(header.getNumber()).isZero(); assertThat(header.getReceiptsRoot()) .isEqualTo( Hash.fromHexString( @@ -223,7 +222,7 @@ public final class GenesisStateTest { final Account last = worldState.get(Address.fromHexString("fb289e2b2b65fb63299a682d000744671c50417b")); assertThat(first).isNotNull(); - assertThat(first.getBalance().toLong()).isEqualTo(0); + assertThat(first.getBalance().toLong()).isZero(); assertThat(first.getCode()) .isEqualTo(Bytes.fromHexString("0x5f804955600180495560028049556003804955")); assertThat(last).isNotNull(); @@ -233,7 +232,7 @@ public final class GenesisStateTest { @ParameterizedTest @ArgumentsSource(GenesisStateTestArguments.class) - public void genesisFromCancun(final DataStorageFormat dataStorageFormat) throws Exception { + void genesisFromCancun(final DataStorageFormat dataStorageFormat) throws Exception { final GenesisState genesisState = GenesisState.fromJson( dataStorageFormat, @@ -246,8 +245,58 @@ public final class GenesisStateTest { Hash.fromHexString( "0x87846b86c1026fa7d7be2da045716274231de1871065a320659c9b111287c688")); assertThat(header.getGasLimit()).isEqualTo(0x2fefd8); - assertThat(header.getGasUsed()).isEqualTo(0); - assertThat(header.getNumber()).isEqualTo(0); + assertThat(header.getGasUsed()).isZero(); + assertThat(header.getNumber()).isZero(); + assertThat(header.getReceiptsRoot()) + .isEqualTo( + Hash.fromHexString( + "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")); + assertThat(header.getTransactionsRoot()).isEqualTo(Hash.EMPTY_TRIE_HASH); + assertThat(header.getOmmersHash()) + .isEqualTo( + Hash.fromHexString( + "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347")); + assertThat(header.getExtraData()).isEqualTo(Bytes.EMPTY); + assertThat(header.getParentHash()).isEqualTo(Hash.ZERO); + + final MutableWorldState worldState = InMemoryKeyValueStorageProvider.createInMemoryWorldState(); + genesisState.writeStateTo(worldState); + Hash computedStateRoot = worldState.rootHash(); + assertThat(computedStateRoot).isEqualTo(header.getStateRoot()); + assertThat(header.getStateRoot()) + .isEqualTo( + Hash.fromHexString( + "0x7f5cfe1375a61009a22d24512d18035bc8f855129452fa9c6a6be2ef4e9da7db")); + final Account first = + worldState.get(Address.fromHexString("0000000000000000000000000000000000000100")); + final Account last = + worldState.get(Address.fromHexString("fb289e2b2b65fb63299a682d000744671c50417b")); + assertThat(first).isNotNull(); + assertThat(first.getBalance().toLong()).isZero(); + assertThat(first.getCode()) + .isEqualTo(Bytes.fromHexString("0x5f804955600180495560028049556003804955")); + assertThat(last).isNotNull(); + Wei lastBalance = last.getBalance(); + assertThat(lastBalance).isEqualTo(Wei.fromHexString("0x123450000000000000000")); + } + + @ParameterizedTest + @ArgumentsSource(GenesisStateTestArguments.class) + void genesisFromPrague(final DataStorageFormat dataStorageFormat) throws Exception { + final GenesisState genesisState = + GenesisState.fromJson( + dataStorageFormat, + Resources.toString( + GenesisStateTest.class.getResource("genesis_prague.json"), Charsets.UTF_8), + ProtocolScheduleFixture.MAINNET); + final BlockHeader header = genesisState.getBlock().getHeader(); + assertThat(header.getHash()) + .isEqualTo( + Hash.fromHexString( + "0x87846b86c1026fa7d7be2da045716274231de1871065a320659c9b111287c688")); + assertThat(header.getGasLimit()).isEqualTo(0x2fefd8); + assertThat(header.getGasUsed()).isZero(); + assertThat(header.getNumber()).isZero(); assertThat(header.getReceiptsRoot()) .isEqualTo( Hash.fromHexString( @@ -273,7 +322,7 @@ public final class GenesisStateTest { final Account last = worldState.get(Address.fromHexString("fb289e2b2b65fb63299a682d000744671c50417b")); assertThat(first).isNotNull(); - assertThat(first.getBalance().toLong()).isEqualTo(0); + assertThat(first.getBalance().toLong()).isZero(); assertThat(first.getCode()) .isEqualTo(Bytes.fromHexString("0x5f804955600180495560028049556003804955")); assertThat(last).isNotNull(); diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java index 3d66d8df40..68ae2e56f4 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java @@ -41,7 +41,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.stubbing.Answer; @ExtendWith(MockitoExtension.class) -public class ProtocolScheduleBuilderTest { +class ProtocolScheduleBuilderTest { private final long PRE_SHANGHAI_TIMESTAMP = 1680488620L; // Mon, 03 Apr 2023 02:23:40 UTC @Mock GenesisConfigOptions configOptions; @Mock private Function modifier; @@ -61,13 +61,14 @@ public class ProtocolScheduleBuilderTest { } @Test - public void createProtocolScheduleInOrder() { + void createProtocolScheduleInOrder() { when(configOptions.getHomesteadBlockNumber()).thenReturn(OptionalLong.of(1L)); when(configOptions.getDaoForkBlock()).thenReturn(OptionalLong.of(2L)); when(configOptions.getByzantiumBlockNumber()).thenReturn(OptionalLong.of(13L)); when(configOptions.getMergeNetSplitBlockNumber()).thenReturn(OptionalLong.of(15L)); when(configOptions.getShanghaiTime()).thenReturn(OptionalLong.of(PRE_SHANGHAI_TIMESTAMP + 1)); when(configOptions.getCancunTime()).thenReturn(OptionalLong.of(PRE_SHANGHAI_TIMESTAMP + 3)); + when(configOptions.getPragueTime()).thenReturn(OptionalLong.of(PRE_SHANGHAI_TIMESTAMP + 5)); final ProtocolSchedule protocolSchedule = builder.createProtocolSchedule(); assertThat(protocolSchedule.getChainId()).contains(CHAIN_ID); @@ -102,10 +103,20 @@ public class ProtocolScheduleBuilderTest { .getByBlockHeader(blockHeader(54, PRE_SHANGHAI_TIMESTAMP + 4)) .getName()) .isEqualTo("Cancun"); + assertThat( + protocolSchedule + .getByBlockHeader(blockHeader(55, PRE_SHANGHAI_TIMESTAMP + 5)) + .getName()) + .isEqualTo("Prague"); + assertThat( + protocolSchedule + .getByBlockHeader(blockHeader(56, PRE_SHANGHAI_TIMESTAMP + 6)) + .getName()) + .isEqualTo("Prague"); } @Test - public void createProtocolScheduleOverlappingUsesLatestFork() { + void createProtocolScheduleOverlappingUsesLatestFork() { when(configOptions.getHomesteadBlockNumber()).thenReturn(OptionalLong.of(0L)); when(configOptions.getByzantiumBlockNumber()).thenReturn(OptionalLong.of(0L)); final ProtocolSchedule protocolSchedule = builder.createProtocolSchedule(); @@ -116,7 +127,7 @@ public class ProtocolScheduleBuilderTest { } @Test - public void createProtocolScheduleOutOfOrderThrows() { + void createProtocolScheduleOutOfOrderThrows() { when(configOptions.getDaoForkBlock()).thenReturn(OptionalLong.of(0L)); when(configOptions.getArrowGlacierBlockNumber()).thenReturn(OptionalLong.of(12L)); when(configOptions.getGrayGlacierBlockNumber()).thenReturn(OptionalLong.of(11L)); @@ -127,7 +138,7 @@ public class ProtocolScheduleBuilderTest { } @Test - public void createProtocolScheduleWithTimestampsOutOfOrderThrows() { + void createProtocolScheduleWithTimestampsOutOfOrderThrows() { when(configOptions.getDaoForkBlock()).thenReturn(OptionalLong.of(0L)); when(configOptions.getShanghaiTime()).thenReturn(OptionalLong.of(3L)); when(configOptions.getCancunTime()).thenReturn(OptionalLong.of(2L)); @@ -138,7 +149,7 @@ public class ProtocolScheduleBuilderTest { } @Test - public void modifierInsertedBetweenBlocksIsAppliedToLaterAndCreatesInterimMilestone() { + void modifierInsertedBetweenBlocksIsAppliedToLaterAndCreatesInterimMilestone() { when(configOptions.getHomesteadBlockNumber()).thenReturn(OptionalLong.of(5L)); when(modifier.apply(any())) @@ -158,7 +169,7 @@ public class ProtocolScheduleBuilderTest { } @Test - public void modifierPastEndOfDefinedMilestonesGetsItsOwnMilestoneCreated() { + void modifierPastEndOfDefinedMilestonesGetsItsOwnMilestoneCreated() { when(modifier.apply(any())) .thenAnswer((Answer) invocation -> invocation.getArgument(0)); @@ -175,7 +186,7 @@ public class ProtocolScheduleBuilderTest { } @Test - public void modifierOnDefinedMilestoneIsAppliedButDoesNotGetAnExtraMilestoneCreated() { + void modifierOnDefinedMilestoneIsAppliedButDoesNotGetAnExtraMilestoneCreated() { when(configOptions.getHomesteadBlockNumber()).thenReturn(OptionalLong.of(5L)); when(modifier.apply(any())) .thenAnswer((Answer) invocation -> invocation.getArgument(0)); diff --git a/ethereum/core/src/test/resources/org/hyperledger/besu/ethereum/chain/genesis_prague.json b/ethereum/core/src/test/resources/org/hyperledger/besu/ethereum/chain/genesis_prague.json new file mode 100644 index 0000000000..d99071b328 --- /dev/null +++ b/ethereum/core/src/test/resources/org/hyperledger/besu/ethereum/chain/genesis_prague.json @@ -0,0 +1,4077 @@ +{ + "config": { + "ethash": {}, + "chainID": 7, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "constantinopleFixBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "parisBlock": 0, + "terminalTotalDifficulty": 0, + "shanghaiTime": 0, + "cancunTime": 0, + "pragueTime": 0 + }, + "nonce": "0x0", + "timestamp": "0x1234", + "extraData": "0x", + "gasLimit": "0x2fefd8", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000100": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000101": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000102": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000103": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000104": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000105": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000106": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000107": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000108": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000109": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000010a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000010b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000010c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000010d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000010e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000010f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000110": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000111": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000112": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000113": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000114": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000115": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000116": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000117": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000118": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000119": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000011a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000011b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000011c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000011d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000011e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000011f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000120": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000121": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000122": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000123": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000124": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000125": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000126": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000127": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000128": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000129": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000012a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000012b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000012c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000012d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000012e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000012f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000130": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000131": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000132": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000133": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000134": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000135": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000136": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000137": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000138": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000139": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000013a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000013b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000013c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000013d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000013e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000013f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000140": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000141": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000142": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000143": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000144": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000145": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000146": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000147": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000148": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000149": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000014a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000014b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000014c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000014d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000014e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000014f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000150": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000151": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000152": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000153": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000154": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000155": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000156": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000157": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000158": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000159": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000015a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000015b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000015c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000015d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000015e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000015f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000160": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000161": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000162": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000163": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000164": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000165": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000166": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000167": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000168": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000169": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000016a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000016b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000016c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000016d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000016e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000016f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000170": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000171": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000172": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000173": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000174": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000175": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000176": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000177": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000178": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000179": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000017a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000017b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000017c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000017d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000017e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000017f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000180": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000181": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000182": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000183": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000184": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000185": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000186": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000187": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000188": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000189": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000018a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000018b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000018c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000018d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000018e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000018f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000190": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000191": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000192": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000193": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000194": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000195": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000196": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000197": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000198": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000199": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000019a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000019b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000019c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000019d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000019e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000019f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001a9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001aa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ab": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ac": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ad": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ae": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001af": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001b9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ba": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001bb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001bc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001bd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001be": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001bf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001c9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ca": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001cb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001cc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001cd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ce": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001cf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001d9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001da": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001db": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001dc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001dd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001de": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001df": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001e9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ea": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001eb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ec": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ed": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ee": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ef": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001f9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001fa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001fb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001fc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001fd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001fe": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000001ff": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000200": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000201": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000202": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000203": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000204": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000205": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000206": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000207": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000208": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000209": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000020a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000020b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000020c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000020d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000020e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000020f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000210": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000211": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000212": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000213": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000214": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000215": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000216": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000217": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000218": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000219": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000021a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000021b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000021c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000021d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000021e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000021f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000220": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000221": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000222": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000223": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000224": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000225": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000226": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000227": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000228": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000229": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000022a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000022b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000022c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000022d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000022e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000022f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000230": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000231": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000232": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000233": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000234": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000235": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000236": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000237": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000238": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000239": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000023a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000023b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000023c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000023d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000023e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000023f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000240": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000241": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000242": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000243": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000244": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000245": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000246": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000247": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000248": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000249": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000024a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000024b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000024c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000024d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000024e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000024f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000250": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000251": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000252": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000253": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000254": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000255": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000256": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000257": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000258": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000259": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000025a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000025b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000025c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000025d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000025e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000025f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000260": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000261": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000262": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000263": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000264": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000265": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000266": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000267": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000268": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000269": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000026a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000026b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000026c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000026d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000026e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000026f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000270": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000271": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000272": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000273": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000274": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000275": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000276": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000277": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000278": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000279": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000027a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000027b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000027c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000027d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000027e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000027f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000280": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000281": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000282": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000283": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000284": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000285": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000286": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000287": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000288": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000289": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000028a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000028b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000028c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000028d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000028e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000028f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000290": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000291": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000292": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000293": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000294": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000295": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000296": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000297": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000298": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000299": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000029a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000029b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000029c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000029d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000029e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000029f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002a9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002aa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ab": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ac": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ad": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ae": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002af": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002b9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ba": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002bb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002bc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002bd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002be": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002bf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002c9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ca": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002cb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002cc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002cd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ce": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002cf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002d9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002da": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002db": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002dc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002dd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002de": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002df": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002e9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ea": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002eb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ec": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ed": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ee": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ef": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002f9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002fa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002fb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002fc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002fd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002fe": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000002ff": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000300": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000301": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000302": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000303": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000304": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000305": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000306": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000307": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000308": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000309": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000030a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000030b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000030c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000030d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000030e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000030f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000310": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000311": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000312": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000313": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000314": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000315": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000316": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000317": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000318": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000319": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000031a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000031b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000031c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000031d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000031e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000031f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000320": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000321": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000322": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000323": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000324": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000325": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000326": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000327": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000328": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000329": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000032a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000032b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000032c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000032d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000032e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000032f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000330": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000331": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000332": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000333": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000334": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000335": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000336": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000337": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000338": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000339": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000033a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000033b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000033c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000033d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000033e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000033f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000340": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000341": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000342": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000343": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000344": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000345": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000346": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000347": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000348": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000349": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000034a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000034b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000034c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000034d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000034e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000034f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000350": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000351": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000352": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000353": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000354": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000355": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000356": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000357": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000358": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000359": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000035a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000035b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000035c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000035d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000035e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000035f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000360": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000361": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000362": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000363": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000364": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000365": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000366": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000367": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000368": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000369": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000036a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000036b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000036c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000036d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000036e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000036f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000370": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000371": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000372": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000373": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000374": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000375": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000376": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000377": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000378": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000379": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000037a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000037b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000037c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000037d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000037e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000037f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000380": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000381": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000382": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000383": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000384": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000385": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000386": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000387": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000388": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000389": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000038a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000038b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000038c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000038d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000038e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000038f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000390": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000391": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000392": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000393": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000394": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000395": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000396": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000397": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000398": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000399": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000039a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000039b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000039c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000039d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000039e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000039f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003a9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003aa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ab": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ac": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ad": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ae": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003af": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003b9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ba": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003bb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003bc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003bd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003be": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003bf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003c9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ca": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003cb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003cc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003cd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ce": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003cf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003d9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003da": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003db": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003dc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003dd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003de": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003df": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003e9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ea": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003eb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ec": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ed": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ee": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ef": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003f9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003fa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003fb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003fc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003fd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003fe": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000003ff": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000400": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000401": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000402": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000403": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000404": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000405": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000406": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000407": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000408": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000409": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000040a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000040b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000040c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000040d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000040e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000040f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000410": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000411": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000412": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000413": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000414": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000415": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000416": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000417": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000418": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000419": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000041a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000041b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000041c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000041d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000041e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000041f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000420": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000421": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000422": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000423": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000424": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000425": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000426": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000427": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000428": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000429": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000042a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000042b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000042c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000042d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000042e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000042f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000430": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000431": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000432": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000433": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000434": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000435": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000436": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000437": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000438": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000439": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000043a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000043b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000043c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000043d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000043e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000043f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000440": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000441": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000442": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000443": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000444": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000445": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000446": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000447": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000448": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000449": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000044a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000044b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000044c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000044d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000044e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000044f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000450": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000451": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000452": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000453": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000454": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000455": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000456": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000457": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000458": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000459": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000045a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000045b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000045c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000045d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000045e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000045f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000460": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000461": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000462": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000463": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000464": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000465": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000466": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000467": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000468": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000469": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000046a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000046b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000046c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000046d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000046e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000046f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000470": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000471": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000472": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000473": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000474": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000475": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000476": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000477": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000478": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000479": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000047a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000047b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000047c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000047d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000047e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000047f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000480": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000481": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000482": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000483": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000484": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000485": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000486": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000487": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000488": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000489": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000048a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000048b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000048c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000048d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000048e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000048f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000490": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000491": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000492": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000493": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000494": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000495": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000496": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000497": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000498": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0000000000000000000000000000000000000499": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000049a": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000049b": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000049c": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000049d": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000049e": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "000000000000000000000000000000000000049f": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004a9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004aa": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ab": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ac": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ad": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ae": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004af": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004b9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ba": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004bb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004bc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004bd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004be": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004bf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004c9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ca": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004cb": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004cc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004cd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004ce": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004cf": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d8": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004d9": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004da": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004db": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004dc": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004dd": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004de": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004df": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e0": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e1": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e2": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e3": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e4": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e5": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e6": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "00000000000000000000000000000000000004e7": { + "code": "0x5f804955600180495560028049556003804955", + "balance": "0x0" + }, + "0161e041aad467a890839d5b08b138c1e6373072": { + "balance": "0x123450000000000000000" + }, + "0f830fc93e76c8d26ed1f65045e70f5f986da383": { + "balance": "0x123450000000000000000" + }, + "2180290b54d5d9e38f85fdaf086bfe35b610f404": { + "balance": "0x123450000000000000000" + }, + "763fc7d39ab4cfa496c39077542589819aea5c54": { + "balance": "0x123450000000000000000" + }, + "87da6a8c6e9eff15d703fc2773e32f6af8dbe301": { + "balance": "0x123450000000000000000" + }, + "9c09de85a373dc3486115cab94c72549029f1103": { + "balance": "0x123450000000000000000" + }, + "9d2f18c852eb5b37292dfc9f68ac5ecbf0d22dd2": { + "balance": "0x123450000000000000000" + }, + "a995b3ebccfb2b8e8b1db15b7ca8cf2f11ed0310": { + "balance": "0x123450000000000000000" + }, + "aa82d35d5eaec5cf87c311a3af844ed682d5a247": { + "balance": "0x123450000000000000000" + }, + "b76ae96839fe445670262bce61144e6cda9099b8": { + "balance": "0x123450000000000000000" + }, + "b97de4b8c857e4f6bc354f226dc3249aaee49209": { + "balance": "0x123450000000000000000" + }, + "c5065c9eeebe6df2c2284d046bfc906501846c51": { + "balance": "0x123450000000000000000" + }, + "cf49fda3be353c69b41ed96333cd24302da4556f": { + "balance": "0x123450000000000000000" + }, + "fb289e2b2b65fb63299a682d000744671c50417b": { + "balance": "0x123450000000000000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x3b9aca00" +} diff --git a/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java b/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java index e7c576c585..e93cc7ec2c 100644 --- a/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java +++ b/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java @@ -111,6 +111,9 @@ class MainnetGenesisFileModule extends GenesisFileModule { Map.entry( "cancun", createSchedule(new StubGenesisConfigOptions().cancunTime(0).baseFeePerGas(0x0a))), + Map.entry( + "prague", + createSchedule(new StubGenesisConfigOptions().pragueTime(0).baseFeePerGas(0x0a))), Map.entry( "futureeips", createSchedule(new StubGenesisConfigOptions().futureEipsTime(0).baseFeePerGas(0x0a))), diff --git a/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/benchmarks/BenchmarkExecutor.java b/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/benchmarks/BenchmarkExecutor.java index c552512cb7..730dd833f9 100644 --- a/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/benchmarks/BenchmarkExecutor.java +++ b/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/benchmarks/BenchmarkExecutor.java @@ -31,6 +31,7 @@ import org.hyperledger.besu.evm.gascalculator.HomesteadGasCalculator; import org.hyperledger.besu.evm.gascalculator.IstanbulGasCalculator; import org.hyperledger.besu.evm.gascalculator.LondonGasCalculator; import org.hyperledger.besu.evm.gascalculator.PetersburgGasCalculator; +import org.hyperledger.besu.evm.gascalculator.PragueGasCalculator; import org.hyperledger.besu.evm.gascalculator.ShanghaiGasCalculator; import org.hyperledger.besu.evm.precompile.PrecompiledContract; @@ -136,7 +137,8 @@ public abstract class BenchmarkExecutor { case BERLIN -> new BerlinGasCalculator(); case LONDON, PARIS -> new LondonGasCalculator(); case SHANGHAI -> new ShanghaiGasCalculator(); - default -> new CancunGasCalculator(); + case CANCUN -> new CancunGasCalculator(); + default -> new PragueGasCalculator(); }; } diff --git a/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java b/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java index 31cdfaca16..df4a572272 100644 --- a/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java +++ b/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java @@ -78,8 +78,7 @@ public class ReferenceTestProtocolSchedules { "ShanghaiToCancunAtTime15k", createSchedule(genesisStub.clone().shanghaiTime(0).cancunTime(15000))); builder.put("Cancun", createSchedule(genesisStub.clone().cancunTime(0))); - // TODO remove this after execution-test-specs finalize - builder.put("Prague", createSchedule(genesisStub.clone().futureEipsTime(0))); + builder.put("Prague", createSchedule(genesisStub.clone().pragueTime(0))); builder.put("Future_EIPs", createSchedule(genesisStub.clone().futureEipsTime(0))); builder.put("Experimental_EIPs", createSchedule(genesisStub.clone().experimentalEipsTime(0))); return new ReferenceTestProtocolSchedules(builder.build()); diff --git a/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/core/TransactionTest.java b/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/core/TransactionTest.java index b2dd41bbfa..45ba21c7e0 100644 --- a/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/core/TransactionTest.java +++ b/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/core/TransactionTest.java @@ -34,6 +34,7 @@ import org.hyperledger.besu.evm.gascalculator.HomesteadGasCalculator; import org.hyperledger.besu.evm.gascalculator.IstanbulGasCalculator; import org.hyperledger.besu.evm.gascalculator.LondonGasCalculator; import org.hyperledger.besu.evm.gascalculator.PetersburgGasCalculator; +import org.hyperledger.besu.evm.gascalculator.PragueGasCalculator; import org.hyperledger.besu.evm.gascalculator.ShanghaiGasCalculator; import org.hyperledger.besu.evm.gascalculator.SpuriousDragonGasCalculator; import org.hyperledger.besu.evm.gascalculator.TangerineWhistleGasCalculator; @@ -148,6 +149,12 @@ public class TransactionTest { milestone(spec, name, "Cancun", new CancunGasCalculator(), Optional.of(Wei.of(0))); } + @ParameterizedTest(name = "Name: {0}") + @MethodSource("getTestParametersForConfig") + public void prague(final String name, final TransactionTestCaseSpec spec) { + milestone(spec, name, "Prague", new PragueGasCalculator(), Optional.of(Wei.of(0))); + } + public void milestone( final TransactionTestCaseSpec spec, final String name, diff --git a/ethereum/retesteth/src/main/java/org/hyperledger/besu/ethereum/retesteth/methods/TestSetChainParams.java b/ethereum/retesteth/src/main/java/org/hyperledger/besu/ethereum/retesteth/methods/TestSetChainParams.java index 1059f02c20..1446fd939f 100644 --- a/ethereum/retesteth/src/main/java/org/hyperledger/besu/ethereum/retesteth/methods/TestSetChainParams.java +++ b/ethereum/retesteth/src/main/java/org/hyperledger/besu/ethereum/retesteth/methods/TestSetChainParams.java @@ -128,6 +128,7 @@ public class TestSetChainParams implements JsonRpcMethod { maybeMoveToNumber(params, "mergeNetSplitForkBlock", config, "mergeNetSplitBlock"); maybeMoveToNumber(params, "shanghaiForkTime", config, "shanghaiTime"); maybeMoveToNumber(params, "cancunForkTime", config, "cancunTime"); + maybeMoveToNumber(params, "pragueForkTime", config, "pragueTime"); maybeMoveToNumber(params, "futureEipsForkTime", config, "futureEipsTime"); maybeMoveToNumber(params, "experimentalEipsForkTime", config, "experimentalEipsTime"); maybeMoveToNumber(params, "chainID", config, "chainId", 1); diff --git a/evm/src/main/java/org/hyperledger/besu/evm/EvmSpecVersion.java b/evm/src/main/java/org/hyperledger/besu/evm/EvmSpecVersion.java index 20e4e9708c..2ac4ca96d1 100644 --- a/evm/src/main/java/org/hyperledger/besu/evm/EvmSpecVersion.java +++ b/evm/src/main/java/org/hyperledger/besu/evm/EvmSpecVersion.java @@ -50,7 +50,7 @@ public enum EvmSpecVersion { /** Cancun evm spec version. */ CANCUN(0, true, "Cancun", "Finalized"), /** Prague evm spec version. */ - PRAGUE(0, false, "Prague", "Placeholder"), + PRAGUE(0, false, "Prague", "In Development"), /** Osaka evm spec version. */ OSAKA(0, false, "Osaka", "Placeholder"), /** Bogota evm spec version. */ diff --git a/evm/src/main/java/org/hyperledger/besu/evm/MainnetEVMs.java b/evm/src/main/java/org/hyperledger/besu/evm/MainnetEVMs.java index 0d9fa18b59..f81bf64d0c 100644 --- a/evm/src/main/java/org/hyperledger/besu/evm/MainnetEVMs.java +++ b/evm/src/main/java/org/hyperledger/besu/evm/MainnetEVMs.java @@ -24,6 +24,7 @@ import org.hyperledger.besu.evm.gascalculator.HomesteadGasCalculator; import org.hyperledger.besu.evm.gascalculator.IstanbulGasCalculator; import org.hyperledger.besu.evm.gascalculator.LondonGasCalculator; import org.hyperledger.besu.evm.gascalculator.PetersburgGasCalculator; +import org.hyperledger.besu.evm.gascalculator.PragueGasCalculator; import org.hyperledger.besu.evm.gascalculator.ShanghaiGasCalculator; import org.hyperledger.besu.evm.gascalculator.SpuriousDragonGasCalculator; import org.hyperledger.besu.evm.gascalculator.TangerineWhistleGasCalculator; @@ -896,7 +897,7 @@ public class MainnetEVMs { * @return the evm */ public static EVM prague(final BigInteger chainId, final EvmConfiguration evmConfiguration) { - return prague(new CancunGasCalculator(), chainId, evmConfiguration); + return prague(new PragueGasCalculator(), chainId, evmConfiguration); } /** @@ -963,7 +964,7 @@ public class MainnetEVMs { * @return the evm */ public static EVM osaka(final BigInteger chainId, final EvmConfiguration evmConfiguration) { - return osaka(new CancunGasCalculator(), chainId, evmConfiguration); + return osaka(new PragueGasCalculator(), chainId, evmConfiguration); } /** @@ -1030,7 +1031,7 @@ public class MainnetEVMs { * @return the evm */ public static EVM bogota(final BigInteger chainId, final EvmConfiguration evmConfiguration) { - return bogota(new CancunGasCalculator(), chainId, evmConfiguration); + return bogota(new PragueGasCalculator(), chainId, evmConfiguration); } /** @@ -1098,7 +1099,7 @@ public class MainnetEVMs { * @return the evm */ public static EVM futureEips(final BigInteger chainId, final EvmConfiguration evmConfiguration) { - return futureEips(new CancunGasCalculator(), chainId, evmConfiguration); + return futureEips(new PragueGasCalculator(), chainId, evmConfiguration); } /** @@ -1174,7 +1175,7 @@ public class MainnetEVMs { */ public static EVM experimentalEips( final BigInteger chainId, final EvmConfiguration evmConfiguration) { - return experimentalEips(new CancunGasCalculator(), chainId, evmConfiguration); + return experimentalEips(new PragueGasCalculator(), chainId, evmConfiguration); } /** diff --git a/evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java b/evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java index 0a43a6d359..81b3e9b0ce 100644 --- a/evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java +++ b/evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java @@ -499,7 +499,7 @@ public class EVMExecutor { final BigInteger chainId, final EvmConfiguration evmConfiguration) { final EVMExecutor executor = new EVMExecutor(MainnetEVMs.prague(chainId, evmConfiguration)); executor.precompileContractRegistry = - MainnetPrecompiledContracts.cancun(executor.evm.getGasCalculator()); + MainnetPrecompiledContracts.prague(executor.evm.getGasCalculator()); return executor; } @@ -514,7 +514,7 @@ public class EVMExecutor { final BigInteger chainId, final EvmConfiguration evmConfiguration) { final EVMExecutor executor = new EVMExecutor(MainnetEVMs.osaka(chainId, evmConfiguration)); executor.precompileContractRegistry = - MainnetPrecompiledContracts.cancun(executor.evm.getGasCalculator()); + MainnetPrecompiledContracts.prague(executor.evm.getGasCalculator()); return executor; } @@ -529,7 +529,7 @@ public class EVMExecutor { final BigInteger chainId, final EvmConfiguration evmConfiguration) { final EVMExecutor executor = new EVMExecutor(MainnetEVMs.bogota(chainId, evmConfiguration)); executor.precompileContractRegistry = - MainnetPrecompiledContracts.cancun(executor.evm.getGasCalculator()); + MainnetPrecompiledContracts.prague(executor.evm.getGasCalculator()); return executor; } diff --git a/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/CancunGasCalculator.java b/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/CancunGasCalculator.java index 191e60888b..f858959564 100644 --- a/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/CancunGasCalculator.java +++ b/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/CancunGasCalculator.java @@ -36,7 +36,7 @@ public class CancunGasCalculator extends ShanghaiGasCalculator { * * @param maxPrecompile the max precompile */ - private CancunGasCalculator(final int maxPrecompile) { + protected CancunGasCalculator(final int maxPrecompile) { super(maxPrecompile); } diff --git a/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/PragueGasCalculator.java b/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/PragueGasCalculator.java new file mode 100644 index 0000000000..5d7eab4d0a --- /dev/null +++ b/evm/src/main/java/org/hyperledger/besu/evm/gascalculator/PragueGasCalculator.java @@ -0,0 +1,44 @@ +/* + * Copyright Hyperledger Besu contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.besu.evm.gascalculator; + +import static org.hyperledger.besu.datatypes.Address.KZG_POINT_EVAL; + +/** + * Gas Calculator for Prague + * + *

Placeholder for new gas schedule items. If Prague finalzies without changes this can be + * removed + * + *

    + *
  • TBD + *
+ */ +public class PragueGasCalculator extends CancunGasCalculator { + + /** Instantiates a new Prague Gas Calculator. */ + public PragueGasCalculator() { + this(KZG_POINT_EVAL.toArrayUnsafe()[19]); + } + + /** + * Instantiates a new Prague Gas Calculator + * + * @param maxPrecompile the max precompile + */ + protected PragueGasCalculator(final int maxPrecompile) { + super(maxPrecompile); + } +} diff --git a/evm/src/main/java/org/hyperledger/besu/evm/precompile/MainnetPrecompiledContracts.java b/evm/src/main/java/org/hyperledger/besu/evm/precompile/MainnetPrecompiledContracts.java index 454e728021..3f9f567dc2 100644 --- a/evm/src/main/java/org/hyperledger/besu/evm/precompile/MainnetPrecompiledContracts.java +++ b/evm/src/main/java/org/hyperledger/besu/evm/precompile/MainnetPrecompiledContracts.java @@ -140,6 +140,31 @@ public interface MainnetPrecompiledContracts { registry.put(Address.KZG_POINT_EVAL, new KZGPointEvalPrecompiledContract()); } + /** + * Prague precompile contract registry. + * + * @param gasCalculator the gas calculator + * @return the precompile contract registry + */ + static PrecompileContractRegistry prague(final GasCalculator gasCalculator) { + PrecompileContractRegistry precompileContractRegistry = new PrecompileContractRegistry(); + populateForPrague(precompileContractRegistry, gasCalculator); + return precompileContractRegistry; + } + + /** + * Populate registry for Prague. + * + * @param registry the registry + * @param gasCalculator the gas calculator + */ + static void populateForPrague( + final PrecompileContractRegistry registry, final GasCalculator gasCalculator) { + populateForCancun(registry, gasCalculator); + + // TODO: add Prague precompiles here + } + /** * FutureEIPs precompile contract registry. * diff --git a/evm/src/test/java/org/hyperledger/besu/evm/fluent/EVMExecutorTest.java b/evm/src/test/java/org/hyperledger/besu/evm/fluent/EVMExecutorTest.java index 9356ab8bec..77458e9e28 100644 --- a/evm/src/test/java/org/hyperledger/besu/evm/fluent/EVMExecutorTest.java +++ b/evm/src/test/java/org/hyperledger/besu/evm/fluent/EVMExecutorTest.java @@ -127,6 +127,10 @@ class EVMExecutorTest { EVMExecutor cancunEVM = EVMExecutor.cancun(EvmConfiguration.DEFAULT); assertThat(cancunEVM.getChainId()).contains(defaultChainId); + EVMExecutor pragueEVM = + EVMExecutor.prague(defaultChainId.toBigInteger(), EvmConfiguration.DEFAULT); + assertThat(pragueEVM.getChainId()).contains(defaultChainId); + EVMExecutor futureEipsVM = EVMExecutor.futureEips(EvmConfiguration.DEFAULT); assertThat(futureEipsVM.getChainId()).contains(defaultChainId); }