essential-eth 0.9.1-next.1 → 0.9.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/essential-eth.esm.mjs +2 -0
- package/dist/essential-eth.esm.mjs.map +1 -0
- package/dist/essential-eth.js +2 -0
- package/dist/essential-eth.js.map +1 -0
- package/dist/essential-eth.modern.mjs +2 -0
- package/dist/essential-eth.modern.mjs.map +1 -0
- package/dist/essential-eth.umd.js +2 -0
- package/dist/essential-eth.umd.js.map +1 -0
- package/dist/logger/package-version.d.ts +1 -0
- package/package.json +11 -13
- package/readme.md +1 -1
- package/dist/cjs/classes/Contract.js +0 -138
- package/dist/cjs/classes/test/Contract/crv-abi.js +0 -488
- package/dist/cjs/classes/test/Contract/ens-abi.js +0 -453
- package/dist/cjs/classes/test/Contract/fei-abi.js +0 -526
- package/dist/cjs/classes/test/Contract/foo-abi.js +0 -42
- package/dist/cjs/classes/test/Contract/uniswap-abi.js +0 -121
- package/dist/cjs/classes/utils/clean-block.js +0 -160
- package/dist/cjs/classes/utils/clean-log.js +0 -37
- package/dist/cjs/classes/utils/clean-transaction-receipt.js +0 -51
- package/dist/cjs/classes/utils/clean-transaction.js +0 -52
- package/dist/cjs/classes/utils/encode-decode-transaction.js +0 -177
- package/dist/cjs/classes/utils/fetchers.js +0 -94
- package/dist/cjs/classes/utils/hex-to-decimal.js +0 -24
- package/dist/cjs/classes/utils/prepare-transaction.js +0 -45
- package/dist/cjs/index.js +0 -56
- package/dist/cjs/index.umd.js +0 -2
- package/dist/cjs/index.umd.js.map +0 -1
- package/dist/cjs/logger/logger.js +0 -36
- package/dist/cjs/logger/package-version.d.ts +0 -1
- package/dist/cjs/logger/package-version.js +0 -5
- package/dist/cjs/providers/AlchemyProvider.js +0 -11
- package/dist/cjs/providers/BaseProvider.js +0 -549
- package/dist/cjs/providers/FallthroughProvider.js +0 -73
- package/dist/cjs/providers/JsonRpcProvider.js +0 -46
- package/dist/cjs/providers/test/json-rpc-provider/get-logs/mocks.js +0 -152
- package/dist/cjs/providers/test/mock-of.js +0 -12
- package/dist/cjs/providers/test/rpc-urls.js +0 -25
- package/dist/cjs/providers/utils/chains-info.js +0 -71
- package/dist/cjs/shared/tiny-big/helpers.js +0 -97
- package/dist/cjs/shared/tiny-big/tiny-big.js +0 -101
- package/dist/cjs/shared/validate-type.js +0 -9
- package/dist/cjs/types/Block.types.js +0 -2
- package/dist/cjs/types/Contract.types.js +0 -2
- package/dist/cjs/types/FeeData.types.js +0 -2
- package/dist/cjs/types/Filter.types.js +0 -2
- package/dist/cjs/types/Network.types.js +0 -2
- package/dist/cjs/types/Transaction.types.js +0 -2
- package/dist/cjs/utils/bytes.js +0 -711
- package/dist/cjs/utils/compute-address.js +0 -34
- package/dist/cjs/utils/compute-public-key.js +0 -26
- package/dist/cjs/utils/ether-to-gwei.js +0 -35
- package/dist/cjs/utils/ether-to-wei.js +0 -35
- package/dist/cjs/utils/gwei-to-ether.js +0 -35
- package/dist/cjs/utils/hash-message.js +0 -30
- package/dist/cjs/utils/is-address.js +0 -39
- package/dist/cjs/utils/keccak256.js +0 -31
- package/dist/cjs/utils/solidity-keccak256.js +0 -138
- package/dist/cjs/utils/split-signature.js +0 -163
- package/dist/cjs/utils/to-checksum-address.js +0 -46
- package/dist/cjs/utils/to-utf8-bytes.js +0 -21
- package/dist/cjs/utils/wei-to-ether.js +0 -45
- package/dist/esm/classes/Contract.d.ts +0 -11
- package/dist/esm/classes/Contract.js +0 -61
- package/dist/esm/classes/test/Contract/crv-abi.d.ts +0 -2
- package/dist/esm/classes/test/Contract/crv-abi.js +0 -470
- package/dist/esm/classes/test/Contract/ens-abi.d.ts +0 -2
- package/dist/esm/classes/test/Contract/ens-abi.js +0 -435
- package/dist/esm/classes/test/Contract/fei-abi.d.ts +0 -2
- package/dist/esm/classes/test/Contract/fei-abi.js +0 -521
- package/dist/esm/classes/test/Contract/foo-abi.d.ts +0 -2
- package/dist/esm/classes/test/Contract/foo-abi.js +0 -33
- package/dist/esm/classes/test/Contract/uniswap-abi.d.ts +0 -2
- package/dist/esm/classes/test/Contract/uniswap-abi.js +0 -116
- package/dist/esm/classes/utils/clean-block.d.ts +0 -2
- package/dist/esm/classes/utils/clean-block.js +0 -35
- package/dist/esm/classes/utils/clean-log.d.ts +0 -2
- package/dist/esm/classes/utils/clean-log.js +0 -26
- package/dist/esm/classes/utils/clean-transaction-receipt.d.ts +0 -2
- package/dist/esm/classes/utils/clean-transaction-receipt.js +0 -35
- package/dist/esm/classes/utils/clean-transaction.d.ts +0 -2
- package/dist/esm/classes/utils/clean-transaction.js +0 -34
- package/dist/esm/classes/utils/encode-decode-transaction.d.ts +0 -4
- package/dist/esm/classes/utils/encode-decode-transaction.js +0 -134
- package/dist/esm/classes/utils/fetchers.d.ts +0 -15
- package/dist/esm/classes/utils/fetchers.js +0 -46
- package/dist/esm/classes/utils/hex-to-decimal.d.ts +0 -1
- package/dist/esm/classes/utils/hex-to-decimal.js +0 -3
- package/dist/esm/classes/utils/prepare-transaction.d.ts +0 -2
- package/dist/esm/classes/utils/prepare-transaction.js +0 -34
- package/dist/esm/index.d.ts +0 -25
- package/dist/esm/index.js +0 -20
- package/dist/esm/logger/logger.d.ts +0 -11
- package/dist/esm/logger/logger.js +0 -33
- package/dist/esm/logger/package-version.d.ts +0 -1
- package/dist/esm/logger/package-version.js +0 -1
- package/dist/esm/providers/AlchemyProvider.d.ts +0 -4
- package/dist/esm/providers/AlchemyProvider.js +0 -7
- package/dist/esm/providers/BaseProvider.d.ts +0 -26
- package/dist/esm/providers/BaseProvider.js +0 -172
- package/dist/esm/providers/FallthroughProvider.d.ts +0 -11
- package/dist/esm/providers/FallthroughProvider.js +0 -49
- package/dist/esm/providers/JsonRpcProvider.d.ts +0 -7
- package/dist/esm/providers/JsonRpcProvider.js +0 -15
- package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.d.ts +0 -14
- package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.js +0 -142
- package/dist/esm/providers/test/mock-of.d.ts +0 -2
- package/dist/esm/providers/test/mock-of.js +0 -1
- package/dist/esm/providers/test/rpc-urls.d.ts +0 -12
- package/dist/esm/providers/test/rpc-urls.js +0 -19
- package/dist/esm/providers/utils/chains-info.d.ts +0 -24
- package/dist/esm/providers/utils/chains-info.js +0 -67
- package/dist/esm/shared/tiny-big/helpers.d.ts +0 -1
- package/dist/esm/shared/tiny-big/helpers.js +0 -58
- package/dist/esm/shared/tiny-big/tiny-big.d.ts +0 -10
- package/dist/esm/shared/tiny-big/tiny-big.js +0 -45
- package/dist/esm/shared/validate-type.d.ts +0 -3
- package/dist/esm/shared/validate-type.js +0 -5
- package/dist/esm/types/Block.types.d.ts +0 -40
- package/dist/esm/types/Block.types.js +0 -1
- package/dist/esm/types/Contract.types.d.ts +0 -24
- package/dist/esm/types/Contract.types.js +0 -1
- package/dist/esm/types/FeeData.types.d.ts +0 -7
- package/dist/esm/types/FeeData.types.js +0 -1
- package/dist/esm/types/Filter.types.d.ts +0 -12
- package/dist/esm/types/Filter.types.js +0 -1
- package/dist/esm/types/Network.types.d.ts +0 -5
- package/dist/esm/types/Network.types.js +0 -1
- package/dist/esm/types/Transaction.types.d.ts +0 -113
- package/dist/esm/types/Transaction.types.js +0 -1
- package/dist/esm/utils/bytes.d.ts +0 -40
- package/dist/esm/utils/bytes.js +0 -245
- package/dist/esm/utils/compute-address.d.ts +0 -1
- package/dist/esm/utils/compute-address.js +0 -12
- package/dist/esm/utils/compute-public-key.d.ts +0 -2
- package/dist/esm/utils/compute-public-key.js +0 -6
- package/dist/esm/utils/ether-to-gwei.d.ts +0 -3
- package/dist/esm/utils/ether-to-gwei.js +0 -7
- package/dist/esm/utils/ether-to-wei.d.ts +0 -3
- package/dist/esm/utils/ether-to-wei.js +0 -7
- package/dist/esm/utils/gwei-to-ether.d.ts +0 -3
- package/dist/esm/utils/gwei-to-ether.js +0 -7
- package/dist/esm/utils/hash-message.d.ts +0 -2
- package/dist/esm/utils/hash-message.js +0 -14
- package/dist/esm/utils/is-address.d.ts +0 -1
- package/dist/esm/utils/is-address.js +0 -12
- package/dist/esm/utils/keccak256.d.ts +0 -2
- package/dist/esm/utils/keccak256.js +0 -13
- package/dist/esm/utils/solidity-keccak256.d.ts +0 -2
- package/dist/esm/utils/solidity-keccak256.js +0 -85
- package/dist/esm/utils/split-signature.d.ts +0 -2
- package/dist/esm/utils/split-signature.js +0 -126
- package/dist/esm/utils/to-checksum-address.d.ts +0 -1
- package/dist/esm/utils/to-checksum-address.js +0 -25
- package/dist/esm/utils/to-utf8-bytes.d.ts +0 -1
- package/dist/esm/utils/to-utf8-bytes.js +0 -3
- package/dist/esm/utils/wei-to-ether.d.ts +0 -3
- package/dist/esm/utils/wei-to-ether.js +0 -16
- /package/dist/{cjs/classes → classes}/Contract.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/test/Contract/crv-abi.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/test/Contract/ens-abi.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/test/Contract/fei-abi.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/test/Contract/foo-abi.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/test/Contract/uniswap-abi.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/clean-block.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/clean-log.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/clean-transaction-receipt.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/clean-transaction.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/encode-decode-transaction.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/fetchers.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/hex-to-decimal.d.ts +0 -0
- /package/dist/{cjs/classes → classes}/utils/prepare-transaction.d.ts +0 -0
- /package/dist/{cjs/index.d.ts → index.d.ts} +0 -0
- /package/dist/{cjs/logger → logger}/logger.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/AlchemyProvider.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/BaseProvider.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/FallthroughProvider.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/JsonRpcProvider.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/test/json-rpc-provider/get-logs/mocks.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/test/mock-of.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/test/rpc-urls.d.ts +0 -0
- /package/dist/{cjs/providers → providers}/utils/chains-info.d.ts +0 -0
- /package/dist/{cjs/shared → shared}/tiny-big/helpers.d.ts +0 -0
- /package/dist/{cjs/shared → shared}/tiny-big/tiny-big.d.ts +0 -0
- /package/dist/{cjs/shared → shared}/validate-type.d.ts +0 -0
- /package/dist/{cjs/types → types}/Block.types.d.ts +0 -0
- /package/dist/{cjs/types → types}/Contract.types.d.ts +0 -0
- /package/dist/{cjs/types → types}/FeeData.types.d.ts +0 -0
- /package/dist/{cjs/types → types}/Filter.types.d.ts +0 -0
- /package/dist/{cjs/types → types}/Network.types.d.ts +0 -0
- /package/dist/{cjs/types → types}/Transaction.types.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/bytes.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/compute-address.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/compute-public-key.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/ether-to-gwei.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/ether-to-wei.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/gwei-to-ether.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/hash-message.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/is-address.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/keccak256.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/solidity-keccak256.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/split-signature.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/to-checksum-address.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/to-utf8-bytes.d.ts +0 -0
- /package/dist/{cjs/utils → utils}/wei-to-ether.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"essential-eth.modern.mjs","sources":["../src/classes/utils/hex-to-decimal.ts","../src/shared/tiny-big/helpers.ts","../src/shared/tiny-big/tiny-big.ts","../src/shared/validate-type.ts","../src/utils/to-checksum-address.ts","../src/classes/utils/encode-decode-transaction.ts","../src/classes/Contract.ts","../src/classes/utils/clean-transaction.ts","../src/classes/utils/clean-log.ts","../src/classes/utils/fetchers.ts","../src/logger/logger.ts","../src/logger/package-version.ts","../src/utils/bytes.ts","../src/classes/utils/prepare-transaction.ts","../src/providers/utils/chains-info.ts","../src/providers/BaseProvider.ts","../src/classes/utils/clean-transaction-receipt.ts","../src/classes/utils/clean-block.ts","../src/providers/JsonRpcProvider.ts","../src/providers/AlchemyProvider.ts","../src/providers/FallthroughProvider.ts","../src/utils/compute-public-key.ts","../src/utils/keccak256.ts","../src/utils/compute-address.ts","../src/utils/ether-to-gwei.ts","../src/utils/ether-to-wei.ts","../src/utils/gwei-to-ether.ts","../src/utils/to-utf8-bytes.ts","../src/utils/hash-message.ts","../src/utils/is-address.ts","../src/utils/split-signature.ts","../src/utils/wei-to-ether.ts","../src/utils/solidity-keccak256.ts"],"sourcesContent":["/**\n * Converts a hexadecimal string it's decimal equivalent.\n * This is needed instead of parseInt because parseInt loses precision.\n *\n * @param hex the hex string to be converted to decimal\n * @returns a decimal value equivalent to the hex string given\n * @example\n * ```javascript\n * hexToDecimal('0x34');\n * // 52\n * ```\n * @example\n * ```javascript\n * hexToDecimal('0x628608');\n * // 6456840\n * ```\n */\nexport function hexToDecimal(hex: string) {\n return BigInt(hex).toString();\n}\n","/**\n * Strips both leading and trailing zeroes from a number string\n *\n * @param numberString the string of numbers to strip zeros from\n * @returns a string of numbers without leading or trailing zeros\n * @example\n * ```javascript\n * stripTrailingZeros('0005280');\n * // '5280'\n * ```\n */\nfunction stripTrailingZeroes(numberString: string) {\n const isNegative = numberString.startsWith('-');\n numberString = numberString.replace('-', '');\n\n numberString = numberString.replace(\n /\\.0*$/g,\n '' /* for numbers like \"1.0\" -> \"1\" */,\n );\n numberString = numberString.replace(/^0+/, '');\n // for numbers like \"1.10\" -> \"1.1\"\n if (numberString.includes('.')) {\n numberString = numberString.replace(/0+$/, '');\n }\n if (numberString.startsWith('.')) {\n // so that \".1\" returns as \"0.1\"\n numberString = `0${numberString}`;\n }\n return `${isNegative ? '-' : ''}${numberString}`;\n}\n\n/**\n * Converts a string in scientific notation formatting to string in decimal format\n *\n * @param scientificString a string in scientific format to convert to decimal\n * @returns a string of a decimal number equivalent to the specified scientificString\n * @example\n * ```javascript\n * scientificStrToDecimalStr('2.3e-5');\n * // '0.000023'\n * ```\n * @example\n * ```javascript\n * scientificStrToDecimalStr('2.3e+5');\n * // '230000'\n * ```\n */\nexport function scientificStrToDecimalStr(scientificString: string): string {\n // Does not contain \"e\" nor \"E\"\n if (!scientificString.match(/e/i /* lowercase and uppercase E */)) {\n return stripTrailingZeroes(scientificString);\n }\n\n // eslint-disable-next-line prefer-const\n let [base, power] = scientificString.split(\n /e/i /* lowercase and uppercase E */,\n );\n\n // remove the leading \"-\" if negative\n const isNegative = Number(base) < 0;\n base = base.replace('-', '');\n\n base = stripTrailingZeroes(base);\n const [wholeNumber, fraction /* move decimal this many places */ = ''] =\n base.split('.');\n if (Number(power) === 0) {\n return `${isNegative ? '-' : ''}${stripTrailingZeroes(base)}`;\n } else {\n const includesDecimal = base.includes('.');\n if (!includesDecimal) {\n base = `${base}.`;\n }\n base = base.replace('.', '');\n const baseLength = base.length;\n let splitPaddedNumber;\n if (Number(power) < 0) {\n // move decimal left\n if (wholeNumber.length < Math.abs(Number(power))) {\n base = base.padStart(\n baseLength + Math.abs(Number(power)) - wholeNumber.length,\n '0',\n );\n }\n splitPaddedNumber = base.split('');\n if (wholeNumber.length < Math.abs(Number(power))) {\n // starts with zeroes\n splitPaddedNumber = ['.', ...splitPaddedNumber];\n } else {\n splitPaddedNumber.splice(\n splitPaddedNumber.length - Math.abs(Number(power)),\n 0,\n '.',\n );\n }\n } else {\n // move decimal right\n if (fraction.length < Math.abs(Number(power))) {\n base = base.padEnd(\n baseLength + Math.abs(Number(power)) - fraction.length,\n '0',\n );\n }\n splitPaddedNumber = base.split('');\n if (fraction.length > Math.abs(Number(power))) {\n splitPaddedNumber.splice(\n splitPaddedNumber.length - Math.abs(Number(power)),\n 0,\n '.',\n );\n }\n }\n const toReturn = stripTrailingZeroes(splitPaddedNumber.join(''));\n return `${isNegative ? '-' : ''}${toReturn}`;\n }\n}\n","import Big from 'big.js';\nimport { hexToDecimal } from '../../classes/utils/hex-to-decimal';\nimport { scientificStrToDecimalStr } from './helpers';\n\n/**\n * A wrapper around [big.js](https://github.com/MikeMcl/big.js) which expands scientific notation and creates a \"toHexString\" function.\n * This is the return type of every operation on ether, wei, etc.\n */\nexport class TinyBig extends Big {\n constructor(value: string | number | TinyBig | Big) {\n if (typeof value === 'string' && value.startsWith('0x')) {\n value = hexToDecimal(value);\n }\n super(value);\n }\n /**\n * Used anytime you're passing in \"value\" to ethers or web3\n * For now, TypeScript will complain that `TinyBig` is not a `BigNumberish`. You can // @ts-ignore or call this\n *\n * @returns the TinyBig represented as a hex string\n * @example\n * ```javascript\n * tinyBig(293).toHexString();\n * // '0x125'\n * ```\n * @example\n * ```javascript\n * tinyBig(681365874).toHexString();\n * // '0x289cd172'\n */\n toHexString(): string {\n return `0x${BigInt(this.toString()).toString(16)}`;\n }\n toNumber(): number {\n return Number(scientificStrToDecimalStr(super.toString()));\n }\n\n toString(): string {\n if (this.toNumber() === 0) {\n return '0';\n }\n return scientificStrToDecimalStr(super.toString());\n }\n\n /**\n * Eithers pads or shortens a string to a specified length\n *\n * @param str the string to pad or chop\n * @param padChar the character to pad the string with\n * @param length the desired length of the given string\n * @returns a string of the desired length, either padded with the specified padChar or with the beginning of the string chopped off\n * @example\n * ```javascript\n * padAndChop('essential-eth', 'a', 8);\n * // 'tial-eth'\n * ```\n * @example\n * ```javascript\n * padAndChop('essential-eth', 'A', 20);\n * // 'AAAAAAAessential-eth'\n * ```\n */\n private padAndChop = (\n str: string,\n padChar: string,\n length: number,\n ): string => {\n return (Array(length).fill(padChar).join('') + str).slice(length * -1);\n };\n\n public toTwos(bitCount: number): Big {\n let binaryStr;\n\n if (this.gte(0)) {\n const twosComp = this.toNumber().toString(2);\n binaryStr = this.padAndChop(twosComp, '0', bitCount || twosComp.length);\n } else {\n binaryStr = this.plus(Math.pow(2, bitCount)).toNumber().toString(2);\n\n if (Number(binaryStr) < 0) {\n throw new Error('Cannot calculate twos complement');\n }\n }\n\n const binary = `0b${binaryStr}`;\n const decimal = Number(binary);\n return tinyBig(decimal);\n }\n}\n\n/**\n * Helper factory function so that you don't have to type \"new\" when instantiating a new TinyBig\n *\n * @param value the value to initiate the TinyBig with\n * @returns an initiated {@link TinyBig}\n * @example\n * ```javascript\n * tinyBig(10).times(3).toNumber()\n * // 30\n * ```\n */\nexport function tinyBig(value: string | number | TinyBig | Big): TinyBig {\n return new TinyBig(value);\n}\n","type JSPrimitiveTypes =\n | 'string'\n | 'number'\n | 'bigint'\n | 'boolean'\n | 'symbol'\n | 'undefined'\n | 'object'\n | 'function';\n\nexport const validateType = (\n value: unknown,\n allowedTypes: JSPrimitiveTypes[],\n) => {\n if (!allowedTypes.includes(typeof value)) {\n throw new Error(\n `${allowedTypes.join(' or ')} required. Received ${typeof value}`,\n );\n }\n};\n","import { Keccak } from 'sha3';\nimport { validateType } from '../shared/validate-type';\n\n/**\n * Returns an Ethereum address in proper mixed-case checksum.\n * Does NOT support ICAP\n *\n * @param address An Ethereum address. Mixed, lower, and uppercase are all valid\n * @returns a valid checksum address\n * @example\n * ```javascript\n * toChecksumAddress('0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359');\n * // '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359'\n * ```\n *\n * Similar to [\"getAddress\" in ethers.js](https://docs.ethers.io/v5/api/utils/address/#utils-getAddress)\n *\n * Similar to [\"toChecksumAddress\" in web3.js](https://web3js.readthedocs.io/en/v1.7.1/web3-utils.html#tochecksumaddress)\n */\nexport function toChecksumAddress(address: string) {\n validateType(address, ['string']);\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n throw new Error(`Invalid Ethereum address \"${address}\"`);\n }\n\n const _address = address.toLowerCase().replace(/^0x/i, '');\n const keccak = new Keccak(256);\n const addressHash = keccak.update(_address).digest('hex').replace(/^0x/i, '');\n let checksumAddress = '0x';\n\n for (let i = 0; i < _address.length; i++) {\n // If ith character is 8 to f then make it uppercase\n if (parseInt(addressHash[i], 16) > 7) {\n checksumAddress += _address[i].toUpperCase();\n } else {\n checksumAddress += _address[i];\n }\n }\n\n if (\n address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) &&\n checksumAddress !== address\n ) {\n throw new Error(`Invalid Checksum address for \"${address}\"`);\n }\n return checksumAddress;\n}\n","import { Keccak } from 'sha3';\nimport { tinyBig } from '../../shared/tiny-big/tiny-big';\nimport type {\n ContractTypes,\n JSONABIArgument,\n} from '../../types/Contract.types';\nimport { toChecksumAddress } from '../../utils/to-checksum-address';\nimport { hexToDecimal } from './hex-to-decimal';\n\nexport const hexFalse = '0'.repeat(64);\nconst hexTrue = '0'.repeat(63) + '1';\n\n/**\n * @param hex\n * @example\n */\nfunction hexToUtf8(hex: any) {\n let str = '';\n let i = 0;\n const l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i += 2) {\n const code = parseInt(hex.substr(i, 2), 16);\n if (code === 0) continue; // Skip null bytes\n str += String.fromCharCode(code);\n }\n try {\n return decodeURIComponent(escape(str)); // Convert UTF-8 to Unicode\n } catch (e) {\n return str; // Return original string if conversion fails\n }\n}\n\n/**\n * Expands an integer type to use a default of 256 bits. Used for consistency; not required in Solidity\n *\n * @see https://ethereum.stackexchange.com/questions/43241/why-write-uint256-instead-of-uint-if-theyre-the-same-thing\n * @param type the type to explicitly define as 256 bits\n * @returns the integer type expanded to explicitly be 256 bits when possible\n * @example\n * ```javascript\n * expandType('uint[]');\n * // 'uint256[]'\n * ```\n */\nfunction expandType(type: ContractTypes) {\n // https://docs.soliditylang.org/en/v0.8.7/types.html#integers\n if (type === 'uint[]') {\n return 'uint256[]';\n } else if (type === 'int[]') {\n return 'int256[]';\n }\n return type;\n}\n/**\n *\n * @param jsonABIArgument\n * @param args\n * @example\n */\nexport function encodeData(jsonABIArgument: JSONABIArgument, args: any[]) {\n const hash = new Keccak(256);\n /* first 4 bytes will create the data parameter */\n const functionString = `${jsonABIArgument.name}(${jsonABIArgument.inputs.map(\n (input) => expandType(input.type),\n )})`;\n\n // encoding learnt from https://ethereum.stackexchange.com/questions/3514/how-to-call-a-contract-method-using-the-eth-call-json-rpc-api\n const functionHash = hash.update(functionString).digest('hex');\n // no arrays\n const jsonABIInputsLength = jsonABIArgument.inputs.length;\n let shouldValidateInputLength = true;\n\n // inputs contains 1 or more arrays\n if (jsonABIArgument.inputs.find((input) => input.type.includes('['))) {\n shouldValidateInputLength = false;\n }\n if (shouldValidateInputLength && args.length !== jsonABIInputsLength) {\n throw new Error(\n `args inputs of \"${args.length}\" does not match expected length of \"${jsonABIArgument.inputs.length}\"`,\n );\n }\n\n const argsWithTypes: [arg: any, type: ContractTypes][] = (\n jsonABIArgument.inputs || []\n ).reduce(\n (acc, input, i) => {\n if (input.type.includes('[')) {\n // strip array and length like \"[2]\" from type\n const basicType = /([^[]*)\\[.*$/g.exec(input.type)?.[1] as string;\n args.forEach((arg: any) => {\n acc = acc.concat([[arg, basicType]]);\n });\n return acc;\n } else {\n return acc.concat([[args[i], input.type]]);\n }\n },\n [] as [arg: any, type: ContractTypes][],\n );\n\n const encodedArgs = argsWithTypes.map(([arg, inputType]) => {\n let rawArg = arg;\n switch (inputType) {\n case 'bool':\n return arg ? hexTrue : hexFalse;\n case 'address':\n // remove leading \"0x\"\n rawArg = arg.replace(/^0x/g, '').toLowerCase();\n break;\n default:\n if (inputType.startsWith('bytes')) {\n // encode each character to hex\n const argEncoded = rawArg\n .split('')\n .map((character: string) => character.charCodeAt(0).toString(16))\n .join('');\n const paddedEncodedArg = argEncoded.padEnd(64, '0');\n return paddedEncodedArg;\n } else if (inputType === 'uint256') {\n const argEncoded = BigInt(arg).toString(16);\n const paddedEncodedArg = argEncoded.padStart(64, '0');\n return paddedEncodedArg;\n } else if (inputType.startsWith('uint')) {\n break;\n } else {\n throw new Error(\n `essential-eth does not yet support \"${inputType}\" inputs. Make a PR today!\"`,\n );\n }\n }\n const argEncoded = rawArg.toString(16) as string;\n const paddedEncodedArg = argEncoded.padStart(64, '0');\n return paddedEncodedArg;\n });\n const functionEncoded = functionHash.slice(0, 8);\n const data = `0x${functionEncoded}${encodedArgs.join('')}`;\n return data;\n}\n\n/**\n * @internal\n * @param jsonABIArgument\n * @param nodeResponse\n * @example\n */\nexport function decodeRPCResponse(\n jsonABIArgument: JSONABIArgument,\n nodeResponse: string,\n) {\n const rawOutputs = jsonABIArgument.outputs;\n const slicedResponse = nodeResponse.slice(2);\n\n if (\n jsonABIArgument?.outputs?.length === 1 &&\n jsonABIArgument.outputs[0].type === 'string'\n ) {\n const [hexOffset, responseData] = [\n slicedResponse.slice(0, 64),\n slicedResponse.slice(64),\n ];\n const decimalOffset = Number(hexToDecimal(`0x${hexOffset}`));\n const hexLength = responseData.slice(0, decimalOffset * 2);\n const decimalLength = Number(hexToDecimal(`0x${hexLength}`));\n const hexToDecode = responseData.slice(\n decimalOffset * 2,\n decimalOffset * 2 + decimalLength * 2,\n );\n return hexToUtf8(hexToDecode);\n }\n // chunk response every 64 characters\n const encodedOutputs = slicedResponse.match(/.{1,64}/g);\n const outputs = (encodedOutputs || []).map((output: string, i: number) => {\n const outputType = (rawOutputs || [])[i].type;\n switch (outputType) {\n case 'bool':\n return output === hexTrue;\n case 'address':\n /* address types have 24 leading zeroes to remove */\n return toChecksumAddress(`0x${output.slice(24)}`);\n case 'uint256':\n case 'uint120':\n return tinyBig(hexToDecimal(`0x${output}`));\n case 'bytes32':\n return `0x${output}`;\n case 'uint8':\n return Number(hexToDecimal(`0x${output}`));\n default:\n throw new Error(\n `essential-eth does not yet support \"${outputType}\" outputs. Make a PR today!\"`,\n );\n }\n });\n\n return outputs.length === 1 ? outputs[0] : outputs;\n}\n","import type { JsonRpcProvider } from '../providers/JsonRpcProvider';\nimport type { ContractInterface } from '../types/Contract.types';\nimport {\n decodeRPCResponse,\n encodeData,\n} from './utils/encode-decode-transaction';\n/**\n * @param txnData\n * @example\n */\nfunction estimateGas(txnData: string) {\n // https://ethereum.stackexchange.com/questions/1570/what-does-intrinsic-gas-too-low-mean/1694\n txnData.split('').reduce((previousValue, currentValue) => {\n // 0 characters are 4 gwei, all others are 48 gwei\n const characterCost = currentValue === '0' ? 4 : 68;\n return previousValue + characterCost;\n }, 0);\n}\ninterface Options {\n gasLimit?: number;\n}\nexport class BaseContract {\n /**\n * The URL to your Eth node. Consider POKT or Infura\n */\n private readonly _address: string;\n private readonly _provider: JsonRpcProvider;\n\n /**\n * @param addressOrName The ethereum address of the smart-contract\n * @param contractInterface The JSON ABI of the smart-contract (like http://api.etherscan.io/api?module=contract&action=getabi&address=0x090d4613473dee047c3f2706764f49e0821d256e&format=raw)\n * @param signerOrProvider An instantiated essential-eth provider\n * @example\n */\n constructor(\n addressOrName: string,\n contractInterface: ContractInterface,\n signerOrProvider: JsonRpcProvider,\n ) {\n this._address = addressOrName;\n this._provider = signerOrProvider;\n contractInterface\n .filter((jsonABIArgument) => jsonABIArgument.type === 'function')\n .forEach((jsonABIArgument) => {\n if (\n 'name' in jsonABIArgument &&\n typeof jsonABIArgument.name === 'string'\n ) {\n defineReadOnly(\n this,\n jsonABIArgument.name,\n async (..._args: any[]) => {\n let functionArguments = _args;\n let options: Options = {};\n // remove options from encoding\n const lastArg = _args[_args.length - 1];\n if (!Array.isArray(lastArg) && typeof lastArg === 'object') {\n options = lastArg;\n functionArguments = _args.slice(0, _args.length - 1);\n }\n\n const data = encodeData(jsonABIArgument, functionArguments);\n\n const decimalGas =\n typeof options.gasLimit === 'number'\n ? options.gasLimit /* user passed in \"gasLimit\" directly */\n : typeof jsonABIArgument?.gas ===\n 'number' /* ABI specified \"gas\". */\n ? estimateGas(data)\n : null;\n const req = async (): Promise<string> => {\n return await this._provider.call(\n {\n to: this._address.toLowerCase(),\n data,\n // sometimes gas is defined in the ABI\n ...(decimalGas\n ? { gas: `0x${decimalGas.toString(16)}` }\n : {}),\n },\n 'latest',\n );\n };\n const nodeResponse = await req();\n return decodeRPCResponse(jsonABIArgument, nodeResponse);\n },\n );\n }\n });\n }\n}\n\n/**\n * Applies the unique contract's methods to the instantiated Contract in the constructor based-upon the provided ABI\n *\n * @param object\n * @param name\n * @param value\n * @internal\n * @example\n */\nexport function defineReadOnly<T>(object: T, name: string, value: any): void {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n\n/**\n * @alpha\n * Only accepts ABIS in JSON format. This allows for stronger typing and assurances of data-types\n * Only read-only function calls currently supported.\n * @example\n * ```typescript\n * import { Contract, JsonRpcProvider } from 'essential-eth';\n * // UNI airdrop contract\n * const contractAddress = '0x090D4613473dEE047c3f2706764f49E0821D256e';\n * const provider = new JsonRpcProvider();\n * // for more robust contract calls, provide a fallback:\n * // const provider = new FallthroughProvider(['bad', 'https://free-eth-node.com/api/eth']);\n *\n * const JSONABI = [\n * {\n * inputs: [\n * {\n * internalType: 'uint256',\n * name: 'index',\n * type: 'uint256',\n * },\n * ],\n * name: 'isClaimed',\n * outputs: [\n * {\n * internalType: 'bool',\n * name: '',\n * type: 'bool',\n * },\n * ],\n * stateMutability: 'view',\n * type: 'function',\n * },\n * ]\n *\n * const contract = new Contract(\n * contractAddress,\n * JSONABI,\n * provider,\n * );\n *\n * (async () => {\n * // prints boolean as to whether index 0 has claimed airdrop or not\n * console.log(await contract.isClaimed(0));\n * })()\n *\n *\n * ```\n */\nexport class Contract extends BaseContract {\n // The dynamic function names within a given smart-contract\n /**\n * The function names on any given contract. Like \"isClaimed\", \"merkleRoot\", etc.\n */\n readonly [key: string]: any;\n // readonly [key: string]: ContractFunction | any;\n}\n","import { tinyBig } from '../../shared/tiny-big/tiny-big';\nimport type {\n RPCTransaction,\n TransactionResponse,\n} from '../../types/Transaction.types';\nimport { toChecksumAddress } from '../../utils/to-checksum-address';\nimport { hexToDecimal } from './hex-to-decimal';\n\n/**\n * Converts RPC transaction response to more JS-friendly format\n *\n * @param transaction the transaction to clean\n * @returns a cleaned transaction\n * @example\n * ```javascript\n * const RPCTransaction = { accessList: [], blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: '0xe28f62', chainId: '0x1', from: '0x642824fab1d0141073ed74326332950bec4701e3', gas: '0x274b7', gasPrice: '0x62df1c62c', hash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', input: '0xa0712d68000000000000000000000000000000000000000000000000000000000000000a', maxFeePerGas: '0x98808e3f0', maxPriorityFeePerGas: '0x3b9aca00', nonce: '0x42', r: '0x304682f8b22006dd1347c3722f6e43a5ad8e3a1ae51939cc0d6f07981602f5c0', s: '0x207ad110eb5c014cb628814b92396785fabfbe74542293300eeadf156f50f105', to: '0x84f80ea01e26b7c11bdd241970982c7eeab6ddcc', transactionIndex: '0x29', type: '0x2', v: '0x1', value: '0x470de4df820000' }\n * cleanTransaction(RPCTransaction);\n * // { accessList: [], blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, chainId: 1, from: '0x642824FaB1D0141073ed74326332950bEc4701e3', gas: Big { s: 1, e: 5, c: [ 1, 6, 0, 9, 5, 1 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, gasPrice: Big { s: 1, e: 10, c: [ 2, 6, 5, 4, 0, 6, 2, 3, 4, 0, 4 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, hash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', input: '0xa0712d68000000000000000000000000000000000000000000000000000000000000000a', maxFeePerGas: Big { s: 1, e: 10, c: [ 4, 0, 9, 3, 6, 9, 8, 9, 6, 8 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, maxPriorityFeePerGas: Big { s: 1, e: 9, c: [ 1 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, nonce: 66, r: '0x304682f8b22006dd1347c3722f6e43a5ad8e3a1ae51939cc0d6f07981602f5c0', s: '0x207ad110eb5c014cb628814b92396785fabfbe74542293300eeadf156f50f105', to: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', transactionIndex: 41, type: 2, v: 1, value: Big { s: 1, e: 16, c: [ 2 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, confirmations: 53 }\n * ```\n */\nexport function cleanTransaction(\n transaction: RPCTransaction,\n): TransactionResponse {\n const cleanedTransaction = {\n ...transaction,\n } as unknown as TransactionResponse;\n (Object.keys(transaction) as Array<keyof RPCTransaction>).forEach((key) => {\n // pending blocks have null instead of a difficulty\n // pending blocks have null instead of a miner address\n if (!transaction[key]) return;\n switch (key) {\n case 'blockNumber':\n case 'chainId':\n case 'transactionIndex':\n case 'type':\n case 'v':\n cleanedTransaction[key] = Number(hexToDecimal(transaction[key]));\n break;\n case 'from':\n case 'to':\n if (transaction[key]) {\n cleanedTransaction[key] = toChecksumAddress(transaction[key]);\n }\n break;\n case 'value':\n case 'gas':\n case 'gasPrice':\n case 'maxFeePerGas':\n case 'maxPriorityFeePerGas':\n case 'nonce':\n cleanedTransaction[key] = tinyBig(hexToDecimal(transaction[key]));\n break;\n }\n });\n return cleanedTransaction;\n}\n","import { toChecksumAddress } from '../../utils/to-checksum-address';\nimport type { Log, RPCLog } from './../../types/Transaction.types';\nimport { hexToDecimal } from './hex-to-decimal';\n\n/**\n * Converts RPC log receipt response to more JS-friendly format\n *\n * @param log the log to clean\n * @param receiptLog if the log is part of a transaction receipt. Used to remove certain keys from log\n * @example\n */\nexport function cleanLog(log: RPCLog, receiptLog: boolean): Log {\n const cleanedLog = {\n ...log,\n } as unknown as Log;\n\n (Object.keys(log) as Array<keyof RPCLog>).forEach((key) => {\n switch (key) {\n case 'address':\n cleanedLog[key] = toChecksumAddress(log[key]);\n break;\n case 'blockNumber':\n case 'logIndex':\n case 'transactionIndex':\n cleanedLog[key] = Number(hexToDecimal(log[key]));\n break;\n case 'removed':\n if (receiptLog) {\n delete cleanedLog[key];\n } else if (log[key] == null) {\n cleanedLog[key] === false;\n }\n break;\n }\n });\n\n return cleanedLog;\n}\n","import unfetch from 'isomorphic-unfetch';\n/**\n * Forms the init field for http fetching\n *\n * @param body\n * @internal\n */\nexport function buildFetchInit<T>(body: T) {\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n}\n/**\n * Makes a post request with the specified JSON data, normally to the a Ethereum JSON RPC API endpoint\n *\n * @internal\n * @param url the URL to send the request to\n * @param body JSON POST body\n * @returns the JSON response from the server\n * @example\n * ```javascript\n * post('https://free-eth-node.com/api/eth', { jsonrpc: '2.0', id: 1, method: 'eth_gasPrice', params: [] });\n * // '0x66fa8dbfd'\n *\n * post('https://free-eth-node.com/api/eth', { jsonrpc: '2.0', id: 1, method: 'eth_getBalance', params: [ '0x4a986a6dCA6dbf99bC3d17F8D71aFb0d60e740f8', 'latest' ] });\n * // '0x312faeb995df61d4'\n * ```\n */\nexport function post(url: string, body: Record<string, unknown>) {\n return unfetch(url, buildFetchInit(body))\n .then(async (r) => {\n const t = await r.text();\n try {\n return JSON.parse(t);\n } catch {\n throw new Error(`Invalid JSON RPC response: \"${t}\"`);\n }\n })\n .then((response) => {\n const result = response?.result;\n if (!result) {\n throw new Error(\n `Invalid JSON RPC response: ${JSON.stringify(response)}`,\n );\n }\n return response.result;\n });\n}\n\nexport type RPCMethodName =\n | 'eth_getBlockByNumber'\n | 'eth_getBlockByHash'\n | 'eth_call'\n | 'eth_chainId'\n | 'eth_gasPrice'\n | 'eth_getBalance'\n | 'eth_getTransactionByHash'\n | 'eth_getTransactionReceipt'\n | 'eth_getTransactionCount'\n | 'eth_getCode'\n | 'eth_blockNumber'\n | 'eth_estimateGas'\n | 'eth_getLogs';\n\n/**\n * Prepares data to be sent using the {@link post} function. Data is prepared per the {@link https://en.wikipedia.org/wiki/JSON-RPC#Examples JSON RPC v2 spec}\n *\n * @internal\n * @param method the RPC method to be invoked\n * @param params the parameters to be passed to the defined method\n * @returns a POST method body matching the {@link https://en.wikipedia.org/wiki/JSON-RPC#Examples JSON RPC v2 spec}\n * @example\n * ```javascript\n * buildRPCPostBody('eth_gasPrice', []);\n * // { jsonrpc: '2.0', id: 1, method: 'eth_gasPrice', params: [] }\n *\n * buildRPCPostBody('eth_getBalance', ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest']);\n * // { jsonrpc: '2.0', id: 1, method: 'eth_getBalance', params: [ '0x4a986a6dCA6dbf99bC3d17F8D71aFb0d60e740f8', 'latest' ] }\n * ```\n */\nexport function buildRPCPostBody(method: RPCMethodName, params: unknown[]) {\n return {\n jsonrpc: '2.0',\n // TODO: Increment ID will be needed when websocket support is added\n id: 1,\n method,\n params,\n };\n}\n","import { version } from './package-version';\nclass Logger {\n private packageVersion: string;\n constructor() {\n this.packageVersion = version;\n }\n public throwError(message: string, args: { [key: string]: any }): never {\n const argsLength = Object.keys(args).length;\n throw new Error(\n `${message} (${Object.entries(args).map(\n ([key, value], index) =>\n `${key}=${value}${index < argsLength - 1 && ', '}`,\n )}, version=essential-eth@${this.packageVersion})`,\n );\n }\n public throwArgumentError(message: string, arg: string, value: any): never {\n throw new Error(\n `${message} (argument=\"${arg}\" value=${value}, version=essential-eth@${this.packageVersion})`,\n );\n }\n public checkSafeUint53(value: number, message = 'value not safe'): void {\n if (typeof value !== 'number') {\n return;\n }\n\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, {\n operation: 'checkSafeInteger',\n fault: 'out-of-safe-range',\n value: value,\n });\n }\n\n if (value % 1) {\n this.throwError(message, {\n operation: 'checkSafeInteger',\n fault: 'non-integer',\n value: value,\n });\n }\n }\n}\n\nexport const logger = new Logger();\n","// Generated by genversion.\nexport const version = '0.9.2-beta.0';\n","// primarily duplicate code from https://github.com/ethers-io/ethers.js/blob/f599d6f23dad0d0acaa3828d6b7acaab2d5e455b/packages/bytes/src.ts/index.ts\nimport { logger } from '../logger/logger';\n\n///////////////////////////////\n// Exported Types\n\nexport type Bytes = ArrayLike<number>;\n\n/**\n * @example\n * [1,2,3]\n * @example\n * 0x123\n * @example\n * '0x123'\n */\n\nexport type BytesLike = Bytes | string;\nexport type BytesLikeWithNumber = BytesLike | number;\n\nexport interface DataOptions {\n allowMissingPrefix?: boolean;\n hexPad?: 'left' | 'right' | null;\n}\n\nexport interface Hexable {\n toHexString(): string;\n}\n\nexport type SignatureLike =\n | {\n r: string;\n s?: string;\n _vs?: string;\n recoveryParam?: number;\n v?: number;\n }\n | BytesLike;\n\nexport interface Signature {\n r: string;\n\n s: string;\n _vs: string;\n\n recoveryParam: number;\n v: number;\n\n yParityAndS: string;\n compact: string;\n}\n\n/**\n * Check if a value can be converted to a hex string\n *\n * @param value the value to check whether or not it's Hexable\n * @returns whether or not the value is Hexable\n * @example\n * ```javascript\n * const val = tinyBig(203);\n * isHexable(val);\n * // true\n * ```\n */\nfunction isHexable(value: any): value is Hexable {\n return !!value.toHexString;\n}\n\n/**\n * Returns true if and only if value is a valid [Bytes](#bytes) or DataHexString\n * Same as [`ethers.utils.isBytesLike`](https://docs.ethers.io/v5/api/utils/bytes/#utils-isBytesLike)\n *\n * @param value the value to check whether or not it matches BytesLike\n * @returns whether or not the value matches BytesLike\n * @example\n * ```javascript\n * isBytesLike([1,2,3]);\n * // true\n * ```\n * @example\n * ```javascript\n * isBytesLike(false);\n * // false\n * ```\n * @example\n * ```javascript\n * isBytesLike(new Uint8Array(1));\n * // true\n * ```\n */\nexport function isBytesLike(value: any): value is BytesLike {\n return (isHexString(value) && !(value.length % 2)) || isBytes(value);\n}\n\n/**\n * Checks if a value is an integer\n *\n * @param value the value to check whether or not it's an integer\n * @returns whether or not value is an integer\n * @example\n * ```javascript\n * isInteger(4)\n * // true\n * ```\n * @example\n * ```javascript\n * isInteger(6.2)\n * // false\n * ```\n */\nfunction isInteger(value: number) {\n return typeof value === 'number' && value == value && value % 1 === 0;\n}\n\n/**\n * Returns true if and only if value is a valid [Bytes](#bytes)\n * Same as [`ethers.utils.isBytes`](https://docs.ethers.io/v5/api/utils/bytes/#utils-isBytes)\n *\n * @param value the value to check whether or not it matches Bytes\n * @returns whether or not the value matches Bytes\n * @example\n * ```javascript\n * isBytes([1,2,3]);\n * // true\n * ```\n * @example\n * ```javascript\n * isBytes(false);\n * // false\n * ```\n * @example\n * ```javascript\n * isBytes(new Uint8Array(1));\n * // true\n * ```\n */\nexport function isBytes(value: any): value is Bytes {\n if (value == null) {\n return false;\n }\n\n if (value.constructor === Uint8Array) {\n return true;\n }\n if (typeof value === 'string') {\n return false;\n }\n if (!isInteger(value.length) || value.length < 0) {\n return false;\n }\n\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n if (!isInteger(v) || v < 0 || v >= 256) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Converts DataHexStringOrArrayish to a Uint8Array\n * Same as [`ethers.utils.arrayify`](https://docs.ethers.io/v5/api/utils/bytes/#utils-arrayify)\n *\n * @param value the value to convert to a Uint8Array\n * @param options options to use when converting the value to a Uint8Array\n * @returns the value represented as a Uint8Array\n * @example\n * ```javascript\n * arrayify(1);\n * // Uint8Array(1) [ 1 ]\n * ```\n * @example\n * ```javascript\n * arrayify(0x1234);\n * // Uint8Array(2) [ 18, 52 ]\n * ```\n * @example\n * ```javascript\n * arrayify('0x1', { hexPad: 'right' });\n * // Uint8Array(1) [ 16 ]\n * ```\n */\nexport function arrayify(\n value: BytesLike | Hexable | number,\n options?: DataOptions,\n): Uint8Array {\n if (!options) {\n options = {};\n }\n\n if (typeof value === 'number') {\n logger.checkSafeUint53(value, 'invalid arrayify value');\n\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value = parseInt(String(value / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n\n return new Uint8Array(result);\n }\n\n if (\n options.allowMissingPrefix &&\n typeof value === 'string' &&\n value.substring(0, 2) !== '0x'\n ) {\n value = '0x' + value;\n }\n\n if (isHexable(value)) {\n value = value.toHexString();\n }\n\n if (isHexString(value)) {\n let hex = (<string>value).substring(2);\n if (hex.length % 2) {\n if (options.hexPad === 'left') {\n hex = '0' + hex;\n } else if (options.hexPad === 'right') {\n hex += '0';\n } else {\n logger.throwArgumentError('hex data is odd-length', 'value', value);\n }\n }\n\n const result = [];\n for (let i = 0; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n\n return new Uint8Array(result);\n }\n\n if (isBytes(value)) {\n return new Uint8Array(value);\n }\n\n return logger.throwArgumentError('invalid arrayify value', 'value', value);\n}\n\n/**\n * Concatenates all the BytesLike in arrayOfBytesLike into a single Uint8Array.\n * Same as [`ethers.utils.concat`](https://docs.ethers.io/v5/api/utils/bytes/#utils-concat)\n *\n * @param arrayOfBytesLike the array of {@link BytesLike} to concatenate together\n * @returns a concatenated Uint8Array\n * @example\n * ```javascript\n * concat([0, 1]);\n * // Uint8Array(2) [ 0, 1 ]\n * ```\n */\nexport function concat(\n arrayOfBytesLike: ReadonlyArray<BytesLikeWithNumber>,\n): Uint8Array {\n const objects = arrayOfBytesLike.map((item) => arrayify(item));\n const length = objects.reduce((accum, item) => accum + item.length, 0);\n const result = new Uint8Array(length);\n objects.reduce((offset, object) => {\n result.set(object, offset);\n return offset + object.length;\n }, 0);\n return result;\n}\n\n/**\n * Strips leading zeros from a BytesLike object\n *\n * @param value the value to strip leading zeros from\n * @returns value without leading zeroes, expressed as a Uint8Array\n * @example\n * ```javascript\n * stripZeros('0x00002834');\n * // Uint8Array { [Iterator] 0: 40, 1: 52 }\n * // Equivalent to '0x2834'\n * ```\n */\nexport function stripZeros(value: BytesLike): Uint8Array {\n let result: Uint8Array = arrayify(value);\n\n if (result.length === 0) {\n return result;\n }\n\n // Find the first non-zero entry\n let start = 0;\n while (start < result.length && result[start] === 0) {\n start++;\n }\n\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n\n return result;\n}\n\n/**\n * Pads the beginning of a {@link BytesLike} with zeros so it's the specified length as a Uint8Array\n *\n * @param value the value to pad\n * @param length the desired length of the value\n * @returns the value padded with zeros to the specified length\n * @example\n * ```javascript\n * zeroPad('0x039284');\n * // Uint8Array { [Iterator] 0: 0, 1: 0, 2: 0, 3: 3, 4: 146, 5: 132 }\n * // Equivalent to 0x000000039284\n * ```\n * @example\n * ```javascript\n * zeroPad([39, 25, 103, 45], 5);\n * // Uint8Array { [Iterator] 0: 0, 1: 39, 2: 25, 3: 103, 4: 45 }\n * ```\n */\nexport function zeroPad(value: BytesLike, length: number): Uint8Array {\n value = arrayify(value);\n\n if (value.length > length) {\n logger.throwArgumentError('value out of range', 'value', value);\n }\n\n const result = new Uint8Array(length);\n result.set(value, length - value.length);\n return result;\n}\n\n/**\n * Returns true if and only if object is a valid hex string.\n * If length is specified and object is not a valid DataHexString of length bytes, an InvalidArgument error is thrown.\n * Same as [`ethers.utils.isHexString`](https://docs.ethers.io/v5/api/utils/bytes/#utils-isHexString)\n *\n * @param value the value to check whether or not it's a hex string\n * @param length a length of bytes that the value should be equal to\n * @returns whether the value is a valid hex string (and optionally, whether it matches the length specified)\n * @example\n * ```javascript\n * isHexString('0x4924');\n * // true\n * ```\n * @example\n * ```javascript\n * isHexString('0x4924', 4);\n * // false\n * // length of 4 in bytes would mean a hex string with 8 characters\n * ```\n */\nexport function isHexString(value: any, length?: number): boolean {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n return true;\n}\n\nconst HexCharacters = '0123456789abcdef';\n\n/**\n * Converts a value into a hex string\n *\n * @param value the value to convert\n * @param options options to use when converting the value to a hex string\n * @returns the value represented as a hex string\n * @example\n * ```javascript\n * hexlify(4);\n * // '0x04'\n * ```\n * @example\n * ```javascript\n * hexlify(14);\n * // '0x0e'\n * ```\n */\nexport function hexlify(\n value: BytesLike | Hexable | number | bigint,\n options?: DataOptions,\n): string {\n if (!options) {\n options = {};\n }\n\n if (typeof value === 'number') {\n logger.checkSafeUint53(value, 'invalid hexlify value');\n\n let hex = '';\n while (value) {\n hex = HexCharacters[value & 0xf] + hex;\n value = Math.floor(value / 16);\n }\n\n if (hex.length) {\n if (hex.length % 2) {\n hex = '0' + hex;\n }\n return '0x' + hex;\n }\n\n return '0x00';\n }\n\n if (typeof value === 'bigint') {\n value = value.toString(16);\n if (value.length % 2) {\n return '0x0' + value;\n }\n return '0x' + value;\n }\n\n if (\n options.allowMissingPrefix &&\n typeof value === 'string' &&\n value.substring(0, 2) !== '0x'\n ) {\n value = '0x' + value;\n }\n\n if (isHexable(value)) {\n return value.toHexString();\n }\n\n if (isHexString(value)) {\n if ((<string>value).length % 2) {\n if (options.hexPad === 'left') {\n value = '0x0' + (<string>value).substring(2);\n } else if (options.hexPad === 'right') {\n value += '0';\n } else {\n logger.throwArgumentError('hex data is odd-length', 'value', value);\n }\n }\n return (<string>value).toLowerCase();\n }\n\n if (isBytes(value)) {\n let result = '0x';\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n }\n\n return logger.throwArgumentError('invalid hexlify value', 'value', value);\n}\n\n/**\n * Gets the length of data represented as a hex string\n *\n * @param data the data to check the length of\n * @returns the length of the data\n * @example\n * ```javascript\n * hexDataLength([2, 4, 0, 1]);\n * // 4\n * ```\n * @example\n * ```javascript\n * hexDataLength('0x3925');\n * // 2\n * ```\n */\nexport function hexDataLength(data: BytesLike) {\n if (typeof data !== 'string') {\n data = hexlify(data);\n } else if (!isHexString(data) || data.length % 2) {\n return null;\n }\n\n return (data.length - 2) / 2;\n}\n\n/**\n * Slices a {@link BytesLike} to extract a certain part of the input\n *\n * @param data the data to slice from\n * @param offset the index to start extraction at\n * @param endOffset the index to end extraction at\n * @returns the extracted data as a hex string\n * @example\n * ```javascript\n * hexDataSlice([20, 6, 48], 0, 2);\n * // '0x1406'\n * ```\n */\nexport function hexDataSlice(\n data: BytesLikeWithNumber,\n offset: number,\n endOffset?: number,\n): string {\n if (typeof data !== 'string') {\n data = hexlify(data);\n } else if (!isHexString(data) || data.length % 2) {\n logger.throwArgumentError('invalid hexData', 'value', data);\n }\n\n offset = 2 + 2 * offset;\n\n if (endOffset != null) {\n return '0x' + data.substring(offset, 2 + 2 * endOffset);\n }\n\n return '0x' + data.substring(offset);\n}\n\n/**\n * Concatenates values together into one hex string\n *\n * @param items the items to concatenate together\n * @returns a single hex string including all of the items to be concatenated\n * @example\n * ```javascript\n * hexConcat([[2, 4, 0, 1], 9, '0x2934', '0x3947']);\n * // '0x020400010929343947'\n * ```\n */\nexport function hexConcat(items: ReadonlyArray<BytesLike>): string {\n let result = '0x';\n items.forEach((item) => {\n result += hexlify(item).substring(2);\n });\n return result;\n}\n\n/**\n * Converts a number of different types into a hex string\n *\n * @param value the value to convert into a hex string\n * @returns the value represented as a hex string\n * @example\n * ```javascript\n * hexValue(39);\n * // '0x27'\n * ```\n * @example\n * ```javascript\n * hexValue([9, 4, 19, 4]);\n * // '0x9041304'\n * ```\n */\nexport function hexValue(value: BytesLike | Hexable | number | bigint): string {\n const trimmed = hexStripZeros(hexlify(value, { hexPad: 'left' }));\n if (trimmed === '0x') {\n return '0x0';\n }\n return trimmed;\n}\n\n/**\n * Strips the leading zeros from a value and returns it as a hex string\n *\n * @param value the value to strip zeros from\n * @returns a hex string representation of the value, without leading zeros\n * @example\n * ```javascript\n * hexStripZeros([0,0,0,48]);\n * // '0x30'\n * ```\n */\nexport function hexStripZeros(value: BytesLike): string {\n if (typeof value !== 'string') {\n value = hexlify(value);\n }\n\n if (!isHexString(value)) {\n logger.throwArgumentError('invalid hex string', 'value', value);\n }\n value = value.substring(2);\n let offset = 0;\n while (offset < value.length && value[offset] === '0') {\n offset++;\n }\n return '0x' + value.substring(offset);\n}\n\n/**\n * Returns a hex string padded to a specified length of bytes.\n *\n * Similar to [\"hexZeroPad\" in ethers.js](https://docs.ethers.io/v5/api/utils/bytes/#utils-hexZeroPad)\n *\n * Differs from [\"padLeft\" in web3.js](https://web3js.readthedocs.io/en/v1.7.1/web3-utils.html#padleft) because web3 counts by characters, not bytes.\n *\n * @param value A hex-string, hex-number, or decimal number (auto-converts to base-16) to be padded\n * @param length The final length in bytes\n * @returns A hex string padded to the specified length\n * @throws If the value is not a hex string or number\n * @throws If the value is longer than the length\n * @example\n * ```javascript\n * hexZeroPad('0x60', 2);\n * // '0x0060'\n * ```\n * @example\n * ```javascript\n * hexZeroPad(0x60, 3);\n * // '0x000060'\n * ```\n * @example\n * ```javascript\n * hexZeroPad('12345', 1);\n * // Throws\n * ```\n */\nexport function hexZeroPad(value: BytesLikeWithNumber, length: number): string {\n if (typeof value !== 'string') {\n value = hexlify(value);\n } else if (!isHexString(value)) {\n logger.throwArgumentError('invalid hex string', 'value', value);\n }\n\n if (value.length > 2 * length + 2) {\n logger.throwError('value out of range', { value, length });\n }\n\n while (value.length < 2 * length + 2) {\n value = '0x0' + value.substring(2);\n }\n\n return value;\n}\n\n// export function splitSignature(signature: SignatureLike): Signature {\n// const result: Signature = {\n// r: '0x',\n// s: '0x',\n// _vs: '0x',\n// recoveryParam: 0,\n// v: 0,\n// yParityAndS: '0x',\n// compact: '0x',\n// };\n\n// if (isBytesLike(signature)) {\n// const bytes: Uint8Array = arrayify(signature);\n\n// // Get the r, s and v\n// if (bytes.length === 64) {\n// // EIP-2098; pull the v from the top bit of s and clear it\n// result.v = 27 + (bytes[32] >> 7);\n// bytes[32] &= 0x7f;\n\n// result.r = hexlify(bytes.slice(0, 32));\n// result.s = hexlify(bytes.slice(32, 64));\n// } else if (bytes.length === 65) {\n// result.r = hexlify(bytes.slice(0, 32));\n// result.s = hexlify(bytes.slice(32, 64));\n// result.v = bytes[64];\n// } else {\n// logger.throwArgumentError(\n// 'invalid signature string',\n// 'signature',\n// signature,\n// );\n// }\n\n// // Allow a recid to be used as the v\n// if (result.v < 27) {\n// if (result.v === 0 || result.v === 1) {\n// result.v += 27;\n// } else {\n// logger.throwArgumentError(\n// 'signature invalid v byte',\n// 'signature',\n// signature,\n// );\n// }\n// }\n\n// // Compute recoveryParam from v\n// result.recoveryParam = 1 - (result.v % 2);\n\n// // Compute _vs from recoveryParam and s\n// if (result.recoveryParam) {\n// bytes[32] |= 0x80;\n// }\n// result._vs = hexlify(bytes.slice(32, 64));\n// } else {\n// result.r = signature.r;\n// result.s = signature.s;\n// result.v = signature.v;\n// result.recoveryParam = signature.recoveryParam;\n// result._vs = signature._vs;\n\n// // If the _vs is available, use it to populate missing s, v and recoveryParam\n// // and verify non-missing s, v and recoveryParam\n// if (result._vs != null) {\n// const vs = zeroPad(arrayify(result._vs), 32);\n// result._vs = hexlify(vs);\n\n// // Set or check the recid\n// const recoveryParam = vs[0] >= 128 ? 1 : 0;\n// if (result.recoveryParam == null) {\n// result.recoveryParam = recoveryParam;\n// } else if (result.recoveryParam !== recoveryParam) {\n// logger.throwArgumentError(\n// 'signature recoveryParam mismatch _vs',\n// 'signature',\n// signature,\n// );\n// }\n\n// // Set or check the s\n// vs[0] &= 0x7f;\n// const s = hexlify(vs);\n// if (result.s == null) {\n// result.s = s;\n// } else if (result.s !== s) {\n// logger.throwArgumentError(\n// 'signature v mismatch _vs',\n// 'signature',\n// signature,\n// );\n// }\n// }\n\n// // Use recid and v to populate each other\n// if (result.recoveryParam == null) {\n// if (result.v == null) {\n// logger.throwArgumentError(\n// 'signature missing v and recoveryParam',\n// 'signature',\n// signature,\n// );\n// } else if (result.v === 0 || result.v === 1) {\n// result.recoveryParam = result.v;\n// } else {\n// result.recoveryParam = 1 - (result.v % 2);\n// }\n// } else {\n// if (result.v == null) {\n// result.v = 27 + result.recoveryParam;\n// } else {\n// const recId =\n// result.v === 0 || result.v === 1 ? result.v : 1 - (result.v % 2);\n// if (result.recoveryParam !== recId) {\n// logger.throwArgumentError(\n// 'signature recoveryParam mismatch v',\n// 'signature',\n// signature,\n// );\n// }\n// }\n// }\n\n// if (result.r == null || !isHexString(result.r)) {\n// logger.throwArgumentError(\n// 'signature missing or invalid r',\n// 'signature',\n// signature,\n// );\n// } else {\n// result.r = hexZeroPad(result.r, 32);\n// }\n\n// if (result.s == null || !isHexString(result.s)) {\n// logger.throwArgumentError(\n// 'signature missing or invalid s',\n// 'signature',\n// signature,\n// );\n// } else {\n// result.s = hexZeroPad(result.s, 32);\n// }\n\n// const vs = arrayify(result.s);\n// if (vs[0] >= 128) {\n// logger.throwArgumentError(\n// 'signature s out of range',\n// 'signature',\n// signature,\n// );\n// }\n// if (result.recoveryParam) {\n// vs[0] |= 0x80;\n// }\n// const _vs = hexlify(vs);\n\n// if (result._vs) {\n// if (!isHexString(result._vs)) {\n// logger.throwArgumentError(\n// 'signature invalid _vs',\n// 'signature',\n// signature,\n// );\n// }\n// result._vs = hexZeroPad(result._vs, 32);\n// }\n\n// // Set or check the _vs\n// if (result._vs == null) {\n// result._vs = _vs;\n// } else if (result._vs !== _vs) {\n// logger.throwArgumentError(\n// 'signature _vs mismatch v and s',\n// 'signature',\n// signature,\n// );\n// }\n// }\n\n// result.yParityAndS = result._vs;\n// result.compact = result.r + result.yParityAndS.substring(2);\n\n// return result;\n// }\n\n// export function joinSignature(signature: SignatureLike): string {\n// signature = splitSignature(signature);\n\n// return hexlify(\n// concat([\n// signature.r,\n// signature.s,\n// signature.recoveryParam ? '0x1c' : '0x1b',\n// ]),\n// );\n// }\n","import Big from 'big.js';\nimport { TinyBig } from '../../shared/tiny-big/tiny-big';\nimport { hexlify } from '../../utils/bytes';\nimport type {\n RPCTransactionRequest,\n TransactionRequest,\n} from './../../types/Transaction.types';\nimport type { BytesLike } from './../../utils/bytes';\n\n/**\n * @param transaction\n * @example\n */\nexport function prepareTransaction(\n transaction: TransactionRequest,\n): RPCTransactionRequest {\n const preparedTransaction = {\n ...transaction,\n } as unknown as RPCTransactionRequest;\n (Object.keys(transaction) as Array<keyof TransactionRequest>).forEach(\n (key) => {\n switch (key) {\n case 'gas':\n case 'gasPrice':\n case 'nonce':\n case 'maxFeePerGas':\n case 'maxPriorityFeePerGas':\n case 'value': {\n const value = transaction[key];\n if (value instanceof TinyBig) {\n preparedTransaction[key] = value.toHexString();\n } else if (value instanceof Big) {\n preparedTransaction[key] = `0x${BigInt(value.toString()).toString(\n 16,\n )}`;\n } else if (typeof transaction[key] === 'number')\n preparedTransaction[key] =\n '0x' + (transaction[key] as any).toString(16);\n else preparedTransaction[key] = (transaction[key] as any).toString();\n break;\n }\n case 'data':\n preparedTransaction[key] = hexlify(transaction[key] as BytesLike);\n break;\n }\n },\n );\n return preparedTransaction;\n}\n","// autogenerated in \"fetch-chains-info.ts\"\n// Do not edit directly\nexport default {\n \"1\": [\n \"eth\",\n \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\"\n ],\n \"5\": [\n \"gor\",\n \"0x112234455c3a32fd11230c42e7bccd4a84e02010\"\n ],\n \"10\": [\n \"oeth\"\n ],\n \"50\": [\n \"xdc\"\n ],\n \"56\": [\n \"bnb\"\n ],\n \"100\": [\n \"gno\"\n ],\n \"137\": [\n \"matic\"\n ],\n \"250\": [\n \"ftm\"\n ],\n \"324\": [\n \"zksync\"\n ],\n \"1101\": [\n \"zkevm\"\n ],\n \"1337\": [\n \"geth\"\n ],\n \"7700\": [\n \"canto\"\n ],\n \"9001\": [\n \"evmos\"\n ],\n \"42161\": [\n \"arb1\"\n ],\n \"42220\": [\n \"celo\"\n ],\n \"43114\": [\n \"avax\"\n ],\n \"59140\": [\n \"linea-testnet\"\n ],\n \"80001\": [\n \"maticmum\"\n ],\n \"421613\": [\n \"arb-goerli\"\n ],\n \"534352\": [\n \"scr\"\n ],\n \"11155111\": [\n \"sep\"\n ]\n}","import { cleanBlock } from '../classes/utils/clean-block';\nimport { cleanLog } from '../classes/utils/clean-log';\nimport { cleanTransaction } from '../classes/utils/clean-transaction';\nimport { cleanTransactionReceipt } from '../classes/utils/clean-transaction-receipt';\nimport { buildRPCPostBody, post } from '../classes/utils/fetchers';\nimport { hexToDecimal } from '../classes/utils/hex-to-decimal';\nimport { prepareTransaction } from '../classes/utils/prepare-transaction';\nimport { logger } from '../logger/logger';\nimport type { TinyBig } from '../shared/tiny-big/tiny-big';\nimport { tinyBig } from '../shared/tiny-big/tiny-big';\nimport type { BlockResponse, BlockTag, RPCBlock } from '../types/Block.types';\nimport type { FeeData } from '../types/FeeData.types';\nimport type { Filter, FilterByBlockHash } from '../types/Filter.types';\nimport type { Network } from '../types/Network.types';\nimport type {\n Log,\n RPCLog,\n RPCTransaction,\n RPCTransactionReceipt,\n TransactionReceipt,\n TransactionRequest,\n TransactionResponse,\n} from '../types/Transaction.types';\nimport chainsInfo from './utils/chains-info';\n\n/**\n * Converts a block tag into the right format when needed.\n *\n * * No equivalent in ethers.js\n * * No equivalent in web3.js\n *\n * @internal\n * @param blockTag the block tag to convert/return as a hex string\n * @returns the specified block tag formatted as a hex string\n * @example\n * ```javascript\n * prepBlockTag(14848183);\n * // '0xe290b7'\n * ```\n * @example\n * ```javascript\n * prepBlockTag('0xe290b7');\n * // '0xe290b7'\n * ```\n */\nfunction prepBlockTag(blockTag: BlockTag): string {\n return typeof blockTag === 'number'\n ? tinyBig(blockTag).toHexString()\n : blockTag;\n}\n\nexport abstract class BaseProvider {\n /**\n * ignore\n */\n abstract selectRpcUrl(): string;\n abstract post(body: Record<string, unknown>): Promise<any>;\n\n /**\n * @ignore\n */\n readonly _rpcUrls: string[] = [];\n /**\n * @ignore\n */\n protected _post = (body: Record<string, unknown>) =>\n post(this.selectRpcUrl(), body);\n\n /**\n * @param rpcUrls The URL(s) to your Eth node(s). Consider POKT or Infura\n * @example\n * `https://free-eth-node.com/api/eth`\n * @example\n * `https://mainnet.infura.io/v3/YOUR-PROJECT-ID`\n */\n constructor(rpcUrls: string[]) {\n this._rpcUrls = rpcUrls;\n }\n\n /**\n * Gets information (name, chainId, and ensAddress when applicable) about the network the provider is connected to.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getNetwork`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getNetwork) in ethers.js\n * * [Similar](/docs/api#isd) to [`web3.eth.getChainId`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getchainid) in web3.js, returns more than just the `chainId`\n *\n * @returns information about the network this provider is currently connected to\n * @example\n * ```javascript\n * jsonRpcProvider('https://free-eth-node.com/api/eth').getNetwork();\n * // { chainId: 1, name: 'eth', ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' }\n * ```\n * @example\n * ```javascript\n * jsonRpcProvider('https://free-eth-node.com/api/MATIC').getNetwork();\n * // { chainId: 137, name: 'MATIC', ensAddress: null }\n * ```\n */\n public async getNetwork(): Promise<Network> {\n const hexChainId = (await this.post(\n buildRPCPostBody('eth_chainId', []),\n )) as string;\n\n const chainId = hexToDecimal(hexChainId);\n const info = (chainsInfo as any)[chainId];\n return {\n chainId: Number(chainId),\n name: info[0] || 'unknown',\n ensAddress: info[1] || null, // only send ensAddress if it exists\n };\n }\n\n /**\n * Gets the number of the most recently mined block on the network the provider is connected to.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getBlockNumber`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getBlockNumber) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.getBlockNumber`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getblocknumber) in web3.js\n *\n * @returns the number of the most recently mined block\n * @example\n * ```javascript\n * await provider.getBlockNumber();\n * // 1053312\n * ```\n */\n public async getBlockNumber(): Promise<number> {\n const currentBlockNumber = (await this.post(\n buildRPCPostBody('eth_blockNumber', []),\n )) as string;\n return Number(hexToDecimal(currentBlockNumber));\n }\n\n /**\n * Gets information about a specified transaction, even if it hasn't been mined yet.\n *\n * * [Similar](/docs/api#isd) to [`ethers.provider.getTransaction`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getTransaction) in ethers.js, does not have `wait` method that waits until the transaction has been mined\n * * [Similar](/docs/api#isd) to [`web3.eth.getTransaction`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#gettransaction) in web3.js, some information returned using different types\n *\n * @param transactionHash the hash of the transaction to get information about\n * @returns information about the specified transaction\n * @example\n * ```javascript\n * await provider.getTransaction('0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789');\n * // {\n * // accessList: [],\n * // blockHash: \"0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d\",\n * // blockNumber: 14578286,\n * // chainId: 1,\n * // from: \"0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4\",\n * // gas: { TinyBig: 112163 },\n * // gasPrice: { TinyBig: 48592426858 },\n * // hash: \"0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789\",\n * // input: \"0x83259f17000000000000000000000000000000000000000000...\",\n * // maxFeePerGas: { TinyBig: 67681261618 },\n * // maxPriorityFeePerGas: { TinyBig: 1500000000 },\n * // nonce: { TinyBig: 129 },\n * // r: \"0x59a7c15b12c18cd68d6c440963d959bff3e73831ffc938e75ecad07f7ee43fbc\",\n * // s: \"0x1ebaf05f0d9273b16c2a7748b150a79d22533a8cd74552611cbe620fee3dcf1c\",\n * // to: \"0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B\",\n * // transactionIndex: 29,\n * // type: 2,\n * // v: 0,\n * // value: { TinyBig: 0 },\n * // confirmations: 298140,\n * // }\n * ```\n */\n public async getTransaction(\n transactionHash: string,\n ): Promise<TransactionResponse> {\n const [rpcTransaction, blockNumber] = await Promise.all([\n this.post(\n buildRPCPostBody('eth_getTransactionByHash', [transactionHash]),\n ) as Promise<RPCTransaction>,\n this.getBlock('latest'),\n ]);\n const cleanedTransaction = cleanTransaction(rpcTransaction);\n // https://ethereum.stackexchange.com/questions/2881/how-to-get-the-transaction-confirmations-using-the-json-rpc\n cleanedTransaction.confirmations =\n blockNumber.number - cleanedTransaction.blockNumber + 1;\n return cleanedTransaction;\n }\n\n /**\n * Gives information about a transaction that has already been mined. Includes additional information beyond what's provided by [`getTransaction`](/docs/api/modules#gettransaction).\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getTransactionReceipt`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getTransactionReceipt) in ethers.js\n * * [Similar](/docs/api#isd) to [`web3.eth.getTransactionReceipt`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#gettransactionreceipt) in web3.js, some information returned using different types\n *\n * @param transactionHash the hash of the transaction to get information about\n * @returns information about the specified transaction that has already been mined\n * @example\n * ```javascript\n * await provider.getTransactionReceipt('0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789');\n * // {\n * // blockHash: \"0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d\",\n * // blockNumber: 14578286,\n * // contractAddress: null,\n * // cumulativeGasUsed: { TinyBig: 3067973 },\n * // effectiveGasPrice: { TinyBig: 48592426858 },\n * // from: \"0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4\",\n * // gasUsed: { TinyBig: 112163 },\n * // logs: [\n * // {\n * // address: \"0x0eDF9bc41Bbc1354c70e2107F80C42caE7FBBcA8\",\n * // blockHash: \"0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d\",\n * // blockNumber: 14578286,\n * // data: \"0x0000000000000000000000000000000000000000000003a12ec797b5484968c1\",\n * // logIndex: 42,\n * // topics: [\n * // \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n * // \"0x00000000000000000000000039b72d136ba3e4cef35f48cd09587ffab754dd8b\",\n * // \"0x000000000000000000000000dfd9de5f6fa60bd70636c0900752e93a6144aed4\",\n * // ],\n * // transactionHash: \"0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789\",\n * // transactionIndex: 29,\n * // },\n * // {\n * // address: \"0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B\",\n * // blockHash: \"0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d\",\n * // blockNumber: 14578286,\n * // data: \"0x0000000000000000000000000000000000000000000003a12ec797b5484968c1\",\n * // logIndex: 43,\n * // topics: [\n * // \"0x34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7\",\n * // \"0x000000000000000000000000dfd9de5f6fa60bd70636c0900752e93a6144aed4\",\n * // \"0x0000000000000000000000000000000000000000000000000000000000000003\",\n * // ],\n * // transactionHash: \"0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789\",\n * // transactionIndex: 29,\n * // },\n * // ],\n * // logsBloom: \"0x00000000000000000000000000000...\",\n * // status: 1,\n * // to: \"0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B\",\n * // transactionHash: \"0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789\",\n * // transactionIndex: 29,\n * // type: 2,\n * // byzantium: true,\n * // confirmations: 298171,\n * // }\n * ```\n */\n public async getTransactionReceipt(\n transactionHash: string,\n ): Promise<TransactionReceipt> {\n const [rpcTransaction, blockNumber] = await Promise.all([\n this.post(\n buildRPCPostBody('eth_getTransactionReceipt', [transactionHash]),\n ) as Promise<RPCTransactionReceipt>,\n this.getBlock('latest'),\n ]);\n const cleanedTransactionReceipt = cleanTransactionReceipt(rpcTransaction);\n cleanedTransactionReceipt.confirmations =\n blockNumber.number - cleanedTransactionReceipt.blockNumber + 1;\n return cleanedTransactionReceipt;\n }\n\n /**\n * Returns the number of sent transactions by an address, from genesis (or as far back as a provider looks) up to specified block.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getTransactionCount`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getTransactionCount) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.getTransactionCount`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#gettransactioncount) in web3.js\n *\n * @param address the address to count number of sent transactions\n * @param blockTag the block to count transactions up to, inclusive\n * @returns the number of transactions sent by the specified address\n * @example\n * ```javascript\n * await provider.getTransactionCount('0x71660c4005ba85c37ccec55d0c4493e66fe775d3');\n * // 1060000\n * ```\n * @example\n * ```javascript\n * await provider.getTransactionCount('0x71660c4005ba85c37ccec55d0c4493e66fe775d3', 'latest');\n * // 1060000\n * ```\n * @example\n * ```javascript\n * await provider.getTransactionCount('0x71660c4005ba85c37ccec55d0c4493e66fe775d3', 14649390);\n * // 1053312\n * ```\n */\n public async getTransactionCount(\n address: string,\n blockTag: BlockTag = 'latest',\n ): Promise<number> {\n blockTag = prepBlockTag(blockTag);\n const transactionCount = (await this.post(\n buildRPCPostBody('eth_getTransactionCount', [address, blockTag]),\n )) as string;\n return Number(hexToDecimal(transactionCount));\n }\n\n /**\n * Gets information about a certain block, optionally with full transaction objects.\n *\n * * [Similar](/docs/api#isd) to [`ethers.provider.getBlock`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getLogs) in ethers.js, includes some additional information. Can also return block with full transaction objects, similar to [`ethers.providers.getBlockWithTransactions`]\n * * [Identical](/docs/api#isd) to [`web3.eth.getBlock`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getpastlogs) in web3.js\n *\n * @param timeFrame The number, hash, or text-based description ('latest', 'earliest', or 'pending') of the block to collect information on.\n * @param returnTransactionObjects Whether to also return data about the transactions on the block.\n * @returns A BlockResponse object with information about the specified block\n * @example\n * ```javascript\n * await provider.getBlock(14879862);\n * // {\n * // baseFeePerGas: { TinyBig: 39095728776 },\n * // difficulty: { TinyBig: 14321294455359973 },\n * // extraData: \"0x486976656f6e2073672d6865617679\",\n * // gasLimit: { TinyBig: 29970620 },\n * // gasUsed: { TinyBig: 20951384 },\n * // hash: \"0x563b458ec3c4f87393b53f70bdddc0058497109b784d8cacd9247ddf267049ab\",\n * // logsBloom:\n * // \"0x9f38794fe80b521794df6efad8b0d2e9582f9ec3959a3f9384bda0fa371cfa5fac5af9d515c6bdf1ec325f5b5f7ebdd6a3a9fae17b38a86d4dc4b0971afc68d8086640550f4c156e6f923f4a1bb94fb0bed6cdcc474c5c64bfeff7a4a906f72b9a7b94004ee58efc53d63ac66961acd3a431b2d896cc9fd75f6072960bced45f770587caf130f57504decfcb63c6ca8fbc5bdbd749edd5a99a7375d2b81872289adb775fb3c928259f4be39c6d3f4d5b6217822979bb88c1f1fb62429b1b6d41cf4e3f77f9e1db3f5723108f1e5b1255dd734ad8cdb11e7ea22487c788e67c83777b6f395e504ca59c64f52245ee6de3804cf809e5caa4f0ea6a9aa9eb6ed801\",\n * // miner: \"0x1aD91ee08f21bE3dE0BA2ba6918E714dA6B45836\",\n * // mixHash: \"0x73cc9419bfb89c9d41c3a8c34ce56b5ebe468bdcf870258d2e77262275d580ec\",\n * // nonce: \"0x976f3f5d596ffb08\",\n * // number: 14879862,\n * // parentHash: \"0x95986ae14a71face8d9a6a379edd875b2e8bc73e4de0d9d460e7752bddb0f579\",\n * // receiptsRoot: \"0x8e6ba2fd9bee602b653dae6e3132f16538c2c5df24f1df8c000392053f73defa\",\n * // sha3Uncles: \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\",\n * // size: { TinyBig: 134483 },\n * // stateRoot: \"0xbf2bb67bd1c741f3d00904b8451d7c2cf4e3a2726f5a5884792ede2074747b85\",\n * // timestamp: { TinyBig: 1654016186 },\n * // totalDifficulty: { TinyBig: 50478104614257705213748 },\n * // transactions: [\n * // \"0xb3326a9149809603a2c28545e50e4f7d16e194bf5ee9764e0544603854c4a8d2\",\n * // \"0x8b42095f8d335404a4896b2817b8e5e3d86a5a87cb434a8eec295d5280a7f48e\",\n * // \"0x882f78fcb73f0f7ad0700bb0424a8b4beb366aaa93b88a3562c49a8d0ce4dcff\",\n * // ...\n * // ],\n * // transactionsRoot: \"0x5934902f3dcc263ec34f24318179bf6301f53f4834685792066026f3a4849d72\",\n * // uncles: [],\n * // }\n * ```\n */\n public async getBlock(\n timeFrame: BlockTag = 'latest',\n returnTransactionObjects = false,\n ): Promise<BlockResponse> {\n let type: 'Number' | 'Hash' = 'Number';\n if (typeof timeFrame === 'string' && timeFrame.length === 66) {\n // use endpoint that accepts string\n type = 'Hash';\n } else {\n timeFrame = prepBlockTag(timeFrame);\n }\n\n const rpcBlock = (await this.post(\n buildRPCPostBody(`eth_getBlockBy${type}`, [\n timeFrame,\n returnTransactionObjects,\n ]),\n )) as RPCBlock;\n\n return cleanBlock(rpcBlock, returnTransactionObjects);\n }\n\n /**\n * Gives an estimate of the current gas price in wei.\n *\n * * [Similar](/docs/api#isd) to [`ethers.provider.getGasPrice`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getGasPrice) in ethers.js, does not have a parameter specifying what unit you'd like to return. See also [`weiToEther`](/docs/api/modules#weitoether) and [`etherToGwei`](/docs/api/modules#ethertogwei)\n * * [Identical](/docs/api#isd) to [`web3.eth.getGasPrice`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getgasprice) in web3.js, returns a number (TinyBig) instead of a string\n *\n * @returns an estimate of the current gas price in wei\n * @example\n * ```javascript\n * await provider.getGasPrice();\n * // 52493941856\n * ```\n */\n public async getGasPrice(): Promise<TinyBig> {\n const hexGasPrice = (await this.post(\n buildRPCPostBody('eth_gasPrice', []),\n )) as string;\n return tinyBig(hexToDecimal(hexGasPrice));\n }\n\n /**\n * Returns the balance of the account in wei.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getBalance`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getBalance) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.getBalance`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getbalance) in web3.js, returns a number (TinyBig) instead of a string\n *\n * @param address the address to check the balance of\n * @param blockTag the block to check the specified address' balance on\n * @returns the balance of the network's native token for the specified address on the specified block\n * @example\n * ```javascript\n * await provider.getBalance('0x7cB57B5A97eAbe94205C07890BE4c1aD31E486A8');\n * // 28798127851528138\n * ```\n */\n public async getBalance(\n address: string,\n blockTag: BlockTag = 'latest',\n ): Promise<TinyBig> {\n blockTag = prepBlockTag(blockTag);\n const hexBalance = (await this.post(\n buildRPCPostBody('eth_getBalance', [address, blockTag]),\n )) as string;\n return tinyBig(hexToDecimal(hexBalance));\n }\n\n /**\n * Gets the code of a contract on a specified block.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getCode`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getCode) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.getCode`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getcode) in web3.js\n *\n * @param address the contract address to get the contract code from\n * @param blockTag the block height to search for the contract code from. Contract code can change, so this allows for checking a specific block\n * @returns the contract creation code for the specified address at the specified block height\n * @example\n * ```javascript\n * await jsonRpcProvider().getCode('0xaC6095720221C79C6E7C638d260A2eFBC5D8d880', 'latest');\n * // '0x608060405234801561001057600080fd5b506004361061...'\n * ```\n */\n public async getCode(\n address: string,\n blockTag: BlockTag = 'latest',\n ): Promise<string> {\n blockTag = prepBlockTag(blockTag);\n const contractCode = (await this.post(\n buildRPCPostBody('eth_getCode', [address, blockTag]),\n )) as string;\n return contractCode;\n }\n\n /**\n * Returns an estimate of the amount of gas that would be required to submit transaction to the network.\n * An estimate may not be accurate since there could be another transaction on the network that was not accounted for.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.estimateGas`](https://docs.ethers.io/v5/api/providers/provider/#Provider-estimateGas) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.estimateGas`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#estimateGas) in web3.js\n *\n * @param transaction the transaction to check the estimated gas cost for\n * @returns the estimated amount of gas charged for submitting the specified transaction to the blockchain\n * @example\n * ```javascript\n * await provider.estimateGas({\n * // Wrapped ETH address\n * to: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n * data: \"0xd0e30db0\",\n * value: etherToWei('1.0').toHexString(),\n * });\n * // { TinyBig: \"27938\" }\n * ```\n */\n public async estimateGas(transaction: TransactionRequest): Promise<TinyBig> {\n const rpcTransaction = prepareTransaction(transaction);\n const gasUsed = (await this.post(\n buildRPCPostBody('eth_estimateGas', [rpcTransaction]),\n )) as string;\n return tinyBig(hexToDecimal(gasUsed));\n }\n\n /**\n * Returns the current recommended FeeData to use in a transaction.\n * For an EIP-1559 transaction, the maxFeePerGas and maxPriorityFeePerGas should be used.\n * For legacy transactions and networks which do not support EIP-1559, the gasPrice should be used.Returns an estimate of the amount of gas that would be required to submit transaction to the network.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getFeeData`](https://docs.ethers.org/v5/api/providers/provider/#Provider-getFeeData) in ethers.js\n *\n * @returns an object with gas estimates for the network currently\n * @example\n * ```javascript\n * await provider.getFeeData();\n * // {\n * // gasPrice: { TinyBig: \"14184772639\" },\n * // lastBaseFeePerGas: { TinyBig: \"14038523098\" },\n * // maxFeePerGas: { TinyBig: \"29577046196\" },\n * // maxPriorityFeePerGas: { TinyBig: \"1500000000\" }\n * // }\n * ```\n */\n public async getFeeData(): Promise<FeeData> {\n const [block, gasPrice] = await Promise.all([\n this.getBlock('latest'),\n this.getGasPrice(),\n ]);\n\n let lastBaseFeePerGas = null,\n maxFeePerGas = null,\n maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n lastBaseFeePerGas = block.baseFeePerGas;\n maxPriorityFeePerGas = tinyBig('1500000000');\n maxFeePerGas = tinyBig(\n block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas),\n );\n }\n\n return { lastBaseFeePerGas, maxFeePerGas, maxPriorityFeePerGas, gasPrice };\n }\n\n /**\n * Returns transaction receipt event logs that match a specified filter.\n * May return `[]` if parameters are too broad, even if logs exist.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.getLogs`](https://docs.ethers.io/v5/api/providers/provider/#Provider-getLogs) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.getPastLogs`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#getpastlogs) in web3.js\n *\n * @param filter parameters to filter the logs by\n * @returns an array of logs matching the specified filter\n * @example\n * ```javascript\n * provider.getLogs({\n * address: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\n * topics: [\n * \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n * \"0x00000000000000000000000021b8065d10f73ee2e260e5b47d3344d3ced7596e\",\n * ],\n * fromBlock: 14825027,\n * toBlock: 14825039,\n * });\n *\n * [\n * {\n * address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n * blockHash: '0x8e0dfac2f704851960f866c8708b3bef2f66c0fee0329cf25ff0261b264ca6bc',\n * blockNumber: 14825029,\n * data: '0x000000000000000000000000000000000000000000000000005f862ee352a38a',\n * logIndex: 384,\n * removed: false,\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x00000000000000000000000021b8065d10f73ee2e260e5b47d3344d3ced7596e',\n * '0x00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45'\n * ],\n * transactionHash: '0xbd49031be16f8fd1775f4e0fe79b408ffd8ae9c65b2827ee47e3238e3f51f4c0',\n * transactionIndex: 226\n * }\n * ]\n * ```\n */\n public async getLogs(\n filter: Filter | FilterByBlockHash,\n ): Promise<Array<Log>> {\n const filterByRange = filter as Filter;\n if (filterByRange.fromBlock)\n filterByRange.fromBlock = prepBlockTag(filterByRange.fromBlock);\n if (filterByRange.toBlock)\n filterByRange.toBlock = prepBlockTag(filterByRange.toBlock);\n\n const rpcLogs = (await this.post(\n buildRPCPostBody('eth_getLogs', [filter]),\n )) as Array<RPCLog>;\n const logs = rpcLogs.map((log) => cleanLog(log, false));\n return logs;\n }\n\n /**\n * Returns the result of adding a transaction to the blockchain without actually adding that transaction to the blockchain.\n * Does not require any ether as gas.\n *\n * * [Identical](/docs/api#isd) to [`ethers.provider.call`](https://docs.ethers.io/v5/api/providers/provider/#Provider-call) in ethers.js\n * * [Identical](/docs/api#isd) to [`web3.eth.call`](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#call) in web3.js\n *\n * @param transaction the transaction object to, in theory, execute. Doesn't actually get added to the blockchain.\n * @param blockTag the block to execute this transaction on\n * @returns the result of executing the transaction on the specified block\n * @example\n * ```javascript\n * await provider.call({ to: \"0x6b175474e89094c44da98b954eedeac495271d0f\", data: \"0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE\" });\n * // '0x0000000000000000000000000000000000000000000000000858898f93629000'\n * ```\n */\n public async call(\n transaction: TransactionRequest,\n blockTag: BlockTag = 'latest',\n ): Promise<string> {\n if (\n transaction.gasPrice &&\n (transaction.maxPriorityFeePerGas || transaction.maxFeePerGas)\n ) {\n logger.throwError(\n 'Cannot specify both \"gasPrice\" and (\"maxPriorityFeePerGas\" or \"maxFeePerGas\")',\n {\n gasPrice: transaction.gasPrice,\n maxFeePerGas: transaction.maxFeePerGas,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,\n },\n );\n }\n if (transaction.maxFeePerGas && transaction.maxPriorityFeePerGas) {\n logger.throwError(\n 'Cannot specify both \"maxFeePerGas\" and \"maxPriorityFeePerGas\"',\n {\n maxFeePerGas: transaction.maxFeePerGas,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,\n },\n );\n }\n blockTag = prepBlockTag(blockTag);\n const rpcTransaction = prepareTransaction(transaction);\n const transactionRes = (await this.post(\n buildRPCPostBody('eth_call', [rpcTransaction, blockTag]),\n )) as string;\n return transactionRes;\n }\n}\n","import { tinyBig } from '../../shared/tiny-big/tiny-big';\nimport type {\n Log,\n RPCLog,\n RPCTransactionReceipt,\n TransactionReceipt,\n} from '../../types/Transaction.types';\nimport { toChecksumAddress } from '../../utils/to-checksum-address';\nimport { cleanLog } from './clean-log';\nimport { cleanTransaction } from './clean-transaction';\nimport { hexToDecimal } from './hex-to-decimal';\n\n/**\n * Converts RPC transaction receipt response to more JS-friendly format\n *\n * @param transactionReceipt the transaction receipt to clean\n * @returns a cleaned transaction receipt\n * @example\n * ```javascript\n * const RPCTransactionReceipt = { blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: '0xe28f62', contractAddress: null, cumulativeGasUsed: '0x37a2b9', effectiveGasPrice: '0x62df1c62c', from: '0x642824fab1d0141073ed74326332950bec4701e3', gasUsed: '0x1a325', logs: [ { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 84, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x000000000000000000000000000000000000000000000000000000000000074d' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 85, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x000000000000000000000000000000000000000000000000000000000000074e' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 86, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x000000000000000000000000000000000000000000000000000000000000074f' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 87, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000750' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 88, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000751' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 89, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000752' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 90, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000753' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 91, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000754' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 92, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000755' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 93, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000756' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 } ], logsBloom: '0x20000080004000000000000400000000000001000000000400000000000000000000000000000000000000000008000000000000000000000000000000004000000000000008000000000008000000010080000014000004000000000000000000100000020800000000000000001800000080000000002000000010000000000000000000000200000200000000002000000000000400000000000000000000000000000000000000000040000000000000000100000000000000000000040002100002000000000000080000000000000100000002000000040000001220000000000000000000000000000000000000000000000000000000000000004000', status: '0x1', to: '0x84f80ea01e26b7c11bdd241970982c7eeab6ddcc', transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: '0x29', type: '0x2' }\n * cleanTransactionReceipt(RPCTransactionReceipt);\n * // { blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, contractAddress: null, cumulativeGasUsed: Big { s: 1, e: 6, c: [ 3, 6, 4, 6, 1, 3, 7 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, effectiveGasPrice: Big { s: 1, e: 10, c: [ 2, 6, 5, 4, 0, 6, 2, 3, 4, 0, 4 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, from: '0x642824FaB1D0141073ed74326332950bEc4701e3', gasUsed: Big { s: 1, e: 5, c: [ 1, 0, 7, 3, 0, 1 ], constructor: { [λ: Big] DP: 20, RM: 1, NE: -7, PE: 21, strict: false, roundDown: 0, roundHalfUp: 1, roundHalfEven: 2, roundUp: 3, Big: [Circular], default: [Circular] }, padAndChop: [λ] }, logs: [ { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 84, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x000000000000000000000000000000000000000000000000000000000000074d' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 85, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x000000000000000000000000000000000000000000000000000000000000074e' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 86, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x000000000000000000000000000000000000000000000000000000000000074f' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 87, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000750' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 88, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000751' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 89, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000752' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 90, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000753' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 91, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000754' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 92, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000755' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 }, { address: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', blockHash: '0x03ddc6a835462f750fcaf5ab511d8c48121b0813e3e80de84d7adc3ef192b7bf', blockNumber: 14847842, data: '0x', logIndex: 93, topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000000000000000000000000000000000000000000000', '0x000000000000000000000000642824fab1d0141073ed74326332950bec4701e3', '0x0000000000000000000000000000000000000000000000000000000000000756' ], transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41 } ], logsBloom: '0x20000080004000000000000400000000000001000000000400000000000000000000000000000000000000000008000000000000000000000000000000004000000000000008000000000008000000010080000014000004000000000000000000100000020800000000000000001800000080000000002000000010000000000000000000000200000200000000002000000000000400000000000000000000000000000000000000000040000000000000000100000000000000000000040002100002000000000000080000000000000100000002000000040000001220000000000000000000000000000000000000000000000000000000000000004000', status: 1, to: '0x84F80EA01e26B7C11bdd241970982C7EEAb6DdcC', transactionHash: '0xd0befcb9d10a89aba2d488534811bf5c62a889e2499d23cdd83c2a2200cde873', transactionIndex: 41, type: 2, byzantium: true, confirmations: 40 }\n * ```\n */\nexport function cleanTransactionReceipt(\n transactionReceipt: RPCTransactionReceipt,\n): TransactionReceipt {\n const cleanedTransaction = cleanTransaction(transactionReceipt as any);\n const cleanedTransactionReceipt = {\n ...cleanedTransaction,\n } as unknown as TransactionReceipt;\n (\n Object.keys(transactionReceipt) as Array<keyof RPCTransactionReceipt>\n ).forEach((key) => {\n if (!transactionReceipt[key]) return;\n switch (key) {\n case 'status':\n cleanedTransactionReceipt[key] = Number(\n hexToDecimal(transactionReceipt[key]),\n );\n break;\n case 'contractAddress':\n if (transactionReceipt[key]) {\n cleanedTransactionReceipt[key] = toChecksumAddress(\n transactionReceipt[key],\n );\n }\n break;\n case 'cumulativeGasUsed':\n case 'effectiveGasPrice':\n case 'gasUsed':\n cleanedTransactionReceipt[key] = tinyBig(\n hexToDecimal(transactionReceipt[key]),\n );\n break;\n case 'logs':\n transactionReceipt[key].forEach((log: RPCLog, index: number) => {\n cleanedTransactionReceipt[key][index] = cleanLog(log, true) as Log;\n });\n }\n });\n cleanedTransactionReceipt.byzantium =\n cleanedTransactionReceipt.blockNumber >= 4370000;\n return cleanedTransactionReceipt;\n}\n","import { tinyBig } from '../../shared/tiny-big/tiny-big';\nimport type { BlockResponse, RPCBlock } from '../../types/Block.types';\nimport type { RPCTransaction } from '../../types/Transaction.types';\nimport { toChecksumAddress } from '../../utils/to-checksum-address';\nimport { cleanTransaction } from './clean-transaction';\nimport { hexToDecimal } from './hex-to-decimal';\n\n/**\n * Converts RPC block response to more JS-friendly format\n *\n * @param block the RPCBlock to clean\n * @param returnTransactionObjects whether or not to return the transactions specified in this block\n * @returns a cleaned block\n * @example\n * ```js\n * const rpcBlock = {\n * number: '0x40f9de',\n * hash: '0x4cbaa942e48a91108f38e2a250f6dbaff7fffe3027f5ebf76701929eed2b2970',\n * parentHash: '0xc8de1e513f74cbc5cc77e2a39e4cada6504469a5d0e87200b708319c1e9ef154',\n * sha3Uncles: '0x04d250716296c9662314b37c112e5ce8b1c9ad7fd7820a39482a3688a2078f2b',\n * logsBloom: '0x0000400004000000040010100200000000000000000000000000000000000000001000000001000000000000000000000004010000000000000a800000000000040000000001000400000000000000000000000000000000000002000000000000000000000004000040000000800000000001000000000000000000000000000000000000000001000000000004200000000000000000000000000124400000000000000200100020000000000000000080000000000080001000000000000000000081000000000000000000008000000020000100000000200020100800000000000000000008002000000080001000020c00000000000000200000000000',\n * transactionsRoot: '0xfc79f4f620cb69861ac67ceee5e1ddf3e45da95be230d4064be234f1ee491aa5',\n * stateRoot: '0xfa5ef7e368997d70670b0ea3172aabefc2dee285786ce69c7165d8d854f8b292',\n * receiptsRoot: '0x7fa0679e88fef8a8f7f5865dc4e6000ddcc267b14d2904948e3b1576a18a3bbd',\n * miner: '0x1b7a75ef070ff49e6b9491a26403d799f2099ebd',\n * difficulty: '0x47ede14fcbe635706e',\n * totalDifficulty: '0x139e1de9b8404dedc5d30959',\n * extraData: '0xce018c495249532d62613031656132',\n * size: '0xb4f',\n * gasLimit: '0x67c280',\n * gasUsed: '0x56e2d',\n * timestamp: '0x62648dc2',\n * transactions: [\n * '0xd53800afc69e55cc7a64b927803b46a5b4c5ddccbaafb6b32fe0ec883739b825',\n * '0x4b8b07f35a1f911a80a0ffeebe3d3c41cd393b4d5e1ce0a408026705913d6760',\n * '0xa50eac0ea8005cb1e4b95be4e64c24035d9c41adb164c49477c3169870f02fb1',\n * '0x413e5293786f8b63e73adf0b74ab56067da4b564d01936b88b138d48cc414a42',\n * '0xd4e4969365d144b0b987632dca36ba9e272254bdc687245987a57666d6afa148'\n * ],\n * uncles: [\n * '0x36cd3869fd17a285b984dea8b705d34096e1fbdfe48df69ae530fbe921ba83fa'\n * ],\n * minimumGasPrice: '0x387ee40',\n * bitcoinMergedMiningHeader: '0x0040502d717ae205da048b0ffb8e110603564d8677ca8bd3a54601000000000000000000e722e86bfebcae00bffb46c663fa0241b63a27f0c98fa710e421d5cc1afa2448d08d6462d9f809172f5e30aa',\n * bitcoinMergedMiningCoinbaseTransaction: '0x00000000000001003f8757a906f0159f882f0968788a2e396b7bf8090e1b926fb2bb46789ac32d55082aca4e0800000000000000002b6a2952534b424c4f434b3a831a30935da1bd1e8631942fc7fa78f7a7b11d51ca39a1684d91a81f0040f9de00000000',\n * bitcoinMergedMiningMerkleProof: '0xb53111a4e11bc19bf90268485d1b957d908ebc6a4cd9862aca3fc6ed3dcf3240b14c316de8521369d55dbfeb2b0116bcc10f40e999c4885e1bd2a08691bdea1c43862d590390a227a379d5677b958f1a23eecc16ac590ad675b8a4cea0c10da3ef597acb9ca1fe0a21fc408f09e0c7169d83aca8ddd636d8cc155f922e1d36c74b7cc11e9ee98dd1bf2100a55d59630c65da3db1575d58f165c5753c1779df90efcff9017b73cc32f4c87178bd0eae6a6dd0357047be70d6c4af17fcef097e80a9f1751447f4eee3831fc79f2d894934694149bcb99840a525f5128215eca6b54642af452ee7568a9281f40560afffd35725df31b98155d7813dea12e42f2a8052c7d98bcf62c9cdc66c40fb12b729b685a31aec4970ea5316640691ae5eb616808656a2bde4e9f5920ff178bf9d1f84e96a0d0bd048a3a8ca0d60970d02aacf7ecfb6e7feaec5c4a764873531cfd630e9430840cfe8b88154da25d6b94b706fe678d0efc1ecafed5a1f539e34552bea65622513b663e17e121f3c4548942584',\n * hashForMergedMining: '0x831a30935da1bd1e8631942fc7fa78f7a7b11d51ca39a1684d91a81f0040f9de',\n * paidFees: '0x1fb451615b58',\n * cumulativeDifficulty: '0x8fdbe015f7248cf993'\n * };\n * const returnTransactionObjects = false;\n *\n * await cleanBlock(rpcBlock, returnTransactionObjects);\n * // {\n * // number: 4258270,\n * // hash: '0x4cbaa942e48a91108f38e2a250f6dbaff7fffe3027f5ebf76701929eed2b2970',\n * // parentHash: '0xc8de1e513f74cbc5cc77e2a39e4cada6504469a5d0e87200b708319c1e9ef154',\n * // sha3Uncles: '0x04d250716296c9662314b37c112e5ce8b1c9ad7fd7820a39482a3688a2078f2b',\n * // logsBloom: '0x0000400004000000040010100200000000000000000000000000000000000000001000000001000000000000000000000004010000000000000a800000000000040000000001000400000000000000000000000000000000000002000000000000000000000004000040000000800000000001000000000000000000000000000000000000000001000000000004200000000000000000000000000124400000000000000200100020000000000000000080000000000080001000000000000000000081000000000000000000008000000020000100000000200020100800000000000000000008002000000080001000020c00000000000000200000000000',\n * // transactionsRoot: '0xfc79f4f620cb69861ac67ceee5e1ddf3e45da95be230d4064be234f1ee491aa5',\n * // stateRoot: '0xfa5ef7e368997d70670b0ea3172aabefc2dee285786ce69c7165d8d854f8b292',\n * // receiptsRoot: '0x7fa0679e88fef8a8f7f5865dc4e6000ddcc267b14d2904948e3b1576a18a3bbd',\n * // miner: '0x1b7A75Ef070Ff49E6B9491a26403D799f2099EbD',\n * // difficulty: Big {\n * // s: 1,\n * // e: 21,\n * // c: [Array],\n * // constructor: [Function],\n * // padAndChop: [Function (anonymous)]\n * // },\n * // totalDifficulty: Big {\n * // s: 1,\n * // e: 27,\n * // c: [Array],\n * // constructor: [Function],\n * // padAndChop: [Function (anonymous)]\n * // },\n * // extraData: '0xce018c495249532d62613031656132',\n * // size: Big {\n * // s: 1,\n * // e: 3,\n * // c: [Array],\n * // constructor: [Function],\n * // padAndChop: [Function (anonymous)]\n * // },\n * // gasLimit: Big {\n * // s: 1,\n * // e: 6,\n * // c: [Array],\n * // constructor: [Function],\n * // padAndChop: [Function (anonymous)]\n * // },\n * // gasUsed: Big {\n * // s: 1,\n * // e: 5,\n * // c: [Array],\n * // constructor: [Function],\n * // padAndChop: [Function (anonymous)]\n * // },\n * // timestamp: Big {\n * // s: 1,\n * // e: 9,\n * // c: [Array],\n * // constructor: [Function],\n * // padAndChop: [Function (anonymous)]\n * // },\n * // transactions: [\n * // '0xd53800afc69e55cc7a64b927803b46a5b4c5ddccbaafb6b32fe0ec883739b825',\n * // '0x4b8b07f35a1f911a80a0ffeebe3d3c41cd393b4d5e1ce0a408026705913d6760',\n * // '0xa50eac0ea8005cb1e4b95be4e64c24035d9c41adb164c49477c3169870f02fb1',\n * // '0x413e5293786f8b63e73adf0b74ab56067da4b564d01936b88b138d48cc414a42',\n * // '0xd4e4969365d144b0b987632dca36ba9e272254bdc687245987a57666d6afa148'\n * // ],\n * // uncles: [\n * // '0x36cd3869fd17a285b984dea8b705d34096e1fbdfe48df69ae530fbe921ba83fa'\n * // ],\n * // minimumGasPrice: '0x387ee40',\n * // bitcoinMergedMiningHeader: '0x0040502d717ae205da048b0ffb8e110603564d8677ca8bd3a54601000000000000000000e722e86bfebcae00bffb46c663fa0241b63a27f0c98fa710e421d5cc1afa2448d08d6462d9f809172f5e30aa',\n * // bitcoinMergedMiningCoinbaseTransaction: '0x00000000000001003f8757a906f0159f882f0968788a2e396b7bf8090e1b926fb2bb46789ac32d55082aca4e0800000000000000002b6a2952534b424c4f434b3a831a30935da1bd1e8631942fc7fa78f7a7b11d51ca39a1684d91a81f0040f9de00000000',\n * // bitcoinMergedMiningMerkleProof: '0xb53111a4e11bc19bf90268485d1b957d908ebc6a4cd9862aca3fc6ed3dcf3240b14c316de8521369d55dbfeb2b0116bcc10f40e999c4885e1bd2a08691bdea1c43862d590390a227a379d5677b958f1a23eecc16ac590ad675b8a4cea0c10da3ef597acb9ca1fe0a21fc408f09e0c7169d83aca8ddd636d8cc155f922e1d36c74b7cc11e9ee98dd1bf2100a55d59630c65da3db1575d58f165c5753c1779df90efcff9017b73cc32f4c87178bd0eae6a6dd0357047be70d6c4af17fcef097e80a9f1751447f4eee3831fc79f2d894934694149bcb99840a525f5128215eca6b54642af452ee7568a9281f40560afffd35725df31b98155d7813dea12e42f2a8052c7d98bcf62c9cdc66c40fb12b729b685a31aec4970ea5316640691ae5eb616808656a2bde4e9f5920ff178bf9d1f84e96a0d0bd048a3a8ca0d60970d02aacf7ecfb6e7feaec5c4a764873531cfd630e9430840cfe8b88154da25d6b94b706fe678d0efc1ecafed5a1f539e34552bea65622513b663e17e121f3c4548942584',\n * // hashForMergedMining: '0x831a30935da1bd1e8631942fc7fa78f7a7b11d51ca39a1684d91a81f0040f9de',\n * // paidFees: '0x1fb451615b58',\n * // cumulativeDifficulty: '0x8fdbe015f7248cf993'\n * // }\n */\nexport function cleanBlock(\n block: RPCBlock,\n returnTransactionObjects: boolean,\n): BlockResponse {\n const cleanedBlock = { ...block } as unknown as BlockResponse;\n (Object.keys(block) as Array<keyof RPCBlock>).forEach((key) => {\n // pending blocks have null instead of a difficulty\n // pending blocks have null instead of a miner address\n if (!block[key]) return;\n switch (key) {\n case 'difficulty':\n case 'totalDifficulty':\n case 'gasLimit':\n case 'gasUsed':\n case 'size':\n case 'timestamp':\n case 'baseFeePerGas':\n cleanedBlock[key] = tinyBig(hexToDecimal(block[key]));\n break;\n case 'number':\n cleanedBlock[key] = Number(hexToDecimal(block[key]));\n break;\n case 'miner':\n cleanedBlock[key] = toChecksumAddress(block[key]);\n break;\n }\n });\n // for all full transactions\n if (returnTransactionObjects) {\n const txns = block.transactions as RPCTransaction[];\n txns.forEach((transaction, index) => {\n cleanedBlock.transactions[index] = cleanTransaction(transaction);\n });\n }\n return cleanedBlock;\n}\n","import { BaseProvider } from './BaseProvider';\nexport class JsonRpcProvider extends BaseProvider {\n /**\n * @ignore\n */\n selectRpcUrl(): string {\n return this._rpcUrls[0];\n }\n\n /**\n * @ignore\n */\n post(body: Record<string, unknown>): Promise<any> {\n return this._post(body);\n }\n\n /**\n * @param rpcUrl The URL to your Eth node. Consider POKT or Infura\n * @example\n * `https://free-eth-node.com/api/eth`\n * @example\n * `https://mainnet.infura.io/v3/YOUR-PROJECT-ID`\n */\n constructor(rpcUrl = 'https://free-eth-node.com/api/eth') {\n super([rpcUrl]);\n }\n}\n\n/**\n * Helper function to avoid \"new\"\n *\n * @param rpcUrl the RPC URL to post requests to\n * @returns an initiated {@link JsonRpcProvider}\n * @example\n * ```javascript\n * jsonRpcProvider().getBlock('latest').then(block => {\n * console.log(block.number);\n * })\n * // 14530496\n * ```\n */\nexport function jsonRpcProvider(rpcUrl?: string) {\n return new JsonRpcProvider(rpcUrl);\n}\n","import { JsonRpcProvider } from './JsonRpcProvider';\n\nexport class AlchemyProvider extends JsonRpcProvider {\n constructor(apiKey: string, network = 'mainnet') {\n const alchemyUrl = `https://eth-${network}.alchemyapi.io/v2/${apiKey}`;\n super(alchemyUrl);\n }\n}\n","import { logger } from '../logger/logger';\nimport { BaseProvider } from './BaseProvider';\n\n// https://advancedweb.hu/how-to-add-timeout-to-a-promise-in-javascript/\nconst promiseTimeout = <T>(prom: Promise<T>, time: number): Promise<T> =>\n new Promise<T>((resolve, reject) => {\n const timeout = setTimeout(\n () => reject(new Error('Promise timed out')),\n time,\n );\n\n prom\n .then((result) => {\n clearTimeout(timeout);\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n\nexport interface ConstructorOptions {\n timeoutDuration?: number;\n}\nconst DEFAULT_TIMEOUT_DURATION = 8000;\n\n/**\n * @beta\n * A JSON RPC Provider which moves to the next URL when one fails.\n */\nexport class FallthroughProvider extends BaseProvider {\n // index of current trusted rpc url\n /**\n * @ignore\n */\n private rpcUrlCounter = 0;\n private readonly timeoutDuration: number;\n /**\n * @ignore\n */\n public selectRpcUrl(): string {\n return this._rpcUrls[this.rpcUrlCounter];\n }\n\n constructor(rpcUrls: string[], options: ConstructorOptions = {}) {\n if (!Array.isArray(rpcUrls)) {\n logger.throwError('Array required', { rpcUrls });\n }\n if (rpcUrls.length <= 1) {\n logger.throwError('More than one rpcUrl is required', { rpcUrls });\n }\n super(rpcUrls);\n this.timeoutDuration = options.timeoutDuration || DEFAULT_TIMEOUT_DURATION;\n }\n\n /**\n * @ignore\n */\n public post = (body: Record<string, unknown>): Promise<any> => {\n // while failing post, add to rpcUrlCounter and post again\n const genesisCount = this.rpcUrlCounter;\n\n const recursivePostRetry = (): Promise<any> => {\n // Times out request\n const genesisRpcUrl = this.selectRpcUrl();\n const res = promiseTimeout(this._post(body), this.timeoutDuration).catch(\n (e) => {\n // A mutex: Only add if no other instance has discovered this url as failing yet\n if (genesisRpcUrl === this.selectRpcUrl()) {\n // add one and handle array overflow\n this.rpcUrlCounter =\n (this.rpcUrlCounter + 1) % this._rpcUrls.length;\n }\n // we've already tried this rpc, throw for good\n if (this.rpcUrlCounter === genesisCount) {\n throw e;\n }\n return recursivePostRetry();\n },\n );\n return res;\n };\n return recursivePostRetry();\n };\n}\n","import { Point } from '@noble/secp256k1';\nimport type { BytesLike } from './bytes';\nimport { hexlify } from './bytes';\n\n/**\n * Computes the public key from a given private key\n *\n * @param privKey the private key to find a public key from\n * @returns the public key related to the specified private key\n * @example\n * ```javascript\n * computePublicKey('0xb27cc8dea0177d910110e8d3ec5480d56c723abf433529f4063f261ffdb9297c');\n * // '0x045cd0032015eecfde49f82f4e149d804e8ac6e3a0bface32e37c72a71ceac864fe84da7e8df84342f7b11dfb753c4d158f636142b46b29cf7f0f171ae0aa4fb87'\n * ```\n * @example\n * ```javascript\n * computePublicKey([50,102,50,99,52,49,57,97,99,102,52,97,49,100,97,56,99,49,101,98,101,97,55,53,98,98,51,102,99,102,98,100]);\n * // '0x04a9cea77eca949df84f661cee153426fb51f2294b9364b4fac240df57360b9b0ac9c99e4d7966491ab4c81f8c82e0cd24ec5759832ad4ab736d22c7d90b806ee8'\n * ```\n */\nexport function computePublicKey(privKey: BytesLike): string {\n privKey = hexlify(privKey).slice(2);\n return '0x' + Point.fromPrivateKey(privKey).toHex();\n}\n","import { Keccak } from 'sha3';\nimport type { BytesLike } from './bytes';\n\n/**\n * Hashes data into a Keccak256 hex string\n *\n * @param data the data to be hashed using Keccak256\n * @returns a hex string with data hashed using Keccak256\n * @example\n * ```javascript\n * keccak256('essential-eth');\n * // '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'\n *\n * keccak256('0x123');\n * // '0x5fa2358263196dbbf23d1ca7a509451f7a2f64c15837bfbb81298b1e3e24e4fa'\n * ```\n */\nexport function keccak256(data: BytesLike): string {\n let bufferableData;\n if (typeof data === 'string') {\n bufferableData = Buffer.from(data.replace(/^0x/, ''), 'hex');\n } else {\n bufferableData = Buffer.from(data as any);\n }\n const keccak = new Keccak(256);\n const addressHash = '0x' + keccak.update(bufferableData).digest('hex');\n return addressHash;\n}\n","import { hexDataSlice } from './bytes';\nimport { computePublicKey } from './compute-public-key';\nimport { keccak256 } from './keccak256';\nimport { toChecksumAddress } from './to-checksum-address';\n\n/**\n * Computes the address that corresponds to a specified public or private key\n *\n * @param key the public or private key to find the address related to\n * @returns the address that corresponds to the key specified\n * @example\n * ```javascript\n * computeAddress('0x0458eb591f407aef12936bd2989ca699cf5061de9c4964dd6eb6005fd8f580c407434447e813969a1be6e9954b002cad84dfc67a69e032b273e4695e7d0db2d952'); // public key\n * // '0xA2902059a7BF992f1450BACD7357CCAa5cC8336a'\n * ```\n * @example\n * ```javascript\n * computeAddress('0x2f2c419acf4a1da8c1ebea75bb3fcfbd3ec2aa3bf0162901ccdc2f38b8f92427'); // private key\n * // '0xA2902059a7BF992f1450BACD7357CCAa5cC8336a'\n * ```\n */\nexport function computeAddress(key: string): string {\n // compressed public keys start with 0x04\n // uncompressed public keys start with 0x03 or 0x02\n if (\n !key.startsWith('0x04') &&\n !key.startsWith('0x03') &&\n !key.startsWith('0x02')\n ) {\n key = computePublicKey(key);\n }\n return toChecksumAddress(hexDataSlice(keccak256(hexDataSlice(key, 1)), 12));\n}\n","import type Big from 'big.js';\nimport type { TinyBig } from '../shared/tiny-big/tiny-big';\nimport { tinyBig } from '../shared/tiny-big/tiny-big';\nimport { validateType } from '../shared/validate-type';\n\n/**\n * Convert from Ether to Gwei\n *\n * No direct equivalent in ether.js; requires multiple functions to achieve.\n *\n * No direct equivalent in web3; requires multiple functions to achieve.\n *\n * @param etherQuantity the amount of ether to convert to gwei\n * @returns a number of gwei equivalent to the specified ether\n * @example\n * ```javascript\n * etherToGwei('1000').toString()\n * // '1000000000000'\n * etherToGwei(1000).toString()\n * // '1000000000000'\n * ```\n * @example\n * ```javascript\n * etherToGwei('1000').toNumber()\n * // 1000000000000\n * etherToGwei(1000).toNumber()\n * // 1000000000000\n * ```\n */\nexport function etherToGwei(\n etherQuantity: string | number | TinyBig | Big,\n): TinyBig {\n validateType(etherQuantity, ['string', 'number', 'object']);\n const result = tinyBig(etherQuantity).times('1000000000');\n return tinyBig(result);\n}\n","import type Big from 'big.js';\nimport type { TinyBig } from '../shared/tiny-big/tiny-big';\nimport { tinyBig } from '../shared/tiny-big/tiny-big';\nimport { validateType } from '../shared/validate-type';\n\n/**\n * Convert Ether to Wei\n *\n * Similar to [\"parseEther\" in ethers.js](https://docs.ethers.io/v5/api/utils/display-logic/#utils-parseEther)\n *\n * Similar to [\"toWei\" in web3.js](https://web3js.readthedocs.io/en/v1.7.1/web3-utils.html#towei)\n *\n * @param etherQuantity the amount of ether to convert to wei\n * @returns a number of wei equivalent to the specified ether\n * @example\n * ```javascript\n * etherToWei('1000').toString()\n * // '1000000000000000000000'\n * etherToWei(1000).toString()\n * // '1000000000000000000000'\n * ```\n * @example\n * ```javascript\n * etherToWei('1000').toNumber()\n * // 1000000000000000000000\n * etherToWei(1000).toNumber()\n * // 1000000000000000000000\n * ```\n */\nexport function etherToWei(\n etherQuantity: string | number | TinyBig | Big,\n): TinyBig {\n validateType(etherQuantity, ['string', 'number', 'object']);\n const result = tinyBig(etherQuantity).times('1000000000000000000');\n return tinyBig(result);\n}\n","import type Big from 'big.js';\nimport { tinyBig } from '../shared/tiny-big/tiny-big';\nimport { validateType } from '../shared/validate-type';\nimport type { TinyBig } from './../shared/tiny-big/tiny-big';\n\n/**\n * Convert from Gwei to Ether\n *\n * No direct equivalent in ethers.js; requires multiple functions to achieve.\n *\n * No direct equivalent in web3; requires multiple functions to achieve.\n *\n * @param gweiQuantity the amount of gwei to convert to ether\n * @returns a number of ether equivalent to the specified gwei\n * @example\n * ```javascript\n * gweiToEther('1000000000000').toString()\n * // '1000'\n * gweiToEther(1000000000000).toString()\n * // '1000'\n * ```\n * @example\n * ```javascript\n * gweiToEther('1000000000000').toNumber()\n * // 1000\n * gweiToEther(1000000000000).toNumber()\n * // 1000\n * ```\n */\nexport function gweiToEther(\n gweiQuantity: string | number | TinyBig | Big,\n): TinyBig {\n validateType(gweiQuantity, ['string', 'number', 'object']);\n const result = tinyBig(gweiQuantity).div('1000000000');\n return tinyBig(result);\n}\n","/**\n * Converts a string into a UTF-8 Byte Array\n *\n * @param data the input to be converted to a UTF-8 Byte Array\n * @returns the specified data as a UTF-8 Byte Array\n * @example\n * ```javascript\n * toUtf8Bytes('essential-eth');\n * // Uint8Array { [Iterator] 0: 101, 1: 115, 2: 115, 3: 101, 4: 110, 5: 116, 6: 105, 7: 97, 8: 108, 9: 45, 10: 101, 11: 116, 12: 104 }\n *\n * toUtf8Bytes('ethereum');\n * // Uint8Array { [Iterator] 0: 101, 1: 116, 2: 104, 3: 101, 4: 114, 5: 101, 6: 117, 7: 109 }\n * ```\n */\nexport function toUtf8Bytes(data: string): Uint8Array {\n return new Uint8Array(Buffer.from(data));\n}\n","import type { Bytes } from './bytes';\nimport { concat } from './bytes';\nimport { keccak256 } from './keccak256';\nimport { toUtf8Bytes } from './to-utf8-bytes';\n\nconst messagePrefix = '\\x19Ethereum Signed Message:\\n';\n\n/**\n * Computes the EIP-191 personal message digest of message.\n * Personal messages are converted to UTF-8 bytes and prefixed with \\x19Ethereum Signed Message: and the length of message.\n *\n * @param message the message to hash\n * @returns a message hashed using Keccak256 that matches the EIP-191 standard\n * @example\n * ```javascript\n * hashMessage(\"Hello World\");\n * // '0xa1de988600a42c4b4ab089b619297c17d53cffae5d5120d82d8a92d0bb3b78f2'\n * ```\n */\nexport function hashMessage(message: Bytes | string): string {\n if (typeof message === 'string') {\n message = toUtf8Bytes(message);\n }\n return keccak256(\n concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message,\n ]),\n );\n}\n","import { validateType } from '../shared/validate-type';\nimport { toChecksumAddress } from './to-checksum-address';\n\n/**\n * Returns a boolean as to whether the input is a valid address.\n * Does NOT support ICAP addresses\n *\n * @param address the address to check the validity of\n * @returns a boolean for whether the input is a valid address\n * @example\n * ```javascript\n * isAddress('0xc0deaf6bd3f0c6574a6a625ef2f22f62a5150eab');\n * // true\n * ```\n * @example\n * ```javascript\n * isAddress('bad');\n * // false\n * ```\n * @example\n * ```javascript\n * // Does NOT support ENS.\n * isAddress('vitalik.eth');\n * // false\n * ```\n */\nexport function isAddress(address: string): boolean {\n validateType(address, ['string']);\n try {\n toChecksumAddress(address);\n return true;\n } catch (error) {\n return false;\n }\n}\n","import { logger } from './../logger/logger';\nimport type { Signature, SignatureLike } from './bytes';\nimport {\n arrayify,\n hexlify,\n hexZeroPad,\n isBytesLike,\n isHexString,\n zeroPad,\n} from './bytes';\n\n/**\n * Expands a signature into the full signature object and fills in missing properties.\n *\n * Same as [\"splitSignature\" in ethers.js](https://docs.ethers.io/v5/api/utils/bytes/#utils-splitSignature)\n *\n * @param signature the signature object to split, parse, and compute missing properties from\n * @returns a full signature object with all properties filled\n * @example\n * ```javascript\n * const signature = '0x60bc4ed91f2021aefe7045f3f77bd12f87eb733aee24bd1965343b3c27b3971647252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee331b';\n * splitSignature(signature);\n * {\n * r: \"0x60bc4ed91f2021aefe7045f3f77bd12f87eb733aee24bd1965343b3c27b39716\",\n * s: \"0x47252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33\",\n * _vs: \"0x47252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33\",\n * recoveryParam: 0,\n * v: 27,\n * yParityAndS: \"0x47252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33\",\n * compact: \"0x60bc4ed91f2021aefe7045f3f77bd12f87eb733aee24bd1965343b3c27b3971647252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33\"\n * }\n * ```\n */\nexport function splitSignature(signature: SignatureLike): Signature {\n const result = {\n r: '0x',\n s: '0x',\n _vs: '0x',\n recoveryParam: 0,\n v: 0,\n yParityAndS: '0x',\n compact: '0x',\n };\n if (isBytesLike(signature)) {\n const bytes = arrayify(signature);\n // Get the r, s and v\n if (bytes.length === 64) {\n // EIP-2098; pull the v from the top bit of s and clear it\n result.v = 27 + (bytes[32] >> 7);\n bytes[32] &= 0x7f;\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n } else if (bytes.length === 65) {\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n result.v = bytes[64];\n } else {\n logger.throwArgumentError(\n 'invalid signature string',\n 'signature',\n signature,\n );\n }\n // Allow a recid to be used as the v\n if (result.v < 27) {\n if (result.v === 0 || result.v === 1) {\n result.v += 27;\n } else {\n logger.throwArgumentError(\n 'signature invalid v byte',\n 'signature',\n signature,\n );\n }\n }\n // Compute recoveryParam from v\n result.recoveryParam = 1 - (result.v % 2);\n // Compute _vs from recoveryParam and s\n if (result.recoveryParam) {\n bytes[32] |= 0x80;\n }\n result._vs = hexlify(bytes.slice(32, 64));\n } else {\n result.r = signature.r;\n result.s = signature.s as string;\n result.v = signature.v as number;\n result.recoveryParam = signature.recoveryParam as number;\n result._vs = signature._vs as string;\n // If the _vs is available, use it to populate missing s, v and recoveryParam\n // and verify non-missing s, v and recoveryParam\n if (result._vs != null) {\n const vs_1 = zeroPad(arrayify(result._vs), 32);\n result._vs = hexlify(vs_1);\n // Set or check the recid\n const recoveryParam = vs_1[0] >= 128 ? 1 : 0;\n if (result.recoveryParam == null) {\n result.recoveryParam = recoveryParam;\n } else if (result.recoveryParam !== recoveryParam) {\n logger.throwArgumentError(\n 'signature recoveryParam mismatch _vs',\n 'signature',\n signature,\n );\n }\n // Set or check the s\n vs_1[0] &= 0x7f;\n const s = hexlify(vs_1);\n if (result.s == null) {\n result.s = s;\n } else if (result.s !== s) {\n logger.throwArgumentError(\n 'signature v mismatch _vs',\n 'signature',\n signature,\n );\n }\n }\n // Use recid and v to populate each other\n if (result.recoveryParam == null) {\n if (result.v == null) {\n logger.throwArgumentError(\n 'signature missing v and recoveryParam',\n 'signature',\n signature,\n );\n } else if (result.v === 0 || result.v === 1) {\n result.recoveryParam = result.v;\n } else {\n result.recoveryParam = 1 - (result.v % 2);\n }\n } else {\n if (result.v == null) {\n result.v = 27 + result.recoveryParam;\n } else {\n const recId =\n result.v === 0 || result.v === 1 ? result.v : 1 - (result.v % 2);\n if (result.recoveryParam !== recId) {\n logger.throwArgumentError(\n 'signature recoveryParam mismatch v',\n 'signature',\n signature,\n );\n }\n }\n }\n if (result.r == null || !isHexString(result.r)) {\n logger.throwArgumentError(\n 'signature missing or invalid r',\n 'signature',\n signature,\n );\n } else {\n result.r = hexZeroPad(result.r, 32);\n }\n if (result.s == null || !isHexString(result.s)) {\n logger.throwArgumentError(\n 'signature missing or invalid s',\n 'signature',\n signature,\n );\n } else {\n result.s = hexZeroPad(result.s, 32);\n }\n const vs = arrayify(result.s);\n if (vs[0] >= 128) {\n logger.throwArgumentError(\n 'signature s out of range',\n 'signature',\n signature,\n );\n }\n if (result.recoveryParam) {\n vs[0] |= 0x80;\n }\n const _vs = hexlify(vs);\n if (result._vs) {\n if (!isHexString(result._vs)) {\n logger.throwArgumentError(\n 'signature invalid _vs',\n 'signature',\n signature,\n );\n }\n result._vs = hexZeroPad(result._vs, 32);\n }\n // Set or check the _vs\n if (result._vs == null) {\n result._vs = _vs;\n } else if (result._vs !== _vs) {\n logger.throwArgumentError(\n 'signature _vs mismatch v and s',\n 'signature',\n signature,\n );\n }\n }\n result.yParityAndS = result._vs;\n result.compact = result.r + result.yParityAndS.substring(2);\n return result;\n}\n","import type Big from 'big.js';\nimport type { TinyBig } from '../shared/tiny-big/tiny-big';\nimport { tinyBig } from '../shared/tiny-big/tiny-big';\nimport { validateType } from '../shared/validate-type';\n\n/**\n * Convert from Wei to Ether\n *\n * Similar to [\"formatEther\" in ethers.js](https://docs.ethers.io/v5/api/utils/display-logic/#utils-formatEther)\n *\n * Similar to [\"fromWei\" in web3.js](https://web3js.readthedocs.io/en/v1.7.1/web3-utils.html#fromwei)\n *\n * @param weiQuantity the amount of wei to convert to ether\n * @returns a number of ether equivalent to the specified wei\n * @example\n * ```javascript\n * weiToEther('1000000000000000000000').toString()\n * // '1000'\n * weiToEther(1000000000000000000000).toString()\n * // '1000'\n * ```\n * @example\n * ```javascript\n * weiToEther('1000000000000000000000').toNumber()\n * // 1000\n * weiToEther(1000000000000000000000).toNumber()\n * // 1000\n * ```\n */\nexport function weiToEther(\n weiQuantity: string | number | TinyBig | Big,\n): TinyBig {\n validateType(weiQuantity, ['string', 'number', 'object']);\n // eslint-disable-next-line no-useless-catch\n try {\n let _weiQuantity = weiQuantity;\n if (typeof weiQuantity === 'string' && weiQuantity.slice(0, 2) === '0x') {\n _weiQuantity = BigInt(weiQuantity).toString();\n }\n const result = tinyBig(_weiQuantity).div('1000000000000000000');\n return tinyBig(result);\n } catch (error) {\n throw error;\n }\n}\n","import { Buffer } from 'buffer';\nimport { hexFalse } from '../classes/utils/encode-decode-transaction';\nimport { logger } from '../logger/logger';\nimport { tinyBig } from '../shared/tiny-big/tiny-big';\nimport { arrayify, concat, hexlify, zeroPad } from './bytes';\nimport { keccak256 } from './keccak256';\n\nconst regexBytes = new RegExp('^bytes([0-9]+)$');\nconst regexNumber = new RegExp('^(u?int)([0-9]*)$');\nconst regexArray = new RegExp('^(.*)\\\\[([0-9]*)\\\\]$');\n\n/**\n * Packs a type and value together into a UTF-8 Byte Array\n *\n * @internal\n * @param type the Solidity type used for the value given\n * @param value the value to pack with its type\n * @param isArray whether the specified data is in an array\n * @returns packed data consisting of the type and value\n * @example N/A - internal function\n */\nfunction _pack(type: string, value: any, isArray?: boolean): Uint8Array {\n switch (type) {\n case 'address':\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n case 'string':\n return Buffer.from(value);\n case 'bytes':\n return arrayify(value);\n case 'bool':\n value = value ? '0x01' : '0x00';\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n }\n\n let match = type.match(regexNumber);\n if (match) {\n //let signed = (match[1] === \"int\")\n let size = parseInt(match[2] || '256');\n\n if (\n (match[2] && String(size) !== match[2]) ||\n size % 8 !== 0 ||\n size === 0 ||\n size > 256\n ) {\n logger.throwArgumentError('invalid number type', 'type', type);\n }\n\n if (isArray) {\n size = 256;\n }\n\n value = tinyBig(value).toTwos(size).toNumber();\n const hexValue = hexlify(value);\n return zeroPad(hexValue, size / 8);\n }\n\n match = type.match(regexBytes);\n if (match) {\n const size = parseInt(match[1]);\n\n if (String(size) !== match[1] || size === 0 || size > 32) {\n logger.throwArgumentError('invalid bytes type', 'type', type);\n }\n if (arrayify(value).byteLength !== size) {\n logger.throwArgumentError(`invalid value for ${type}`, 'value', value);\n }\n if (isArray) {\n return arrayify((value + hexFalse).substring(0, 66));\n }\n return value;\n }\n\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n const baseType = match[1];\n const count = parseInt(match[2] || String(value.length));\n if (count != value.length) {\n logger.throwArgumentError(\n `invalid array length for ${type}`,\n 'value',\n value,\n );\n }\n const result: Array<Uint8Array> = [];\n value.forEach(function (value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n\n return logger.throwArgumentError('invalid type', 'type', type);\n}\n\n/**\n * Converts arrays with types and values into a hex string that can be hashed\n *\n * @param types array of Solidity types, where `type[0]` is the type for `value[0]`\n * @param values array of values, where `value[0]` is of type `type[0]`\n * @returns a hex string with the data given, packed to include its types\n * @example\n * ```javascript\n * const types = ['bool', 'string', 'uint64'];\n * const values = [true, 'text', 30];\n * pack(types, values);\n * // '0x0174657874000000000000001e'\n * ```\n */\nexport function pack(types: ReadonlyArray<string>, values: ReadonlyArray<any>) {\n if (types.length != values.length) {\n logger.throwArgumentError(\n 'wrong number of values; expected ${ types.length }',\n 'values',\n values,\n );\n }\n const tight: Array<Uint8Array> = [];\n types.forEach(function (type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\n\n/**\n * Hashes data from Solidity using the Keccak256 algorithm.\n *\n * Similar to [\"solidityKeccak256\" in ethers.js](https://docs.ethers.io/v5/api/utils/hashing/#utils-solidityKeccak256)\n *\n * @param types Each [Solidity type](https://docs.soliditylang.org/en/v0.8.13/types.html) corresponding to the values passed in. Helps the function parse and pack data properly.\n * @param values Data to be concatenated (combined) and then hashed.\n * @returns A Keccak256 hash (hex string) based on the values provided\n * @example\n * ```javascript\n * const types = ['string', 'bool', 'uint32'];\n * const values = ['essential-eth is great', true, 14];\n * solidityKeccak256(types, values);\n * // '0xe4d4c8e809faac09d58f468f0aeab9474fe8965d554c6c0f868c433c3fd6acab'\n * ```\n * @example\n * ```javascript\n * const types = ['bytes4', 'uint32[5]'];\n * const values = [[116, 101, 115, 116], [5, 3, 4, 9, 18]];\n * solidityKeccak256(types, values);\n * // '0x038707a887f09355dc545412b058e7ba8f3c74047050c7c5e5e52eec608053d9'\n * ```\n */\nexport function solidityKeccak256(\n types: ReadonlyArray<string>,\n values: ReadonlyArray<any>,\n): string {\n return keccak256(pack(types, values));\n}\n"],"names":["hexToDecimal","hex","BigInt","toString","stripTrailingZeroes","numberString","isNegative","startsWith","replace","includes","scientificStrToDecimalStr","scientificString","match","base","power","split","Number","wholeNumber","fraction","baseLength","length","splitPaddedNumber","Math","abs","padStart","splice","padEnd","join","TinyBig","Big","constructor","value","super","this","padAndChop","str","padChar","Array","fill","slice","toHexString","toNumber","toTwos","bitCount","binaryStr","gte","twosComp","plus","pow","Error","tinyBig","validateType","allowedTypes","toChecksumAddress","address","test","_address","toLowerCase","Keccak","update","digest","checksumAddress","i","parseInt","addressHash","toUpperCase","hexFalse","repeat","hexTrue","BaseContract","addressOrName","contractInterface","signerOrProvider","_provider","filter","jsonABIArgument","type","forEach","name","async","_args","functionArguments","options","lastArg","isArray","data","args","hash","functionString","inputs","map","input","expandType","jsonABIInputsLength","shouldValidateInputLength","find","encodedArgs","reduce","acc","_exec","exec","arg","concat","basicType","inputType","rawArg","character","charCodeAt","paddedEncodedArg","functionHash","encodeData","decimalGas","gasLimit","gas","previousValue","currentValue","nodeResponse","call","to","_this","req","decodeRPCResponse","_jsonABIArgument$outp","outputs","hexOffset","responseData","slicedResponse","decimalOffset","hexLength","decimalLength","substring","l","code","substr","String","fromCharCode","decodeURIComponent","escape","e","hexToUtf8","output","outputType","rawOutputs","Object","defineProperty","enumerable","writable","Contract","cleanTransaction","transaction","keys","key","cleanedTransaction","cleanLog","log","receiptLog","cleanedLog","buildRPCPostBody","method","params","jsonrpc","id","logger","packageVersion","throwError","message","argsLength","entries","index","throwArgumentError","checkSafeUint53","operation","fault","isBytesLike","isHexString","isBytes","isInteger","Uint8Array","v","result","unshift","push","allowMissingPrefix","isHexable","hexPad","arrayOfBytesLike","objects","item","arrayify","accum","offset","object","set","stripZeros","start","zeroPad","hexlify","floor","hexDataLength","endOffset","hexConcat","items","hexValue","trimmed","hexStripZeros","prepareTransaction","preparedTransaction","chainsInfo","prepBlockTag","blockTag","BaseProvider","rpcUrls","_rpcUrls","_post","body","post","url","buildFetchInit","headers","JSON","stringify","then","t","text","parse","_unused","response","selectRpcUrl","chainId","info","ensAddress","currentBlockNumber","transactionHash","rpcTransaction","blockNumber","Promise","all","getBlock","confirmations","number","cleanedTransactionReceipt","transactionReceipt","byzantium","cleanTransactionReceipt","transactionCount","timeFrame","returnTransactionObjects","block","cleanedBlock","transactions","cleanBlock","gasPrice","getGasPrice","lastBaseFeePerGas","maxFeePerGas","maxPriorityFeePerGas","baseFeePerGas","mul","add","filterByRange","fromBlock","toBlock","JsonRpcProvider","rpcUrl","jsonRpcProvider","AlchemyProvider","apiKey","network","FallthroughProvider","rpcUrlCounter","timeoutDuration","genesisCount","recursivePostRetry","genesisRpcUrl","prom","time","resolve","reject","timeout","setTimeout","clearTimeout","catch","error","res","computePublicKey","privKey","Point","fromPrivateKey","toHex","keccak256","bufferableData","Buffer","from","computeAddress","hexDataSlice","etherToGwei","etherQuantity","times","etherToWei","gweiToEther","gweiQuantity","div","toUtf8Bytes","hashMessage","splitSignature","signature","r","s","_vs","recoveryParam","yParityAndS","compact","bytes","vs_1","hexZeroPad","vs","weiToEther","weiQuantity","_weiQuantity","regexBytes","RegExp","regexNumber","regexArray","_pack","size","byteLength","baseType","pack","types","values","tight","solidityKeccak256"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("sha3"),require("big.js"),require("isomorphic-unfetch"),require("@noble/secp256k1"),require("buffer")):"function"==typeof define&&define.amd?define(["exports","sha3","big.js","isomorphic-unfetch","@noble/secp256k1","buffer"],e):e((r||self).essentialEth={},r.sha3,r.Big,r.isomorphicUnfetch,r.secp256k1,r.buffer)}(this,function(r,e,t,n,i,o){function a(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var s=/*#__PURE__*/a(t),u=/*#__PURE__*/a(n);function c(){return c=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=t[n])}return r},c.apply(this,arguments)}function l(r,e){r.prototype=Object.create(e.prototype),r.prototype.constructor=r,h(r,e)}function h(r,e){return h=Object.setPrototypeOf||function(r,e){return r.__proto__=e,r},h(r,e)}function f(r){return BigInt(r).toString()}function g(r){var e=r.startsWith("-");return(r=(r=(r=r.replace("-","")).replace(/\.0*$/g,"")).replace(/^0+/,"")).includes(".")&&(r=r.replace(/0+$/,"")),r.startsWith(".")&&(r="0"+r),(e?"-":"")+r}function v(r){if(!r.match(/e/i))return g(r);var e=r.split(/e/i),t=e[0],n=e[1],i=Number(t)<0,o=(t=g(t=t.replace("-",""))).split("."),a=o[0],s=o[1],u=void 0===s?"":s;if(0===Number(n))return(i?"-":"")+g(t);t.includes(".")||(t+=".");var c,l=(t=t.replace(".","")).length;return Number(n)<0?(a.length<Math.abs(Number(n))&&(t=t.padStart(l+Math.abs(Number(n))-a.length,"0")),c=t.split(""),a.length<Math.abs(Number(n))?c=["."].concat(c):c.splice(c.length-Math.abs(Number(n)),0,".")):(u.length<Math.abs(Number(n))&&(t=t.padEnd(l+Math.abs(Number(n))-u.length,"0")),c=t.split(""),u.length>Math.abs(Number(n))&&c.splice(c.length-Math.abs(Number(n)),0,".")),(i?"-":"")+g(c.join(""))}var m=/*#__PURE__*/function(r){function e(e){var t;return"string"==typeof e&&e.startsWith("0x")&&(e=f(e)),(t=r.call(this,e)||this).padAndChop=function(r,e,t){return(Array(t).fill(e).join("")+r).slice(-1*t)},t}l(e,r);var t=e.prototype;return t.toHexString=function(){return"0x"+BigInt(this.toString()).toString(16)},t.toNumber=function(){return Number(v(r.prototype.toString.call(this)))},t.toString=function(){return 0===this.toNumber()?"0":v(r.prototype.toString.call(this))},t.toTwos=function(r){var e;if(this.gte(0)){var t=this.toNumber().toString(2);e=this.padAndChop(t,"0",r||t.length)}else if(e=this.plus(Math.pow(2,r)).toNumber().toString(2),Number(e)<0)throw new Error("Cannot calculate twos complement");return p(Number("0b"+e))},e}(s.default);function p(r){return new m(r)}var d=function(r,e){if(!e.includes(typeof r))throw new Error(e.join(" or ")+" required. Received "+typeof r)};function y(r){if(d(r,["string"]),!/^(0x)?[0-9a-f]{40}$/i.test(r))throw new Error('Invalid Ethereum address "'+r+'"');for(var t=r.toLowerCase().replace(/^0x/i,""),n=new e.Keccak(256).update(t).digest("hex").replace(/^0x/i,""),i="0x",o=0;o<t.length;o++)parseInt(n[o],16)>7?i+=t[o].toUpperCase():i+=t[o];if(r.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&i!==r)throw new Error('Invalid Checksum address for "'+r+'"');return i}var b="0".repeat(64),P="0".repeat(63)+"1";function x(r,t){var n=new e.Keccak(256),i=r.name+"("+r.inputs.map(function(r){return"uint[]"===(e=r.type)?"uint256[]":"int[]"===e?"int256[]":e;var e})+")",o=n.update(i).digest("hex"),a=r.inputs.length,s=!0;if(r.inputs.find(function(r){return r.type.includes("[")})&&(s=!1),s&&t.length!==a)throw new Error('args inputs of "'+t.length+'" does not match expected length of "'+r.inputs.length+'"');var u=(r.inputs||[]).reduce(function(r,e,n){if(e.type.includes("[")){var i,o=null==(i=/([^[]*)\[.*$/g.exec(e.type))?void 0:i[1];return t.forEach(function(e){r=r.concat([[e,o]])}),r}return r.concat([[t[n],e.type]])},[]).map(function(r){var e=r[0],t=r[1],n=e;switch(t){case"bool":return e?P:b;case"address":n=e.replace(/^0x/g,"").toLowerCase();break;default:if(t.startsWith("bytes"))return n.split("").map(function(r){return r.charCodeAt(0).toString(16)}).join("").padEnd(64,"0");if("uint256"===t)return BigInt(e).toString(16).padStart(64,"0");if(t.startsWith("uint"))break;throw new Error('essential-eth does not yet support "'+t+'" inputs. Make a PR today!"')}return n.toString(16).padStart(64,"0")});return"0x"+o.slice(0,8)+u.join("")}function w(r,e){var t,n=r.outputs,i=e.slice(2);if(1===(null==r||null==(t=r.outputs)?void 0:t.length)&&"string"===r.outputs[0].type){var o=[i.slice(0,64),i.slice(64)],a=o[1],s=Number(f("0x"+o[0])),u=a.slice(0,2*s),c=Number(f("0x"+u));return function(r){var e="",t=0,n=r.length;for("0x"===r.substring(0,2)&&(t=2);t<n;t+=2){var i=parseInt(r.substr(t,2),16);0!==i&&(e+=String.fromCharCode(i))}try{return decodeURIComponent(escape(e))}catch(r){return e}}(a.slice(2*s,2*s+2*c))}var l=(i.match(/.{1,64}/g)||[]).map(function(r,e){var t=(n||[])[e].type;switch(t){case"bool":return r===P;case"address":return y("0x"+r.slice(24));case"uint256":case"uint120":return p(f("0x"+r));case"bytes32":return"0x"+r;case"uint8":return Number(f("0x"+r));default:throw new Error('essential-eth does not yet support "'+t+'" outputs. Make a PR today!"')}});return 1===l.length?l[0]:l}function E(r){r.split("").reduce(function(r,e){return r+("0"===e?4:68)},0)}var k=function(r,e,t){var n=this,i=this;this._address=void 0,this._provider=void 0,this._address=r,this._provider=t,e.filter(function(r){return"function"===r.type}).forEach(function(r){var e;"name"in r&&"string"==typeof r.name&&(e=function(){try{var e=arguments,t=[].slice.call(e),n=t,o={},a=t[t.length-1];Array.isArray(a)||"object"!=typeof a||(o=a,n=t.slice(0,t.length-1));var s=x(r,n),u="number"==typeof o.gasLimit?o.gasLimit:"number"==typeof(null==r?void 0:r.gas)?E(s):null,l=function(){try{return Promise.resolve(i._provider.call(c({to:i._address.toLowerCase(),data:s},u?{gas:"0x"+u.toString(16)}:{}),"latest"))}catch(r){return Promise.reject(r)}};return Promise.resolve(l()).then(function(e){return w(r,e)})}catch(r){return Promise.reject(r)}},Object.defineProperty(n,r.name,{enumerable:!0,value:e,writable:!1}))})},A=/*#__PURE__*/function(r){function e(){return r.apply(this,arguments)||this}return l(e,r),e}(k);function S(r){var e=c({},r);return Object.keys(r).forEach(function(t){if(r[t])switch(t){case"blockNumber":case"chainId":case"transactionIndex":case"type":case"v":e[t]=Number(f(r[t]));break;case"from":case"to":r[t]&&(e[t]=y(r[t]));break;case"value":case"gas":case"gasPrice":case"maxFeePerGas":case"maxPriorityFeePerGas":case"nonce":e[t]=p(f(r[t]))}}),e}function _(r,e){var t=c({},r);return Object.keys(r).forEach(function(n){switch(n){case"address":t[n]=y(r[n]);break;case"blockNumber":case"logIndex":case"transactionIndex":t[n]=Number(f(r[n]));break;case"removed":e&&delete t[n]}}),t}function j(r,e){return{jsonrpc:"2.0",id:1,method:r,params:e}}var N=new(/*#__PURE__*/function(){function r(){this.packageVersion=void 0,this.packageVersion="0.9.2-beta.0"}var e=r.prototype;return e.throwError=function(r,e){var t=Object.keys(e).length;throw new Error(r+" ("+Object.entries(e).map(function(r,e){return r[0]+"="+r[1]+(e<t-1&&", ")})+", version=essential-eth@"+this.packageVersion+")")},e.throwArgumentError=function(r,e,t){throw new Error(r+' (argument="'+e+'" value='+t+", version=essential-eth@"+this.packageVersion+")")},e.checkSafeUint53=function(r,e){void 0===e&&(e="value not safe"),"number"==typeof r&&((r<0||r>=9007199254740991)&&this.throwError(e,{operation:"checkSafeInteger",fault:"out-of-safe-range",value:r}),r%1&&this.throwError(e,{operation:"checkSafeInteger",fault:"non-integer",value:r}))},r}());function U(r){return!!r.toHexString}function C(r){return T(r)&&!(r.length%2)||G(r)}function B(r){return"number"==typeof r&&r==r&&r%1==0}function G(r){if(null==r)return!1;if(r.constructor===Uint8Array)return!0;if("string"==typeof r)return!1;if(!B(r.length)||r.length<0)return!1;for(var e=0;e<r.length;e++){var t=r[e];if(!B(t)||t<0||t>=256)return!1}return!0}function F(r,e){if(e||(e={}),"number"==typeof r){N.checkSafeUint53(r,"invalid arrayify value");for(var t=[];r;)t.unshift(255&r),r=parseInt(String(r/256));return 0===t.length&&t.push(0),new Uint8Array(t)}if(e.allowMissingPrefix&&"string"==typeof r&&"0x"!==r.substring(0,2)&&(r="0x"+r),U(r)&&(r=r.toHexString()),T(r)){var n=r.substring(2);n.length%2&&("left"===e.hexPad?n="0"+n:"right"===e.hexPad?n+="0":N.throwArgumentError("hex data is odd-length","value",r));for(var i=[],o=0;o<n.length;o+=2)i.push(parseInt(n.substring(o,o+2),16));return new Uint8Array(i)}return G(r)?new Uint8Array(r):N.throwArgumentError("invalid arrayify value","value",r)}function I(r){var e=r.map(function(r){return F(r)}),t=e.reduce(function(r,e){return r+e.length},0),n=new Uint8Array(t);return e.reduce(function(r,e){return n.set(e,r),r+e.length},0),n}function O(r,e){(r=F(r)).length>e&&N.throwArgumentError("value out of range","value",r);var t=new Uint8Array(e);return t.set(r,e-r.length),t}function T(r,e){return!("string"!=typeof r||!r.match(/^0x[0-9A-Fa-f]*$/)||e&&r.length!==2+2*e)}var R="0123456789abcdef";function M(r,e){if(e||(e={}),"number"==typeof r){N.checkSafeUint53(r,"invalid hexlify value");for(var t="";r;)t=R[15&r]+t,r=Math.floor(r/16);return t.length?(t.length%2&&(t="0"+t),"0x"+t):"0x00"}if("bigint"==typeof r)return(r=r.toString(16)).length%2?"0x0"+r:"0x"+r;if(e.allowMissingPrefix&&"string"==typeof r&&"0x"!==r.substring(0,2)&&(r="0x"+r),U(r))return r.toHexString();if(T(r))return r.length%2&&("left"===e.hexPad?r="0x0"+r.substring(2):"right"===e.hexPad?r+="0":N.throwArgumentError("hex data is odd-length","value",r)),r.toLowerCase();if(G(r)){for(var n="0x",i=0;i<r.length;i++){var o=r[i];n+=R[(240&o)>>4]+R[15&o]}return n}return N.throwArgumentError("invalid hexlify value","value",r)}function L(r,e,t){return"string"!=typeof r?r=M(r):(!T(r)||r.length%2)&&N.throwArgumentError("invalid hexData","value",r),e=2+2*e,null!=t?"0x"+r.substring(e,2+2*t):"0x"+r.substring(e)}function H(r){"string"!=typeof r&&(r=M(r)),T(r)||N.throwArgumentError("invalid hex string","value",r),r=r.substring(2);for(var e=0;e<r.length&&"0"===r[e];)e++;return"0x"+r.substring(e)}function D(r,e){for("string"!=typeof r?r=M(r):T(r)||N.throwArgumentError("invalid hex string","value",r),r.length>2*e+2&&N.throwError("value out of range",{value:r,length:e});r.length<2*e+2;)r="0x0"+r.substring(2);return r}function W(r){var e=c({},r);return Object.keys(r).forEach(function(t){switch(t){case"gas":case"gasPrice":case"nonce":case"maxFeePerGas":case"maxPriorityFeePerGas":case"value":var n=r[t];e[t]=n instanceof m?n.toHexString():n instanceof s.default?"0x"+BigInt(n.toString()).toString(16):"number"==typeof r[t]?"0x"+r[t].toString(16):r[t].toString();break;case"data":e[t]=M(r[t])}}),e}var $={1:["eth","0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"],5:["gor","0x112234455c3a32fd11230c42e7bccd4a84e02010"],10:["oeth"],50:["xdc"],56:["bnb"],100:["gno"],137:["matic"],250:["ftm"],324:["zksync"],1101:["zkevm"],1337:["geth"],7700:["canto"],9001:["evmos"],42161:["arb1"],42220:["celo"],43114:["avax"],59140:["linea-testnet"],80001:["maticmum"],421613:["arb-goerli"],534352:["scr"],11155111:["sep"]};function q(r){return"number"==typeof r?p(r).toHexString():r}var J=/*#__PURE__*/function(){function r(r){var e=this;this._rpcUrls=[],this._post=function(r){return function(r,e){return u.default(r,function(r){return{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}}(e)).then(function(r){try{return Promise.resolve(r.text()).then(function(r){try{return JSON.parse(r)}catch(e){throw new Error('Invalid JSON RPC response: "'+r+'"')}})}catch(r){return Promise.reject(r)}}).then(function(r){if(!(null==r?void 0:r.result))throw new Error("Invalid JSON RPC response: "+JSON.stringify(r));return r.result})}(e.selectRpcUrl(),r)},this._rpcUrls=r}var e=r.prototype;return e.getNetwork=function(){try{return Promise.resolve(this.post(j("eth_chainId",[]))).then(function(r){var e=f(r),t=$[e];return{chainId:Number(e),name:t[0]||"unknown",ensAddress:t[1]||null}})}catch(r){return Promise.reject(r)}},e.getBlockNumber=function(){try{return Promise.resolve(this.post(j("eth_blockNumber",[]))).then(function(r){return Number(f(r))})}catch(r){return Promise.reject(r)}},e.getTransaction=function(r){try{return Promise.resolve(Promise.all([this.post(j("eth_getTransactionByHash",[r])),this.getBlock("latest")])).then(function(r){var e=r[1],t=S(r[0]);return t.confirmations=e.number-t.blockNumber+1,t})}catch(r){return Promise.reject(r)}},e.getTransactionReceipt=function(r){try{return Promise.resolve(Promise.all([this.post(j("eth_getTransactionReceipt",[r])),this.getBlock("latest")])).then(function(r){var e=r[1],t=function(r){var e=c({},S(r));return Object.keys(r).forEach(function(t){if(r[t])switch(t){case"status":e[t]=Number(f(r[t]));break;case"contractAddress":r[t]&&(e[t]=y(r[t]));break;case"cumulativeGasUsed":case"effectiveGasPrice":case"gasUsed":e[t]=p(f(r[t]));break;case"logs":r[t].forEach(function(r,n){e[t][n]=_(r,!0)})}}),e.byzantium=e.blockNumber>=437e4,e}(r[0]);return t.confirmations=e.number-t.blockNumber+1,t})}catch(r){return Promise.reject(r)}},e.getTransactionCount=function(r,e){void 0===e&&(e="latest");try{return e=q(e),Promise.resolve(this.post(j("eth_getTransactionCount",[r,e]))).then(function(r){return Number(f(r))})}catch(r){return Promise.reject(r)}},e.getBlock=function(r,e){void 0===r&&(r="latest"),void 0===e&&(e=!1);try{var t="Number";return"string"==typeof r&&66===r.length?t="Hash":r=q(r),Promise.resolve(this.post(j("eth_getBlockBy"+t,[r,e]))).then(function(r){return function(r,e){var t=c({},r);return Object.keys(r).forEach(function(e){if(r[e])switch(e){case"difficulty":case"totalDifficulty":case"gasLimit":case"gasUsed":case"size":case"timestamp":case"baseFeePerGas":t[e]=p(f(r[e]));break;case"number":t[e]=Number(f(r[e]));break;case"miner":t[e]=y(r[e])}}),e&&r.transactions.forEach(function(r,e){t.transactions[e]=S(r)}),t}(r,e)})}catch(r){return Promise.reject(r)}},e.getGasPrice=function(){try{return Promise.resolve(this.post(j("eth_gasPrice",[]))).then(function(r){return p(f(r))})}catch(r){return Promise.reject(r)}},e.getBalance=function(r,e){void 0===e&&(e="latest");try{return e=q(e),Promise.resolve(this.post(j("eth_getBalance",[r,e]))).then(function(r){return p(f(r))})}catch(r){return Promise.reject(r)}},e.getCode=function(r,e){void 0===e&&(e="latest");try{return e=q(e),Promise.resolve(this.post(j("eth_getCode",[r,e])))}catch(r){return Promise.reject(r)}},e.estimateGas=function(r){try{var e=W(r);return Promise.resolve(this.post(j("eth_estimateGas",[e]))).then(function(r){return p(f(r))})}catch(r){return Promise.reject(r)}},e.getFeeData=function(){try{return Promise.resolve(Promise.all([this.getBlock("latest"),this.getGasPrice()])).then(function(r){var e=r[0],t=r[1],n=null,i=null,o=null;return e&&e.baseFeePerGas&&(n=e.baseFeePerGas,o=p("1500000000"),i=p(e.baseFeePerGas.mul(2).add(o))),{lastBaseFeePerGas:n,maxFeePerGas:i,maxPriorityFeePerGas:o,gasPrice:t}})}catch(r){return Promise.reject(r)}},e.getLogs=function(r){try{var e=r;return e.fromBlock&&(e.fromBlock=q(e.fromBlock)),e.toBlock&&(e.toBlock=q(e.toBlock)),Promise.resolve(this.post(j("eth_getLogs",[r]))).then(function(r){return r.map(function(r){return _(r,!1)})})}catch(r){return Promise.reject(r)}},e.call=function(r,e){void 0===e&&(e="latest");try{r.gasPrice&&(r.maxPriorityFeePerGas||r.maxFeePerGas)&&N.throwError('Cannot specify both "gasPrice" and ("maxPriorityFeePerGas" or "maxFeePerGas")',{gasPrice:r.gasPrice,maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas}),r.maxFeePerGas&&r.maxPriorityFeePerGas&&N.throwError('Cannot specify both "maxFeePerGas" and "maxPriorityFeePerGas"',{maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas}),e=q(e);var t=W(r);return Promise.resolve(this.post(j("eth_call",[t,e])))}catch(r){return Promise.reject(r)}},r}(),K=/*#__PURE__*/function(r){l(t,r);var e=t.prototype;function t(e){return void 0===e&&(e="https://free-eth-node.com/api/eth"),r.call(this,[e])||this}return e.selectRpcUrl=function(){return this._rpcUrls[0]},e.post=function(r){return this._post(r)},t}(J),z=/*#__PURE__*/function(r){function e(e,t){return void 0===t&&(t="mainnet"),r.call(this,"https://eth-"+t+".alchemyapi.io/v2/"+e)||this}return l(e,r),e}(K),V=/*#__PURE__*/function(r){function e(e,t){var n;return void 0===t&&(t={}),Array.isArray(e)||N.throwError("Array required",{rpcUrls:e}),e.length<=1&&N.throwError("More than one rpcUrl is required",{rpcUrls:e}),(n=r.call(this,e)||this).rpcUrlCounter=0,n.timeoutDuration=void 0,n.post=function(r){var e=n.rpcUrlCounter;return function t(){var i,o,a=n.selectRpcUrl();return(i=n._post(r),o=n.timeoutDuration,new Promise(function(r,e){var t=setTimeout(function(){return e(new Error("Promise timed out"))},o);i.then(function(e){clearTimeout(t),r(e)}).catch(function(r){clearTimeout(t),e(r)})})).catch(function(r){if(a===n.selectRpcUrl()&&(n.rpcUrlCounter=(n.rpcUrlCounter+1)%n._rpcUrls.length),n.rpcUrlCounter===e)throw r;return t()})}()},n.timeoutDuration=t.timeoutDuration||8e3,n}return l(e,r),e.prototype.selectRpcUrl=function(){return this._rpcUrls[this.rpcUrlCounter]},e}(J);function Z(r){return r=M(r).slice(2),"0x"+i.Point.fromPrivateKey(r).toHex()}function Q(r){var t;return t="string"==typeof r?Buffer.from(r.replace(/^0x/,""),"hex"):Buffer.from(r),"0x"+new e.Keccak(256).update(t).digest("hex")}function X(r){return new Uint8Array(Buffer.from(r))}var Y=new RegExp("^bytes([0-9]+)$"),rr=new RegExp("^(u?int)([0-9]*)$"),er=new RegExp("^(.*)\\[([0-9]*)\\]$");function tr(r,e,t){switch(r){case"address":return t?O(e,32):F(e);case"string":return o.Buffer.from(e);case"bytes":return F(e);case"bool":return e=e?"0x01":"0x00",t?O(e,32):F(e)}var n=r.match(rr);if(n){var i=parseInt(n[2]||"256");return(n[2]&&String(i)!==n[2]||i%8!=0||0===i||i>256)&&N.throwArgumentError("invalid number type","type",r),t&&(i=256),O(M(e=p(e).toTwos(i).toNumber()),i/8)}if(n=r.match(Y)){var a=parseInt(n[1]);return(String(a)!==n[1]||0===a||a>32)&&N.throwArgumentError("invalid bytes type","type",r),F(e).byteLength!==a&&N.throwArgumentError("invalid value for "+r,"value",e),t?F((e+b).substring(0,66)):e}if((n=r.match(er))&&Array.isArray(e)){var s=n[1];parseInt(n[2]||String(e.length))!=e.length&&N.throwArgumentError("invalid array length for "+r,"value",e);var u=[];return e.forEach(function(r){u.push(tr(s,r,!0))}),I(u)}return N.throwArgumentError("invalid type","type",r)}function nr(r,e){r.length!=e.length&&N.throwArgumentError("wrong number of values; expected ${ types.length }","values",e);var t=[];return r.forEach(function(r,n){t.push(tr(r,e[n]))}),M(I(t))}r.AlchemyProvider=z,r.BaseContract=k,r.Contract=A,r.FallthroughProvider=V,r.JsonRpcProvider=K,r.TinyBig=m,r.arrayify=F,r.computeAddress=function(r){return r.startsWith("0x04")||r.startsWith("0x03")||r.startsWith("0x02")||(r=Z(r)),y(L(Q(L(r,1)),12))},r.computePublicKey=Z,r.concat=I,r.etherToGwei=function(r){d(r,["string","number","object"]);var e=p(r).times("1000000000");return p(e)},r.etherToWei=function(r){d(r,["string","number","object"]);var e=p(r).times("1000000000000000000");return p(e)},r.gweiToEther=function(r){d(r,["string","number","object"]);var e=p(r).div("1000000000");return p(e)},r.hashMessage=function(r){return"string"==typeof r&&(r=X(r)),Q(I([X("Ethereum Signed Message:\n"),X(String(r.length)),r]))},r.hexConcat=function(r){var e="0x";return r.forEach(function(r){e+=M(r).substring(2)}),e},r.hexDataLength=function(r){if("string"!=typeof r)r=M(r);else if(!T(r)||r.length%2)return null;return(r.length-2)/2},r.hexDataSlice=L,r.hexStripZeros=H,r.hexValue=function(r){var e=H(M(r,{hexPad:"left"}));return"0x"===e?"0x0":e},r.hexZeroPad=D,r.hexlify=M,r.isAddress=function(r){d(r,["string"]);try{return y(r),!0}catch(r){return!1}},r.isBytes=G,r.isBytesLike=C,r.isHexString=T,r.jsonRpcProvider=function(r){return new K(r)},r.keccak256=Q,r.pack=nr,r.solidityKeccak256=function(r,e){return Q(nr(r,e))},r.splitSignature=function(r){var e={r:"0x",s:"0x",_vs:"0x",recoveryParam:0,v:0,yParityAndS:"0x",compact:"0x"};if(C(r)){var t=F(r);64===t.length?(e.v=27+(t[32]>>7),t[32]&=127,e.r=M(t.slice(0,32)),e.s=M(t.slice(32,64))):65===t.length?(e.r=M(t.slice(0,32)),e.s=M(t.slice(32,64)),e.v=t[64]):N.throwArgumentError("invalid signature string","signature",r),e.v<27&&(0===e.v||1===e.v?e.v+=27:N.throwArgumentError("signature invalid v byte","signature",r)),e.recoveryParam=1-e.v%2,e.recoveryParam&&(t[32]|=128),e._vs=M(t.slice(32,64))}else{if(e.r=r.r,e.s=r.s,e.v=r.v,e.recoveryParam=r.recoveryParam,e._vs=r._vs,null!=e._vs){var n=O(F(e._vs),32);e._vs=M(n);var i=n[0]>=128?1:0;null==e.recoveryParam?e.recoveryParam=i:e.recoveryParam!==i&&N.throwArgumentError("signature recoveryParam mismatch _vs","signature",r),n[0]&=127;var o=M(n);null==e.s?e.s=o:e.s!==o&&N.throwArgumentError("signature v mismatch _vs","signature",r)}null==e.recoveryParam?null==e.v?N.throwArgumentError("signature missing v and recoveryParam","signature",r):e.recoveryParam=0===e.v||1===e.v?e.v:1-e.v%2:null==e.v?e.v=27+e.recoveryParam:e.recoveryParam!==(0===e.v||1===e.v?e.v:1-e.v%2)&&N.throwArgumentError("signature recoveryParam mismatch v","signature",r),null!=e.r&&T(e.r)?e.r=D(e.r,32):N.throwArgumentError("signature missing or invalid r","signature",r),null!=e.s&&T(e.s)?e.s=D(e.s,32):N.throwArgumentError("signature missing or invalid s","signature",r);var a=F(e.s);a[0]>=128&&N.throwArgumentError("signature s out of range","signature",r),e.recoveryParam&&(a[0]|=128);var s=M(a);e._vs&&(T(e._vs)||N.throwArgumentError("signature invalid _vs","signature",r),e._vs=D(e._vs,32)),null==e._vs?e._vs=s:e._vs!==s&&N.throwArgumentError("signature _vs mismatch v and s","signature",r)}return e.yParityAndS=e._vs,e.compact=e.r+e.yParityAndS.substring(2),e},r.stripZeros=function(r){var e=F(r);if(0===e.length)return e;for(var t=0;t<e.length&&0===e[t];)t++;return t&&(e=e.slice(t)),e},r.tinyBig=p,r.toChecksumAddress=y,r.toUtf8Bytes=X,r.weiToEther=function(r){d(r,["string","number","object"]);try{var e=r;"string"==typeof r&&"0x"===r.slice(0,2)&&(e=BigInt(r).toString());var t=p(e).div("1000000000000000000");return p(t)}catch(r){throw r}},r.zeroPad=O});
|
|
2
|
+
//# sourceMappingURL=essential-eth.umd.js.map
|