mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-19 21:31:37 +00:00
Implements ethereum/go-ethereum PR #31202 and #31618. When local tracking is enabled: - EthAPIBackend.SendTx tracks transactions after pool submission and keeps tracking temporary rejects so they can be retried by the local tracker. - TxPool.AddLocal tracks accepted submissions and temporary rejects for local re-journal/re-submit flows, while preserving the original txpool error return to the caller. This avoids persisting permanently invalid transactions while preserving retry signals for transient failures without masking submission outcomes in caller workflows. Also included: - classify temporary rejection reasons in core/txpool/locals - expose SubPool.ValidateTxBasics and align LegacyPool implementation - split low-tip rejection into ErrTxGasPriceTooLow - simplify local tracker integration in txpool - update txpool and eth tests for accepted vs retryable local tracking behavior Refs: ethereum/go-ethereum#31202 Refs: ethereum/go-ethereum#31618
46 lines
1.6 KiB
Go
46 lines
1.6 KiB
Go
// Copyright 2025 The go-ethereum Authors
|
|
// This file is part of the go-ethereum library.
|
|
//
|
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Lesser General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
package locals
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/XinFinOrg/XDPoSChain/core/txpool"
|
|
"github.com/XinFinOrg/XDPoSChain/core/txpool/legacypool"
|
|
)
|
|
|
|
// IsTemporaryReject determines whether the given error indicates a temporary
|
|
// reason to reject a transaction from being included in the txpool. The result
|
|
// may change if the txpool's state changes later.
|
|
func IsTemporaryReject(err error) bool {
|
|
switch {
|
|
case errors.Is(err, legacypool.ErrOutOfOrderTxFromDelegated):
|
|
return true
|
|
case errors.Is(err, txpool.ErrInflightTxLimitReached):
|
|
return true
|
|
case errors.Is(err, legacypool.ErrAuthorityReserved):
|
|
return true
|
|
case errors.Is(err, txpool.ErrUnderpriced):
|
|
return true
|
|
case errors.Is(err, legacypool.ErrTxPoolOverflow):
|
|
return true
|
|
case errors.Is(err, legacypool.ErrFutureReplacePending):
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|