Skip to content

Commit

Permalink
feat: create configurable pvg markup (#136)
Browse files Browse the repository at this point in the history
  • Loading branch information
0xSulpiride authored Dec 12, 2023
1 parent 6bb7c8c commit 692d978
Show file tree
Hide file tree
Showing 17 changed files with 84 additions and 51 deletions.
48 changes: 33 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,23 @@ Or follow the steps below:

## 🔑 Relayer Configuration

#### config.json
#### Simplest config.json
```yaml
{
"networks": {
"mumbai": {
"entryPoints": [
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
],
"relayer": "0x{RELAYER-PRIVATE-KEY}",
"beneficiary": "0x{BENEFICIARY-ADDRESS}",
"rpcEndpoint": "https://polygon-mumbai.blockpi.network/v1/rpc/public"
}
}
}
```

#### config.json with a default value of each config parameter

```yaml
{
Expand All @@ -84,26 +100,27 @@ Or follow the steps below:
"minUnstakeDelay": 0, # optional, min unstake delay of an entity
"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)
"whitelistedEntities": { # Entities that bypass stake and opcode validation (array of addresses)
"estimationStaticBuffer": 21000, # optional,adds certain amount of gas to callGasLimit on estimation
"validationGasLimit": 10e6, # optional,gas limit during simulateHandleOps and simulateValidation calls
"receiptLookupRange": 1024, # optional,limits the block range of getUserOperationByHash and getUserOperationReceipt
"etherscanApiKey": "", # optional,etherscan api is used to fetch gas prices
"conditionalTransactions": false, # optional,enable conditional transactions
"rpcEndpointSubmit": "", # optional,rpc endpoint that is used only during submission of a bundle
"gasPriceMarkup": 0, # optional,adds % markup on reported gas price via skandha_getGasPrice, 10000 = 100.00%, 500 = 5%
"enforceGasPrice": false, # optional,do not bundle userops with low gas prices
"enforceGasPriceThreshold": 1000, # optional,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, # optional, enables eip-2930
"useropsTTL": 300, # optional, Userops time to live (in seconds)
"whitelistedEntities": { # optional, Entities that bypass stake and opcode validation (array of addresses)
"factory": [],
"paymaster": [],
"account": []
},
"bundleGasLimitMarkup": 25000, # adds some amount of additional gas to a bundle tx
"bundleGasLimitMarkup": 25000, # optional, adds some amount of additional gas to a bundle tx
"relayingMode": "classic"; # optional, allows to switch to Flashbots Builder api if set to "flashbots", see packages/executor/src/interfaces.ts for more
"bundleInterval": 10000, # bundle creation interval
"bundleSize": 4 # max size of a bundle, 4 userops by default
"bundleSize": 4, # optional, max size of a bundle, 4 userops by default
"pvgMarkup": 0 # optional, adds some gas on top of estimated PVG
}
}
}
Expand All @@ -123,6 +140,7 @@ Licensed under the [MIT License](https://github.com/etherspot/skandha/blob/maste

- Sepolia | QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT | https://ipfs.io/ipfs/QmdDwVFoEEcgv5qnaTB8ncnXGMnqrhnA5nYpRr4ouWe4AT?filename=sepolia_canonical_mempool.yaml
- Mumbai | QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE | https://ipfs.io/ipfs/QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE?filename=mumbai_canonical_mempool.yaml
- Goerli | QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF | https://ipfs.io/ipfs/QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF?filename=goerli_canonical_mempool.yaml

## 🔢 Statistics
![Alt](https://repobeats.axiom.co/api/embed/4d7ec3ece88b2461c5b1757574321f4f6540cdd5.svg "Skandha analytics image")
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
],
"npmClient": "yarn",
"useWorkspaces": true,
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"stream": "true",
"command": {
"version": {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "root",
"private": true,
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"engines": {
"node": ">=18.0.0"
},
Expand Down
8 changes: 4 additions & 4 deletions packages/api/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "api",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "The API module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -35,13 +35,13 @@
"class-transformer": "0.5.1",
"class-validator": "0.14.0",
"ethers": "5.7.2",
"executor": "^1.0.27-alpha",
"executor": "^1.0.28-alpha",
"fastify": "4.14.1",
"monitoring": "^1.0.27-alpha",
"monitoring": "^1.0.28-alpha",
"pino": "8.11.0",
"pino-pretty": "10.0.0",
"reflect-metadata": "0.1.13",
"types": "^1.0.27-alpha"
"types": "^1.0.28-alpha"
},
"devDependencies": {
"@types/connect": "3.4.35"
Expand Down
14 changes: 7 additions & 7 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cli",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "> TODO: description",
"author": "zincoshine <[email protected]>",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -38,15 +38,15 @@
"@libp2p/peer-id-factory": "2.0.1",
"@libp2p/prometheus-metrics": "1.1.3",
"@multiformats/multiaddr": "12.1.3",
"api": "^1.0.27-alpha",
"db": "^1.0.27-alpha",
"executor": "^1.0.27-alpha",
"api": "^1.0.28-alpha",
"db": "^1.0.28-alpha",
"executor": "^1.0.28-alpha",
"find-up": "5.0.0",
"got": "12.5.3",
"js-yaml": "4.1.0",
"monitoring": "^1.0.27-alpha",
"node": "^1.0.27-alpha",
"types": "^1.0.27-alpha",
"monitoring": "^1.0.28-alpha",
"node": "^1.0.28-alpha",
"types": "^1.0.28-alpha",
"yargs": "17.6.2"
},
"devDependencies": {
Expand Down
4 changes: 2 additions & 2 deletions packages/db/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "db",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "The DB module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://github.com/etherspot/etherspot-bundler#readme",
Expand Down Expand Up @@ -33,7 +33,7 @@
"dependencies": {
"@chainsafe/ssz": "0.10.1",
"@farcaster/rocksdb": "5.5.0",
"types": "^1.0.27-alpha"
"types": "^1.0.28-alpha"
},
"devDependencies": {
"@types/rocksdb": "3.0.1",
Expand Down
8 changes: 4 additions & 4 deletions packages/executor/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "executor",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "The Relayer module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -34,8 +34,8 @@
"@flashbots/ethers-provider-bundle": "0.6.2",
"async-mutex": "0.4.0",
"ethers": "5.7.2",
"monitoring": "^1.0.27-alpha",
"params": "^1.0.27-alpha",
"types": "^1.0.27-alpha"
"monitoring": "^1.0.28-alpha",
"params": "^1.0.28-alpha",
"types": "^1.0.28-alpha"
}
}
9 changes: 9 additions & 0 deletions packages/executor/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,14 @@ export class Config {
)
);

conf.pvgMarkup = Number(
fromEnvVar(
network,
"PVG_MARKUP",
conf.pvgMarkup || bundlerDefaultConfigs.pvgMarkup
)
);

// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
if (!conf.whitelistedEntities) {
conf.whitelistedEntities = bundlerDefaultConfigs.whitelistedEntities;
Expand Down Expand Up @@ -337,6 +345,7 @@ const bundlerDefaultConfigs: BundlerConfig = {
bundleInterval: 10000, // 10 seconds
bundleSize: 4, // max size of bundle (in terms of user ops)
relayingMode: "classic",
pvgMarkup: 0,
};

const NETWORKS_ENV = (): string[] | undefined => {
Expand Down
4 changes: 4 additions & 0 deletions packages/executor/src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@ export interface NetworkConfig {
// max bundle size in terms of user ops
// default is 4
bundleSize: number;
// adds markup on PVG
// 1000 = adds 1000 gas on top of estimated PVG
// default = 0
pvgMarkup: number;
}

export type BundlerConfig = Omit<
Expand Down
2 changes: 1 addition & 1 deletion packages/executor/src/modules/eth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ export class Eth {
ov.perUserOp +
ov.perUserOpWord * lengthInWord
);
return ret;
return Math.max(ret + this.config.pvgMarkup, 0);
}

private async getUserOperationEvent(
Expand Down
1 change: 1 addition & 0 deletions packages/executor/src/modules/skandha.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ export class Skandha {
bundleInterval: this.networkConfig.bundleInterval,
bundleSize: this.networkConfig.bundleSize,
minUnstakeDelay: this.networkConfig.minUnstakeDelay,
pvgMarkup: this.networkConfig.pvgMarkup,
};
}

Expand Down
4 changes: 2 additions & 2 deletions packages/monitoring/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "monitoring",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "The Monitoring module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://github.com/etherspot/etherspot-bundler#readme",
Expand Down Expand Up @@ -32,6 +32,6 @@
},
"dependencies": {
"prom-client": "^14.2.0",
"types": "^1.0.27-alpha"
"types": "^1.0.28-alpha"
}
}
16 changes: 8 additions & 8 deletions packages/node/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "node",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "The bundler node module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -56,25 +56,25 @@
"@libp2p/tcp": "6.1.0",
"@multiformats/multiaddr": "11.4.0",
"abstract-leveldown": "7.2.0",
"api": "^1.0.27-alpha",
"api": "^1.0.28-alpha",
"datastore-core": "8.0.1",
"db": "^1.0.27-alpha",
"db": "^1.0.28-alpha",
"ethers": "5.7.2",
"executor": "^1.0.27-alpha",
"executor": "^1.0.28-alpha",
"it-filter": "1.0.2",
"it-map": "1.0.5",
"it-sort": "1.0.0",
"it-take": "1.0.1",
"libp2p": "0.42.2",
"monitoring": "^1.0.27-alpha",
"params": "^1.0.27-alpha",
"monitoring": "^1.0.28-alpha",
"params": "^1.0.28-alpha",
"prettier": "2.8.4",
"snappy": "7.2.2",
"snappyjs": "0.7.0",
"stream-to-it": "0.2.4",
"strict-event-emitter-types": "2.0.0",
"types": "^1.0.27-alpha",
"utils": "^1.0.27-alpha",
"types": "^1.0.28-alpha",
"utils": "^1.0.28-alpha",
"varint": "6.0.0",
"xxhash-wasm": "1.0.2"
},
Expand Down
6 changes: 3 additions & 3 deletions packages/params/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "params",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "Various bundler parameters",
"author": "Etherspot",
"homepage": "https://github.com/etherspot/skandha#readme",
Expand All @@ -26,8 +26,8 @@
"@eth-optimism/sdk": "3.0.0",
"@mantleio/sdk": "0.2.1",
"ethers": "5.7.2",
"types": "^1.0.27-alpha",
"utils": "^1.0.27-alpha"
"types": "^1.0.28-alpha",
"utils": "^1.0.28-alpha"
},
"scripts": {
"clean": "rm -rf lib && rm -f *.tsbuildinfo",
Expand Down
2 changes: 1 addition & 1 deletion packages/types/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "types",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "The types of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down
1 change: 1 addition & 0 deletions packages/types/src/api/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ export type GetConfigResponse = {
bundleInterval: number;
bundleSize: number;
minUnstakeDelay: number;
pvgMarkup: number;
};

export type SupportedEntryPoints = string[];
Expand Down
4 changes: 2 additions & 2 deletions packages/utils/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "utils",
"version": "1.0.27-alpha",
"version": "1.0.28-alpha",
"description": "utils of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -37,6 +37,6 @@
"case": "^1.6.3",
"pino": "8.11.0",
"pino-pretty": "10.0.0",
"types": "^1.0.27-alpha"
"types": "^1.0.28-alpha"
}
}

0 comments on commit 692d978

Please sign in to comment.