Skip to content

Commit 0cc1c27

Browse files
author
Aurélien Richez
authored
[ETCM-856] make stSLoadTest pass (#995)
* [ETCM-856] fix fork block number handling in tests * [refactor] create dedicated case class for block numbers * [refactor] put currentConfig inside TestService * [refactor] put all the state in the same place and create a builder for consensus and ledger
1 parent 6b3dc24 commit 0cc1c27

File tree

46 files changed

+578
-419
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+578
-419
lines changed

src/it/scala/io/iohk/ethereum/txExecTest/ECIP1017Test.scala

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package io.iohk.ethereum.txExecTest
22

33
import java.util.concurrent.Executors
4-
54
import io.iohk.ethereum.domain.{Address, BlockchainImpl, Receipt, UInt256}
65
import io.iohk.ethereum.ledger._
76
import io.iohk.ethereum.txExecTest.util.FixtureProvider
8-
import io.iohk.ethereum.utils.{BlockchainConfig, MonetaryPolicyConfig}
7+
import io.iohk.ethereum.utils.{BlockchainConfig, ForkBlockNumbers, MonetaryPolicyConfig}
98
import org.scalatest.flatspec.AnyFlatSpec
109
import org.scalatest.matchers.should.Matchers
1110

@@ -22,16 +21,26 @@ class ECIP1017Test extends AnyFlatSpec with Matchers {
2221
maxCodeSize = None,
2322
chainId = 0x3d.toByte,
2423
networkId = 1,
25-
frontierBlockNumber = 0,
26-
homesteadBlockNumber = 1150000,
27-
eip106BlockNumber = Long.MaxValue,
28-
eip150BlockNumber = 2500000,
29-
eip160BlockNumber = 3000000,
30-
eip155BlockNumber = 3000000,
31-
eip161BlockNumber = Long.MaxValue,
32-
byzantiumBlockNumber = Long.MaxValue,
33-
constantinopleBlockNumber = Long.MaxValue,
34-
istanbulBlockNumber = Long.MaxValue,
24+
forkBlockNumbers = ForkBlockNumbers(
25+
frontierBlockNumber = 0,
26+
homesteadBlockNumber = 1150000,
27+
eip106BlockNumber = Long.MaxValue,
28+
eip150BlockNumber = 2500000,
29+
eip160BlockNumber = 3000000,
30+
eip155BlockNumber = 3000000,
31+
eip161BlockNumber = Long.MaxValue,
32+
byzantiumBlockNumber = Long.MaxValue,
33+
constantinopleBlockNumber = Long.MaxValue,
34+
istanbulBlockNumber = Long.MaxValue,
35+
atlantisBlockNumber = Long.MaxValue,
36+
aghartaBlockNumber = Long.MaxValue,
37+
phoenixBlockNumber = Long.MaxValue,
38+
petersburgBlockNumber = Long.MaxValue,
39+
ecip1098BlockNumber = Long.MaxValue,
40+
ecip1097BlockNumber = Long.MaxValue,
41+
ecip1099BlockNumber = Long.MaxValue,
42+
ecip1049BlockNumber = None
43+
),
3544
customGenesisFileOpt = None,
3645
customGenesisJsonOpt = None,
3746
daoForkConfig = None,
@@ -42,15 +51,7 @@ class ECIP1017Test extends AnyFlatSpec with Matchers {
4251
accountStartNonce = UInt256.Zero,
4352
ethCompatibleStorage = true,
4453
gasTieBreaker = false,
45-
atlantisBlockNumber = Long.MaxValue,
46-
aghartaBlockNumber = Long.MaxValue,
47-
phoenixBlockNumber = Long.MaxValue,
48-
petersburgBlockNumber = Long.MaxValue,
49-
ecip1098BlockNumber = Long.MaxValue,
50-
treasuryAddress = Address(0),
51-
ecip1097BlockNumber = Long.MaxValue,
52-
ecip1099BlockNumber = Long.MaxValue,
53-
ecip1049BlockNumber = None
54+
treasuryAddress = Address(0)
5455
)
5556
val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(4))
5657

src/it/scala/io/iohk/ethereum/txExecTest/ForksTest.scala

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package io.iohk.ethereum.txExecTest
22

33
import java.util.concurrent.Executors
4-
54
import io.iohk.ethereum.domain.{Address, BlockchainImpl, Receipt, UInt256}
65
import io.iohk.ethereum.ledger.{BlockExecution, BlockQueue, BlockValidation}
76
import io.iohk.ethereum.txExecTest.util.FixtureProvider
8-
import io.iohk.ethereum.utils.{BlockchainConfig, MonetaryPolicyConfig}
7+
import io.iohk.ethereum.utils.{BlockchainConfig, ForkBlockNumbers, MonetaryPolicyConfig}
98
import org.scalatest.flatspec.AnyFlatSpec
109
import org.scalatest.matchers.should.Matchers
1110

@@ -16,40 +15,42 @@ class ForksTest extends AnyFlatSpec with Matchers {
1615

1716
trait TestSetup extends ScenarioSetup {
1817
override lazy val blockchainConfig = BlockchainConfig(
19-
frontierBlockNumber = 0,
20-
homesteadBlockNumber = 3,
21-
eip150BlockNumber = 5,
22-
eip160BlockNumber = 7,
23-
eip155BlockNumber = 0,
24-
eip106BlockNumber = Long.MaxValue,
18+
forkBlockNumbers = ForkBlockNumbers(
19+
frontierBlockNumber = 0,
20+
homesteadBlockNumber = 3,
21+
eip150BlockNumber = 5,
22+
eip160BlockNumber = 7,
23+
eip155BlockNumber = 0,
24+
eip106BlockNumber = Long.MaxValue,
25+
eip161BlockNumber = Long.MaxValue,
26+
byzantiumBlockNumber = Long.MaxValue,
27+
constantinopleBlockNumber = Long.MaxValue,
28+
istanbulBlockNumber = Long.MaxValue,
29+
atlantisBlockNumber = Long.MaxValue,
30+
aghartaBlockNumber = Long.MaxValue,
31+
phoenixBlockNumber = Long.MaxValue,
32+
petersburgBlockNumber = Long.MaxValue,
33+
ecip1098BlockNumber = Long.MaxValue,
34+
ecip1097BlockNumber = Long.MaxValue,
35+
ecip1099BlockNumber = Long.MaxValue,
36+
ecip1049BlockNumber = None
37+
),
2538
chainId = 0x3d.toByte,
2639
monetaryPolicyConfig = MonetaryPolicyConfig(5000000, 0.2, 5000000000000000000L, 3000000000000000000L),
2740
// unused
2841
bootstrapNodes = Set(),
2942
networkId = 1,
3043
maxCodeSize = None,
31-
eip161BlockNumber = Long.MaxValue,
3244
customGenesisFileOpt = None,
3345
customGenesisJsonOpt = None,
3446
difficultyBombPauseBlockNumber = Long.MaxValue,
3547
difficultyBombContinueBlockNumber = Long.MaxValue,
3648
difficultyBombRemovalBlockNumber = Long.MaxValue,
37-
byzantiumBlockNumber = Long.MaxValue,
38-
constantinopleBlockNumber = Long.MaxValue,
39-
istanbulBlockNumber = Long.MaxValue,
4049
accountStartNonce = UInt256.Zero,
4150
daoForkConfig = None,
4251
gasTieBreaker = false,
4352
ethCompatibleStorage = true,
44-
atlantisBlockNumber = Long.MaxValue,
45-
aghartaBlockNumber = Long.MaxValue,
46-
phoenixBlockNumber = Long.MaxValue,
47-
petersburgBlockNumber = Long.MaxValue,
48-
ecip1098BlockNumber = Long.MaxValue,
4953
treasuryAddress = Address(0),
50-
ecip1097BlockNumber = Long.MaxValue,
51-
ecip1099BlockNumber = Long.MaxValue,
52-
ecip1049BlockNumber = None
5354
)
5455

5556
val noErrors = a[Right[_, Seq[Receipt]]]

src/main/resources/conf/testmode.conf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ mantis {
4848
}
4949
}
5050

51-
network.rpc {
52-
apis = "eth,web3,net,personal,mantis,test,iele,debug,qa,checkpointing"
51+
network {
52+
rpc.apis = "eth,web3,net,personal,mantis,test,iele,debug,qa,checkpointing"
53+
automatic-port-forwarding = false
5354
}
55+
5456
}

src/main/scala/io/iohk/ethereum/consensus/blocks/BlockGeneratorSkeleton.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ abstract class BlockGeneratorSkeleton(
4545
x: Ommers
4646
): BlockHeader = {
4747
val extraFields =
48-
if (blockNumber >= blockchainConfig.ecip1097BlockNumber)
48+
if (blockNumber >= blockchainConfig.forkBlockNumbers.ecip1097BlockNumber)
4949
HefPostEcip1097(None)
5050
else
5151
HefEmpty

src/main/scala/io/iohk/ethereum/consensus/pow/PoWConsensus.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class PoWConsensus private (
9595
node.ethMiningService,
9696
blockCreator,
9797
blockchain,
98-
blockchainConfig.ecip1049BlockNumber
98+
blockchainConfig.forkBlockNumbers.ecip1049BlockNumber
9999
),
100100
"PoWMinerCoordinator",
101101
DispatcherSelector.fromConfig(BlockForgerDispatcherId)

src/main/scala/io/iohk/ethereum/consensus/pow/difficulty/EthashDifficultyCalculator.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import io.iohk.ethereum.utils.BlockchainConfig
66

77
class EthashDifficultyCalculator(blockchainConfig: BlockchainConfig) extends DifficultyCalculator {
88
import blockchainConfig._
9+
import blockchainConfig.forkBlockNumbers._
910
import DifficultyCalculator._
1011

1112
private val ExpDifficultyPeriod: Int = 100000
@@ -19,7 +20,7 @@ class EthashDifficultyCalculator(blockchainConfig: BlockchainConfig) extends Dif
1920
val c: BigInt =
2021
if (blockNumber < homesteadBlockNumber) {
2122
if (blockTimestamp < parentHeader.unixTimestamp + 13) 1 else -1
22-
} else if (blockNumber >= byzantiumBlockNumber || blockNumber >= blockchainConfig.atlantisBlockNumber) {
23+
} else if (blockNumber >= byzantiumBlockNumber || blockNumber >= atlantisBlockNumber) {
2324
val parentUncleFactor = if (parentHeader.ommersHash == BlockHeader.EmptyOmmers) 1 else 2
2425
math.max(parentUncleFactor - (timestampDiff / 9), FrontierTimestampDiffLimit)
2526
} else {

src/main/scala/io/iohk/ethereum/consensus/pow/miners/EthashDAGManager.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class EthashDAGManager(blockCreator: PoWBlockCreator) extends Logger {
1818
(currentEpoch, currentEpochDag, currentEpochDagSize) match {
1919
case (Some(`epoch`), Some(dag), Some(dagSize)) => (dag, dagSize)
2020
case _ =>
21-
val seed = EthashUtils.seed(blockNumber, blockCreator.blockchainConfig.ecip1099BlockNumber.toLong)
21+
val seed =
22+
EthashUtils.seed(blockNumber, blockCreator.blockchainConfig.forkBlockNumbers.ecip1099BlockNumber.toLong)
2223
val dagSize = EthashUtils.dagSize(epoch)
2324
val dagNumHashes = (dagSize / EthashUtils.HASH_BYTES).toInt
2425
val dag =

src/main/scala/io/iohk/ethereum/consensus/pow/miners/EthashMiner.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class EthashMiner(
5353

5454
private def doMining(blockNumber: Long, block: Block): (Long, MiningResult) = {
5555
val epoch =
56-
EthashUtils.epoch(blockNumber, blockCreator.blockchainConfig.ecip1099BlockNumber.toLong)
56+
EthashUtils.epoch(blockNumber, blockCreator.blockchainConfig.forkBlockNumbers.ecip1099BlockNumber.toLong)
5757
val (dag, dagSize) = dagManager.calculateDagSize(blockNumber, epoch)
5858
val headerHash = crypto.kec256(BlockHeader.getEncodedWithoutNonce(block.header))
5959
val startTime = System.nanoTime()

src/main/scala/io/iohk/ethereum/consensus/pow/validators/EthashBlockHeaderValidator.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ class EthashBlockHeaderValidator(blockchainConfig: BlockchainConfig) {
4141
}
4242
}
4343

44-
val epoch = EthashUtils.epoch(blockHeader.number.toLong, blockchainConfig.ecip1099BlockNumber.toLong)
45-
val seed = EthashUtils.seed(blockHeader.number.toLong, blockchainConfig.ecip1099BlockNumber.toLong)
44+
val epoch =
45+
EthashUtils.epoch(blockHeader.number.toLong, blockchainConfig.forkBlockNumbers.ecip1099BlockNumber.toLong)
46+
val seed = EthashUtils.seed(blockHeader.number.toLong, blockchainConfig.forkBlockNumbers.ecip1099BlockNumber.toLong)
4647
val powCacheData = getPowCacheData(epoch, seed)
4748

4849
val proofOfWork = hashimotoLight(

src/main/scala/io/iohk/ethereum/consensus/pow/validators/PoWBlockHeaderValidator.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class PoWBlockHeaderValidator(blockchainConfig: BlockchainConfig)
2626
else ethashBlockHeaderValidator.validateHeader(blockHeader)
2727

2828
private def isKeccak(currentBlockNumber: BigInt): Boolean =
29-
blockchainConfig.ecip1049BlockNumber match {
29+
blockchainConfig.forkBlockNumbers.ecip1049BlockNumber match {
3030
case Some(keccakBlock) => currentBlockNumber >= keccakBlock
3131
case None => false
3232
}

src/main/scala/io/iohk/ethereum/consensus/validators/BlockHeaderValidatorSkeleton.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ abstract class BlockHeaderValidatorSkeleton(blockchainConfig: BlockchainConfig)
192192
parentHeader: BlockHeader
193193
): Either[BlockHeaderError, BlockHeaderValid] = {
194194

195-
if (blockHeader.gasLimit > MaxGasLimit && blockHeader.number >= blockchainConfig.eip106BlockNumber)
195+
if (blockHeader.gasLimit > MaxGasLimit && blockHeader.number >= blockchainConfig.forkBlockNumbers.eip106BlockNumber)
196196
Left(HeaderGasLimitError)
197197
else {
198198
val gasLimitDiff = (blockHeader.gasLimit - parentHeader.gasLimit).abs
@@ -226,8 +226,8 @@ abstract class BlockHeaderValidatorSkeleton(blockchainConfig: BlockchainConfig)
226226
* @return BlockHeader if valid, an [[HeaderExtraFieldsError]] otherwise
227227
*/
228228
private def validateExtraFields(blockHeader: BlockHeader): Either[BlockHeaderError, BlockHeaderValid] = {
229-
val isECIP1098Activated = blockHeader.number >= blockchainConfig.ecip1098BlockNumber
230-
val isECIP1097Activated = blockHeader.number >= blockchainConfig.ecip1097BlockNumber
229+
val isECIP1098Activated = blockHeader.number >= blockchainConfig.forkBlockNumbers.ecip1098BlockNumber
230+
val isECIP1097Activated = blockHeader.number >= blockchainConfig.forkBlockNumbers.ecip1097BlockNumber
231231

232232
blockHeader.extraFields match {
233233
case HefPostEcip1097(_) if isECIP1097Activated && isECIP1098Activated => Right(BlockHeaderValid)

src/main/scala/io/iohk/ethereum/consensus/validators/std/StdSignedTransactionValidator.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ class StdSignedTransactionValidator(blockchainConfig: BlockchainConfig) extends
8585
val r = stx.signature.r
8686
val s = stx.signature.s
8787

88-
val beforeHomestead = blockNumber < blockchainConfig.homesteadBlockNumber
89-
val beforeEIP155 = blockNumber < blockchainConfig.eip155BlockNumber
88+
val beforeHomestead = blockNumber < blockchainConfig.forkBlockNumbers.homesteadBlockNumber
89+
val beforeEIP155 = blockNumber < blockchainConfig.forkBlockNumbers.eip155BlockNumber
9090

9191
val validR = r > 0 && r < secp256k1n
9292
val validS = s > 0 && s < (if (beforeHomestead) secp256k1n else secp256k1n / 2)

src/main/scala/io/iohk/ethereum/jsonrpc/EthMiningService.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ class EthMiningService(
9494
Right(
9595
GetWorkResponse(
9696
powHeaderHash = ByteString(kec256(BlockHeader.getEncodedWithoutNonce(pb.block.header))),
97-
dagSeed = EthashUtils.seed(pb.block.header.number.toLong, blockchainConfig.ecip1099BlockNumber.toLong),
97+
dagSeed = EthashUtils
98+
.seed(pb.block.header.number.toLong, blockchainConfig.forkBlockNumbers.ecip1099BlockNumber.toLong),
9899
target = ByteString((BigInt(2).pow(256) / pb.block.header.difficulty).toByteArray)
99100
)
100101
)

src/main/scala/io/iohk/ethereum/jsonrpc/PersonalService.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class PersonalService(
207207
val maybeNextTxNonce = maybeLatestPendingTxNonce.map(_ + 1) orElse maybeCurrentNonce
208208
val tx = request.toTransaction(maybeNextTxNonce.getOrElse(blockchainConfig.accountStartNonce))
209209

210-
val stx = if (blockchain.getBestBlockNumber() >= blockchainConfig.eip155BlockNumber) {
210+
val stx = if (blockchain.getBestBlockNumber() >= blockchainConfig.forkBlockNumbers.eip155BlockNumber) {
211211
wallet.signTx(tx, Some(blockchainConfig.chainId))
212212
} else {
213213
wallet.signTx(tx, None)

src/main/scala/io/iohk/ethereum/jsonrpc/TestJsonMethodsImplicits.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,16 @@ object TestJsonMethodsImplicits extends JsonMethodsImplicits {
8989
constantinopleForkBlock <- optionalQuantity(blockchainParamsJson \ "constantinopleForkBlock")
9090
istanbulForkBlock <- optionalQuantity(blockchainParamsJson \ "istanbulForkBlock")
9191
} yield BlockchainParams(
92-
eIP150ForkBlock.getOrElse(0),
93-
eIP158ForkBlock.getOrElse(0),
94-
accountStartNonce.getOrElse(0),
95-
allowFutureBlocks,
96-
blockReward.getOrElse(0),
97-
byzantiumForkBlock.getOrElse(0),
98-
homesteadForkBlock.getOrElse(0),
99-
0,
100-
constantinopleForkBlock.getOrElse(0),
101-
istanbulForkBlock.getOrElse(0)
92+
EIP150ForkBlock = eIP150ForkBlock,
93+
EIP158ForkBlock = eIP158ForkBlock,
94+
accountStartNonce = accountStartNonce.getOrElse(0),
95+
allowFutureBlocks = allowFutureBlocks,
96+
blockReward = blockReward.getOrElse(0),
97+
byzantiumForkBlock = byzantiumForkBlock,
98+
homesteadForkBlock = homesteadForkBlock,
99+
maximumExtraDataSize = 0,
100+
constantinopleForkBlock = constantinopleForkBlock,
101+
istanbulForkBlock = istanbulForkBlock
102102
)
103103
}
104104

0 commit comments

Comments
 (0)