Skip to content

Commit

Permalink
fix address checksum & gas price reported by etH_estimateUserOp
Browse files Browse the repository at this point in the history
  • Loading branch information
0xSulpiride committed Nov 2, 2023
1 parent f488645 commit e87dde7
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 27 deletions.
6 changes: 4 additions & 2 deletions packages/executor/src/entities/MempoolEntry.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { BigNumber, BigNumberish, ethers } from "ethers";
import { hexValue } from "ethers/lib/utils";
import { getAddress, hexValue } from "ethers/lib/utils";
import * as RpcErrorCodes from "types/lib/api/errors/rpc-error-codes";
import RpcError from "types/lib/api/errors/rpc-error";
import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint";
Expand Down Expand Up @@ -111,6 +111,8 @@ export class MempoolEntry implements IMempoolEntry {

validateAndTransformUserOp(): void {
try {
this.userOp.sender = getAddress(this.userOp.sender);
this.entryPoint = getAddress(this.entryPoint);
this.prefund = BigNumber.from(this.prefund);
this.userOp.nonce = BigNumber.from(this.userOp.nonce);
this.userOp.callGasLimit = BigNumber.from(this.userOp.callGasLimit);
Expand All @@ -133,7 +135,7 @@ export class MempoolEntry implements IMempoolEntry {
return {
chainId: this.chainId,
userOp: {
sender: this.userOp.sender,
sender: getAddress(this.userOp.sender),
nonce: hexValue(this.userOp.nonce),
initCode: this.userOp.initCode,
callData: this.userOp.callData,
Expand Down
15 changes: 8 additions & 7 deletions packages/executor/src/executor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,19 @@ export class Executor {
this.mempoolService,
this.reputationService
);
this.skandha = new Skandha(
this.networkName,
this.chainId,
this.provider,
this.config,
this.logger
);
this.eth = new Eth(
this.chainId,
this.provider,
this.userOpValidationService,
this.mempoolService,
this.skandha,
this.networkConfig,
this.logger,
this.nodeApi
Expand All @@ -121,13 +129,6 @@ export class Executor {
this.config,
this.logger
);
this.skandha = new Skandha(
this.networkName,
this.chainId,
this.provider,
this.config,
this.logger
);

if (this.config.testingMode || options.bundlingMode == "manual") {
this.bundlingService.setBundlingMode("manual");
Expand Down
18 changes: 5 additions & 13 deletions packages/executor/src/modules/eth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
EstimateUserOperationGasArgs,
SendUserOperationGasArgs,
} from "./interfaces";
import { Skandha } from "./skandha";

export class Eth {
private pvgEstimator: IPVGEstimator | null = null;
Expand All @@ -38,6 +39,7 @@ export class Eth {
private provider: ethers.providers.JsonRpcProvider,
private userOpValidationService: UserOpValidationService,
private mempoolService: MempoolService,
private skandhaModule: Skandha,
private config: NetworkConfig,
private logger: Logger,
private nodeApi?: INodeAPI
Expand Down Expand Up @@ -190,21 +192,11 @@ export class Eth {
callGasLimit,
};

const gasFee = await getGasFee(
this.chainId,
this.provider,
this.config.etherscanApiKey,
{
entryPoint,
userOp: userOpToEstimate,
}
);
const gasFee = await this.skandhaModule.getGasPrice();

if (this.pvgEstimator) {
userOpComplemented.maxFeePerGas =
gasFee.maxFeePerGas ?? gasFee.gasPrice ?? 1;
userOpComplemented.maxPriorityFeePerGas =
gasFee.maxPriorityFeePerGas ?? gasFee.gasPrice ?? 1;
userOpComplemented.maxFeePerGas = gasFee.maxFeePerGas;
userOpComplemented.maxPriorityFeePerGas = gasFee.maxPriorityFeePerGas;
preVerificationGas = await this.pvgEstimator(
entryPoint,
userOpComplemented,
Expand Down
3 changes: 1 addition & 2 deletions packages/executor/src/services/BundlingService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,7 @@ export class BundlingService {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { gasLimit, ...txWithoutGasLimit } = tx;
// some chains, like Bifrost, don't allow setting gasLimit in estimateGas
const estimatedGasLimit = await wallet.estimateGas(txWithoutGasLimit);
tx.gasLimit = estimatedGasLimit;
await wallet.estimateGas(txWithoutGasLimit);
} catch (err) {
this.logger.error(err);
for (const entry of entries) {
Expand Down
1 change: 1 addition & 0 deletions packages/executor/src/services/MempoolService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { IDbController } from "types/lib";
import RpcError from "types/lib/api/errors/rpc-error";
import * as RpcErrorCodes from "types/lib/api/errors/rpc-error-codes";
import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint";
import { getAddress } from "ethers/lib/utils";
import { getAddr, now } from "../utils";
import { MempoolEntry } from "../entities/MempoolEntry";
import { IMempoolEntry, MempoolEntrySerialized } from "../entities/interfaces";
Expand Down
7 changes: 4 additions & 3 deletions packages/params/src/utils/userOp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Bytes32, UintBn256 } from "types/lib/primitive/sszTypes";
import { fromHex, toHex } from "utils/lib";
import { BigNumber, BigNumberish } from "ethers";
import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint";
import { getAddress } from "ethers/lib/utils";

const bigintToBigNumber = (bn: bigint): BigNumberish => {
return BigNumber.from(UintBn256.fromJson(bn) as unknown as string);
Expand All @@ -23,7 +24,7 @@ export const userOpHashToString = (hash: ts.Bytes32): string => {
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export const deserializeUserOp = (userOp: ts.UserOp) => {
const dUserOp = {
sender: toHex(userOp.sender),
sender: getAddress(toHex(userOp.sender)),
nonce: bigintToBigNumber(userOp.nonce),
initCode: toHex(userOp.initCode),
callData: toHex(userOp.callData),
Expand Down Expand Up @@ -59,7 +60,7 @@ export const deserializeUserOpsWithEP = (

export const serializeUserOp = (userOp: UserOperationStruct): ts.UserOp => {
return {
sender: fromHex(userOp.sender),
sender: fromHex(getAddress(userOp.sender)),
nonce: bigNumberishToBigint(userOp.nonce),
initCode: fromHex(userOp.initCode.toString()),
callData: fromHex(userOp.callData.toString()),
Expand All @@ -80,7 +81,7 @@ export const toUserOpsWithEP = (
blockHash: string
): ts.UserOpsWithEntryPoint => {
return {
entry_point_contract: fromHex(entryPoint),
entry_point_contract: fromHex(getAddress(entryPoint)),
chain_id: bigNumberishToBigint(chainId),
user_operations: userOps.map((userOp) => serializeUserOp(userOp)),
verified_at_block_hash: bigNumberishToBigint(blockHash),
Expand Down

0 comments on commit e87dde7

Please sign in to comment.