Skip to content

Commit

Permalink
Merge pull request #61 from etherspot/callGasLimit-fix
Browse files Browse the repository at this point in the history
fallback values for gas limits during estimation
  • Loading branch information
0xSulpiride authored Jul 26, 2023
2 parents 44295f0 + 7e66298 commit 7f2598a
Show file tree
Hide file tree
Showing 10 changed files with 52 additions and 53 deletions.
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": "0.0.21",
"version": "0.0.22",
"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": "0.0.21",
"version": "0.0.22",
"engines": {
"node": ">=18.0.0"
},
Expand Down
6 changes: 3 additions & 3 deletions packages/api/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "api",
"version": "0.0.21",
"version": "0.0.22",
"description": "The API module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -35,12 +35,12 @@
"class-transformer": "0.5.1",
"class-validator": "0.14.0",
"ethers": "5.7.2",
"executor": "^0.0.21",
"executor": "^0.0.22",
"fastify": "4.14.1",
"pino": "8.11.0",
"pino-pretty": "10.0.0",
"reflect-metadata": "0.1.13",
"types": "^0.0.21"
"types": "^0.0.22"
},
"devDependencies": {
"@types/connect": "3.4.35"
Expand Down
10 changes: 5 additions & 5 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cli",
"version": "0.0.21",
"version": "0.0.22",
"description": "> TODO: description",
"author": "zincoshine <[email protected]>",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -31,13 +31,13 @@
"url": "https://https://github.com/etherspot/skandha/issues"
},
"dependencies": {
"api": "^0.0.21",
"db": "^0.0.21",
"executor": "^0.0.21",
"api": "^0.0.22",
"db": "^0.0.22",
"executor": "^0.0.22",
"find-up": "5.0.0",
"got": "12.5.3",
"js-yaml": "4.1.0",
"types": "^0.0.21",
"types": "^0.0.22",
"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": "0.0.21",
"version": "0.0.22",
"description": "The DB module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://github.com/etherspot/etherspot-bundler#readme",
Expand Down Expand Up @@ -37,6 +37,6 @@
"devDependencies": {
"@types/rocksdb": "3.0.1",
"prettier": "^2.8.4",
"types": "^0.0.21"
"types": "^0.0.22"
}
}
6 changes: 3 additions & 3 deletions packages/executor/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "executor",
"version": "0.0.21",
"version": "0.0.22",
"description": "The Relayer module of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down Expand Up @@ -33,7 +33,7 @@
"dependencies": {
"async-mutex": "0.4.0",
"ethers": "5.7.2",
"params": "^0.0.21",
"types": "^0.0.21"
"params": "^0.0.22",
"types": "^0.0.22"
}
}
63 changes: 33 additions & 30 deletions packages/executor/src/modules/eth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,20 +104,30 @@ export class Eth {
...userOp,
};

if (BigNumber.from(userOpComplemented.callGasLimit).eq(0)) {
userOpComplemented.callGasLimit = BigNumber.from(10e6);
}
if (BigNumber.from(userOpComplemented.preVerificationGas).eq(0)) {
userOpComplemented.preVerificationGas = BigNumber.from(1e6);
}
if (BigNumber.from(userOpComplemented.verificationGasLimit).eq(0)) {
userOpComplemented.verificationGasLimit = BigNumber.from(10e6);
}

if (userOpComplemented.signature === "0x") {
userOpComplemented.signature = await this.getDummySignature({
userOp: userOpComplemented,
entryPoint: args.entryPoint,
});
}

let preVerificationGas: BigNumberish = this.calcPreVerificationGas(userOp);
userOpComplemented.preVerificationGas = preVerificationGas;

const returnInfo = await this.userOpValidationService.validateForEstimation(
userOpComplemented,
entryPoint
);

let preVerificationGas: BigNumberish = this.calcPreVerificationGas(userOp);
userOpComplemented.preVerificationGas = preVerificationGas;
if (this.pvgEstimator) {
preVerificationGas = await this.pvgEstimator(
entryPoint,
Expand All @@ -132,34 +142,26 @@ export class Eth {
let callGasLimit: BigNumber = BigNumber.from(0);

// calculate callGasLimit based on paid fee
// only for undeployed wallets
if (BigNumber.from(userOp.nonce).eq(0)) {
const block = await this.provider.getBlock("latest");
const { estimationBaseFeeDivisor, estimationStaticBuffer } = this.config;
const estimatedBaseFee = block.baseFeePerGas
?.mul(100)
.div(100 + (estimationBaseFeeDivisor || 0));

if (!estimatedBaseFee) {
callGasLimit = BigNumber.from(paid).div(
userOpComplemented.maxFeePerGas
);
} else {
const lhs = BigNumber.from(userOpComplemented.maxFeePerGas);
const rhs = estimatedBaseFee.add(
userOpComplemented.maxPriorityFeePerGas
);
const divisor = lhs.lt(rhs) ? lhs : rhs; // min(maxFeePerGas, base + priorityFee)
callGasLimit = BigNumber.from(paid).div(divisor);
}
callGasLimit = callGasLimit
.sub(preOpGas)
.add(estimationStaticBuffer || 0);
const block = await this.provider.getBlock("latest");
const { estimationBaseFeeDivisor, estimationStaticBuffer } = this.config;
const estimatedBaseFee = block.baseFeePerGas
?.mul(100)
.div(100 + (estimationBaseFeeDivisor || 0));

if (!estimatedBaseFee) {
callGasLimit = BigNumber.from(paid).div(userOpComplemented.maxFeePerGas);
} else {
const lhs = BigNumber.from(userOpComplemented.maxFeePerGas);
const rhs = estimatedBaseFee.add(userOpComplemented.maxPriorityFeePerGas);
const divisor = lhs.lt(rhs) ? lhs : rhs; // min(maxFeePerGas, base + priorityFee)
callGasLimit = BigNumber.from(paid).div(divisor);
}
callGasLimit = callGasLimit.sub(preOpGas).add(estimationStaticBuffer || 0);

if (callGasLimit.lt(0)) {
callGasLimit = BigNumber.from(estimationStaticBuffer || 0);
}
if (callGasLimit.lt(0)) {
callGasLimit = BigNumber.from(estimationStaticBuffer || 0);
}
// }

//< checking for execution revert
const estimatedCallGasLimit = await this.provider
Expand All @@ -175,7 +177,8 @@ export class Eth {
});
//>

// if wallet is deployed it's better to use more precise estimateGas
// if calculation on paid fee failed
// fallback to estimateGas
if (callGasLimit.eq(0)) {
callGasLimit = estimatedCallGasLimit;
}
Expand Down
6 changes: 1 addition & 5 deletions packages/executor/src/services/UserOpValidation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,6 @@ export class UserOpValidationService {
userOp: UserOperationStruct,
entryPoint: string
): Promise<any> {
const { validationGasLimit } = this.networkConfig;

const entryPointContract = EntryPoint__factory.connect(
entryPoint,
this.provider
Expand All @@ -91,9 +89,7 @@ export class UserOpValidationService {
};

const errorResult = await entryPointContract.callStatic
.simulateHandleOp(userOp, AddressZero, BytesZero, {
gasLimit: validationGasLimit,
})
.simulateHandleOp(userOp, AddressZero, BytesZero)
.catch((e: any) => this.nethermindErrorHandler(entryPointContract, e));

if (errorResult.errorName === "FailedOp") {
Expand Down
4 changes: 2 additions & 2 deletions packages/params/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "params",
"version": "0.0.21",
"version": "0.0.22",
"description": "Various bundler parameters",
"author": "Etherspot",
"homepage": "https://github.com/etherspot/skandha#readme",
Expand All @@ -24,7 +24,7 @@
"@arbitrum/sdk": "3.1.4",
"@eth-optimism/sdk": "3.0.0",
"ethers": "5.7.2",
"types": "^0.0.21"
"types": "^0.0.22"
},
"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": "0.0.21",
"version": "0.0.22",
"description": "The types of Etherspot bundler client",
"author": "Etherspot",
"homepage": "https://https://github.com/etherspot/skandha#readme",
Expand Down

0 comments on commit 7f2598a

Please sign in to comment.