diff --git a/libs/remix-lib/package.json b/libs/remix-lib/package.json index e514b1827e..e79d38a74c 100644 --- a/libs/remix-lib/package.json +++ b/libs/remix-lib/package.json @@ -25,7 +25,8 @@ "from-exponential": "1.1.1", "solc": "^0.7.4", "string-similarity": "^4.0.4", - "web3": "^4.0.3" + "web3": "^4.0.3", + "web3-validator": "^1.0.2" }, "devDependencies": { "@babel/core": "^7.4.5", @@ -54,4 +55,4 @@ "typings": "src/index.d.ts", "gitHead": "8edf05261b079599b71f0fe2f890b005e2d8a6c3", "types": "./src/index.d.ts" -} \ No newline at end of file +} diff --git a/libs/remix-lib/src/execution/typeConversion.ts b/libs/remix-lib/src/execution/typeConversion.ts index 46a25bff8a..5d7bf97084 100644 --- a/libs/remix-lib/src/execution/typeConversion.ts +++ b/libs/remix-lib/src/execution/typeConversion.ts @@ -1,11 +1,12 @@ 'use strict' import { BN } from 'bn.js' import { bufferToHex } from '@ethereumjs/util' +import { isBigInt } from 'web3-validator' export function toInt (h) { if (h.indexOf && h.indexOf('0x') === 0) { return (new BN(h.replace('0x', ''), 16)).toString(10) - } else if ((h.constructor && h.constructor.name === 'BigNumber') || BN.isBN(h)) { + } else if ((h.constructor && h.constructor.name === 'BigNumber') || BN.isBN(h) || isBigInt(h)) { return h.toString(10) } return h @@ -21,7 +22,7 @@ function convertToString (v) { ret.push(convertToString(v[k])) } return ret - } else if (BN.isBN(v) || (v.constructor && v.constructor.name === 'BigNumber')) { + } else if (BN.isBN(v) || (v.constructor && v.constructor.name === 'BigNumber') || isBigInt(v)) { return v.toString(10) } else if (v._isBuffer) { return bufferToHex(v) diff --git a/libs/remix-simulator/src/VmProxy.ts b/libs/remix-simulator/src/VmProxy.ts index 8fc22415c7..90798c45f7 100644 --- a/libs/remix-simulator/src/VmProxy.ts +++ b/libs/remix-simulator/src/VmProxy.ts @@ -4,7 +4,8 @@ import { helpers } from '@remix-project/remix-lib' const { normalizeHexAddress } = helpers.ui import { ConsoleLogs, hash } from '@remix-project/remix-lib' import { toChecksumAddress, bufferToHex, Address, toBuffer } from '@ethereumjs/util' -import utils, {toBigInt} from 'web3-utils' +import utils from 'web3-utils' +import {isBigInt} from 'web3-validator' import { ethers } from 'ethers' import { VMContext } from './vm-context' import type { StateManager } from '@ethereumjs/statemanager' @@ -278,7 +279,7 @@ export class VmProxy { let consoleArgs = iface.decodeFunctionData(functionDesc, payload) consoleArgs = consoleArgs.map((value) => { // Copied from: https://github.com/web3/web3.js/blob/e68194bdc590d811d4bf66dde12f99659861a110/packages/web3-utils/src/utils.js#L48C10-L48C10 - if (value && value.constructor && value.constructor.name === 'BigNumber') { + if (value && ((value.constructor && value.constructor.name === 'BigNumber') || isBigInt(value))) { return value.toString() } return value @@ -425,9 +426,9 @@ export class VmProxy { getSha3Input (stack, memory) { const memoryStart = toHexPaddedString(stack[stack.length - 1]) const memoryLength = toHexPaddedString(stack[stack.length - 2]) - const memStartDec = toBigInt(memoryStart).toString(10) + const memStartDec = utils.toBigInt(memoryStart).toString(10) const memoryStartInt = parseInt(memStartDec) * 2 - const memLengthDec = toBigInt(memoryLength).toString(10) + const memLengthDec = utils.toBigInt(memoryLength).toString(10) const memoryLengthInt = parseInt(memLengthDec.toString()) * 2 let i = Math.floor(memoryStartInt / 32)