Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ETC 'Spiral' network upgrade #6078

Merged
merged 4 commits into from
Oct 26, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add ECIP-1109: 'Spiral' network upgrade support
Signed-off-by: Diego López León <dieguitoll@gmail.com>
  • Loading branch information
diega committed Oct 26, 2023
commit 8747ae74ba136c79c380ff08f44fd63b81266148
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
### Deprecations

### Additions and Improvements
- Ethereum Classic Spiral network upgrade [#6078](https://github.com/hyperledger/besu/pull/6078)

### Bug fixes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,9 @@ public static Collection<Object[]> parameters() {
new ForkId(Bytes.ofUnsignedInt(0xf42f5539L), 2520000L),
new ForkId(Bytes.ofUnsignedInt(0x66b5c286L), 3985893),
new ForkId(Bytes.ofUnsignedInt(0x92b323e0L), 5520000L),
new ForkId(Bytes.ofUnsignedInt(0x8c9b1797L), 0L),
new ForkId(Bytes.ofUnsignedInt(0x8c9b1797L), 0L))
new ForkId(Bytes.ofUnsignedInt(0x8c9b1797L), 9957000L),
new ForkId(Bytes.ofUnsignedInt(0x3a6b00d7L), 0L),
new ForkId(Bytes.ofUnsignedInt(0x3a6b00d7L), 0L))
},
new Object[] {
NetworkName.CLASSIC,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,15 @@ default boolean isConsensusMigration() {
*/
OptionalLong getMystiqueBlockNumber();

/**
* Block number to activate Spiral on Classic networks.
*
* @return block number of Spiral fork on Classic networks
* @see <a
* href="https://ecips.ethereumclassic.org/ECIPs/ecip-1109">https://ecips.ethereumclassic.org/ECIPs/ecip-1109</a>
*/
OptionalLong getSpiralBlockNumber();

/**
* Gets chain id.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,11 @@ public OptionalLong getMystiqueBlockNumber() {
return getOptionalLong("mystiqueblock");
}

@Override
public OptionalLong getSpiralBlockNumber() {
return getOptionalLong("spiralblock");
}

@Override
public Optional<BigInteger> getChainId() {
return getOptionalBigInteger("chainid");
Expand Down Expand Up @@ -460,6 +465,7 @@ public Map<String, Object> asMap() {
getThanosBlockNumber().ifPresent(l -> builder.put("thanosBlock", l));
getMagnetoBlockNumber().ifPresent(l -> builder.put("magnetoBlock", l));
getMystiqueBlockNumber().ifPresent(l -> builder.put("mystiqueBlock", l));
getSpiralBlockNumber().ifPresent(l -> builder.put("spiralBlock", l));

getContractSizeLimit().ifPresent(l -> builder.put("contractSizeLimit", l));
getEvmStackSize().ifPresent(l -> builder.put("evmstacksize", l));
Expand Down Expand Up @@ -567,7 +573,8 @@ public List<Long> getForkBlockNumbers() {
getPhoenixBlockNumber(),
getThanosBlockNumber(),
getMagnetoBlockNumber(),
getMystiqueBlockNumber());
getMystiqueBlockNumber(),
getSpiralBlockNumber());
// when adding forks add an entry to ${REPO_ROOT}/config/src/test/resources/all_forks.json

return forkBlockNumbers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions, Cloneable
private OptionalLong thanosBlockNumber = OptionalLong.empty();
private OptionalLong magnetoBlockNumber = OptionalLong.empty();
private OptionalLong mystiqueBlockNumber = OptionalLong.empty();
private OptionalLong spiralBlockNumber = OptionalLong.empty();
private Optional<BigInteger> chainId = Optional.empty();
private OptionalInt contractSizeLimit = OptionalInt.empty();
private OptionalInt stackSizeLimit = OptionalInt.empty();
Expand Down Expand Up @@ -316,6 +317,11 @@ public OptionalLong getMystiqueBlockNumber() {
return mystiqueBlockNumber;
}

@Override
public OptionalLong getSpiralBlockNumber() {
return spiralBlockNumber;
}

@Override
public OptionalInt getContractSizeLimit() {
return contractSizeLimit;
Expand Down Expand Up @@ -374,6 +380,7 @@ public Map<String, Object> asMap() {
getThanosBlockNumber().ifPresent(l -> builder.put("thanosBlock", l));
getMagnetoBlockNumber().ifPresent(l -> builder.put("magnetoBlock", l));
getMystiqueBlockNumber().ifPresent(l -> builder.put("mystiqueBlock", l));
getSpiralBlockNumber().ifPresent(l -> builder.put("spiralBlock", l));

getContractSizeLimit().ifPresent(l -> builder.put("contractSizeLimit", l));
getEvmStackSize().ifPresent(l -> builder.put("evmStackSize", l));
Expand Down Expand Up @@ -800,6 +807,17 @@ public StubGenesisConfigOptions mystique(final long blockNumber) {
return this;
}

/**
* Spiral stub genesis config options.
*
* @param blockNumber the block number
* @return the stub genesis config options
*/
public StubGenesisConfigOptions spiral(final long blockNumber) {
spiralBlockNumber = OptionalLong.of(blockNumber);
return this;
}

/**
* Chain id stub genesis config options.
*
Expand Down
1 change: 1 addition & 0 deletions config/src/main/resources/mordor.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"thanosBlock": 2520000,
"magnetoBlock": 3985893,
"mystiqueBlock": 5520000,
"spiralBlock": 9957000,
"ethash": {},
"discovery": {
"dns": "enrtree://AJE62Q4DUX4QMMXEHCSSCSC65TDHZYSMONSD64P3WULVLSF6MRQ3K@all.mordor.blockd.info",
Expand Down
3 changes: 2 additions & 1 deletion config/src/test/resources/all_forks.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"phoenixBlock": 108,
"thanosBlock": 109,
"magnetoBlock": 110,
"mystiqueBlock": 111
"mystiqueBlock": 111,
"spiralBlock": 112
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,8 @@ public void returnsClassicForkBlocks() {
.phoenix(8)
.thanos(9)
.magneto(10)
.mystique(12);
.mystique(11)
.spiral(12);

final AdminNodeInfo methodClassic =
new AdminNodeInfo(
Expand All @@ -403,7 +404,8 @@ public void returnsClassicForkBlocks() {
"phoenixBlock", 8L,
"thanosBlock", 9L,
"magnetoBlock", 10L));
expectedConfig.put("mystiqueBlock", 12L);
expectedConfig.put("mystiqueBlock", 11L);
expectedConfig.put("spiralBlock", 12L);

final JsonRpcResponse response = methodClassic.response(request);
assertThat(response).isInstanceOf(JsonRpcSuccessResponse.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
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.ShanghaiGasCalculator;
import org.hyperledger.besu.evm.gascalculator.SpuriousDragonGasCalculator;
import org.hyperledger.besu.evm.gascalculator.TangerineWhistleGasCalculator;
import org.hyperledger.besu.evm.internal.EvmConfiguration;
Expand Down Expand Up @@ -333,4 +334,46 @@ public static ProtocolSpecBuilder mystiqueDefinition(
1))
.name("Mystique");
}

public static ProtocolSpecBuilder spiralDefinition(
final Optional<BigInteger> chainId,
final OptionalInt configContractSizeLimit,
final OptionalInt configStackSizeLimit,
final boolean enableRevertReason,
final OptionalLong ecip1017EraRounds,
final EvmConfiguration evmConfiguration) {
final int stackSizeLimit = configStackSizeLimit.orElse(MessageFrame.DEFAULT_MAX_STACK_SIZE);
return mystiqueDefinition(
chainId,
configContractSizeLimit,
configStackSizeLimit,
enableRevertReason,
ecip1017EraRounds,
evmConfiguration)
// EIP-3860
.gasCalculator(ShanghaiGasCalculator::new)
// EIP-3855
.evmBuilder(
(gasCalculator, jdCacheConfig) ->
MainnetEVMs.shanghai(
gasCalculator, chainId.orElse(BigInteger.ZERO), evmConfiguration))
// EIP-3651
.transactionProcessorBuilder(
(gasCalculator,
feeMarket,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor) ->
new MainnetTransactionProcessor(
gasCalculator,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
true,
true,
stackSizeLimit,
feeMarket,
CoinbaseFeePriceCalculator.frontier()))
.name("Spiral");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -287,4 +287,14 @@ public ProtocolSpecBuilder mystiqueDefinition() {
ecip1017EraRounds,
evmConfiguration);
}

public ProtocolSpecBuilder spiralDefinition() {
return ClassicProtocolSpecs.spiralDefinition(
chainId,
contractSizeLimit,
evmStackSize,
isRevertReasonEnabled,
ecip1017EraRounds,
evmConfiguration);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ private void validateClassicForkOrdering() {
lastForkBlock = validateForkOrder("Thanos", config.getThanosBlockNumber(), lastForkBlock);
lastForkBlock = validateForkOrder("Magneto", config.getMagnetoBlockNumber(), lastForkBlock);
lastForkBlock = validateForkOrder("Mystique", config.getMystiqueBlockNumber(), lastForkBlock);
lastForkBlock = validateForkOrder("Spiral", config.getSpiralBlockNumber(), lastForkBlock);
assert (lastForkBlock >= 0);
}

Expand Down Expand Up @@ -329,7 +330,8 @@ private Stream<Optional<BuilderMapEntry>> createMilestones(
blockNumberMilestone(config.getPhoenixBlockNumber(), specFactory.phoenixDefinition()),
blockNumberMilestone(config.getThanosBlockNumber(), specFactory.thanosDefinition()),
blockNumberMilestone(config.getMagnetoBlockNumber(), specFactory.magnetoDefinition()),
blockNumberMilestone(config.getMystiqueBlockNumber(), specFactory.mystiqueDefinition()));
blockNumberMilestone(config.getMystiqueBlockNumber(), specFactory.mystiqueDefinition()),
blockNumberMilestone(config.getSpiralBlockNumber(), specFactory.spiralDefinition()));
}

private Optional<BuilderMapEntry> timestampMilestone(
Expand Down
Loading