Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ are provided with different values, using input as per the execution-apis spec i
- Limit pooled tx requests by size and remove pre-eth/68 transaction announcement support [#9990](https://github.com/besu-eth/besu/pull/9990)
- Reduce tx p2p broadcast bandwidth and memory used [#9937](https://github.com/besu-eth/besu/pull/9937)
- Improve syncing time of the experimental Bonsai Archive storage by migrating after a Bonsai full sync [#9979](https://github.com/besu-eth/besu/pull/9997)
- Layered txpool: enable balance check by default [#10175](https://github.com/besu-eth/besu/pull/10175)

### Plugin API
- Plugin API: Allow the registration of multiple PluginTransactionPoolValidatorFactory [#9964](https://github.com/hyperledger/besu/pull/9964)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@
import org.hyperledger.besu.ethereum.storage.keyvalue.VariablesKeyValueStorage;
import org.hyperledger.besu.ethereum.trie.pathbased.common.provider.WorldStateQueryParams;
import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive;
import org.hyperledger.besu.evm.account.Account;
import org.hyperledger.besu.evm.gascalculator.GasCalculator;
import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem;
import org.hyperledger.besu.plugin.data.AddedBlockContext;
import org.hyperledger.besu.plugin.data.LogWithMetadata;
Expand Down Expand Up @@ -110,6 +112,8 @@ public class BesuEventsImplTest {
@Mock private ProtocolSpec mockProtocolSpec;
@Mock private WorldStateArchive mockWorldStateArchive;
@Mock private MutableWorldState mockWorldState;
@Mock private Account mockSenderAccount;
@Mock private GasCalculator mockGasCalculator;
private TransactionPool transactionPool;
private BlockBroadcaster blockBroadcaster;
private BesuEventsImpl serviceImpl;
Expand Down Expand Up @@ -141,6 +145,7 @@ public void setUp() {
.when(mockProtocolSpec.getTransactionValidatorFactory())
.thenReturn(mockTransactionValidatorFactory);
lenient().when(mockProtocolSpec.getFeeMarket()).thenReturn(FeeMarket.london(0L));
lenient().when(mockProtocolSpec.getGasCalculator()).thenReturn(mockGasCalculator);
lenient()
.when(
mockTransactionValidatorFactory
Expand All @@ -153,6 +158,9 @@ public void setUp() {
lenient()
.when(mockWorldStateArchive.getWorldState(any(WorldStateQueryParams.class)))
.thenReturn(Optional.of(mockWorldState));
lenient().when(mockWorldStateArchive.getWorldState()).thenReturn(mockWorldState);
lenient().when(mockWorldState.get(any())).thenReturn(mockSenderAccount);
lenient().when(mockSenderAccount.getBalance()).thenReturn(Wei.of(10_000_000_000_000_000L));

blockBroadcaster = new BlockBroadcaster(mockEthContext, 10 * ByteUnits.MEGABYTE);
syncState = new SyncState(blockchain, mockEthPeers);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ enum Implementation {
Set<Address> DEFAULT_PRIORITY_SENDERS = Set.of();
Wei DEFAULT_TX_POOL_MIN_GAS_PRICE = Wei.of(1000);
byte DEFAULT_TX_POOL_MIN_SCORE = -128;
boolean DEFAULT_TX_POOL_ENABLE_BALANCE_CHECK = false;
boolean DEFAULT_TX_POOL_ENABLE_BALANCE_CHECK = true;

TransactionPoolConfiguration DEFAULT = ImmutableTransactionPoolConfiguration.builder().build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ protected int compareByFee(final PendingTransaction pt1, final PendingTransactio

@Override
protected void internalBlockAdded(final BlockHeader blockHeader, final FeeMarket feeMarket) {
// no-op
senderBalanceChecker.clear();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@
import org.hyperledger.besu.datatypes.Wei;
import org.hyperledger.besu.ethereum.ProtocolContext;
import org.hyperledger.besu.ethereum.chain.Blockchain;
import org.hyperledger.besu.ethereum.core.BlockHeader;
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransaction;
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
import org.hyperledger.besu.ethereum.trie.pathbased.common.provider.WorldStateQueryParams;
import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive;
import org.hyperledger.besu.evm.account.Account;
import org.hyperledger.besu.evm.worldstate.WorldState;

import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -129,10 +133,20 @@ public boolean hasEnoughBalanceFor(final PendingTransaction pendingTransaction)
}

private Wei getSenderBalance(final Address sender) {
final var maybeAccount = worldStateArchive.getWorldState().get(sender);
final var senderBalance = maybeAccount != null ? maybeAccount.getBalance() : Wei.ZERO;
logSenderBalance(sender, senderBalance);
return senderBalance;
final BlockHeader chainHead = blockchain.getChainHeadHeader();
try (final WorldState headState =
worldStateArchive
.getWorldState(WorldStateQueryParams.withBlockHeaderAndNoUpdateNodeHead(chainHead))
.get()) {
final Account maybeAccount = headState.get(sender);
final Wei senderBalance = maybeAccount != null ? maybeAccount.getBalance() : Wei.ZERO;
logSenderBalance(sender, senderBalance);
return senderBalance;
} catch (Exception e) {
LOG.warn(
"Failed to get balance for {} at chain header {}", sender, chainHead.toLogString(), e);
return Wei.ZERO;
}
}

@Override
Expand Down
Loading