# vitalik.eth: Transaction actions vs dependencies and EIP-8141's role in scaling Source: https://farcaster.xyz/vitalik.eth/0x3c10fb53 Kiwi News: https://news.kiwistand.com/stories/vitaliketh-Transaction-actions-vs-dependencies-and-EIP-8141s-role-in-scaling?index=0x6a9ca932fa59edfc6f6bb4ccea042b8dfafd8ba23723685273332d1ddd728a2e8c630b0a Submitted by misha on 2026-09-05 UTC, 2 upvotes, 0 comments ## Summary Vitalik Buterin argues that recent work on transaction formats, including EIP-8141, gives a clearer way to separate transaction "actions" from "dependencies," so the two can be optimized separately. An action is an effect a transaction has, such as a call that sends ETH, while a dependency is a fact that must hold for the transaction to be valid, such as a signature, a Merkle proof of a UTXO, or a ZK-SNARK or STARK. Pure dependencies can be processed once at the mempool layer and potentially replaced with a STARK, and the text says Ethereum's scaling strategy requires making statically analyzable features cheaper than dynamic ones. The article states that over 90% of Ethereum's activity by volume does not need dynamic, flexible execution. It describes a general-purpose transaction type as a natural interface layer for these changes and calls EIP-8141 done well preparation for the next few years of scaling. ## Article One positive consequence of all the recent detailed thinking about transaction formats - not just 8141, also "future of state" discussions eg. UTXOs, PBT, keyed nonces, and also recursive STARK mempool - is that we have a much more explicit understanding of how transactions have "actions" and "dependencies", and we can engineer around optimizing the two separately. An action is an effect that a transaction has. A dependency is a fact about the transaction and/or the state that must be true for the transaction to be valid. eg. a signature is a dependency, a Merkle proof of a UTXO is a dependency, a ZK-SNARK (or STARK) is a dependency, a call that sends ETH is an action Dependencies can be processed in parallel. Dependencies that involve state can be reasoned about by a mempool, especially if the specific state accessed is statically declared. Dependencies that are pure (no state calling allowed) can be processed once at the mempool layer and never need to be processed again - and potentially even replaced with a STARK verifying them, allowing not just execution but also data to be elided. In principle, dependencies and actions can all be expressed as calls (if needed, calls to precompiles). This would make the transaction format itself very bare-bones and minimalist (a list of calls, flags for the type of each call eg. dependencies would be static or pure calls, and origin, nonce, etc) and allows maximum cross-compatibility even if different EVM chains have different features. In 2015-era Ethereum, thinking explicitly about these differences was not very important: execution was execution, there were few enough transactions that we could process them all serially, and single-key ECDSA accounts were good enough for everyone. Ethereum's current scaling strategy, however, requires moving beyond that paradigm. Ethereum is beloved by many developers because the execution and state model is so dynamic and flexible. But dynamic and flexible is not friendly to scaling. Fortunately, >90% of Ethereum's activity by volume does not require anything dynamic and flexible. So, we require contracts, accounts and transactions to more explicitly specify what is dynamic and flexible and what is more statically-analyzable but more restrictive, and more statically-analyzable things get the lowest gas cost and thus scale the most. Effectively, learning from the best of both the 2015-era Ethereum model and a more Bitcoin-like model (reminder: Bitcoin has had what I call account abstraction since the beginning), and making a mixture of both (really, the full spectrum between both) available, with gas costs appropriate for the level of scale involved. New state types, the recursive STARK mempool, keyed nonces, etc all go in this direction. This all relates to transaction types, because a general-purpose transaction type is a very natural interface layer on top of which all of this can be implemented, and the current thinking around the EIP-8141 transaction type is going in this exact direction that is friendly to these kinds of future generalizations. So in that sense, 8141 done well is not just a culmination of 10 years of account abstraction work, it's also preparation for the next few years of responsible decentralization-friendly hyper-scaling.