2020import org .hyperledger .besu .datatypes .BlobGas ;
2121import org .hyperledger .besu .datatypes .Hash ;
2222import org .hyperledger .besu .datatypes .Wei ;
23+ import org .hyperledger .besu .ethereum .api .jsonrpc .internal .methods .TraceBlock .ChainUpdater ;
2324import org .hyperledger .besu .ethereum .api .jsonrpc .internal .processor .Tracer ;
2425import org .hyperledger .besu .ethereum .api .query .BlockchainQueries ;
2526import org .hyperledger .besu .ethereum .chain .Blockchain ;
@@ -155,14 +156,14 @@ public void trace(
155156 blocks .get (0 ).getHash (),
156157 traceableState -> {
157158 final WorldUpdater worldStateUpdater = traceableState .updater ();
159+ final ChainUpdater chainUpdater = new ChainUpdater (traceableState , worldStateUpdater );
158160 beforeTracing .accept (worldStateUpdater );
159161 final List <TransactionProcessingResult > results = new ArrayList <>();
160162 blocks .forEach (
161163 block -> {
162- results .addAll (trace (blockchain , block , worldStateUpdater , tracer ));
163- worldStateUpdater .commit ();
164+ results .addAll (trace (blockchain , block , chainUpdater , tracer ));
164165 });
165- afterTracing .accept (worldStateUpdater );
166+ afterTracing .accept (chainUpdater . getNextUpdater () );
166167 return Optional .of (results );
167168 });
168169 }
@@ -177,15 +178,15 @@ private Optional<List<TransactionProcessingResult>> trace(
177178 blockchainQueries ,
178179 block .getHash (),
179180 traceableState ->
180- Optional .of (trace (blockchain , block , traceableState . updater ( ), tracer )));
181+ Optional .of (trace (blockchain , block , new ChainUpdater ( traceableState ), tracer )));
181182
182183 return results ;
183184 }
184185
185186 private List <TransactionProcessingResult > trace (
186187 final Blockchain blockchain ,
187188 final Block block ,
188- final WorldUpdater worldUpdater ,
189+ final ChainUpdater chainUpdater ,
189190 final BlockAwareOperationTracer tracer ) {
190191 final List <TransactionProcessingResult > results = new ArrayList <>();
191192 final ProtocolSpec protocolSpec = protocolSchedule .getByBlockHeader (block .getHeader ());
@@ -208,6 +209,7 @@ private List<TransactionProcessingResult> trace(
208209 .map (parent -> calculateExcessBlobGasForParent (protocolSpec , parent ))
209210 .orElse (BlobGas .ZERO ));
210211
212+ final WorldUpdater worldUpdater = chainUpdater .getNextUpdater ();
211213 final TransactionProcessingResult result =
212214 transactionProcessor .processTransaction (
213215 worldUpdater ,
0 commit comments