mirror of
https://github.com/vacp2p/status-linea-besu.git
synced 2026-01-08 21:38:15 -05:00
Allow plugins to propose transactions during block creation (#8268)
* Allow plugins to propose transactions during block creation Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * Apply suggestions from code review Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * Document AbstractStatefulTransactionSelector Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * Unit tests for BlockSizeTransactionSelectorTest Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> --------- Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
This commit is contained in:
@@ -14,11 +14,14 @@
|
||||
*/
|
||||
package org.hyperledger.besu.services;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
|
||||
import org.hyperledger.besu.plugin.data.ProcessableBlockHeader;
|
||||
import org.hyperledger.besu.plugin.services.TransactionSelectionService;
|
||||
import org.hyperledger.besu.plugin.services.txselection.BlockTransactionSelectionService;
|
||||
import org.hyperledger.besu.plugin.services.txselection.PluginTransactionSelector;
|
||||
import org.hyperledger.besu.plugin.services.txselection.PluginTransactionSelectorFactory;
|
||||
|
||||
import java.util.Optional;
|
||||
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager;
|
||||
|
||||
/** The Transaction Selection service implementation. */
|
||||
public class TransactionSelectionServiceImpl implements TransactionSelectionService {
|
||||
@@ -26,18 +29,27 @@ public class TransactionSelectionServiceImpl implements TransactionSelectionServ
|
||||
/** Default Constructor. */
|
||||
public TransactionSelectionServiceImpl() {}
|
||||
|
||||
private Optional<PluginTransactionSelectorFactory> factory = Optional.empty();
|
||||
private PluginTransactionSelectorFactory factory = PluginTransactionSelectorFactory.NO_OP_FACTORY;
|
||||
|
||||
@Override
|
||||
public PluginTransactionSelector createPluginTransactionSelector() {
|
||||
return factory
|
||||
.map(PluginTransactionSelectorFactory::create)
|
||||
.orElse(PluginTransactionSelector.ACCEPT_ALL);
|
||||
public PluginTransactionSelector createPluginTransactionSelector(
|
||||
final SelectorsStateManager selectorsStateManager) {
|
||||
return factory.create(selectorsStateManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectPendingTransactions(
|
||||
final BlockTransactionSelectionService selectionService,
|
||||
final ProcessableBlockHeader pendingBlockHeader) {
|
||||
factory.selectPendingTransactions(selectionService, pendingBlockHeader);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPluginTransactionSelectorFactory(
|
||||
final PluginTransactionSelectorFactory pluginTransactionSelectorFactory) {
|
||||
factory = Optional.ofNullable(pluginTransactionSelectorFactory);
|
||||
checkState(
|
||||
factory == PluginTransactionSelectorFactory.NO_OP_FACTORY,
|
||||
"PluginTransactionSelectorFactory was already registered");
|
||||
factory = pluginTransactionSelectorFactory;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user