Skip to content

Commit f8dc207

Browse files
author
Aurélien Richez
committed
[refactor] put currentConfig inside TestService
1 parent 7f03ec6 commit f8dc207

File tree

4 files changed

+19
-28
lines changed

4 files changed

+19
-28
lines changed

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

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import io.iohk.ethereum.{crypto, domain, rlp}
1010
import io.iohk.ethereum.domain.Block._
1111
import io.iohk.ethereum.domain.{Account, Address, Block, BlockchainImpl, UInt256}
1212
import io.iohk.ethereum.ledger._
13-
import io.iohk.ethereum.testmode.{TestLedgerWrapper, TestmodeConsensus}
13+
import io.iohk.ethereum.testmode.{TestServiceProvider, TestmodeConsensus}
1414
import io.iohk.ethereum.transactions.PendingTransactionsManager
1515
import io.iohk.ethereum.transactions.PendingTransactionsManager.PendingTransactionsResponse
16-
import io.iohk.ethereum.utils.{ByteStringUtils, ForkBlockNumbers, Logger}
16+
import io.iohk.ethereum.utils.{BlockchainConfig, ByteStringUtils, ForkBlockNumbers, Logger}
1717
import monix.eval.Task
1818
import monix.execution.Scheduler
1919
import org.bouncycastle.util.encoders.Hex
@@ -109,7 +109,8 @@ class TestService(
109109
pendingTransactionsManager: ActorRef,
110110
consensusConfig: ConsensusConfig,
111111
consensus: TestmodeConsensus,
112-
testLedgerWrapper: TestLedgerWrapper
112+
testLedgerWrapper: TestServiceProvider,
113+
initialConfig: BlockchainConfig
113114
)(implicit
114115
scheduler: Scheduler
115116
) extends Logger {
@@ -120,18 +121,10 @@ class TestService(
120121
private var etherbase: Address = consensusConfig.coinbase
121122
private var accountAddresses: List[String] = List()
122123
private var accountRangeOffset = 0
124+
private var currentConfig: BlockchainConfig = initialConfig
123125

124126
def setChainParams(request: SetChainParamsRequest): ServiceResponse[SetChainParamsResponse] = {
125-
val newBlockchainConfig = testLedgerWrapper.blockchainConfig.copy(
126-
homesteadBlockNumber = request.chainParams.blockchainParams.homesteadForkBlock,
127-
eip150BlockNumber = request.chainParams.blockchainParams.EIP150ForkBlock,
128-
byzantiumBlockNumber = request.chainParams.blockchainParams.byzantiumForkBlock,
129-
constantinopleBlockNumber = request.chainParams.blockchainParams.constantinopleForkBlock,
130-
istanbulBlockNumber = request.chainParams.blockchainParams.istanbulForkBlock,
131-
accountStartNonce = UInt256(request.chainParams.blockchainParams.accountStartNonce),
132-
networkId = 1,
133-
bootstrapNodes = Set()
134-
)
127+
currentConfig = buildNewConfig(request.chainParams.blockchainParams)
135128

136129
val genesisData = GenesisData(
137130
nonce = request.chainParams.genesis.nonce,
@@ -153,16 +146,15 @@ class TestService(
153146
Try(blockchain.removeBlock(blockchain.genesisHeader.hash, withState = false))
154147

155148
// load the new genesis
156-
val genesisDataLoader = new GenesisDataLoader(blockchain, newBlockchainConfig)
149+
val genesisDataLoader = new GenesisDataLoader(blockchain, currentConfig)
157150
genesisDataLoader.loadGenesisData(genesisData)
158151

159152
//save account codes to world state
160153
storeGenesisAccountCodes(genesisData.alloc)
161154
storeGenesisAccountStorageData(genesisData.alloc)
162155

163156
// update test ledger with new config
164-
testLedgerWrapper.blockchainConfig = newBlockchainConfig
165-
consensus.blockchainConfig = newBlockchainConfig
157+
consensus.blockchainConfig = currentConfig
166158

167159
accountAddresses = genesisData.alloc.keys.toList
168160
accountRangeOffset = 0
@@ -176,7 +168,7 @@ class TestService(
176168
val istanbulForkBlockNumber: BigInt = blockchainParams.istanbulForkBlock.getOrElse(neverOccuringBlock)
177169

178170
// For block number which are not specified by retesteth, we try to align the number to another fork
179-
testLedgerWrapper.blockchainConfig.copy(
171+
currentConfig.copy(
180172
forkBlockNumbers = ForkBlockNumbers(
181173
frontierBlockNumber = 0,
182174
homesteadBlockNumber = blockchainParams.homesteadForkBlock.getOrElse(neverOccuringBlock),
@@ -225,7 +217,7 @@ class TestService(
225217
def mineBlocks(request: MineBlocksRequest): ServiceResponse[MineBlocksResponse] = {
226218
def mineBlock(): Task[Unit] = {
227219
getBlockForMining(blockchain.getBestBlock().get)
228-
.flatMap(blockForMining => testLedgerWrapper.ledger.importBlock(blockForMining.block))
220+
.flatMap(blockForMining => testLedgerWrapper.ledger(currentConfig).importBlock(blockForMining.block))
229221
.map { res =>
230222
log.info("Block mining result: " + res)
231223
pendingTransactionsManager ! PendingTransactionsManager.ClearPendingTransactions
@@ -258,7 +250,7 @@ class TestService(
258250
Try(decode(request.blockRlp).toBlock) match {
259251
case Failure(_) => Task.now(Left(JsonRpcError(-1, "block validation failed!", None)))
260252
case Success(value) =>
261-
testLedgerWrapper.ledger
253+
testLedgerWrapper.ledger(currentConfig)
262254
.importBlock(value)
263255
.flatMap(handleResult)
264256
}

src/main/scala/io/iohk/ethereum/nodebuilder/NodeBuilder.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ trait TestServiceBuilder {
366366
with TestLedgerBuilder =>
367367

368368
lazy val testService =
369-
new TestService(blockchain, pendingTransactionsManager, consensusConfig, consensus, testLedgerWrapper)(scheduler)
369+
new TestService(blockchain, pendingTransactionsManager, consensusConfig, consensus, testLedgerWrapper, blockchainConfig)(scheduler)
370370
}
371371

372372
trait TestEthBlockServiceBuilder extends EthBlocksServiceBuilder {

src/main/scala/io/iohk/ethereum/testmode/TestLedgerBuilder.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ trait TestLedgerBuilder extends LedgerBuilder {
1818

1919
val scheduler = Scheduler(system.dispatchers.lookup("validation-context"))
2020

21-
lazy val testLedgerWrapper: TestLedgerWrapper =
22-
new TestLedgerWrapper(blockchain, syncConfig, consensus, blockchainConfig, scheduler)
21+
lazy val testLedgerWrapper: TestServiceProvider =
22+
new TestServiceProvider(blockchain, syncConfig, consensus, scheduler)
2323

24-
private def testLedger: Ledger = testLedgerWrapper.ledger
24+
private def testLedger: Ledger = testLedgerWrapper.ledger(blockchainConfig)
2525

2626
class TestLedgerProxy extends Ledger {
2727
override def consensus: Consensus = testLedger.consensus
@@ -35,5 +35,5 @@ trait TestLedgerBuilder extends LedgerBuilder {
3535
}
3636

3737
override lazy val ledger: Ledger = new TestLedgerProxy
38-
override lazy val stxLedger: StxLedger = testLedgerWrapper.stxLedger
38+
override lazy val stxLedger: StxLedger = testLedgerWrapper.stxLedger(blockchainConfig)
3939
}

src/main/scala/io/iohk/ethereum/testmode/TestLedgerWrapper.scala renamed to src/main/scala/io/iohk/ethereum/testmode/TestServiceProvider.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@ import io.iohk.ethereum.utils.Config.SyncConfig
88
import monix.execution.Scheduler
99

1010
/** Provides a ledger instance with modifiable blockchain config (used in test mode). */
11-
class TestLedgerWrapper(
11+
class TestServiceProvider(
1212
blockchain: BlockchainImpl,
1313
syncConfig: SyncConfig,
1414
consensus: Consensus,
15-
var blockchainConfig: BlockchainConfig, // var as it's modifiable by test_ RPC endpoints
1615
validationExecutionContext: Scheduler
1716
) {
1817

19-
def ledger: Ledger = new LedgerImpl(blockchain, blockchainConfig, syncConfig, consensus, validationExecutionContext)
20-
def stxLedger: StxLedger = new StxLedger(blockchain, blockchainConfig, consensus.blockPreparator)
18+
def ledger(blockchainConfig: BlockchainConfig): Ledger = new LedgerImpl(blockchain, blockchainConfig, syncConfig, consensus, validationExecutionContext)
19+
def stxLedger(blockchainConfig: BlockchainConfig): StxLedger = new StxLedger(blockchain, blockchainConfig, consensus.blockPreparator)
2120
}

0 commit comments

Comments
 (0)