Commit graph

112 commits

Author SHA1 Message Date
Daniel Liu
8be617c17a
fix(core/txpool): fix nonce assignment in local tracker #31496 (#2183) 2026-03-18 11:41:47 +05:30
Daniel Liu
508680055b
fix(core/txpool): allow tx and authority regardless of admission order #31373 (#2185) 2026-03-18 11:35:00 +05:30
Daniel Liu
e647c71f5b
feat(core/txpool): reject stale transaction for local tracking #31473 (#2182) 2026-03-18 11:34:30 +05:30
Daniel Liu
ec0f96d538
feat(core/txpool,eth): align local tx tracking with geth #31202 #31618 (#2181)
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
2026-03-18 09:54:40 +05:30
Daniel Liu
1e5d6e5d1b
docs(core/txpool): notice Clear is not for production #31567 (#2184) 2026-03-17 13:53:42 +05:30
Daniel Liu
13548d5d9e
refactor(core/txpool): remove locals-tracking from pools #30559 (#2176) 2026-03-17 12:24:20 +05:30
Daniel Liu
6f02401575
fix(core/txpool): avoid blocking reset completion on close #31030 (#2175)
* fix(core/txpool): coordinate reset lifecycle and shutdown signaling #28837

Improve txpool loop synchronization around background resets.

This change:
- adds an explicit termination channel to signal pool shutdown
- tracks forced-reset intent and a waiter channel inside the reset loop
- ensures reset waiters are notified on completion or on pool termination
- allows an explicit sync request path to trigger an additional reset round when needed

Scope is limited to internal txpool concurrency control in core/txpool/txpool.go, with no protocol or RPC behavior change.

* fix(core/txpool): avoid blocking reset completion on close #31030
2026-03-17 12:02:17 +05:30
Daniel Liu
cd5ce5ae48
fix(core): use sync.Once for SenderCacher initialization #31029 (#2173) 2026-03-17 12:01:41 +05:30
Daniel Liu
129b1c877b
fix(core/txpool/legacypool): fix flaky test TestAllowedTxSize #30975 (#2172) 2026-03-17 12:01:20 +05:30
Daniel Liu
08d7dbc182
refactor(core/txpool): remove unused parameter local #30871 (#2171) 2026-03-17 11:18:46 +05:30
Daniel Liu
bd355d7b3f
fix(core/txpool/legacypool): prevent uint256 overflow panic in executable tx filtering, fix #2134 (#2168)
A runtime panic was triggered in promoteExecutables/demoteUnexecutables when
account balance was converted with uint256.MustFromBig(...):

panic: overflow
... legacypool.go:1637

Root cause:
- pool.currentState.GetBalance(addr) can exceed uint256 range in this code path.
- uint256.MustFromBig(balance) panics on overflow, crashing the reorg loop.

What this commit changes:
- remove uint256.MustFromBig(balance) from executable/non-executable filtering paths
- change list.Filter costLimit from *uint256.Int to *big.Int, and compare costs using big.Int directly
- keep overflow-safe totalcost accounting for replacements (subtract old cost first, then add new)
- return txpool.ErrSpecialTxCostOverflow for special-tx cost/totalcost overflow instead of returning (false, nil)
- avoid partial pending-state mutation by attaching a new pending list only after overflow-safe totalcost calculation succeeds

Tests:
- add regression coverage for special-tx overflow rejection returning non-nil error
- verify no pending/lookup/nonce mutation on overflow rejection
- cover replacement paths to ensure no intermediate-overflow regressions in list.Add/promoteSpecialTx
2026-03-17 11:18:22 +05:30
Daniel Liu
5b5c39d849
feat(core/txpool): improve error responses #30715 (#2170) 2026-03-17 11:18:01 +05:30
Daniel Liu
eef6327046
perf(core/txpool/legacypool): use maps.Keys and maps.Copy #30091 (#2165)
- slice and map are reference types, we can use themselves as pointers.
- Use maps.Keys and maps.Copy simplify code.
2026-03-17 11:17:44 +05:30
Daniel Liu
7d3e73951f
perf(core/txpool): use the cached address in ValidateTransactionWithState #30208 (#2166)
The address recover is executed and cached in ValidateTransaction already. It's
expected that the cached one is returned in ValidateTransaction. However,
currently, we use the wrong function signer.Sender instead of types.Sender which
will do all the address recover again.

Co-authored-by: minh-bq <97180373+minh-bq@users.noreply.github.com>
2026-03-17 11:17:27 +05:30
Daniel Liu
1ac34cbac3
refactor(core/txpool): no need to log loud rotate if no local txs #29083 (#2164)
* core/txpool: no need to run rotate if no local txs



* Revert "core/txpool: no need to run rotate if no local txs"

This reverts commit 17fab17388.



* use Debug if todo is empty



---------

Signed-off-by: jsvisa <delweng@gmail.com>
Co-authored-by: Delweng <delweng@gmail.com>
2026-03-17 11:17:08 +05:30
Daniel Liu
5b0e2e4bf0
fix(core/txpool): clarify tx validation error messages #29081 (#2163)
Adjust txpool validation error wording to report actual and minimum values consistently.

- intrinsic gas error now reports: gas <actual>, minimum needed <required>

- underpriced tip error now reports: gas tip cap <actual>, minimum needed <required>

No transaction validation logic is changed in this commit; only error message text is updated.
2026-03-17 11:16:44 +05:30
Daniel Liu
df8c94ce5b
docs(core,eth): fix typos #29024 #29036 (#2161) 2026-03-17 11:15:29 +05:30
Daniel Liu
a9be217e6e
fix(core/txpool): coordinate reset lifecycle and shutdown signaling #28837 (#2132)
Improve txpool loop synchronization around background resets.

This change:
- adds an explicit termination channel to signal pool shutdown
- tracks forced-reset intent and a waiter channel inside the reset loop
- ensures reset waiters are notified on completion or on pool termination
- allows an explicit sync request path to trigger an additional reset round when needed

Scope is limited to internal txpool concurrency control in core/txpool/txpool.go, with no protocol or RPC behavior change.
2026-03-17 11:13:47 +05:30
Daniel Liu
7d67a4ead4
refactor(txpool,eth,miner): use pending filter struct #29026 (#2160)
Introduce txpool.PendingFilter and migrate Pending(...) signatures from positional params to a typed struct.

- Add core/txpool.PendingFilter with MinTip/BaseFee fields for cheap call-site filtering
- Update txpool subpool interface and all call sites in eth/miner to pass the filter struct
- Keep behavior unchanged for empty filter (equivalent to previous nil,nil usage)
- Refresh legacypool tests to use the new API shape

This is a refactor-only change intended to improve API clarity and future extensibility without changing consensus or RPC semantics.
2026-03-11 08:58:07 +05:30
Daniel Liu
8850835f6b
perf(core/txpool,miner): speed up pending transaction ordering with uint256 #29008 (#2159)
Switch LazyTransaction gas caps from *big.Int to *uint256.Int and convert once at pending retrieval time.

In miner ordering, keep fee comparisons on uint256 and precompute TRC21 gas price in uint256 form to avoid repeated big-int conversions in heap comparisons.

Also update affected tests and call sites in legacypool/worker/helper paths.

Compatibility: LazyTransaction exported field types changed (GasFeeCap/GasTipCap).
2026-03-11 08:50:56 +05:30
Daniel Liu
b5eec529d0
perf(core/txpool): pre-filter dynamic fees during pending tx retrieval #29005 (#2137)
Introduce dynamic-fee pre-filtering in txpool pending retrieval to reduce
allocations and downstream processing work during mining and tx propagation.

What changed:
- Change the `Pending` API from `Pending(enforceTips bool)` to
  `Pending(minTip *uint256.Int, baseFee *uint256.Int)` in txpool interfaces.
- Implement pre-filtering in `legacypool.Pending` by comparing effective tip
  against the provided `minTip/baseFee` for non-local, non-special txs.
- Update call sites to the new API:
  - miner work assembly (`miner/worker.go`)
  - tx sync (`eth/sync.go`)
  - pool transaction retrieval (`eth/api_backend.go`)
  - protocol/test interfaces (`eth/protocol.go`, `eth/helper_test.go`).

Tests:
- Add targeted coverage for pending filtering semantics in
  `core/txpool/legacypool/legacypool_test.go`, including:
  - minTip threshold boundary behavior
  - baseFee-aware effective tip filtering
  - local/special transaction exemption behavior
  - dynamic-fee boundary behavior when baseFee is nil.

Impact:
- Preserves existing behavior while making pending selection cheaper for
  downstream consumers.
- Improves confidence in edge-case behavior through dedicated tests.
2026-03-11 08:42:09 +05:30
Daniel Liu
5bc363275c
feat(core/txpool): respect nolocals-setting #28435 (#2128) 2026-03-11 07:44:44 +05:30
Daniel Liu
de142957b3
refactor(core/txpool): don't inject lazy resolved transactions into the container #28917 (#2133) 2026-03-11 07:26:37 +05:30
Daniel Liu
9d6e8fc83f
refactor(core/txpool/legacypool): use uint256.Int instead of big.Int #28606 (#2134) 2026-03-10 18:50:40 +05:30
Daniel Liu
f5e2d16f50
refactor‌(core/txpool/legacypool): tiny #28654 (#2131) 2026-03-10 18:48:29 +05:30
Daniel Liu
e9043cceb2
refactor(txpool/legacypool): remove ErrAlreadyKnown in legacypool #28400 (#2127) 2026-03-10 18:45:30 +05:30
Daniel Liu
c8f241ce15
docs(core/txpool/legacypool): fix typos #28258 (#2126) 2026-03-10 18:45:06 +05:30
Daniel Liu
d4a6f43ef2
refactor(core/txpool): migrate tx subscription to SubscribeTransactions #28243 (#2125)
* refactor(txpool): remove wrapper type #27841

Partial backport of ethereum/go-ethereum PR #27841, limited to txpool wrapper removal.

- Migrate txpool interfaces/call sites from `*txpool.Transaction` to `*types.Transaction`
- Update eth/miner/contracts paths and related tests accordingly
- No intended behavior change

Blob sidecar validation/handling changes from upstream are not included here.

* refactor(core/txpool): migrate tx subscription to SubscribeTransactions #28243

Replace the old SubscribeNewTxsEvent-style plumbing with the new
SubscribeTransactions(ch, reorgs) interface across txpool, eth protocol
manager, API backend, miner worker, and test helpers.

Key changes:
- Extend txpool/subpool tx subscription interface with a reorgs flag
- Route eth tx announcement path to reorgs=false (new tx announcements only)
- Route API/miner subscriptions to reorgs=true
- Move subscription-scope cleanup to TxPool.Close()
- Add Gas field to LazyTransaction in legacy pending view

Note:
LegacyPool currently cannot strictly separate newly seen and resurrected txs,
so the reorgs flag is accepted for API compatibility and future blob-subpool
integration.
2026-03-10 18:44:38 +05:30
Daniel Liu
ad0eea0f07
refactor(crypto): vendor in golang.org/x/crypto/sha3 #33323 (#2046)
The upstream libray has removed the assembly-based implementation of
keccak. We need to maintain our own library to avoid a peformance
regression.

---------

Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: lightclient <lightclient@protonmail.com>
2026-02-28 17:23:57 +04:00
Daniel Liu
50210d90e3
refactor(all): remove term whitelist and blacklist (#1994) 2026-02-10 17:09:21 +05:30
Daniel Liu
9dba15a673
feat(core): implement EIP-7623 increase calldata cost 30946 (#2031)
Link to spec: https://eips.ethereum.org/EIPS/eip-7623

---------

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: lightclient <lightclient@protonmail.com>
2026-02-05 14:45:11 +05:30
Daniel Liu
e77ac510d0
all: replace Div/Mul with Rsh/Lsh if possible #29911 (#1966) 2026-01-29 11:31:58 +05:30
Daniel Liu
84aedaa7bf
core/txpool/legacypool: fix stale counter #33653 (#1990) 2026-01-29 11:25:55 +05:30
Daniel Liu
0206909058
core/txpool/legacypool: add metric for accounts in txpool #33646 (#1980) 2026-01-29 11:22:31 +05:30
Daniel Liu
43b005c479
txpool: make unreserve idempotent to avoid false non-reserved errors, fix #1975 (#1976) 2026-01-26 11:20:33 +05:30
Daniel Liu
a1b0d5476d
core/txpool: add 7702 protection to blobpool #31526 (#1930) 2026-01-26 11:20:02 +05:30
Daniel Liu
48b6063261
core/txpool/legacypool: reject gapped tx from delegated account #31430 (#1928) 2026-01-21 13:28:23 +05:30
Daniel Liu
96a9c89aa6
core/txpool: move setcode tx validation into legacyPool #31209 (#1927) 2026-01-21 11:13:10 +05:30
Daniel Liu
c27d49c03e
core/txpool/legacypool: add setCodeTx reorg test #31206 (#1924) 2026-01-21 10:48:47 +05:30
Daniel Liu
217b069ec0
core/txpool, types: add support for SetCode transactions #31073 (#1922) 2026-01-19 14:19:34 +05:30
Daniel Liu
cb48e25ccf
core/txpool: declare address already reserved error #29095 (#1920) 2026-01-19 12:18:08 +05:30
Daniel Liu
3e1f75eafb
core, eth, miner: 4844 blob transaction pool #26940 (#1911) 2026-01-19 11:24:01 +05:30
Daniel Liu
e764d842da
core/txpool/legacypool: narrow down the scope of the variable #27471 (#1910) 2026-01-16 15:52:12 +05:30
Daniel Liu
939225bd87
core/txpool: improve transaction validate (#1921) 2026-01-16 15:45:07 +05:30
Daniel Liu
86cbf4a897
core/txpool/legacypool: handle genesis state missing #28171 (#1919) 2026-01-16 15:43:43 +05:30
Daniel Liu
dee0e37564
core/txpool/legacypool: remove outdated tests #27662 (#1916) 2026-01-16 15:43:13 +05:30
Daniel Liu
b736bd6967
core/txpool: fix typos (#1915) 2026-01-16 15:42:04 +05:30
Daniel Liu
a7050de4f3
core/txpool: remove use of errors.Join function #27523 (#1914) 2026-01-13 16:51:57 +05:30
Daniel Liu
a7ddd8ac03
core/txpool/legacypool: remove redundant check for floatingRatio #27477 (#1913) 2026-01-13 16:51:21 +05:30
Daniel Liu
4addc980f4
core/txpool/legacypool: reheap the priced list if london fork not enabled #27481 (#1912) 2026-01-13 16:51:02 +05:30