{"version":3,"file":"GoogleLogin.a3aab884.js","sources":["../../../node_modules/@ethersproject/constants/lib.esm/addresses.js","../../../node_modules/@ethersproject/constants/lib.esm/hashes.js","../../../node_modules/@ethersproject/hash/lib.esm/_version.js","../../../node_modules/@ethersproject/base64/lib.esm/base64.js","../../../node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js","../../../node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js","../../../node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js","../../../node_modules/@ethersproject/hash/lib.esm/namehash.js","../../../node_modules/@ethersproject/hash/lib.esm/typed-data.js","../../../node_modules/@ethersproject/basex/lib.esm/index.js","../../../node_modules/@ethersproject/sha2/lib.esm/sha2.js","../../../node_modules/@ethersproject/networks/lib.esm/_version.js","../../../node_modules/@ethersproject/networks/lib.esm/index.js","../../../node_modules/@ethersproject/web/lib.esm/_version.js","../../../node_modules/@ethersproject/web/lib.esm/geturl.js","../../../node_modules/@ethersproject/web/lib.esm/index.js","../../../node_modules/bech32/index.js","../../../node_modules/@ethersproject/providers/lib.esm/_version.js","../../../node_modules/@ethersproject/providers/lib.esm/formatter.js","../../../node_modules/@ethersproject/providers/lib.esm/base-provider.js","../../../node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js","../../../app/frontend/src/atoms/EmailAtom.tsx","../../../app/frontend/src/atoms/SessionStatusAtom.tsx","../../../node_modules/@react-oauth/google/dist/index.esm.js","../../../app/frontend/src/components/session/GoogleLogin.tsx"],"sourcesContent":["export const AddressZero = \"0x0000000000000000000000000000000000000000\";\n//# sourceMappingURL=addresses.js.map","export const HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n//# sourceMappingURL=hashes.js.map","export const version = \"hash/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function decode(textData) {\n textData = atob(textData);\n const data = [];\n for (let i = 0; i < textData.length; i++) {\n data.push(textData.charCodeAt(i));\n }\n return arrayify(data);\n}\nexport function encode(data) {\n data = arrayify(data);\n let textData = \"\";\n for (let i = 0; i < data.length; i++) {\n textData += String.fromCharCode(data[i]);\n }\n return btoa(textData);\n}\n//# sourceMappingURL=base64.js.map","/**\n * MIT License\n *\n * Copyright (c) 2021 Andrew Raffensperger\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * This is a near carbon-copy of the original source (link below) with the\n * TypeScript typings added and a few tweaks to make it ES3-compatible.\n *\n * See: https://github.com/adraffy/ens-normalize.js\n */\n// https://github.com/behnammodi/polyfill/blob/master/array.polyfill.js\nfunction flat(array, depth) {\n if (depth == null) {\n depth = 1;\n }\n const result = [];\n const forEach = result.forEach;\n const flatDeep = function (arr, depth) {\n forEach.call(arr, function (val) {\n if (depth > 0 && Array.isArray(val)) {\n flatDeep(val, depth - 1);\n }\n else {\n result.push(val);\n }\n });\n };\n flatDeep(array, depth);\n return result;\n}\nfunction fromEntries(array) {\n const result = {};\n for (let i = 0; i < array.length; i++) {\n const value = array[i];\n result[value[0]] = value[1];\n }\n return result;\n}\nexport function decode_arithmetic(bytes) {\n let pos = 0;\n function u16() { return (bytes[pos++] << 8) | bytes[pos++]; }\n // decode the frequency table\n let symbol_count = u16();\n let total = 1;\n let acc = [0, 1]; // first symbol has frequency 1\n for (let i = 1; i < symbol_count; i++) {\n acc.push(total += u16());\n }\n // skip the sized-payload that the last 3 symbols index into\n let skip = u16();\n let pos_payload = pos;\n pos += skip;\n let read_width = 0;\n let read_buffer = 0;\n function read_bit() {\n if (read_width == 0) {\n // this will read beyond end of buffer\n // but (undefined|0) => zero pad\n read_buffer = (read_buffer << 8) | bytes[pos++];\n read_width = 8;\n }\n return (read_buffer >> --read_width) & 1;\n }\n const N = 31;\n const FULL = Math.pow(2, N);\n const HALF = FULL >>> 1;\n const QRTR = HALF >> 1;\n const MASK = FULL - 1;\n // fill register\n let register = 0;\n for (let i = 0; i < N; i++)\n register = (register << 1) | read_bit();\n let symbols = [];\n let low = 0;\n let range = FULL; // treat like a float\n while (true) {\n let value = Math.floor((((register - low + 1) * total) - 1) / range);\n let start = 0;\n let end = symbol_count;\n while (end - start > 1) { // binary search\n let mid = (start + end) >>> 1;\n if (value < acc[mid]) {\n end = mid;\n }\n else {\n start = mid;\n }\n }\n if (start == 0)\n break; // first symbol is end mark\n symbols.push(start);\n let a = low + Math.floor(range * acc[start] / total);\n let b = low + Math.floor(range * acc[start + 1] / total) - 1;\n while (((a ^ b) & HALF) == 0) {\n register = (register << 1) & MASK | read_bit();\n a = (a << 1) & MASK;\n b = (b << 1) & MASK | 1;\n }\n while (a & ~b & QRTR) {\n register = (register & HALF) | ((register << 1) & (MASK >>> 1)) | read_bit();\n a = (a << 1) ^ HALF;\n b = ((b ^ HALF) << 1) | HALF | 1;\n }\n low = a;\n range = 1 + b - a;\n }\n let offset = symbol_count - 4;\n return symbols.map(x => {\n switch (x - offset) {\n case 3: return offset + 0x10100 + ((bytes[pos_payload++] << 16) | (bytes[pos_payload++] << 8) | bytes[pos_payload++]);\n case 2: return offset + 0x100 + ((bytes[pos_payload++] << 8) | bytes[pos_payload++]);\n case 1: return offset + bytes[pos_payload++];\n default: return x - 1;\n }\n });\n}\n// returns an iterator which returns the next symbol\nexport function read_payload(v) {\n let pos = 0;\n return () => v[pos++];\n}\nexport function read_compressed_payload(bytes) {\n return read_payload(decode_arithmetic(bytes));\n}\n// eg. [0,1,2,3...] => [0,-1,1,-2,...]\nexport function signed(i) {\n return (i & 1) ? (~i >> 1) : (i >> 1);\n}\nfunction read_counts(n, next) {\n let v = Array(n);\n for (let i = 0; i < n; i++)\n v[i] = 1 + next();\n return v;\n}\nfunction read_ascending(n, next) {\n let v = Array(n);\n for (let i = 0, x = -1; i < n; i++)\n v[i] = x += 1 + next();\n return v;\n}\nfunction read_deltas(n, next) {\n let v = Array(n);\n for (let i = 0, x = 0; i < n; i++)\n v[i] = x += signed(next());\n return v;\n}\nexport function read_member_array(next, lookup) {\n let v = read_ascending(next(), next);\n let n = next();\n let vX = read_ascending(n, next);\n let vN = read_counts(n, next);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < vN[i]; j++) {\n v.push(vX[i] + j);\n }\n }\n return lookup ? v.map(x => lookup[x]) : v;\n}\n// returns array of \n// [x, ys] => single replacement rule\n// [x, ys, n, dx, dx] => linear map\nexport function read_mapped_map(next) {\n let ret = [];\n while (true) {\n let w = next();\n if (w == 0)\n break;\n ret.push(read_linear_table(w, next));\n }\n while (true) {\n let w = next() - 1;\n if (w < 0)\n break;\n ret.push(read_replacement_table(w, next));\n }\n return fromEntries(flat(ret));\n}\nexport function read_zero_terminated_array(next) {\n let v = [];\n while (true) {\n let i = next();\n if (i == 0)\n break;\n v.push(i);\n }\n return v;\n}\nfunction read_transposed(n, w, next) {\n let m = Array(n).fill(undefined).map(() => []);\n for (let i = 0; i < w; i++) {\n read_deltas(n, next).forEach((x, j) => m[j].push(x));\n }\n return m;\n}\nfunction read_linear_table(w, next) {\n let dx = 1 + next();\n let dy = next();\n let vN = read_zero_terminated_array(next);\n let m = read_transposed(vN.length, 1 + w, next);\n return flat(m.map((v, i) => {\n const x = v[0], ys = v.slice(1);\n //let [x, ...ys] = v;\n //return Array(vN[i]).fill().map((_, j) => {\n return Array(vN[i]).fill(undefined).map((_, j) => {\n let j_dy = j * dy;\n return [x + j * dx, ys.map(y => y + j_dy)];\n });\n }));\n}\nfunction read_replacement_table(w, next) {\n let n = 1 + next();\n let m = read_transposed(n, 1 + w, next);\n return m.map(v => [v[0], v.slice(1)]);\n}\nexport function read_emoji_trie(next) {\n let sorted = read_member_array(next).sort((a, b) => a - b);\n return read();\n function read() {\n let branches = [];\n while (true) {\n let keys = read_member_array(next, sorted);\n if (keys.length == 0)\n break;\n branches.push({ set: new Set(keys), node: read() });\n }\n branches.sort((a, b) => b.set.size - a.set.size); // sort by likelihood\n let temp = next();\n let valid = temp % 3;\n temp = (temp / 3) | 0;\n let fe0f = !!(temp & 1);\n temp >>= 1;\n let save = temp == 1;\n let check = temp == 2;\n return { branches, valid, fe0f, save, check };\n }\n}\n//# sourceMappingURL=decoder.js.map","/**\n * MIT License\n *\n * Copyright (c) 2021 Andrew Raffensperger\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * This is a near carbon-copy of the original source (link below) with the\n * TypeScript typings added and a few tweaks to make it ES3-compatible.\n *\n * See: https://github.com/adraffy/ens-normalize.js\n */\nimport { decode } from \"@ethersproject/base64\";\nimport { read_compressed_payload } from './decoder.js';\nexport function getData() {\n return read_compressed_payload(decode('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'));\n}\n//# sourceMappingURL=include.js.map","/**\n * MIT License\n *\n * Copyright (c) 2021 Andrew Raffensperger\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * This is a near carbon-copy of the original source (link below) with the\n * TypeScript typings added and a few tweaks to make it ES3-compatible.\n *\n * See: https://github.com/adraffy/ens-normalize.js\n */\nimport { toUtf8CodePoints } from \"@ethersproject/strings\";\nimport { getData } from './include.js';\nconst r = getData();\nimport { read_member_array, read_mapped_map, read_emoji_trie } from './decoder.js';\n// @TODO: This should be lazily loaded\nconst VALID = new Set(read_member_array(r));\nconst IGNORED = new Set(read_member_array(r));\nconst MAPPED = read_mapped_map(r);\nconst EMOJI_ROOT = read_emoji_trie(r);\n//const NFC_CHECK = new Set(read_member_array(r, Array.from(VALID.values()).sort((a, b) => a - b)));\n//const STOP = 0x2E;\nconst HYPHEN = 0x2D;\nconst UNDERSCORE = 0x5F;\nfunction explode_cp(name) {\n return toUtf8CodePoints(name);\n}\nfunction filter_fe0f(cps) {\n return cps.filter(cp => cp != 0xFE0F);\n}\nexport function ens_normalize_post_check(name) {\n for (let label of name.split('.')) {\n let cps = explode_cp(label);\n try {\n for (let i = cps.lastIndexOf(UNDERSCORE) - 1; i >= 0; i--) {\n if (cps[i] !== UNDERSCORE) {\n throw new Error(`underscore only allowed at start`);\n }\n }\n if (cps.length >= 4 && cps.every(cp => cp < 0x80) && cps[2] === HYPHEN && cps[3] === HYPHEN) {\n throw new Error(`invalid label extension`);\n }\n }\n catch (err) {\n throw new Error(`Invalid label \"${label}\": ${err.message}`);\n }\n }\n return name;\n}\nexport function ens_normalize(name) {\n return ens_normalize_post_check(normalize(name, filter_fe0f));\n}\nfunction normalize(name, emoji_filter) {\n let input = explode_cp(name).reverse(); // flip for pop\n let output = [];\n while (input.length) {\n let emoji = consume_emoji_reversed(input);\n if (emoji) {\n output.push(...emoji_filter(emoji));\n continue;\n }\n let cp = input.pop();\n if (VALID.has(cp)) {\n output.push(cp);\n continue;\n }\n if (IGNORED.has(cp)) {\n continue;\n }\n let cps = MAPPED[cp];\n if (cps) {\n output.push(...cps);\n continue;\n }\n throw new Error(`Disallowed codepoint: 0x${cp.toString(16).toUpperCase()}`);\n }\n return ens_normalize_post_check(nfc(String.fromCodePoint(...output)));\n}\nfunction nfc(s) {\n return s.normalize('NFC');\n}\nfunction consume_emoji_reversed(cps, eaten) {\n var _a;\n let node = EMOJI_ROOT;\n let emoji;\n let saved;\n let stack = [];\n let pos = cps.length;\n if (eaten)\n eaten.length = 0; // clear input buffer (if needed)\n while (pos) {\n let cp = cps[--pos];\n node = (_a = node.branches.find(x => x.set.has(cp))) === null || _a === void 0 ? void 0 : _a.node;\n if (!node)\n break;\n if (node.save) { // remember\n saved = cp;\n }\n else if (node.check) { // check exclusion\n if (cp === saved)\n break;\n }\n stack.push(cp);\n if (node.fe0f) {\n stack.push(0xFE0F);\n if (pos > 0 && cps[pos - 1] == 0xFE0F)\n pos--; // consume optional FE0F\n }\n if (node.valid) { // this is a valid emoji (so far)\n emoji = stack.slice(); // copy stack\n if (node.valid == 2)\n emoji.splice(1, 1); // delete FE0F at position 1 (RGI ZWJ don't follow spec!)\n if (eaten)\n eaten.push(...cps.slice(pos).reverse()); // copy input (if needed)\n cps.length = pos; // truncate\n }\n }\n return emoji;\n}\n//# sourceMappingURL=lib.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { ens_normalize } from \"./ens-normalize/lib\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nfunction checkComponent(comp) {\n if (comp.length === 0) {\n throw new Error(\"invalid ENS name; empty component\");\n }\n return comp;\n}\nfunction ensNameSplit(name) {\n const bytes = toUtf8Bytes(ens_normalize(name));\n const comps = [];\n if (name.length === 0) {\n return comps;\n }\n let last = 0;\n for (let i = 0; i < bytes.length; i++) {\n const d = bytes[i];\n // A separator (i.e. \".\"); copy this component\n if (d === 0x2e) {\n comps.push(checkComponent(bytes.slice(last, i)));\n last = i + 1;\n }\n }\n // There was a stray separator at the end of the name\n if (last >= bytes.length) {\n throw new Error(\"invalid ENS name; empty component\");\n }\n comps.push(checkComponent(bytes.slice(last)));\n return comps;\n}\nexport function ensNormalize(name) {\n return ensNameSplit(name).map((comp) => toUtf8String(comp)).join(\".\");\n}\nexport function isValidName(name) {\n try {\n return (ensNameSplit(name).length !== 0);\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n /* istanbul ignore if */\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let result = Zeros;\n const comps = ensNameSplit(name);\n while (comps.length) {\n result = keccak256(concat([result, keccak256(comps.pop())]));\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n return hexlify(concat(ensNameSplit(name).map((comp) => {\n // DNS does not allow components over 63 bytes in length\n if (comp.length > 63) {\n throw new Error(\"invalid DNS encoded entry; length exceeds 63 bytes\");\n }\n const bytes = new Uint8Array(comp.length + 1);\n bytes.set(comp, 1);\n bytes[0] = bytes.length - 1;\n return bytes;\n }))) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { getAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, hexConcat, hexlify, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { deepCopy, defineReadOnly, shallowCopy } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { id } from \"./id\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst NegativeOne = BigNumber.from(-1);\nconst Zero = BigNumber.from(0);\nconst One = BigNumber.from(1);\nconst MaxUint256 = BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return hexConcat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = hexZeroPad(One.toHexString(), 32);\nconst hexFalse = hexZeroPad(Zero.toHexString(), 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n try {\n return BigNumber.from(value).toString();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value for \"chainId\"`, \"domain.chainId\", value);\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n try {\n const bytes = arrayify(value);\n if (bytes.length !== 32) {\n throw new Error(\"bad length\");\n }\n return hexlify(bytes);\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = MaxUint256.mask(signed ? (width - 1) : width);\n const boundsLower = signed ? boundsUpper.add(One).mul(NegativeOne) : Zero;\n return function (value) {\n const v = BigNumber.from(value);\n if (v.lt(boundsLower) || v.gt(boundsUpper)) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return hexZeroPad(v.toTwos(256).toHexString(), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return hexZeroPad(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n defineReadOnly(this, \"types\", Object.freeze(deepCopy(types)));\n defineReadOnly(this, \"_encoderCache\", {});\n defineReadOnly(this, \"_types\", {});\n // Link struct types to their direct child structs\n const links = {};\n // Link structs to structs which contain them as a child\n const parents = {};\n // Link all subtypes within a given struct\n const subtypes = {};\n Object.keys(types).forEach((type) => {\n links[type] = {};\n parents[type] = [];\n subtypes[type] = {};\n });\n for (const name in types) {\n const uniqueNames = {};\n types[name].forEach((field) => {\n // Check each field has a unique name\n if (uniqueNames[field.name]) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames[field.name] = true;\n // Get the base type (drop any array specifiers)\n const baseType = field.type.match(/^([^\\x5b]*)(\\x5b|$)/)[1];\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n return;\n }\n if (!parents[baseType]) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents[baseType].push(name);\n links[name][baseType] = true;\n });\n }\n // Deduce the primary type\n const primaryTypes = Object.keys(parents).filter((n) => (parents[n].length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineReadOnly(this, \"primaryType\", primaryTypes[0]);\n // Check for circular type references\n function checkCircular(type, found) {\n if (found[type]) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found[type] = true;\n Object.keys(links[type]).forEach((child) => {\n if (!parents[child]) {\n return;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n Object.keys(found).forEach((subtype) => {\n subtypes[subtype][child] = true;\n });\n });\n delete found[type];\n }\n checkCircular(this.primaryType, {});\n // Compute each fully describe type\n for (const name in subtypes) {\n const st = Object.keys(subtypes[name]);\n st.sort();\n this._types[name] = encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\");\n }\n }\n getEncoder(type) {\n let encoder = this._encoderCache[type];\n if (!encoder) {\n encoder = this._encoderCache[type] = this._getEncoder(type);\n }\n return encoder;\n }\n _getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (this._types[subtype]) {\n result = result.map(keccak256);\n }\n return keccak256(hexConcat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(this._types[type]);\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (this._types[type]) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return hexConcat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n encodeType(name) {\n const result = this._types[name];\n if (!result) {\n logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return hexConcat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static resolveNames(domain, types, value, resolveName) {\n return __awaiter(this, void 0, void 0, function* () {\n // Make a copy to isolate it from the object passed in\n domain = shallowCopy(domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = yield resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n });\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = shallowCopy(types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(arrayify(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return BigNumber.from(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n//# sourceMappingURL=typed-data.js.map","/**\n * var basex = require(\"base-x\");\n *\n * This implementation is heavily based on base-x. The main reason to\n * deviate was to prevent the dependency of Buffer.\n *\n * Contributors:\n *\n * base-x encoding\n * Forked from https://github.com/cryptocoinjs/bs58\n * Originally written by Mike Hearn for BitcoinJ\n * Copyright (c) 2011 Google Inc\n * Ported to JavaScript by Stefan Thomas\n * Merged Buffer refactorings from base58-native by Stephen Pair\n * Copyright (c) 2013 BitPay Inc\n *\n * The MIT License (MIT)\n *\n * Copyright base-x contributors (c) 2016\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n */\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nexport class BaseX {\n constructor(alphabet) {\n defineReadOnly(this, \"alphabet\", alphabet);\n defineReadOnly(this, \"base\", alphabet.length);\n defineReadOnly(this, \"_alphabetMap\", {});\n defineReadOnly(this, \"_leader\", alphabet.charAt(0));\n // pre-compute lookup table\n for (let i = 0; i < alphabet.length; i++) {\n this._alphabetMap[alphabet.charAt(i)] = i;\n }\n }\n encode(value) {\n let source = arrayify(value);\n if (source.length === 0) {\n return \"\";\n }\n let digits = [0];\n for (let i = 0; i < source.length; ++i) {\n let carry = source[i];\n for (let j = 0; j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % this.base;\n carry = (carry / this.base) | 0;\n }\n while (carry > 0) {\n digits.push(carry % this.base);\n carry = (carry / this.base) | 0;\n }\n }\n let string = \"\";\n // deal with leading zeros\n for (let k = 0; source[k] === 0 && k < source.length - 1; ++k) {\n string += this._leader;\n }\n // convert digits to a string\n for (let q = digits.length - 1; q >= 0; --q) {\n string += this.alphabet[digits[q]];\n }\n return string;\n }\n decode(value) {\n if (typeof (value) !== \"string\") {\n throw new TypeError(\"Expected String\");\n }\n let bytes = [];\n if (value.length === 0) {\n return new Uint8Array(bytes);\n }\n bytes.push(0);\n for (let i = 0; i < value.length; i++) {\n let byte = this._alphabetMap[value[i]];\n if (byte === undefined) {\n throw new Error(\"Non-base\" + this.base + \" character\");\n }\n let carry = byte;\n for (let j = 0; j < bytes.length; ++j) {\n carry += bytes[j] * this.base;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n while (carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n // deal with leading zeros\n for (let k = 0; value[k] === this._leader && k < value.length - 1; ++k) {\n bytes.push(0);\n }\n return arrayify(new Uint8Array(bytes.reverse()));\n }\n}\nconst Base32 = new BaseX(\"abcdefghijklmnopqrstuvwxyz234567\");\nconst Base58 = new BaseX(\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\");\nexport { Base32, Base58 };\n//console.log(Base58.decode(\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\"))\n//console.log(Base58.encode(Base58.decode(\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\")))\n//# sourceMappingURL=index.js.map","\"use strict\";\nimport hash from \"hash.js\";\n//const _ripemd160 = _hash.ripemd160;\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { SupportedAlgorithm } from \"./types\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport function ripemd160(data) {\n return \"0x\" + (hash.ripemd160().update(arrayify(data)).digest(\"hex\"));\n}\nexport function sha256(data) {\n return \"0x\" + (hash.sha256().update(arrayify(data)).digest(\"hex\"));\n}\nexport function sha512(data) {\n return \"0x\" + (hash.sha512().update(arrayify(data)).digest(\"hex\"));\n}\nexport function computeHmac(algorithm, key, data) {\n if (!SupportedAlgorithm[algorithm]) {\n logger.throwError(\"unsupported algorithm \" + algorithm, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"hmac\",\n algorithm: algorithm\n });\n }\n return \"0x\" + hash.hmac(hash[algorithm], arrayify(key)).update(arrayify(data)).digest(\"hex\");\n}\n//# sourceMappingURL=sha2.js.map","export const version = \"networks/5.7.1\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n;\nfunction isRenetworkable(value) {\n return (value && typeof (value.renetwork) === \"function\");\n}\nfunction ethDefaultProvider(network) {\n const func = function (providers, options) {\n if (options == null) {\n options = {};\n }\n const providerList = [];\n if (providers.InfuraProvider && options.infura !== \"-\") {\n try {\n providerList.push(new providers.InfuraProvider(network, options.infura));\n }\n catch (error) { }\n }\n if (providers.EtherscanProvider && options.etherscan !== \"-\") {\n try {\n providerList.push(new providers.EtherscanProvider(network, options.etherscan));\n }\n catch (error) { }\n }\n if (providers.AlchemyProvider && options.alchemy !== \"-\") {\n try {\n providerList.push(new providers.AlchemyProvider(network, options.alchemy));\n }\n catch (error) { }\n }\n if (providers.PocketProvider && options.pocket !== \"-\") {\n // These networks are currently faulty on Pocket as their\n // network does not handle the Berlin hardfork, which is\n // live on these ones.\n // @TODO: This goes away once Pocket has upgraded their nodes\n const skip = [\"goerli\", \"ropsten\", \"rinkeby\", \"sepolia\"];\n try {\n const provider = new providers.PocketProvider(network, options.pocket);\n if (provider.network && skip.indexOf(provider.network.name) === -1) {\n providerList.push(provider);\n }\n }\n catch (error) { }\n }\n if (providers.CloudflareProvider && options.cloudflare !== \"-\") {\n try {\n providerList.push(new providers.CloudflareProvider(network));\n }\n catch (error) { }\n }\n if (providers.AnkrProvider && options.ankr !== \"-\") {\n try {\n const skip = [\"ropsten\"];\n const provider = new providers.AnkrProvider(network, options.ankr);\n if (provider.network && skip.indexOf(provider.network.name) === -1) {\n providerList.push(provider);\n }\n }\n catch (error) { }\n }\n if (providerList.length === 0) {\n return null;\n }\n if (providers.FallbackProvider) {\n let quorum = 1;\n if (options.quorum != null) {\n quorum = options.quorum;\n }\n else if (network === \"homestead\") {\n quorum = 2;\n }\n return new providers.FallbackProvider(providerList, quorum);\n }\n return providerList[0];\n };\n func.renetwork = function (network) {\n return ethDefaultProvider(network);\n };\n return func;\n}\nfunction etcDefaultProvider(url, network) {\n const func = function (providers, options) {\n if (providers.JsonRpcProvider) {\n return new providers.JsonRpcProvider(url, network);\n }\n return null;\n };\n func.renetwork = function (network) {\n return etcDefaultProvider(url, network);\n };\n return func;\n}\nconst homestead = {\n chainId: 1,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"homestead\",\n _defaultProvider: ethDefaultProvider(\"homestead\")\n};\nconst ropsten = {\n chainId: 3,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"ropsten\",\n _defaultProvider: ethDefaultProvider(\"ropsten\")\n};\nconst classicMordor = {\n chainId: 63,\n name: \"classicMordor\",\n _defaultProvider: etcDefaultProvider(\"https://www.ethercluster.com/mordor\", \"classicMordor\")\n};\n// See: https://chainlist.org\nconst networks = {\n unspecified: { chainId: 0, name: \"unspecified\" },\n homestead: homestead,\n mainnet: homestead,\n morden: { chainId: 2, name: \"morden\" },\n ropsten: ropsten,\n testnet: ropsten,\n rinkeby: {\n chainId: 4,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"rinkeby\",\n _defaultProvider: ethDefaultProvider(\"rinkeby\")\n },\n kovan: {\n chainId: 42,\n name: \"kovan\",\n _defaultProvider: ethDefaultProvider(\"kovan\")\n },\n goerli: {\n chainId: 5,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"goerli\",\n _defaultProvider: ethDefaultProvider(\"goerli\")\n },\n kintsugi: { chainId: 1337702, name: \"kintsugi\" },\n sepolia: {\n chainId: 11155111,\n name: \"sepolia\",\n _defaultProvider: ethDefaultProvider(\"sepolia\")\n },\n // ETC (See: #351)\n classic: {\n chainId: 61,\n name: \"classic\",\n _defaultProvider: etcDefaultProvider(\"https:/\\/www.ethercluster.com/etc\", \"classic\")\n },\n classicMorden: { chainId: 62, name: \"classicMorden\" },\n classicMordor: classicMordor,\n classicTestnet: classicMordor,\n classicKotti: {\n chainId: 6,\n name: \"classicKotti\",\n _defaultProvider: etcDefaultProvider(\"https:/\\/www.ethercluster.com/kotti\", \"classicKotti\")\n },\n xdai: { chainId: 100, name: \"xdai\" },\n matic: {\n chainId: 137,\n name: \"matic\",\n _defaultProvider: ethDefaultProvider(\"matic\")\n },\n maticmum: { chainId: 80001, name: \"maticmum\" },\n optimism: {\n chainId: 10,\n name: \"optimism\",\n _defaultProvider: ethDefaultProvider(\"optimism\")\n },\n \"optimism-kovan\": { chainId: 69, name: \"optimism-kovan\" },\n \"optimism-goerli\": { chainId: 420, name: \"optimism-goerli\" },\n arbitrum: { chainId: 42161, name: \"arbitrum\" },\n \"arbitrum-rinkeby\": { chainId: 421611, name: \"arbitrum-rinkeby\" },\n \"arbitrum-goerli\": { chainId: 421613, name: \"arbitrum-goerli\" },\n bnb: { chainId: 56, name: \"bnb\" },\n bnbt: { chainId: 97, name: \"bnbt\" },\n};\n/**\n * getNetwork\n *\n * Converts a named common networks or chain ID (network ID) to a Network\n * and verifies a network is a valid Network..\n */\nexport function getNetwork(network) {\n // No network (null)\n if (network == null) {\n return null;\n }\n if (typeof (network) === \"number\") {\n for (const name in networks) {\n const standard = networks[name];\n if (standard.chainId === network) {\n return {\n name: standard.name,\n chainId: standard.chainId,\n ensAddress: (standard.ensAddress || null),\n _defaultProvider: (standard._defaultProvider || null)\n };\n }\n }\n return {\n chainId: network,\n name: \"unknown\"\n };\n }\n if (typeof (network) === \"string\") {\n const standard = networks[network];\n if (standard == null) {\n return null;\n }\n return {\n name: standard.name,\n chainId: standard.chainId,\n ensAddress: standard.ensAddress,\n _defaultProvider: (standard._defaultProvider || null)\n };\n }\n const standard = networks[network.name];\n // Not a standard network; check that it is a valid network in general\n if (!standard) {\n if (typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network chainId\", \"network\", network);\n }\n return network;\n }\n // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)\n if (network.chainId !== 0 && network.chainId !== standard.chainId) {\n logger.throwArgumentError(\"network chainId mismatch\", \"network\", network);\n }\n // @TODO: In the next major version add an attach function to a defaultProvider\n // class and move the _defaultProvider internal to this file (extend Network)\n let defaultProvider = network._defaultProvider || null;\n if (defaultProvider == null && standard._defaultProvider) {\n if (isRenetworkable(standard._defaultProvider)) {\n defaultProvider = standard._defaultProvider.renetwork(network);\n }\n else {\n defaultProvider = standard._defaultProvider;\n }\n }\n // Standard Network (allow overriding the ENS address)\n return {\n name: network.name,\n chainId: standard.chainId,\n ensAddress: (network.ensAddress || standard.ensAddress || null),\n _defaultProvider: defaultProvider\n };\n}\n//# sourceMappingURL=index.js.map","export const version = \"web/5.7.1\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function getUrl(href, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options == null) {\n options = {};\n }\n const request = {\n method: (options.method || \"GET\"),\n headers: (options.headers || {}),\n body: (options.body || undefined),\n };\n if (options.skipFetchSetup !== true) {\n request.mode = \"cors\"; // no-cors, cors, *same-origin\n request.cache = \"no-cache\"; // *default, no-cache, reload, force-cache, only-if-cached\n request.credentials = \"same-origin\"; // include, *same-origin, omit\n request.redirect = \"follow\"; // manual, *follow, error\n request.referrer = \"client\"; // no-referrer, *client\n }\n ;\n if (options.fetchOptions != null) {\n const opts = options.fetchOptions;\n if (opts.mode) {\n request.mode = (opts.mode);\n }\n if (opts.cache) {\n request.cache = (opts.cache);\n }\n if (opts.credentials) {\n request.credentials = (opts.credentials);\n }\n if (opts.redirect) {\n request.redirect = (opts.redirect);\n }\n if (opts.referrer) {\n request.referrer = opts.referrer;\n }\n }\n const response = yield fetch(href, request);\n const body = yield response.arrayBuffer();\n const headers = {};\n if (response.headers.forEach) {\n response.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n }\n else {\n ((response.headers).keys)().forEach((key) => {\n headers[key.toLowerCase()] = response.headers.get(key);\n });\n }\n return {\n headers: headers,\n statusCode: response.status,\n statusMessage: response.statusText,\n body: arrayify(new Uint8Array(body)),\n };\n });\n}\n//# sourceMappingURL=geturl.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { decode as base64Decode, encode as base64Encode } from \"@ethersproject/base64\";\nimport { hexlify, isBytesLike } from \"@ethersproject/bytes\";\nimport { shallowCopy } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { getUrl } from \"./geturl\";\nfunction staller(duration) {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\nfunction bodyify(value, type) {\n if (value == null) {\n return null;\n }\n if (typeof (value) === \"string\") {\n return value;\n }\n if (isBytesLike(value)) {\n if (type && (type.split(\"/\")[0] === \"text\" || type.split(\";\")[0].trim() === \"application/json\")) {\n try {\n return toUtf8String(value);\n }\n catch (error) { }\n ;\n }\n return hexlify(value);\n }\n return value;\n}\nfunction unpercent(value) {\n return toUtf8Bytes(value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n }));\n}\n// This API is still a work in progress; the future changes will likely be:\n// - ConnectionInfo => FetchDataRequest\n// - FetchDataRequest.body? = string | Uint8Array | { contentType: string, data: string | Uint8Array }\n// - If string => text/plain, Uint8Array => application/octet-stream (if content-type unspecified)\n// - FetchDataRequest.processFunc = (body: Uint8Array, response: FetchDataResponse) => T\n// For this reason, it should be considered internal until the API is finalized\nexport function _fetchData(connection, body, processFunc) {\n // How many times to retry in the event of a throttle\n const attemptLimit = (typeof (connection) === \"object\" && connection.throttleLimit != null) ? connection.throttleLimit : 12;\n logger.assertArgument((attemptLimit > 0 && (attemptLimit % 1) === 0), \"invalid connection throttle limit\", \"connection.throttleLimit\", attemptLimit);\n const throttleCallback = ((typeof (connection) === \"object\") ? connection.throttleCallback : null);\n const throttleSlotInterval = ((typeof (connection) === \"object\" && typeof (connection.throttleSlotInterval) === \"number\") ? connection.throttleSlotInterval : 100);\n logger.assertArgument((throttleSlotInterval > 0 && (throttleSlotInterval % 1) === 0), \"invalid connection throttle slot interval\", \"connection.throttleSlotInterval\", throttleSlotInterval);\n const errorPassThrough = ((typeof (connection) === \"object\") ? !!(connection.errorPassThrough) : false);\n const headers = {};\n let url = null;\n // @TODO: Allow ConnectionInfo to override some of these values\n const options = {\n method: \"GET\",\n };\n let allow304 = false;\n let timeout = 2 * 60 * 1000;\n if (typeof (connection) === \"string\") {\n url = connection;\n }\n else if (typeof (connection) === \"object\") {\n if (connection == null || connection.url == null) {\n logger.throwArgumentError(\"missing URL\", \"connection.url\", connection);\n }\n url = connection.url;\n if (typeof (connection.timeout) === \"number\" && connection.timeout > 0) {\n timeout = connection.timeout;\n }\n if (connection.headers) {\n for (const key in connection.headers) {\n headers[key.toLowerCase()] = { key: key, value: String(connection.headers[key]) };\n if ([\"if-none-match\", \"if-modified-since\"].indexOf(key.toLowerCase()) >= 0) {\n allow304 = true;\n }\n }\n }\n options.allowGzip = !!connection.allowGzip;\n if (connection.user != null && connection.password != null) {\n if (url.substring(0, 6) !== \"https:\" && connection.allowInsecureAuthentication !== true) {\n logger.throwError(\"basic authentication requires a secure https url\", Logger.errors.INVALID_ARGUMENT, { argument: \"url\", url: url, user: connection.user, password: \"[REDACTED]\" });\n }\n const authorization = connection.user + \":\" + connection.password;\n headers[\"authorization\"] = {\n key: \"Authorization\",\n value: \"Basic \" + base64Encode(toUtf8Bytes(authorization))\n };\n }\n if (connection.skipFetchSetup != null) {\n options.skipFetchSetup = !!connection.skipFetchSetup;\n }\n if (connection.fetchOptions != null) {\n options.fetchOptions = shallowCopy(connection.fetchOptions);\n }\n }\n const reData = new RegExp(\"^data:([^;:]*)?(;base64)?,(.*)$\", \"i\");\n const dataMatch = ((url) ? url.match(reData) : null);\n if (dataMatch) {\n try {\n const response = {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: { \"content-type\": (dataMatch[1] || \"text/plain\") },\n body: (dataMatch[2] ? base64Decode(dataMatch[3]) : unpercent(dataMatch[3]))\n };\n let result = response.body;\n if (processFunc) {\n result = processFunc(response.body, response);\n }\n return Promise.resolve(result);\n }\n catch (error) {\n logger.throwError(\"processing response error\", Logger.errors.SERVER_ERROR, {\n body: bodyify(dataMatch[1], dataMatch[2]),\n error: error,\n requestBody: null,\n requestMethod: \"GET\",\n url: url\n });\n }\n }\n if (body) {\n options.method = \"POST\";\n options.body = body;\n if (headers[\"content-type\"] == null) {\n headers[\"content-type\"] = { key: \"Content-Type\", value: \"application/octet-stream\" };\n }\n if (headers[\"content-length\"] == null) {\n headers[\"content-length\"] = { key: \"Content-Length\", value: String(body.length) };\n }\n }\n const flatHeaders = {};\n Object.keys(headers).forEach((key) => {\n const header = headers[key];\n flatHeaders[header.key] = header.value;\n });\n options.headers = flatHeaders;\n const runningTimeout = (function () {\n let timer = null;\n const promise = new Promise(function (resolve, reject) {\n if (timeout) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n reject(logger.makeError(\"timeout\", Logger.errors.TIMEOUT, {\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n timeout: timeout,\n url: url\n }));\n }, timeout);\n }\n });\n const cancel = function () {\n if (timer == null) {\n return;\n }\n clearTimeout(timer);\n timer = null;\n };\n return { promise, cancel };\n })();\n const runningFetch = (function () {\n return __awaiter(this, void 0, void 0, function* () {\n for (let attempt = 0; attempt < attemptLimit; attempt++) {\n let response = null;\n try {\n response = yield getUrl(url, options);\n if (attempt < attemptLimit) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Redirection; for now we only support absolute locataions\n const location = response.headers.location || \"\";\n if (options.method === \"GET\" && location.match(/^https:/)) {\n url = response.headers.location;\n continue;\n }\n }\n else if (response.statusCode === 429) {\n // Exponential back-off throttling\n let tryAgain = true;\n if (throttleCallback) {\n tryAgain = yield throttleCallback(attempt, url);\n }\n if (tryAgain) {\n let stall = 0;\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n stall = parseInt(retryAfter) * 1000;\n }\n else {\n stall = throttleSlotInterval * parseInt(String(Math.random() * Math.pow(2, attempt)));\n }\n //console.log(\"Stalling 429\");\n yield staller(stall);\n continue;\n }\n }\n }\n }\n catch (error) {\n response = error.response;\n if (response == null) {\n runningTimeout.cancel();\n logger.throwError(\"missing response\", Logger.errors.SERVER_ERROR, {\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n serverError: error,\n url: url\n });\n }\n }\n let body = response.body;\n if (allow304 && response.statusCode === 304) {\n body = null;\n }\n else if (!errorPassThrough && (response.statusCode < 200 || response.statusCode >= 300)) {\n runningTimeout.cancel();\n logger.throwError(\"bad response\", Logger.errors.SERVER_ERROR, {\n status: response.statusCode,\n headers: response.headers,\n body: bodyify(body, ((response.headers) ? response.headers[\"content-type\"] : null)),\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n url: url\n });\n }\n if (processFunc) {\n try {\n const result = yield processFunc(body, response);\n runningTimeout.cancel();\n return result;\n }\n catch (error) {\n // Allow the processFunc to trigger a throttle\n if (error.throttleRetry && attempt < attemptLimit) {\n let tryAgain = true;\n if (throttleCallback) {\n tryAgain = yield throttleCallback(attempt, url);\n }\n if (tryAgain) {\n const timeout = throttleSlotInterval * parseInt(String(Math.random() * Math.pow(2, attempt)));\n //console.log(\"Stalling callback\");\n yield staller(timeout);\n continue;\n }\n }\n runningTimeout.cancel();\n logger.throwError(\"processing response error\", Logger.errors.SERVER_ERROR, {\n body: bodyify(body, ((response.headers) ? response.headers[\"content-type\"] : null)),\n error: error,\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n url: url\n });\n }\n }\n runningTimeout.cancel();\n // If we had a processFunc, it either returned a T or threw above.\n // The \"body\" is now a Uint8Array.\n return body;\n }\n return logger.throwError(\"failed response\", Logger.errors.SERVER_ERROR, {\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n url: url\n });\n });\n })();\n return Promise.race([runningTimeout.promise, runningFetch]);\n}\nexport function fetchJson(connection, json, processFunc) {\n let processJsonFunc = (value, response) => {\n let result = null;\n if (value != null) {\n try {\n result = JSON.parse(toUtf8String(value));\n }\n catch (error) {\n logger.throwError(\"invalid JSON\", Logger.errors.SERVER_ERROR, {\n body: value,\n error: error\n });\n }\n }\n if (processFunc) {\n result = processFunc(result, response);\n }\n return result;\n };\n // If we have json to send, we must\n // - add content-type of application/json (unless already overridden)\n // - convert the json to bytes\n let body = null;\n if (json != null) {\n body = toUtf8Bytes(json);\n // Create a connection with the content-type set for JSON\n const updated = (typeof (connection) === \"string\") ? ({ url: connection }) : shallowCopy(connection);\n if (updated.headers) {\n const hasContentType = (Object.keys(updated.headers).filter((k) => (k.toLowerCase() === \"content-type\")).length) !== 0;\n if (!hasContentType) {\n updated.headers = shallowCopy(updated.headers);\n updated.headers[\"content-type\"] = \"application/json\";\n }\n }\n else {\n updated.headers = { \"content-type\": \"application/json\" };\n }\n connection = updated;\n }\n return _fetchData(connection, body, processJsonFunc);\n}\nexport function poll(func, options) {\n if (!options) {\n options = {};\n }\n options = shallowCopy(options);\n if (options.floor == null) {\n options.floor = 0;\n }\n if (options.ceiling == null) {\n options.ceiling = 10000;\n }\n if (options.interval == null) {\n options.interval = 250;\n }\n return new Promise(function (resolve, reject) {\n let timer = null;\n let done = false;\n // Returns true if cancel was successful. Unsuccessful cancel means we're already done.\n const cancel = () => {\n if (done) {\n return false;\n }\n done = true;\n if (timer) {\n clearTimeout(timer);\n }\n return true;\n };\n if (options.timeout) {\n timer = setTimeout(() => {\n if (cancel()) {\n reject(new Error(\"timeout\"));\n }\n }, options.timeout);\n }\n const retryLimit = options.retryLimit;\n let attempt = 0;\n function check() {\n return func().then(function (result) {\n // If we have a result, or are allowed null then we're done\n if (result !== undefined) {\n if (cancel()) {\n resolve(result);\n }\n }\n else if (options.oncePoll) {\n options.oncePoll.once(\"poll\", check);\n }\n else if (options.onceBlock) {\n options.onceBlock.once(\"block\", check);\n // Otherwise, exponential back-off (up to 10s) our next request\n }\n else if (!done) {\n attempt++;\n if (attempt > retryLimit) {\n if (cancel()) {\n reject(new Error(\"retry limit reached\"));\n }\n return;\n }\n let timeout = options.interval * parseInt(String(Math.random() * Math.pow(2, attempt)));\n if (timeout < options.floor) {\n timeout = options.floor;\n }\n if (timeout > options.ceiling) {\n timeout = options.ceiling;\n }\n setTimeout(check, timeout);\n }\n return null;\n }, function (error) {\n if (cancel()) {\n reject(error);\n }\n });\n }\n check();\n });\n}\n//# sourceMappingURL=index.js.map","'use strict'\nvar ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'\n\n// pre-compute lookup table\nvar ALPHABET_MAP = {}\nfor (var z = 0; z < ALPHABET.length; z++) {\n var x = ALPHABET.charAt(z)\n\n if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')\n ALPHABET_MAP[x] = z\n}\n\nfunction polymodStep (pre) {\n var b = pre >> 25\n return ((pre & 0x1FFFFFF) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3)\n}\n\nfunction prefixChk (prefix) {\n var chk = 1\n for (var i = 0; i < prefix.length; ++i) {\n var c = prefix.charCodeAt(i)\n if (c < 33 || c > 126) return 'Invalid prefix (' + prefix + ')'\n\n chk = polymodStep(chk) ^ (c >> 5)\n }\n chk = polymodStep(chk)\n\n for (i = 0; i < prefix.length; ++i) {\n var v = prefix.charCodeAt(i)\n chk = polymodStep(chk) ^ (v & 0x1f)\n }\n return chk\n}\n\nfunction encode (prefix, words, LIMIT) {\n LIMIT = LIMIT || 90\n if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit')\n\n prefix = prefix.toLowerCase()\n\n // determine chk mod\n var chk = prefixChk(prefix)\n if (typeof chk === 'string') throw new Error(chk)\n\n var result = prefix + '1'\n for (var i = 0; i < words.length; ++i) {\n var x = words[i]\n if ((x >> 5) !== 0) throw new Error('Non 5-bit word')\n\n chk = polymodStep(chk) ^ x\n result += ALPHABET.charAt(x)\n }\n\n for (i = 0; i < 6; ++i) {\n chk = polymodStep(chk)\n }\n chk ^= 1\n\n for (i = 0; i < 6; ++i) {\n var v = (chk >> ((5 - i) * 5)) & 0x1f\n result += ALPHABET.charAt(v)\n }\n\n return result\n}\n\nfunction __decode (str, LIMIT) {\n LIMIT = LIMIT || 90\n if (str.length < 8) return str + ' too short'\n if (str.length > LIMIT) return 'Exceeds length limit'\n\n // don't allow mixed case\n var lowered = str.toLowerCase()\n var uppered = str.toUpperCase()\n if (str !== lowered && str !== uppered) return 'Mixed-case string ' + str\n str = lowered\n\n var split = str.lastIndexOf('1')\n if (split === -1) return 'No separator character for ' + str\n if (split === 0) return 'Missing prefix for ' + str\n\n var prefix = str.slice(0, split)\n var wordChars = str.slice(split + 1)\n if (wordChars.length < 6) return 'Data too short'\n\n var chk = prefixChk(prefix)\n if (typeof chk === 'string') return chk\n\n var words = []\n for (var i = 0; i < wordChars.length; ++i) {\n var c = wordChars.charAt(i)\n var v = ALPHABET_MAP[c]\n if (v === undefined) return 'Unknown character ' + c\n chk = polymodStep(chk) ^ v\n\n // not in the checksum?\n if (i + 6 >= wordChars.length) continue\n words.push(v)\n }\n\n if (chk !== 1) return 'Invalid checksum for ' + str\n return { prefix: prefix, words: words }\n}\n\nfunction decodeUnsafe () {\n var res = __decode.apply(null, arguments)\n if (typeof res === 'object') return res\n}\n\nfunction decode (str) {\n var res = __decode.apply(null, arguments)\n if (typeof res === 'object') return res\n\n throw new Error(res)\n}\n\nfunction convert (data, inBits, outBits, pad) {\n var value = 0\n var bits = 0\n var maxV = (1 << outBits) - 1\n\n var result = []\n for (var i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i]\n bits += inBits\n\n while (bits >= outBits) {\n bits -= outBits\n result.push((value >> bits) & maxV)\n }\n }\n\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV)\n }\n } else {\n if (bits >= inBits) return 'Excess padding'\n if ((value << (outBits - bits)) & maxV) return 'Non-zero padding'\n }\n\n return result\n}\n\nfunction toWordsUnsafe (bytes) {\n var res = convert(bytes, 8, 5, true)\n if (Array.isArray(res)) return res\n}\n\nfunction toWords (bytes) {\n var res = convert(bytes, 8, 5, true)\n if (Array.isArray(res)) return res\n\n throw new Error(res)\n}\n\nfunction fromWordsUnsafe (words) {\n var res = convert(words, 5, 8, false)\n if (Array.isArray(res)) return res\n}\n\nfunction fromWords (words) {\n var res = convert(words, 5, 8, false)\n if (Array.isArray(res)) return res\n\n throw new Error(res)\n}\n\nmodule.exports = {\n decodeUnsafe: decodeUnsafe,\n decode: decode,\n encode: encode,\n toWordsUnsafe: toWordsUnsafe,\n toWords: toWords,\n fromWordsUnsafe: fromWordsUnsafe,\n fromWords: fromWords\n}\n","export const version = \"providers/5.7.2\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { getAddress, getContractAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { hexDataLength, hexDataSlice, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { AddressZero } from \"@ethersproject/constants\";\nimport { shallowCopy } from \"@ethersproject/properties\";\nimport { accessListify, parse as parseTransaction } from \"@ethersproject/transactions\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport class Formatter {\n constructor() {\n this.formats = this.getDefaultFormats();\n }\n getDefaultFormats() {\n const formats = ({});\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const hex = this.hex.bind(this);\n const number = this.number.bind(this);\n const type = this.type.bind(this);\n const strictData = (v) => { return this.data(v, true); };\n formats.transaction = {\n hash: hash,\n type: type,\n accessList: Formatter.allowNull(this.accessList.bind(this), null),\n blockHash: Formatter.allowNull(hash, null),\n blockNumber: Formatter.allowNull(number, null),\n transactionIndex: Formatter.allowNull(number, null),\n confirmations: Formatter.allowNull(number, null),\n from: address,\n // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas)\n // must be set\n gasPrice: Formatter.allowNull(bigNumber),\n maxPriorityFeePerGas: Formatter.allowNull(bigNumber),\n maxFeePerGas: Formatter.allowNull(bigNumber),\n gasLimit: bigNumber,\n to: Formatter.allowNull(address, null),\n value: bigNumber,\n nonce: number,\n data: data,\n r: Formatter.allowNull(this.uint256),\n s: Formatter.allowNull(this.uint256),\n v: Formatter.allowNull(number),\n creates: Formatter.allowNull(address, null),\n raw: Formatter.allowNull(data),\n };\n formats.transactionRequest = {\n from: Formatter.allowNull(address),\n nonce: Formatter.allowNull(number),\n gasLimit: Formatter.allowNull(bigNumber),\n gasPrice: Formatter.allowNull(bigNumber),\n maxPriorityFeePerGas: Formatter.allowNull(bigNumber),\n maxFeePerGas: Formatter.allowNull(bigNumber),\n to: Formatter.allowNull(address),\n value: Formatter.allowNull(bigNumber),\n data: Formatter.allowNull(strictData),\n type: Formatter.allowNull(number),\n accessList: Formatter.allowNull(this.accessList.bind(this), null),\n };\n formats.receiptLog = {\n transactionIndex: number,\n blockNumber: number,\n transactionHash: hash,\n address: address,\n topics: Formatter.arrayOf(hash),\n data: data,\n logIndex: number,\n blockHash: hash,\n };\n formats.receipt = {\n to: Formatter.allowNull(this.address, null),\n from: Formatter.allowNull(this.address, null),\n contractAddress: Formatter.allowNull(address, null),\n transactionIndex: number,\n // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n root: Formatter.allowNull(hex),\n gasUsed: bigNumber,\n logsBloom: Formatter.allowNull(data),\n blockHash: hash,\n transactionHash: hash,\n logs: Formatter.arrayOf(this.receiptLog.bind(this)),\n blockNumber: number,\n confirmations: Formatter.allowNull(number, null),\n cumulativeGasUsed: bigNumber,\n effectiveGasPrice: Formatter.allowNull(bigNumber),\n status: Formatter.allowNull(number),\n type: type\n };\n formats.block = {\n hash: Formatter.allowNull(hash),\n parentHash: hash,\n number: number,\n timestamp: number,\n nonce: Formatter.allowNull(hex),\n difficulty: this.difficulty.bind(this),\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: Formatter.allowNull(address),\n extraData: data,\n transactions: Formatter.allowNull(Formatter.arrayOf(hash)),\n baseFeePerGas: Formatter.allowNull(bigNumber)\n };\n formats.blockWithTransactions = shallowCopy(formats.block);\n formats.blockWithTransactions.transactions = Formatter.allowNull(Formatter.arrayOf(this.transactionResponse.bind(this)));\n formats.filter = {\n fromBlock: Formatter.allowNull(blockTag, undefined),\n toBlock: Formatter.allowNull(blockTag, undefined),\n blockHash: Formatter.allowNull(hash, undefined),\n address: Formatter.allowNull(address, undefined),\n topics: Formatter.allowNull(this.topics.bind(this), undefined),\n };\n formats.filterLog = {\n blockNumber: Formatter.allowNull(number),\n blockHash: Formatter.allowNull(hash),\n transactionIndex: number,\n removed: Formatter.allowNull(this.boolean.bind(this)),\n address: address,\n data: Formatter.allowFalsish(data, \"0x\"),\n topics: Formatter.arrayOf(hash),\n transactionHash: hash,\n logIndex: number,\n };\n return formats;\n }\n accessList(accessList) {\n return accessListify(accessList || []);\n }\n // Requires a BigNumberish that is within the IEEE754 safe integer range; returns a number\n // Strict! Used on input.\n number(number) {\n if (number === \"0x\") {\n return 0;\n }\n return BigNumber.from(number).toNumber();\n }\n type(number) {\n if (number === \"0x\" || number == null) {\n return 0;\n }\n return BigNumber.from(number).toNumber();\n }\n // Strict! Used on input.\n bigNumber(value) {\n return BigNumber.from(value);\n }\n // Requires a boolean, \"true\" or \"false\"; returns a boolean\n boolean(value) {\n if (typeof (value) === \"boolean\") {\n return value;\n }\n if (typeof (value) === \"string\") {\n value = value.toLowerCase();\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n }\n throw new Error(\"invalid boolean - \" + value);\n }\n hex(value, strict) {\n if (typeof (value) === \"string\") {\n if (!strict && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n if (isHexString(value)) {\n return value.toLowerCase();\n }\n }\n return logger.throwArgumentError(\"invalid hash\", \"value\", value);\n }\n data(value, strict) {\n const result = this.hex(value, strict);\n if ((result.length % 2) !== 0) {\n throw new Error(\"invalid data; odd-length - \" + value);\n }\n return result;\n }\n // Requires an address\n // Strict! Used on input.\n address(value) {\n return getAddress(value);\n }\n callAddress(value) {\n if (!isHexString(value, 32)) {\n return null;\n }\n const address = getAddress(hexDataSlice(value, 12));\n return (address === AddressZero) ? null : address;\n }\n contractAddress(value) {\n return getContractAddress(value);\n }\n // Strict! Used on input.\n blockTag(blockTag) {\n if (blockTag == null) {\n return \"latest\";\n }\n if (blockTag === \"earliest\") {\n return \"0x0\";\n }\n switch (blockTag) {\n case \"earliest\": return \"0x0\";\n case \"latest\":\n case \"pending\":\n case \"safe\":\n case \"finalized\":\n return blockTag;\n }\n if (typeof (blockTag) === \"number\" || isHexString(blockTag)) {\n return hexValue(blockTag);\n }\n throw new Error(\"invalid blockTag\");\n }\n // Requires a hash, optionally requires 0x prefix; returns prefixed lowercase hash.\n hash(value, strict) {\n const result = this.hex(value, strict);\n if (hexDataLength(result) !== 32) {\n return logger.throwArgumentError(\"invalid hash\", \"value\", value);\n }\n return result;\n }\n // Returns the difficulty as a number, or if too large (i.e. PoA network) null\n difficulty(value) {\n if (value == null) {\n return null;\n }\n const v = BigNumber.from(value);\n try {\n return v.toNumber();\n }\n catch (error) { }\n return null;\n }\n uint256(value) {\n if (!isHexString(value)) {\n throw new Error(\"invalid uint256\");\n }\n return hexZeroPad(value, 32);\n }\n _block(value, format) {\n if (value.author != null && value.miner == null) {\n value.miner = value.author;\n }\n // The difficulty may need to come from _difficulty in recursed blocks\n const difficulty = (value._difficulty != null) ? value._difficulty : value.difficulty;\n const result = Formatter.check(format, value);\n result._difficulty = ((difficulty == null) ? null : BigNumber.from(difficulty));\n return result;\n }\n block(value) {\n return this._block(value, this.formats.block);\n }\n blockWithTransactions(value) {\n return this._block(value, this.formats.blockWithTransactions);\n }\n // Strict! Used on input.\n transactionRequest(value) {\n return Formatter.check(this.formats.transactionRequest, value);\n }\n transactionResponse(transaction) {\n // Rename gas to gasLimit\n if (transaction.gas != null && transaction.gasLimit == null) {\n transaction.gasLimit = transaction.gas;\n }\n // Some clients (TestRPC) do strange things like return 0x0 for the\n // 0 address; correct this to be a real address\n if (transaction.to && BigNumber.from(transaction.to).isZero()) {\n transaction.to = \"0x0000000000000000000000000000000000000000\";\n }\n // Rename input to data\n if (transaction.input != null && transaction.data == null) {\n transaction.data = transaction.input;\n }\n // If to and creates are empty, populate the creates from the transaction\n if (transaction.to == null && transaction.creates == null) {\n transaction.creates = this.contractAddress(transaction);\n }\n if ((transaction.type === 1 || transaction.type === 2) && transaction.accessList == null) {\n transaction.accessList = [];\n }\n const result = Formatter.check(this.formats.transaction, transaction);\n if (transaction.chainId != null) {\n let chainId = transaction.chainId;\n if (isHexString(chainId)) {\n chainId = BigNumber.from(chainId).toNumber();\n }\n result.chainId = chainId;\n }\n else {\n let chainId = transaction.networkId;\n // geth-etc returns chainId\n if (chainId == null && result.v == null) {\n chainId = transaction.chainId;\n }\n if (isHexString(chainId)) {\n chainId = BigNumber.from(chainId).toNumber();\n }\n if (typeof (chainId) !== \"number\" && result.v != null) {\n chainId = (result.v - 35) / 2;\n if (chainId < 0) {\n chainId = 0;\n }\n chainId = parseInt(chainId);\n }\n if (typeof (chainId) !== \"number\") {\n chainId = 0;\n }\n result.chainId = chainId;\n }\n // 0x0000... should actually be null\n if (result.blockHash && result.blockHash.replace(/0/g, \"\") === \"x\") {\n result.blockHash = null;\n }\n return result;\n }\n transaction(value) {\n return parseTransaction(value);\n }\n receiptLog(value) {\n return Formatter.check(this.formats.receiptLog, value);\n }\n receipt(value) {\n const result = Formatter.check(this.formats.receipt, value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (result.root != null) {\n if (result.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = BigNumber.from(result.root).toNumber();\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (result.status != null && (result.status !== value)) {\n logger.throwArgumentError(\"alt-root-status/status mismatch\", \"value\", { root: result.root, status: result.status });\n }\n result.status = value;\n delete result.root;\n }\n else {\n logger.throwArgumentError(\"invalid alt-root-status\", \"value.root\", result.root);\n }\n }\n else if (result.root.length !== 66) {\n // Must be a valid bytes32\n logger.throwArgumentError(\"invalid root hash\", \"value.root\", result.root);\n }\n }\n if (result.status != null) {\n result.byzantium = true;\n }\n return result;\n }\n topics(value) {\n if (Array.isArray(value)) {\n return value.map((v) => this.topics(v));\n }\n else if (value != null) {\n return this.hash(value, true);\n }\n return null;\n }\n filter(value) {\n return Formatter.check(this.formats.filter, value);\n }\n filterLog(value) {\n return Formatter.check(this.formats.filterLog, value);\n }\n static check(format, object) {\n const result = {};\n for (const key in format) {\n try {\n const value = format[key](object[key]);\n if (value !== undefined) {\n result[key] = value;\n }\n }\n catch (error) {\n error.checkKey = key;\n error.checkValue = object[key];\n throw error;\n }\n }\n return result;\n }\n // if value is null-ish, nullValue is returned\n static allowNull(format, nullValue) {\n return (function (value) {\n if (value == null) {\n return nullValue;\n }\n return format(value);\n });\n }\n // If value is false-ish, replaceValue is returned\n static allowFalsish(format, replaceValue) {\n return (function (value) {\n if (!value) {\n return replaceValue;\n }\n return format(value);\n });\n }\n // Requires an Array satisfying check\n static arrayOf(format) {\n return (function (array) {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n const result = [];\n array.forEach(function (value) {\n result.push(format(value));\n });\n return result;\n });\n }\n}\nexport function isCommunityResourcable(value) {\n return (value && typeof (value.isCommunityResource) === \"function\");\n}\nexport function isCommunityResource(value) {\n return (isCommunityResourcable(value) && value.isCommunityResource());\n}\n// Show the throttle message only once\nlet throttleMessage = false;\nexport function showThrottleMessage() {\n if (throttleMessage) {\n return;\n }\n throttleMessage = true;\n console.log(\"========= NOTICE =========\");\n console.log(\"Request-Rate Exceeded (this message will not be repeated)\");\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=formatter.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ForkEvent, Provider } from \"@ethersproject/abstract-provider\";\nimport { encode as base64Encode } from \"@ethersproject/base64\";\nimport { Base58 } from \"@ethersproject/basex\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexConcat, hexDataLength, hexDataSlice, hexlify, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { getNetwork } from \"@ethersproject/networks\";\nimport { defineReadOnly, getStatic, resolveProperties } from \"@ethersproject/properties\";\nimport { sha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchJson, poll } from \"@ethersproject/web\";\nimport bech32 from \"bech32\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { Formatter } from \"./formatter\";\nconst MAX_CCIP_REDIRECTS = 10;\n//////////////////////////////\n// Event Serializeing\nfunction checkTopic(topic) {\n if (topic == null) {\n return \"null\";\n }\n if (hexDataLength(topic) !== 32) {\n logger.throwArgumentError(\"invalid topic\", \"topic\", topic);\n }\n return topic.toLowerCase();\n}\nfunction serializeTopics(topics) {\n // Remove trailing null AND-topics; they are redundant\n topics = topics.slice();\n while (topics.length > 0 && topics[topics.length - 1] == null) {\n topics.pop();\n }\n return topics.map((topic) => {\n if (Array.isArray(topic)) {\n // Only track unique OR-topics\n const unique = {};\n topic.forEach((topic) => {\n unique[checkTopic(topic)] = true;\n });\n // The order of OR-topics does not matter\n const sorted = Object.keys(unique);\n sorted.sort();\n return sorted.join(\"|\");\n }\n else {\n return checkTopic(topic);\n }\n }).join(\"&\");\n}\nfunction deserializeTopics(data) {\n if (data === \"\") {\n return [];\n }\n return data.split(/&/g).map((topic) => {\n if (topic === \"\") {\n return [];\n }\n const comps = topic.split(\"|\").map((topic) => {\n return ((topic === \"null\") ? null : topic);\n });\n return ((comps.length === 1) ? comps[0] : comps);\n });\n}\nfunction getEventTag(eventName) {\n if (typeof (eventName) === \"string\") {\n eventName = eventName.toLowerCase();\n if (hexDataLength(eventName) === 32) {\n return \"tx:\" + eventName;\n }\n if (eventName.indexOf(\":\") === -1) {\n return eventName;\n }\n }\n else if (Array.isArray(eventName)) {\n return \"filter:*:\" + serializeTopics(eventName);\n }\n else if (ForkEvent.isForkEvent(eventName)) {\n logger.warn(\"not implemented\");\n throw new Error(\"not implemented\");\n }\n else if (eventName && typeof (eventName) === \"object\") {\n return \"filter:\" + (eventName.address || \"*\") + \":\" + serializeTopics(eventName.topics || []);\n }\n throw new Error(\"invalid event - \" + eventName);\n}\n//////////////////////////////\n// Helper Object\nfunction getTime() {\n return (new Date()).getTime();\n}\nfunction stall(duration) {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\n//////////////////////////////\n// Provider Object\n/**\n * EventType\n * - \"block\"\n * - \"poll\"\n * - \"didPoll\"\n * - \"pending\"\n * - \"error\"\n * - \"network\"\n * - filter\n * - topics array\n * - transaction hash\n */\nconst PollableEvents = [\"block\", \"network\", \"pending\", \"poll\"];\nexport class Event {\n constructor(tag, listener, once) {\n defineReadOnly(this, \"tag\", tag);\n defineReadOnly(this, \"listener\", listener);\n defineReadOnly(this, \"once\", once);\n this._lastBlockNumber = -2;\n this._inflight = false;\n }\n get event() {\n switch (this.type) {\n case \"tx\":\n return this.hash;\n case \"filter\":\n return this.filter;\n }\n return this.tag;\n }\n get type() {\n return this.tag.split(\":\")[0];\n }\n get hash() {\n const comps = this.tag.split(\":\");\n if (comps[0] !== \"tx\") {\n return null;\n }\n return comps[1];\n }\n get filter() {\n const comps = this.tag.split(\":\");\n if (comps[0] !== \"filter\") {\n return null;\n }\n const address = comps[1];\n const topics = deserializeTopics(comps[2]);\n const filter = {};\n if (topics.length > 0) {\n filter.topics = topics;\n }\n if (address && address !== \"*\") {\n filter.address = address;\n }\n return filter;\n }\n pollable() {\n return (this.tag.indexOf(\":\") >= 0 || PollableEvents.indexOf(this.tag) >= 0);\n }\n}\n;\n// https://github.com/satoshilabs/slips/blob/master/slip-0044.md\nconst coinInfos = {\n \"0\": { symbol: \"btc\", p2pkh: 0x00, p2sh: 0x05, prefix: \"bc\" },\n \"2\": { symbol: \"ltc\", p2pkh: 0x30, p2sh: 0x32, prefix: \"ltc\" },\n \"3\": { symbol: \"doge\", p2pkh: 0x1e, p2sh: 0x16 },\n \"60\": { symbol: \"eth\", ilk: \"eth\" },\n \"61\": { symbol: \"etc\", ilk: \"eth\" },\n \"700\": { symbol: \"xdai\", ilk: \"eth\" },\n};\nfunction bytes32ify(value) {\n return hexZeroPad(BigNumber.from(value).toHexString(), 32);\n}\n// Compute the Base58Check encoded data (checksum is first 4 bytes of sha256d)\nfunction base58Encode(data) {\n return Base58.encode(concat([data, hexDataSlice(sha256(sha256(data)), 0, 4)]));\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nfunction _parseString(result, start) {\n try {\n return toUtf8String(_parseBytes(result, start));\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = BigNumber.from(hexDataSlice(result, start, start + 32)).toNumber();\n const length = BigNumber.from(hexDataSlice(result, offset, offset + 32)).toNumber();\n return hexDataSlice(result, offset + 32, offset + 32 + length);\n}\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\nfunction numPad(value) {\n const result = arrayify(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(null);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = arrayify(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return hexConcat(result);\n}\nexport class Resolver {\n // The resolvedAddress is only for creating a ReverseLookup resolver\n constructor(provider, address, name, resolvedAddress) {\n defineReadOnly(this, \"provider\", provider);\n defineReadOnly(this, \"name\", name);\n defineReadOnly(this, \"address\", provider.formatter.address(address));\n defineReadOnly(this, \"_resolvedAddress\", resolvedAddress);\n }\n supportsWildcard() {\n if (!this._supportsEip2544) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n this._supportsEip2544 = this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return BigNumber.from(result).eq(1);\n }).catch((error) => {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n this._supportsEip2544 = null;\n throw error;\n });\n }\n return this._supportsEip2544;\n }\n _fetch(selector, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const tx = {\n to: this.address,\n ccipReadEnabled: true,\n data: hexConcat([selector, namehash(this.name), (parameters || \"0x\")])\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let parseBytes = false;\n if (yield this.supportsWildcard()) {\n parseBytes = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = hexConcat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), tx.data])]);\n }\n try {\n let result = yield this.provider.call(tx);\n if ((arrayify(result).length % 32) === 4) {\n logger.throwError(\"resolver threw error\", Logger.errors.CALL_EXCEPTION, {\n transaction: tx, data: result\n });\n }\n if (parseBytes) {\n result = _parseBytes(result, 0);\n }\n return result;\n }\n catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return null;\n }\n throw error;\n }\n });\n }\n _fetchBytes(selector, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this._fetch(selector, parameters);\n if (result != null) {\n return _parseBytes(result, 0);\n }\n return null;\n });\n }\n _getAddress(coinType, hexBytes) {\n const coinInfo = coinInfos[String(coinType)];\n if (coinInfo == null) {\n logger.throwError(`unsupported coin type: ${coinType}`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `getAddress(${coinType})`\n });\n }\n if (coinInfo.ilk === \"eth\") {\n return this.provider.formatter.address(hexBytes);\n }\n const bytes = arrayify(hexBytes);\n // P2PKH: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG\n if (coinInfo.p2pkh != null) {\n const p2pkh = hexBytes.match(/^0x76a9([0-9a-f][0-9a-f])([0-9a-f]*)88ac$/);\n if (p2pkh) {\n const length = parseInt(p2pkh[1], 16);\n if (p2pkh[2].length === length * 2 && length >= 1 && length <= 75) {\n return base58Encode(concat([[coinInfo.p2pkh], (\"0x\" + p2pkh[2])]));\n }\n }\n }\n // P2SH: OP_HASH160 OP_EQUAL\n if (coinInfo.p2sh != null) {\n const p2sh = hexBytes.match(/^0xa9([0-9a-f][0-9a-f])([0-9a-f]*)87$/);\n if (p2sh) {\n const length = parseInt(p2sh[1], 16);\n if (p2sh[2].length === length * 2 && length >= 1 && length <= 75) {\n return base58Encode(concat([[coinInfo.p2sh], (\"0x\" + p2sh[2])]));\n }\n }\n }\n // Bech32\n if (coinInfo.prefix != null) {\n const length = bytes[1];\n // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#witness-program\n let version = bytes[0];\n if (version === 0x00) {\n if (length !== 20 && length !== 32) {\n version = -1;\n }\n }\n else {\n version = -1;\n }\n if (version >= 0 && bytes.length === 2 + length && length >= 1 && length <= 75) {\n const words = bech32.toWords(bytes.slice(2));\n words.unshift(version);\n return bech32.encode(coinInfo.prefix, words);\n }\n }\n return null;\n }\n getAddress(coinType) {\n return __awaiter(this, void 0, void 0, function* () {\n if (coinType == null) {\n coinType = 60;\n }\n // If Ethereum, use the standard `addr(bytes32)`\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = yield this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n return this.provider.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return null;\n }\n throw error;\n }\n }\n // keccak256(\"addr(bytes32,uint256\")\n const hexBytes = yield this._fetchBytes(\"0xf1cb7e06\", bytes32ify(coinType));\n // No address\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // Compute the address\n const address = this._getAddress(coinType, hexBytes);\n if (address == null) {\n logger.throwError(`invalid or unsupported coin data`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `getAddress(${coinType})`,\n coinType: coinType,\n data: hexBytes\n });\n }\n return address;\n });\n }\n getAvatar() {\n return __awaiter(this, void 0, void 0, function* () {\n const linkage = [{ type: \"name\", content: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = yield this.getText(\"avatar\");\n if (avatar == null) {\n return null;\n }\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n linkage.push({ type: \"url\", content: avatar });\n return { linkage, url: avatar };\n case \"data\":\n linkage.push({ type: \"data\", content: avatar });\n return { linkage, url: avatar };\n case \"ipfs\":\n linkage.push({ type: \"ipfs\", content: avatar });\n return { linkage, url: getIpfsLink(avatar) };\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, content: avatar });\n // The owner of this name\n const owner = (this._resolvedAddress || (yield this.getAddress()));\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n return null;\n }\n const addr = yield this.provider.formatter.address(comps[0]);\n const tokenId = hexZeroPad(BigNumber.from(comps[1]).toHexString(), 32);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = this.provider.formatter.callAddress(yield this.provider.call({\n to: addr, data: hexConcat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n return null;\n }\n linkage.push({ type: \"owner\", content: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = BigNumber.from(yield this.provider.call({\n to: addr, data: hexConcat([\"0x00fdd58e\", hexZeroPad(owner, 32), tokenId])\n }));\n if (balance.isZero()) {\n return null;\n }\n linkage.push({ type: \"balance\", content: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: this.provider.formatter.address(comps[0]),\n data: hexConcat([selector, tokenId])\n };\n let metadataUrl = _parseString(yield this.provider.call(tx), 0);\n if (metadataUrl == null) {\n return null;\n }\n linkage.push({ type: \"metadata-url-base\", content: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", tokenId.substring(2));\n linkage.push({ type: \"metadata-url-expanded\", content: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", content: metadataUrl });\n // Get the token metadata\n const metadata = yield fetchJson(metadataUrl);\n if (!metadata) {\n return null;\n }\n linkage.push({ type: \"metadata\", content: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n return null;\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n return null;\n }\n linkage.push({ type: \"url-ipfs\", content: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", content: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) { }\n return null;\n });\n }\n getContentHash() {\n return __awaiter(this, void 0, void 0, function* () {\n // keccak256(\"contenthash()\")\n const hexBytes = yield this._fetchBytes(\"0xbc1c58d1\");\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: DAG-PB)\n const ipfs = hexBytes.match(/^0xe3010170(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const length = parseInt(ipfs[3], 16);\n if (ipfs[4].length === length * 2) {\n return \"ipfs:/\\/\" + Base58.encode(\"0x\" + ipfs[1]);\n }\n }\n // IPNS (CID: 1, Type: libp2p-key)\n const ipns = hexBytes.match(/^0xe5010172(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipns) {\n const length = parseInt(ipns[3], 16);\n if (ipns[4].length === length * 2) {\n return \"ipns:/\\/\" + Base58.encode(\"0x\" + ipns[1]);\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm) {\n if (swarm[1].length === (32 * 2)) {\n return \"bzz:/\\/\" + swarm[1];\n }\n }\n const skynet = hexBytes.match(/^0x90b2c605([0-9a-f]*)$/);\n if (skynet) {\n if (skynet[1].length === (34 * 2)) {\n // URL Safe base64; https://datatracker.ietf.org/doc/html/rfc4648#section-5\n const urlSafe = { \"=\": \"\", \"+\": \"-\", \"/\": \"_\" };\n const hash = base64Encode(\"0x\" + skynet[1]).replace(/[=+\\/]/g, (a) => (urlSafe[a]));\n return \"sia:/\\/\" + hash;\n }\n }\n return logger.throwError(`invalid or unsupported content hash data`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"getContentHash()\",\n data: hexBytes\n });\n });\n }\n getText(key) {\n return __awaiter(this, void 0, void 0, function* () {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n keyBytes = concat([bytes32ify(64), bytes32ify(keyBytes.length), keyBytes]);\n // Pad to word-size (32 bytes)\n if ((keyBytes.length % 32) !== 0) {\n keyBytes = concat([keyBytes, hexZeroPad(\"0x\", 32 - (key.length % 32))]);\n }\n const hexBytes = yield this._fetchBytes(\"0x59d1d43c\", hexlify(keyBytes));\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n });\n }\n}\nlet defaultFormatter = null;\nlet nextPollId = 1;\nexport class BaseProvider extends Provider {\n /**\n * ready\n *\n * A Promise that resolves only once the provider is ready.\n *\n * Sub-classes that call the super with a network without a chainId\n * MUST set this. Standard named networks have a known chainId.\n *\n */\n constructor(network) {\n super();\n // Events being listened to\n this._events = [];\n this._emitted = { block: -2 };\n this.disableCcipRead = false;\n this.formatter = new.target.getFormatter();\n // If network is any, this Provider allows the underlying\n // network to change dynamically, and we auto-detect the\n // current network\n defineReadOnly(this, \"anyNetwork\", (network === \"any\"));\n if (this.anyNetwork) {\n network = this.detectNetwork();\n }\n if (network instanceof Promise) {\n this._networkPromise = network;\n // Squash any \"unhandled promise\" errors; that do not need to be handled\n network.catch((error) => { });\n // Trigger initial network setting (async)\n this._ready().catch((error) => { });\n }\n else {\n const knownNetwork = getStatic(new.target, \"getNetwork\")(network);\n if (knownNetwork) {\n defineReadOnly(this, \"_network\", knownNetwork);\n this.emit(\"network\", knownNetwork, null);\n }\n else {\n logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n }\n this._maxInternalBlockNumber = -1024;\n this._lastBlockNumber = -2;\n this._maxFilterBlockRange = 10;\n this._pollingInterval = 4000;\n this._fastQueryDate = 0;\n }\n _ready() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._network == null) {\n let network = null;\n if (this._networkPromise) {\n try {\n network = yield this._networkPromise;\n }\n catch (error) { }\n }\n // Try the Provider's network detection (this MUST throw if it cannot)\n if (network == null) {\n network = yield this.detectNetwork();\n }\n // This should never happen; every Provider sub-class should have\n // suggested a network by here (or have thrown).\n if (!network) {\n logger.throwError(\"no network detected\", Logger.errors.UNKNOWN_ERROR, {});\n }\n // Possible this call stacked so do not call defineReadOnly again\n if (this._network == null) {\n if (this.anyNetwork) {\n this._network = network;\n }\n else {\n defineReadOnly(this, \"_network\", network);\n }\n this.emit(\"network\", network, null);\n }\n }\n return this._network;\n });\n }\n // This will always return the most recently established network.\n // For \"any\", this can change (a \"network\" event is emitted before\n // any change is reflected); otherwise this cannot change\n get ready() {\n return poll(() => {\n return this._ready().then((network) => {\n return network;\n }, (error) => {\n // If the network isn't running yet, we will wait\n if (error.code === Logger.errors.NETWORK_ERROR && error.event === \"noNetwork\") {\n return undefined;\n }\n throw error;\n });\n });\n }\n // @TODO: Remove this and just create a singleton formatter\n static getFormatter() {\n if (defaultFormatter == null) {\n defaultFormatter = new Formatter();\n }\n return defaultFormatter;\n }\n // @TODO: Remove this and just use getNetwork\n static getNetwork(network) {\n return getNetwork((network == null) ? \"homestead\" : network);\n }\n ccipReadFetch(tx, calldata, urls) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.disableCcipRead || urls.length === 0) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n const json = (url.indexOf(\"{data}\") >= 0) ? null : JSON.stringify({ data, sender });\n const result = yield fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n value.status = response.statusCode;\n return value;\n });\n if (result.data) {\n return result.data;\n }\n const errorMessage = (result.message || \"unknown error\");\n // 4xx indicates the result is not present; stop\n if (result.status >= 400 && result.status < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, Logger.errors.SERVER_ERROR, { url, errorMessage });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, Logger.errors.SERVER_ERROR, {\n urls, errorMessages\n });\n });\n }\n // Fetches the blockNumber, but will reuse any result that is less\n // than maxAge old or has been requested since the last request\n _getInternalBlockNumber(maxAge) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._ready();\n // Allowing stale data up to maxAge old\n if (maxAge > 0) {\n // While there are pending internal block requests...\n while (this._internalBlockNumber) {\n // ...\"remember\" which fetch we started with\n const internalBlockNumber = this._internalBlockNumber;\n try {\n // Check the result is not too stale\n const result = yield internalBlockNumber;\n if ((getTime() - result.respTime) <= maxAge) {\n return result.blockNumber;\n }\n // Too old; fetch a new value\n break;\n }\n catch (error) {\n // The fetch rejected; if we are the first to get the\n // rejection, drop through so we replace it with a new\n // fetch; all others blocked will then get that fetch\n // which won't match the one they \"remembered\" and loop\n if (this._internalBlockNumber === internalBlockNumber) {\n break;\n }\n }\n }\n }\n const reqTime = getTime();\n const checkInternalBlockNumber = resolveProperties({\n blockNumber: this.perform(\"getBlockNumber\", {}),\n networkError: this.getNetwork().then((network) => (null), (error) => (error))\n }).then(({ blockNumber, networkError }) => {\n if (networkError) {\n // Unremember this bad internal block number\n if (this._internalBlockNumber === checkInternalBlockNumber) {\n this._internalBlockNumber = null;\n }\n throw networkError;\n }\n const respTime = getTime();\n blockNumber = BigNumber.from(blockNumber).toNumber();\n if (blockNumber < this._maxInternalBlockNumber) {\n blockNumber = this._maxInternalBlockNumber;\n }\n this._maxInternalBlockNumber = blockNumber;\n this._setFastBlockNumber(blockNumber); // @TODO: Still need this?\n return { blockNumber, reqTime, respTime };\n });\n this._internalBlockNumber = checkInternalBlockNumber;\n // Swallow unhandled exceptions; if needed they are handled else where\n checkInternalBlockNumber.catch((error) => {\n // Don't null the dead (rejected) fetch, if it has already been updated\n if (this._internalBlockNumber === checkInternalBlockNumber) {\n this._internalBlockNumber = null;\n }\n });\n return (yield checkInternalBlockNumber).blockNumber;\n });\n }\n poll() {\n return __awaiter(this, void 0, void 0, function* () {\n const pollId = nextPollId++;\n // Track all running promises, so we can trigger a post-poll once they are complete\n const runners = [];\n let blockNumber = null;\n try {\n blockNumber = yield this._getInternalBlockNumber(100 + this.pollingInterval / 2);\n }\n catch (error) {\n this.emit(\"error\", error);\n return;\n }\n this._setFastBlockNumber(blockNumber);\n // Emit a poll event after we have the latest (fast) block number\n this.emit(\"poll\", pollId, blockNumber);\n // If the block has not changed, meh.\n if (blockNumber === this._lastBlockNumber) {\n this.emit(\"didPoll\", pollId);\n return;\n }\n // First polling cycle, trigger a \"block\" events\n if (this._emitted.block === -2) {\n this._emitted.block = blockNumber - 1;\n }\n if (Math.abs((this._emitted.block) - blockNumber) > 1000) {\n logger.warn(`network block skew detected; skipping block events (emitted=${this._emitted.block} blockNumber${blockNumber})`);\n this.emit(\"error\", logger.makeError(\"network block skew detected\", Logger.errors.NETWORK_ERROR, {\n blockNumber: blockNumber,\n event: \"blockSkew\",\n previousBlockNumber: this._emitted.block\n }));\n this.emit(\"block\", blockNumber);\n }\n else {\n // Notify all listener for each block that has passed\n for (let i = this._emitted.block + 1; i <= blockNumber; i++) {\n this.emit(\"block\", i);\n }\n }\n // The emitted block was updated, check for obsolete events\n if (this._emitted.block !== blockNumber) {\n this._emitted.block = blockNumber;\n Object.keys(this._emitted).forEach((key) => {\n // The block event does not expire\n if (key === \"block\") {\n return;\n }\n // The block we were at when we emitted this event\n const eventBlockNumber = this._emitted[key];\n // We cannot garbage collect pending transactions or blocks here\n // They should be garbage collected by the Provider when setting\n // \"pending\" events\n if (eventBlockNumber === \"pending\") {\n return;\n }\n // Evict any transaction hashes or block hashes over 12 blocks\n // old, since they should not return null anyways\n if (blockNumber - eventBlockNumber > 12) {\n delete this._emitted[key];\n }\n });\n }\n // First polling cycle\n if (this._lastBlockNumber === -2) {\n this._lastBlockNumber = blockNumber - 1;\n }\n // Find all transaction hashes we are waiting on\n this._events.forEach((event) => {\n switch (event.type) {\n case \"tx\": {\n const hash = event.hash;\n let runner = this.getTransactionReceipt(hash).then((receipt) => {\n if (!receipt || receipt.blockNumber == null) {\n return null;\n }\n this._emitted[\"t:\" + hash] = receipt.blockNumber;\n this.emit(hash, receipt);\n return null;\n }).catch((error) => { this.emit(\"error\", error); });\n runners.push(runner);\n break;\n }\n case \"filter\": {\n // We only allow a single getLogs to be in-flight at a time\n if (!event._inflight) {\n event._inflight = true;\n // This is the first filter for this event, so we want to\n // restrict events to events that happened no earlier than now\n if (event._lastBlockNumber === -2) {\n event._lastBlockNumber = blockNumber - 1;\n }\n // Filter from the last *known* event; due to load-balancing\n // and some nodes returning updated block numbers before\n // indexing events, a logs result with 0 entries cannot be\n // trusted and we must retry a range which includes it again\n const filter = event.filter;\n filter.fromBlock = event._lastBlockNumber + 1;\n filter.toBlock = blockNumber;\n // Prevent fitler ranges from growing too wild, since it is quite\n // likely there just haven't been any events to move the lastBlockNumber.\n const minFromBlock = filter.toBlock - this._maxFilterBlockRange;\n if (minFromBlock > filter.fromBlock) {\n filter.fromBlock = minFromBlock;\n }\n if (filter.fromBlock < 0) {\n filter.fromBlock = 0;\n }\n const runner = this.getLogs(filter).then((logs) => {\n // Allow the next getLogs\n event._inflight = false;\n if (logs.length === 0) {\n return;\n }\n logs.forEach((log) => {\n // Only when we get an event for a given block number\n // can we trust the events are indexed\n if (log.blockNumber > event._lastBlockNumber) {\n event._lastBlockNumber = log.blockNumber;\n }\n // Make sure we stall requests to fetch blocks and txs\n this._emitted[\"b:\" + log.blockHash] = log.blockNumber;\n this._emitted[\"t:\" + log.transactionHash] = log.blockNumber;\n this.emit(filter, log);\n });\n }).catch((error) => {\n this.emit(\"error\", error);\n // Allow another getLogs (the range was not updated)\n event._inflight = false;\n });\n runners.push(runner);\n }\n break;\n }\n }\n });\n this._lastBlockNumber = blockNumber;\n // Once all events for this loop have been processed, emit \"didPoll\"\n Promise.all(runners).then(() => {\n this.emit(\"didPoll\", pollId);\n }).catch((error) => { this.emit(\"error\", error); });\n return;\n });\n }\n // Deprecated; do not use this\n resetEventsBlock(blockNumber) {\n this._lastBlockNumber = blockNumber - 1;\n if (this.polling) {\n this.poll();\n }\n }\n get network() {\n return this._network;\n }\n // This method should query the network if the underlying network\n // can change, such as when connected to a JSON-RPC backend\n detectNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n return logger.throwError(\"provider does not support network detection\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"provider.detectNetwork\"\n });\n });\n }\n getNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n const network = yield this._ready();\n // Make sure we are still connected to the same network; this is\n // only an external call for backends which can have the underlying\n // network change spontaneously\n const currentNetwork = yield this.detectNetwork();\n if (network.chainId !== currentNetwork.chainId) {\n // We are allowing network changes, things can get complex fast;\n // make sure you know what you are doing if you use \"any\"\n if (this.anyNetwork) {\n this._network = currentNetwork;\n // Reset all internal block number guards and caches\n this._lastBlockNumber = -2;\n this._fastBlockNumber = null;\n this._fastBlockNumberPromise = null;\n this._fastQueryDate = 0;\n this._emitted.block = -2;\n this._maxInternalBlockNumber = -1024;\n this._internalBlockNumber = null;\n // The \"network\" event MUST happen before this method resolves\n // so any events have a chance to unregister, so we stall an\n // additional event loop before returning from /this/ call\n this.emit(\"network\", currentNetwork, network);\n yield stall(0);\n return this._network;\n }\n const error = logger.makeError(\"underlying network changed\", Logger.errors.NETWORK_ERROR, {\n event: \"changed\",\n network: network,\n detectedNetwork: currentNetwork\n });\n this.emit(\"error\", error);\n throw error;\n }\n return network;\n });\n }\n get blockNumber() {\n this._getInternalBlockNumber(100 + this.pollingInterval / 2).then((blockNumber) => {\n this._setFastBlockNumber(blockNumber);\n }, (error) => { });\n return (this._fastBlockNumber != null) ? this._fastBlockNumber : -1;\n }\n get polling() {\n return (this._poller != null);\n }\n set polling(value) {\n if (value && !this._poller) {\n this._poller = setInterval(() => { this.poll(); }, this.pollingInterval);\n if (!this._bootstrapPoll) {\n this._bootstrapPoll = setTimeout(() => {\n this.poll();\n // We block additional polls until the polling interval\n // is done, to prevent overwhelming the poll function\n this._bootstrapPoll = setTimeout(() => {\n // If polling was disabled, something may require a poke\n // since starting the bootstrap poll and it was disabled\n if (!this._poller) {\n this.poll();\n }\n // Clear out the bootstrap so we can do another\n this._bootstrapPoll = null;\n }, this.pollingInterval);\n }, 0);\n }\n }\n else if (!value && this._poller) {\n clearInterval(this._poller);\n this._poller = null;\n }\n }\n get pollingInterval() {\n return this._pollingInterval;\n }\n set pollingInterval(value) {\n if (typeof (value) !== \"number\" || value <= 0 || parseInt(String(value)) != value) {\n throw new Error(\"invalid polling interval\");\n }\n this._pollingInterval = value;\n if (this._poller) {\n clearInterval(this._poller);\n this._poller = setInterval(() => { this.poll(); }, this._pollingInterval);\n }\n }\n _getFastBlockNumber() {\n const now = getTime();\n // Stale block number, request a newer value\n if ((now - this._fastQueryDate) > 2 * this._pollingInterval) {\n this._fastQueryDate = now;\n this._fastBlockNumberPromise = this.getBlockNumber().then((blockNumber) => {\n if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {\n this._fastBlockNumber = blockNumber;\n }\n return this._fastBlockNumber;\n });\n }\n return this._fastBlockNumberPromise;\n }\n _setFastBlockNumber(blockNumber) {\n // Older block, maybe a stale request\n if (this._fastBlockNumber != null && blockNumber < this._fastBlockNumber) {\n return;\n }\n // Update the time we updated the blocknumber\n this._fastQueryDate = getTime();\n // Newer block number, use it\n if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {\n this._fastBlockNumber = blockNumber;\n this._fastBlockNumberPromise = Promise.resolve(blockNumber);\n }\n }\n waitForTransaction(transactionHash, confirmations, timeout) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._waitForTransaction(transactionHash, (confirmations == null) ? 1 : confirmations, timeout || 0, null);\n });\n }\n _waitForTransaction(transactionHash, confirmations, timeout, replaceable) {\n return __awaiter(this, void 0, void 0, function* () {\n const receipt = yield this.getTransactionReceipt(transactionHash);\n // Receipt is already good\n if ((receipt ? receipt.confirmations : 0) >= confirmations) {\n return receipt;\n }\n // Poll until the receipt is good...\n return new Promise((resolve, reject) => {\n const cancelFuncs = [];\n let done = false;\n const alreadyDone = function () {\n if (done) {\n return true;\n }\n done = true;\n cancelFuncs.forEach((func) => { func(); });\n return false;\n };\n const minedHandler = (receipt) => {\n if (receipt.confirmations < confirmations) {\n return;\n }\n if (alreadyDone()) {\n return;\n }\n resolve(receipt);\n };\n this.on(transactionHash, minedHandler);\n cancelFuncs.push(() => { this.removeListener(transactionHash, minedHandler); });\n if (replaceable) {\n let lastBlockNumber = replaceable.startBlock;\n let scannedBlock = null;\n const replaceHandler = (blockNumber) => __awaiter(this, void 0, void 0, function* () {\n if (done) {\n return;\n }\n // Wait 1 second; this is only used in the case of a fault, so\n // we will trade off a little bit of latency for more consistent\n // results and fewer JSON-RPC calls\n yield stall(1000);\n this.getTransactionCount(replaceable.from).then((nonce) => __awaiter(this, void 0, void 0, function* () {\n if (done) {\n return;\n }\n if (nonce <= replaceable.nonce) {\n lastBlockNumber = blockNumber;\n }\n else {\n // First check if the transaction was mined\n {\n const mined = yield this.getTransaction(transactionHash);\n if (mined && mined.blockNumber != null) {\n return;\n }\n }\n // First time scanning. We start a little earlier for some\n // wiggle room here to handle the eventually consistent nature\n // of blockchain (e.g. the getTransactionCount was for a\n // different block)\n if (scannedBlock == null) {\n scannedBlock = lastBlockNumber - 3;\n if (scannedBlock < replaceable.startBlock) {\n scannedBlock = replaceable.startBlock;\n }\n }\n while (scannedBlock <= blockNumber) {\n if (done) {\n return;\n }\n const block = yield this.getBlockWithTransactions(scannedBlock);\n for (let ti = 0; ti < block.transactions.length; ti++) {\n const tx = block.transactions[ti];\n // Successfully mined!\n if (tx.hash === transactionHash) {\n return;\n }\n // Matches our transaction from and nonce; its a replacement\n if (tx.from === replaceable.from && tx.nonce === replaceable.nonce) {\n if (done) {\n return;\n }\n // Get the receipt of the replacement\n const receipt = yield this.waitForTransaction(tx.hash, confirmations);\n // Already resolved or rejected (prolly a timeout)\n if (alreadyDone()) {\n return;\n }\n // The reason we were replaced\n let reason = \"replaced\";\n if (tx.data === replaceable.data && tx.to === replaceable.to && tx.value.eq(replaceable.value)) {\n reason = \"repriced\";\n }\n else if (tx.data === \"0x\" && tx.from === tx.to && tx.value.isZero()) {\n reason = \"cancelled\";\n }\n // Explain why we were replaced\n reject(logger.makeError(\"transaction was replaced\", Logger.errors.TRANSACTION_REPLACED, {\n cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n reason,\n replacement: this._wrapTransaction(tx),\n hash: transactionHash,\n receipt\n }));\n return;\n }\n }\n scannedBlock++;\n }\n }\n if (done) {\n return;\n }\n this.once(\"block\", replaceHandler);\n }), (error) => {\n if (done) {\n return;\n }\n this.once(\"block\", replaceHandler);\n });\n });\n if (done) {\n return;\n }\n this.once(\"block\", replaceHandler);\n cancelFuncs.push(() => {\n this.removeListener(\"block\", replaceHandler);\n });\n }\n if (typeof (timeout) === \"number\" && timeout > 0) {\n const timer = setTimeout(() => {\n if (alreadyDone()) {\n return;\n }\n reject(logger.makeError(\"timeout exceeded\", Logger.errors.TIMEOUT, { timeout: timeout }));\n }, timeout);\n if (timer.unref) {\n timer.unref();\n }\n cancelFuncs.push(() => { clearTimeout(timer); });\n }\n });\n });\n }\n getBlockNumber() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._getInternalBlockNumber(0);\n });\n }\n getGasPrice() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const result = yield this.perform(\"getGasPrice\", {});\n try {\n return BigNumber.from(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getGasPrice\",\n result, error\n });\n }\n });\n }\n getBalance(addressOrName, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"getBalance\", params);\n try {\n return BigNumber.from(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getBalance\",\n params, result, error\n });\n }\n });\n }\n getTransactionCount(addressOrName, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"getTransactionCount\", params);\n try {\n return BigNumber.from(result).toNumber();\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getTransactionCount\",\n params, result, error\n });\n }\n });\n }\n getCode(addressOrName, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"getCode\", params);\n try {\n return hexlify(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getCode\",\n params, result, error\n });\n }\n });\n }\n getStorageAt(addressOrName, position, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag),\n position: Promise.resolve(position).then((p) => hexValue(p))\n });\n const result = yield this.perform(\"getStorageAt\", params);\n try {\n return hexlify(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getStorageAt\",\n params, result, error\n });\n }\n });\n }\n // This should be called by any subclass wrapping a TransactionResponse\n _wrapTransaction(tx, hash, startBlock) {\n if (hash != null && hexDataLength(hash) !== 32) {\n throw new Error(\"invalid response - sendTransaction\");\n }\n const result = tx;\n // Check the hash we expect is the same as the hash the server reported\n if (hash != null && tx.hash !== hash) {\n logger.throwError(\"Transaction hash mismatch from Provider.sendTransaction.\", Logger.errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash });\n }\n result.wait = (confirms, timeout) => __awaiter(this, void 0, void 0, function* () {\n if (confirms == null) {\n confirms = 1;\n }\n if (timeout == null) {\n timeout = 0;\n }\n // Get the details to detect replacement\n let replacement = undefined;\n if (confirms !== 0 && startBlock != null) {\n replacement = {\n data: tx.data,\n from: tx.from,\n nonce: tx.nonce,\n to: tx.to,\n value: tx.value,\n startBlock\n };\n }\n const receipt = yield this._waitForTransaction(tx.hash, confirms, timeout, replacement);\n if (receipt == null && confirms === 0) {\n return null;\n }\n // No longer pending, allow the polling loop to garbage collect this\n this._emitted[\"t:\" + tx.hash] = receipt.blockNumber;\n if (receipt.status === 0) {\n logger.throwError(\"transaction failed\", Logger.errors.CALL_EXCEPTION, {\n transactionHash: tx.hash,\n transaction: tx,\n receipt: receipt\n });\n }\n return receipt;\n });\n return result;\n }\n sendTransaction(signedTransaction) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const hexTx = yield Promise.resolve(signedTransaction).then(t => hexlify(t));\n const tx = this.formatter.transaction(signedTransaction);\n if (tx.confirmations == null) {\n tx.confirmations = 0;\n }\n const blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n try {\n const hash = yield this.perform(\"sendTransaction\", { signedTransaction: hexTx });\n return this._wrapTransaction(tx, hash, blockNumber);\n }\n catch (error) {\n error.transaction = tx;\n error.transactionHash = tx.hash;\n throw error;\n }\n });\n }\n _getTransactionRequest(transaction) {\n return __awaiter(this, void 0, void 0, function* () {\n const values = yield transaction;\n const tx = {};\n [\"from\", \"to\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? this._getAddress(v) : null));\n });\n [\"gasLimit\", \"gasPrice\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"value\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? BigNumber.from(v) : null));\n });\n [\"type\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => ((v != null) ? v : null));\n });\n if (values.accessList) {\n tx.accessList = this.formatter.accessList(values.accessList);\n }\n [\"data\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? hexlify(v) : null));\n });\n return this.formatter.transactionRequest(yield resolveProperties(tx));\n });\n }\n _getFilter(filter) {\n return __awaiter(this, void 0, void 0, function* () {\n filter = yield filter;\n const result = {};\n if (filter.address != null) {\n result.address = this._getAddress(filter.address);\n }\n [\"blockHash\", \"topics\"].forEach((key) => {\n if (filter[key] == null) {\n return;\n }\n result[key] = filter[key];\n });\n [\"fromBlock\", \"toBlock\"].forEach((key) => {\n if (filter[key] == null) {\n return;\n }\n result[key] = this._getBlockTag(filter[key]);\n });\n return this.formatter.filter(yield resolveProperties(result));\n });\n }\n _call(transaction, blockTag, attempt) {\n return __awaiter(this, void 0, void 0, function* () {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", Logger.errors.SERVER_ERROR, {\n redirects: attempt, transaction\n });\n }\n const txSender = transaction.to;\n const result = yield this.perform(\"call\", { transaction, blockTag });\n // CCIP Read request via OffchainLookup(address,string[],bytes,bytes4,bytes)\n if (attempt >= 0 && blockTag === \"latest\" && txSender != null && result.substring(0, 10) === \"0x556f1830\" && (hexDataLength(result) % 32 === 4)) {\n try {\n const data = hexDataSlice(result, 4);\n // Check the sender of the OffchainLookup matches the transaction\n const sender = hexDataSlice(data, 0, 32);\n if (!BigNumber.from(sender).eq(txSender)) {\n logger.throwError(\"CCIP Read sender did not match\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n // Read the URLs from the response\n const urls = [];\n const urlsOffset = BigNumber.from(hexDataSlice(data, 32, 64)).toNumber();\n const urlsLength = BigNumber.from(hexDataSlice(data, urlsOffset, urlsOffset + 32)).toNumber();\n const urlsData = hexDataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n logger.throwError(\"CCIP Read contained corrupt URL string\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n urls.push(url);\n }\n // Get the CCIP calldata to forward\n const calldata = _parseBytes(data, 64);\n // Get the callbackSelector (bytes4)\n if (!BigNumber.from(hexDataSlice(data, 100, 128)).isZero()) {\n logger.throwError(\"CCIP Read callback selector included junk\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n const callbackSelector = hexDataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n const extraData = _parseBytes(data, 128);\n const ccipResult = yield this.ccipReadFetch(transaction, calldata, urls);\n if (ccipResult == null) {\n logger.throwError(\"CCIP Read disabled or provided no URLs\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n const tx = {\n to: txSender,\n data: hexConcat([callbackSelector, encodeBytes([ccipResult, extraData])])\n };\n return this._call(tx, blockTag, attempt + 1);\n }\n catch (error) {\n if (error.code === Logger.errors.SERVER_ERROR) {\n throw error;\n }\n }\n }\n try {\n return hexlify(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"call\",\n params: { transaction, blockTag }, result, error\n });\n }\n });\n }\n call(transaction, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const resolved = yield resolveProperties({\n transaction: this._getTransactionRequest(transaction),\n blockTag: this._getBlockTag(blockTag),\n ccipReadEnabled: Promise.resolve(transaction.ccipReadEnabled)\n });\n return this._call(resolved.transaction, resolved.blockTag, resolved.ccipReadEnabled ? 0 : -1);\n });\n }\n estimateGas(transaction) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n transaction: this._getTransactionRequest(transaction)\n });\n const result = yield this.perform(\"estimateGas\", params);\n try {\n return BigNumber.from(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"estimateGas\",\n params, result, error\n });\n }\n });\n }\n _getAddress(addressOrName) {\n return __awaiter(this, void 0, void 0, function* () {\n addressOrName = yield addressOrName;\n if (typeof (addressOrName) !== \"string\") {\n logger.throwArgumentError(\"invalid address or ENS name\", \"name\", addressOrName);\n }\n const address = yield this.resolveName(addressOrName);\n if (address == null) {\n logger.throwError(\"ENS name not configured\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `resolveName(${JSON.stringify(addressOrName)})`\n });\n }\n return address;\n });\n }\n _getBlock(blockHashOrBlockTag, includeTransactions) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n blockHashOrBlockTag = yield blockHashOrBlockTag;\n // If blockTag is a number (not \"latest\", etc), this is the block number\n let blockNumber = -128;\n const params = {\n includeTransactions: !!includeTransactions\n };\n if (isHexString(blockHashOrBlockTag, 32)) {\n params.blockHash = blockHashOrBlockTag;\n }\n else {\n try {\n params.blockTag = yield this._getBlockTag(blockHashOrBlockTag);\n if (isHexString(params.blockTag)) {\n blockNumber = parseInt(params.blockTag.substring(2), 16);\n }\n }\n catch (error) {\n logger.throwArgumentError(\"invalid block hash or block tag\", \"blockHashOrBlockTag\", blockHashOrBlockTag);\n }\n }\n return poll(() => __awaiter(this, void 0, void 0, function* () {\n const block = yield this.perform(\"getBlock\", params);\n // Block was not found\n if (block == null) {\n // For blockhashes, if we didn't say it existed, that blockhash may\n // not exist. If we did see it though, perhaps from a log, we know\n // it exists, and this node is just not caught up yet.\n if (params.blockHash != null) {\n if (this._emitted[\"b:\" + params.blockHash] == null) {\n return null;\n }\n }\n // For block tags, if we are asking for a future block, we return null\n if (params.blockTag != null) {\n if (blockNumber > this._emitted.block) {\n return null;\n }\n }\n // Retry on the next block\n return undefined;\n }\n // Add transactions\n if (includeTransactions) {\n let blockNumber = null;\n for (let i = 0; i < block.transactions.length; i++) {\n const tx = block.transactions[i];\n if (tx.blockNumber == null) {\n tx.confirmations = 0;\n }\n else if (tx.confirmations == null) {\n if (blockNumber == null) {\n blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n }\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - tx.blockNumber) + 1;\n if (confirmations <= 0) {\n confirmations = 1;\n }\n tx.confirmations = confirmations;\n }\n }\n const blockWithTxs = this.formatter.blockWithTransactions(block);\n blockWithTxs.transactions = blockWithTxs.transactions.map((tx) => this._wrapTransaction(tx));\n return blockWithTxs;\n }\n return this.formatter.block(block);\n }), { oncePoll: this });\n });\n }\n getBlock(blockHashOrBlockTag) {\n return (this._getBlock(blockHashOrBlockTag, false));\n }\n getBlockWithTransactions(blockHashOrBlockTag) {\n return (this._getBlock(blockHashOrBlockTag, true));\n }\n getTransaction(transactionHash) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n transactionHash = yield transactionHash;\n const params = { transactionHash: this.formatter.hash(transactionHash, true) };\n return poll(() => __awaiter(this, void 0, void 0, function* () {\n const result = yield this.perform(\"getTransaction\", params);\n if (result == null) {\n if (this._emitted[\"t:\" + transactionHash] == null) {\n return null;\n }\n return undefined;\n }\n const tx = this.formatter.transactionResponse(result);\n if (tx.blockNumber == null) {\n tx.confirmations = 0;\n }\n else if (tx.confirmations == null) {\n const blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - tx.blockNumber) + 1;\n if (confirmations <= 0) {\n confirmations = 1;\n }\n tx.confirmations = confirmations;\n }\n return this._wrapTransaction(tx);\n }), { oncePoll: this });\n });\n }\n getTransactionReceipt(transactionHash) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n transactionHash = yield transactionHash;\n const params = { transactionHash: this.formatter.hash(transactionHash, true) };\n return poll(() => __awaiter(this, void 0, void 0, function* () {\n const result = yield this.perform(\"getTransactionReceipt\", params);\n if (result == null) {\n if (this._emitted[\"t:\" + transactionHash] == null) {\n return null;\n }\n return undefined;\n }\n // \"geth-etc\" returns receipts before they are ready\n if (result.blockHash == null) {\n return undefined;\n }\n const receipt = this.formatter.receipt(result);\n if (receipt.blockNumber == null) {\n receipt.confirmations = 0;\n }\n else if (receipt.confirmations == null) {\n const blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - receipt.blockNumber) + 1;\n if (confirmations <= 0) {\n confirmations = 1;\n }\n receipt.confirmations = confirmations;\n }\n return receipt;\n }), { oncePoll: this });\n });\n }\n getLogs(filter) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({ filter: this._getFilter(filter) });\n const logs = yield this.perform(\"getLogs\", params);\n logs.forEach((log) => {\n if (log.removed == null) {\n log.removed = false;\n }\n });\n return Formatter.arrayOf(this.formatter.filterLog.bind(this.formatter))(logs);\n });\n }\n getEtherPrice() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n return this.perform(\"getEtherPrice\", {});\n });\n }\n _getBlockTag(blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n blockTag = yield blockTag;\n if (typeof (blockTag) === \"number\" && blockTag < 0) {\n if (blockTag % 1) {\n logger.throwArgumentError(\"invalid BlockTag\", \"blockTag\", blockTag);\n }\n let blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return this.formatter.blockTag(blockNumber);\n }\n return this.formatter.blockTag(blockTag);\n });\n }\n getResolver(name) {\n return __awaiter(this, void 0, void 0, function* () {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcard resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = yield this._getResolver(currentName, \"getResolver\");\n // Found a resolver!\n if (addr != null) {\n const resolver = new Resolver(this, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(yield resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n });\n }\n _getResolver(name, operation) {\n return __awaiter(this, void 0, void 0, function* () {\n if (operation == null) {\n operation = \"ENS\";\n }\n const network = yield this.getNetwork();\n // No ENS...\n if (!network.ensAddress) {\n logger.throwError(\"network does not support ENS\", Logger.errors.UNSUPPORTED_OPERATION, { operation, network: network.name });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = yield this.call({\n to: network.ensAddress,\n data: (\"0x0178b8bf\" + namehash(name).substring(2))\n });\n return this.formatter.callAddress(addrData);\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32)\n }\n return null;\n });\n }\n resolveName(name) {\n return __awaiter(this, void 0, void 0, function* () {\n name = yield name;\n // If it is already an address, nothing to resolve\n try {\n return Promise.resolve(this.formatter.address(name));\n }\n catch (error) {\n // If is is a hexstring, the address is bad (See #694)\n if (isHexString(name)) {\n throw error;\n }\n }\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name\", \"name\", name);\n }\n // Get the addr from the resolver\n const resolver = yield this.getResolver(name);\n if (!resolver) {\n return null;\n }\n return yield resolver.getAddress();\n });\n }\n lookupAddress(address) {\n return __awaiter(this, void 0, void 0, function* () {\n address = yield address;\n address = this.formatter.address(address);\n const node = address.substring(2).toLowerCase() + \".addr.reverse\";\n const resolverAddr = yield this._getResolver(node, \"lookupAddress\");\n if (resolverAddr == null) {\n return null;\n }\n // keccak(\"name(bytes32)\")\n const name = _parseString(yield this.call({\n to: resolverAddr,\n data: (\"0x691f3431\" + namehash(node).substring(2))\n }), 0);\n const addr = yield this.resolveName(name);\n if (addr != address) {\n return null;\n }\n return name;\n });\n }\n getAvatar(nameOrAddress) {\n return __awaiter(this, void 0, void 0, function* () {\n let resolver = null;\n if (isHexString(nameOrAddress)) {\n // Address; reverse lookup\n const address = this.formatter.address(nameOrAddress);\n const node = address.substring(2).toLowerCase() + \".addr.reverse\";\n const resolverAddress = yield this._getResolver(node, \"getAvatar\");\n if (!resolverAddress) {\n return null;\n }\n // Try resolving the avatar against the addr.reverse resolver\n resolver = new Resolver(this, resolverAddress, node);\n try {\n const avatar = yield resolver.getAvatar();\n if (avatar) {\n return avatar.url;\n }\n }\n catch (error) {\n if (error.code !== Logger.errors.CALL_EXCEPTION) {\n throw error;\n }\n }\n // Try getting the name and performing forward lookup; allowing wildcards\n try {\n // keccak(\"name(bytes32)\")\n const name = _parseString(yield this.call({\n to: resolverAddress,\n data: (\"0x691f3431\" + namehash(node).substring(2))\n }), 0);\n resolver = yield this.getResolver(name);\n }\n catch (error) {\n if (error.code !== Logger.errors.CALL_EXCEPTION) {\n throw error;\n }\n return null;\n }\n }\n else {\n // ENS name; forward lookup with wildcard\n resolver = yield this.getResolver(nameOrAddress);\n if (!resolver) {\n return null;\n }\n }\n const avatar = yield resolver.getAvatar();\n if (avatar == null) {\n return null;\n }\n return avatar.url;\n });\n }\n perform(method, params) {\n return logger.throwError(method + \" not implemented\", Logger.errors.NOT_IMPLEMENTED, { operation: method });\n }\n _startEvent(event) {\n this.polling = (this._events.filter((e) => e.pollable()).length > 0);\n }\n _stopEvent(event) {\n this.polling = (this._events.filter((e) => e.pollable()).length > 0);\n }\n _addEventListener(eventName, listener, once) {\n const event = new Event(getEventTag(eventName), listener, once);\n this._events.push(event);\n this._startEvent(event);\n return this;\n }\n on(eventName, listener) {\n return this._addEventListener(eventName, listener, false);\n }\n once(eventName, listener) {\n return this._addEventListener(eventName, listener, true);\n }\n emit(eventName, ...args) {\n let result = false;\n let stopped = [];\n let eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag) {\n return true;\n }\n setTimeout(() => {\n event.listener.apply(this, args);\n }, 0);\n result = true;\n if (event.once) {\n stopped.push(event);\n return false;\n }\n return true;\n });\n stopped.forEach((event) => { this._stopEvent(event); });\n return result;\n }\n listenerCount(eventName) {\n if (!eventName) {\n return this._events.length;\n }\n let eventTag = getEventTag(eventName);\n return this._events.filter((event) => {\n return (event.tag === eventTag);\n }).length;\n }\n listeners(eventName) {\n if (eventName == null) {\n return this._events.map((event) => event.listener);\n }\n let eventTag = getEventTag(eventName);\n return this._events\n .filter((event) => (event.tag === eventTag))\n .map((event) => event.listener);\n }\n off(eventName, listener) {\n if (listener == null) {\n return this.removeAllListeners(eventName);\n }\n const stopped = [];\n let found = false;\n let eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag || event.listener != listener) {\n return true;\n }\n if (found) {\n return true;\n }\n found = true;\n stopped.push(event);\n return false;\n });\n stopped.forEach((event) => { this._stopEvent(event); });\n return this;\n }\n removeAllListeners(eventName) {\n let stopped = [];\n if (eventName == null) {\n stopped = this._events;\n this._events = [];\n }\n else {\n const eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag) {\n return true;\n }\n stopped.push(event);\n return false;\n });\n }\n stopped.forEach((event) => { this._stopEvent(event); });\n return this;\n }\n}\n//# sourceMappingURL=base-provider.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Signer } from \"@ethersproject/abstract-signer\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { hexlify, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport { checkProperties, deepCopy, defineReadOnly, getStatic, resolveProperties, shallowCopy } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchJson, poll } from \"@ethersproject/web\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { BaseProvider } from \"./base-provider\";\nconst errorGas = [\"call\", \"estimateGas\"];\nfunction spelunk(value, requireData) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\")) {\n const data = isHexString(value.data) ? value.data : null;\n if (!requireData || data) {\n return { message: value.message, data };\n }\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunk(value[key], requireData);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunk(JSON.parse(value), requireData);\n }\n catch (error) { }\n }\n return null;\n}\nfunction checkError(method, error, params) {\n const transaction = params.transaction || params.signedTransaction;\n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\") {\n const result = spelunk(error, true);\n if (result) {\n return result.data;\n }\n // Nothing descriptive..\n logger.throwError(\"missing revert data in call exception; Transaction reverted without a reason string\", Logger.errors.CALL_EXCEPTION, {\n data: \"0x\", transaction, error\n });\n }\n if (method === \"estimateGas\") {\n // Try to find something, with a preference on SERVER_ERROR body\n let result = spelunk(error.body, false);\n if (result == null) {\n result = spelunk(error, false);\n }\n // Found \"reverted\", this is a CALL_EXCEPTION\n if (result) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n reason: result.message, method, transaction, error\n });\n }\n }\n // @TODO: Should we spelunk for message too?\n let message = error.message;\n if (error.code === Logger.errors.SERVER_ERROR && error.error && typeof (error.error.message) === \"string\") {\n message = error.error.message;\n }\n else if (typeof (error.body) === \"string\") {\n message = error.body;\n }\n else if (typeof (error.responseText) === \"string\") {\n message = error.responseText;\n }\n message = (message || \"\").toLowerCase();\n // \"insufficient funds for gas * price + value + cost(data)\"\n if (message.match(/insufficient funds|base fee exceeds gas limit|InsufficientFunds/i)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.errors.INSUFFICIENT_FUNDS, {\n error, method, transaction\n });\n }\n // \"nonce too low\"\n if (message.match(/nonce (is )?too low/i)) {\n logger.throwError(\"nonce has already been used\", Logger.errors.NONCE_EXPIRED, {\n error, method, transaction\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction underpriced|transaction gas price.*too low/i)) {\n logger.throwError(\"replacement fee too low\", Logger.errors.REPLACEMENT_UNDERPRICED, {\n error, method, transaction\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/only replay-protected/i)) {\n logger.throwError(\"legacy pre-eip-155 transactions not supported\", Logger.errors.UNSUPPORTED_OPERATION, {\n error, method, transaction\n });\n }\n if (errorGas.indexOf(method) >= 0 && message.match(/gas required exceeds allowance|always failing transaction|execution reverted|revert/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n error, method, transaction\n });\n }\n throw error;\n}\nfunction timer(timeout) {\n return new Promise(function (resolve) {\n setTimeout(resolve, timeout);\n });\n}\nfunction getResult(payload) {\n if (payload.error) {\n // @TODO: not any\n const error = new Error(payload.error.message);\n error.code = payload.error.code;\n error.data = payload.error.data;\n throw error;\n }\n return payload.result;\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nconst _constructorGuard = {};\nexport class JsonRpcSigner extends Signer {\n constructor(constructorGuard, provider, addressOrIndex) {\n super();\n if (constructorGuard !== _constructorGuard) {\n throw new Error(\"do not call the JsonRpcSigner constructor directly; use provider.getSigner\");\n }\n defineReadOnly(this, \"provider\", provider);\n if (addressOrIndex == null) {\n addressOrIndex = 0;\n }\n if (typeof (addressOrIndex) === \"string\") {\n defineReadOnly(this, \"_address\", this.provider.formatter.address(addressOrIndex));\n defineReadOnly(this, \"_index\", null);\n }\n else if (typeof (addressOrIndex) === \"number\") {\n defineReadOnly(this, \"_index\", addressOrIndex);\n defineReadOnly(this, \"_address\", null);\n }\n else {\n logger.throwArgumentError(\"invalid address or index\", \"addressOrIndex\", addressOrIndex);\n }\n }\n connect(provider) {\n return logger.throwError(\"cannot alter JSON-RPC Signer connection\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"connect\"\n });\n }\n connectUnchecked() {\n return new UncheckedJsonRpcSigner(_constructorGuard, this.provider, this._address || this._index);\n }\n getAddress() {\n if (this._address) {\n return Promise.resolve(this._address);\n }\n return this.provider.send(\"eth_accounts\", []).then((accounts) => {\n if (accounts.length <= this._index) {\n logger.throwError(\"unknown account #\" + this._index, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"getAddress\"\n });\n }\n return this.provider.formatter.address(accounts[this._index]);\n });\n }\n sendUncheckedTransaction(transaction) {\n transaction = shallowCopy(transaction);\n const fromAddress = this.getAddress().then((address) => {\n if (address) {\n address = address.toLowerCase();\n }\n return address;\n });\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (transaction.gasLimit == null) {\n const estimate = shallowCopy(transaction);\n estimate.from = fromAddress;\n transaction.gasLimit = this.provider.estimateGas(estimate);\n }\n if (transaction.to != null) {\n transaction.to = Promise.resolve(transaction.to).then((to) => __awaiter(this, void 0, void 0, function* () {\n if (to == null) {\n return null;\n }\n const address = yield this.provider.resolveName(to);\n if (address == null) {\n logger.throwArgumentError(\"provided ENS name resolves to null\", \"tx.to\", to);\n }\n return address;\n }));\n }\n return resolveProperties({\n tx: resolveProperties(transaction),\n sender: fromAddress\n }).then(({ tx, sender }) => {\n if (tx.from != null) {\n if (tx.from.toLowerCase() !== sender) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", transaction);\n }\n }\n else {\n tx.from = sender;\n }\n const hexTx = this.provider.constructor.hexlifyTransaction(tx, { from: true });\n return this.provider.send(\"eth_sendTransaction\", [hexTx]).then((hash) => {\n return hash;\n }, (error) => {\n if (typeof (error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected transaction\", Logger.errors.ACTION_REJECTED, {\n action: \"sendTransaction\",\n transaction: tx\n });\n }\n return checkError(\"sendTransaction\", error, hexTx);\n });\n });\n }\n signTransaction(transaction) {\n return logger.throwError(\"signing transactions is unsupported\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"signTransaction\"\n });\n }\n sendTransaction(transaction) {\n return __awaiter(this, void 0, void 0, function* () {\n // This cannot be mined any earlier than any recent block\n const blockNumber = yield this.provider._getInternalBlockNumber(100 + 2 * this.provider.pollingInterval);\n // Send the transaction\n const hash = yield this.sendUncheckedTransaction(transaction);\n try {\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return yield poll(() => __awaiter(this, void 0, void 0, function* () {\n const tx = yield this.provider.getTransaction(hash);\n if (tx === null) {\n return undefined;\n }\n return this.provider._wrapTransaction(tx, hash, blockNumber);\n }), { oncePoll: this.provider });\n }\n catch (error) {\n error.transactionHash = hash;\n throw error;\n }\n });\n }\n signMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = ((typeof (message) === \"string\") ? toUtf8Bytes(message) : message);\n const address = yield this.getAddress();\n try {\n return yield this.provider.send(\"personal_sign\", [hexlify(data), address.toLowerCase()]);\n }\n catch (error) {\n if (typeof (error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected signing\", Logger.errors.ACTION_REJECTED, {\n action: \"signMessage\",\n from: address,\n messageData: message\n });\n }\n throw error;\n }\n });\n }\n _legacySignMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = ((typeof (message) === \"string\") ? toUtf8Bytes(message) : message);\n const address = yield this.getAddress();\n try {\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n return yield this.provider.send(\"eth_sign\", [address.toLowerCase(), hexlify(data)]);\n }\n catch (error) {\n if (typeof (error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected signing\", Logger.errors.ACTION_REJECTED, {\n action: \"_legacySignMessage\",\n from: address,\n messageData: message\n });\n }\n throw error;\n }\n });\n }\n _signTypedData(domain, types, value) {\n return __awaiter(this, void 0, void 0, function* () {\n // Populate any ENS names (in-place)\n const populated = yield _TypedDataEncoder.resolveNames(domain, types, value, (name) => {\n return this.provider.resolveName(name);\n });\n const address = yield this.getAddress();\n try {\n return yield this.provider.send(\"eth_signTypedData_v4\", [\n address.toLowerCase(),\n JSON.stringify(_TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n catch (error) {\n if (typeof (error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected signing\", Logger.errors.ACTION_REJECTED, {\n action: \"_signTypedData\",\n from: address,\n messageData: { domain: populated.domain, types, value: populated.value }\n });\n }\n throw error;\n }\n });\n }\n unlock(password) {\n return __awaiter(this, void 0, void 0, function* () {\n const provider = this.provider;\n const address = yield this.getAddress();\n return provider.send(\"personal_unlockAccount\", [address.toLowerCase(), password, null]);\n });\n }\n}\nclass UncheckedJsonRpcSigner extends JsonRpcSigner {\n sendTransaction(transaction) {\n return this.sendUncheckedTransaction(transaction).then((hash) => {\n return {\n hash: hash,\n nonce: null,\n gasLimit: null,\n gasPrice: null,\n data: null,\n value: null,\n chainId: null,\n confirmations: 0,\n from: null,\n wait: (confirmations) => { return this.provider.waitForTransaction(hash, confirmations); }\n };\n });\n }\n}\nconst allowedTransactionKeys = {\n chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true,\n type: true, accessList: true,\n maxFeePerGas: true, maxPriorityFeePerGas: true\n};\nexport class JsonRpcProvider extends BaseProvider {\n constructor(url, network) {\n let networkOrReady = network;\n // The network is unknown, query the JSON-RPC for it\n if (networkOrReady == null) {\n networkOrReady = new Promise((resolve, reject) => {\n setTimeout(() => {\n this.detectNetwork().then((network) => {\n resolve(network);\n }, (error) => {\n reject(error);\n });\n }, 0);\n });\n }\n super(networkOrReady);\n // Default URL\n if (!url) {\n url = getStatic(this.constructor, \"defaultUrl\")();\n }\n if (typeof (url) === \"string\") {\n defineReadOnly(this, \"connection\", Object.freeze({\n url: url\n }));\n }\n else {\n defineReadOnly(this, \"connection\", Object.freeze(shallowCopy(url)));\n }\n this._nextId = 42;\n }\n get _cache() {\n if (this._eventLoopCache == null) {\n this._eventLoopCache = {};\n }\n return this._eventLoopCache;\n }\n static defaultUrl() {\n return \"http:/\\/localhost:8545\";\n }\n detectNetwork() {\n if (!this._cache[\"detectNetwork\"]) {\n this._cache[\"detectNetwork\"] = this._uncachedDetectNetwork();\n // Clear this cache at the beginning of the next event loop\n setTimeout(() => {\n this._cache[\"detectNetwork\"] = null;\n }, 0);\n }\n return this._cache[\"detectNetwork\"];\n }\n _uncachedDetectNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n yield timer(0);\n let chainId = null;\n try {\n chainId = yield this.send(\"eth_chainId\", []);\n }\n catch (error) {\n try {\n chainId = yield this.send(\"net_version\", []);\n }\n catch (error) { }\n }\n if (chainId != null) {\n const getNetwork = getStatic(this.constructor, \"getNetwork\");\n try {\n return getNetwork(BigNumber.from(chainId).toNumber());\n }\n catch (error) {\n return logger.throwError(\"could not detect network\", Logger.errors.NETWORK_ERROR, {\n chainId: chainId,\n event: \"invalidNetwork\",\n serverError: error\n });\n }\n }\n return logger.throwError(\"could not detect network\", Logger.errors.NETWORK_ERROR, {\n event: \"noNetwork\"\n });\n });\n }\n getSigner(addressOrIndex) {\n return new JsonRpcSigner(_constructorGuard, this, addressOrIndex);\n }\n getUncheckedSigner(addressOrIndex) {\n return this.getSigner(addressOrIndex).connectUnchecked();\n }\n listAccounts() {\n return this.send(\"eth_accounts\", []).then((accounts) => {\n return accounts.map((a) => this.formatter.address(a));\n });\n }\n send(method, params) {\n const request = {\n method: method,\n params: params,\n id: (this._nextId++),\n jsonrpc: \"2.0\"\n };\n this.emit(\"debug\", {\n action: \"request\",\n request: deepCopy(request),\n provider: this\n });\n // We can expand this in the future to any call, but for now these\n // are the biggest wins and do not require any serializing parameters.\n const cache = ([\"eth_chainId\", \"eth_blockNumber\"].indexOf(method) >= 0);\n if (cache && this._cache[method]) {\n return this._cache[method];\n }\n const result = fetchJson(this.connection, JSON.stringify(request), getResult).then((result) => {\n this.emit(\"debug\", {\n action: \"response\",\n request: request,\n response: result,\n provider: this\n });\n return result;\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: request,\n provider: this\n });\n throw error;\n });\n // Cache the fetch, but clear it on the next event loop\n if (cache) {\n this._cache[method] = result;\n setTimeout(() => {\n this._cache[method] = null;\n }, 0);\n }\n return result;\n }\n prepareRequest(method, params) {\n switch (method) {\n case \"getBlockNumber\":\n return [\"eth_blockNumber\", []];\n case \"getGasPrice\":\n return [\"eth_gasPrice\", []];\n case \"getBalance\":\n return [\"eth_getBalance\", [getLowerCase(params.address), params.blockTag]];\n case \"getTransactionCount\":\n return [\"eth_getTransactionCount\", [getLowerCase(params.address), params.blockTag]];\n case \"getCode\":\n return [\"eth_getCode\", [getLowerCase(params.address), params.blockTag]];\n case \"getStorageAt\":\n return [\"eth_getStorageAt\", [getLowerCase(params.address), hexZeroPad(params.position, 32), params.blockTag]];\n case \"sendTransaction\":\n return [\"eth_sendRawTransaction\", [params.signedTransaction]];\n case \"getBlock\":\n if (params.blockTag) {\n return [\"eth_getBlockByNumber\", [params.blockTag, !!params.includeTransactions]];\n }\n else if (params.blockHash) {\n return [\"eth_getBlockByHash\", [params.blockHash, !!params.includeTransactions]];\n }\n return null;\n case \"getTransaction\":\n return [\"eth_getTransactionByHash\", [params.transactionHash]];\n case \"getTransactionReceipt\":\n return [\"eth_getTransactionReceipt\", [params.transactionHash]];\n case \"call\": {\n const hexlifyTransaction = getStatic(this.constructor, \"hexlifyTransaction\");\n return [\"eth_call\", [hexlifyTransaction(params.transaction, { from: true }), params.blockTag]];\n }\n case \"estimateGas\": {\n const hexlifyTransaction = getStatic(this.constructor, \"hexlifyTransaction\");\n return [\"eth_estimateGas\", [hexlifyTransaction(params.transaction, { from: true })]];\n }\n case \"getLogs\":\n if (params.filter && params.filter.address != null) {\n params.filter.address = getLowerCase(params.filter.address);\n }\n return [\"eth_getLogs\", [params.filter]];\n default:\n break;\n }\n return null;\n }\n perform(method, params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (method === \"call\" || method === \"estimateGas\") {\n const tx = params.transaction;\n if (tx && tx.type != null && BigNumber.from(tx.type).isZero()) {\n // If there are no EIP-1559 properties, it might be non-EIP-1559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = yield this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n params = shallowCopy(params);\n params.transaction = shallowCopy(tx);\n delete params.transaction.type;\n }\n }\n }\n }\n const args = this.prepareRequest(method, params);\n if (args == null) {\n logger.throwError(method + \" not implemented\", Logger.errors.NOT_IMPLEMENTED, { operation: method });\n }\n try {\n return yield this.send(args[0], args[1]);\n }\n catch (error) {\n return checkError(method, error, params);\n }\n });\n }\n _startEvent(event) {\n if (event.tag === \"pending\") {\n this._startPending();\n }\n super._startEvent(event);\n }\n _startPending() {\n if (this._pendingFilter != null) {\n return;\n }\n const self = this;\n const pendingFilter = this.send(\"eth_newPendingTransactionFilter\", []);\n this._pendingFilter = pendingFilter;\n pendingFilter.then(function (filterId) {\n function poll() {\n self.send(\"eth_getFilterChanges\", [filterId]).then(function (hashes) {\n if (self._pendingFilter != pendingFilter) {\n return null;\n }\n let seq = Promise.resolve();\n hashes.forEach(function (hash) {\n // @TODO: This should be garbage collected at some point... How? When?\n self._emitted[\"t:\" + hash.toLowerCase()] = \"pending\";\n seq = seq.then(function () {\n return self.getTransaction(hash).then(function (tx) {\n self.emit(\"pending\", tx);\n return null;\n });\n });\n });\n return seq.then(function () {\n return timer(1000);\n });\n }).then(function () {\n if (self._pendingFilter != pendingFilter) {\n self.send(\"eth_uninstallFilter\", [filterId]);\n return;\n }\n setTimeout(function () { poll(); }, 0);\n return null;\n }).catch((error) => { });\n }\n poll();\n return filterId;\n }).catch((error) => { });\n }\n _stopEvent(event) {\n if (event.tag === \"pending\" && this.listenerCount(\"pending\") === 0) {\n this._pendingFilter = null;\n }\n super._stopEvent(event);\n }\n // Convert an ethers.js transaction into a JSON-RPC transaction\n // - gasLimit => gas\n // - All values hexlified\n // - All numeric values zero-striped\n // - All addresses are lowercased\n // NOTE: This allows a TransactionRequest, but all values should be resolved\n // before this is called\n // @TODO: This will likely be removed in future versions and prepareRequest\n // will be the preferred method for this.\n static hexlifyTransaction(transaction, allowExtra) {\n // Check only allowed properties are given\n const allowed = shallowCopy(allowedTransactionKeys);\n if (allowExtra) {\n for (const key in allowExtra) {\n if (allowExtra[key]) {\n allowed[key] = true;\n }\n }\n }\n checkProperties(transaction, allowed);\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n const value = hexValue(BigNumber.from(transaction[key]));\n if (key === \"gasLimit\") {\n key = \"gas\";\n }\n result[key] = value;\n });\n [\"from\", \"to\", \"data\"].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n result[key] = hexlify(transaction[key]);\n });\n if (transaction.accessList) {\n result[\"accessList\"] = accessListify(transaction.accessList);\n }\n return result;\n }\n}\n//# sourceMappingURL=json-rpc-provider.js.map","import { atom } from 'recoil'\n\nexport const emailState = atom({\n key: 'emailState',\n default: '',\n})\n","import { atom } from 'recoil'\n\nexport const sessionStatusState = atom({\n key: 'sessionStatusState',\n default: {\n walletConnected: false,\n googleConnected: false,\n googleTokenValidityStatus: undefined,\n },\n})\n","import React, { useState, useRef, useEffect, createContext, useMemo, useContext, useCallback } from 'react';\n\nfunction useLoadGsiScript(options = {}) {\r\n const { nonce, onScriptLoadSuccess, onScriptLoadError } = options;\r\n const [scriptLoadedSuccessfully, setScriptLoadedSuccessfully] = useState(false);\r\n const onScriptLoadSuccessRef = useRef(onScriptLoadSuccess);\r\n onScriptLoadSuccessRef.current = onScriptLoadSuccess;\r\n const onScriptLoadErrorRef = useRef(onScriptLoadError);\r\n onScriptLoadErrorRef.current = onScriptLoadError;\r\n useEffect(() => {\r\n const scriptTag = document.createElement('script');\r\n scriptTag.src = 'https://accounts.google.com/gsi/client';\r\n scriptTag.async = true;\r\n scriptTag.defer = true;\r\n scriptTag.nonce = nonce;\r\n scriptTag.onload = () => {\r\n var _a;\r\n setScriptLoadedSuccessfully(true);\r\n (_a = onScriptLoadSuccessRef.current) === null || _a === void 0 ? void 0 : _a.call(onScriptLoadSuccessRef);\r\n };\r\n scriptTag.onerror = () => {\r\n var _a;\r\n setScriptLoadedSuccessfully(false);\r\n (_a = onScriptLoadErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onScriptLoadErrorRef);\r\n };\r\n document.body.appendChild(scriptTag);\r\n return () => {\r\n document.body.removeChild(scriptTag);\r\n };\r\n }, [nonce]);\r\n return scriptLoadedSuccessfully;\r\n}\n\nconst GoogleOAuthContext = createContext(null);\r\nfunction GoogleOAuthProvider({ clientId, nonce, onScriptLoadSuccess, onScriptLoadError, children, }) {\r\n const scriptLoadedSuccessfully = useLoadGsiScript({\r\n nonce,\r\n onScriptLoadSuccess,\r\n onScriptLoadError,\r\n });\r\n const contextValue = useMemo(() => ({\r\n clientId,\r\n scriptLoadedSuccessfully,\r\n }), [clientId, scriptLoadedSuccessfully]);\r\n return (React.createElement(GoogleOAuthContext.Provider, { value: contextValue }, children));\r\n}\r\nfunction useGoogleOAuth() {\r\n const context = useContext(GoogleOAuthContext);\r\n if (!context) {\r\n throw new Error('Google OAuth components must be used within GoogleOAuthProvider');\r\n }\r\n return context;\r\n}\n\nfunction extractClientId(credentialResponse) {\r\n var _a;\r\n const clientId = (_a = credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.clientId) !== null && _a !== void 0 ? _a : credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.client_id;\r\n return clientId;\r\n}\n\nconst containerHeightMap = { large: 40, medium: 32, small: 20 };\r\nfunction GoogleLogin({ onSuccess, onError, useOneTap, promptMomentNotification, type = 'standard', theme = 'outline', size = 'large', text, shape, logo_alignment, width, locale, click_listener, containerProps, ...props }) {\r\n const btnContainerRef = useRef(null);\r\n const { clientId, scriptLoadedSuccessfully } = useGoogleOAuth();\r\n const onSuccessRef = useRef(onSuccess);\r\n onSuccessRef.current = onSuccess;\r\n const onErrorRef = useRef(onError);\r\n onErrorRef.current = onError;\r\n const promptMomentNotificationRef = useRef(promptMomentNotification);\r\n promptMomentNotificationRef.current = promptMomentNotification;\r\n useEffect(() => {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n if (!scriptLoadedSuccessfully)\r\n return;\r\n (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.initialize({\r\n client_id: clientId,\r\n callback: (credentialResponse) => {\r\n var _a;\r\n if (!(credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.credential)) {\r\n return (_a = onErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onErrorRef);\r\n }\r\n const { credential, select_by } = credentialResponse;\r\n onSuccessRef.current({\r\n credential,\r\n clientId: extractClientId(credentialResponse),\r\n select_by,\r\n });\r\n },\r\n ...props,\r\n });\r\n (_f = (_e = (_d = window === null || window === void 0 ? void 0 : window.google) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e.id) === null || _f === void 0 ? void 0 : _f.renderButton(btnContainerRef.current, {\r\n type,\r\n theme,\r\n size,\r\n text,\r\n shape,\r\n logo_alignment,\r\n width,\r\n locale,\r\n click_listener,\r\n });\r\n if (useOneTap)\r\n (_j = (_h = (_g = window === null || window === void 0 ? void 0 : window.google) === null || _g === void 0 ? void 0 : _g.accounts) === null || _h === void 0 ? void 0 : _h.id) === null || _j === void 0 ? void 0 : _j.prompt(promptMomentNotificationRef.current);\r\n return () => {\r\n var _a, _b, _c;\r\n if (useOneTap)\r\n (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.cancel();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [\r\n clientId,\r\n scriptLoadedSuccessfully,\r\n useOneTap,\r\n type,\r\n theme,\r\n size,\r\n text,\r\n shape,\r\n logo_alignment,\r\n width,\r\n locale,\r\n ]);\r\n return (React.createElement(\"div\", { ...containerProps, ref: btnContainerRef, style: { height: containerHeightMap[size], ...containerProps === null || containerProps === void 0 ? void 0 : containerProps.style } }));\r\n}\n\nfunction googleLogout() {\r\n var _a, _b, _c;\r\n (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.disableAutoSelect();\r\n}\n\n/* eslint-disable import/export */\r\nfunction useGoogleLogin({ flow = 'implicit', scope = '', onSuccess, onError, onNonOAuthError, overrideScope, state, ...props }) {\r\n const { clientId, scriptLoadedSuccessfully } = useGoogleOAuth();\r\n const clientRef = useRef();\r\n const onSuccessRef = useRef(onSuccess);\r\n onSuccessRef.current = onSuccess;\r\n const onErrorRef = useRef(onError);\r\n onErrorRef.current = onError;\r\n const onNonOAuthErrorRef = useRef(onNonOAuthError);\r\n onNonOAuthErrorRef.current = onNonOAuthError;\r\n useEffect(() => {\r\n var _a;\r\n if (!scriptLoadedSuccessfully)\r\n return;\r\n const clientMethod = flow === 'implicit' ? 'initTokenClient' : 'initCodeClient';\r\n const client = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts.oauth2[clientMethod]({\r\n client_id: clientId,\r\n scope: overrideScope ? scope : `openid profile email ${scope}`,\r\n callback: (response) => {\r\n var _a, _b;\r\n if (response.error)\r\n return (_a = onErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onErrorRef, response);\r\n (_b = onSuccessRef.current) === null || _b === void 0 ? void 0 : _b.call(onSuccessRef, response);\r\n },\r\n error_callback: (nonOAuthError) => {\r\n var _a;\r\n (_a = onNonOAuthErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onNonOAuthErrorRef, nonOAuthError);\r\n },\r\n state,\r\n ...props,\r\n });\r\n clientRef.current = client;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId, scriptLoadedSuccessfully, flow, scope, state]);\r\n const loginImplicitFlow = useCallback((overrideConfig) => { var _a; return (_a = clientRef.current) === null || _a === void 0 ? void 0 : _a.requestAccessToken(overrideConfig); }, []);\r\n const loginAuthCodeFlow = useCallback(() => { var _a; return (_a = clientRef.current) === null || _a === void 0 ? void 0 : _a.requestCode(); }, []);\r\n return flow === 'implicit' ? loginImplicitFlow : loginAuthCodeFlow;\r\n}\n\nfunction useGoogleOneTapLogin({ onSuccess, onError, promptMomentNotification, cancel_on_tap_outside, prompt_parent_id, state_cookie_domain, hosted_domain, disabled, }) {\r\n const { clientId, scriptLoadedSuccessfully } = useGoogleOAuth();\r\n const onSuccessRef = useRef(onSuccess);\r\n onSuccessRef.current = onSuccess;\r\n const onErrorRef = useRef(onError);\r\n onErrorRef.current = onError;\r\n const promptMomentNotificationRef = useRef(promptMomentNotification);\r\n promptMomentNotificationRef.current = promptMomentNotification;\r\n useEffect(() => {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n if (!scriptLoadedSuccessfully)\r\n return;\r\n if (disabled) {\r\n (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.cancel();\r\n return;\r\n }\r\n (_f = (_e = (_d = window === null || window === void 0 ? void 0 : window.google) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e.id) === null || _f === void 0 ? void 0 : _f.initialize({\r\n client_id: clientId,\r\n callback: (credentialResponse) => {\r\n var _a;\r\n if (!(credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.credential)) {\r\n return (_a = onErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onErrorRef);\r\n }\r\n const { credential, select_by } = credentialResponse;\r\n onSuccessRef.current({\r\n credential,\r\n clientId: extractClientId(credentialResponse),\r\n select_by,\r\n });\r\n },\r\n hosted_domain,\r\n cancel_on_tap_outside,\r\n prompt_parent_id,\r\n state_cookie_domain,\r\n });\r\n (_j = (_h = (_g = window === null || window === void 0 ? void 0 : window.google) === null || _g === void 0 ? void 0 : _g.accounts) === null || _h === void 0 ? void 0 : _h.id) === null || _j === void 0 ? void 0 : _j.prompt(promptMomentNotificationRef.current);\r\n return () => {\r\n var _a, _b, _c;\r\n (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.cancel();\r\n };\r\n }, [\r\n clientId,\r\n scriptLoadedSuccessfully,\r\n cancel_on_tap_outside,\r\n prompt_parent_id,\r\n state_cookie_domain,\r\n hosted_domain,\r\n disabled,\r\n ]);\r\n}\n\n/**\r\n * Checks if the user granted all the specified scope or scopes\r\n * @returns True if all the scopes are granted\r\n */\r\nfunction hasGrantedAllScopesGoogle(tokenResponse, firstScope, ...restScopes) {\r\n var _a, _b, _c;\r\n if (!(window === null || window === void 0 ? void 0 : window.google))\r\n return false;\r\n return (((_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.oauth2) === null || _c === void 0 ? void 0 : _c.hasGrantedAllScopes(tokenResponse, firstScope, ...restScopes)) || false);\r\n}\n\n/**\r\n * Checks if the user granted any of the specified scope or scopes.\r\n * @returns True if any of the scopes are granted\r\n */\r\nfunction hasGrantedAnyScopeGoogle(tokenResponse, firstScope, ...restScopes) {\r\n var _a, _b, _c;\r\n if (!(window === null || window === void 0 ? void 0 : window.google))\r\n return false;\r\n return (((_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.oauth2) === null || _c === void 0 ? void 0 : _c.hasGrantedAnyScope(tokenResponse, firstScope, ...restScopes)) || false);\r\n}\n\nexport { GoogleLogin, GoogleOAuthProvider, googleLogout, hasGrantedAllScopesGoogle, hasGrantedAnyScopeGoogle, useGoogleLogin, useGoogleOneTapLogin };\n","import { useState, useEffect } from 'react'\nimport axios from 'axios'\nimport { GoogleOAuthProvider, GoogleLogin } from '@react-oauth/google'\n\nimport { useRecoilState } from 'recoil'\nimport { walletState } from '../../atoms/WalletAtom'\nimport { emailState } from '../../atoms/EmailAtom'\nimport { artistDataState } from '../../atoms/artistDataAtom'\nimport { pageState } from '../../atoms/PageAtom'\nimport { sessionStatusState } from '../../atoms/SessionStatusAtom'\nimport { isLoginState } from '../../atoms/IsLoginAtom'\nimport { ZERO_ADDRESS } from '../../constants'\n\ntype Artist = {\n public_id: string\n display_name: string\n comment: string\n gift_detail: string\n icon_uri: string\n}\n\nconst OAuthGoogleLogin = () => {\n const [walletAddress, setWalletAddress] = useRecoilState(walletState)\n const [email, setEmail] = useRecoilState(emailState)\n const [, setArtistData] = useRecoilState(artistDataState)\n const [, setPage] = useRecoilState(pageState)\n const [isLogin, setIsLogin] = useRecoilState(isLoginState)\n const [sessionStatus, setSessionStatus] =\n useRecoilState(sessionStatusState)\n\n useEffect(() => {\n if (walletAddress) {\n session('')\n } else {\n checkSession()\n }\n }, [])\n\n const [sessionNow, setSessionNow] = useState(false)\n const checkSession = () => {\n axios({\n method: 'GET',\n url: `${\n import.meta.env.VITE_API_BASE_URI\n }/api/v1/google_oauth/check_session`,\n })\n .then((response) => {\n const isSession = response.data.is_session\n if (isSession) {\n if (response.data.is_artist && response.data.artist) {\n setArtistData(response.data.artist)\n } else {\n setArtistData({} as Artist)\n }\n setWalletAddress(response.data.wallet_address)\n setEmail(response.data.email)\n\n setSessionStatus({\n walletConnected: response.data.wallet_address !== ZERO_ADDRESS,\n googleConnected: response.data.email,\n googleTokenValidityStatus:\n response.data.google_token_validity_status,\n })\n setIsLogin(true)\n } else {\n setIsLogin(false)\n }\n })\n .catch((error) => {\n console.error('error', error)\n setSessionNow(false)\n })\n }\n\n const session = (credential: string | undefined) => {\n if (sessionNow || !credential) return setIsLogin(false)\n\n setSessionNow(true)\n\n axios({\n method: 'POST',\n url: `${import.meta.env.VITE_API_BASE_URI}/api/v1/google_oauth/session`,\n params: {\n credential: credential,\n },\n })\n .then((response) => {\n const message = response.data.message\n if (message !== 'success') return errorHandling(message)\n\n if (response.data.is_artist && response.data.artist) {\n setArtistData(response.data.artist)\n } else {\n setArtistData({} as Artist)\n }\n\n setWalletAddress(response.data.wallet_address)\n setEmail(response.data.email)\n setSessionStatus({\n walletConnected: sessionStatus.walletConnected,\n googleConnected: true,\n googleTokenValidityStatus: response.data.google_token_validity_status,\n })\n setSessionNow(false)\n setIsLogin(true)\n })\n .catch((error) => {\n console.error('error', error)\n setSessionNow(false)\n })\n }\n\n const errorHandling = (message: string) => {\n if (message.indexOf('other address registered') !== -1) {\n alert('ログイン中のウォレットには既に他のアドレスが連携されています')\n } else if (message.indexOf('other user logged in') !== -1) {\n alert('既に他のユーザーがログインしています')\n } else {\n alert('ログイン処理に失敗しました')\n }\n setSessionNow(false)\n }\n\n return (\n \n {\n session(credentialResponse.credential)\n }}\n onError={() => {\n console.error('Login Failed')\n }}\n size=\"medium\"\n shape=\"pill\"\n />\n \n )\n}\n\nexport default OAuthGoogleLogin\n"],"names":["AddressZero","HashZero","version","decode","textData","data","i","arrayify","encode","flat","array","depth","result","forEach","flatDeep","arr","val","fromEntries","value","decode_arithmetic","bytes","pos","u16","symbol_count","total","acc","skip","pos_payload","read_width","read_buffer","read_bit","N","FULL","HALF","QRTR","MASK","register","symbols","low","range","start","end","mid","a","b","offset","x","read_payload","v","read_compressed_payload","signed","read_counts","n","next","read_ascending","read_deltas","read_member_array","lookup","vX","vN","j","read_mapped_map","ret","w","read_linear_table","read_replacement_table","read_zero_terminated_array","read_transposed","m","dx","dy","ys","_","j_dy","read_emoji_trie","sorted","read","branches","keys","temp","valid","fe0f","save","check","getData","r","VALID","IGNORED","MAPPED","EMOJI_ROOT","HYPHEN","UNDERSCORE","explode_cp","name","toUtf8CodePoints","filter_fe0f","cps","cp","ens_normalize_post_check","label","err","ens_normalize","normalize","emoji_filter","input","output","emoji","consume_emoji_reversed","nfc","s","eaten","_a","node","saved","stack","logger","Logger","Zeros","checkComponent","comp","ensNameSplit","toUtf8Bytes","comps","last","namehash","keccak256","concat","hexlify","dnsEncode","__awaiter","this","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","e","rejected","padding","NegativeOne","BigNumber","Zero","One","MaxUint256","hexPadRight","padOffset","hexConcat","hexTrue","hexZeroPad","hexFalse","domainFieldTypes","domainFieldNames","checkString","key","domainChecks","getAddress","getBaseEncoder","type","match","width","boundsUpper","boundsLower","id","encodeType","fields","TypedDataEncoder","types","defineReadOnly","deepCopy","links","parents","subtypes","uniqueNames","field","baseType","primaryTypes","t","checkCircular","found","child","subtype","st","encoder","subEncoder","length","encodedType","values","callback","accum","domain","domainFields","resolveName","shallowCopy","ensCache","isHexString","domainValues","domainTypes","typesWithDomain","BaseX","alphabet","source","digits","carry","string","k","q","byte","Base58","sha256","hash","isRenetworkable","ethDefaultProvider","network","func","providers","options","providerList","provider","quorum","etcDefaultProvider","url","homestead","ropsten","classicMordor","networks","getNetwork","standard","defaultProvider","getUrl","href","request","opts","response","body","headers","staller","duration","bodyify","isBytesLike","toUtf8String","unpercent","all","code","_fetchData","connection","processFunc","attemptLimit","throttleCallback","throttleSlotInterval","errorPassThrough","allow304","timeout","authorization","base64Encode","reData","dataMatch","base64Decode","error","flatHeaders","header","runningTimeout","timer","runningFetch","attempt","location","tryAgain","stall","retryAfter","fetchJson","json","processJsonFunc","updated","poll","done","cancel","retryLimit","ALPHABET","ALPHABET_MAP","z","polymodStep","pre","prefixChk","prefix","chk","c","words","LIMIT","__decode","str","lowered","uppered","split","wordChars","decodeUnsafe","res","convert","inBits","outBits","pad","bits","maxV","toWordsUnsafe","toWords","fromWordsUnsafe","fromWords","bech32","Formatter","formats","address","bigNumber","blockTag","hex","number","strictData","accessList","accessListify","strict","hexDataSlice","getContractAddress","hexValue","hexDataLength","format","difficulty","transaction","chainId","parseTransaction","object","nullValue","replaceValue","throttleMessage","showThrottleMessage","MAX_CCIP_REDIRECTS","checkTopic","topic","serializeTopics","topics","unique","deserializeTopics","getEventTag","eventName","ForkEvent","getTime","PollableEvents","Event","tag","listener","once","filter","coinInfos","bytes32ify","base58Encode","matcherIpfs","matchers","_parseString","_parseBytes","getIpfsLink","link","numPad","padded","bytesPad","encodeBytes","datas","byteCount","Resolver","resolvedAddress","selector","parameters","tx","parseBytes","coinType","hexBytes","coinInfo","p2pkh","p2sh","linkage","avatar","scheme","owner","addr","tokenId","tokenOwner","balance","metadataUrl","metadata","imageUrl","ipfs","ipns","swarm","skynet","urlSafe","keyBytes","defaultFormatter","nextPollId","BaseProvider","Provider","knownNetwork","getStatic","calldata","urls","sender","errorMessages","errorMessage","maxAge","internalBlockNumber","reqTime","checkInternalBlockNumber","resolveProperties","blockNumber","networkError","respTime","pollId","runners","eventBlockNumber","event","runner","receipt","minFromBlock","logs","log","currentNetwork","now","transactionHash","confirmations","replaceable","cancelFuncs","alreadyDone","minedHandler","lastBlockNumber","scannedBlock","replaceHandler","nonce","mined","block","ti","reason","addressOrName","params","position","p","startBlock","confirms","replacement","signedTransaction","hexTx","txSender","urlsOffset","urlsLength","urlsData","u","callbackSelector","extraData","ccipResult","resolved","blockHashOrBlockTag","includeTransactions","blockWithTxs","currentName","resolver","operation","addrData","resolverAddr","nameOrAddress","resolverAddress","method","args","stopped","eventTag","errorGas","spelunk","requireData","checkError","message","getResult","payload","getLowerCase","_constructorGuard","JsonRpcSigner","Signer","constructorGuard","addressOrIndex","UncheckedJsonRpcSigner","accounts","fromAddress","estimate","to","populated","_TypedDataEncoder","password","allowedTransactionKeys","JsonRpcProvider","networkOrReady","cache","feeData","self","pendingFilter","filterId","hashes","seq","allowExtra","allowed","checkProperties","emailState","atom","default","sessionStatusState","walletConnected","googleConnected","googleTokenValidityStatus","undefined","useLoadGsiScript","onScriptLoadSuccess","onScriptLoadError","scriptLoadedSuccessfully","setScriptLoadedSuccessfully","useState","onScriptLoadSuccessRef","useRef","current","onScriptLoadErrorRef","useEffect","scriptTag","document","createElement","src","async","defer","onload","call","onerror","appendChild","removeChild","GoogleOAuthContext","createContext","GoogleOAuthProvider","clientId","children","contextValue","useMemo","_jsx","useGoogleOAuth","context","useContext","Error","extractClientId","credentialResponse","client_id","containerHeightMap","large","medium","small","GoogleLogin","onSuccess","onError","useOneTap","promptMomentNotification","theme","size","text","shape","logo_alignment","locale","click_listener","containerProps","props","btnContainerRef","onSuccessRef","onErrorRef","promptMomentNotificationRef","_b","_c","_d","_e","_f","_g","_h","_j","window","google","initialize","credential","select_by","renderButton","prompt","height","style","OAuthGoogleLogin","walletAddress","setWalletAddress","useRecoilState","walletState","email","setEmail","setArtistData","artistDataState","pageState","isLogin","setIsLogin","isLoginState","sessionStatus","setSessionStatus","session","checkSession","sessionNow","setSessionNow","axios","VITE_API_BASE_URI","then","is_session","is_artist","artist","wallet_address","ZERO_ADDRESS","google_token_validity_status","catch","errorHandling","indexOf","alert","import","console"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,23]}