mirror of
https://github.com/vacp2p/status-linea-besu.git
synced 2026-01-09 13:58:02 -05:00
Reuse HardforkId in EvmSpecVersion (#7448)
* Reuse HardforkId in EvmSpecVersion Move the HardforkId into datatypes and re-use the data in EvmSpecVersion, keeping evm specific details in the evm and merging the rest into datatypes. Signed-off-by: Danno Ferrin <danno@numisight.com> * Update evm/src/main/java/org/hyperledger/besu/evm/EvmSpecVersion.java Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com> Signed-off-by: Danno Ferrin <danno.ferrin@shemnon.com> --------- Signed-off-by: Danno Ferrin <danno@numisight.com> Signed-off-by: Danno Ferrin <danno.ferrin@shemnon.com> Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
package org.hyperledger.besu.consensus.merge;
|
package org.hyperledger.besu.consensus.merge;
|
||||||
|
|
||||||
import org.hyperledger.besu.config.GenesisConfigOptions;
|
import org.hyperledger.besu.config.GenesisConfigOptions;
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId;
|
||||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||||
import org.hyperledger.besu.ethereum.chain.BadBlockManager;
|
import org.hyperledger.besu.ethereum.chain.BadBlockManager;
|
||||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||||
@@ -22,7 +23,6 @@ import org.hyperledger.besu.ethereum.core.Difficulty;
|
|||||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||||
import org.hyperledger.besu.ethereum.core.PermissionTransactionFilter;
|
import org.hyperledger.besu.ethereum.core.PermissionTransactionFilter;
|
||||||
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
||||||
import org.hyperledger.besu.ethereum.mainnet.HardforkId;
|
|
||||||
import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule;
|
import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule;
|
||||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
|
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
|
||||||
|
|||||||
@@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
* Copyright contributors to Hyperledger Besu.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
||||||
|
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations under the License.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
package org.hyperledger.besu.datatypes;
|
||||||
|
|
||||||
|
/** Description and metadata for a hard fork */
|
||||||
|
public interface HardforkId {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the hard fork.
|
||||||
|
*
|
||||||
|
* @return the name for the fork
|
||||||
|
*/
|
||||||
|
String name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Has the fork been finalized? i.e., could the definition change in future versions of Besu?
|
||||||
|
*
|
||||||
|
* @return true if the specification is finalized.
|
||||||
|
*/
|
||||||
|
boolean finalized();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A brief description of the hard fork, suitable for human consumption
|
||||||
|
*
|
||||||
|
* @return the description of the fork.
|
||||||
|
*/
|
||||||
|
String description();
|
||||||
|
|
||||||
|
/** List of all Ethereum Mainnet hardforks, including future and developmental forks. */
|
||||||
|
enum MainnetHardforkId implements HardforkId {
|
||||||
|
/** Frontier fork. */
|
||||||
|
FRONTIER(true, "Frontier"),
|
||||||
|
/** Homestead fork. */
|
||||||
|
HOMESTEAD(true, "Homestead"),
|
||||||
|
/** DAO Fork fork. */
|
||||||
|
DAO_FORK(true, "DAO Fork"),
|
||||||
|
/** Tangerine Whistle fork. */
|
||||||
|
TANGERINE_WHISTLE(true, "Tangerine Whistle"),
|
||||||
|
/** Spurious Dragon fork. */
|
||||||
|
SPURIOUS_DRAGON(true, "Spurious Dragon"),
|
||||||
|
/** Byzantium fork. */
|
||||||
|
BYZANTIUM(true, "Byzantium"),
|
||||||
|
/** Constantinople fork. */
|
||||||
|
CONSTANTINOPLE(true, "Constantinople"),
|
||||||
|
/** Petersburg fork. */
|
||||||
|
PETERSBURG(true, "Petersburg"),
|
||||||
|
/** Istanbul fork. */
|
||||||
|
ISTANBUL(true, "Istanbul"),
|
||||||
|
/** Muir Glacier fork. */
|
||||||
|
MUIR_GLACIER(true, "Muir Glacier"),
|
||||||
|
/** Berlin fork. */
|
||||||
|
BERLIN(true, "Berlin"),
|
||||||
|
/** London fork. */
|
||||||
|
LONDON(true, "London"),
|
||||||
|
/** Arrow Glacier fork. */
|
||||||
|
ARROW_GLACIER(true, "Arrow Glacier"),
|
||||||
|
/** Gray Glacier fork. */
|
||||||
|
GRAY_GLACIER(true, "Gray Glacier"),
|
||||||
|
/** Paris fork. */
|
||||||
|
PARIS(true, "Paris"),
|
||||||
|
/** Shanghai fork. */
|
||||||
|
SHANGHAI(true, "Shanghai"),
|
||||||
|
/** Cancun fork. */
|
||||||
|
CANCUN(true, "Cancun"),
|
||||||
|
/** Cancun + EOF fork. */
|
||||||
|
CANCUN_EOF(false, "Cancun + EOF"),
|
||||||
|
/** Prague fork. */
|
||||||
|
PRAGUE(false, "Prague"),
|
||||||
|
/** Prague + EOF fork. */
|
||||||
|
PRAGUE_EOF(false, "Prague + EOF"),
|
||||||
|
/** Osaka fork. */
|
||||||
|
OSAKA(false, "Osaka"),
|
||||||
|
/** Amsterdam fork. */
|
||||||
|
AMSTERDAM(false, "Amsterdam"),
|
||||||
|
/** Bogota fork. */
|
||||||
|
BOGOTA(false, "Bogota"),
|
||||||
|
/** Polis fork. (from the greek form of an earlier incarnation of the city of Istanbul. */
|
||||||
|
POLIS(false, "Polis"),
|
||||||
|
/** Bangkok fork. */
|
||||||
|
BANGKOK(false, "Bangkok"),
|
||||||
|
/** Development fork, for accepted and unscheduled EIPs. */
|
||||||
|
FUTURE_EIPS(false, "Development, for accepted and unscheduled EIPs"),
|
||||||
|
/** Developmental fork, for experimental EIPs. */
|
||||||
|
EXPERIMENTAL_EIPS(false, "Developmental, for experimental EIPs");
|
||||||
|
|
||||||
|
final boolean finalized;
|
||||||
|
final String description;
|
||||||
|
|
||||||
|
MainnetHardforkId(final boolean finalized, final String description) {
|
||||||
|
this.finalized = finalized;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean finalized() {
|
||||||
|
return finalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String description() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** List of all Ethereum Classic hard forks. */
|
||||||
|
enum ClassicHardforkId implements HardforkId {
|
||||||
|
/** Frontier fork. */
|
||||||
|
FRONTIER(true, "Frontier"),
|
||||||
|
/** Homestead fork. */
|
||||||
|
HOMESTEAD(true, "Homestead"),
|
||||||
|
/** Classic Tangerine Whistle fork. */
|
||||||
|
CLASSIC_TANGERINE_WHISTLE(true, "Classic Tangerine Whistle"),
|
||||||
|
/** Die Hard fork. */
|
||||||
|
DIE_HARD(true, "Die Hard"),
|
||||||
|
/** Gotham fork. */
|
||||||
|
GOTHAM(true, "Gotham"),
|
||||||
|
/** Defuse Difficulty Bomb fork. */
|
||||||
|
DEFUSE_DIFFICULTY_BOMB(true, "Defuse Difficulty Bomb"),
|
||||||
|
/** Atlantis fork. */
|
||||||
|
ATLANTIS(true, "Atlantis"),
|
||||||
|
/** Agharta fork. */
|
||||||
|
AGHARTA(true, "Agharta"),
|
||||||
|
/** Phoenix fork. */
|
||||||
|
PHOENIX(true, "Phoenix"),
|
||||||
|
/** Thanos fork. */
|
||||||
|
THANOS(true, "Thanos"),
|
||||||
|
/** Magneto fork. */
|
||||||
|
MAGNETO(true, "Magneto"),
|
||||||
|
/** Mystique fork. */
|
||||||
|
MYSTIQUE(true, "Mystique"),
|
||||||
|
/** Spiral fork. */
|
||||||
|
SPIRAL(true, "Spiral");
|
||||||
|
|
||||||
|
final boolean finalized;
|
||||||
|
final String description;
|
||||||
|
|
||||||
|
ClassicHardforkId(final boolean finalized, final String description) {
|
||||||
|
this.finalized = finalized;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean finalized() {
|
||||||
|
return finalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String description() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,11 +15,11 @@
|
|||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static java.util.stream.Collectors.toList;
|
import static java.util.stream.Collectors.toList;
|
||||||
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.INVALID;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.INVALID;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.SYNCING;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.SYNCING;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.VALID;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.VALID;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine.WithdrawalsValidatorProvider.getWithdrawalsValidator;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine.WithdrawalsValidatorProvider.getWithdrawalsValidator;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator.ForkchoiceResult;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator.ForkchoiceResult;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.PayloadWrapper;
|
import org.hyperledger.besu.consensus.merge.PayloadWrapper;
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.PayloadWrapper;
|
import org.hyperledger.besu.consensus.merge.PayloadWrapper;
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.PRAGUE;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.PRAGUE;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.PayloadWrapper;
|
import org.hyperledger.besu.consensus.merge.PayloadWrapper;
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
import org.hyperledger.besu.datatypes.VersionedHash;
|
import org.hyperledger.besu.datatypes.VersionedHash;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.PRAGUE;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.PRAGUE;
|
||||||
|
|
||||||
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
import org.hyperledger.besu.consensus.merge.blockcreation.MergeMiningCoordinator;
|
||||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId;
|
||||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType;
|
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType;
|
||||||
import org.hyperledger.besu.ethereum.mainnet.HardforkId;
|
|
||||||
import org.hyperledger.besu.ethereum.mainnet.ValidationResult;
|
import org.hyperledger.besu.ethereum.mainnet.ValidationResult;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
|||||||
|
|
||||||
import static java.util.Collections.emptyList;
|
import static java.util.Collections.emptyList;
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.INVALID;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.INVALID;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.SYNCING;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.SYNCING;
|
||||||
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.VALID;
|
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.VALID;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|||||||
@@ -14,12 +14,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine;
|
||||||
|
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.EXPERIMENTAL_EIPS;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.EXPERIMENTAL_EIPS;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.LONDON;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.LONDON;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.PARIS;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.PARIS;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.PRAGUE;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.PRAGUE;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.SHANGHAI;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.SHANGHAI;
|
||||||
import static org.mockito.Mockito.lenient;
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ package org.hyperledger.besu.ethereum.mainnet;
|
|||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId;
|
||||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||||
import org.hyperledger.besu.ethereum.core.PermissionTransactionFilter;
|
import org.hyperledger.besu.ethereum.core.PermissionTransactionFilter;
|
||||||
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright contributors to Hyperledger Besu.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
||||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations under the License.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
package org.hyperledger.besu.ethereum.mainnet;
|
|
||||||
|
|
||||||
public interface HardforkId {
|
|
||||||
|
|
||||||
String name();
|
|
||||||
|
|
||||||
enum MainnetHardforkId implements HardforkId {
|
|
||||||
FRONTIER,
|
|
||||||
HOMESTEAD,
|
|
||||||
DAO_FORK,
|
|
||||||
TANGERINE_WHISTLE,
|
|
||||||
SPURIOUS_DRAGON,
|
|
||||||
BYZANTIUM,
|
|
||||||
CONSTANTINOPLE,
|
|
||||||
PETERSBURG,
|
|
||||||
ISTANBUL,
|
|
||||||
MUIR_GLACIER,
|
|
||||||
BERLIN,
|
|
||||||
LONDON,
|
|
||||||
ARROW_GLACIER,
|
|
||||||
GRAY_GLACIER,
|
|
||||||
PARIS,
|
|
||||||
SHANGHAI,
|
|
||||||
CANCUN,
|
|
||||||
CANCUN_EOF,
|
|
||||||
PRAGUE,
|
|
||||||
PRAGUE_EOF,
|
|
||||||
FUTURE_EIPS,
|
|
||||||
EXPERIMENTAL_EIPS
|
|
||||||
}
|
|
||||||
|
|
||||||
enum ClassicHardforkId implements HardforkId {
|
|
||||||
FRONTIER,
|
|
||||||
HOMESTEAD,
|
|
||||||
CLASSIC_TANGERINE_WHISTLE,
|
|
||||||
DIE_HARD,
|
|
||||||
GOTHAM,
|
|
||||||
DEFUSE_DIFFICULTY_BOMB,
|
|
||||||
ATLANTIS,
|
|
||||||
AGHARTA,
|
|
||||||
PHOENIX,
|
|
||||||
THANOS,
|
|
||||||
MAGNETO,
|
|
||||||
MYSTIQUE,
|
|
||||||
SPIRAL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.ethereum.mainnet;
|
package org.hyperledger.besu.ethereum.mainnet;
|
||||||
|
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId;
|
||||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||||
import org.hyperledger.besu.ethereum.core.BlockHeaderBuilder;
|
import org.hyperledger.besu.ethereum.core.BlockHeaderBuilder;
|
||||||
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
package org.hyperledger.besu.ethereum.mainnet;
|
package org.hyperledger.besu.ethereum.mainnet;
|
||||||
|
|
||||||
import org.hyperledger.besu.config.GenesisConfigOptions;
|
import org.hyperledger.besu.config.GenesisConfigOptions;
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId;
|
||||||
import org.hyperledger.besu.ethereum.chain.BadBlockManager;
|
import org.hyperledger.besu.ethereum.chain.BadBlockManager;
|
||||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||||
import org.hyperledger.besu.ethereum.core.PrivacyParameters;
|
import org.hyperledger.besu.ethereum.core.PrivacyParameters;
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ package org.hyperledger.besu.ethereum.mainnet;
|
|||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.BERLIN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.BERLIN;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.CANCUN;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.CANCUN;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.LONDON;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.LONDON;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.PRAGUE;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.PRAGUE;
|
||||||
import static org.hyperledger.besu.ethereum.mainnet.HardforkId.MainnetHardforkId.SHANGHAI;
|
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.SHANGHAI;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|||||||
@@ -32,10 +32,10 @@ import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem;
|
|||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
public class ReferenceTestProtocolSchedules {
|
public class ReferenceTestProtocolSchedules {
|
||||||
|
|
||||||
@@ -49,57 +49,67 @@ public class ReferenceTestProtocolSchedules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ReferenceTestProtocolSchedules create(final StubGenesisConfigOptions genesisStub) {
|
public static ReferenceTestProtocolSchedules create(final StubGenesisConfigOptions genesisStub) {
|
||||||
final ImmutableMap.Builder<String, ProtocolSchedule> builder = ImmutableMap.builder();
|
|
||||||
builder.put("Frontier", createSchedule(genesisStub.clone()));
|
|
||||||
builder.put("FrontierToHomesteadAt5", createSchedule(genesisStub.clone().homesteadBlock(5)));
|
|
||||||
builder.put("Homestead", createSchedule(genesisStub.clone().homesteadBlock(0)));
|
|
||||||
builder.put(
|
|
||||||
"HomesteadToEIP150At5",
|
|
||||||
createSchedule(genesisStub.clone().homesteadBlock(0).eip150Block(5)));
|
|
||||||
builder.put(
|
|
||||||
"HomesteadToDaoAt5", createSchedule(genesisStub.clone().homesteadBlock(0).daoForkBlock(5)));
|
|
||||||
builder.put("EIP150", createSchedule(genesisStub.clone().eip150Block(0)));
|
|
||||||
builder.put("EIP158", createSchedule(genesisStub.clone().eip158Block(0)));
|
|
||||||
builder.put(
|
|
||||||
"EIP158ToByzantiumAt5",
|
|
||||||
createSchedule(genesisStub.clone().eip158Block(0).byzantiumBlock(5)));
|
|
||||||
builder.put("Byzantium", createSchedule(genesisStub.clone().byzantiumBlock(0)));
|
|
||||||
builder.put("Constantinople", createSchedule(genesisStub.clone().constantinopleBlock(0)));
|
|
||||||
builder.put("ConstantinopleFix", createSchedule(genesisStub.clone().petersburgBlock(0)));
|
|
||||||
builder.put("Petersburg", createSchedule(genesisStub.clone().petersburgBlock(0)));
|
|
||||||
builder.put("Istanbul", createSchedule(genesisStub.clone().istanbulBlock(0)));
|
|
||||||
builder.put("MuirGlacier", createSchedule(genesisStub.clone().muirGlacierBlock(0)));
|
|
||||||
builder.put("Berlin", createSchedule(genesisStub.clone().berlinBlock(0)));
|
|
||||||
|
|
||||||
// the following schedules activate EIP-1559, but may have non-default
|
// the following schedules activate EIP-1559, but may have non-default
|
||||||
if (genesisStub.getBaseFeePerGas().isEmpty()) {
|
if (genesisStub.getBaseFeePerGas().isEmpty()) {
|
||||||
genesisStub.baseFeePerGas(0x0a);
|
genesisStub.baseFeePerGas(0x0a);
|
||||||
}
|
}
|
||||||
builder.put("London", createSchedule(genesisStub.clone().londonBlock(0)));
|
|
||||||
builder.put("ArrowGlacier", createSchedule(genesisStub.clone().arrowGlacierBlock(0)));
|
|
||||||
builder.put("GrayGlacier", createSchedule(genesisStub.clone().grayGlacierBlock(0)));
|
|
||||||
builder.put("Merge", createSchedule(genesisStub.clone().mergeNetSplitBlock(0)));
|
|
||||||
builder.put("Paris", createSchedule(genesisStub.clone().mergeNetSplitBlock(0)));
|
|
||||||
builder.put("Shanghai", createSchedule(genesisStub.clone().shanghaiTime(0)));
|
|
||||||
builder.put(
|
|
||||||
"ShanghaiToCancunAtTime15k",
|
|
||||||
createSchedule(genesisStub.clone().shanghaiTime(0).cancunTime(15000)));
|
|
||||||
builder.put("Cancun", createSchedule(genesisStub.clone().cancunTime(0)));
|
|
||||||
builder.put("CancunEOF", createSchedule(genesisStub.clone().cancunEOFTime(0)));
|
|
||||||
// also load KZG file for mainnet
|
// also load KZG file for mainnet
|
||||||
KZGPointEvalPrecompiledContract.init();
|
KZGPointEvalPrecompiledContract.init();
|
||||||
builder.put(
|
return new ReferenceTestProtocolSchedules(
|
||||||
"CancunToPragueAtTime15k",
|
Map.ofEntries(
|
||||||
createSchedule(genesisStub.clone().cancunTime(0).pragueTime(15000)));
|
Map.entry("Frontier", createSchedule(genesisStub.clone())),
|
||||||
builder.put("Prague", createSchedule(genesisStub.clone().pragueEOFTime(0)));
|
Map.entry(
|
||||||
builder.put("Osaka", createSchedule(genesisStub.clone().futureEipsTime(0)));
|
"FrontierToHomesteadAt5",
|
||||||
builder.put("Amsterdam", createSchedule(genesisStub.clone().futureEipsTime(0)));
|
createSchedule(genesisStub.clone().homesteadBlock(5))),
|
||||||
builder.put("Bogota", createSchedule(genesisStub.clone().futureEipsTime(0)));
|
Map.entry("Homestead", createSchedule(genesisStub.clone().homesteadBlock(0))),
|
||||||
builder.put("Polis", createSchedule(genesisStub.clone().futureEipsTime(0)));
|
Map.entry(
|
||||||
builder.put("Bangkok", createSchedule(genesisStub.clone().futureEipsTime(0)));
|
"HomesteadToEIP150At5",
|
||||||
builder.put("Future_EIPs", createSchedule(genesisStub.clone().futureEipsTime(0)));
|
createSchedule(genesisStub.clone().homesteadBlock(0).eip150Block(5))),
|
||||||
builder.put("Experimental_EIPs", createSchedule(genesisStub.clone().experimentalEipsTime(0)));
|
Map.entry(
|
||||||
return new ReferenceTestProtocolSchedules(builder.build());
|
"HomesteadToDaoAt5",
|
||||||
|
createSchedule(genesisStub.clone().homesteadBlock(0).daoForkBlock(5))),
|
||||||
|
Map.entry("EIP150", createSchedule(genesisStub.clone().eip150Block(0))),
|
||||||
|
Map.entry("EIP158", createSchedule(genesisStub.clone().eip158Block(0))),
|
||||||
|
Map.entry(
|
||||||
|
"EIP158ToByzantiumAt5",
|
||||||
|
createSchedule(genesisStub.clone().eip158Block(0).byzantiumBlock(5))),
|
||||||
|
Map.entry("Byzantium", createSchedule(genesisStub.clone().byzantiumBlock(0))),
|
||||||
|
Map.entry(
|
||||||
|
"Constantinople", createSchedule(genesisStub.clone().constantinopleBlock(0))),
|
||||||
|
Map.entry(
|
||||||
|
"ConstantinopleFix", createSchedule(genesisStub.clone().petersburgBlock(0))),
|
||||||
|
Map.entry("Petersburg", createSchedule(genesisStub.clone().petersburgBlock(0))),
|
||||||
|
Map.entry("Istanbul", createSchedule(genesisStub.clone().istanbulBlock(0))),
|
||||||
|
Map.entry("MuirGlacier", createSchedule(genesisStub.clone().muirGlacierBlock(0))),
|
||||||
|
Map.entry("Berlin", createSchedule(genesisStub.clone().berlinBlock(0))),
|
||||||
|
Map.entry("London", createSchedule(genesisStub.clone().londonBlock(0))),
|
||||||
|
Map.entry("ArrowGlacier", createSchedule(genesisStub.clone().arrowGlacierBlock(0))),
|
||||||
|
Map.entry("GrayGlacier", createSchedule(genesisStub.clone().grayGlacierBlock(0))),
|
||||||
|
Map.entry("Merge", createSchedule(genesisStub.clone().mergeNetSplitBlock(0))),
|
||||||
|
Map.entry("Paris", createSchedule(genesisStub.clone().mergeNetSplitBlock(0))),
|
||||||
|
Map.entry("Shanghai", createSchedule(genesisStub.clone().shanghaiTime(0))),
|
||||||
|
Map.entry(
|
||||||
|
"ShanghaiToCancunAtTime15k",
|
||||||
|
createSchedule(genesisStub.clone().shanghaiTime(0).cancunTime(15000))),
|
||||||
|
Map.entry("Cancun", createSchedule(genesisStub.clone().cancunTime(0))),
|
||||||
|
Map.entry("CancunEOF", createSchedule(genesisStub.clone().cancunEOFTime(0))),
|
||||||
|
Map.entry(
|
||||||
|
"CancunToPragueAtTime15k",
|
||||||
|
createSchedule(genesisStub.clone().cancunTime(0).pragueTime(15000))),
|
||||||
|
Map.entry("Prague", createSchedule(genesisStub.clone().pragueEOFTime(0))),
|
||||||
|
Map.entry("Osaka", createSchedule(genesisStub.clone().futureEipsTime(0))),
|
||||||
|
Map.entry("Amsterdam", createSchedule(genesisStub.clone().futureEipsTime(0))),
|
||||||
|
Map.entry("Bogota", createSchedule(genesisStub.clone().futureEipsTime(0))),
|
||||||
|
Map.entry("Polis", createSchedule(genesisStub.clone().futureEipsTime(0))),
|
||||||
|
Map.entry("Bangkok", createSchedule(genesisStub.clone().futureEipsTime(0))),
|
||||||
|
Map.entry("Future_EIPs", createSchedule(genesisStub.clone().futureEipsTime(0))),
|
||||||
|
Map.entry(
|
||||||
|
"Experimental_EIPs",
|
||||||
|
createSchedule(genesisStub.clone().experimentalEipsTime(0))))
|
||||||
|
.entrySet()
|
||||||
|
.stream()
|
||||||
|
.map(e -> Map.entry(e.getKey().toLowerCase(Locale.ROOT), e.getValue()))
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Map<String, ProtocolSchedule> schedules;
|
private final Map<String, ProtocolSchedule> schedules;
|
||||||
@@ -109,7 +119,7 @@ public class ReferenceTestProtocolSchedules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ProtocolSchedule getByName(final String name) {
|
public ProtocolSchedule getByName(final String name) {
|
||||||
return schedules.get(name);
|
return schedules.get(name.toLowerCase(Locale.ROOT));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProtocolSpec geSpecByName(final String name) {
|
public ProtocolSpec geSpecByName(final String name) {
|
||||||
|
|||||||
@@ -14,6 +14,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.hyperledger.besu.evm;
|
package org.hyperledger.besu.evm;
|
||||||
|
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId;
|
||||||
|
import org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@@ -23,65 +26,56 @@ import org.slf4j.LoggerFactory;
|
|||||||
/** The enum Evm spec version. */
|
/** The enum Evm spec version. */
|
||||||
public enum EvmSpecVersion {
|
public enum EvmSpecVersion {
|
||||||
/** Frontier evm spec version. */
|
/** Frontier evm spec version. */
|
||||||
FRONTIER(Integer.MAX_VALUE, Integer.MAX_VALUE, 0, true, "Frontier", "Finalized"),
|
FRONTIER(MainnetHardforkId.FRONTIER, Integer.MAX_VALUE, Integer.MAX_VALUE, 0),
|
||||||
/** Homestead evm spec version. */
|
/** Homestead evm spec version. */
|
||||||
HOMESTEAD(Integer.MAX_VALUE, Integer.MAX_VALUE, 0, true, "Homestead", "Finalized"),
|
HOMESTEAD(MainnetHardforkId.HOMESTEAD, Integer.MAX_VALUE, Integer.MAX_VALUE, 0),
|
||||||
/** Tangerine Whistle evm spec version. */
|
/** Tangerine Whistle evm spec version. */
|
||||||
TANGERINE_WHISTLE(
|
TANGERINE_WHISTLE(MainnetHardforkId.TANGERINE_WHISTLE, Integer.MAX_VALUE, Integer.MAX_VALUE, 0),
|
||||||
Integer.MAX_VALUE, Integer.MAX_VALUE, 0, true, "Tangerine Whistle", "Finalized"),
|
|
||||||
/** Spurious Dragon evm spec version. */
|
/** Spurious Dragon evm spec version. */
|
||||||
SPURIOUS_DRAGON(0x6000, Integer.MAX_VALUE, 0, true, "Spuruous Dragon", "Finalized"),
|
SPURIOUS_DRAGON(MainnetHardforkId.SPURIOUS_DRAGON, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** Byzantium evm spec version. */
|
/** Byzantium evm spec version. */
|
||||||
BYZANTIUM(0x6000, Integer.MAX_VALUE, 0, true, "Byzantium", "Finalized"),
|
BYZANTIUM(MainnetHardforkId.BYZANTIUM, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** Constantinople evm spec version. */
|
/** Constantinople evm spec version. */
|
||||||
CONSTANTINOPLE(0x6000, Integer.MAX_VALUE, 0, true, "Constantinople", "Did not reach Mainnet"),
|
CONSTANTINOPLE(MainnetHardforkId.CONSTANTINOPLE, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** Petersburg / ConstantinopleFix evm spec version. */
|
/** Petersburg / ConstantinopleFix evm spec version. */
|
||||||
PETERSBURG(
|
PETERSBURG(MainnetHardforkId.PETERSBURG, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
0x6000,
|
|
||||||
Integer.MAX_VALUE,
|
|
||||||
0,
|
|
||||||
true,
|
|
||||||
"ConstantinopleFix",
|
|
||||||
"Finalized (also called Petersburg)"),
|
|
||||||
/** Istanbul evm spec version. */
|
/** Istanbul evm spec version. */
|
||||||
ISTANBUL(0x6000, Integer.MAX_VALUE, 0, true, "Istanbul", "Finalized"),
|
ISTANBUL(MainnetHardforkId.ISTANBUL, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** Berlin evm spec version */
|
/** Berlin evm spec version */
|
||||||
BERLIN(0x6000, Integer.MAX_VALUE, 0, true, "Berlin", "Finalized"),
|
BERLIN(MainnetHardforkId.BERLIN, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** London evm spec version. */
|
/** London evm spec version. */
|
||||||
LONDON(0x6000, Integer.MAX_VALUE, 0, true, "London", "Finalized"),
|
LONDON(MainnetHardforkId.LONDON, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** Paris evm spec version. */
|
/** Paris evm spec version. */
|
||||||
PARIS(0x6000, Integer.MAX_VALUE, 0, true, "Merge", "Finalized (also called Paris)"),
|
PARIS(MainnetHardforkId.PARIS, 0x6000, Integer.MAX_VALUE, 0),
|
||||||
/** Shanghai evm spec version. */
|
/** Shanghai evm spec version. */
|
||||||
SHANGHAI(0x6000, 0xc000, 0, true, "Shanghai", "Finalized"),
|
SHANGHAI(MainnetHardforkId.SHANGHAI, 0x6000, 0xc000, 0),
|
||||||
/** Cancun evm spec version. */
|
/** Cancun evm spec version. */
|
||||||
CANCUN(0x6000, 0xc000, 0, true, "Cancun", "Finalized"),
|
CANCUN(MainnetHardforkId.CANCUN, 0x6000, 0xc000, 0),
|
||||||
/** Cancun evm spec version. */
|
/** Cancun evm spec version. */
|
||||||
CANCUN_EOF(0x6000, 0xc000, 1, false, "CancunEOF", "For Testing"),
|
CANCUN_EOF(MainnetHardforkId.CANCUN_EOF, 0x6000, 0xc000, 1),
|
||||||
/** Prague evm spec version. */
|
/** Prague evm spec version. */
|
||||||
PRAGUE(0x6000, 0xc000, 0, false, "Prague", "In Development"),
|
PRAGUE(MainnetHardforkId.PRAGUE, 0x6000, 0xc000, 0),
|
||||||
/** PragueEOF evm spec version. */
|
/** PragueEOF evm spec version. */
|
||||||
PRAGUE_EOF(0x6000, 0xc000, 1, false, "PragueEOF", "Prague + EOF. In Development"),
|
PRAGUE_EOF(MainnetHardforkId.PRAGUE_EOF, 0x6000, 0xc000, 1),
|
||||||
/** Osaka evm spec version. */
|
/** Osaka evm spec version. */
|
||||||
OSAKA(0x6000, 0xc000, 1, false, "Osaka", "Placeholder"),
|
OSAKA(MainnetHardforkId.OSAKA, 0x6000, 0xc000, 1),
|
||||||
/** Amsterdam evm spec version. */
|
/** Amsterdam evm spec version. */
|
||||||
AMSTERDAM(0x6000, 0xc000, 1, false, "Amsterdam", "Placeholder"),
|
AMSTERDAM(MainnetHardforkId.AMSTERDAM, 0x6000, 0xc000, 1),
|
||||||
/** Bogota evm spec version. */
|
/** Bogota evm spec version. */
|
||||||
BOGOTA(0x6000, 0xc000, 1, false, "Bogota", "Placeholder"),
|
BOGOTA(MainnetHardforkId.BOGOTA, 0x6000, 0xc000, 1),
|
||||||
/** Polis evm spec version. */
|
/** Polis evm spec version. */
|
||||||
POLIS(0x6000, 0xc000, 1, false, "Polis", "Placeholder"),
|
POLIS(MainnetHardforkId.POLIS, 0x6000, 0xc000, 1),
|
||||||
/** Bogota evm spec version. */
|
/** Bangkok evm spec version. */
|
||||||
BANGKOK(0x6000, 0xc000, 1, false, "Bangkok", "Placeholder"),
|
BANGKOK(MainnetHardforkId.BANGKOK, 0x6000, 0xc000, 1),
|
||||||
/** Development fork for unscheduled EIPs */
|
/** Development fork for unscheduled EIPs */
|
||||||
FUTURE_EIPS(
|
FUTURE_EIPS(MainnetHardforkId.FUTURE_EIPS, 0x6000, 0xc000, 1),
|
||||||
0x6000, 0xc000, 1, false, "Future_EIPs", "Development, for accepted and unscheduled EIPs"),
|
/** Development fork for EIPs that are not yet accepted to Mainnet */
|
||||||
/** Development fork for EIPs not accepted to Mainnet */
|
EXPERIMENTAL_EIPS(MainnetHardforkId.EXPERIMENTAL_EIPS, 0x6000, 0xc000, 1);
|
||||||
EXPERIMENTAL_EIPS(
|
|
||||||
0x6000, 0xc000, 1, false, "Experimental_EIPs", "Development, for experimental EIPs");
|
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(EvmSpecVersion.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(EvmSpecVersion.class);
|
||||||
|
|
||||||
/** The Spec finalized. */
|
/** What hardfork did this VM version first show up in? */
|
||||||
final boolean specFinalized;
|
final HardforkId initialHardfork;
|
||||||
|
|
||||||
/** The Max eof version. */
|
/** The Max eof version. */
|
||||||
final int maxEofVersion;
|
final int maxEofVersion;
|
||||||
@@ -92,28 +86,18 @@ public enum EvmSpecVersion {
|
|||||||
/** Maximum size of initcode */
|
/** Maximum size of initcode */
|
||||||
final int maxInitcodeSize;
|
final int maxInitcodeSize;
|
||||||
|
|
||||||
/** Public name matching execution-spec-tests name */
|
|
||||||
final String name;
|
|
||||||
|
|
||||||
/** A brief description of the state of the fork */
|
|
||||||
final String description;
|
|
||||||
|
|
||||||
/** The Version warned. */
|
/** The Version warned. */
|
||||||
boolean versionWarned = false;
|
boolean versionWarned = false;
|
||||||
|
|
||||||
EvmSpecVersion(
|
EvmSpecVersion(
|
||||||
|
final HardforkId initialHarfork,
|
||||||
final int maxCodeSize,
|
final int maxCodeSize,
|
||||||
final int maxInitcodeSize,
|
final int maxInitcodeSize,
|
||||||
final int maxEofVersion,
|
final int maxEofVersion) {
|
||||||
final boolean specFinalized,
|
this.initialHardfork = initialHarfork;
|
||||||
final String name,
|
|
||||||
final String description) {
|
|
||||||
this.maxEofVersion = maxEofVersion;
|
this.maxEofVersion = maxEofVersion;
|
||||||
this.maxCodeSize = maxCodeSize;
|
this.maxCodeSize = maxCodeSize;
|
||||||
this.maxInitcodeSize = maxInitcodeSize;
|
this.maxInitcodeSize = maxInitcodeSize;
|
||||||
this.specFinalized = specFinalized;
|
|
||||||
this.name = name;
|
|
||||||
this.description = description;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,7 +109,7 @@ public enum EvmSpecVersion {
|
|||||||
public static EvmSpecVersion defaultVersion() {
|
public static EvmSpecVersion defaultVersion() {
|
||||||
EvmSpecVersion answer = null;
|
EvmSpecVersion answer = null;
|
||||||
for (EvmSpecVersion version : EvmSpecVersion.values()) {
|
for (EvmSpecVersion version : EvmSpecVersion.values()) {
|
||||||
if (version.specFinalized) {
|
if (version.initialHardfork.finalized()) {
|
||||||
answer = version;
|
answer = version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,7 +149,7 @@ public enum EvmSpecVersion {
|
|||||||
* @return name of the fork
|
* @return name of the fork
|
||||||
*/
|
*/
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return initialHardfork.name();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -174,7 +158,7 @@ public enum EvmSpecVersion {
|
|||||||
* @return description
|
* @return description
|
||||||
*/
|
*/
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return description;
|
return initialHardfork.description();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Maybe warn version. */
|
/** Maybe warn version. */
|
||||||
@@ -184,7 +168,7 @@ public enum EvmSpecVersion {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!specFinalized) {
|
if (!initialHardfork.finalized()) {
|
||||||
LOGGER.error(
|
LOGGER.error(
|
||||||
"****** Not for Production Network Use ******\nExecuting code from EVM Spec Version {}, which has not been finalized.\n****** Not for Production Network Use ******",
|
"****** Not for Production Network Use ******\nExecuting code from EVM Spec Version {}, which has not been finalized.\n****** Not for Production Network Use ******",
|
||||||
this.name());
|
this.name());
|
||||||
@@ -223,7 +207,7 @@ public enum EvmSpecVersion {
|
|||||||
*/
|
*/
|
||||||
public static EvmSpecVersion mostRecent() {
|
public static EvmSpecVersion mostRecent() {
|
||||||
return Stream.of(EvmSpecVersion.values())
|
return Stream.of(EvmSpecVersion.values())
|
||||||
.filter(v -> v.specFinalized)
|
.filter(v -> v.initialHardfork.finalized())
|
||||||
.max(Comparator.naturalOrder())
|
.max(Comparator.naturalOrder())
|
||||||
.orElseThrow();
|
.orElseThrow();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user