From 58fe07a649acef03314f988b501e6910465cece9 Mon Sep 17 00:00:00 2001 From: sveitser Date: Mon, 25 Sep 2023 20:52:11 +0200 Subject: [PATCH 1/4] Remember rollup genesis hotshot block number --- zkevm-contract-bindings/src/bin/deploy.rs | 24 ++++++++++++++++++----- zkevm-node | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/zkevm-contract-bindings/src/bin/deploy.rs b/zkevm-contract-bindings/src/bin/deploy.rs index 2712f4b..5e906ae 100644 --- a/zkevm-contract-bindings/src/bin/deploy.rs +++ b/zkevm-contract-bindings/src/bin/deploy.rs @@ -163,8 +163,10 @@ struct ZkEvmDeploymentOutput { ger_address: Address, /// The address of the verifier contract. verifier_address: Address, - /// The block number when the rollup contract was deployed. + /// The L1 block number when the rollup contract was deployed. genesis_block_number: u64, + /// The hotshot block number where the rollup contract was deployed. + genesis_hotshot_block_number: u64, } with_prefix!(prefix_zkevm_1 "ESPRESSO_ZKEVM_1_"); @@ -267,6 +269,17 @@ async fn deploy_zkevm( .await; assert_eq!(rollup.address(), precalc_rollup_address); + let hotshot = HotShot::new(input.hotshot_address, deployer.clone()); + let genesis_hotshot_block_number = hotshot + .block_height() + .block(receipt.block_number.unwrap()) + .await? + .as_u64(); + tracing::info!( + "HotShot genesis block number: {}", + genesis_hotshot_block_number + ); + // Remember the genesis block number where the rollup contract was deployed. let genesis_block_number = receipt.block_number.unwrap().as_u64(); @@ -307,6 +320,7 @@ async fn deploy_zkevm( ger_address: global_exit_root.address(), verifier_address: verifier.address(), genesis_block_number, + genesis_hotshot_block_number, }) } @@ -386,14 +400,14 @@ async fn deploy(opts: Options) -> Result<()> { tracing::info!("Using deployer account {:?}", deployer.inner().address()); // Deploy the hotshot contract. - let hotshot_address = if opts.hotshot_address.is_none() { + let hotshot_address = if let Some(hotshot_address) = opts.hotshot_address { + tracing::info!("Using existing HotShot contract at {:?}", hotshot_address); + hotshot_address + } else { tracing::info!("Deploying HotShot contract"); let hotshot = HotShot::deploy(deployer.clone(), ())?.send().await?; tracing::info!("Deployed HotShot at {:?}", hotshot.address()); hotshot.address() - } else { - tracing::info!("Using existing HotShot contract"); - opts.hotshot_address.unwrap() }; // Deploy the contracts for the first zkevm-node. diff --git a/zkevm-node b/zkevm-node index d8cc5fa..b5c4f45 160000 --- a/zkevm-node +++ b/zkevm-node @@ -1 +1 @@ -Subproject commit d8cc5fa9567a3b63f16ca380666805cc697dd70b +Subproject commit b5c4f450ab89e3a89b47d0451c9a07069e0b5be9 From 4edafa0393da911801655dfdbfeddbd6deb2aa78 Mon Sep 17 00:00:00 2001 From: sveitser Date: Mon, 25 Sep 2023 22:38:38 +0200 Subject: [PATCH 2/4] Add compose config for genesis hotshot block num - Remember the hotshot block number when rollup contracts are deployed. - Set the new env var when starting up tests. - Update zkevm-node with pre-confirmations fix. --- .env | 2 ++ permissionless-docker-compose.yaml | 6 ++++++ .../src/demo_with_sequencer.rs | 4 ++++ polygon-zkevm-adaptor/src/polygon_zkevm.rs | 4 ++++ zkevm-contract-bindings/src/deploy.rs | 18 ++++++++++++++++++ zkevm-node | 2 +- 6 files changed, 35 insertions(+), 1 deletion(-) diff --git a/.env b/.env index c07e5a0..ff1ec25 100644 --- a/.env +++ b/.env @@ -71,6 +71,7 @@ ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER=16 ESPRESSO_ZKEVM_1_FAUCET_PORT=18111 ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS=ws://zkevm-1-permissionless-node:$ESPRESSO_ZKEVM_1_L2_PORT_WS ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_HTTP=http://zkevm-1-permissionless-node:$ESPRESSO_ZKEVM_1_L2_PORT +ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER="UNSET" # zkevm-preconfirmations-node 1 ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT=18127 @@ -98,6 +99,7 @@ ESPRESSO_ZKEVM_2_GENESIS_BLOCK_NUMBER=30 ESPRESSO_ZKEVM_2_FAUCET_PORT=28111 ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS=ws://zkevm-2-permissionless-node:$ESPRESSO_ZKEVM_2_L2_PORT_WS ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_HTTP=http://zkevm-2-permissionless-node:$ESPRESSO_ZKEVM_2_L2_PORT +ESPRESSO_ZKEVM_2_GENESIS_HOTSHOT_BLOCK_NUMBER="UNSET" # zkevm-preconfirmations-node 2 ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT=28127 diff --git a/permissionless-docker-compose.yaml b/permissionless-docker-compose.yaml index 27b3501..4ef52bc 100644 --- a/permissionless-docker-compose.yaml +++ b/permissionless-docker-compose.yaml @@ -158,6 +158,7 @@ services: - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_1_GER_ADDRESS - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS + - ZKEVM_NODE_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_MTCLIENT_URI @@ -210,6 +211,7 @@ services: - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_1_GER_ADDRESS - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS + - ZKEVM_NODE_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_PRECONFIRMATIONSSYNCINTERVAL=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_SYNC_INTERVAL - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK @@ -291,6 +293,7 @@ services: condition: service_healthy profiles: - "zkevm1" + stop_grace_period: 1s # Polygon zkevm-node 2 zkevm-2-aggregator: @@ -447,6 +450,7 @@ services: - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_2_GER_ADDRESS - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS + - ZKEVM_NODE_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_HOTSHOT_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_2_MTCLIENT_URI @@ -499,6 +503,7 @@ services: - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_2_GER_ADDRESS - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS + - ZKEVM_NODE_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_HOTSHOT_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_BLOCK_NUMBER - ZKEVM_NODE_SYNCHRONIZER_PRECONFIRMATIONSSYNCINTERVAL=$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_SYNC_INTERVAL - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK @@ -579,3 +584,4 @@ services: condition: service_healthy profiles: - "zkevm2" + stop_grace_period: 1s diff --git a/polygon-zkevm-adaptor/src/demo_with_sequencer.rs b/polygon-zkevm-adaptor/src/demo_with_sequencer.rs index 47961db..e612222 100644 --- a/polygon-zkevm-adaptor/src/demo_with_sequencer.rs +++ b/polygon-zkevm-adaptor/src/demo_with_sequencer.rs @@ -185,6 +185,10 @@ impl SequencerZkEvmDemo { "ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER", l1.gen_block_number.to_string(), ) + .env( + "ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER", + l1.genesis_hotshot_block_number.to_string(), + ) .arg("up") .args(L2_SERVICES) .arg("-V") diff --git a/polygon-zkevm-adaptor/src/polygon_zkevm.rs b/polygon-zkevm-adaptor/src/polygon_zkevm.rs index 8c38e38..9bc5886 100644 --- a/polygon-zkevm-adaptor/src/polygon_zkevm.rs +++ b/polygon-zkevm-adaptor/src/polygon_zkevm.rs @@ -410,6 +410,10 @@ impl ZkEvmNode { "ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER", l1.gen_block_number.to_string(), ) + .env( + "ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER", + format!("{:?}", l1.genesis_hotshot_block_number), + ) .arg("up") .args(L2_SERVICES) .arg("-V") diff --git a/zkevm-contract-bindings/src/deploy.rs b/zkevm-contract-bindings/src/deploy.rs index bb2230e..8b84370 100644 --- a/zkevm-contract-bindings/src/deploy.rs +++ b/zkevm-contract-bindings/src/deploy.rs @@ -174,6 +174,7 @@ pub struct TestPolygonContracts { pub verifier: VerifierRollupHelperMock, pub matic: ERC20PermitMock, pub gen_block_number: u64, + pub genesis_hotshot_block_number: u64, pub clients: TestClients, pub provider: Provider, } @@ -213,6 +214,13 @@ impl TestPolygonContracts { block_num += 1; }; + let genesis_hotshot_block_number = hotshot + .block_height() + .block(gen_block_number) + .await + .unwrap() + .as_u64(); + Self { hotshot, rollup, @@ -224,6 +232,7 @@ impl TestPolygonContracts { verifier: VerifierRollupHelperMock::new(verifier_address, deployer.clone()), matic: ERC20PermitMock::new(matic_address, deployer.clone()), gen_block_number, + genesis_hotshot_block_number, clients, provider, } @@ -308,6 +317,14 @@ impl TestPolygonContracts { // Remember the genesis block number where the rollup contract was deployed. let gen_block_number = receipt.block_number.unwrap().as_u64(); + // Remember the hotshot block number where the rollup contract was deployed. + let genesis_hotshot_block_number = hotshot + .block_height() + .block(gen_block_number) + .await + .unwrap() + .as_u64(); + let network_id_mainnet = 0; bridge .initialize( @@ -371,6 +388,7 @@ impl TestPolygonContracts { verifier, matic, gen_block_number, + genesis_hotshot_block_number, clients, provider, } diff --git a/zkevm-node b/zkevm-node index b5c4f45..800412f 160000 --- a/zkevm-node +++ b/zkevm-node @@ -1 +1 @@ -Subproject commit b5c4f450ab89e3a89b47d0451c9a07069e0b5be9 +Subproject commit 800412fb59dca847c34a36b0109f94ed6e57f270 From 6f3595e2aec17f5543bb9d54388f3da587285286 Mon Sep 17 00:00:00 2001 From: sveitser Date: Mon, 25 Sep 2023 23:09:46 +0200 Subject: [PATCH 3/4] Update zkevm-node --- zkevm-node | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zkevm-node b/zkevm-node index 800412f..fd2e96e 160000 --- a/zkevm-node +++ b/zkevm-node @@ -1 +1 @@ -Subproject commit 800412fb59dca847c34a36b0109f94ed6e57f270 +Subproject commit fd2e96ebe298efd0a4c7263fd0191a47d319347b From 516e8cdb113cfda89ae92e48124b0123a3bbe534 Mon Sep 17 00:00:00 2001 From: Jeb Bearer Date: Mon, 25 Sep 2023 23:41:40 +0200 Subject: [PATCH 4/4] Update zkevm node --- zkevm-node | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zkevm-node b/zkevm-node index fd2e96e..ba12129 160000 --- a/zkevm-node +++ b/zkevm-node @@ -1 +1 @@ -Subproject commit fd2e96ebe298efd0a4c7263fd0191a47d319347b +Subproject commit ba12129f177fb3ab55ac80131d0493979c2d069c