@@ -155,10 +155,10 @@ class TestService(
155
155
// load the new genesis
156
156
val genesisDataLoader = new GenesisDataLoader (blockchain, newBlockchainConfig)
157
157
genesisDataLoader.loadGenesisData(genesisData)
158
-
159
158
// save account codes to world state
160
159
storeGenesisAccountCodes(genesisData.alloc)
161
160
storeGenesisAccountStorageData(genesisData.alloc)
161
+
162
162
// update test ledger with new config
163
163
testLedgerWrapper.blockchainConfig = newBlockchainConfig
164
164
@@ -168,13 +168,11 @@ class TestService(
168
168
SetChainParamsResponse ().rightNow
169
169
}
170
170
171
- private def storeGenesisAccountCodes (accounts : Map [String , GenesisAccount ]): Unit = {
172
- for {
173
- code <- accounts.map(pair => pair._2.code).collect { case Some (code) => code }
174
- } {
175
- blockchain.storeEvmCode(kec256(code), code).commit()
176
- }
177
- }
171
+ private def storeGenesisAccountCodes (accounts : Map [String , GenesisAccount ]): Unit =
172
+ accounts
173
+ .map(pair => pair._2.code)
174
+ .collect { case Some (code) => code }
175
+ .foreach { code => blockchain.storeEvmCode(kec256(code), code).commit() }
178
176
179
177
private def storeGenesisAccountStorageData (accounts : Map [String , GenesisAccount ]): Unit = {
180
178
val emptyStorage = domain.EthereumUInt256Mpt .storageMpt(
@@ -185,9 +183,9 @@ class TestService(
185
183
.flatMap(pair => pair._2.storage)
186
184
.map(accountStorage => accountStorage.filterNot { case (_, v) => v.isZero })
187
185
.filter(_.nonEmpty)
188
- for { storage <- storagesToPersist } {
189
- storage.foldLeft(emptyStorage) { case (storage, (key, value)) => storage.put(key, value) }
190
- }
186
+
187
+ // the identity map is needed to trigger an implicit conversion from UInt256 to BigInt
188
+ storagesToPersist.foreach(storage => emptyStorage.update( Nil , storage.toSeq.map { case (a, b) => (a, b) }))
191
189
}
192
190
193
191
def mineBlocks (request : MineBlocksRequest ): ServiceResponse [MineBlocksResponse ] = {
0 commit comments