@@ -10,10 +10,10 @@ import io.iohk.ethereum.{crypto, domain, rlp}
10
10
import io .iohk .ethereum .domain .Block ._
11
11
import io .iohk .ethereum .domain .{Account , Address , Block , BlockchainImpl , UInt256 }
12
12
import io .iohk .ethereum .ledger ._
13
- import io .iohk .ethereum .testmode .{TestLedgerWrapper , TestmodeConsensus }
13
+ import io .iohk .ethereum .testmode .{TestServiceProvider , TestmodeConsensus }
14
14
import io .iohk .ethereum .transactions .PendingTransactionsManager
15
15
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 }
17
17
import monix .eval .Task
18
18
import monix .execution .Scheduler
19
19
import org .bouncycastle .util .encoders .Hex
@@ -109,7 +109,8 @@ class TestService(
109
109
pendingTransactionsManager : ActorRef ,
110
110
consensusConfig : ConsensusConfig ,
111
111
consensus : TestmodeConsensus ,
112
- testLedgerWrapper : TestLedgerWrapper
112
+ testLedgerWrapper : TestServiceProvider ,
113
+ initialConfig : BlockchainConfig
113
114
)(implicit
114
115
scheduler : Scheduler
115
116
) extends Logger {
@@ -120,18 +121,10 @@ class TestService(
120
121
private var etherbase : Address = consensusConfig.coinbase
121
122
private var accountAddresses : List [String ] = List ()
122
123
private var accountRangeOffset = 0
124
+ private var currentConfig : BlockchainConfig = initialConfig
123
125
124
126
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)
135
128
136
129
val genesisData = GenesisData (
137
130
nonce = request.chainParams.genesis.nonce,
@@ -153,16 +146,15 @@ class TestService(
153
146
Try (blockchain.removeBlock(blockchain.genesisHeader.hash, withState = false ))
154
147
155
148
// load the new genesis
156
- val genesisDataLoader = new GenesisDataLoader (blockchain, newBlockchainConfig )
149
+ val genesisDataLoader = new GenesisDataLoader (blockchain, currentConfig )
157
150
genesisDataLoader.loadGenesisData(genesisData)
158
151
159
152
// save account codes to world state
160
153
storeGenesisAccountCodes(genesisData.alloc)
161
154
storeGenesisAccountStorageData(genesisData.alloc)
162
155
163
156
// update test ledger with new config
164
- testLedgerWrapper.blockchainConfig = newBlockchainConfig
165
- consensus.blockchainConfig = newBlockchainConfig
157
+ consensus.blockchainConfig = currentConfig
166
158
167
159
accountAddresses = genesisData.alloc.keys.toList
168
160
accountRangeOffset = 0
@@ -176,7 +168,7 @@ class TestService(
176
168
val istanbulForkBlockNumber : BigInt = blockchainParams.istanbulForkBlock.getOrElse(neverOccuringBlock)
177
169
178
170
// 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(
180
172
forkBlockNumbers = ForkBlockNumbers (
181
173
frontierBlockNumber = 0 ,
182
174
homesteadBlockNumber = blockchainParams.homesteadForkBlock.getOrElse(neverOccuringBlock),
@@ -225,7 +217,7 @@ class TestService(
225
217
def mineBlocks (request : MineBlocksRequest ): ServiceResponse [MineBlocksResponse ] = {
226
218
def mineBlock (): Task [Unit ] = {
227
219
getBlockForMining(blockchain.getBestBlock().get)
228
- .flatMap(blockForMining => testLedgerWrapper.ledger.importBlock(blockForMining.block))
220
+ .flatMap(blockForMining => testLedgerWrapper.ledger(currentConfig) .importBlock(blockForMining.block))
229
221
.map { res =>
230
222
log.info(" Block mining result: " + res)
231
223
pendingTransactionsManager ! PendingTransactionsManager .ClearPendingTransactions
@@ -258,7 +250,7 @@ class TestService(
258
250
Try (decode(request.blockRlp).toBlock) match {
259
251
case Failure (_) => Task .now(Left (JsonRpcError (- 1 , " block validation failed!" , None )))
260
252
case Success (value) =>
261
- testLedgerWrapper.ledger
253
+ testLedgerWrapper.ledger(currentConfig)
262
254
.importBlock(value)
263
255
.flatMap(handleResult)
264
256
}
0 commit comments