UNPKG

flowbatcher

Version:

Save gas by batching multiple ETH and ERC-20 transactions into a single operation, optimizing efficiency and reducing costs.

1,677 lines (1,613 loc) 2.24 MB
;(function (global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory( require("http"), require("https"), require("zlib"), require("crypto"), require("events"), require("net"), require("tls"), require("stream"), require("url"), require("buffer"), require("os"), require("tty"), require("util"), require("path"), require("fs"), require("assert"), require("readline"), )) : typeof define === "function" && define.amd ? define( [ "http", "https", "zlib", "crypto", "events", "net", "tls", "stream", "url", "buffer", "os", "tty", "util", "path", "fs", "assert", "readline", ], factory, ) : ((global = typeof globalThis !== "undefined" ? globalThis : global || self), (global.BatchSDK = factory( global.require$$1, global.require$$2, global.require$$3$1, global.require$$1$1, global.require$$0$5, global.require$$3$2, global.require$$4$1, global.require$$0$3, global.require$$0$4, global.require$$0$2, global.require$$0$6, global.require$$1$2, global.require$$1$3, global.require$$1$4, global.require$$6, global.require$$4$2, global.require$$0$7, ))) })( this, function ( require$$1, require$$2, require$$3$1, require$$1$1, require$$0$5, require$$3$2, require$$4$1, require$$0$3, require$$0$4, require$$0$2, require$$0$6, require$$1$2, require$$1$3, require$$1$4, require$$6, require$$4$2, require$$0$7, ) { "use strict" var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {} function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x } function getAugmentedNamespace(n) { if (Object.prototype.hasOwnProperty.call(n, "__esModule")) return n var f = n.default if (typeof f == "function") { var a = function a() { if (this instanceof a) { return Reflect.construct(f, arguments, this.constructor) } return f.apply(this, arguments) } a.prototype = f.prototype } else a = {} Object.defineProperty(a, "__esModule", { value: true }) Object.keys(n).forEach(function (k) { var d = Object.getOwnPropertyDescriptor(n, k) Object.defineProperty( a, k, d.get ? d : { enumerable: true, get: function () { return n[k] }, }, ) }) return a } var lib_commonjs$1 = {} /****************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] } return extendStatics(d, b) } function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError( "Class extends value " + String(b) + " is not a constructor or null", ) extendStatics(d, b) function __() { this.constructor = d } d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) } var __assign = function () { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i] for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] } return t } return __assign.apply(this, arguments) } function __rest(s, e) { var t = {} for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] if (s != null && typeof Object.getOwnPropertySymbols === "function") for ( var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++ ) { if ( e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) ) t[p[i]] = s[p[i]] } return t } function __decorate(decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? (desc = Object.getOwnPropertyDescriptor(target, key)) : desc, d if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc) else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r return c > 3 && r && Object.defineProperty(target, key, r), r } function __param(paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex) } } function __esDecorate( ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers, ) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected") return f } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value" var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}) var _, done = false for (var i = decorators.length - 1; i >= 0; i--) { var context = {} for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p] for (var p in contextIn.access) context.access[p] = contextIn.access[p] context.addInitializer = function (f) { if (done) throw new TypeError( "Cannot add initializers after decoration has completed", ) extraInitializers.push(accept(f || null)) } var result = (0, decorators[i])( kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context, ) if (kind === "accessor") { if (result === void 0) continue if (result === null || typeof result !== "object") throw new TypeError("Object expected") if ((_ = accept(result.get))) descriptor.get = _ if ((_ = accept(result.set))) descriptor.set = _ if ((_ = accept(result.init))) initializers.unshift(_) } else if ((_ = accept(result))) { if (kind === "field") initializers.unshift(_) else descriptor[key] = _ } } if (target) Object.defineProperty(target, contextIn.name, descriptor) done = true } function __runInitializers(thisArg, initializers, value) { var useValue = arguments.length > 2 for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg) } return useValue ? value : void 0 } function __propKey(x) { return typeof x === "symbol" ? x : "".concat(x) } function __setFunctionName(f, name, prefix) { if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "" return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name, }) } function __metadata(metadataKey, metadataValue) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue) } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value) }) } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)) } catch (e) { reject(e) } } function rejected(value) { try { step(generator["throw"](value)) } catch (e) { reject(e) } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) } step((generator = generator.apply(thisArg, _arguments || [])).next()) }) } function __generator(thisArg, body) { var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1] return t[1] }, trys: [], ops: [], }, f, y, t, g = Object.create( (typeof Iterator === "function" ? Iterator : Object).prototype, ) return ( (g.next = verb(0)), (g["throw"] = verb(1)), (g["return"] = verb(2)), typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this }), g ) function verb(n) { return function (v) { return step([n, v]) } } function step(op) { if (f) throw new TypeError("Generator is already executing.") while ((g && ((g = 0), op[0] && (_ = 0)), _)) try { if ( ((f = 1), y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) ) return t if (((y = 0), t)) op = [op[0] & 2, t.value] switch (op[0]) { case 0: case 1: t = op break case 4: _.label++ return { value: op[1], done: false } case 5: _.label++ y = op[1] op = [0] continue case 7: op = _.ops.pop() _.trys.pop() continue default: if ( !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2) ) { _ = 0 continue } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1] break } if (op[0] === 6 && _.label < t[1]) { _.label = t[1] t = op break } if (t && _.label < t[2]) { _.label = t[2] _.ops.push(op) break } if (t[2]) _.ops.pop() _.trys.pop() continue } op = body.call(thisArg, _) } catch (e) { op = [6, e] y = 0 } finally { f = t = 0 } if (op[0] & 5) throw op[1] return { value: op[0] ? op[1] : void 0, done: true } } } var __createBinding = Object.create ? function (o, m, k, k2) { if (k2 === undefined) k2 = k var desc = Object.getOwnPropertyDescriptor(m, k) if ( !desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable) ) { desc = { enumerable: true, get: function () { return m[k] }, } } Object.defineProperty(o, k2, desc) } : function (o, m, k, k2) { if (k2 === undefined) k2 = k o[k2] = m[k] } function __exportStar(m, o) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p) } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0 if (m) return m.call(o) if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0 return { value: o && o[i++], done: !o } }, } throw new TypeError( s ? "Object is not iterable." : "Symbol.iterator is not defined.", ) } function __read(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator] if (!m) return o var i = m.call(o), r, ar = [], e try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) } catch (error) { e = { error: error } } finally { try { if (r && !r.done && (m = i["return"])) m.call(i) } finally { if (e) throw e.error } } return ar } /** @deprecated */ function __spread() { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])) return ar } /** @deprecated */ function __spreadArrays() { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j] return r } function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i) ar[i] = from[i] } } return to.concat(ar || Array.prototype.slice.call(from)) } function __await(v) { return this instanceof __await ? ((this.v = v), this) : new __await(v) } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.") var g = generator.apply(thisArg, _arguments || []), i, q = [] return ( (i = Object.create( (typeof AsyncIterator === "function" ? AsyncIterator : Object) .prototype, )), verb("next"), verb("throw"), verb("return", awaitReturn), (i[Symbol.asyncIterator] = function () { return this }), i ) function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject) } } function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v) }) } if (f) i[n] = f(i[n]) } } function resume(n, v) { try { step(g[n](v)) } catch (e) { settle(q[0][3], e) } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r) } function fulfill(value) { resume("next", value) } function reject(value) { resume("throw", value) } function settle(f, v) { if ((f(v), q.shift(), q.length)) resume(q[0][0], q[0][1]) } } function __asyncDelegator(o) { var i, p return ( (i = {}), verb("next"), verb("throw", function (e) { throw e }), verb("return"), (i[Symbol.iterator] = function () { return this }), i ) function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v } : f } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.") var m = o[Symbol.asyncIterator], i return m ? m.call(o) : ((o = typeof __values === "function" ? __values(o) : o[Symbol.iterator]()), (i = {}), verb("next"), verb("throw"), verb("return"), (i[Symbol.asyncIterator] = function () { return this }), i) function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { ;(v = o[n](v)), settle(resolve, reject, v.done, v.value) }) } } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }) }, reject) } } function __makeTemplateObject(cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }) } else { cooked.raw = raw } return cooked } var __setModuleDefault = Object.create ? function (o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }) } : function (o, v) { o["default"] = v } function __importStar(mod) { if (mod && mod.__esModule) return mod var result = {} if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k) __setModuleDefault(result, mod) return result } function __importDefault(mod) { return mod && mod.__esModule ? mod : { default: mod } } function __classPrivateFieldGet(receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter") if ( typeof state === "function" ? receiver !== state || !f : !state.has(receiver) ) throw new TypeError( "Cannot read private member from an object whose class did not declare it", ) return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver) } function __classPrivateFieldSet(receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable") if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter") if ( typeof state === "function" ? receiver !== state || !f : !state.has(receiver) ) throw new TypeError( "Cannot write private member to an object whose class did not declare it", ) return ( kind === "a" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value ) } function __classPrivateFieldIn(state, receiver) { if ( receiver === null || (typeof receiver !== "object" && typeof receiver !== "function") ) throw new TypeError("Cannot use 'in' operator on non-object") return typeof state === "function" ? receiver === state : state.has(receiver) } function __addDisposableResource(env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.") var dispose, inner if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.") dispose = value[Symbol.asyncDispose] } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.") dispose = value[Symbol.dispose] if (async) inner = dispose } if (typeof dispose !== "function") throw new TypeError("Object not disposable.") if (inner) dispose = function () { try { inner.call(this) } catch (e) { return Promise.reject(e) } } env.stack.push({ value: value, dispose: dispose, async: async }) } else if (async) { env.stack.push({ async: true }) } return value } var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message) return ( (e.name = "SuppressedError"), (e.error = error), (e.suppressed = suppressed), e ) } function __disposeResources(env) { function fail(e) { env.error = env.hasError ? new _SuppressedError( e, env.error, "An error was suppressed during disposal.", ) : e env.hasError = true } var r, s = 0 function next() { while ((r = env.stack.pop())) { try { if (!r.async && s === 1) return (s = 0), env.stack.push(r), Promise.resolve().then(next) if (r.dispose) { var result = r.dispose.call(r.value) if (r.async) return ( (s |= 2), Promise.resolve(result).then(next, function (e) { fail(e) return next() }) ) } else s |= 1 } catch (e) { fail(e) } } if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve() if (env.hasError) throw env.error } return next() } var tslib_es6 = { __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __classPrivateFieldIn, __addDisposableResource, __disposeResources, } var tslib_es6$1 = /*#__PURE__*/ Object.freeze({ __proto__: null, __addDisposableResource: __addDisposableResource, get __assign() { return __assign }, __asyncDelegator: __asyncDelegator, __asyncGenerator: __asyncGenerator, __asyncValues: __asyncValues, __await: __await, __awaiter: __awaiter, __classPrivateFieldGet: __classPrivateFieldGet, __classPrivateFieldIn: __classPrivateFieldIn, __classPrivateFieldSet: __classPrivateFieldSet, __createBinding: __createBinding, __decorate: __decorate, __disposeResources: __disposeResources, __esDecorate: __esDecorate, __exportStar: __exportStar, __extends: __extends, __generator: __generator, __importDefault: __importDefault, __importStar: __importStar, __makeTemplateObject: __makeTemplateObject, __metadata: __metadata, __param: __param, __propKey: __propKey, __read: __read, __rest: __rest, __runInitializers: __runInitializers, __setFunctionName: __setFunctionName, __spread: __spread, __spreadArray: __spreadArray, __spreadArrays: __spreadArrays, __values: __values, default: tslib_es6, }) var require$$0$1 = /*@__PURE__*/ getAugmentedNamespace(tslib_es6$1) var ethers = {} var _version = {} var hasRequired_version function require_version() { if (hasRequired_version) return _version hasRequired_version = 1 /* Do NOT modify this file; see /src.ts/_admin/update-version.ts */ Object.defineProperty(_version, "__esModule", { value: true }) _version.version = void 0 /** * The current version of Ethers. */ _version.version = "6.13.5" return _version } var abi = {} var abiCoder = {} var utils$3 = {} var base58 = {} var data = {} var errors = {} var properties = {} var hasRequiredProperties function requireProperties() { if (hasRequiredProperties) return properties hasRequiredProperties = 1 /** * Property helper functions. * * @_subsection api/utils:Properties [about-properties] */ Object.defineProperty(properties, "__esModule", { value: true }) properties.defineProperties = properties.resolveProperties = void 0 function checkType(value, type, name) { const types = type.split("|").map((t) => t.trim()) for (let i = 0; i < types.length; i++) { switch (type) { case "any": return case "bigint": case "boolean": case "number": case "string": if (typeof value === type) { return } } } const error = new Error(`invalid value for type ${type}`) error.code = "INVALID_ARGUMENT" error.argument = `value.${name}` error.value = value throw error } /** * Resolves to a new object that is a copy of %%value%%, but with all * values resolved. */ async function resolveProperties(value) { const keys = Object.keys(value) const results = await Promise.all( keys.map((k) => Promise.resolve(value[k])), ) return results.reduce((accum, v, index) => { accum[keys[index]] = v return accum }, {}) } properties.resolveProperties = resolveProperties /** * Assigns the %%values%% to %%target%% as read-only values. * * It %%types%% is specified, the values are checked. */ function defineProperties(target, values, types) { for (let key in values) { let value = values[key] const type = types ? types[key] : null if (type) { checkType(value, type, key) } Object.defineProperty(target, key, { enumerable: true, value, writable: false, }) } } properties.defineProperties = defineProperties return properties } var hasRequiredErrors function requireErrors() { if (hasRequiredErrors) return errors hasRequiredErrors = 1 /** * All errors in ethers include properties to ensure they are both * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``). * * The [[isError]] function can be used to check the error ``code`` and * provide a type guard for the properties present on that error interface. * * @_section: api/utils/errors:Errors [about-errors] */ Object.defineProperty(errors, "__esModule", { value: true }) errors.assertPrivate = errors.assertNormalize = errors.assertArgumentCount = errors.assertArgument = errors.assert = errors.makeError = errors.isCallException = errors.isError = void 0 const _version_js_1 = /*@__PURE__*/ require_version() const properties_js_1 = /*@__PURE__*/ requireProperties() function stringify(value) { if (value == null) { return "null" } if (Array.isArray(value)) { return "[ " + value.map(stringify).join(", ") + " ]" } if (value instanceof Uint8Array) { const HEX = "0123456789abcdef" let result = "0x" for (let i = 0; i < value.length; i++) { result += HEX[value[i] >> 4] result += HEX[value[i] & 0xf] } return result } if (typeof value === "object" && typeof value.toJSON === "function") { return stringify(value.toJSON()) } switch (typeof value) { case "boolean": case "symbol": return value.toString() case "bigint": return BigInt(value).toString() case "number": return value.toString() case "string": return JSON.stringify(value) case "object": { const keys = Object.keys(value) keys.sort() return ( "{ " + keys .map((k) => `${stringify(k)}: ${stringify(value[k])}`) .join(", ") + " }" ) } } return `[ COULD NOT SERIALIZE ]` } /** * Returns true if the %%error%% matches an error thrown by ethers * that matches the error %%code%%. * * In TypeScript environments, this can be used to check that %%error%% * matches an EthersError type, which means the expected properties will * be set. * * @See [ErrorCodes](api:ErrorCode) * @example * try { * // code.... * } catch (e) { * if (isError(e, "CALL_EXCEPTION")) { * // The Type Guard has validated this object * console.log(e.data); * } * } */ function isError(error, code) { return error && error.code === code } errors.isError = isError /** * Returns true if %%error%% is a [[CallExceptionError]. */ function isCallException(error) { return isError(error, "CALL_EXCEPTION") } errors.isCallException = isCallException /** * Returns a new Error configured to the format ethers emits errors, with * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties * for the corresponding EthersError. * * Each error in ethers includes the version of ethers, a * machine-readable [[ErrorCode]], and depending on %%code%%, additional * required properties. The error message will also include the %%message%%, * ethers version, %%code%% and all additional properties, serialized. */ function makeError(message, code, info) { let shortMessage = message { const details = [] if (info) { if ("message" in info || "code" in info || "name" in info) { throw new Error( `value will overwrite populated values: ${stringify(info)}`, ) } for (const key in info) { if (key === "shortMessage") { continue } const value = info[key] // try { details.push(key + "=" + stringify(value)) // } catch (error: any) { // console.log("MMM", error.message); // details.push(key + "=[could not serialize object]"); // } } } details.push(`code=${code}`) details.push(`version=${_version_js_1.version}`) if (details.length) { message += " (" + details.join(", ") + ")" } } let error switch (code) { case "INVALID_ARGUMENT": error = new TypeError(message) break case "NUMERIC_FAULT": case "BUFFER_OVERRUN": error = new RangeError(message) break default: error = new Error(message) } ;(0, properties_js_1.defineProperties)(error, { code }) if (info) { Object.assign(error, info) } if (error.shortMessage == null) { ;(0, properties_js_1.defineProperties)(error, { shortMessage }) } return error } errors.makeError = makeError /** * Throws an EthersError with %%message%%, %%code%% and additional error * %%info%% when %%check%% is falsish.. * * @see [[api:makeError]] */ function assert(check, message, code, info) { if (!check) { throw makeError(message, code, info) } } errors.assert = assert /** * A simple helper to simply ensuring provided arguments match expected * constraints, throwing if not. * * In TypeScript environments, the %%check%% has been asserted true, so * any further code does not need additional compile-time checks. */ function assertArgument(check, message, name, value) { assert(check, message, "INVALID_ARGUMENT", { argument: name, value: value, }) } errors.assertArgument = assertArgument function assertArgumentCount(count, expectedCount, message) { if (message == null) { message = "" } if (message) { message = ": " + message } assert( count >= expectedCount, "missing argument" + message, "MISSING_ARGUMENT", { count: count, expectedCount: expectedCount, }, ) assert( count <= expectedCount, "too many arguments" + message, "UNEXPECTED_ARGUMENT", { count: count, expectedCount: expectedCount, }, ) } errors.assertArgumentCount = assertArgumentCount const _normalizeForms = ["NFD", "NFC", "NFKD", "NFKC"].reduce( (accum, form) => { try { // General test for normalize /* c8 ignore start */ if ("test".normalize(form) !== "test") { throw new Error("bad") } /* c8 ignore stop */ if (form === "NFD") { const check = String.fromCharCode(0xe9).normalize("NFD") const expected = String.fromCharCode(0x65, 0x0301) /* c8 ignore start */ if (check !== expected) { throw new Error("broken") } /* c8 ignore stop */ } accum.push(form) } catch (error) {} return accum }, [], ) /** * Throws if the normalization %%form%% is not supported. */ function assertNormalize(form) { assert( _normalizeForms.indexOf(form) >= 0, "platform missing String.prototype.normalize", "UNSUPPORTED_OPERATION", { operation: "String.prototype.normalize", info: { form }, }, ) } errors.assertNormalize = assertNormalize /** * Many classes use file-scoped values to guard the constructor, * making it effectively private. This facilitates that pattern * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%, * throwing if not, indicating the %%className%% if provided. */ function assertPrivate(givenGuard, guard, className) { if (className == null) { className = "" } if (givenGuard !== guard) { let method = className, operation = "new" if (className) { method += "." operation += " " + className } assert( false, `private constructor; use ${method}from* methods`, "UNSUPPORTED_OPERATION", { operation, }, ) } } errors.assertPrivate = assertPrivate return errors } var hasRequiredData function requireData() { if (hasRequiredData) return data hasRequiredData = 1 Object.defineProperty(data, "__esModule", { value: true }) data.zeroPadBytes = data.zeroPadValue = data.stripZerosLeft = data.dataSlice = data.dataLength = data.concat = data.hexlify = data.isBytesLike = data.isHexString = data.getBytesCopy = data.getBytes = void 0 /** * Some data helpers. * * * @_subsection api/utils:Data Helpers [about-data] */ const errors_js_1 = /*@__PURE__*/ requireErrors() function _getBytes(value, name, copy) { if (value instanceof Uint8Array) { if (copy) { return new Uint8Array(value) } return value } if ( typeof value === "string" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i) ) { const result = new Uint8Array((value.length - 2) / 2) let offset = 2 for (let i = 0; i < result.length; i++) { result[i] = parseInt(value.substring(offset, offset + 2), 16) offset += 2 } return result } ;(0, errors_js_1.assertArgument)( false, "invalid BytesLike value", name || "value", value, ) } /** * Get a typed Uint8Array for %%value%%. If already a Uint8Array * the original %%value%% is returned; if a copy is required use * [[getBytesCopy]]. * * @see: getBytesCopy */ function getBytes(value, name) { return _getBytes(value, name, false) } data.getBytes = getBytes /** * Get a typed Uint8Array for %%value%%, creating a copy if necessary * to prevent any modifications of the returned value from being * reflected elsewhere. * * @see: getBytes */ function getBytesCopy(value, name) { return _getBytes(value, name, true) } data.getBytesCopy = getBytesCopy /** * Returns true if %%value%% is a valid [[HexString]]. * * If %%length%% is ``true`` or a //number//, it also checks that * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//) * bytes of data (e.g. ``0x1234`` is 2 bytes). */ function isHexString(value, length) { if (typeof value !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { return false } if (typeof length === "number" && value.length !== 2 + 2 * length) { return false } if (length === true && value.length % 2 !== 0) { return false } return true } data.isHexString = isHexString /** * Returns true if %%value%% is a valid representation of arbitrary * data (i.e. a valid [[DataHexString]] or a Uint8Array). */ function isBytesLike(value) { return isHexString(value, true) || value instanceof Uint8Array } data.isBytesLike = isBytesLike const HexCharacters = "0123456789abcdef" /** * Returns a [[DataHexString]] representation of %%data%%. */ function hexlify(data) { const bytes = getBytes(data) let result = "0x" for (let i = 0; i < bytes.length; i++) { const v = bytes[i] result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f] } return result } data.hexlify = hexlify /** * Returns a [[DataHexString]] by concatenating all values * within %%data%%. */ function concat(datas) { return "0x" + datas.map((d) => hexlify(d).substring(2)).join("") } data.concat = concat /** * Returns the length of %%data%%, in bytes. */ function dataLength(data) { if (isHexString(data, true)) { return (data.length - 2) / 2 } return getBytes(data).length } data.dataLength = dataLength /** * Returns a [[DataHexString]] by slicing %%data%% from the %%start%% * offset to the %%end%% offset. * * By default %%start%% is 0 and %%end%% is the length of %%data%%. */ function dataSlice(data, start, end) { const bytes = getBytes(data) if (end != null && end > bytes.length) { ;(0, errors_js_1.assert)( false, "cannot slice beyond data bounds", "BUFFER_OVERRUN", { buffer: bytes, length: bytes.length, offset: end, }, ) } return hexlify( bytes.slice( start == null ? 0 : start, end == null ? bytes.length : end, ), ) } data.dataSlice = dataSlice /** * Return the [[DataHexString]] result by stripping all **leading** ** zero bytes from %%data%%. */ function stripZerosLeft(data) { let bytes = hexlify(data).substring(2) while (bytes.startsWith("00")) { bytes = bytes.substring(2) } return "0x" + bytes } data.stripZerosLeft = stripZerosLeft function zeroPad(data, length, left) { const bytes = getBytes(data) ;(0, errors_js_1.assert)( length >= bytes.length, "padding exceeds data length", "BUFFER_OVERRUN", { buffer: new Uint8Array(bytes), length: length, offset: length + 1, }, ) const result = new Uint8Array(length) result.fill(0) if (left) { result.set(bytes, length - bytes.length) } else { result.set(bytes, 0) } return hexlify(result) } /** * Return the [[DataHexString]] of %%data%% padded on the **left** * to %%length%% bytes. * * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is * thrown. * * This pads data the same as **values** are in Solidity * (e.g. ``uint128``). */ function zeroPadValue(data, length) { return zeroPad(data, length, true) } data.zeroPadValue = zeroPadValue /** * Return the [[DataHexString]] of %%data%% padded on the **right** * to %%length%% bytes. * * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is * thrown. * * This pads data the same as **bytes** are in Solidity * (e.g. ``bytes16``). */ function zeroPadBytes(data, length) { return zeroPad(data, length, false) } data.zeroPadBytes = zeroPadBytes return data } var maths = {} var hasRequiredMaths function requireMaths() { if (hasRequiredMaths) return maths hasRequiredMaths = 1 Object.defineProperty(maths, "__esModule", { value: true }) maths.toQuantity = maths.toBeArray = maths.toBeHex = maths.toNumber = maths.getNumber = maths.toBigInt = maths.getUint = maths.getBigInt = maths.mask = maths.toTwos = maths.fromTwos = void 0 /** * Some mathematic operations. * * @_subsection: api/utils:Math Helpers [about-maths] */ const data_js_1 = /*@__PURE__*/ requireData() const errors_js_1 = /*@__PURE__*/ requireErrors() const BN_0 = BigInt(0) const BN_1 = BigInt(1) //const BN_Max256 = (BN_1 << BigInt(256)) - BN_1; // IEEE 754 support 53-bits of mantissa const maxValue = 0x1fffffffffffff /** * Convert %%value%% from a twos-compliment representation of %%width%% * bits to its value. * * If the highest bit is ``1``, the result will be negative. */ function fromTwos(_value, _width) { const value = getUint(_value, "value") const width = BigInt(getNumber(_width, "width")) ;(0, errors_js_1.assert)( value >> width === BN_0, "overflow", "NUMERIC_FAULT", { operation: "fromTwos", fault: "overflow", value: _value, }, ) // Top bit set; treat as a negative value if (value >> (width - BN_1)) { const mask = (BN_1 << width) - BN_1 return -((~value & mask) + BN_1) } return value } maths.fromTwos = fromTwos /** * Convert %%value%% to a twos-compliment representation of * %%width%% bits. * * The result will always be positive. */ function toTwos(_value, _width) { let value = getBigInt(_value, "value") const width = BigInt(getNumber(_width, "width")) const limit = BN_1 << (width - BN_1) if (value < BN_0) { value = -value ;(0, errors_js_1.assert)(value <= limit, "too low", "NUMERIC_FAULT", { operation: "toTwos", fault: "overflow", value: _value, }) const mask = (BN_1 << width) - BN_1 return (~value & mask) + BN_1 } else { ;(0, errors_js_1.assert)(value < limit, "too high", "NUMERIC_FAULT", { operation: "toTwos", fault: "overflow", value: _value, }) } return value } maths.toTwos = toTwos /** * Mask %%value%% with a bitmask of %%bits%% ones. */ function mask(_value, _bits) { const value = getUint(_value, "value") const bits = BigInt(getNumber(_bits, "bits")) return value & ((BN_1 << bits) - BN_1) } maths.mask = mask /** * Gets a BigInt from %%value%%. If it is an invalid value for * a BigInt, then an ArgumentError will be thrown for %%name%%. */ function getBigInt(value, name) { switch (typeof value) { case "bigint": return value case "number": ;(0, errors_js_1.assertArgument)( Number.isInteger(value), "underflow", name || "value", value, ) ;(0, errors_js_1.assertArgument)( value >= -9007199254740991 && value <= maxValue, "overflow", name || "value", value, ) return BigInt(value) case "string": try { if (value === "") { throw new Error("empty string") } if (value[0] === "-" && value[1] !== "-") { return -BigInt(value.substring(1)) } return BigInt(value) } catch (e) { ;(0, errors_js_1.assertArgument)( false, `invalid BigNumberish string: ${e.message}`, name || "value", value, ) } } ;(0, errors_js_1.assertArgument)( false, "invalid BigNumberish value", name || "value", value, )