essential-eth 0.9.2-beta.3 → 0.9.2-beta.4

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.
Files changed (102) hide show
  1. package/dist/cjs/classes/Contract.d.ts +81 -11
  2. package/dist/cjs/classes/test/Contract/crv-abi.d.ts +2 -2
  3. package/dist/cjs/classes/test/Contract/ens-abi.d.ts +2 -2
  4. package/dist/cjs/classes/test/Contract/fei-abi.d.ts +2 -2
  5. package/dist/cjs/classes/test/Contract/foo-abi.d.ts +2 -2
  6. package/dist/cjs/classes/test/Contract/uniswap-abi.d.ts +2 -2
  7. package/dist/cjs/classes/utils/clean-block.d.ts +120 -2
  8. package/dist/cjs/classes/utils/clean-log.d.ts +9 -2
  9. package/dist/cjs/classes/utils/clean-transaction-receipt.d.ts +14 -2
  10. package/dist/cjs/classes/utils/clean-transaction.d.ts +14 -2
  11. package/dist/cjs/classes/utils/encode-decode-transaction.d.ts +16 -4
  12. package/dist/cjs/classes/utils/fetchers.d.ts +53 -15
  13. package/dist/cjs/classes/utils/hex-to-decimal.d.ts +18 -1
  14. package/dist/cjs/classes/utils/prepare-transaction.d.ts +6 -2
  15. package/dist/cjs/index.d.ts +24 -24
  16. package/dist/cjs/logger/logger.d.ts +11 -11
  17. package/dist/cjs/logger/package-version.d.ts +1 -1
  18. package/dist/cjs/logger/package-version.js +1 -1
  19. package/dist/cjs/providers/AlchemyProvider.d.ts +4 -4
  20. package/dist/cjs/providers/BaseProvider.d.ts +374 -26
  21. package/dist/cjs/providers/FallthroughProvider.d.ts +24 -11
  22. package/dist/cjs/providers/JsonRpcProvider.d.ts +33 -7
  23. package/dist/cjs/providers/test/json-rpc-provider/get-logs/mocks.d.ts +14 -14
  24. package/dist/cjs/providers/test/mock-of.d.ts +9 -2
  25. package/dist/cjs/providers/test/rpc-urls.d.ts +12 -12
  26. package/dist/cjs/providers/utils/chains-info.d.ts +24 -24
  27. package/dist/cjs/shared/tiny-big/helpers.d.ts +17 -1
  28. package/dist/cjs/shared/tiny-big/tiny-big.d.ts +58 -10
  29. package/dist/cjs/shared/validate-type.d.ts +3 -3
  30. package/dist/cjs/types/Block.types.d.ts +41 -40
  31. package/dist/cjs/types/Contract.types.d.ts +24 -24
  32. package/dist/cjs/types/FeeData.types.d.ts +7 -7
  33. package/dist/cjs/types/Filter.types.d.ts +16 -12
  34. package/dist/cjs/types/Network.types.d.ts +8 -5
  35. package/dist/cjs/types/Transaction.types.d.ts +123 -113
  36. package/dist/cjs/utils/bytes.d.ts +289 -40
  37. package/dist/cjs/utils/compute-address.d.ts +17 -1
  38. package/dist/cjs/utils/compute-public-key.d.ts +18 -2
  39. package/dist/cjs/utils/ether-to-gwei.d.ts +27 -3
  40. package/dist/cjs/utils/ether-to-wei.d.ts +27 -3
  41. package/dist/cjs/utils/gwei-to-ether.d.ts +27 -3
  42. package/dist/cjs/utils/hash-message.d.ts +14 -2
  43. package/dist/cjs/utils/is-address.d.ts +24 -1
  44. package/dist/cjs/utils/keccak256.d.ts +16 -2
  45. package/dist/cjs/utils/solidity-keccak256.d.ts +39 -2
  46. package/dist/cjs/utils/split-signature.d.ts +24 -2
  47. package/dist/cjs/utils/to-checksum-address.d.ts +17 -1
  48. package/dist/cjs/utils/to-utf8-bytes.d.ts +15 -1
  49. package/dist/cjs/utils/wei-to-ether.d.ts +27 -3
  50. package/dist/esm/classes/Contract.d.ts +11 -11
  51. package/dist/esm/classes/test/Contract/crv-abi.d.ts +2 -2
  52. package/dist/esm/classes/test/Contract/ens-abi.d.ts +2 -2
  53. package/dist/esm/classes/test/Contract/fei-abi.d.ts +2 -2
  54. package/dist/esm/classes/test/Contract/foo-abi.d.ts +2 -2
  55. package/dist/esm/classes/test/Contract/uniswap-abi.d.ts +2 -2
  56. package/dist/esm/classes/utils/clean-block.d.ts +2 -2
  57. package/dist/esm/classes/utils/clean-log.d.ts +2 -2
  58. package/dist/esm/classes/utils/clean-transaction-receipt.d.ts +2 -2
  59. package/dist/esm/classes/utils/clean-transaction.d.ts +2 -2
  60. package/dist/esm/classes/utils/encode-decode-transaction.d.ts +4 -4
  61. package/dist/esm/classes/utils/fetchers.d.ts +15 -15
  62. package/dist/esm/classes/utils/hex-to-decimal.d.ts +1 -1
  63. package/dist/esm/classes/utils/prepare-transaction.d.ts +2 -2
  64. package/dist/esm/index.d.ts +24 -24
  65. package/dist/esm/logger/logger.d.ts +11 -11
  66. package/dist/esm/logger/package-version.d.ts +1 -1
  67. package/dist/esm/logger/package-version.js +1 -1
  68. package/dist/esm/providers/AlchemyProvider.d.ts +4 -4
  69. package/dist/esm/providers/BaseProvider.d.ts +26 -26
  70. package/dist/esm/providers/FallthroughProvider.d.ts +11 -11
  71. package/dist/esm/providers/JsonRpcProvider.d.ts +7 -7
  72. package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.d.ts +14 -14
  73. package/dist/esm/providers/test/mock-of.d.ts +2 -2
  74. package/dist/esm/providers/test/rpc-urls.d.ts +12 -12
  75. package/dist/esm/providers/utils/chains-info.d.ts +24 -24
  76. package/dist/esm/shared/tiny-big/helpers.d.ts +1 -1
  77. package/dist/esm/shared/tiny-big/tiny-big.d.ts +10 -10
  78. package/dist/esm/shared/validate-type.d.ts +3 -3
  79. package/dist/esm/types/Block.types.d.ts +40 -40
  80. package/dist/esm/types/Contract.types.d.ts +24 -24
  81. package/dist/esm/types/FeeData.types.d.ts +7 -7
  82. package/dist/esm/types/Filter.types.d.ts +12 -12
  83. package/dist/esm/types/Network.types.d.ts +5 -5
  84. package/dist/esm/types/Transaction.types.d.ts +113 -113
  85. package/dist/esm/utils/bytes.d.ts +40 -40
  86. package/dist/esm/utils/compute-address.d.ts +1 -1
  87. package/dist/esm/utils/compute-public-key.d.ts +2 -2
  88. package/dist/esm/utils/ether-to-gwei.d.ts +3 -3
  89. package/dist/esm/utils/ether-to-wei.d.ts +3 -3
  90. package/dist/esm/utils/gwei-to-ether.d.ts +3 -3
  91. package/dist/esm/utils/hash-message.d.ts +2 -2
  92. package/dist/esm/utils/is-address.d.ts +1 -1
  93. package/dist/esm/utils/keccak256.d.ts +2 -2
  94. package/dist/esm/utils/solidity-keccak256.d.ts +2 -2
  95. package/dist/esm/utils/split-signature.d.ts +2 -2
  96. package/dist/esm/utils/to-checksum-address.d.ts +1 -1
  97. package/dist/esm/utils/to-utf8-bytes.d.ts +1 -1
  98. package/dist/esm/utils/wei-to-ether.d.ts +3 -3
  99. package/dist/{cjs/index.umd.js → essential-eth.umd.js} +2 -2
  100. package/dist/essential-eth.umd.js.map +1 -0
  101. package/package.json +6 -7
  102. package/dist/cjs/index.umd.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"essential-eth.umd.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/sha3/node_modules/buffer/index.js","../node_modules/sha3/sponge/permute/copy/index.js","../node_modules/sha3/sponge/permute/chi/index.js","../node_modules/sha3/sponge/permute/iota/round-constants/index.js","../node_modules/sha3/sponge/permute/iota/index.js","../node_modules/sha3/sponge/permute/rho-pi/pi-shuffles/index.js","../node_modules/sha3/sponge/permute/rho-pi/rho-offsets/index.js","../node_modules/sha3/sponge/permute/rho-pi/index.js","../node_modules/sha3/sponge/permute/theta/index.js","../node_modules/sha3/sponge/permute/index.js","../node_modules/sha3/sponge/index.js","../node_modules/sha3/index.js","../node_modules/big.js/big.mjs","../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","../node_modules/unfetch/dist/unfetch.module.js","../node_modules/isomorphic-unfetch/browser.js","../src/classes/utils/fetchers.ts","../src/logger/package-version.ts","../src/logger/logger.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","../node_modules/@noble/secp256k1/lib/esm/index.js","../src/utils/compute-public-key.ts","../src/utils/keccak256.ts","../src/utils/to-utf8-bytes.ts","../src/utils/solidity-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/hash-message.ts","../src/utils/is-address.ts","../src/utils/split-signature.ts","../src/utils/wei-to-ether.ts"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","\"use strict\";var copy=function copy(I,i){return function(O,o){var oi=o*2;var ii=i*2;O[oi]=I[ii];O[oi+1]=I[ii+1]}};module.exports=copy;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _copy=_interopRequireDefault(require(\"../copy\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var chi=function chi(_ref){var A=_ref.A,C=_ref.C;for(var y=0;y<25;y+=5){for(var x=0;x<5;x++){(0,_copy[\"default\"])(A,y+x)(C,x)}for(var _x=0;_x<5;_x++){var xy=(y+_x)*2;var x1=(_x+1)%5*2;var x2=(_x+2)%5*2;A[xy]^=~C[x1]&C[x2];A[xy+1]^=~C[x1+1]&C[x2+1]}}};var _default=chi;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var ROUND_CONSTANTS=new Uint32Array([0,1,0,32898,2147483648,32906,2147483648,2147516416,0,32907,0,2147483649,2147483648,2147516545,2147483648,32777,0,138,0,136,0,2147516425,0,2147483658,0,2147516555,2147483648,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,0,32778,2147483648,2147483658,2147483648,2147516545,2147483648,32896,0,2147483649,2147483648,2147516424]);var _default=ROUND_CONSTANTS;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _roundConstants=_interopRequireDefault(require(\"./round-constants\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var iota=function iota(_ref){var A=_ref.A,roundIndex=_ref.roundIndex;var i=roundIndex*2;A[0]^=_roundConstants[\"default\"][i];A[1]^=_roundConstants[\"default\"][i+1]};var _default=iota;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var PI_SHUFFLES=[10,7,11,17,18,3,5,16,8,21,24,4,15,23,19,13,12,2,20,14,22,9,6,1];var _default=PI_SHUFFLES;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var RHO_OFFSETS=[1,3,6,10,15,21,28,36,45,55,2,14,27,41,56,8,25,43,62,18,39,61,20,44];var _default=RHO_OFFSETS;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _piShuffles=_interopRequireDefault(require(\"./pi-shuffles\"));var _rhoOffsets=_interopRequireDefault(require(\"./rho-offsets\"));var _copy=_interopRequireDefault(require(\"../copy\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var rhoPi=function rhoPi(_ref){var A=_ref.A,C=_ref.C,W=_ref.W;(0,_copy[\"default\"])(A,1)(W,0);var H=0;var L=0;var Wi=0;var ri=32;for(var i=0;i<24;i++){var j=_piShuffles[\"default\"][i];var r=_rhoOffsets[\"default\"][i];(0,_copy[\"default\"])(A,j)(C,0);H=W[0];L=W[1];ri=32-r;Wi=r<32?0:1;W[Wi]=H<<r|L>>>ri;W[(Wi+1)%2]=L<<r|H>>>ri;(0,_copy[\"default\"])(W,0)(A,j);(0,_copy[\"default\"])(C,0)(W,0)}};var _default=rhoPi;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _copy=_interopRequireDefault(require(\"../copy\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var theta=function theta(_ref){var A=_ref.A,C=_ref.C,D=_ref.D,W=_ref.W;var H=0;var L=0;for(var x=0;x<5;x++){var x20=x*2;var x21=(x+5)*2;var x22=(x+10)*2;var x23=(x+15)*2;var x24=(x+20)*2;C[x20]=A[x20]^A[x21]^A[x22]^A[x23]^A[x24];C[x20+1]=A[x20+1]^A[x21+1]^A[x22+1]^A[x23+1]^A[x24+1]}for(var _x=0;_x<5;_x++){(0,_copy[\"default\"])(C,(_x+1)%5)(W,0);H=W[0];L=W[1];W[0]=H<<1|L>>>31;W[1]=L<<1|H>>>31;D[_x*2]=C[(_x+4)%5*2]^W[0];D[_x*2+1]=C[(_x+4)%5*2+1]^W[1];for(var y=0;y<25;y+=5){A[(y+_x)*2]^=D[_x*2];A[(y+_x)*2+1]^=D[_x*2+1]}}};var _default=theta;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _chi=_interopRequireDefault(require(\"./chi\"));var _iota=_interopRequireDefault(require(\"./iota\"));var _rhoPi=_interopRequireDefault(require(\"./rho-pi\"));var _theta=_interopRequireDefault(require(\"./theta\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var permute=function permute(){var C=new Uint32Array(10);var D=new Uint32Array(10);var W=new Uint32Array(2);return function(A){for(var roundIndex=0;roundIndex<24;roundIndex++){(0,_theta[\"default\"])({A:A,C:C,D:D,W:W});(0,_rhoPi[\"default\"])({A:A,C:C,W:W});(0,_chi[\"default\"])({A:A,C:C});(0,_iota[\"default\"])({A:A,roundIndex:roundIndex})}C.fill(0);D.fill(0);W.fill(0)}};var _default=permute;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _buffer=require(\"buffer\");var _permute=_interopRequireDefault(require(\"./permute\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var xorWords=function xorWords(I,O){for(var i=0;i<I.length;i+=8){var o=i/4;O[o]^=I[i+7]<<24|I[i+6]<<16|I[i+5]<<8|I[i+4];O[o+1]^=I[i+3]<<24|I[i+2]<<16|I[i+1]<<8|I[i]}return O};var readWords=function readWords(I,O){for(var o=0;o<O.length;o+=8){var i=o/4;O[o]=I[i+1];O[o+1]=I[i+1]>>>8;O[o+2]=I[i+1]>>>16;O[o+3]=I[i+1]>>>24;O[o+4]=I[i];O[o+5]=I[i]>>>8;O[o+6]=I[i]>>>16;O[o+7]=I[i]>>>24}return O};var Sponge=function Sponge(_ref){var _this=this;var capacity=_ref.capacity,padding=_ref.padding;var keccak=(0,_permute[\"default\"])();var stateSize=200;var blockSize=capacity/8;var queueSize=stateSize-capacity/4;var queueOffset=0;var state=new Uint32Array(stateSize/4);var queue=_buffer.Buffer.allocUnsafe(queueSize);this.absorb=function(buffer){for(var i=0;i<buffer.length;i++){queue[queueOffset]=buffer[i];queueOffset+=1;if(queueOffset>=queueSize){xorWords(queue,state);keccak(state);queueOffset=0}}return _this};this.squeeze=function(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var output={buffer:options.buffer||_buffer.Buffer.allocUnsafe(blockSize),padding:options.padding||padding,queue:_buffer.Buffer.allocUnsafe(queue.length),state:new Uint32Array(state.length)};queue.copy(output.queue);for(var i=0;i<state.length;i++){output.state[i]=state[i]}output.queue.fill(0,queueOffset);output.queue[queueOffset]|=output.padding;output.queue[queueSize-1]|=128;xorWords(output.queue,output.state);for(var offset=0;offset<output.buffer.length;offset+=queueSize){keccak(output.state);readWords(output.state,output.buffer.slice(offset,offset+queueSize))}return output.buffer};this.reset=function(){queue.fill(0);state.fill(0);queueOffset=0;return _this};return this};var _default=Sponge;exports[\"default\"]=_default;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=exports.SHAKE=exports.SHA3Hash=exports.SHA3=exports.Keccak=void 0;var _buffer=require(\"buffer\");var _sponge=_interopRequireDefault(require(\"./sponge\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{\"default\":obj}}var createHash=function createHash(_ref){var allowedSizes=_ref.allowedSizes,defaultSize=_ref.defaultSize,padding=_ref.padding;return function Hash(){var _this=this;var size=arguments.length>0&&arguments[0]!==undefined?arguments[0]:defaultSize;if(!this||this.constructor!==Hash){return new Hash(size)}if(allowedSizes&&!allowedSizes.includes(size)){throw new Error(\"Unsupported hash length\")}var sponge=new _sponge[\"default\"]({capacity:size});this.update=function(input){var encoding=arguments.length>1&&arguments[1]!==undefined?arguments[1]:\"utf8\";if(_buffer.Buffer.isBuffer(input)){sponge.absorb(input);return _this}if(typeof input===\"string\"){return _this.update(_buffer.Buffer.from(input,encoding))}throw new TypeError(\"Not a string or buffer\")};this.digest=function(){var formatOrOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"binary\";var options=typeof formatOrOptions===\"string\"?{format:formatOrOptions}:formatOrOptions;var buffer=sponge.squeeze({buffer:options.buffer,padding:options.padding||padding});if(options.format&&options.format!==\"binary\"){return buffer.toString(options.format)}return buffer};this.reset=function(){sponge.reset();return _this};return this}};var Keccak=createHash({allowedSizes:[224,256,384,512],defaultSize:512,padding:1});exports.Keccak=Keccak;var SHA3=createHash({allowedSizes:[224,256,384,512],defaultSize:512,padding:6});exports.SHA3=SHA3;var SHAKE=createHash({allowedSizes:[128,256],defaultSize:256,padding:31});exports.SHAKE=SHAKE;var SHA3Hash=Keccak;exports.SHA3Hash=SHA3Hash;SHA3.SHA3Hash=SHA3Hash;var _default=SHA3;exports[\"default\"]=_default;","/*\r\n * big.js v6.2.1\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2022 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(x + '');\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = Number(stringify(this, true, true));\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","/**\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","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.module.js.map\n","module.exports = self.fetch || (self.fetch = require('unfetch').default || require('unfetch'));\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","// Generated by genversion.\nexport const version = '0.9.2-beta.4';\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","// 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","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport * as nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst CURVE = Object.freeze({\n a: _0n,\n b: BigInt(7),\n P: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n});\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst endo = {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000');\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n};\nconst fieldLen = 32;\nconst groupLen = 32;\nconst hashLen = 32;\nconst compressedLen = fieldLen + 1;\nconst uncompressedLen = 2 * fieldLen + 1;\nexport { CURVE };\nfunction weierstrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass ShaError extends Error {\n constructor(message) {\n super(message);\n }\n}\nfunction assertJacPoint(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n}\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n if (p.equals(Point.ZERO))\n return JacobianPoint.ZERO;\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n assertJacPoint(other);\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 * Z1);\n const Z2Z2 = mod(Z2 * Z2);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 * X1);\n const B = mod(Y1 * Y1);\n const C = mod(B * B);\n const x1b = X1 + B;\n const D = mod(_2n * (mod(x1b * x1b) - A - C));\n const E = mod(_3n * A);\n const F = mod(E * E);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n assertJacPoint(other);\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 * Z1);\n const Z2Z2 = mod(Z2 * Z2);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H * H);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r * r - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n const P0 = JacobianPoint.ZERO;\n if (typeof scalar === 'bigint' && scalar === _0n)\n return P0;\n let n = normalizeScalar(scalar);\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * endo.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.BASE;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1;\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n k1p = constTimeNegate(k1neg, k1p);\n k2p = constTimeNegate(k2neg, k2p);\n k2p = new JacobianPoint(mod(k2p.x * endo.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ) {\n const { x, y, z } = this;\n const is0 = this.equals(JacobianPoint.ZERO);\n if (invZ == null)\n invZ = is0 ? _8n : invert(z);\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (is0)\n return Point.ZERO;\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nfunction constTimeNegate(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n hasEvenY() {\n return this.y % _2n === _0n;\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weierstrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, fieldLen + 1));\n const y = bytesToNumber(bytes.subarray(fieldLen + 1, fieldLen * 2 + 1));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === fieldLen)\n return this.fromCompressedHex(bytes);\n if (len === compressedLen && (header === 0x02 || header === 0x03)) {\n return this.fromCompressedHex(bytes);\n }\n if (len === uncompressedLen && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n const { r, s } = normalizeSignature(signature);\n if (![0, 1, 2, 3].includes(recovery))\n throw new Error('Cannot recover: invalid recovery bit');\n const h = truncateHash(ensureBytes(msgHash));\n const { n } = CURVE;\n const radj = recovery === 2 || recovery === 3 ? r + n : r;\n const rinv = invert(radj, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(radj));\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.hasEvenY() ? '02' : '03';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weierstrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = a === _0n || a === _1n || this !== Point.BASE ? P.multiplyUnsafe(a) : P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = hex instanceof Uint8Array;\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = hex instanceof Uint8Array;\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, mod(-this.s, CURVE.n)) : this;\n }\n toDERRawBytes() {\n return hexToBytes(this.toDERHex());\n }\n toDERHex() {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const sHexL = sHex.length / 2;\n const rHexL = rHex.length / 2;\n const sLen = numberToHexUnpadded(sHexL);\n const rLen = numberToHexUnpadded(rHexL);\n const length = numberToHexUnpadded(rHexL + sHexL + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every((b) => b instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nconst POW_2_256 = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000');\nfunction numTo32bStr(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n if (!(_0n <= num && num < POW_2_256))\n throw new Error('Expected number 0 <= n < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n const b = hexToBytes(numTo32bStr(num));\n if (b.length !== 32)\n throw new Error('Error: expected 32 bytes');\n return b;\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n const rt = pow2(t2, _2n);\n const xc = (rt * rt) % P;\n if (xc !== x)\n throw new Error('Cannot find square root');\n return rt;\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nfunction bits2int_2(bytes) {\n const delta = bytes.length * 8 - groupLen * 8;\n const num = bytesToNumber(bytes);\n return delta > 0 ? num >> BigInt(delta) : num;\n}\nfunction truncateHash(hash, truncateOnly = false) {\n const h = bits2int_2(hash);\n if (truncateOnly)\n return h;\n const { n } = CURVE;\n return h >= n ? h - n : h;\n}\nlet _sha256Sync;\nlet _hmacSha256Sync;\nclass HmacDrbg {\n constructor(hashLen, qByteLen) {\n this.hashLen = hashLen;\n this.qByteLen = qByteLen;\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n this.v = new Uint8Array(hashLen).fill(1);\n this.k = new Uint8Array(hashLen).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n return _hmacSha256Sync(this.k, ...values);\n }\n checkSync() {\n if (typeof _hmacSha256Sync !== 'function')\n throw new ShaError('hmacSha256Sync needs to be set');\n }\n incr() {\n if (this.counter >= 1000)\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.checkSync();\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n let len = 0;\n const out = [];\n while (len < this.qByteLen) {\n this.v = await this.hmac(this.v);\n const sl = this.v.slice();\n out.push(sl);\n len += this.v.length;\n }\n return concatBytes(...out);\n }\n generateSync() {\n this.checkSync();\n this.incr();\n let len = 0;\n const out = [];\n while (len < this.qByteLen) {\n this.v = this.hmacSync(this.v);\n const sl = this.v.slice();\n out.push(sl);\n len += this.v.length;\n }\n return concatBytes(...out);\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d, lowS = true) {\n const { n } = CURVE;\n const k = truncateHash(kBytes, true);\n if (!isWithinCurveOrder(k))\n return;\n const kinv = invert(k, n);\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(kinv * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n let sig = new Signature(r, s);\n let recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n if (lowS && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 2 * groupLen)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (key instanceof Uint8Array) {\n if (key.length !== groupLen)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isProbPub(item) {\n const arr = item instanceof Uint8Array;\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === compressedLen || len === uncompressedLen;\n if (str)\n return len === compressedLen * 2 || len === uncompressedLen * 2;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isProbPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isProbPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > fieldLen ? bytes.slice(0, fieldLen) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n return numTo32b(num);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(fieldLen);\n const e = ensureBytes(extraEntropy);\n if (e.length !== fieldLen)\n throw new Error(`sign: Expected ${fieldLen} bytes of extra data`);\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n const { sig, recovery } = recSig;\n const { der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n const drbg = new HmacDrbg(hashLen, groupLen);\n await drbg.reseed(seed);\n let sig;\n while (!(sig = kmdToSig(await drbg.generate(), m, d, opts.canonical)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n const drbg = new HmacDrbg(hashLen, groupLen);\n drbg.reseedSync(seed);\n let sig;\n while (!(sig = kmdToSig(drbg.generateSync(), m, d, opts.canonical)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nfunction schnorrChallengeFinalize(ch) {\n return mod(bytesToNumber(ch), CURVE.n);\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nclass InternalSchnorrSignature {\n constructor(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n this.m = ensureBytes(message);\n const { x, scalar } = this.getScalar(normalizePrivateKey(privateKey));\n this.px = x;\n this.d = scalar;\n this.rand = ensureBytes(auxRand);\n if (this.rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n }\n getScalar(priv) {\n const point = Point.fromPrivateKey(priv);\n const scalar = point.hasEvenY() ? priv : CURVE.n - priv;\n return { point, scalar, x: point.toRawX() };\n }\n initNonce(d, t0h) {\n return numTo32b(d ^ bytesToNumber(t0h));\n }\n finalizeNonce(k0h) {\n const k0 = mod(bytesToNumber(k0h), CURVE.n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const { point: R, x: rx, scalar: k } = this.getScalar(k0);\n return { R, rx, k };\n }\n finalizeSig(R, k, e, d) {\n return new SchnorrSignature(R.x, mod(k + e * d, CURVE.n)).toRawBytes();\n }\n error() {\n throw new Error('sign: Invalid signature produced');\n }\n async calc() {\n const { m, d, px, rand } = this;\n const tag = utils.taggedHash;\n const t = this.initNonce(d, await tag(TAGS.aux, rand));\n const { R, rx, k } = this.finalizeNonce(await tag(TAGS.nonce, t, px, m));\n const e = schnorrChallengeFinalize(await tag(TAGS.challenge, rx, px, m));\n const sig = this.finalizeSig(R, k, e, d);\n if (!(await schnorrVerify(sig, m, px)))\n this.error();\n return sig;\n }\n calcSync() {\n const { m, d, px, rand } = this;\n const tag = utils.taggedHashSync;\n const t = this.initNonce(d, tag(TAGS.aux, rand));\n const { R, rx, k } = this.finalizeNonce(tag(TAGS.nonce, t, px, m));\n const e = schnorrChallengeFinalize(tag(TAGS.challenge, rx, px, m));\n const sig = this.finalizeSig(R, k, e, d);\n if (!schnorrVerifySync(sig, m, px))\n this.error();\n return sig;\n }\n}\nasync function schnorrSign(msg, privKey, auxRand) {\n return new InternalSchnorrSignature(msg, privKey, auxRand).calc();\n}\nfunction schnorrSignSync(msg, privKey, auxRand) {\n return new InternalSchnorrSignature(msg, privKey, auxRand).calcSync();\n}\nfunction initSchnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n const sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n return {\n ...sig,\n m: ensureBytes(message),\n P: normalizePublicKey(publicKey),\n };\n}\nfunction finalizeSchnorrVerify(r, P, s, e) {\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !R.hasEvenY() || R.x !== r)\n return false;\n return true;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n try {\n const { r, s, m, P } = initSchnorrVerify(signature, message, publicKey);\n const e = schnorrChallengeFinalize(await utils.taggedHash(TAGS.challenge, numTo32b(r), P.toRawX(), m));\n return finalizeSchnorrVerify(r, P, s, e);\n }\n catch (error) {\n return false;\n }\n}\nfunction schnorrVerifySync(signature, message, publicKey) {\n try {\n const { r, s, m, P } = initSchnorrVerify(signature, message, publicKey);\n const e = schnorrChallengeFinalize(utils.taggedHashSync(TAGS.challenge, numTo32b(r), P.toRawX(), m));\n return finalizeSchnorrVerify(r, P, s, e);\n }\n catch (error) {\n if (error instanceof ShaError)\n throw error;\n return false;\n }\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n signSync: schnorrSignSync,\n verifySync: schnorrVerifySync,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nconst TAGS = {\n challenge: 'BIP0340/challenge',\n aux: 'BIP0340/aux',\n nonce: 'BIP0340/nonce',\n};\nconst TAGGED_HASH_PREFIXES = {};\nexport const utils = {\n bytesToHex,\n hexToBytes,\n concatBytes,\n mod,\n invert,\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n _bigintTo32Bytes: numTo32b,\n _normalizePrivateKey: normalizePrivateKey,\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n const minLen = groupLen + 8;\n if (hash.length < minLen || hash.length > 1024) {\n throw new Error(`Expected valid bytes of private key as per FIPS 186`);\n }\n const num = mod(bytesToNumber(hash), CURVE.n - _1n) + _1n;\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => utils.hashToPrivateKey(utils.randomBytes(groupLen + 8)),\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n sha256: async (...messages) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', concatBytes(...messages));\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n const hash = createHash('sha256');\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n taggedHash: async (tag, ...messages) => {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = await utils.sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return utils.sha256(tagP, ...messages);\n },\n taggedHashSync: (tag, ...messages) => {\n if (typeof _sha256Sync !== 'function')\n throw new ShaError('sha256Sync is undefined, you need to set it');\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = _sha256Sync(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return _sha256Sync(tagP, ...messages);\n },\n _JacobianPoint: JacobianPoint,\n};\nObject.defineProperties(utils, {\n sha256Sync: {\n configurable: false,\n get() {\n return _sha256Sync;\n },\n set(val) {\n if (!_sha256Sync)\n _sha256Sync = val;\n },\n },\n hmacSha256Sync: {\n configurable: false,\n get() {\n return _hmacSha256Sync;\n },\n set(val) {\n if (!_hmacSha256Sync)\n _hmacSha256Sync = val;\n },\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","/**\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 { 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","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","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"],"names":["lookup","revLookup","Arr","Uint8Array","Array","code","i","len","length","charCodeAt","encodeChunk","uint8","start","end","num","output","push","join","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","value","c","rt","abs","isNaN","floor","log","LN2","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","byteLength","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","val","dir","arrayIndexOf","indexOf","call","lastIndexOf","arr","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","tmp","extraBytes","parts","maxChunkLength","len2","base64","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","Error","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","b64","lens","validLen","getLens","placeHoldersLen","_byteLength","curByte","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","copy_1","I","O","o","oi","ii","_copy","require$$0","__esModule","default","_ref","A","C","_x","xy","x1","x2","ROUND_CONSTANTS","Uint32Array","_roundConstants","roundIndex","_piShuffles","_interopRequireDefault","_rhoOffsets","require$$1","require$$2","W","H","L","Wi","ri","r","D","x20","x21","x22","x23","x24","_chi","_iota","_rhoPi","_theta","require$$3","_permute","xorWords","readWords","_this","capacity","padding","keccak","blockSize","queueSize","queueOffset","state","stateSize","queue","_buffer","absorb","squeeze","options","reset","SHAKE","SHA3Hash","SHA3","Keccak","_sponge","createHash","allowedSizes","defaultSize","Hash","sponge","update","digest","formatOrOptions","format","MAX_DP","NAME","INVALID","INVALID_DP","DIV_BY_ZERO","P","UNDEFINED","NUMERIC","round","sd","rm","more","xc","RM","unshift","pop","stringify","doExponential","isNonzero","charAt","cmp","isneg","yc","k","l","div","Big","dp","DP","bl","bt","bz","ai","al","rl","q","qc","qi","p","shift","eq","gt","gte","lt","lte","minus","t","xlty","plus","xe","ye","reverse","mod","ygtx","times","neg","add","one","prec","sqrt","half","toExponential","toFixed","for","NE","PE","toNumber","strict","toPrecision","_Big_","nl","test","search","substring","parse","roundDown","roundHalfUp","roundHalfEven","roundUp","hexToDecimal","hex","stripTrailingZeroes","numberString","isNegative","startsWith","scientificStrToDecimalStr","scientificString","match","base","power","_scientificString$spl","_base$split","wholeNumber","_base$split$","fraction","splitPaddedNumber","baseLength","padStart","splice","padEnd","TinyBig","_Big","padAndChop","padChar","_inheritsLoose","_proto","toHexString","toTwos","bitCount","binaryStr","twosComp","tinyBig","validateType","allowedTypes","toChecksumAddress","address","_address","checksumAddress","addressHash","toUpperCase","hexFalse","repeat","encodeData","jsonABIArgument","args","hash","inputs","map","expandType","functionHash","functionString","shouldValidateInputLength","find","jsonABIInputsLength","argsWithTypes","reduce","acc","_exec","basicType","exec","forEach","encodedArgs","inputType","rawArg","hexTrue","character","decodeRPCResponse","nodeResponse","_jsonABIArgument$outp","rawOutputs","outputs","_ref2","slicedResponse","responseData","hexOffset","hexLength","decimalOffset","decimalLength","decodeURIComponent","escape","hexToUtf8","outputType","estimateGas","txnData","previousValue","currentValue","BaseContract","addressOrName","contractInterface","signerOrProvider","_this2","_provider","filter","_arguments2","_args","functionArguments","lastArg","decimalGas","gasLimit","gas","req","Promise","resolve","to","reject","Contract","cleanTransaction","transaction","cleanedTransaction","keys","key","cleanLog","receiptLog","cleanedLog","XMLHttpRequest","u","ok","status","statusText","url","responseURL","text","responseText","json","then","JSON","blob","Blob","response","clone","headers","entries","has","open","method","onload","getAllResponseHeaders","onerror","withCredentials","credentials","setRequestHeader","send","body","browser","self","fetch","buildRPCPostBody","params","jsonrpc","id","logger","Logger","packageVersion","throwError","argsLength","index","throwArgumentError","checkSafeUint53","operation","fault","isBytesLike","isHexString","isBytes","v","arrayify","result","allowMissingPrefix","isHexable","hexPad","arrayOfBytesLike","objects","item","accum","object","zeroPad","HexCharacters","hexlify","endOffset","hexStripZeros","hexZeroPad","prepareTransaction","preparedTransaction","chainsInfo","prepBlockTag","blockTag","BaseProvider","rpcUrls","_rpcUrls","_post","post","unfetch","buildFetchInit","_unused","selectRpcUrl","getNetwork","hexChainId","chainId","info","ensAddress","getBlockNumber","currentBlockNumber","getTransaction","transactionHash","all","getBlock","blockNumber","confirmations","number","getTransactionReceipt","rpcTransaction","transactionReceipt","cleanedTransactionReceipt","byzantium","cleanTransactionReceipt","getTransactionCount","transactionCount","timeFrame","returnTransactionObjects","rpcBlock","block","cleanedBlock","transactions","cleanBlock","getGasPrice","hexGasPrice","getBalance","hexBalance","getCode","gasUsed","getFeeData","_ref3","gasPrice","lastBaseFeePerGas","maxFeePerGas","maxPriorityFeePerGas","baseFeePerGas","getLogs","filterByRange","fromBlock","toBlock","rpcLogs","JsonRpcProvider","rpcUrl","_BaseProvider","AlchemyProvider","_JsonRpcProvider","apiKey","network","FallthroughProvider","rpcUrlCounter","timeoutDuration","genesisCount","recursivePostRetry","prom","time","genesisRpcUrl","timeout","setTimeout","clearTimeout","_0n","_1n","_2n","_3n","_8n","CURVE","freeze","h","Gx","Gy","beta","divNearest","endo","splitScalar","a1","b1","a2","b2","POW_2_128","c1","c2","k1","k2","k1neg","k2neg","weierstrass","x3","USE_ENDOMORPHISM","assertJacPoint","other","JacobianPoint","z","static","Point","ZERO","points","toInv","nums","scratch","lastMultiplied","inverted","invert","reduceRight","invertBatch","toAffine","toAffineBatch","fromAffine","X1","Y1","Z1","X2","Y2","Z2","Z1Z1","Z2Z2","U1","U2","S1","S2","negate","double","B","x1b","F","X3","Y3","Z3","HH","HHH","V","subtract","multiplyUnsafe","scalar","P0","normalizeScalar","k1p","k2p","precomputeWindow","windows","window","wNAF","affinePoint","BASE","_WINDOW_SIZE","precomputes","pointPrecomputes","normalizeZ","f","windowSize","mask","maxNumber","shiftBy","wbits","offset1","offset2","cond1","cond2","constTimeNegate","multiply","point","fake","f1p","f2p","invZ","is0","iz1","iz2","iz3","ax","ay","zz","condition","WeakMap","_setWindowSize","delete","hasEvenY","isShort","bytesToNumber","isValidFieldElement","_6n","_11n","_22n","_23n","_44n","_88n","b3","b6","pow2","b9","b11","b22","b44","b88","b176","b220","b223","t1","t2","sqrtMod","isYOdd","assertValidity","fieldLen","ensureBytes","header","fromCompressedHex","fromUncompressedHex","privateKey","isSafeInteger","hexToNumber","isWithinCurveOrder","normalizePrivateKey","msgHash","signature","recovery","Signature","fromDER","fromCompact","normalizeSignature","truncateOnly","delta","groupLen","bits2int_2","truncateHash","radj","rinv","u1","u2","R","fromHex","numTo32bStr","Q","multiplyAndAddUnsafe","toRawBytes","isCompressed","hexToBytes","toHex","toHexX","toRawX","left","aP","bQ","sum","sliceDER","parseDERInt","bytesToHex","sBytes","rBytesLeft","parseDERSignature","hasHighS","normalizeS","toDERRawBytes","toDERHex","sHex","numberToHexUnpadded","rHex","sHexL","rHexL","sLen","rLen","toCompactRawBytes","toCompactHex","hexes","uint8a","POW_2_256","hexByte","byte","modulo","computePublicKey","privKey","fromPrivateKey","keccak256","bufferableData","toUtf8Bytes","regexBytes","RegExp","regexNumber","regexArray","_pack","baseType","pack","types","values","tight","hexDataSlice","etherQuantity","gweiQuantity","items","trimmed","_vs","recoveryParam","yParityAndS","compact","vs_1","vs","weiToEther","weiQuantity","_weiQuantity"],"mappings":"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"}