Skip to content

Streamline transaction execution and prepared bytecode reuse#4

Merged
0xjojoex merged 12 commits into
mainfrom
perf/journaled-transaction-shell
Jul 15, 2026
Merged

Streamline transaction execution and prepared bytecode reuse#4
0xjojoex merged 12 commits into
mainfrom
perf/journaled-transaction-shell

Conversation

@0xjojoex

Copy link
Copy Markdown
Owner

Reduce transaction-shell and repeated code-preparation overhead while making transaction lifetime explicit.

  • Change Vm.transact to return a journal-backed PendingTransaction.
    • accept() retains the transaction in the overlay.
    • reject() restores the pre-transaction state without allocation.
    • unresolved transactions reject automatically on deinit.
    • transactCommit remains the accept-and-persist convenience path.
  • Skip full overlay snapshots when no before-transaction hooks exist.
  • Prepare all bytecode before execution; the interpreter now consumes immutable Bytecode.
  • Add an optional caller-owned prepared_code_backend for cross-transaction reuse.
    • ship InMemoryPreparedPool as the default implementation;
    • keep misses and backend-less execution transaction-scoped;
    • pin prepared artifacts across root and nested frames.
  • Reuse resolved code across calls and skip empty sender-code reads on the EOA path.
  • Add calldata zero-count and ModExp fast paths, including differential fuzz coverage.

ExecutionConfig.Preprocessing.none is removed. Execution always uses prepared bytecode; caching remains optional.

@0xjojoex
0xjojoex marked this pull request as ready for review July 15, 2026 08:29
@0xjojoex
0xjojoex merged commit d369702 into main Jul 15, 2026
7 checks passed
@0xjojoex
0xjojoex deleted the perf/journaled-transaction-shell branch July 15, 2026 08:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant