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
JavaScript
;(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,
)