@opengsn/common
Advanced tools
Comparing version 3.0.0-beta.4 to 3.0.0-beta.5
@@ -1032,17 +1032,33 @@ "use strict"; | ||
async calculateDryRunCallGasLimit(paymasterAddress, workerAddress, maxFeePerGas, maxViewableGasLimit, minViewableGasLimit) { | ||
const paymasterBalance = await this.hubBalanceOf(paymasterAddress); | ||
let workerBalance = Constants_1.constants.MAX_UINT256; // skipping worker address balance check in dry-run | ||
let workerBalanceMessage = ''; | ||
if (!(0, Utils_1.isSameAddress)(workerAddress, Constants_1.constants.DRY_RUN_ADDRESS)) { | ||
const workerBalanceStr = await this.getBalance(workerAddress, 'pending'); | ||
workerBalance = (0, Web3JSUtils_1.toBN)(workerBalanceStr); | ||
workerBalanceMessage = `Worker balance: ${workerBalance.toString()}\n`; | ||
} | ||
if (maxFeePerGas.eqn(0)) { | ||
// using base fee override to avoid division by zero | ||
maxFeePerGas = (0, Web3JSUtils_1.toBN)((await this.getGasFees(5, 50)).baseFeePerGas); | ||
} | ||
const workerBalanceGasLimit = workerBalance.div(maxFeePerGas) | ||
.muln(9).divn(10); // hard-coded to use 90% of available worker/paymaster balance | ||
const smallerBalance = bn_js_1.default.min(paymasterBalance, workerBalance); | ||
const pctRelayFeeDev = (0, Web3JSUtils_1.toBN)(this.relayHubConfiguration.pctRelayFee.toString()).addn(100); | ||
const smallerBalanceGasLimit = smallerBalance.div(maxFeePerGas) | ||
.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 = (0, Web3JSUtils_1.toBN)(blockGasLimitNum) | ||
.muln(3).divn(4); // hard-coded to use 75% of available block gas limit | ||
return bn_js_1.default.max(minViewableGasLimit, bn_js_1.default.min(maxViewableGasLimit, bn_js_1.default.min(workerBalanceGasLimit, 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_js_1.default.min(maxViewableGasLimit, bn_js_1.default.min(smallerBalanceGasLimit, blockGasLimit)); | ||
if (minimalLimit.eq(smallerBalanceGasLimit)) { | ||
this.logger.warn(warningMessage); | ||
} | ||
return minimalLimit; | ||
} | ||
@@ -1049,0 +1065,0 @@ } |
{ | ||
"name": "@opengsn/common", | ||
"version": "3.0.0-beta.4", | ||
"version": "3.0.0-beta.5", | ||
"license": "Apache-2.0", | ||
@@ -28,3 +28,3 @@ "main": "dist/index.js", | ||
"@metamask/eth-sig-util": "^4.0.1", | ||
"@opengsn/contracts": "^3.0.0-beta.4", | ||
"@opengsn/contracts": "^3.0.0-beta.5", | ||
"@types/bn.js": "^5.1.0", | ||
@@ -43,3 +43,3 @@ "@types/semver": "^7.3.4", | ||
}, | ||
"gitHead": "ea0c6eef34c1fa551711deb85680349eff715e9d" | ||
"gitHead": "59ef288b38d2988bb42c816a55d1890ede93b8c7" | ||
} |
Sorry, the diff of this file is not supported yet
354243
4621