miner: implement prioritized addresses (reuse --txpool.locals)
This commit is contained in:
parent
65a11cc6e3
commit
02bfc7b065
|
@ -264,6 +264,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
|
|||
|
||||
eth.miner = miner.New(eth, config.Miner, eth.engine)
|
||||
eth.miner.SetExtra(makeExtraData(config.Miner.ExtraData))
|
||||
eth.miner.SetPrioAddresses(config.TxPool.Locals)
|
||||
|
||||
eth.APIBackend = &EthAPIBackend{stack.Config().ExtRPCEnabled(), stack.Config().AllowUnprotectedTxs, eth, nil}
|
||||
if eth.APIBackend.allowUnprotectedTxs {
|
||||
|
|
|
@ -70,6 +70,7 @@ type Miner struct {
|
|||
chainConfig *params.ChainConfig
|
||||
engine consensus.Engine
|
||||
txpool *txpool.TxPool
|
||||
prio []common.Address // A list of senders to prioritize
|
||||
chain *core.BlockChain
|
||||
pending *pending
|
||||
pendingMu sync.Mutex // Lock protects the pending block
|
||||
|
@ -109,6 +110,12 @@ func (miner *Miner) SetExtra(extra []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (miner *Miner) SetPrioAddresses(prio []common.Address) {
|
||||
miner.confMu.Lock()
|
||||
miner.prio = prio
|
||||
miner.confMu.Unlock()
|
||||
}
|
||||
|
||||
// SetGasCeil sets the gaslimit to strive for when mining blocks post 1559.
|
||||
// For pre-1559 blocks, it sets the ceiling.
|
||||
func (miner *Miner) SetGasCeil(ceil uint64) {
|
||||
|
|
|
@ -420,6 +420,7 @@ func (miner *Miner) commitTransactions(env *environment, plainTxs, blobTxs *tran
|
|||
func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment) error {
|
||||
miner.confMu.RLock()
|
||||
tip := miner.config.GasPrice
|
||||
prio := miner.prio
|
||||
miner.confMu.RUnlock()
|
||||
|
||||
// Retrieve the pending transactions pre-filtered by the 1559/4844 dynamic fees
|
||||
|
@ -439,31 +440,31 @@ func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment)
|
|||
pendingBlobTxs := miner.txpool.Pending(filter)
|
||||
|
||||
// Split the pending transactions into locals and remotes.
|
||||
localPlainTxs, remotePlainTxs := make(map[common.Address][]*txpool.LazyTransaction), pendingPlainTxs
|
||||
localBlobTxs, remoteBlobTxs := make(map[common.Address][]*txpool.LazyTransaction), pendingBlobTxs
|
||||
prioPlainTxs, normalPlainTxs := make(map[common.Address][]*txpool.LazyTransaction), pendingPlainTxs
|
||||
prioBlobTxs, normalBlobTxs := make(map[common.Address][]*txpool.LazyTransaction), pendingBlobTxs
|
||||
|
||||
for _, account := range miner.txpool.Locals() {
|
||||
if txs := remotePlainTxs[account]; len(txs) > 0 {
|
||||
delete(remotePlainTxs, account)
|
||||
localPlainTxs[account] = txs
|
||||
for _, account := range prio {
|
||||
if txs := normalPlainTxs[account]; len(txs) > 0 {
|
||||
delete(normalPlainTxs, account)
|
||||
prioPlainTxs[account] = txs
|
||||
}
|
||||
if txs := remoteBlobTxs[account]; len(txs) > 0 {
|
||||
delete(remoteBlobTxs, account)
|
||||
localBlobTxs[account] = txs
|
||||
if txs := normalBlobTxs[account]; len(txs) > 0 {
|
||||
delete(normalBlobTxs, account)
|
||||
prioBlobTxs[account] = txs
|
||||
}
|
||||
}
|
||||
// Fill the block with all available pending transactions.
|
||||
if len(localPlainTxs) > 0 || len(localBlobTxs) > 0 {
|
||||
plainTxs := newTransactionsByPriceAndNonce(env.signer, localPlainTxs, env.header.BaseFee)
|
||||
blobTxs := newTransactionsByPriceAndNonce(env.signer, localBlobTxs, env.header.BaseFee)
|
||||
if len(prioPlainTxs) > 0 || len(prioBlobTxs) > 0 {
|
||||
plainTxs := newTransactionsByPriceAndNonce(env.signer, prioPlainTxs, env.header.BaseFee)
|
||||
blobTxs := newTransactionsByPriceAndNonce(env.signer, prioBlobTxs, env.header.BaseFee)
|
||||
|
||||
if err := miner.commitTransactions(env, plainTxs, blobTxs, interrupt); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if len(remotePlainTxs) > 0 || len(remoteBlobTxs) > 0 {
|
||||
plainTxs := newTransactionsByPriceAndNonce(env.signer, remotePlainTxs, env.header.BaseFee)
|
||||
blobTxs := newTransactionsByPriceAndNonce(env.signer, remoteBlobTxs, env.header.BaseFee)
|
||||
if len(normalPlainTxs) > 0 || len(normalBlobTxs) > 0 {
|
||||
plainTxs := newTransactionsByPriceAndNonce(env.signer, normalPlainTxs, env.header.BaseFee)
|
||||
blobTxs := newTransactionsByPriceAndNonce(env.signer, normalBlobTxs, env.header.BaseFee)
|
||||
|
||||
if err := miner.commitTransactions(env, plainTxs, blobTxs, interrupt); err != nil {
|
||||
return err
|
||||
|
|
Loading…
Reference in New Issue