Skip to content

Commit

Permalink
add sepolia mergeNetSplit block (hyperledger#4158)
Browse files Browse the repository at this point in the history
* add sepolia paris / mergeNetSplit block
* fix test looking for old premerge fork alias, add sepolia terminal conditions test
* rename to mergeNetSplit, ditch the terminalBlockHash and terminalBlockNumber configs for sepolia

Signed-off-by: garyschulte <garyschulte@gmail.com>
  • Loading branch information
garyschulte authored and eum602 committed Nov 3, 2023
1 parent d5b80d6 commit 97f579b
Show file tree
Hide file tree
Showing 13 changed files with 69 additions and 44 deletions.
7 changes: 7 additions & 0 deletions besu/src/test/java/org/hyperledger/besu/ForkIdsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@ public class ForkIdsTest {
@Parameterized.Parameters(name = "{0}")
public static Collection<Object[]> parameters() {
return List.of(
new Object[] {
NetworkName.SEPOLIA,
List.of(
new ForkId(Bytes.ofUnsignedInt(0xfe3366e7L), 1735371L),
new ForkId(Bytes.ofUnsignedInt(0xb96cbd13L), 0L),
new ForkId(Bytes.ofUnsignedInt(0xb96cbd13L), 0L))
},
new Object[] {
NetworkName.ROPSTEN,
List.of(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ default boolean isConsensusMigration() {

OptionalLong getGrayGlacierBlockNumber();

OptionalLong getParisBlockNumber();
OptionalLong getMergeNetSplitBlockNumber();

Optional<Wei> getBaseFeePerGas();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Streams;
import org.apache.tuweni.units.bigints.UInt256;

public class JsonGenesisConfigOptions implements GenesisConfigOptions {
Expand Down Expand Up @@ -281,14 +280,8 @@ public OptionalLong getGrayGlacierBlockNumber() {
}

@Override
public OptionalLong getParisBlockNumber() {
var parisBlock = getOptionalLong("parisblock");
var preMergeAlias = getOptionalLong("premergeforkblock");
if (parisBlock.isPresent() && preMergeAlias.isPresent()) {
throw new RuntimeException(
"Found both paris and preMergeFork blocks. Should have one or the other");
}
return Streams.concat(parisBlock.stream(), preMergeAlias.stream()).findFirst();
public OptionalLong getMergeNetSplitBlockNumber() {
return getOptionalLong("mergenetsplitblock");
}

@Override
Expand Down Expand Up @@ -452,7 +445,7 @@ public Map<String, Object> asMap() {
getLondonBlockNumber().ifPresent(l -> builder.put("londonBlock", l));
getArrowGlacierBlockNumber().ifPresent(l -> builder.put("arrowGlacierBlock", l));
getGrayGlacierBlockNumber().ifPresent(l -> builder.put("grayGlacierBlock", l));
getParisBlockNumber().ifPresent(l -> builder.put("parisBlock", l));
getMergeNetSplitBlockNumber().ifPresent(l -> builder.put("mergeNetSplitBlock", l));
getTerminalBlockNumber().ifPresent(l -> builder.put("terminalBlockNumber", l));
getTerminalBlockHash().ifPresent(h -> builder.put("terminalBlockHash", h.toHexString()));

Expand Down Expand Up @@ -571,8 +564,7 @@ public List<Long> getForks() {
getLondonBlockNumber(),
getArrowGlacierBlockNumber(),
getGrayGlacierBlockNumber(),
getParisBlockNumber(),
getTerminalBlockNumber(),
getMergeNetSplitBlockNumber(),
getEcip1015BlockNumber(),
getDieHardBlockNumber(),
getGothamBlockNumber(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions {
private OptionalLong londonBlockNumber = OptionalLong.empty();
private OptionalLong arrowGlacierBlockNumber = OptionalLong.empty();
private OptionalLong grayGlacierBlockNumber = OptionalLong.empty();
private OptionalLong parisBlockNumber = OptionalLong.empty();
private OptionalLong mergeNetSplitBlockNumber = OptionalLong.empty();
private OptionalLong terminalBlockNumber = OptionalLong.empty();
private Optional<Hash> terminalBlockHash = Optional.empty();
private Optional<UInt256> terminalTotalDifficulty = Optional.empty();
Expand Down Expand Up @@ -212,8 +212,8 @@ public OptionalLong getGrayGlacierBlockNumber() {
}

@Override
public OptionalLong getParisBlockNumber() {
return parisBlockNumber;
public OptionalLong getMergeNetSplitBlockNumber() {
return mergeNetSplitBlockNumber;
}

@Override
Expand Down Expand Up @@ -348,7 +348,7 @@ public Map<String, Object> asMap() {
getLondonBlockNumber().ifPresent(l -> builder.put("londonBlock", l));
getArrowGlacierBlockNumber().ifPresent(l -> builder.put("arrowGlacierBlock", l));
getGrayGlacierBlockNumber().ifPresent(l -> builder.put("grayGlacierBlock", l));
getParisBlockNumber().ifPresent(l -> builder.put("parisBlock", l));
getMergeNetSplitBlockNumber().ifPresent(l -> builder.put("mergeNetSplitBlock", l));
getTerminalBlockNumber().ifPresent(l -> builder.put("terminalBlockNumber", l));
getTerminalBlockHash().ifPresent(h -> builder.put("terminalBlockHash", h));
// classic fork blocks
Expand Down Expand Up @@ -482,8 +482,8 @@ public StubGenesisConfigOptions grayGlacierBlock(final long blockNumber) {
return this;
}

public StubGenesisConfigOptions parisBlock(final long blockNumber) {
parisBlockNumber = OptionalLong.of(blockNumber);
public StubGenesisConfigOptions mergeNetSplitBlock(final long blockNumber) {
mergeNetSplitBlockNumber = OptionalLong.of(blockNumber);
return this;
}

Expand Down
2 changes: 1 addition & 1 deletion config/src/main/resources/kiln.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"parisBlock": 1000,
"mergeNetSplitBlock": 1000,
"terminalTotalDifficulty": 20000000000000,
"discovery": {
"bootnodes": [
Expand Down
1 change: 1 addition & 0 deletions config/src/main/resources/sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"istanbulBlock":0,
"berlinBlock":0,
"londonBlock":0,
"mergeNetSplitBlock": 1735371,
"terminalTotalDifficulty": 17000000000000000,
"ethash":{},
"discovery": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,16 @@ public void assertRopstenTerminalTotalDifficulty() {
.isEqualTo(UInt256.valueOf(new BigInteger("50000000000000000")));
}

@Test
public void assertSepoliaTerminalTotalDifficulty() {
GenesisConfigOptions sepoliaOptions =
GenesisConfigFile.genesisFileFromResources("/sepolia.json").getConfigOptions();

assertThat(sepoliaOptions.getTerminalTotalDifficulty()).isPresent();
assertThat(sepoliaOptions.getTerminalTotalDifficulty().get())
.isEqualTo(UInt256.valueOf(new BigInteger("17000000000000000")));
}

@Test
public void assertGoerliTerminalTotalDifficulty() {
GenesisConfigOptions goerliOptions =
Expand All @@ -230,34 +240,20 @@ public void assertTerminalTotalDifficultyOverride() {
}

@Test
public void shouldFindParisForkAndAlias() {
GenesisConfigFile parisGenesis =
GenesisConfigFile.fromConfig("{\"config\":{\"parisBlock\":10},\"baseFeePerGas\":\"0xa\"}");
assertThat(parisGenesis.getForks()).hasSize(1);
assertThat(parisGenesis.getConfigOptions().getParisBlockNumber()).isPresent();
assertThat(parisGenesis.getConfigOptions().getParisBlockNumber().getAsLong()).isEqualTo(10L);

GenesisConfigFile premergeForkGenesis =
public void shouldFindMergeNetSplitForkAndAlias() {
GenesisConfigFile mergeNetSplitGenesis =
GenesisConfigFile.fromConfig(
"{\"config\":{\"preMergeForkBlock\":11},\"baseFeePerGas\":\"0xa\"}");
assertThat(premergeForkGenesis.getForks()).hasSize(1);
assertThat(premergeForkGenesis.getConfigOptions().getParisBlockNumber()).isPresent();
assertThat(premergeForkGenesis.getConfigOptions().getParisBlockNumber().getAsLong())
"{\"config\":{\"mergeNetsplitBlock\":11},\"baseFeePerGas\":\"0xa\"}");
assertThat(mergeNetSplitGenesis.getForks()).hasSize(1);
assertThat(mergeNetSplitGenesis.getConfigOptions().getMergeNetSplitBlockNumber()).isPresent();
assertThat(mergeNetSplitGenesis.getConfigOptions().getMergeNetSplitBlockNumber().getAsLong())
.isEqualTo(11L);

// assert fail if both paris and alias are present
var dupeOptions =
GenesisConfigFile.fromConfig(
"{\"config\":{\"parisBlock\":10,\"preMergeForkBlock\":11},\"baseFeePerGas\":\"0xa\"}")
.getConfigOptions();
assertThatThrownBy(() -> dupeOptions.getParisBlockNumber())
.isInstanceOf(RuntimeException.class);

// assert empty if neither are present:
// assert empty if not present:
GenesisConfigFile londonGenesis =
GenesisConfigFile.fromConfig("{\"config\":{\"londonBlock\":11},\"baseFeePerGas\":\"0xa\"}");
assertThat(londonGenesis.getForks()).hasSize(1);
assertThat(londonGenesis.getConfigOptions().getParisBlockNumber()).isEmpty();
assertThat(londonGenesis.getConfigOptions().getMergeNetSplitBlockNumber()).isEmpty();
}

@Test
Expand Down
2 changes: 1 addition & 1 deletion config/src/test/resources/all_forks.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"londonBlock": 11,
"arrowGlacierBlock": 12,
"grayGlacierBlock": 13,
"parisBlock": 14,
"mergeNetSplitBlock": 14,
"ecip1015Block": 102,
"dieHardBlock": 103,
"gothamBlock": 104,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ private TreeMap<Long, BuilderMapEntry> buildMilestoneMap(
specFactory.arrowGlacierDefinition(config)),
create(
config.getGrayGlacierBlockNumber(), specFactory.grayGlacierDefinition(config)),
create(config.getParisBlockNumber(), specFactory.parisDefinition(config)),
create(config.getMergeNetSplitBlockNumber(), specFactory.parisDefinition(config)),
// Classic Milestones
create(config.getEcip1015BlockNumber(), specFactory.tangerineWhistleDefinition()),
create(config.getDieHardBlockNumber(), specFactory.dieHardDefinition()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public static class GenesisHash {
"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3";
public static final String ROPSTEN =
"0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d";
public static final String SEPOLIA =
"0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9";
public static final String RINKEBY =
"0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177";
public static final String GOERLI =
Expand All @@ -67,6 +69,8 @@ public static class Forks {
9069000L, 9200000L, 12244000L, 12965000L, 13773000L, 15050000L);
public static final List<Long> ROPSTEN =
Arrays.asList(0L, 0L, 10L, 1700000L, 4230000L, 4939394L, 6485846L, 7117117L);
public static final List<Long> SEPOLIA =
Arrays.asList(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1735371L);
public static final List<Long> RINKEBY =
Arrays.asList(1L, 2L, 3L, 3L, 1035301L, 3660663L, 4321234L, 5435345L);
public static final List<Long> GOERLI = Arrays.asList(0L, 0L, 0L, 0L, 0L, 0L, 0L, 1561651L);
Expand Down Expand Up @@ -99,6 +103,10 @@ public static class ForkIds {
new ForkId(Bytes.fromHexString("0xd6e2149b"), 6485846L),
new ForkId(Bytes.fromHexString("0x4bc66396"), 7117117L),
new ForkId(Bytes.fromHexString("0x6727ef90"), 0L));
public static final List<ForkId> SEPOLIA =
Arrays.asList(
new ForkId(Bytes.fromHexString("0xfe3366e7"), 1735371L),
new ForkId(Bytes.fromHexString("0xb96cbd13"), 0L));
public static final List<ForkId> RINKEBY =
Arrays.asList(
new ForkId(Bytes.fromHexString("0x3b8e0691"), 1L),
Expand All @@ -118,6 +126,7 @@ public static class ForkIds {
public static class Network {
public static final Network MAINNET = network(GenesisHash.MAINNET, Forks.MAINNET);
public static final Network ROPSTEN = network(GenesisHash.ROPSTEN, Forks.ROPSTEN);
public static final Network SEPOLIA = network(GenesisHash.SEPOLIA, Forks.SEPOLIA);
public static final Network RINKEBY = network(GenesisHash.RINKEBY, Forks.RINKEBY);
public static final Network GOERLI = network(GenesisHash.GOERLI, Forks.GOERLI);
public static final Network PRIVATE = network(GenesisHash.PRIVATE, Forks.PRIVATE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,23 @@ public static Collection<Object[]> data() {
Optional.of(ForkIds.ROPSTEN),
empty()
},
// Sepolia test cases
{
"Sepolia // mergenetsplit block",
Network.SEPOLIA,
0L,
ForkIdTestUtil.wantForkId("0xfe3366e7", 1735371L),
Optional.of(ForkIds.SEPOLIA),
empty()
},
{
"Sepolia // Future",
Network.SEPOLIA,
1735371L,
ForkIdTestUtil.wantForkId("0xb96cbd13", 0L),
Optional.of(ForkIds.SEPOLIA),
empty()
},
// Rinkeby test cases
{
"Rinkeby // Unsynced, last Frontier block",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public static ReferenceTestProtocolSchedules create() {
builder.put(
"ArrowGlacier", createSchedule(new StubGenesisConfigOptions().arrowGlacierBlock(0)));
builder.put("GrayGlacier", createSchedule(new StubGenesisConfigOptions().grayGlacierBlock(0)));
builder.put(
"MergeNetSplit", createSchedule(new StubGenesisConfigOptions().mergeNetSplitBlock(0)));
return new ReferenceTestProtocolSchedules(builder.build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ private static String modifyGenesisFile(final String initialGenesis) {
maybeMoveToNumber(params, "londonForkBlock", config, "londonBlock");
maybeMoveToNumber(params, "arrowGlacierForkBlock", config, "arrowGlacierBlock");
maybeMoveToNumber(params, "grayGlacierForkBlock", config, "grayGlacierBlock");
maybeMoveToNumber(params, "mergeNetSplitForkBlock", config, "mergeNetSplitBlock");
maybeMoveToNumber(params, "chainID", config, "chainId", 1);

maybeMove(genesis, "author", chainParamsJson, "coinbase");
Expand Down

0 comments on commit 97f579b

Please sign in to comment.