Skip to content

refactor(pool): add IntoIter: Send bounds to avoid unnecessary Vec collect#22001

Merged
klkvr merged 11 commits intomainfrom
georgios/validate-iter-send-bound
Feb 9, 2026
Merged

refactor(pool): add IntoIter: Send bounds to avoid unnecessary Vec collect#22001
klkvr merged 11 commits intomainfrom
georgios/validate-iter-send-bound

Conversation

@gakonst
Copy link
Member

@gakonst gakonst commented Feb 9, 2026

Summary

Follow-up to #21969 per @klkvr's review comment.

Changes

  • Add IntoIter: Send bounds to validate_transactions and validate_transactions_with_origin in the TransactionValidator trait and all impls
  • Remove the Vec collect in validate_transactions_with_origin (task.rs) — the iterator can now be passed directly since Map<SendIter, F> satisfies the bound
  • Simplify the default validate_transactions_with_origin to delegate to validate_transactions instead of duplicating join_all logic
  • Remove redundant validate_transactions_with_origin overrides from TransactionValidationTaskExecutor and Either impl (the default delegation handles both correctly)

Testing

cargo check -p reth-transaction-pool -p reth-rpc -p reth-rpc-eth-api -p reth-node-builder  # clean
cargo test -p reth-transaction-pool --lib  # 221/221 pass

gakonst and others added 7 commits February 8, 2026 23:06
…atcher

- Add `origin` field to `BatchTxRequest` so the batcher respects the
  caller-specified origin instead of hardcoding `TransactionOrigin::Local`
- Add `origin` parameter to `EthTransactions::send_transaction` trait method
- Update `EthApiInner::add_pool_transaction` to accept and forward origin
- `BatchTxProcessor::process_batch` groups requests by origin before batch
  insertion via `add_transactions`
- Derive `PartialOrd, Ord` on `TransactionOrigin` for `BTreeMap` grouping
- Existing callers (`send_raw_transaction`, `send_transaction_request`) continue
  to use `TransactionOrigin::Local`

Co-authored-by: klkvr <klkvr@users.noreply.github.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019c3f5c-0c1c-703a-9da7-c46be75e7acf
Co-authored-by: Amp <amp@ampcode.com>
…atcher

- Add `origin` field to `BatchTxRequest`
- Add `TransactionOrigin` parameter to `EthTransactions::send_transaction`
- Add `TransactionPool::add_transactions_with_origins` accepting per-tx origins
  via `Vec<(TransactionOrigin, Transaction)>`
- Make `TransactionPool::add_transactions` a default method delegating to
  `add_transactions_with_origins`
- Inner `Pool::add_transactions` delegates to `Pool::add_transactions_with_origins`
- `BatchTxProcessor::process_batch` uses `add_transactions_with_origins` directly
- Existing callers (`send_raw_transaction`, `send_transaction_request`) continue
  to use `TransactionOrigin::Local`

Co-authored-by: klkvr <klkvr@users.noreply.github.com>
Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019c3f5c-0c1c-703a-9da7-c46be75e7acf
- task.rs: collect mapped iterator into Vec before passing to
  validate_transactions, fixing Send bound error
- transaction.rs: change send_raw_transaction to use
  TransactionOrigin::External instead of Local

Amp-Thread-ID: https://ampcode.com/threads/T-019c4401-f497-7668-a25e-64c6fe49d873
Co-authored-by: Amp <amp@ampcode.com>
Avoids unnecessary Vec collect by requiring the iterator itself
to be Send, not just the container. This allows Map adapters to
pass through without allocation.

Amp-Thread-ID: https://ampcode.com/threads/T-019c4401-f497-7668-a25e-64c6fe49d873
Co-authored-by: Amp <amp@ampcode.com>
@gakonst gakonst requested a review from mattsse as a code owner February 9, 2026 20:50
@gakonst gakonst added the A-rpc Related to the RPC implementation label Feb 9, 2026
@github-project-automation github-project-automation bot moved this to Backlog in Reth Tracker Feb 9, 2026
Keep IntoIter: Send bounds from this branch, which main changed to
plain IntoIterator + Send.

Amp-Thread-ID: https://ampcode.com/threads/T-019c444a-f34b-705c-a8db-38b689d000d5
Co-authored-by: Amp <amp@ampcode.com>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 9, 2026

✅ Changelog found on PR.

Edit changelog

emmajam and others added 3 commits February 9, 2026 16:31
- Default trait impl now delegates to validate_transactions instead of
  duplicating join_all logic
- Remove redundant validate_transactions_with_origin overrides from
  TransactionValidationTaskExecutor and Either impl (the default
  delegation handles both correctly)

Amp-Thread-ID: https://ampcode.com/threads/T-019c444a-f34b-705c-a8db-38b689d000d5
Co-authored-by: Amp <amp@ampcode.com>
@github-project-automation github-project-automation bot moved this from Backlog to In Progress in Reth Tracker Feb 9, 2026
@klkvr klkvr enabled auto-merge February 9, 2026 21:40
@klkvr klkvr added this pull request to the merge queue Feb 9, 2026
Merged via the queue into main with commit a875100 Feb 9, 2026
41 checks passed
@klkvr klkvr deleted the georgios/validate-iter-send-bound branch February 9, 2026 21:57
@github-project-automation github-project-automation bot moved this from In Progress to Done in Reth Tracker Feb 9, 2026
CarlBeek added a commit to CarlBeek/reth that referenced this pull request Feb 10, 2026
* paradigmxyz/main: (144 commits)
  feat(engine): add getPayloadBodiesV2 endpoints for EIP-7928 BAL support (paradigmxyz#21774)
  ci: skip scheduled workflows on forks (paradigmxyz#22022)
  chore: rm random log file (paradigmxyz#22023)
  chore: remove base.reth.rs public endpoint references (paradigmxyz#22019)
  feat(rpc): add `subscribeFinalizedChainNotifications` endpoint (paradigmxyz#22011)
  feat(trie): remove `SerialSparseTrie` (paradigmxyz#21808)
  fix(rocksdb): set max_open_files to prevent fd exhaustion (paradigmxyz#22005)
  refactor(txpool): rename and document validation methods (paradigmxyz#22008)
  feat(engine): prefetch withdrawal addresses in pre-warming (paradigmxyz#21966)
  refactor(pool): add IntoIter: Send bounds to avoid unnecessary Vec collect (paradigmxyz#22001)
  fix(rpc): enforce blockHash constraint in append_matching_block_logs (paradigmxyz#22007)
  chore: move Kurtosis failures to the hive slack channel  (paradigmxyz#21983)
  feat(rpc): propagate TransactionOrigin through send_transaction and batcher (paradigmxyz#21969)
  feat(engine): reorg depth commitment metric (paradigmxyz#21992)
  feat(storage): add use_hashed_state storage setting (paradigmxyz#21997)
  perf: better scheduling for storage roots computation (paradigmxyz#21987)
  chore(deps): bump alloy 1.6.2 -> 1.6.3 (paradigmxyz#21986)
  fix(stages): skip sender unwind when fully pruned (paradigmxyz#21988)
  chore(net): remove OP stack bootnodes (paradigmxyz#21984)
  ci: use depot for hive and kurtosis image builds, run daily (paradigmxyz#21976)
  ...

# Conflicts:
#	.github/workflows/compact.yml
#	.github/workflows/dependencies.yml
#	.github/workflows/docker-tag-latest.yml
#	.github/workflows/docker.yml
#	.github/workflows/e2e.yml
#	.github/workflows/hive.yml
#	.github/workflows/integration.yml
#	.github/workflows/kurtosis.yml
#	.github/workflows/lint.yml
#	.github/workflows/release.yml
#	.github/workflows/reproducible-build.yml
#	.github/workflows/stale.yml
#	.github/workflows/sync-era.yml
#	.github/workflows/sync.yml
#	.github/workflows/unit.yml
#	bin/reth/Cargo.toml
#	crates/cli/commands/src/node.rs
#	crates/node/core/src/node_config.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-rpc Related to the RPC implementation

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants