From 46f9e359ba7e825c49cae0572fba3b1e4494f19e Mon Sep 17 00:00:00 2001 From: josojo Date: Wed, 25 Oct 2023 13:58:58 +0200 Subject: [PATCH] forkId should be updated only for one fork(if necessary) (#85) * forkId should be the same * provide new forkId in parameters --- contracts/ForkingManager.sol | 5 +++-- test/ForkingManager.t.sol | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/contracts/ForkingManager.sol b/contracts/ForkingManager.sol index fd914fe1..3b0993da 100644 --- a/contracts/ForkingManager.sol +++ b/contracts/ForkingManager.sol @@ -54,6 +54,7 @@ contract ForkingManager is IForkingManager, ForkableStructure { address forkingManagerImplementation; address globalExitRootImplementation; address verifier; + uint64 forkID; } // Struct that holds an address pair used to store the new child contracts @@ -156,7 +157,7 @@ contract ForkingManager is IForkingManager, ForkableStructure { .trustedAggregatorTimeout(), chainID: ChainIdManager(chainIdManager) .getNextUsableChainId(), - forkID: (IPolygonZkEVM(zkEVM).chainID() / 2) * 2 + 3 + forkID: IPolygonZkEVM(zkEVM).forkID() }); IForkableZkEVM(newInstances.zkEVM.one).initialize( newInstances.forkingManager.one, @@ -173,7 +174,7 @@ contract ForkingManager is IForkingManager, ForkableStructure { ); initializePackedParameters.chainID = ChainIdManager(chainIdManager) .getNextUsableChainId(); - initializePackedParameters.forkID += 1; + initializePackedParameters.forkID = newImplementations.forkID; IForkableZkEVM(newInstances.zkEVM.two).initialize( newInstances.forkingManager.two, zkEVM, diff --git a/test/ForkingManager.t.sol b/test/ForkingManager.t.sol index 84b983a8..c3ade804 100644 --- a/test/ForkingManager.t.sol +++ b/test/ForkingManager.t.sol @@ -41,6 +41,7 @@ contract ForkingManagerTest is Test { 0x827a9240c96ccb855e4943cc9bc49a50b1e91ba087007441a1ae5f9df8d1c57c ); uint64 public forkID = 3; + uint64 public newForkID = 4; uint64 public chainID = 4; uint32 public networkID = 10; uint64 public pendingStateTimeout = 123; @@ -208,7 +209,8 @@ contract ForkingManagerTest is Test { forkonomicTokenImplementation: newForkonomicTokenImplementation, forkingManagerImplementation: newForkmanagerImplementation, globalExitRootImplementation: newGlobalExitRootImplementation, - verifier: newVerifierImplementation + verifier: newVerifierImplementation, + forkID: newForkID }) ); @@ -235,7 +237,8 @@ contract ForkingManagerTest is Test { forkonomicTokenImplementation: newForkonomicTokenImplementation, forkingManagerImplementation: newForkmanagerImplementation, globalExitRootImplementation: newGlobalExitRootImplementation, - verifier: newVerifierImplementation + verifier: newVerifierImplementation, + forkID: newForkID }) ); } @@ -281,7 +284,8 @@ contract ForkingManagerTest is Test { forkonomicTokenImplementation: newForkonomicTokenImplementation, forkingManagerImplementation: newForkmanagerImplementation, globalExitRootImplementation: newGlobalExitRootImplementation, - verifier: newVerifierImplementation + verifier: newVerifierImplementation, + forkID: newForkID }) ); @@ -349,6 +353,11 @@ contract ForkingManagerTest is Test { ); assertEq(ForkableZkEVM(childZkevm1).chainID(), firstChainId); assertEq(ForkableZkEVM(childZkevm2).chainID(), secondChainId); + assertEq( + ForkableZkEVM(childZkevm1).forkID(), + ForkableZkEVM(zkevm).forkID() + ); + assertEq(ForkableZkEVM(childZkevm2).forkID(), newForkID); } { // Fetch the children from the ForkonomicToken contract