Voltaire is a new modular, developer-friendly and lighting-fast Python Bundler for Ethereum EIP-4337 Account Abstraction. Voltaire is a fully open-source project designed to operate within the peer-to-peer mempool of UserOperations, facilitating the inclusion of transactions on-chain more quickly and efficiently.
The code is available for free on Github under a permissive license for anyone to use without any strings attached. We encourage the community to fork it, contribute with docs, issues, pull requests, questions, or even try to break it.
ERC-4337 Account Abstraction
ERC-4337 is designed to enable account abstraction without compromising on decentralization and censorship resistance. It strives to be as decentralized as the block production of the underlying chain. In practical terms, this means enabling access to smart contract wallets without depending on centralized relayers controlled by a single entity.
The role of centralized relayers here is replaced with a p2p network of new entities called Bundlers.
How Bundlers work
A Bundler can be considered a block-builder, or at least an MEV searcher. As Account Abstraction gains adoption, an increasing part of user transactions would move into bundles. This means that most MEV opportunities will happen in bundles rather than blocks. Any block builder not partnering with a bundler (or becoming one) will be missing out on an increasing portion of the MEV. Bundlers will probably optimize for MEV and make the most of their profits over there.
- Users can propagate
UserOperationsto a network where any bundler can serve them
- Bundlers receive and deliver
UserOperationsto the EntryPoint contract but cannot change them
The flow of UserOperation can be thought of as the following, from a Bundler perspective:
- Wallet Client Software send single
UserOperationstype to Bundlers
- Bundlers keep pending UserOps in memory and share them between other nodes in the mempool
- Bundlers send p2p message on every incoming UserOp
- For efficiency, the p2p protocol support sending multiple userOps in single message - mostly for cases where a new bundler is brought online and synced with the network.
- When it is time to create a bundle, each bundler is free to create a bundle of whatever size and order it likes - from zero to the entire mempool (given tx and block gas limits). This is where flashbot-api for searchers can be integrated.
- The benefit of large bundles - is reduced overheads (the constant 21000, some more overhead of EntryPoint itself, and the variable reduction due to using "warm" addresses that are used between the different ops.
CANDIDE Labs aims to develop Voltaire into a fully compliant and production-grade bundler in Python. Our goal is to push the adoption of contract accounts forward on Ethereum and EVM networks with ERC-4337.
As open-source developers, we looked at every Ethereum client implementation and considered different architectures and languages. So we decided to build Voltaire from scratch with the following criteria: Performance, Modularity, Developer friendly Language and Open Licensing.