From 3ce127ec642d074ae23eb94df13aa9813132e555 Mon Sep 17 00:00:00 2001 From: Alex Forshtat Date: Thu, 16 Mar 2023 03:19:23 +0400 Subject: [PATCH] OG-1020: fix some issues in 'calculateDryRunCallGasLimit' AND set version to 3.0.0-beta.5 * OG-1020: some issues in 'calculateDryRunCallGasLimit' 1. Take input gas price instead of re-querying fee history 2. Divide by RelayHub pctRelayFeeDev to avoid hitting false 'paymaster balance too low' error 3. Take 75% to leave some slack for base fee and calldata 4. Console.log what is going on there to simplify debugging * v3.0.0-beta.5 --- lerna.json | 2 +- packages/cli/package.json | 12 +++++----- packages/common/package.json | 4 ++-- packages/common/src/ContractInteractor.ts | 28 ++++++++++++++++++----- packages/contracts/package.json | 2 +- packages/deployer/package.json | 6 ++--- packages/dev/package.json | 14 ++++++------ packages/logger/package.json | 4 ++-- packages/paymasters/package.json | 12 +++++----- packages/provider/package.json | 4 ++-- packages/provider/src/RelayClient.ts | 2 +- packages/relay/package.json | 8 +++---- 12 files changed, 57 insertions(+), 41 deletions(-) diff --git a/lerna.json b/lerna.json index 4af6fcd4c..0528a1880 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/cli/package.json b/packages/cli/package.json index a30ab342d..89299e190 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/cli", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "license": "GPL-3.0-only", "main": "dist/index.js", "bin": { @@ -26,11 +26,11 @@ "dependencies": { "@ethereumjs/tx": "^3.2.0", "@ethersproject/providers": "^5.7.2", - "@opengsn/common": "^3.0.0-beta.3", - "@opengsn/contracts": "^3.0.0-beta.3", - "@opengsn/logger": "^3.0.0-beta.3", - "@opengsn/provider": "^3.0.0-beta.3", - "@opengsn/relay": "^3.0.0-beta.3", + "@opengsn/common": "^3.0.0-beta.5", + "@opengsn/contracts": "^3.0.0-beta.5", + "@opengsn/logger": "^3.0.0-beta.5", + "@opengsn/provider": "^3.0.0-beta.5", + "@opengsn/relay": "^3.0.0-beta.5", "@truffle/hdwallet-provider": "^2.0.10", "@types/asciichart": "^1.5.4", "@types/clear": "^0.1.1", diff --git a/packages/common/package.json b/packages/common/package.json index 5511515ab..366cad5ea 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/common", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "license": "Apache-2.0", "main": "dist/index.js", "scripts": { @@ -25,7 +25,7 @@ "@ethersproject/networks": "^5.7.1", "@ethersproject/providers": "^5.7.2", "@metamask/eth-sig-util": "^4.0.1", - "@opengsn/contracts": "^3.0.0-beta.3", + "@opengsn/contracts": "^3.0.0-beta.5", "@types/bn.js": "^5.1.0", "@types/semver": "^7.3.4", "axios": "^0.21.1", diff --git a/packages/common/src/ContractInteractor.ts b/packages/common/src/ContractInteractor.ts index f819a4072..81786f8ea 100644 --- a/packages/common/src/ContractInteractor.ts +++ b/packages/common/src/ContractInteractor.ts @@ -1312,21 +1312,37 @@ calculateTransactionMaxPossibleGas: result: ${result} ): Promise { const paymasterBalance = await this.hubBalanceOf(paymasterAddress) let workerBalance = constants.MAX_UINT256 // skipping worker address balance check in dry-run + let workerBalanceMessage = '' if (!isSameAddress(workerAddress, constants.DRY_RUN_ADDRESS)) { const workerBalanceStr = await this.getBalance(workerAddress, 'pending') workerBalance = toBN(workerBalanceStr) - } - if (maxFeePerGas.eqn(0)) { - // using base fee override to avoid division by zero - maxFeePerGas = toBN((await this.getGasFees(5, 50)).baseFeePerGas) + workerBalanceMessage = `Worker balance: ${workerBalance.toString()}\n` } const smallerBalance = BN.min(paymasterBalance, workerBalance) + const pctRelayFeeDev = toBN(this.relayHubConfiguration.pctRelayFee.toString()).addn(100) const smallerBalanceGasLimit = smallerBalance.div(maxFeePerGas) - .muln(9).divn(10) // hard-coded to use 90% of available worker/paymaster balance + .muln(100) + .div(pctRelayFeeDev) + .muln(3).divn(4) // hard-coded to use 75% of available worker/paymaster balance const blockGasLimitNum = await this.getBlockGasLimit() const blockGasLimit = toBN(blockGasLimitNum) .muln(3).divn(4) // hard-coded to use 75% of available block gas limit - return BN.max(minViewableGasLimit, BN.min(maxViewableGasLimit, BN.min(smallerBalanceGasLimit, blockGasLimit))) + + const warningMessage = workerBalanceMessage + + `Paymaster balance: ${paymasterBalance.toString()}\n` + + `This is only enough for ${smallerBalanceGasLimit.toString()} gas for a view call at ${maxFeePerGas.toString()} per gas.\n` + + `Also, block gas limit is: ${blockGasLimit.toString()}\n` + if (smallerBalanceGasLimit.lt(minViewableGasLimit)) { + this.logger.warn( + warningMessage + + `Limiting the view call to minViewableGasLimit (${minViewableGasLimit.toString()}) but successful relaying is not likely.`) + return minViewableGasLimit + } + const minimalLimit = BN.min(maxViewableGasLimit, BN.min(smallerBalanceGasLimit, blockGasLimit)) + if (minimalLimit.eq(smallerBalanceGasLimit)) { + this.logger.warn(warningMessage) + } + return minimalLimit } } diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 9a6a14ef0..d23f5dd30 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,7 +1,7 @@ { "name": "@opengsn/contracts", "license": "GPL-3.0-only", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "main": "types/truffle-contracts/index.d.ts", "scripts": { "solpp": "yarn --cwd=\"../..\" solpp", diff --git a/packages/deployer/package.json b/packages/deployer/package.json index 65fc76af5..3ada45cc4 100644 --- a/packages/deployer/package.json +++ b/packages/deployer/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/deployer", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "private": true, "author": "Dror Tirosh", "license": "MIT", @@ -18,8 +18,8 @@ "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers", "@nomiclabs/hardhat-etherscan": "^2.1.8", "@nomiclabs/hardhat-web3": "^2.0.0", - "@opengsn/common": "^3.0.0-beta.3", - "@opengsn/provider": "^3.0.0-beta.3", + "@opengsn/common": "^3.0.0-beta.5", + "@opengsn/provider": "^3.0.0-beta.5", "axios": "^0.27.2", "chai": "^4.3.6", "chalk": "^4.1.2", diff --git a/packages/dev/package.json b/packages/dev/package.json index 06902fb8a..1e4fcfebb 100644 --- a/packages/dev/package.json +++ b/packages/dev/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/dev", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "license": "GPL-3.0-only", "main": "dist/src/index.js", "files": [ @@ -25,12 +25,12 @@ "rm-dist": "rm -rf tsconfig.tsbuildinfo dist build" }, "dependencies": { - "@opengsn/cli": "^3.0.0-beta.3", - "@opengsn/common": "^3.0.0-beta.3", - "@opengsn/contracts": "^3.0.0-beta.3", - "@opengsn/logger": "^3.0.0-beta.3", - "@opengsn/provider": "^3.0.0-beta.3", - "@opengsn/relay": "^3.0.0-beta.3" + "@opengsn/cli": "^3.0.0-beta.5", + "@opengsn/common": "^3.0.0-beta.5", + "@opengsn/contracts": "^3.0.0-beta.5", + "@opengsn/logger": "^3.0.0-beta.5", + "@opengsn/provider": "^3.0.0-beta.5", + "@opengsn/relay": "^3.0.0-beta.5" }, "devDependencies": { "@ethereumjs/common": "^2.6.5", diff --git a/packages/logger/package.json b/packages/logger/package.json index f97e0a8dd..2a93393db 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/logger", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "license": "GPL-3.0-only", "main": "dist/index.js", "files": [ @@ -18,7 +18,7 @@ "rm-dist": "rm -rf tsconfig.tsbuildinfo dist build" }, "dependencies": { - "@opengsn/common": "^3.0.0-beta.3", + "@opengsn/common": "^3.0.0-beta.5", "loglevel": "^1.8.0", "winston": "^3.3.3" } diff --git a/packages/paymasters/package.json b/packages/paymasters/package.json index b28504529..e6264dc28 100644 --- a/packages/paymasters/package.json +++ b/packages/paymasters/package.json @@ -1,7 +1,7 @@ { "name": "@opengsn/paymasters", "license": "GPL-3.0-only", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "scripts": { "truffle-compile": "truffle compile --compile-all", "typechain-generate": "yarn truffle-compile && typechain --target truffle-v5 './build/contracts/**/*.json'", @@ -30,10 +30,10 @@ }, "dependencies": { "@metamask/eth-sig-util": "^4.0.1", - "@opengsn/common": "^3.0.0-beta.3", - "@opengsn/contracts": "^3.0.0-beta.3", - "@opengsn/dev": "^3.0.0-beta.3", - "@opengsn/provider": "^3.0.0-beta.3", + "@opengsn/common": "^3.0.0-beta.5", + "@opengsn/contracts": "^3.0.0-beta.5", + "@opengsn/dev": "^3.0.0-beta.5", + "@opengsn/provider": "^3.0.0-beta.5", "@openzeppelin/contracts": "^4.2.0", "@uniswap/v3-periphery": "^1.1.1", "ethereumjs-util": "^7.1.0", @@ -46,7 +46,7 @@ "devDependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@opengsn/cli": "^3.0.0-beta.3", + "@opengsn/cli": "^3.0.0-beta.5", "@openzeppelin/test-helpers": "^0.5.15", "@types/chai-as-promised": "^7.1.3", "@types/ethereumjs-util": "^6.1.0", diff --git a/packages/provider/package.json b/packages/provider/package.json index 6f84a17c6..ad4d9df19 100644 --- a/packages/provider/package.json +++ b/packages/provider/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/provider", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "license": "Apache-2.0", "main": "dist/index.js", "scripts": { @@ -24,7 +24,7 @@ "@ethersproject/bignumber": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@metamask/eth-sig-util": "^4.0.1", - "@opengsn/common": "^3.0.0-beta.3", + "@opengsn/common": "^3.0.0-beta.5", "abi-decoder": "^2.4.0", "ethereumjs-util": "^7.1.0", "ethereumjs-wallet": "^1.0.2", diff --git a/packages/provider/src/RelayClient.ts b/packages/provider/src/RelayClient.ts index 17ae6ac9c..0e9d520ff 100644 --- a/packages/provider/src/RelayClient.ts +++ b/packages/provider/src/RelayClient.ts @@ -732,7 +732,7 @@ export class RelayClient { const viewCallGasLimit = await this.dependencies.contractInteractor.calculateDryRunCallGasLimit( relayRequest.relayData.paymaster, relayWorkerAddress, - toBN(maxMaxFeePerGas), + toBN(relayRequest.relayData.maxFeePerGas), toBN(this.config.maxViewableGasLimit), toBN(this.config.minViewableGasLimit) ) diff --git a/packages/relay/package.json b/packages/relay/package.json index 6ed979169..0c0e36e62 100644 --- a/packages/relay/package.json +++ b/packages/relay/package.json @@ -1,6 +1,6 @@ { "name": "@opengsn/relay", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "license": "GPL-3.0-only", "main": "dist/runServer.js", "files": [ @@ -20,9 +20,9 @@ "dependencies": { "@ethereumjs/tx": "^3.2.0", "@ethersproject/providers": "^5.7.2", - "@opengsn/common": "^3.0.0-beta.3", - "@opengsn/contracts": "^3.0.0-beta.3", - "@opengsn/logger": "^3.0.0-beta.3", + "@opengsn/common": "^3.0.0-beta.5", + "@opengsn/contracts": "^3.0.0-beta.5", + "@opengsn/logger": "^3.0.0-beta.5", "@seald-io/nedb": "^3.0.0", "@types/cors": "^2.8.12", "@types/express": "^4.17.13",