Warning! This repo/software is under active development
Install Skandha | Chains supported | UserOp Fee history
Run with one-liner:
curl -fsSL https://skandha.run | bash
Or follow the steps below:
- install all dependencies by running
yarn
- build
yarn build && yarn bootstrap
cp config.json.default config.json
- edit
config.json
- (optional) run local geth-node from
test/geth-dev
- run
./skandha
- Skandha will run for all chains available in
config.json
- Networks will be available at
http://localhost:14337/{chainId}/
(e.g. for devhttp://localhost:14337/1337/
)
cp config.json.default config.json
- edit
config.json
docker build -t etherspot/skandha .
docker run --mount type=bind,source="$(pwd)"/config.json,target=/usr/app/config.json,readonly -dp 14337:14337 etherspot/skandha standalone
- Unsafe mode - bypass opcode & stake validation
- Redirect RPC - Redirect ETH rpc calls to the underlying execution client. This is needed if you use UserOp.js
- P2P - Exchange of UserOps between all the nodes in the network. Heavily inspired by the Lodestar's implementation of p2p (https://github.com/ChainSafe/lodestar/)
--unsafeMode
- enables unsafeMode--redirectRpc
- enables redirecting eth rpc calls--executor.bundlingMode manual|auto
- sets bundling mode tomanual
orauto
on start. Default value isauto
{
"networks": {
"dev": { # network Id (check packages/types/src/networks/networks.ts)
"entryPoints": [ # supported entry points
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
],
"relayer": "0xprivateKey", # relayer private key, can access from here or via environment variables (SKANDHA_MUMBAI_RELAYER | SKANDHA_DEV_RELAYER | etc.)
"beneficiary": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", # fee collector, avaiable via env var (SKANDHA_MUMBAI_BENEFICIARY | etc)
"rpcEndpoint": "http://localhost:8545", # rpc provider, also available via env variable (SKANDHA_MUMBAI_RPC | etc)
"minInclusionDenominator": 10, # optional, see EIP-4337
"throttlingSlack": 10, # optional, see EIP-4337
"banSlack": 10 # optional, see EIP-4337
"minSignerBalance": 1, # optional, default is 0.1 ETH. If the relayer's balance drops lower than this, it will be selected as a fee collector
"multicall": "0xcA11bde05977b3631167028862bE2a173976CA11", # optional, multicall3 contract (see https://github.com/mds1/multicall#multicall3-contract-addresses)
"estimationStaticBuffer": 21000, # adds certain amount of gas to callGasLimit on estimation
"validationGasLimit": 10e6, # gas limit during simulateHandleOps and simulateValidation calls
"receiptLookupRange": 1024, # limits the block range of getUserOperationByHash and getUserOperationReceipt
"etherscanApiKey": "", # etherscan api is used to fetch gas prices
"conditionalTransactions": false, # enable conditional transactions
"rpcEndpointSubmit": "", # rpc endpoint that is used only during submission of a bundle
"gasPriceMarkup": 0, # adds % markup on reported gas price via skandha_getGasPrice, 10000 = 100.00%, 500 = 5%
"enforceGasPrice": false, # do not bundle userops with low gas prices
"enforceGasPriceThreshold": 1000, # gas price threshold in bps. If set to 500, userops' gas price is allowed to be 5% lower than the network's gas price
"eip2930": false, # enables eip-2930
"useropsTTL": 300 # Userops time to live (in seconds)
}
}
}
If you have any questions or feedback about the ERC-4337 Bundler project, please feel free to reach out to us.
Licensed under the MIT License.
- Sepolia | QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT | https://ipfs.io/ipfs/QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT?filename=sepolia_canonical_mempool.yaml
- Mumbai | QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE | https://ipfs.io/ipfs/QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE?filename=mumbai_canonical_mempool.yaml