From 61976efde21257060b3a28e42c89156970db619f Mon Sep 17 00:00:00 2001 From: marie-fourier Date: Fri, 22 Sep 2023 13:43:31 +0500 Subject: [PATCH 1/5] wip: ttl --- packages/executor/src/config.ts | 1 + packages/executor/src/entities/MempoolEntry.ts | 13 +++++++++++++ packages/executor/src/executor.ts | 3 ++- packages/executor/src/interfaces.ts | 4 ++++ packages/executor/src/services/MempoolService.ts | 14 ++++++++++---- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/executor/src/config.ts b/packages/executor/src/config.ts index fc8e3013..1945c428 100644 --- a/packages/executor/src/config.ts +++ b/packages/executor/src/config.ts @@ -223,6 +223,7 @@ const bundlerDefaultConfigs: BundlerConfig = { gasPriceMarkup: 0, enforceGasPrice: false, enforceGasPriceThreshold: 1000, + useropsTTL: 60, }; const NETWORKS_ENV = (): string[] | undefined => { diff --git a/packages/executor/src/entities/MempoolEntry.ts b/packages/executor/src/entities/MempoolEntry.ts index 3da251f1..7a64c5ad 100644 --- a/packages/executor/src/entities/MempoolEntry.ts +++ b/packages/executor/src/entities/MempoolEntry.ts @@ -3,6 +3,7 @@ import { 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"; +import { now } from "../utils"; import { IMempoolEntry, MempoolEntrySerialized } from "./interfaces"; export class MempoolEntry implements IMempoolEntry { @@ -75,6 +76,18 @@ export class MempoolEntry implements IMempoolEntry { return true; } + /** + * To replace an entry, a new entry must have at least 10% higher maxPriorityFeePerGas + * and 10% higher maxPriorityFeePerGas than the existingEntry + * Returns true if Entry can replace existingEntry + * @param entry MempoolEntry + * @returns boolaen + */ + canReplaceWithTTL(existingEntry: MempoolEntry, ttl: number): boolean { + if (now() - existingEntry.lastUpdatedTime > ttl) return true; + return this.canReplace(existingEntry); + } + isEqual(entry: MempoolEntry): boolean { return ( entry.chainId === this.chainId && diff --git a/packages/executor/src/executor.ts b/packages/executor/src/executor.ts index 4051c8b3..67ec1d72 100644 --- a/packages/executor/src/executor.ts +++ b/packages/executor/src/executor.ts @@ -84,7 +84,8 @@ export class Executor { this.mempoolService = new MempoolService( this.db, this.chainId, - this.reputationService + this.reputationService, + this.networkConfig ); this.bundlingService = new BundlingService( this.chainId, diff --git a/packages/executor/src/interfaces.ts b/packages/executor/src/interfaces.ts index 22a88b9b..712b6e5e 100644 --- a/packages/executor/src/interfaces.ts +++ b/packages/executor/src/interfaces.ts @@ -128,6 +128,10 @@ export interface NetworkConfig { // if set to 500, then the userop's gas price is allowed to be // 5% lower than the networks gas prices enforceGasPriceThreshold: number; + // Userops time to live in seconds + // default is 60 (seconds) + // after ttl you can replace a userop without increasing gas fees + useropsTTL: number; } export type BundlerConfig = Omit< diff --git a/packages/executor/src/services/MempoolService.ts b/packages/executor/src/services/MempoolService.ts index 0465efbe..552bd082 100644 --- a/packages/executor/src/services/MempoolService.ts +++ b/packages/executor/src/services/MempoolService.ts @@ -6,7 +6,7 @@ import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint"; import { getAddr, now } from "../utils"; import { MempoolEntry } from "../entities/MempoolEntry"; import { IMempoolEntry, MempoolEntrySerialized } from "../entities/interfaces"; -import { StakeInfo } from "../interfaces"; +import { NetworkConfig, StakeInfo } from "../interfaces"; import { ReputationService } from "./ReputationService"; export class MempoolService { @@ -17,7 +17,8 @@ export class MempoolService { constructor( private db: IDbController, private chainId: number, - private reputationService: ReputationService + private reputationService: ReputationService, + private networkConfig: NetworkConfig ) { this.USEROP_COLLECTION_KEY = `${chainId}:USEROPKEYS`; this.USEROP_HASHES_COLLECTION_PREFIX = "USEROPHASH:"; @@ -52,7 +53,9 @@ export class MempoolService { }); const existingEntry = await this.find(entry); if (existingEntry) { - if (!entry.canReplace(existingEntry)) { + if ( + !entry.canReplaceWithTTL(existingEntry, this.networkConfig.useropsTTL) + ) { throw new RpcError( "User op cannot be replaced: fee too low", RpcErrorCodes.INVALID_USEROP @@ -138,7 +141,10 @@ export class MempoolService { userOpHash: "", }); const existingEntry = await this.find(entry); - return !existingEntry || entry.canReplace(existingEntry); + return ( + !existingEntry || + entry.canReplaceWithTTL(existingEntry, this.networkConfig.useropsTTL) + ); } async find(entry: MempoolEntry): Promise { From b2e6962ac1b0636fd59785fcc13b0c5f3b1dbac0 Mon Sep 17 00:00:00 2001 From: marie-fourier Date: Tue, 10 Oct 2023 16:05:22 +0500 Subject: [PATCH 2/5] ttl: bug fix & refactor --- README.md | 3 +- packages/executor/src/config.ts | 9 ++- .../executor/src/entities/MempoolEntry.ts | 7 +- packages/executor/src/entities/interfaces.ts | 2 + packages/executor/src/executor.ts | 4 ++ packages/executor/src/modules/eth.ts | 25 +------ .../executor/src/services/MempoolService.ts | 65 ++++++++++--------- packages/executor/src/services/P2PService.ts | 9 ++- 8 files changed, 67 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 8e89499d..52c2bf92 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,8 @@ Or follow the steps below: "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 + "eip2930": false, # enables eip-2930 + "useropsTTL": 60 # Userops time to live (in seconds) } } } diff --git a/packages/executor/src/config.ts b/packages/executor/src/config.ts index b3aff652..41ec163a 100644 --- a/packages/executor/src/config.ts +++ b/packages/executor/src/config.ts @@ -214,6 +214,13 @@ export class Config { conf.eip2930 || bundlerDefaultConfigs.eip2930 ) ); + conf.useropsTTL = Number( + fromEnvVar( + network, + "USEROPS_TTL", + conf.useropsTTL || bundlerDefaultConfigs.useropsTTL + ) + ); return Object.assign({}, bundlerDefaultConfigs, conf); } @@ -234,8 +241,8 @@ const bundlerDefaultConfigs: BundlerConfig = { gasPriceMarkup: 0, enforceGasPrice: false, enforceGasPriceThreshold: 1000, - useropsTTL: 60, eip2930: false, + useropsTTL: 60, }; const NETWORKS_ENV = (): string[] | undefined => { diff --git a/packages/executor/src/entities/MempoolEntry.ts b/packages/executor/src/entities/MempoolEntry.ts index 7a64c5ad..57b7da77 100644 --- a/packages/executor/src/entities/MempoolEntry.ts +++ b/packages/executor/src/entities/MempoolEntry.ts @@ -24,6 +24,7 @@ export class MempoolEntry implements IMempoolEntry { aggregator, userOpHash, hash, + lastUpdatedTime, }: { chainId: number; userOp: UserOperationStruct; @@ -32,6 +33,7 @@ export class MempoolEntry implements IMempoolEntry { aggregator?: string | undefined; userOpHash: string; hash?: string | undefined; + lastUpdatedTime?: number | undefined; }) { this.chainId = chainId; this.userOp = userOp; @@ -44,7 +46,7 @@ export class MempoolEntry implements IMempoolEntry { if (hash) { this.hash = hash; } - this.lastUpdatedTime = new Date().getTime(); + this.lastUpdatedTime = lastUpdatedTime ?? now(); this.validateAndTransformUserOp(); } @@ -84,7 +86,7 @@ export class MempoolEntry implements IMempoolEntry { * @returns boolaen */ canReplaceWithTTL(existingEntry: MempoolEntry, ttl: number): boolean { - if (now() - existingEntry.lastUpdatedTime > ttl) return true; + if (this.lastUpdatedTime - existingEntry.lastUpdatedTime > ttl * 1000) return true; return this.canReplace(existingEntry); } @@ -147,6 +149,7 @@ export class MempoolEntry implements IMempoolEntry { aggregator: this.aggregator, hash: this.hash, userOpHash: this.userOpHash, + lastUpdatedTime: this.lastUpdatedTime, }; } } diff --git a/packages/executor/src/entities/interfaces.ts b/packages/executor/src/entities/interfaces.ts index ee759e4d..2c647584 100644 --- a/packages/executor/src/entities/interfaces.ts +++ b/packages/executor/src/entities/interfaces.ts @@ -8,6 +8,7 @@ export interface IMempoolEntry { prefund: BigNumberish; aggregator?: string; userOpHash: string; + lastUpdatedTime: number; hash?: string; } @@ -30,6 +31,7 @@ export interface MempoolEntrySerialized { aggregator: string | undefined; userOpHash: string; hash: string | undefined; + lastUpdatedTime: number; } export interface IReputationEntry { diff --git a/packages/executor/src/executor.ts b/packages/executor/src/executor.ts index 8f4bf027..a928b8df 100644 --- a/packages/executor/src/executor.ts +++ b/packages/executor/src/executor.ts @@ -163,5 +163,9 @@ export class Executor { if (this.networkConfig.eip2930) { this.logger.info(`${this.networkName}: [x] EIP2930 ENABLED`); } + + this.logger.info( + `${this.networkName}: [x] USEROPS TTL - ${this.networkConfig.useropsTTL}` + ); } } diff --git a/packages/executor/src/modules/eth.ts b/packages/executor/src/modules/eth.ts index e8913892..d4c5694d 100644 --- a/packages/executor/src/modules/eth.ts +++ b/packages/executor/src/modules/eth.ts @@ -21,10 +21,9 @@ import { ECDSA_DUMMY_SIGNATURE, } from "params/lib"; import { getGasFee } from "params/lib"; -import { NetworkConfig } from "../interfaces"; import { deepHexlify, packUserOp } from "../utils"; import { UserOpValidationService, MempoolService } from "../services"; -import { Logger, Log } from "../interfaces"; +import { Logger, Log, NetworkConfig } from "../interfaces"; import { EstimateUserOperationGasArgs, SendUserOperationGasArgs, @@ -64,16 +63,7 @@ export class Eth { if (!this.validateEntryPoint(entryPoint)) { throw new RpcError("Invalid Entrypoint", RpcErrorCodes.INVALID_REQUEST); } - const validGasFees = await this.mempoolService.isNewOrReplacing( - userOp, - entryPoint - ); - if (!validGasFees) { - throw new RpcError( - "User op cannot be replaced: fee too low", - RpcErrorCodes.INVALID_USEROP - ); - } + await this.mempoolService.validateUserOpReplaceability(userOp, entryPoint); this.logger.debug("Validating user op before sending to mempool..."); await this.userOpValidationService.validateGasFee(userOp); @@ -279,16 +269,7 @@ export class Eth { if (!this.validateEntryPoint(entryPoint)) { throw new RpcError("Invalid Entrypoint", RpcErrorCodes.INVALID_REQUEST); } - const validGasFees = await this.mempoolService.isNewOrReplacing( - userOp, - entryPoint - ); - if (!validGasFees) { - throw new RpcError( - "User op cannot be replaced: fee too low", - RpcErrorCodes.INVALID_USEROP - ); - } + await this.mempoolService.validateUserOpReplaceability(userOp, entryPoint); this.logger.debug( JSON.stringify( await this.userOpValidationService.simulateValidation( diff --git a/packages/executor/src/services/MempoolService.ts b/packages/executor/src/services/MempoolService.ts index 552bd082..eb64ff3f 100644 --- a/packages/executor/src/services/MempoolService.ts +++ b/packages/executor/src/services/MempoolService.ts @@ -53,14 +53,7 @@ export class MempoolService { }); const existingEntry = await this.find(entry); if (existingEntry) { - if ( - !entry.canReplaceWithTTL(existingEntry, this.networkConfig.useropsTTL) - ) { - throw new RpcError( - "User op cannot be replaced: fee too low", - RpcErrorCodes.INVALID_USEROP - ); - } + await this.validateReplaceability(entry, existingEntry); await this.db.put(this.getKey(entry), { ...entry, lastUpdatedTime: now(), @@ -125,28 +118,6 @@ export class MempoolService { await this.db.del(this.USEROP_COLLECTION_KEY); } - /** - * checks if the userOp is new or can replace the existing userOp in mempool - * @returns true if new or replacing - */ - async isNewOrReplacing( - userOp: UserOperationStruct, - entryPoint: string - ): Promise { - const entry = new MempoolEntry({ - chainId: this.chainId, - userOp, - entryPoint, - prefund: "0", - userOpHash: "", - }); - const existingEntry = await this.find(entry); - return ( - !existingEntry || - entry.canReplaceWithTTL(existingEntry, this.networkConfig.useropsTTL) - ); - } - async find(entry: MempoolEntry): Promise { return this.findByKey(this.getKey(entry)); } @@ -159,6 +130,39 @@ export class MempoolService { return null; } + async validateReplaceability( + newEntry: MempoolEntry, + oldEntry?: MempoolEntry | null + ): Promise { + if (!oldEntry) { + oldEntry = await this.find(newEntry); + } + if ( + !oldEntry || + newEntry.canReplaceWithTTL(oldEntry, this.networkConfig.useropsTTL) + ) { + return true; + } + throw new RpcError( + "User op cannot be replaced: fee too low", + RpcErrorCodes.INVALID_USEROP + ); + } + + async validateUserOpReplaceability( + userOp: UserOperationStruct, + entryPoint: string + ): Promise { + const entry = new MempoolEntry({ + chainId: this.chainId, + userOp, + entryPoint, + prefund: "0", + userOpHash: "", + }); + return this.validateReplaceability(entry); + } + getKey(entry: Pick): string { const { userOp, chainId } = entry; return `${chainId}:${userOp.sender.toLowerCase()}:${userOp.nonce}`; @@ -209,6 +213,7 @@ export class MempoolService { aggregator: raw.aggregator, hash: raw.hash, userOpHash: raw.userOpHash, + lastUpdatedTime: raw.lastUpdatedTime, }); } diff --git a/packages/executor/src/services/P2PService.ts b/packages/executor/src/services/P2PService.ts index e9e6c14d..d9760812 100644 --- a/packages/executor/src/services/P2PService.ts +++ b/packages/executor/src/services/P2PService.ts @@ -63,6 +63,13 @@ export class P2PService { userOp: UserOperationStruct, entryPoint: string ): Promise { - return await this.mempoolService.isNewOrReplacing(userOp, entryPoint); + try { + return await this.mempoolService.validateUserOpReplaceability( + userOp, + entryPoint + ); + } catch (err) { + return false; + } } } From 1529e6f1365f2e899bbae750df9437fa41eab6a3 Mon Sep 17 00:00:00 2001 From: marie-fourier Date: Tue, 10 Oct 2023 16:30:22 +0500 Subject: [PATCH 3/5] increase default userops ttl --- README.md | 2 +- packages/executor/src/config.ts | 2 +- packages/executor/src/interfaces.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 52c2bf92..f81bd5d7 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Or follow the steps below: "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": 60 # Userops time to live (in seconds) + "useropsTTL": 300 # Userops time to live (in seconds) } } } diff --git a/packages/executor/src/config.ts b/packages/executor/src/config.ts index 41ec163a..05302976 100644 --- a/packages/executor/src/config.ts +++ b/packages/executor/src/config.ts @@ -242,7 +242,7 @@ const bundlerDefaultConfigs: BundlerConfig = { enforceGasPrice: false, enforceGasPriceThreshold: 1000, eip2930: false, - useropsTTL: 60, + useropsTTL: 300, // 5 minutes }; const NETWORKS_ENV = (): string[] | undefined => { diff --git a/packages/executor/src/interfaces.ts b/packages/executor/src/interfaces.ts index 152d3bec..6d09b5cd 100644 --- a/packages/executor/src/interfaces.ts +++ b/packages/executor/src/interfaces.ts @@ -133,7 +133,7 @@ export interface NetworkConfig { // can not be used in unsafeMode and on chains that dont support 1559 eip2930: boolean; // Userops time to live in seconds - // default is 60 (seconds) + // default is 300 (5 minutes) // after ttl you can replace a userop without increasing gas fees useropsTTL: number; } From 76704d6cae0a94401a3ccfc3483641fd07e98530 Mon Sep 17 00:00:00 2001 From: marie-fourier Date: Thu, 12 Oct 2023 12:10:11 +0500 Subject: [PATCH 4/5] fix protocol prefix --- packages/node/src/reqresp/ReqResp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/reqresp/ReqResp.ts b/packages/node/src/reqresp/ReqResp.ts index fa59981a..ca6a6290 100644 --- a/packages/node/src/reqresp/ReqResp.ts +++ b/packages/node/src/reqresp/ReqResp.ts @@ -17,7 +17,7 @@ import { formatProtocolID } from "./utils"; type ProtocolID = string; -export const DEFAULT_PROTOCOL_PREFIX = "account_abstraction/req"; +export const DEFAULT_PROTOCOL_PREFIX = "/account_abstraction/req"; export interface ReqRespProtocolModules { libp2p: Libp2p; From 34b39b2800963ceb72fa41a1c8533399d2ae581d Mon Sep 17 00:00:00 2001 From: marie-fourier Date: Thu, 12 Oct 2023 12:10:57 +0500 Subject: [PATCH 5/5] chore(release): 1.0.8-alpha --- lerna.json | 2 +- package.json | 2 +- packages/api/package.json | 6 +++--- packages/cli/package.json | 12 ++++++------ packages/db/package.json | 4 ++-- packages/executor/package.json | 6 +++--- packages/node/package.json | 14 +++++++------- packages/params/package.json | 6 +++--- packages/types/package.json | 2 +- packages/utils/package.json | 4 ++-- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/lerna.json b/lerna.json index ccbd496b..d96588d4 100644 --- a/lerna.json +++ b/lerna.json @@ -4,7 +4,7 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "stream": "true", "command": { "version": { diff --git a/package.json b/package.json index eee253ef..840393d6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "root", "private": true, - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "engines": { "node": ">=18.0.0" }, diff --git a/packages/api/package.json b/packages/api/package.json index 3007b767..5232b96f 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "api", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "The API module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -35,12 +35,12 @@ "class-transformer": "0.5.1", "class-validator": "0.14.0", "ethers": "5.7.2", - "executor": "^1.0.7-alpha", + "executor": "^1.0.8-alpha", "fastify": "4.14.1", "pino": "8.11.0", "pino-pretty": "10.0.0", "reflect-metadata": "0.1.13", - "types": "^1.0.7-alpha" + "types": "^1.0.8-alpha" }, "devDependencies": { "@types/connect": "3.4.35" diff --git a/packages/cli/package.json b/packages/cli/package.json index dc391ee2..79551fab 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "cli", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "> TODO: description", "author": "zincoshine ", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -38,14 +38,14 @@ "@libp2p/peer-id-factory": "2.0.1", "@libp2p/prometheus-metrics": "1.1.3", "@multiformats/multiaddr": "12.1.3", - "api": "^1.0.7-alpha", - "db": "^1.0.7-alpha", - "executor": "^1.0.7-alpha", + "api": "^1.0.8-alpha", + "db": "^1.0.8-alpha", + "executor": "^1.0.8-alpha", "find-up": "5.0.0", "got": "12.5.3", "js-yaml": "4.1.0", - "node": "^1.0.7-alpha", - "types": "^1.0.7-alpha", + "node": "^1.0.8-alpha", + "types": "^1.0.8-alpha", "yargs": "17.6.2" }, "devDependencies": { diff --git a/packages/db/package.json b/packages/db/package.json index 622b5948..5c49934b 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,6 +1,6 @@ { "name": "db", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "The DB module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://github.com/etherspot/etherspot-bundler#readme", @@ -33,7 +33,7 @@ "dependencies": { "@chainsafe/ssz": "0.10.1", "@farcaster/rocksdb": "5.5.0", - "types": "^1.0.7-alpha" + "types": "^1.0.8-alpha" }, "devDependencies": { "@types/rocksdb": "3.0.1", diff --git a/packages/executor/package.json b/packages/executor/package.json index b465d110..8250c71e 100644 --- a/packages/executor/package.json +++ b/packages/executor/package.json @@ -1,6 +1,6 @@ { "name": "executor", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "The Relayer module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -33,7 +33,7 @@ "dependencies": { "async-mutex": "0.4.0", "ethers": "5.7.2", - "params": "^1.0.7-alpha", - "types": "^1.0.7-alpha" + "params": "^1.0.8-alpha", + "types": "^1.0.8-alpha" } } diff --git a/packages/node/package.json b/packages/node/package.json index 5a2b7a31..fc2401ec 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "node", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "The bundler node module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -56,24 +56,24 @@ "@libp2p/tcp": "6.1.0", "@multiformats/multiaddr": "11.4.0", "abstract-leveldown": "7.2.0", - "api": "^1.0.7-alpha", + "api": "^1.0.8-alpha", "datastore-core": "8.0.1", - "db": "^1.0.7-alpha", + "db": "^1.0.8-alpha", "ethers": "5.7.2", - "executor": "^1.0.7-alpha", + "executor": "^1.0.8-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", - "params": "^1.0.7-alpha", + "params": "^1.0.8-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.7-alpha", - "utils": "^1.0.7-alpha", + "types": "^1.0.8-alpha", + "utils": "^1.0.8-alpha", "varint": "6.0.0", "xxhash-wasm": "1.0.2" }, diff --git a/packages/params/package.json b/packages/params/package.json index c22e07e0..9d3a161f 100644 --- a/packages/params/package.json +++ b/packages/params/package.json @@ -1,6 +1,6 @@ { "name": "params", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "Various bundler parameters", "author": "Etherspot", "homepage": "https://github.com/etherspot/skandha#readme", @@ -26,8 +26,8 @@ "@eth-optimism/sdk": "3.0.0", "@mantleio/sdk": "0.2.1", "ethers": "5.7.2", - "types": "^1.0.7-alpha", - "utils": "^1.0.7-alpha" + "types": "^1.0.8-alpha", + "utils": "^1.0.8-alpha" }, "scripts": { "clean": "rm -rf lib && rm -f *.tsbuildinfo", diff --git a/packages/types/package.json b/packages/types/package.json index 50f8b7d4..a9e3de07 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "types", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "The types of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", diff --git a/packages/utils/package.json b/packages/utils/package.json index 4cdb5151..6df9665c 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "utils", - "version": "1.0.7-alpha", + "version": "1.0.8-alpha", "description": "utils of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -37,6 +37,6 @@ "case": "^1.6.3", "pino": "8.11.0", "pino-pretty": "10.0.0", - "types": "^1.0.7-alpha" + "types": "^1.0.8-alpha" } }