A basic eip4337 "bundler"
This is a reference implementation for a bundler, implementing the full EIP-4337 RPC calls (both production and debug calls), required to pass the bundler-spec-tests test suite.
In order to implement the full spec storage access rules and opcode banning, it must run
against a GETH node, which supports debug_traceCall with javascript "tracer"
Specifically, hardhat node and ganache do NOT support this API.
You can still run the bundler with such nodes, but with --unsafe so it would skip these security checks
If you don't have geth installed locally, you can use docker to run it:
docker run --rm -ti --name geth -p 8545:8545 ethereum/client-go:v1.13.5 \
--miner.gaslimit 12000000 \
--http --http.api personal,eth,net,web3,debug \
--http.vhosts '*,localhost,host.docker.internal' --http.addr "0.0.0.0" \
--allow-insecure-unlock --rpc.allow-unprotected-txs \
--dev \
--verbosity 2 \
--nodiscover --maxpeers 0 --mine \
--networkid 1337
yarn && yarn preprocessyarn hardhat-deploy --network localhostyarn run bundler
(or yarn run bundler --unsafe, if working with "hardhat node")Now your bundler is active on local url http://localhost:3000/rpc
To run a simple test, do yarn run runop --deployFactory --network http://localhost:8545/ --entryPoint 0x0000000071727De22E5E9d8BAf0edAc6f37da032
The runop script:
NOTE: if running on a testnet, you need to supply the bundler (and runop) the network and mnemonic file, e.g.
yarn run bundler --network localhost --mnemonic file.txt
To run the full test bundler spec test suite, visit https://github.com/eth-infinitism/bundler-spec-tests
SDK to create and send UserOperations see SDK Readme
internal utility methods/test contracts, used by other packages.
TypeScript
93.1%
Solidity
4.8%
JavaScript
1.2%
A basic eip4337 "bundler"
This is a reference implementation for a bundler, implementing the full EIP-4337 RPC calls (both production and debug calls), required to pass the bundler-spec-tests test suite.
In order to implement the full spec storage access rules and opcode banning, it must run
against a GETH node, which supports debug_traceCall with javascript "tracer"
Specifically, hardhat node and ganache do NOT support this API.
You can still run the bundler with such nodes, but with --unsafe so it would skip these security checks
If you don't have geth installed locally, you can use docker to run it:
docker run --rm -ti --name geth -p 8545:8545 ethereum/client-go:v1.13.5 \
--miner.gaslimit 12000000 \
--http --http.api personal,eth,net,web3,debug \
--http.vhosts '*,localhost,host.docker.internal' --http.addr "0.0.0.0" \
--allow-insecure-unlock --rpc.allow-unprotected-txs \
--dev \
--verbosity 2 \
--nodiscover --maxpeers 0 --mine \
--networkid 1337
yarn && yarn preprocessyarn hardhat-deploy --network localhostyarn run bundler
(or yarn run bundler --unsafe, if working with "hardhat node")Now your bundler is active on local url http://localhost:3000/rpc
To run a simple test, do yarn run runop --deployFactory --network http://localhost:8545/ --entryPoint 0x0000000071727De22E5E9d8BAf0edAc6f37da032
The runop script:
NOTE: if running on a testnet, you need to supply the bundler (and runop) the network and mnemonic file, e.g.
yarn run bundler --network localhost --mnemonic file.txt
To run the full test bundler spec test suite, visit https://github.com/eth-infinitism/bundler-spec-tests
SDK to create and send UserOperations see SDK Readme
internal utility methods/test contracts, used by other packages.
TypeScript
93.1%
Solidity
4.8%
JavaScript
1.2%