Skip to content

Commit 788f628

Browse files
committed
tmp
1 parent 2106eea commit 788f628

19 files changed

+377
-143
lines changed

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/MainnetBlockValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ private void handleFailedBlockProcessing(
241241
protected BlockProcessingResult processBlock(
242242
final ProtocolContext context, final MutableWorldState worldState, final Block block) {
243243

244-
return blockProcessor.processBlock(context.getBlockchain(), worldState, block);
244+
return blockProcessor.processBlock(context, context.getBlockchain(), worldState, block);
245245
}
246246

247247
@Override

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/TransactionReceipt.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public class TransactionReceipt implements org.hyperledger.besu.plugin.data.Tran
5757
private final int status;
5858
private final TransactionReceiptType transactionReceiptType;
5959
private final Optional<Bytes> revertReason;
60+
public boolean isParal=false;
6061

6162
/**
6263
* Creates an instance of a state root-encoded transaction receipt.

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.hyperledger.besu.datatypes.Wei;
2323
import org.hyperledger.besu.ethereum.BlockProcessingOutputs;
2424
import org.hyperledger.besu.ethereum.BlockProcessingResult;
25+
import org.hyperledger.besu.ethereum.ProtocolContext;
2526
import org.hyperledger.besu.ethereum.chain.Blockchain;
2627
import org.hyperledger.besu.ethereum.core.BlockHeader;
2728
import org.hyperledger.besu.ethereum.core.MutableWorldState;
@@ -95,14 +96,16 @@ protected AbstractBlockProcessor(
9596

9697
@Override
9798
public BlockProcessingResult processBlock(
99+
final ProtocolContext protocolContext,
98100
final Blockchain blockchain,
99-
final MutableWorldState worldState,
100-
final BlockHeader blockHeader,
101-
final List<Transaction> transactions,
102-
final List<BlockHeader> ommers,
103-
final Optional<List<Withdrawal>> maybeWithdrawals,
104-
final PrivateMetadataUpdater privateMetadataUpdater) {
101+
final MutableWorldState worldState,
102+
final BlockHeader blockHeader,
103+
final List<Transaction> transactions,
104+
final List<BlockHeader> ommers,
105+
final Optional<List<Withdrawal>> maybeWithdrawals,
106+
final PrivateMetadataUpdater privateMetadataUpdater) {
105107
return processBlock(
108+
protocolContext,
106109
blockchain,
107110
worldState,
108111
blockHeader,
@@ -114,6 +117,7 @@ public BlockProcessingResult processBlock(
114117
}
115118

116119
protected BlockProcessingResult processBlock(
120+
final ProtocolContext protocolContext,
117121
final Blockchain blockchain,
118122
final MutableWorldState worldState,
119123
final BlockHeader blockHeader,
@@ -148,7 +152,7 @@ protected BlockProcessingResult processBlock(
148152

149153
final Optional<PreprocessingContext> preProcessingContext =
150154
preprocessingBlockFunction.run(
151-
worldState,
155+
protocolContext,
152156
privateMetadataUpdater,
153157
blockHeader,
154158
transactions,
@@ -207,8 +211,10 @@ protected BlockProcessingResult processBlock(
207211
if (!parallelizedTxFound
208212
&& transactionProcessingResult.getIsProcessedInParallel().isPresent()) {
209213
parallelizedTxFound = true;
214+
transactionReceipt.isParal = true;
210215
nbParallelTx = 1;
211216
} else if (transactionProcessingResult.getIsProcessedInParallel().isPresent()) {
217+
transactionReceipt.isParal = true;
212218
nbParallelTx++;
213219
}
214220
}
@@ -239,7 +245,7 @@ protected BlockProcessingResult processBlock(
239245
protocolSpec.getRequestProcessorCoordinator();
240246
Optional<List<Request>> maybeRequests = Optional.empty();
241247
if (requestProcessor.isPresent()) {
242-
ProcessRequestContext context =
248+
ProcessRequestContext processRequestContext =
243249
new ProcessRequestContext(
244250
blockHeader,
245251
worldState,
@@ -248,7 +254,7 @@ protected BlockProcessingResult processBlock(
248254
blockHashLookup,
249255
OperationTracer.NO_TRACING);
250256

251-
maybeRequests = Optional.of(requestProcessor.get().process(context));
257+
maybeRequests = Optional.of(requestProcessor.get().process(processRequestContext));
252258
}
253259

254260
if (!rewardCoinbase(worldState, blockHeader, ommers, skipZeroBlockRewards)) {
@@ -332,7 +338,7 @@ public interface PreprocessingContext {}
332338

333339
public interface PreprocessingFunction {
334340
Optional<PreprocessingContext> run(
335-
final MutableWorldState worldState,
341+
final ProtocolContext protocolContext,
336342
final PrivateMetadataUpdater privateMetadataUpdater,
337343
final BlockHeader blockHeader,
338344
final List<Transaction> transactions,
@@ -344,7 +350,7 @@ class NoPreprocessing implements PreprocessingFunction {
344350

345351
@Override
346352
public Optional<PreprocessingContext> run(
347-
final MutableWorldState worldState,
353+
final ProtocolContext protocolContext,
348354
final PrivateMetadataUpdater privateMetadataUpdater,
349355
final BlockHeader blockHeader,
350356
final List<Transaction> transactions,

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/BlockProcessor.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.hyperledger.besu.datatypes.Wei;
1818
import org.hyperledger.besu.ethereum.BlockProcessingResult;
19+
import org.hyperledger.besu.ethereum.ProtocolContext;
1920
import org.hyperledger.besu.ethereum.chain.Blockchain;
2021
import org.hyperledger.besu.ethereum.core.Block;
2122
import org.hyperledger.besu.ethereum.core.BlockHeader;
@@ -68,14 +69,16 @@ default boolean isFailed() {
6869
/**
6970
* Processes the block.
7071
*
72+
* @param protocolContext the current context of the protocol
7173
* @param blockchain the blockchain to append the block to
7274
* @param worldState the world state to apply changes to
73-
* @param block the block to process
75+
* @param block the block to process
7476
* @return the block processing result
7577
*/
7678
default BlockProcessingResult processBlock(
77-
final Blockchain blockchain, final MutableWorldState worldState, final Block block) {
79+
final ProtocolContext protocolContext, final Blockchain blockchain, final MutableWorldState worldState, final Block block) {
7880
return processBlock(
81+
protocolContext,
7982
blockchain,
8083
worldState,
8184
block.getHeader(),
@@ -88,6 +91,7 @@ default BlockProcessingResult processBlock(
8891
/**
8992
* Processes the block.
9093
*
94+
* @param protocolContext the current context of the protocol
9195
* @param blockchain the blockchain to append the block to
9296
* @param worldState the world state to apply changes to
9397
* @param blockHeader the block header for the block
@@ -96,18 +100,20 @@ default BlockProcessingResult processBlock(
96100
* @return the block processing result
97101
*/
98102
default BlockProcessingResult processBlock(
99-
final Blockchain blockchain,
103+
final ProtocolContext protocolContext,
104+
final Blockchain blockchain,
100105
final MutableWorldState worldState,
101106
final BlockHeader blockHeader,
102107
final List<Transaction> transactions,
103108
final List<BlockHeader> ommers) {
104109
return processBlock(
105-
blockchain, worldState, blockHeader, transactions, ommers, Optional.empty(), null);
110+
protocolContext, blockchain, worldState, blockHeader, transactions, ommers, Optional.empty(), null);
106111
}
107112

108113
/**
109114
* Processes the block.
110115
*
116+
* @param protocolContext the current context of the protocol
111117
* @param blockchain the blockchain to append the block to
112118
* @param worldState the world state to apply changes to
113119
* @param blockHeader the block header for the block
@@ -118,7 +124,8 @@ default BlockProcessingResult processBlock(
118124
* @return the block processing result
119125
*/
120126
BlockProcessingResult processBlock(
121-
Blockchain blockchain,
127+
ProtocolContext protocolContext,
128+
Blockchain blockchain,
122129
MutableWorldState worldState,
123130
BlockHeader blockHeader,
124131
List<Transaction> transactions,
@@ -129,14 +136,16 @@ BlockProcessingResult processBlock(
129136
/**
130137
* Processes the block when running Besu in GoQuorum-compatible mode
131138
*
139+
* @param protocolContext the current context of the protocol
132140
* @param blockchain the blockchain to append the block to
133141
* @param worldState the world state to apply public transactions to
134142
* @param privateWorldState the private world state to apply private transaction to
135143
* @param block the block to process
136144
* @return the block processing result
137145
*/
138146
default BlockProcessingResult processBlock(
139-
final Blockchain blockchain,
147+
final ProtocolContext protocolContext,
148+
final Blockchain blockchain,
140149
final MutableWorldState worldState,
141150
final MutableWorldState privateWorldState,
142151
final Block block) {

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.hyperledger.besu.datatypes.Wei;
2626
import org.hyperledger.besu.ethereum.BlockProcessingResult;
2727
import org.hyperledger.besu.ethereum.MainnetBlockValidator;
28+
import org.hyperledger.besu.ethereum.ProtocolContext;
2829
import org.hyperledger.besu.ethereum.chain.Blockchain;
2930
import org.hyperledger.besu.ethereum.core.BlockHeader;
3031
import org.hyperledger.besu.ethereum.core.MiningConfiguration;
@@ -988,6 +989,7 @@ private record DaoBlockProcessor(BlockProcessor wrapped) implements BlockProcess
988989

989990
@Override
990991
public BlockProcessingResult processBlock(
992+
final ProtocolContext protocolContext,
991993
final Blockchain blockchain,
992994
final MutableWorldState worldState,
993995
final BlockHeader blockHeader,
@@ -997,6 +999,7 @@ public BlockProcessingResult processBlock(
997999
final PrivateMetadataUpdater privateMetadataUpdater) {
9981000
updateWorldStateForDao(worldState);
9991001
return wrapped.processBlock(
1002+
protocolContext,
10001003
blockchain,
10011004
worldState,
10021005
blockHeader,

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/PrivacyBlockProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.hyperledger.besu.enclave.EnclaveClientException;
2222
import org.hyperledger.besu.enclave.types.ReceiveResponse;
2323
import org.hyperledger.besu.ethereum.BlockProcessingResult;
24+
import org.hyperledger.besu.ethereum.ProtocolContext;
2425
import org.hyperledger.besu.ethereum.chain.Blockchain;
2526
import org.hyperledger.besu.ethereum.core.BlockHeader;
2627
import org.hyperledger.besu.ethereum.core.MutableWorldState;
@@ -83,6 +84,7 @@ public void setPublicWorldStateArchive(final WorldStateArchive publicWorldStateA
8384

8485
@Override
8586
public BlockProcessingResult processBlock(
87+
final ProtocolContext protocolContext,
8688
final Blockchain blockchain,
8789
final MutableWorldState worldState,
8890
final BlockHeader blockHeader,
@@ -102,6 +104,7 @@ public BlockProcessingResult processBlock(
102104

103105
final BlockProcessingResult result =
104106
blockProcessor.processBlock(
107+
protocolContext,
105108
blockchain,
106109
worldState,
107110
blockHeader,

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/parallelization/MainnetParallelBlockProcessor.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@
1515
package org.hyperledger.besu.ethereum.mainnet.parallelization;
1616

1717
import org.hyperledger.besu.datatypes.Address;
18+
import org.hyperledger.besu.datatypes.Quantity;
1819
import org.hyperledger.besu.datatypes.Wei;
1920
import org.hyperledger.besu.ethereum.BlockProcessingResult;
21+
import org.hyperledger.besu.ethereum.ProtocolContext;
2022
import org.hyperledger.besu.ethereum.chain.Blockchain;
2123
import org.hyperledger.besu.ethereum.core.BlockHeader;
2224
import org.hyperledger.besu.ethereum.core.MutableWorldState;
2325
import org.hyperledger.besu.ethereum.core.Transaction;
26+
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
2427
import org.hyperledger.besu.ethereum.core.Withdrawal;
2528
import org.hyperledger.besu.ethereum.mainnet.AbstractBlockProcessor.PreprocessingFunction.NoPreprocessing;
2629
import org.hyperledger.besu.ethereum.mainnet.BlockProcessor;
@@ -31,7 +34,11 @@
3134
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecBuilder;
3235
import org.hyperledger.besu.ethereum.privacy.storage.PrivateMetadataUpdater;
3336
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
37+
import org.hyperledger.besu.ethereum.trie.diffbased.bonsai.BonsaiAccount;
38+
import org.hyperledger.besu.ethereum.trie.diffbased.bonsai.worldview.BonsaiWorldStateUpdateAccumulator;
39+
import org.hyperledger.besu.ethereum.trie.diffbased.common.DiffBasedWorldStateProvider;
3440
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.DiffBasedWorldState;
41+
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.accumulator.DiffBasedWorldStateUpdateAccumulator;
3542
import org.hyperledger.besu.evm.operation.BlockHashOperation;
3643
import org.hyperledger.besu.evm.worldstate.WorldUpdater;
3744
import org.hyperledger.besu.metrics.BesuMetricCategory;
@@ -137,6 +144,7 @@ protected TransactionProcessingResult getTransactionProcessingResult(
137144

138145
@Override
139146
public BlockProcessingResult processBlock(
147+
final ProtocolContext protocolContext,
140148
final Blockchain blockchain,
141149
final MutableWorldState worldState,
142150
final BlockHeader blockHeader,
@@ -146,6 +154,7 @@ public BlockProcessingResult processBlock(
146154
final PrivateMetadataUpdater privateMetadataUpdater) {
147155
final BlockProcessingResult blockProcessingResult =
148156
super.processBlock(
157+
protocolContext,
149158
blockchain,
150159
worldState,
151160
blockHeader,
@@ -154,21 +163,35 @@ public BlockProcessingResult processBlock(
154163
maybeWithdrawals,
155164
privateMetadataUpdater,
156165
new ParallelTransactionPreprocessing());
166+
167+
BonsaiWorldStateUpdateAccumulator updater = (BonsaiWorldStateUpdateAccumulator) worldState.updater();
168+
DiffBasedWorldStateUpdateAccumulator<BonsaiAccount> copy = updater.copy();
169+
updater.reset();
157170
if (blockProcessingResult.isFailed()) {
158171
// Fallback to non-parallel processing if there is a block processing exception .
159172
LOG.warn(
160173
"Block processing failed. Falling back to non-parallel processing for block #{} ({})",
161174
blockHeader.getNumber(),
162175
blockHeader.getBlockHash());
163-
return super.processBlock(
164-
blockchain,
165-
worldState,
166-
blockHeader,
167-
transactions,
168-
ommers,
169-
maybeWithdrawals,
170-
privateMetadataUpdater,
171-
new NoPreprocessing());
176+
final BlockProcessingResult blockProcessingResult1 = super.processBlock(
177+
protocolContext,
178+
blockchain,
179+
worldState,
180+
blockHeader,
181+
transactions,
182+
ommers,
183+
maybeWithdrawals,
184+
privateMetadataUpdater,
185+
new NoPreprocessing());
186+
BonsaiWorldStateUpdateAccumulator updater2 = (BonsaiWorldStateUpdateAccumulator) worldState.updater();
187+
updater2.compareAccumulators(updater2, copy);
188+
updater2.reset();
189+
int i =0;
190+
for (TransactionReceipt transactionReceipt : blockProcessingResult.getReceipts()) {
191+
System.out.println("trx " + i + " " + transactionReceipt.isParal);
192+
i++;
193+
}
194+
return blockProcessingResult1;
172195
}
173196
return blockProcessingResult;
174197
}
@@ -209,20 +232,20 @@ class ParallelTransactionPreprocessing implements PreprocessingFunction {
209232

210233
@Override
211234
public Optional<PreprocessingContext> run(
212-
final MutableWorldState worldState,
235+
final ProtocolContext protocolContext,
213236
final PrivateMetadataUpdater privateMetadataUpdater,
214237
final BlockHeader blockHeader,
215238
final List<Transaction> transactions,
216239
final Address miningBeneficiary,
217240
final BlockHashOperation.BlockHashLookup blockHashLookup,
218241
final Wei blobGasPrice) {
219-
if ((worldState instanceof DiffBasedWorldState)) {
242+
if ((protocolContext.getWorldStateArchive() instanceof DiffBasedWorldStateProvider)) {
220243
ParallelizedConcurrentTransactionProcessor parallelizedConcurrentTransactionProcessor =
221244
new ParallelizedConcurrentTransactionProcessor(transactionProcessor);
222245
// runAsyncBlock, if activated, facilitates the non-blocking parallel execution of
223246
// transactions in the background through an optimistic strategy.
224247
parallelizedConcurrentTransactionProcessor.runAsyncBlock(
225-
worldState,
248+
protocolContext,
226249
blockHeader,
227250
transactions,
228251
miningBeneficiary,

0 commit comments

Comments
 (0)