-
Notifications
You must be signed in to change notification settings - Fork 60
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
75 changed files
with
3,045 additions
and
1,064 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,15 +10,26 @@ jobs: | |
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Setup NodeJS | ||
uses: "actions/setup-node@v3" | ||
with: | ||
node-version: 18.15 | ||
|
||
- name: Check if version has been updated | ||
id: check | ||
uses: EndBug/[email protected] | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
file-name: ./package.json | ||
|
||
- name: Log when changed | ||
if: steps.check.outputs.changed == 'true' | ||
run: 'echo "Yayy!! Version change found in commit ${{ steps.check.outputs.commit }}! New version: ${{ steps.check.outputs.version }} (${{ steps.check.outputs.type }})"' | ||
|
||
- name: Dry run Skandha build | ||
run: yarn install && yarn build && yarn run bootstrap | ||
|
||
- name: Log when unchanged | ||
if: steps.check.outputs.changed == 'false' | ||
run: echo "No version change :/ Please update version in package.json!" && exit 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,80 +1,89 @@ | ||
<div align="center"> | ||
<h1 align="center">Skandha</h1> | ||
</div> | ||
|
||
<!-- PROJECT LOGO --> | ||
|
||
<div align="center"> | ||
<img src="https://public.etherspot.io/assets/etherspot.gif" width="200" height="200"> | ||
<p> | ||
<b> | ||
A modular, developer-friendly Typescript Bundler for Ethereum EIP-4337 Account Abstraction | ||
</b> | ||
</p> | ||
</div> | ||
|
||
### Warning! This repo/software is under active development | ||
|
||
## ⚙️ How to run (from Source code) | ||
|
||
Run with one-liner: | ||
|
||
```sh | ||
curl -fsSL https://skandha.run | bash | ||
``` | ||
or follow steps below: | ||
|
||
1. install all dependencies by running `yarn` | ||
2. build `yarn build && yarn bootstrap` | ||
3. `cp config.json.default config.json` | ||
4. edit `config.json` | ||
5. (optional) run local geth-node from `test/geth-dev` | ||
6. run `./skandha` | ||
7. Skandha will run for all chains available in `config.json` | ||
8. Networks will be available at `http://localhost:14337/{chainId}/` (e.g. for dev `http://localhost:14337/1337/`) | ||
|
||
## 🐳 How to run (a Docker image) | ||
|
||
1. `cp config.json.default config.json` | ||
2. edit `config.json` | ||
3. `docker build -t etherspot/skandha .` | ||
4. `docker run --mount type=bind,source="$(pwd)"/config.json,target=/usr/app/config.json,readonly -dp 14337:14337 etherspot/skandha start` | ||
|
||
|
||
## 📜 Additional features | ||
- [x] Unsafe mode - bypass opcode & stake validation | ||
- [x] Redirect RPC - Redirect ETH rpc calls to the underlying execution client. This is needed if you use UserOp.js | ||
- [x] 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/) | ||
|
||
### ⚡️ CLI Options | ||
- `--unsafeMode` - enables unsafeMode | ||
- `--redirectRpc` - enables redirecting eth rpc calls | ||
|
||
## 🔑 Relayer Configuration | ||
|
||
#### config.json | ||
|
||
```json | ||
{ | ||
"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": "0x", # optional, address of multicall3 contract, default is 0xcA11bde05977b3631167028862bE2a173976CA11 (see https://github.com/mds1/multicall#multicall3-contract-addresses) | ||
} | ||
} | ||
} | ||
``` | ||
|
||
#### Mempool_ID of the canonical mempool on various networks | ||
|
||
- Sepolia | QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT | https://ipfs.io/ipfs/QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT?filename=sepolia_canonical_mempool.yaml | ||
<div align="center"> | ||
<h1 align="center">Skandha</h1> | ||
</div> | ||
|
||
<!-- PROJECT LOGO --> | ||
|
||
<div align="center"> | ||
<img src="https://public.etherspot.io/assets/etherspot.gif" width="200" height="200"> | ||
<p> | ||
<b> | ||
A modular, developer-friendly Typescript Bundler for Ethereum EIP-4337 Account Abstraction | ||
</b> | ||
</p> | ||
</div> | ||
|
||
### Warning! This repo/software is under active development | ||
|
||
## ⚙️ How to run (from Source code) | ||
|
||
Run with one-liner: | ||
|
||
```sh | ||
curl -fsSL https://skandha.run | bash | ||
``` | ||
or follow steps below: | ||
|
||
1. install all dependencies by running `yarn` | ||
2. build `yarn build && yarn bootstrap` | ||
3. `cp config.json.default config.json` | ||
4. edit `config.json` | ||
5. (optional) run local geth-node from `test/geth-dev` | ||
6. run `./skandha` | ||
7. Skandha will run for all chains available in `config.json` | ||
8. Networks will be available at `http://localhost:14337/{chainId}/` (e.g. for dev `http://localhost:14337/1337/`) | ||
|
||
## 🐳 How to run (a Docker image) | ||
|
||
1. `cp config.json.default config.json` | ||
2. edit `config.json` | ||
3. `docker build -t etherspot/skandha .` | ||
4. `docker run --mount type=bind,source="$(pwd)"/config.json,target=/usr/app/config.json,readonly -dp 14337:14337 etherspot/skandha start` | ||
|
||
|
||
## 📜 Additional features | ||
- [x] Unsafe mode - bypass opcode & stake validation | ||
- [x] Redirect RPC - Redirect ETH rpc calls to the underlying execution client. This is needed if you use UserOp.js | ||
- [x] 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/) | ||
|
||
### ⚡️ CLI Options | ||
- `--unsafeMode` - enables unsafeMode | ||
- `--redirectRpc` - enables redirecting eth rpc calls | ||
|
||
## 🔑 Relayer Configuration | ||
|
||
#### config.json | ||
|
||
```yaml | ||
{ | ||
"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 | ||
} | ||
} | ||
} | ||
``` | ||
|
||
#### Mempool_ID of the canonical mempool on various networks | ||
|
||
- Sepolia | QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT | https://ipfs.io/ipfs/QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT?filename=sepolia_canonical_mempool.yaml | ||
- Mumbai | QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE | https://ipfs.io/ipfs/QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE?filename=mumbai_canonical_mempool.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import { IsEthereumAddress, ValidateIf } from "class-validator"; | ||
import { BigNumberish } from "ethers"; | ||
import { IsBigNumber } from "../utils/is-bignumber"; | ||
|
||
export class FeeHistoryArgs { | ||
@IsEthereumAddress() | ||
entryPoint!: string; | ||
|
||
@IsBigNumber() | ||
blockCount!: BigNumberish; | ||
|
||
@ValidateIf((o) => o.newestBlock != "latest") | ||
@IsBigNumber() | ||
newestBlock!: BigNumberish | string; | ||
} |
Oops, something went wrong.