diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/VersionedDatabaseFactory.java b/storage/src/main/java/tech/pegasys/teku/storage/server/VersionedDatabaseFactory.java index 16cac554b7a..4505e1c3cd5 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/VersionedDatabaseFactory.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/VersionedDatabaseFactory.java @@ -166,7 +166,10 @@ public StateStorageMode getStateStorageMode() { private Database createV4Database() { try { DatabaseNetwork.init( - getNetworkFile(), spec.getGenesisSpecConfig().getGenesisForkVersion(), eth1Address); + getNetworkFile(), + spec.getGenesisSpecConfig().getGenesisForkVersion(), + eth1Address, + spec.getGenesisSpecConfig().getDepositChainId()); return RocksDbDatabaseFactory.createV4( metricsSystem, KvStoreConfiguration.v4Settings(dbDirectory.toPath()), @@ -190,7 +193,10 @@ private Database createV5Database() { final V5DatabaseMetadata metaData = V5DatabaseMetadata.init(getMetadataFile(), V5DatabaseMetadata.v5Defaults()); DatabaseNetwork.init( - getNetworkFile(), spec.getGenesisSpecConfig().getGenesisForkVersion(), eth1Address); + getNetworkFile(), + spec.getGenesisSpecConfig().getGenesisForkVersion(), + eth1Address, + spec.getGenesisSpecConfig().getDepositChainId()); return RocksDbDatabaseFactory.createV4( metricsSystem, metaData.getHotDbConfiguration().withDatabaseDir(dbDirectory.toPath()), @@ -233,7 +239,10 @@ private Database createLevelDbV1Database() { final V5DatabaseMetadata metaData = V5DatabaseMetadata.init(getMetadataFile(), V5DatabaseMetadata.v5Defaults()); DatabaseNetwork.init( - getNetworkFile(), spec.getGenesisSpecConfig().getGenesisForkVersion(), eth1Address); + getNetworkFile(), + spec.getGenesisSpecConfig().getGenesisForkVersion(), + eth1Address, + spec.getGenesisSpecConfig().getDepositChainId()); return LevelDbDatabaseFactory.createLevelDb( metricsSystem, metaData.getHotDbConfiguration().withDatabaseDir(dbDirectory.toPath()), @@ -284,7 +293,10 @@ private KvStoreConfiguration initV6Configuration() throws IOException { V6DatabaseMetadata.init(getMetadataFile(), V6DatabaseMetadata.singleDBDefault()); DatabaseNetwork.init( - getNetworkFile(), spec.getGenesisSpecConfig().getGenesisForkVersion(), eth1Address); + getNetworkFile(), + spec.getGenesisSpecConfig().getGenesisForkVersion(), + eth1Address, + spec.getGenesisSpecConfig().getDepositChainId()); return metaData.getSingleDbConfiguration().getConfiguration(); } diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java b/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java index 65be9163ce0..ea35a55855e 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java @@ -61,7 +61,10 @@ public class DatabaseNetwork { } public static DatabaseNetwork init( - final File source, final Bytes4 forkVersion, final Eth1Address depositContract) + final File source, + final Bytes4 forkVersion, + final Eth1Address depositContract, + final Long depositChainId) throws IOException { final String forkVersionString = forkVersion.toHexString().toLowerCase(Locale.ROOT); final String depositContractString = depositContract.toHexString().toLowerCase(Locale.ROOT); @@ -84,7 +87,7 @@ public static DatabaseNetwork init( return databaseNetwork; } else { DatabaseNetwork databaseNetwork = - new DatabaseNetwork(forkVersionString, depositContractString); + new DatabaseNetwork(forkVersionString, depositContractString, depositChainId); objectMapper.writerFor(DatabaseNetwork.class).writeValue(source, databaseNetwork); return databaseNetwork; } diff --git a/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java b/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java index 19a622f0933..e52f529df75 100644 --- a/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java +++ b/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java @@ -52,11 +52,13 @@ public void shouldCreateNetworkFile(@TempDir final File tempDir) throws IOExcept assertThat(networkFile).doesNotExist(); final Bytes4 fork = dataStructureUtil.randomFork().getCurrentVersion(); final Eth1Address eth1Address = dataStructureUtil.randomEth1Address(); - assertThat(DatabaseNetwork.init(networkFile, fork, eth1Address)) + final Long depositChainId = dataStructureUtil.randomLong(); + assertThat(DatabaseNetwork.init(networkFile, fork, eth1Address, depositChainId)) .isEqualTo( new DatabaseNetwork( fork.toHexString().toLowerCase(Locale.ROOT), - eth1Address.toHexString().toLowerCase(Locale.ROOT))); + eth1Address.toHexString().toLowerCase(Locale.ROOT), + depositChainId)); assertThat(networkFile).exists(); } @@ -66,10 +68,14 @@ public void shouldThrowIfForkDiffers(@TempDir final File tempDir) throws IOExcep assertThat(networkFile).doesNotExist(); final Bytes4 fork = dataStructureUtil.randomFork().getCurrentVersion(); final Eth1Address eth1Address = dataStructureUtil.randomEth1Address(); + final Long depositChainId = dataStructureUtil.randomLong(); DatabaseNetwork.init( - networkFile, dataStructureUtil.randomFork().getCurrentVersion(), eth1Address); + networkFile, + dataStructureUtil.randomFork().getCurrentVersion(), + eth1Address, + depositChainId); - assertThatThrownBy(() -> DatabaseNetwork.init(networkFile, fork, eth1Address)) + assertThatThrownBy(() -> DatabaseNetwork.init(networkFile, fork, eth1Address, depositChainId)) .isInstanceOf(DatabaseStorageException.class) .hasMessageStartingWith("Supplied fork version"); } @@ -80,9 +86,11 @@ public void shouldThrowIfDepositContractDiffers(@TempDir final File tempDir) thr assertThat(networkFile).doesNotExist(); final Bytes4 fork = dataStructureUtil.randomFork().getCurrentVersion(); final Eth1Address eth1Address = dataStructureUtil.randomEth1Address(); - DatabaseNetwork.init(networkFile, fork, dataStructureUtil.randomEth1Address()); + final Long depositChainId = dataStructureUtil.randomLong(); - assertThatThrownBy(() -> DatabaseNetwork.init(networkFile, fork, eth1Address)) + DatabaseNetwork.init(networkFile, fork, dataStructureUtil.randomEth1Address(), depositChainId); + + assertThatThrownBy(() -> DatabaseNetwork.init(networkFile, fork, eth1Address, depositChainId)) .isInstanceOf(DatabaseStorageException.class) .hasMessageStartingWith("Supplied deposit contract"); } @@ -93,9 +101,11 @@ public void shouldNotThrowIfForkAndContractMatch(@TempDir final File tempDir) th assertThat(networkFile).doesNotExist(); final Bytes4 fork = dataStructureUtil.randomFork().getCurrentVersion(); final Eth1Address eth1Address = dataStructureUtil.randomEth1Address(); - DatabaseNetwork.init(networkFile, fork, eth1Address); + final Long depositChainId = dataStructureUtil.randomLong(); + + DatabaseNetwork.init(networkFile, fork, eth1Address, depositChainId); - assertDoesNotThrow(() -> DatabaseNetwork.init(networkFile, fork, eth1Address)); + assertDoesNotThrow(() -> DatabaseNetwork.init(networkFile, fork, eth1Address, depositChainId)); } @Test