@elkdex/sdk
Version:
🛠An SDK for building applications on top of Elk Finance.
741 lines (601 loc) • 52.8 kB
JavaScript
import JSBI from 'jsbi';
export { default as JSBI } from 'jsbi';
import invariant from 'tiny-invariant';
import _Decimal from 'decimal.js-light';
import _Big from 'big.js';
import toFormat from 'toformat';
import { getAddress } from '@ethersproject/address';
var ChainId;
(function (ChainId) {
ChainId[ChainId["MUMBAI"] = 80001] = "MUMBAI";
ChainId[ChainId["MATIC"] = 137] = "MATIC";
ChainId[ChainId["FUJI"] = 43113] = "FUJI";
ChainId[ChainId["AVALANCHE"] = 43114] = "AVALANCHE";
ChainId[ChainId["FANTOM_TESTNET"] = 4002] = "FANTOM_TESTNET";
ChainId[ChainId["FANTOM"] = 250] = "FANTOM";
ChainId[ChainId["HUOBIECO_TESTNET"] = 256] = "HUOBIECO_TESTNET";
ChainId[ChainId["HUOBIECO"] = 128] = "HUOBIECO";
ChainId[ChainId["REEF"] = 13939] = "REEF";
ChainId[ChainId["XDAI"] = 100] = "XDAI";
ChainId[ChainId["FUSE"] = 122] = "FUSE";
ChainId[ChainId["OPTIMISM"] = 10] = "OPTIMISM";
ChainId[ChainId["OPTIMISM_TESTNET"] = 69] = "OPTIMISM_TESTNET";
ChainId[ChainId["KUCOIN"] = 321] = "KUCOIN";
ChainId[ChainId["KUCOIN_TESTNET"] = 322] = "KUCOIN_TESTNET";
ChainId[ChainId["ETHERLITE"] = 111] = "ETHERLITE";
ChainId[ChainId["ETHEREUM_CLASSIC"] = 61] = "ETHEREUM_CLASSIC";
ChainId[ChainId["ETHEREUM_CLASSIC_TESTNET"] = 62] = "ETHEREUM_CLASSIC_TESTNET";
ChainId[ChainId["MOONBEAM_TESTNET"] = 1287] = "MOONBEAM_TESTNET";
ChainId[ChainId["CLOVER_TESTNET"] = 123] = "CLOVER_TESTNET";
ChainId[ChainId["CELO"] = 42220] = "CELO";
ChainId[ChainId["ALFAJORES"] = 44787] = "ALFAJORES";
ChainId[ChainId["ARBITRUM_TESTNET"] = 421611] = "ARBITRUM_TESTNET";
ChainId[ChainId["ARBITRUM"] = 42161] = "ARBITRUM";
ChainId[ChainId["FLARE"] = 14] = "FLARE";
ChainId[ChainId["FLARE_TESTNET"] = 16] = "FLARE_TESTNET";
ChainId[ChainId["FUSION"] = 32659] = "FUSION";
ChainId[ChainId["HARMONY"] = 1666600000] = "HARMONY";
ChainId[ChainId["OKEX"] = 66] = "OKEX";
ChainId[ChainId["IOTEX"] = 4689] = "IOTEX";
ChainId[ChainId["HOO"] = 70] = "HOO";
ChainId[ChainId["ELAETH"] = 20] = "ELAETH";
ChainId[ChainId["MOONRIVER"] = 1285] = "MOONRIVER";
ChainId[ChainId["TELOS"] = 40] = "TELOS";
ChainId[ChainId["CRONOS"] = 25] = "CRONOS";
ChainId[ChainId["KAVA"] = 2222] = "KAVA";
ChainId[ChainId["BTTC"] = 199] = "BTTC";
ChainId[ChainId["BTTC_TESTNET"] = 1029] = "BTTC_TESTNET";
ChainId[ChainId["BINANCE_TESTNET"] = 97] = "BINANCE_TESTNET";
ChainId[ChainId["BINANCE"] = 56] = "BINANCE";
ChainId[ChainId["ROPSTEN"] = 3] = "ROPSTEN";
ChainId[ChainId["ETHEREUM"] = 1] = "ETHEREUM";
ChainId[ChainId["NEON_TESTNET"] = 245022926] = "NEON_TESTNET";
ChainId[ChainId["NEON_MAINNET"] = 245022934] = "NEON_MAINNET";
ChainId[ChainId["Q"] = 35441] = "Q";
ChainId[ChainId["BITGERT"] = 32520] = "BITGERT";
ChainId[ChainId["WANCHAIN"] = 888] = "WANCHAIN";
ChainId[ChainId["METIS"] = 1088] = "METIS";
ChainId[ChainId["ASTAR"] = 592] = "ASTAR";
ChainId[ChainId["ARTHERA_TESTNET"] = 10243] = "ARTHERA_TESTNET";
ChainId[ChainId["ARTHERA"] = 10242] = "ARTHERA";
ChainId[ChainId["PULSECHAIN"] = 369] = "PULSECHAIN";
ChainId[ChainId["BASE"] = 8453] = "BASE";
ChainId[ChainId["VELAS"] = 106] = "VELAS";
ChainId[ChainId["LINEA"] = 59144] = "LINEA";
ChainId[ChainId["ROOTSTOCK"] = 30] = "ROOTSTOCK";
ChainId[ChainId["BOBA"] = 288] = "BOBA";
ChainId[ChainId["BOBA_BNB"] = 56288] = "BOBA_BNB";
ChainId[ChainId["CLOVER"] = 1024] = "CLOVER";
ChainId[ChainId["AURORA"] = 1313161554] = "AURORA";
ChainId[ChainId["ZKSYNC"] = 324] = "ZKSYNC";
ChainId[ChainId["SCROLL"] = 534352] = "SCROLL";
ChainId[ChainId["BLAST"] = 238] = "BLAST";
ChainId[ChainId["OPBNB"] = 204] = "OPBNB";
ChainId[ChainId["MOONBEAM"] = 1284] = "MOONBEAM";
ChainId[ChainId["MANTLE"] = 5000] = "MANTLE";
ChainId[ChainId["POLYGON_ZKEVM"] = 1101] = "POLYGON_ZKEVM";
ChainId[ChainId["SONIC"] = 146] = "SONIC";
ChainId[ChainId["BERA"] = 80094] = "BERA";
ChainId[ChainId["EXPCHAIN_TESTNET"] = 18880] = "EXPCHAIN_TESTNET";
ChainId[ChainId["CYTONIC_TESTNET"] = 52226] = "CYTONIC_TESTNET";
})(ChainId || (ChainId = {}));
var TradeType;
(function (TradeType) {
TradeType[TradeType["EXACT_INPUT"] = 0] = "EXACT_INPUT";
TradeType[TradeType["EXACT_OUTPUT"] = 1] = "EXACT_OUTPUT";
})(TradeType || (TradeType = {}));
var Rounding;
(function (Rounding) {
Rounding[Rounding["ROUND_DOWN"] = 0] = "ROUND_DOWN";
Rounding[Rounding["ROUND_HALF_UP"] = 1] = "ROUND_HALF_UP";
Rounding[Rounding["ROUND_UP"] = 2] = "ROUND_UP";
})(Rounding || (Rounding = {}));
var MaxUint256 = /*#__PURE__*/JSBI.BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
var ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
_setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
var _toSignificantRoundin, _toFixedRounding;
var Decimal = /*#__PURE__*/toFormat(_Decimal);
var Big = /*#__PURE__*/toFormat(_Big);
var toSignificantRounding = (_toSignificantRoundin = {}, _toSignificantRoundin[Rounding.ROUND_DOWN] = Decimal.ROUND_DOWN, _toSignificantRoundin[Rounding.ROUND_HALF_UP] = Decimal.ROUND_HALF_UP, _toSignificantRoundin[Rounding.ROUND_UP] = Decimal.ROUND_UP, _toSignificantRoundin);
var toFixedRounding = (_toFixedRounding = {}, _toFixedRounding[Rounding.ROUND_DOWN] = 0, _toFixedRounding[Rounding.ROUND_HALF_UP] = 1, _toFixedRounding[Rounding.ROUND_UP] = 3, _toFixedRounding);
var Fraction = /*#__PURE__*/function () {
function Fraction(numerator, denominator) {
if (denominator === void 0) {
denominator = JSBI.BigInt(1);
}
this.numerator = JSBI.BigInt(numerator);
this.denominator = JSBI.BigInt(denominator);
}
Fraction.tryParseFraction = function tryParseFraction(fractionish) {
if (fractionish instanceof JSBI || typeof fractionish === 'number' || typeof fractionish === 'string') return new Fraction(fractionish);
if ('numerator' in fractionish && 'denominator' in fractionish) return fractionish;
throw new Error('Could not parse fraction');
} // performs floor division
;
var _proto = Fraction.prototype;
_proto.invert = function invert() {
return new Fraction(this.denominator, this.numerator);
};
_proto.add = function add(other) {
var otherParsed = Fraction.tryParseFraction(other);
if (JSBI.equal(this.denominator, otherParsed.denominator)) {
return new Fraction(JSBI.add(this.numerator, otherParsed.numerator), this.denominator);
}
return new Fraction(JSBI.add(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator)), JSBI.multiply(this.denominator, otherParsed.denominator));
};
_proto.subtract = function subtract(other) {
var otherParsed = Fraction.tryParseFraction(other);
if (JSBI.equal(this.denominator, otherParsed.denominator)) {
return new Fraction(JSBI.subtract(this.numerator, otherParsed.numerator), this.denominator);
}
return new Fraction(JSBI.subtract(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator)), JSBI.multiply(this.denominator, otherParsed.denominator));
};
_proto.lessThan = function lessThan(other) {
var otherParsed = Fraction.tryParseFraction(other);
return JSBI.lessThan(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator));
};
_proto.equalTo = function equalTo(other) {
var otherParsed = Fraction.tryParseFraction(other);
return JSBI.equal(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator));
};
_proto.greaterThan = function greaterThan(other) {
var otherParsed = Fraction.tryParseFraction(other);
return JSBI.greaterThan(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator));
};
_proto.multiply = function multiply(other) {
var otherParsed = Fraction.tryParseFraction(other);
return new Fraction(JSBI.multiply(this.numerator, otherParsed.numerator), JSBI.multiply(this.denominator, otherParsed.denominator));
};
_proto.divide = function divide(other) {
var otherParsed = Fraction.tryParseFraction(other);
return new Fraction(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(this.denominator, otherParsed.numerator));
};
_proto.toSignificant = function toSignificant(significantDigits, format, rounding) {
if (format === void 0) {
format = {
groupSeparator: ''
};
}
if (rounding === void 0) {
rounding = Rounding.ROUND_HALF_UP;
}
!Number.isInteger(significantDigits) ? process.env.NODE_ENV !== "production" ? invariant(false, significantDigits + " is not an integer.") : invariant(false) : void 0;
!(significantDigits > 0) ? process.env.NODE_ENV !== "production" ? invariant(false, significantDigits + " is not positive.") : invariant(false) : void 0;
Decimal.set({
precision: significantDigits + 1,
rounding: toSignificantRounding[rounding]
});
var quotient = new Decimal(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(significantDigits);
return quotient.toFormat(quotient.decimalPlaces(), format);
};
_proto.toFixed = function toFixed(decimalPlaces, format, rounding) {
if (format === void 0) {
format = {
groupSeparator: ''
};
}
if (rounding === void 0) {
rounding = Rounding.ROUND_HALF_UP;
}
!Number.isInteger(decimalPlaces) ? process.env.NODE_ENV !== "production" ? invariant(false, decimalPlaces + " is not an integer.") : invariant(false) : void 0;
!(decimalPlaces >= 0) ? process.env.NODE_ENV !== "production" ? invariant(false, decimalPlaces + " is negative.") : invariant(false) : void 0;
Big.DP = decimalPlaces;
Big.RM = toFixedRounding[rounding];
return new Big(this.numerator.toString()).div(this.denominator.toString()).toFormat(decimalPlaces, format);
}
/**
* Helper method for converting any super class back to a fraction
*/
;
_createClass(Fraction, [{
key: "quotient",
get: function get() {
return JSBI.divide(this.numerator, this.denominator);
} // remainder after floor division
}, {
key: "remainder",
get: function get() {
return new Fraction(JSBI.remainder(this.numerator, this.denominator), this.denominator);
}
}, {
key: "asFraction",
get: function get() {
return new Fraction(this.numerator, this.denominator);
}
}]);
return Fraction;
}();
var Big$1 = /*#__PURE__*/toFormat(_Big);
var CurrencyAmount = /*#__PURE__*/function (_Fraction) {
_inheritsLoose(CurrencyAmount, _Fraction);
function CurrencyAmount(currency, numerator, denominator) {
var _this;
_this = _Fraction.call(this, numerator, denominator) || this;
!JSBI.lessThanOrEqual(_this.quotient, MaxUint256) ? process.env.NODE_ENV !== "production" ? invariant(false, 'AMOUNT') : invariant(false) : void 0;
_this.currency = currency;
_this.decimalScale = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(currency.decimals));
return _this;
}
/**
* Returns a new currency amount instance from the unitless amount of token, i.e. the raw amount
* @param currency the currency in the amount
* @param rawAmount the raw token or ether amount
*/
CurrencyAmount.fromRawAmount = function fromRawAmount(currency, rawAmount) {
return new CurrencyAmount(currency, rawAmount);
}
/**
* Construct a currency amount with a denominator that is not equal to 1
* @param currency the currency
* @param numerator the numerator of the fractional token amount
* @param denominator the denominator of the fractional token amount
*/
;
CurrencyAmount.fromFractionalAmount = function fromFractionalAmount(currency, numerator, denominator) {
return new CurrencyAmount(currency, numerator, denominator);
};
var _proto = CurrencyAmount.prototype;
_proto.add = function add(other) {
!this.currency.equals(other.currency) ? process.env.NODE_ENV !== "production" ? invariant(false, 'CURRENCY') : invariant(false) : void 0;
var added = _Fraction.prototype.add.call(this, other);
return CurrencyAmount.fromFractionalAmount(this.currency, added.numerator, added.denominator);
};
_proto.subtract = function subtract(other) {
!this.currency.equals(other.currency) ? process.env.NODE_ENV !== "production" ? invariant(false, 'CURRENCY') : invariant(false) : void 0;
var subtracted = _Fraction.prototype.subtract.call(this, other);
return CurrencyAmount.fromFractionalAmount(this.currency, subtracted.numerator, subtracted.denominator);
};
_proto.multiply = function multiply(other) {
var multiplied = _Fraction.prototype.multiply.call(this, other);
return CurrencyAmount.fromFractionalAmount(this.currency, multiplied.numerator, multiplied.denominator);
};
_proto.divide = function divide(other) {
var divided = _Fraction.prototype.divide.call(this, other);
return CurrencyAmount.fromFractionalAmount(this.currency, divided.numerator, divided.denominator);
};
_proto.toSignificant = function toSignificant(significantDigits, format, rounding) {
if (significantDigits === void 0) {
significantDigits = 6;
}
if (rounding === void 0) {
rounding = Rounding.ROUND_DOWN;
}
return _Fraction.prototype.divide.call(this, this.decimalScale).toSignificant(significantDigits, format, rounding);
};
_proto.toFixed = function toFixed(decimalPlaces, format, rounding) {
if (decimalPlaces === void 0) {
decimalPlaces = this.currency.decimals;
}
if (rounding === void 0) {
rounding = Rounding.ROUND_DOWN;
}
!(decimalPlaces <= this.currency.decimals) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DECIMALS') : invariant(false) : void 0;
return _Fraction.prototype.divide.call(this, this.decimalScale).toFixed(decimalPlaces, format, rounding);
};
_proto.toExact = function toExact(format) {
if (format === void 0) {
format = {
groupSeparator: ''
};
}
Big$1.DP = this.currency.decimals;
return new Big$1(this.quotient.toString()).div(this.decimalScale.toString()).toFormat(format);
};
_createClass(CurrencyAmount, [{
key: "wrapped",
get: function get() {
if (this.currency.isToken) return this;
return CurrencyAmount.fromFractionalAmount(this.currency.wrapped, this.numerator, this.denominator);
}
}]);
return CurrencyAmount;
}(Fraction);
var ONE_HUNDRED = /*#__PURE__*/new Fraction( /*#__PURE__*/JSBI.BigInt(100));
/**
* Converts a fraction to a percent
* @param fraction the fraction to convert
*/
function toPercent(fraction) {
return new Percent(fraction.numerator, fraction.denominator);
}
var Percent = /*#__PURE__*/function (_Fraction) {
_inheritsLoose(Percent, _Fraction);
function Percent() {
var _this;
_this = _Fraction.apply(this, arguments) || this;
/**
* This boolean prevents a fraction from being interpreted as a Percent
*/
_this.isPercent = true;
return _this;
}
var _proto = Percent.prototype;
_proto.add = function add(other) {
return toPercent(_Fraction.prototype.add.call(this, other));
};
_proto.subtract = function subtract(other) {
return toPercent(_Fraction.prototype.subtract.call(this, other));
};
_proto.multiply = function multiply(other) {
return toPercent(_Fraction.prototype.multiply.call(this, other));
};
_proto.divide = function divide(other) {
return toPercent(_Fraction.prototype.divide.call(this, other));
};
_proto.toSignificant = function toSignificant(significantDigits, format, rounding) {
if (significantDigits === void 0) {
significantDigits = 5;
}
return _Fraction.prototype.multiply.call(this, ONE_HUNDRED).toSignificant(significantDigits, format, rounding);
};
_proto.toFixed = function toFixed(decimalPlaces, format, rounding) {
if (decimalPlaces === void 0) {
decimalPlaces = 2;
}
return _Fraction.prototype.multiply.call(this, ONE_HUNDRED).toFixed(decimalPlaces, format, rounding);
};
return Percent;
}(Fraction);
var Price = /*#__PURE__*/function (_Fraction) {
_inheritsLoose(Price, _Fraction);
/**
* Construct a price, either with the base and quote currency amount, or the
* @param args
*/
function Price() {
var _this;
var baseCurrency, quoteCurrency, denominator, numerator;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 4) {
baseCurrency = args[0];
quoteCurrency = args[1];
denominator = args[2];
numerator = args[3];
} else {
var result = args[0].quoteAmount.divide(args[0].baseAmount);
var _ref = [args[0].baseAmount.currency, args[0].quoteAmount.currency, result.denominator, result.numerator];
baseCurrency = _ref[0];
quoteCurrency = _ref[1];
denominator = _ref[2];
numerator = _ref[3];
}
_this = _Fraction.call(this, numerator, denominator) || this;
_this.baseCurrency = baseCurrency;
_this.quoteCurrency = quoteCurrency;
_this.scalar = new Fraction(JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(baseCurrency.decimals)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(quoteCurrency.decimals)));
return _this;
}
/**
* Flip the price, switching the base and quote currency
*/
var _proto = Price.prototype;
_proto.invert = function invert() {
return new Price(this.quoteCurrency, this.baseCurrency, this.numerator, this.denominator);
}
/**
* Multiply the price by another price, returning a new price. The other price must have the same base currency as this price's quote currency
* @param other the other price
*/
;
_proto.multiply = function multiply(other) {
!this.quoteCurrency.equals(other.baseCurrency) ? process.env.NODE_ENV !== "production" ? invariant(false, 'TOKEN') : invariant(false) : void 0;
var fraction = _Fraction.prototype.multiply.call(this, other);
return new Price(this.baseCurrency, other.quoteCurrency, fraction.denominator, fraction.numerator);
}
/**
* Return the amount of quote currency corresponding to a given amount of the base currency
* @param currencyAmount the amount of base currency to quote against the price
*/
;
_proto.quote = function quote(currencyAmount) {
!currencyAmount.currency.equals(this.baseCurrency) ? process.env.NODE_ENV !== "production" ? invariant(false, 'TOKEN') : invariant(false) : void 0;
var result = _Fraction.prototype.multiply.call(this, currencyAmount);
return CurrencyAmount.fromFractionalAmount(this.quoteCurrency, result.numerator, result.denominator);
}
/**
* Get the value scaled by decimals for formatting
* @private
*/
;
_proto.toSignificant = function toSignificant(significantDigits, format, rounding) {
if (significantDigits === void 0) {
significantDigits = 6;
}
return this.adjustedForDecimals.toSignificant(significantDigits, format, rounding);
};
_proto.toFixed = function toFixed(decimalPlaces, format, rounding) {
if (decimalPlaces === void 0) {
decimalPlaces = 4;
}
return this.adjustedForDecimals.toFixed(decimalPlaces, format, rounding);
};
_createClass(Price, [{
key: "adjustedForDecimals",
get: function get() {
return _Fraction.prototype.multiply.call(this, this.scalar);
}
}]);
return Price;
}(Fraction);
/**
* A currency is any fungible financial instrument, including Ether, all ERC20 tokens, and other chain-native currencies
*/
var BaseCurrency =
/**
* Constructs an instance of the base class `BaseCurrency`.
* @param chainId the chain ID on which this currency resides
* @param decimals decimals of the currency
* @param symbol symbol of the currency
* @param name of the currency
*/
function BaseCurrency(chainId, decimals, symbol, name) {
!Number.isSafeInteger(chainId) ? process.env.NODE_ENV !== "production" ? invariant(false, 'CHAIN_ID') : invariant(false) : void 0;
!(decimals >= 0 && decimals < 255 && Number.isInteger(decimals)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DECIMALS') : invariant(false) : void 0;
this.chainId = chainId;
this.decimals = decimals;
this.symbol = symbol;
this.name = name;
};
/**
* Represents the native currency of the chain on which it resides, e.g.
*/
var NativeCurrency = /*#__PURE__*/function (_BaseCurrency) {
_inheritsLoose(NativeCurrency, _BaseCurrency);
function NativeCurrency() {
var _this;
_this = _BaseCurrency.apply(this, arguments) || this;
_this.isNative = true;
_this.isToken = false;
return _this;
}
return NativeCurrency;
}(BaseCurrency);
/**
* Validates an address and returns the parsed (checksummed) version of that address
* @param address the unchecksummed hex address
*/
function validateAndParseAddress(address) {
try {
return getAddress(address);
} catch (error) {
throw new Error(address + " is not a valid address.");
}
} // Checks a string starts with 0x, is 42 characters long and contains only hex characters after 0x
var startsWith0xLen42HexRegex = /^0x[0-9a-fA-F]{40}$/;
/**
* Checks if an address is valid by checking 0x prefix, length === 42 and hex encoding.
* @param address the unchecksummed hex address
*/
function checkValidAddress(address) {
if (startsWith0xLen42HexRegex.test(address)) {
return address;
}
throw new Error(address + " is not a valid address.");
}
/**
* Represents an ERC20 token with a unique address and some metadata.
*/
var Token = /*#__PURE__*/function (_BaseCurrency) {
_inheritsLoose(Token, _BaseCurrency);
/**
*
* @param chainId {@link BaseCurrency#chainId}
* @param address The contract address on the chain on which this token lives
* @param decimals {@link BaseCurrency#decimals}
* @param symbol {@link BaseCurrency#symbol}
* @param name {@link BaseCurrency#name}
* @param bypassChecksum If true it only checks for length === 42, startsWith 0x and contains only hex characters
*/
function Token(chainId, address, decimals, symbol, name, bypassChecksum) {
var _this;
_this = _BaseCurrency.call(this, chainId, decimals, symbol, name) || this;
_this.isNative = false;
_this.isToken = true;
if (bypassChecksum) {
_this.address = checkValidAddress(address);
} else {
_this.address = validateAndParseAddress(address);
}
return _this;
}
/**
* Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
* @param other other token to compare
*/
var _proto = Token.prototype;
_proto.equals = function equals(other) {
return other.isToken && this.chainId === other.chainId && this.address === other.address;
}
/**
* Returns true if the address of this token sorts before the address of the other token
* @param other other token to compare
* @throws if the tokens have the same address
* @throws if the tokens are on different chains
*/
;
_proto.sortsBefore = function sortsBefore(other) {
!(this.chainId === other.chainId) ? process.env.NODE_ENV !== "production" ? invariant(false, 'CHAIN_IDS') : invariant(false) : void 0;
!(this.address !== other.address) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ADDRESSES') : invariant(false) : void 0;
return this.address.toLowerCase() < other.address.toLowerCase();
}
/**
* Return this token, which does not need to be wrapped
*/
;
_createClass(Token, [{
key: "wrapped",
get: function get() {
return this;
}
}]);
return Token;
}(BaseCurrency);
var _WETH, _WETH2;
/**
* Known WETH9 implementation addresses, used in our implementation of Ether#wrapped
*/
var WETH9 = (_WETH = {}, _WETH[1] = /*#__PURE__*/new Token(1, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 18, 'WETH', 'Wrapped Ether'), _WETH[3] = /*#__PURE__*/new Token(3, '0xc778417E063141139Fce010982780140Aa0cD5Ab', 18, 'WETH', 'Wrapped Ether'), _WETH[4] = /*#__PURE__*/new Token(4, '0xc778417E063141139Fce010982780140Aa0cD5Ab', 18, 'WETH', 'Wrapped Ether'), _WETH[5] = /*#__PURE__*/new Token(5, '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', 18, 'WETH', 'Wrapped Ether'), _WETH[42] = /*#__PURE__*/new Token(42, '0xd0A1E359811322d97991E03f863a0C30C2cF029C', 18, 'WETH', 'Wrapped Ether'), _WETH[10] = /*#__PURE__*/new Token(10, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _WETH[69] = /*#__PURE__*/new Token(69, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _WETH[42161] = /*#__PURE__*/new Token(42161, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _WETH[421611] = /*#__PURE__*/new Token(421611, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _WETH); // @todo merge WETH with WETH9?
var WETH = (_WETH2 = {}, _WETH2[ChainId.MUMBAI] = /*#__PURE__*/new Token(ChainId.MUMBAI, '0x5B67676a984807a212b1c59eBFc9B3568a474F0a', 18, 'WPOL', 'Wrapped POL'), _WETH2[ChainId.MATIC] = /*#__PURE__*/new Token(ChainId.MATIC, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WPOL', 'Wrapped POL'), _WETH2[ChainId.FUJI] = /*#__PURE__*/new Token(ChainId.FUJI, '0xd00ae08403B9bbb9124bB305C09058E32C39A48c', 18, 'WAVAX', 'Wrapped AVAX'), _WETH2[ChainId.AVALANCHE] = /*#__PURE__*/new Token(ChainId.AVALANCHE, '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', 18, 'WAVAX', 'Wrapped AVAX'), _WETH2[ChainId.FANTOM_TESTNET] = /*#__PURE__*/new Token(ChainId.FANTOM_TESTNET, '0xf1277d1Ed8AD466beddF92ef448A132661956621', 18, 'WFTM', 'Wrapped FTM'), _WETH2[ChainId.FANTOM] = /*#__PURE__*/new Token(ChainId.FANTOM, '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', 18, 'WFTM', 'Wrapped FTM'), _WETH2[ChainId.HUOBIECO_TESTNET] = /*#__PURE__*/new Token(ChainId.HUOBIECO_TESTNET, '0x7aF326B6351C8A9b8fb8CD205CBe11d4Ac5FA836', 18, 'WHT', 'Wrapped HT'), _WETH2[ChainId.HUOBIECO] = /*#__PURE__*/new Token(ChainId.HUOBIECO, '0x5545153CCFcA01fbd7Dd11C0b23ba694D9509A6F', 18, 'WHT', 'Wrapped HT'), _WETH2[ChainId.REEF] = /*#__PURE__*/new Token(ChainId.REEF, ZERO_ADDRESS, 18, 'WREEF', 'Wrapped REEF'), _WETH2[ChainId.XDAI] = /*#__PURE__*/new Token(ChainId.XDAI, '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 18, 'WXDAI', 'Wrapped XDAI'), _WETH2[ChainId.FUSE] = /*#__PURE__*/new Token(ChainId.FUSE, '0x0BE9e53fd7EDaC9F859882AfdDa116645287C629', 18, 'WFUSE', 'Wrapped FUSE'), _WETH2[ChainId.OPTIMISM] = /*#__PURE__*/new Token(ChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.OPTIMISM_TESTNET] = /*#__PURE__*/new Token(ChainId.OPTIMISM_TESTNET, ZERO_ADDRESS, 18, 'WKOR', 'Wrapped KOR'), _WETH2[ChainId.KUCOIN] = /*#__PURE__*/new Token(ChainId.KUCOIN, '0x4446Fc4eb47f2f6586f9fAAb68B3498F86C07521', 18, 'WKCS', 'Wrapped KCS'), _WETH2[ChainId.KUCOIN_TESTNET] = /*#__PURE__*/new Token(ChainId.KUCOIN_TESTNET, ZERO_ADDRESS, 18, 'WtKCS', 'Wrapped tKCS'), _WETH2[ChainId.ETHERLITE] = /*#__PURE__*/new Token(ChainId.ETHERLITE, ZERO_ADDRESS, 18, 'WETL', 'Wrapped ETL'), _WETH2[ChainId.ETHEREUM_CLASSIC] = /*#__PURE__*/new Token(ChainId.ETHEREUM_CLASSIC, ZERO_ADDRESS, 18, 'WETC', 'Wrapped ETC'), _WETH2[ChainId.ETHEREUM_CLASSIC_TESTNET] = /*#__PURE__*/new Token(ChainId.ETHEREUM_CLASSIC_TESTNET, ZERO_ADDRESS, 18, 'WCETC', 'Wrapped CETC'), _WETH2[ChainId.MOONBEAM] = /*#__PURE__*/new Token(ChainId.MOONBEAM, '0xAcc15dC74880C9944775448304B263D191c6077F', 18, 'WGLMR', 'Wrapped GLMR'), _WETH2[ChainId.MOONBEAM_TESTNET] = /*#__PURE__*/new Token(ChainId.MOONBEAM_TESTNET, ZERO_ADDRESS, 18, 'WDEV', 'Wrapped DEV'), _WETH2[ChainId.CLOVER] = /*#__PURE__*/new Token(ChainId.CLOVER, '0x1376C97C5c512d2d6F9173A9A3A016B6140b4536', 18, 'WCLV', 'Wrapped CLV'), _WETH2[ChainId.CLOVER_TESTNET] = /*#__PURE__*/new Token(ChainId.CLOVER_TESTNET, ZERO_ADDRESS, 18, 'WCLV', 'Wrapped CLV'), _WETH2[ChainId.CELO] = /*#__PURE__*/new Token(ChainId.CELO, ZERO_ADDRESS, 18, 'WCELO', 'Wrapped CELO'), _WETH2[ChainId.ALFAJORES] = /*#__PURE__*/new Token(ChainId.ALFAJORES, ZERO_ADDRESS, 18, 'WCELO', 'Wrapped CELO'), _WETH2[ChainId.ARBITRUM_TESTNET] = /*#__PURE__*/new Token(ChainId.ARBITRUM_TESTNET, ZERO_ADDRESS, 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.ARBITRUM] = /*#__PURE__*/new Token(ChainId.ARBITRUM, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.FLARE] = /*#__PURE__*/new Token(ChainId.FLARE, ZERO_ADDRESS, 18, 'WFLR', 'Wrapped FLR'), _WETH2[ChainId.FLARE_TESTNET] = /*#__PURE__*/new Token(ChainId.FLARE_TESTNET, ZERO_ADDRESS, 18, 'WCFLR', 'Wrapped CFLR'), _WETH2[ChainId.FUSION] = /*#__PURE__*/new Token(ChainId.FUSION, ZERO_ADDRESS, 18, 'WFSN', 'Wrapped FSN'), _WETH2[ChainId.HARMONY] = /*#__PURE__*/new Token(ChainId.HARMONY, '0xcF664087a5bB0237a0BAd6742852ec6c8d69A27a', 18, 'WONE', 'Wrapped ONE'), _WETH2[ChainId.OKEX] = /*#__PURE__*/new Token(ChainId.OKEX, '0x8F8526dbfd6E38E3D8307702cA8469Bae6C56C15', 18, 'WOKT', 'Wrapped OKT'), _WETH2[ChainId.IOTEX] = /*#__PURE__*/new Token(ChainId.IOTEX, '0xA00744882684C3e4747faEFD68D283eA44099D03', 18, 'WIOTX', 'Wrapped IOTX'), _WETH2[ChainId.HOO] = /*#__PURE__*/new Token(ChainId.HOO, '0x3EFF9D389D13D6352bfB498BCF616EF9b1BEaC87', 18, 'WHOO', 'Wrapped HOO'), _WETH2[ChainId.ELAETH] = /*#__PURE__*/new Token(ChainId.ELAETH, '0x517E9e5d46C1EA8aB6f78677d6114Ef47F71f6c4', 18, 'WELA', 'Wrapped ELA'), _WETH2[ChainId.MOONRIVER] = /*#__PURE__*/new Token(ChainId.MOONRIVER, '0x98878B06940aE243284CA214f92Bb71a2b032B8A', 18, 'WMOVR', 'Wrapped MOVR'), _WETH2[ChainId.TELOS] = /*#__PURE__*/new Token(ChainId.TELOS, '0xD102cE6A4dB07D247fcc28F366A623Df0938CA9E', 18, 'WTLOS', 'Wrapped TLOS'), _WETH2[ChainId.CRONOS] = /*#__PURE__*/new Token(ChainId.CRONOS, '0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23', 18, 'WCRO', 'Wrapped CRO'), _WETH2[ChainId.BTTC] = /*#__PURE__*/new Token(ChainId.BTTC, '0x8D193c6efa90BCFf940A98785d1Ce9D093d3DC8A', 18, 'WBTT', 'Wrapped BTT'), _WETH2[ChainId.BTTC_TESTNET] = /*#__PURE__*/new Token(ChainId.BTTC_TESTNET, '0x107742EB846b86CEaAF7528D5C85cddcad3e409A', 18, 'WBTT', 'Wrapped BTT'), _WETH2[ChainId.KAVA] = /*#__PURE__*/new Token(ChainId.KAVA, '0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b', 18, 'WKAVA', 'Wrapped KAVA'), _WETH2[ChainId.BINANCE_TESTNET] = /*#__PURE__*/new Token(ChainId.BINANCE_TESTNET, '0x094616F0BdFB0b526bD735Bf66Eca0Ad254ca81F', 18, 'WBNB', 'Wrapped BNB'), _WETH2[ChainId.BINANCE] = /*#__PURE__*/new Token(ChainId.BINANCE, '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', 18, 'WBNB', 'Wrapped BNB'), _WETH2[ChainId.ROPSTEN] = /*#__PURE__*/new Token(ChainId.ROPSTEN, '0x0a180A76e4466bF68A7F86fB029BEd3cCcFaAac5', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.ETHEREUM] = /*#__PURE__*/new Token(ChainId.ETHEREUM, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.NEON_TESTNET] = /*#__PURE__*/new Token(ChainId.NEON_TESTNET, '0x11adC2d986E334137b9ad0a0F290771F31e9517F', 18, 'WNEON', 'Wrapped NEON'), _WETH2[ChainId.NEON_MAINNET] = /*#__PURE__*/new Token(ChainId.NEON_MAINNET, '0x202C35e517Fa803B537565c40F0a6965D7204609', 18, 'WNEON', 'Wrapped NEON'), _WETH2[ChainId.Q] = /*#__PURE__*/new Token(ChainId.Q, '0xd07178e3eCbC78De110Df84fe1A979D5f349784a', 18, 'WQOV', 'Wrapped QOV'), _WETH2[ChainId.BITGERT] = /*#__PURE__*/new Token(ChainId.BITGERT, '0x0eb9036cbE0f052386f36170c6b07eF0a0E3f710', 18, 'WBRISE', 'Wrapped BRISE'), _WETH2[ChainId.WANCHAIN] = /*#__PURE__*/new Token(ChainId.WANCHAIN, '0xdabD997aE5E4799BE47d6E69D9431615CBa28f48', 18, 'WWAN', 'Wrapped WAN'), _WETH2[ChainId.METIS] = /*#__PURE__*/new Token(ChainId.METIS, '0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481', 18, 'WMETIS', 'Wrapped METIS'), _WETH2[ChainId.ASTAR] = /*#__PURE__*/new Token(ChainId.ASTAR, '0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720', 18, 'WASTR', 'Wrapped ASTR'), _WETH2[ChainId.ARTHERA_TESTNET] = /*#__PURE__*/new Token(ChainId.ARTHERA_TESTNET, '0x5A1750f9cb8A7E98e1FD618922Af276493318710', 18, 'WAA', 'Wrapped AA'), _WETH2[ChainId.ARTHERA] = /*#__PURE__*/new Token(ChainId.ARTHERA, '0x69D349E2009Af35206EFc3937BaD6817424729F7', 18, 'WAA', 'Wrapped AA'), _WETH2[ChainId.PULSECHAIN] = /*#__PURE__*/new Token(ChainId.PULSECHAIN, '0xA1077a294dDE1B09bB078844df40758a5D0f9a27', 18, 'WPLS', 'Wrapped PLS'), _WETH2[ChainId.BASE] = /*#__PURE__*/new Token(ChainId.BASE, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.VELAS] = /*#__PURE__*/new Token(ChainId.VELAS, '0xc579D1f3CF86749E05CD06f7ADe17856c2CE3126', 18, 'VLX', 'Wrapped VLX'), _WETH2[ChainId.LINEA] = /*#__PURE__*/new Token(ChainId.LINEA, '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.ROOTSTOCK] = /*#__PURE__*/new Token(ChainId.ROOTSTOCK, '0x542fda317318ebf1d3deaf76e0b632741a7e677d', 18, 'WRBTC', 'Wrapped BTC'), _WETH2[ChainId.BOBA] = /*#__PURE__*/new Token(ChainId.BOBA, '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.BOBA_BNB] = /*#__PURE__*/new Token(ChainId.BOBA_BNB, '0xC58aaD327D6D58D979882601ba8DDa0685B505eA', 18, 'WBOBA', 'Wrapped BOBA'), _WETH2[ChainId.AURORA] = /*#__PURE__*/new Token(ChainId.AURORA, '0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.ZKSYNC] = /*#__PURE__*/new Token(ChainId.ZKSYNC, '0x5aea5775959fbc2557cc8789bc1bf90a239d9a91', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.SCROLL] = /*#__PURE__*/new Token(ChainId.SCROLL, '0x5300000000000000000000000000000000000004', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.BLAST] = /*#__PURE__*/new Token(ChainId.BLAST, '0x4300000000000000000000000000000000000004', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.OPBNB] = /*#__PURE__*/new Token(ChainId.OPBNB, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.MANTLE] = /*#__PURE__*/new Token(ChainId.MANTLE, '0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8', 18, 'WMNT', 'Wrapped MNT'), _WETH2[ChainId.POLYGON_ZKEVM] = /*#__PURE__*/new Token(ChainId.POLYGON_ZKEVM, '0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9', 18, 'WETH', 'Wrapped ETH'), _WETH2[ChainId.BERA] = /*#__PURE__*/new Token(ChainId.BERA, '0x6969696969696969696969696969696969696969', 18, 'WBERA', 'Wrapped BERA'), _WETH2[ChainId.SONIC] = /*#__PURE__*/new Token(ChainId.SONIC, '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38', 18, 'WS', 'Wrapped S'), _WETH2[ChainId.EXPCHAIN_TESTNET] = /*#__PURE__*/new Token(ChainId.EXPCHAIN_TESTNET, '0x46F2038afa5CDD1a8CD444DB923279ADe1208a48', 18, 'WTZKJ', 'Wrapped TZKJ'), _WETH2[ChainId.CYTONIC_TESTNET] = /*#__PURE__*/new Token(ChainId.CYTONIC_TESTNET, '0x30fDf316f8DFA2F0d10c7e2F900F43979ca4C60a', 18, 'WCCC', 'Wrapped CCC'), _WETH2);
var _CETH, _CETH_NAME, _CETH_NAME_ROUTER;
/**
* Ether is the main usage of a 'native' currency, i.e. for Ethereum mainnet and all testnets
*/
var Ether = /*#__PURE__*/function (_NativeCurrency) {
_inheritsLoose(Ether, _NativeCurrency);
function Ether(chainId) {
return _NativeCurrency.call(this, chainId, 18, 'ETH', 'Ether') || this;
}
Ether.onChain = function onChain(chainId) {
var _this$_etherCache$cha;
return (_this$_etherCache$cha = this._etherCache[chainId]) !== null && _this$_etherCache$cha !== void 0 ? _this$_etherCache$cha : this._etherCache[chainId] = new Ether(chainId);
};
var _proto = Ether.prototype;
_proto.equals = function equals(other) {
return other.isNative && other.chainId === this.chainId;
};
_createClass(Ether, [{
key: "wrapped",
get: function get() {
var weth9 = WETH9[this.chainId];
!!!weth9 ? process.env.NODE_ENV !== "production" ? invariant(false, 'WRAPPED') : invariant(false) : void 0;
return weth9;
}
}]);
return Ether;
}(NativeCurrency);
Ether._etherCache = {}; //@todo merge CETH with Ether
var CETH = (_CETH = {}, _CETH[ChainId.MUMBAI] = /*#__PURE__*/new Token(ChainId.MUMBAI, ZERO_ADDRESS, 18, 'MATIC', 'Matic'), _CETH[ChainId.MATIC] = /*#__PURE__*/new Token(ChainId.MATIC, ZERO_ADDRESS, 18, 'MATIC', 'Matic'), _CETH[ChainId.FUJI] = /*#__PURE__*/new Token(ChainId.AVALANCHE, ZERO_ADDRESS, 18, 'AVAX', 'Avalanche'), _CETH[ChainId.AVALANCHE] = /*#__PURE__*/new Token(ChainId.AVALANCHE, ZERO_ADDRESS, 18, 'AVAX', 'Avalanche'), _CETH[ChainId.FANTOM_TESTNET] = /*#__PURE__*/new Token(ChainId.FANTOM_TESTNET, ZERO_ADDRESS, 18, 'FTM', 'Fantom'), _CETH[ChainId.FANTOM] = /*#__PURE__*/new Token(ChainId.FANTOM, ZERO_ADDRESS, 18, 'FTM', 'Fantom'), _CETH[ChainId.HUOBIECO_TESTNET] = /*#__PURE__*/new Token(ChainId.HUOBIECO_TESTNET, ZERO_ADDRESS, 18, 'HT', 'Huobi ECO'), _CETH[ChainId.HUOBIECO] = /*#__PURE__*/new Token(ChainId.HUOBIECO, ZERO_ADDRESS, 18, 'HT', 'Huobi ECO'), _CETH[ChainId.REEF] = /*#__PURE__*/new Token(ChainId.REEF, ZERO_ADDRESS, 18, 'REEF', 'Reef'), _CETH[ChainId.XDAI] = /*#__PURE__*/new Token(ChainId.XDAI, ZERO_ADDRESS, 18, 'XDAI', 'xDai'), _CETH[ChainId.FUSE] = /*#__PURE__*/new Token(ChainId.FUSE, ZERO_ADDRESS, 18, 'FUSE', 'Fuse'), _CETH[ChainId.OPTIMISM] = /*#__PURE__*/new Token(ChainId.OPTIMISM, ZERO_ADDRESS, 18, 'ETH', 'Optimism'), _CETH[ChainId.OPTIMISM_TESTNET] = /*#__PURE__*/new Token(ChainId.OPTIMISM_TESTNET, ZERO_ADDRESS, 18, 'ETH', 'Optimism'), _CETH[ChainId.KUCOIN] = /*#__PURE__*/new Token(ChainId.KUCOIN, ZERO_ADDRESS, 18, 'KCS', 'Kucoin'), _CETH[ChainId.KUCOIN_TESTNET] = /*#__PURE__*/new Token(ChainId.KUCOIN_TESTNET, ZERO_ADDRESS, 18, 'tKCS', 'Kucoin'), _CETH[ChainId.ETHERLITE] = /*#__PURE__*/new Token(ChainId.ETHERLITE, ZERO_ADDRESS, 18, 'ETL', 'Etherlite'), _CETH[ChainId.ETHEREUM_CLASSIC] = /*#__PURE__*/new Token(ChainId.ETHEREUM_CLASSIC, ZERO_ADDRESS, 18, 'ETC', 'Ethereum Classic'), _CETH[ChainId.ETHEREUM_CLASSIC_TESTNET] = /*#__PURE__*/new Token(ChainId.ETHEREUM_CLASSIC_TESTNET, ZERO_ADDRESS, 18, 'CETC', 'Ethereum Classic'), _CETH[ChainId.MOONBEAM] = /*#__PURE__*/new Token(ChainId.MOONBEAM, ZERO_ADDRESS, 18, 'GLMR', 'Moonbeam'), _CETH[ChainId.MOONBEAM_TESTNET] = /*#__PURE__*/new Token(ChainId.MOONBEAM_TESTNET, ZERO_ADDRESS, 18, 'DEV', 'Moonbeam'), _CETH[ChainId.CLOVER] = /*#__PURE__*/new Token(ChainId.CLOVER, ZERO_ADDRESS, 18, 'CLV', 'Clover'), _CETH[ChainId.CLOVER_TESTNET] = /*#__PURE__*/new Token(ChainId.CLOVER_TESTNET, ZERO_ADDRESS, 18, 'CLV', 'Clover'), _CETH[ChainId.CELO] = /*#__PURE__*/new Token(ChainId.CELO, ZERO_ADDRESS, 18, 'CELO', 'Celo'), _CETH[ChainId.ALFAJORES] = /*#__PURE__*/new Token(ChainId.ALFAJORES, ZERO_ADDRESS, 18, 'CELO', 'Celo'), _CETH[ChainId.ARBITRUM_TESTNET] = /*#__PURE__*/new Token(ChainId.ARBITRUM_TESTNET, ZERO_ADDRESS, 18, 'ETH', 'Arbitrum'), _CETH[ChainId.ARBITRUM] = /*#__PURE__*/new Token(ChainId.ARBITRUM, ZERO_ADDRESS, 18, 'ETH', 'Arbitrum'), _CETH[ChainId.FLARE] = /*#__PURE__*/new Token(ChainId.FLARE, ZERO_ADDRESS, 18, 'FLR', 'Flare'), _CETH[ChainId.FLARE_TESTNET] = /*#__PURE__*/new Token(ChainId.FLARE_TESTNET, ZERO_ADDRESS, 18, 'CFLR', 'Flare'), _CETH[ChainId.FUSION] = /*#__PURE__*/new Token(ChainId.FUSION, ZERO_ADDRESS, 18, 'FSN', 'Fusion'), _CETH[ChainId.HARMONY] = /*#__PURE__*/new Token(ChainId.HARMONY, ZERO_ADDRESS, 18, 'ONE', 'Harmony'), _CETH[ChainId.OKEX] = /*#__PURE__*/new Token(ChainId.OKEX, ZERO_ADDRESS, 18, 'OKT', 'OKEx'), _CETH[ChainId.IOTEX] = /*#__PURE__*/new Token(ChainId.IOTEX, ZERO_ADDRESS, 18, 'IOTX', 'IoTeX'), _CETH[ChainId.HOO] = /*#__PURE__*/new Token(ChainId.HOO, ZERO_ADDRESS, 18, 'HOO', 'HOO'), _CETH[ChainId.ELAETH] = /*#__PURE__*/new Token(ChainId.ELAETH, ZERO_ADDRESS, 18, 'ELA', 'ELA'), _CETH[ChainId.MOONRIVER] = /*#__PURE__*/new Token(ChainId.MOONRIVER, ZERO_ADDRESS, 18, 'MOVR', 'MOVR'), _CETH[ChainId.TELOS] = /*#__PURE__*/new Token(ChainId.TELOS, ZERO_ADDRESS, 18, 'TLOS', 'TLOS'), _CETH[ChainId.CRONOS] = /*#__PURE__*/new Token(ChainId.CRONOS, ZERO_ADDRESS, 18, 'CRO', 'CRO'), _CETH[ChainId.KAVA] = /*#__PURE__*/new Token(ChainId.KAVA, ZERO_ADDRESS, 18, 'KAVA', 'Kava'), _CETH[ChainId.BTTC] = /*#__PURE__*/new Token(ChainId.BTTC, ZERO_ADDRESS, 18, 'BTT', 'BTT'), _CETH[ChainId.BTTC_TESTNET] = /*#__PURE__*/new Token(ChainId.BTTC_TESTNET, ZERO_ADDRESS, 18, 'BTT', 'BTT'), _CETH[ChainId.BINANCE_TESTNET] = /*#__PURE__*/new Token(ChainId.BINANCE_TESTNET, ZERO_ADDRESS, 18, 'BSC', 'Binance'), _CETH[ChainId.BINANCE] = /*#__PURE__*/new Token(ChainId.BINANCE, ZERO_ADDRESS, 18, 'BNB', 'Binance'), _CETH[ChainId.ROPSTEN] = /*#__PURE__*/new Token(ChainId.ROPSTEN, ZERO_ADDRESS, 18, 'ETH', 'Ethereum'), _CETH[ChainId.ETHEREUM] = /*#__PURE__*/new Token(ChainId.ETHEREUM, ZERO_ADDRESS, 18, 'ETH', 'Ethereum'), _CETH[ChainId.NEON_TESTNET] = /*#__PURE__*/new Token(ChainId.NEON_TESTNET, ZERO_ADDRESS, 18, 'NEON', 'Neon'), _CETH[ChainId.NEON_MAINNET] = /*#__PURE__*/new Token(ChainId.NEON_MAINNET, ZERO_ADDRESS, 18, 'NEON', 'Neon'), _CETH[ChainId.Q] = /*#__PURE__*/new Token(ChainId.Q, ZERO_ADDRESS, 18, 'QGOV', 'QGOV'), _CETH[ChainId.BITGERT] = /*#__PURE__*/new Token(ChainId.BITGERT, ZERO_ADDRESS, 18, 'BRISE', 'Brise'), _CETH[ChainId.WANCHAIN] = /*#__PURE__*/new Token(ChainId.WANCHAIN, ZERO_ADDRESS, 18, 'WAN', 'WAN'), _CETH[ChainId.METIS] = /*#__PURE__*/new Token(ChainId.METIS, ZERO_ADDRESS, 18, 'METIS', 'METIS'), _CETH[ChainId.ASTAR] = /*#__PURE__*/new Token(ChainId.ASTAR, ZERO_ADDRESS, 18, 'ASTR', 'Astar'), _CETH[ChainId.ARTHERA_TESTNET] = /*#__PURE__*/new Token(ChainId.ARTHERA_TESTNET, ZERO_ADDRESS, 18, 'AA', 'Arthera'), _CETH[ChainId.ARTHERA] = /*#__PURE__*/new Token(ChainId.ARTHERA, ZERO_ADDRESS, 18, 'AA', 'Arthera'), _CETH[ChainId.PULSECHAIN] = /*#__PURE__*/new Token(ChainId.PULSECHAIN, ZERO_ADDRESS, 18, 'PLS', 'Pulse'), _CETH[ChainId.BASE] = /*#__PURE__*/new Token(ChainId.BASE, ZERO_ADDRESS, 18, 'ETH', 'Ethereum'), _CETH[ChainId.VELAS] = /*#__PURE__*/new Token(ChainId.VELAS, ZERO_ADDRESS, 18, 'VLX', 'Velas'), _CETH[ChainId.LINEA] = /*#__PURE__*/new Token(ChainId.LINEA, ZERO_ADDRESS, 18, 'ETH', 'Ethereum'), _CETH[ChainId.ROOTSTOCK] = /*#__PURE__*/new Token(ChainId.ROOTSTOCK, ZERO_ADDRESS, 18, 'RBTC', 'Rootstock'), _CETH[ChainId.BOBA] = /*#__PURE__*/new Token(ChainId.BOBA, ZERO_ADDRESS, 18, 'ETH', 'Boba ETH'), _CETH[ChainId.BOBA_BNB] = /*#__PURE__*/new Token(ChainId.BOBA_BNB, ZERO_ADDRESS, 18, 'BOBA', 'Boba BNB'), _CETH[ChainId.AURORA] = /*#__PURE__*/new Token(ChainId.AURORA, ZERO_ADDRESS, 18, 'ETH', 'Aurora'), _CETH[ChainId.ZKSYNC] = /*#__PURE__*/new Token(ChainId.ZKSYNC, ZERO_ADDRESS, 18, 'ETH', 'ZkSync'), _CETH[ChainId.SCROLL] = /*#__PURE__*/new Token(ChainId.SCROLL, ZERO_ADDRESS, 18, 'ETH', 'Scroll'), _CETH[ChainId.BLAST] = /*#__PURE__*/new Token(ChainId.BLAST, ZERO_ADDRESS, 18, 'ETH', 'Blast'), _CETH[ChainId.OPBNB] = /*#__PURE__*/new Token(ChainId.OPBNB, ZERO_ADDRESS, 18, 'BNB', 'opBNB'), _CETH[ChainId.MANTLE] = /*#__PURE__*/new Token(ChainId.MANTLE, ZERO_ADDRESS, 18, 'MNT', 'Mantle'), _CETH[ChainId.POLYGON_ZKEVM] = /*#__PURE__*/new Token(ChainId.POLYGON_ZKEVM, ZERO_ADDRESS, 18, 'ETH', 'Polygon zkEVM'), _CETH);
var CETH_NAME = (_CETH_NAME = {}, _CETH_NAME[ChainId.MUMBAI] = 'MATIC', _CETH_NAME[ChainId.MATIC] = 'POL', _CETH_NAME[ChainId.FUJI] = 'AVAX', _CETH_NAME[ChainId.AVALANCHE] = 'AVAX', _CETH_NAME[ChainId.FANTOM_TESTNET] = 'FTM', _CETH_NAME[ChainId.FANTOM] = 'FTM', _CETH_NAME[ChainId.HUOBIECO_TESTNET] = 'HT', _CETH_NAME[ChainId.HUOBIECO] = 'HT', _CETH_NAME[ChainId.REEF] = 'REEF', _CETH_NAME[ChainId.XDAI] = 'xDAI', _CETH_NAME[ChainId.FUSE] = 'FUSE', _CETH_NAME[ChainId.OPTIMISM] = 'ETH', _CETH_NAME[ChainId.OPTIMISM_TESTNET] = 'KOR', _CETH_NAME[ChainId.KUCOIN] = 'KCS', _CETH_NAME[ChainId.KUCOIN_TESTNET] = 'tKCS', _CETH_NAME[ChainId.ETHERLITE] = 'ETL', _CETH_NAME[ChainId.ETHEREUM_CLASSIC] = 'ETC', _CETH_NAME[ChainId.ETHEREUM_CLASSIC_TESTNET] = 'CETC', _CETH_NAME[ChainId.MOONBEAM_TESTNET] = 'DEV', _CETH_NAME[ChainId.CLOVER_TESTNET] = 'CLV', _CETH_NAME[ChainId.CELO] = 'CELO', _CETH_NAME[ChainId.ALFAJORES] = 'CELO', _CETH_NAME[ChainId.ARBITRUM_TESTNET] = 'ETH', _CETH_NAME[ChainId.ARBITRUM] = 'ETH', _CETH_NAME[ChainId.FLARE] = 'FLR', _CETH_NAME[ChainId.FLARE_TESTNET] = 'CFLR', _CETH_NAME[ChainId.FUSION] = 'FSN', _CETH_NAME[ChainId.HARMONY] = 'ONE', _CETH_NAME[ChainId.OKEX] = 'OKT', _CETH_NAME[ChainId.IOTEX] = 'IOTX', _CETH_NAME[ChainId.HOO] = 'HOO', _CETH_NAME[ChainId.ELAETH] = 'ELA', _CETH_NAME[ChainId.MOONRIVER] = 'MOVR', _CETH_NAME[ChainId.TELOS] = 'TLOS', _CETH_NAME[ChainId.CRONOS] = 'CRO', _CETH_NAME[ChainId.KAVA] = 'KAVA', _CETH_NAME[ChainId.BTTC] = 'BTT', _CETH_NAME[ChainId.BTTC_TESTNET] = 'BTT', _CETH_NAME[ChainId.BINANCE_TESTNET] = 'BNB', _CETH_NAME[ChainId.BINANCE] = 'BNB', _CETH_NAME[ChainId.ROPSTEN] = 'ETH', _CETH_NAME[ChainId.ETHEREUM] = 'ETH', _CETH_NAME[ChainId.NEON_TESTNET] = 'tNEON', _CETH_NAME[ChainId.NEON_MAINNET] = 'NEON', _CETH_NAME[ChainId.Q] = 'QGOV', _CETH_NAME[ChainId.BITGERT] = 'BRISE', _CETH_NAME[ChainId.WANCHAIN] = 'WAN', _CETH_NAME[ChainId.METIS] = 'METIS', _CETH_NAME[ChainId.ASTAR] = 'ASTR', _CETH_NAME[ChainId.ARTHERA_TESTNET] = 'AA', _CETH_NAME[ChainId.ARTHERA] = 'AA', _CETH_NAME[ChainId.PULSECHAIN] = 'PLS', _CETH_NAME[ChainId.BASE] = 'ETH', _CETH_NAME[ChainId.VELAS] = 'VLX', _CETH_NAME[ChainId.LINEA] = 'ETH', _CETH_NAME[ChainId.ROOTSTOCK] = 'RBTC', _CETH_NAME[ChainId.BOBA] = 'ETH', _CETH_NAME[ChainId.BOBA_BNB] = 'BOBA', _CETH_NAME[ChainId.AURORA] = 'ETH', _CETH_NAME[ChainId.CLOVER] = 'CLV', _CETH_NAME[ChainId.ZKSYNC] = 'ETH', _CETH_NAME[ChainId.SCROLL] = 'ETH', _CETH_NAME[ChainId.BLAST] = 'ETH', _CETH_NAME[ChainId.OPBNB] = 'ETH', _CETH_NAME[ChainId.MOONBEAM] = 'GLMR', _CETH_NAME[ChainId.MANTLE] = 'MNT', _CETH_NAME[ChainId.POLYGON_ZKEVM] = 'ETH', _CETH_NAME[ChainId.BERA] = 'BERA', _CETH_NAME[ChainId.SONIC] = 'S', _CETH_NAME[ChainId.EXPCHAIN_TESTNET] = 'TZKJ', _CETH_NAME[ChainId.CYTONIC_TESTNET] = 'CCC', _CETH_NAME);
var CETH_NAME_ROUTER = (_CETH_NAME_ROUTER = {}, _CETH_NAME_ROUTER[ChainId.MUMBAI] = 'MATIC', _CETH_NAME_ROUTER[ChainId.MATIC] = 'MATIC', _CETH_NAME_ROUTER[ChainId.FUJI] = 'AVAX', _CETH_NAME_ROUTER[ChainId.AVALANCHE] = 'AVAX', _CETH_NAME_ROUTER[ChainId.FANTOM_TESTNET] = 'FTM', _CETH_NAME_ROUTER[ChainId.FANTOM] = 'FTM', _CETH_NAME_ROUTER[ChainId.HUOBIECO_TESTNET] = 'HT', _CETH_NAME_ROUTER[ChainId.HUOBIECO] = 'HT', _CETH_NAME_ROUTER[ChainId.REEF] = 'ETH', _CETH_NAME_ROUTER[ChainId.XDAI] = 'xDAI', _CETH_NAME_ROUTER[ChainId.FUSE] = 'ETH', _CETH_NAME_ROUTER[ChainId.OPTIMISM] = 'ETH', _CETH_NAME_ROUTER[ChainId.OPTIMISM_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.KUCOIN] = 'ETH', _CETH_NAME_ROUTER[ChainId.KUCOIN_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.ETHERLITE] = 'ETH', _CETH_NAME_ROUTER[ChainId.ETHEREUM_CLASSIC] = 'ETH', _CETH_NAME_ROUTER[ChainId.ETHEREUM_CLASSIC_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.MOONBEAM_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.CLOVER_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.CELO] = 'ETH', _CETH_NAME_ROUTER[ChainId.ALFAJORES] = 'ETH', _CETH_NAME_ROUTER[ChainId.ARBITRUM_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.ARBITRUM] = 'ETH', _CETH_NAME_ROUTER[ChainId.FLARE] = 'ETH', _CETH_NAME_ROUTER[ChainId.FLARE_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.FUSION] = 'ETH', _CETH_NAME_ROUTER[ChainId.HARMONY] = 'ETH', _CETH_NAME_ROUTER[ChainId.OKEX] = 'ETH', _CETH_NAME_ROUTER[ChainId.IOTEX] = 'ETH', _CETH_NAME_ROUTER[ChainId.HOO] = 'ETH', _CETH_NAME_ROUTER[ChainId.ELAETH] = 'ETH', _CETH_NAME_ROUTER[ChainId.MOONRIVER] = 'ETH', _CETH_NAME_ROUTER[ChainId.TELOS] = 'ETH', _CETH_NAME_ROUTER[ChainId.CRONOS] = 'ETH', _CETH_NAME_ROUTER[ChainId.KAVA] = 'ETH', _CETH_NAME_ROUTER[ChainId.BTTC] = 'ETH', _CETH_NAME_ROUTER[ChainId.BTTC_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.BINANCE_TESTNET] = 'BNB', _CETH_NAME_ROUTER[ChainId.BINANCE] = 'BNB', _CETH_NAME_ROUTER[ChainId.ROPSTEN] = 'ETH', _CETH_NAME_ROUTER[ChainId.ETHEREUM] = 'ETH', _CETH_NAME_ROUTER[ChainId.NEON_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.NEON_MAINNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.Q] = 'ETH', _CETH_NAME_ROUTER[ChainId.BITGERT] = 'ETH', _CETH_NAME_ROUTER[ChainId.WANCHAIN] = 'ETH', _CETH_NAME_ROUTER[ChainId.METIS] = 'ETH', _CETH_NAME_ROUTER[ChainId.ASTAR] = 'ETH', _CETH_NAME_ROUTER[ChainId.ARTHERA_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.ARTHERA] = 'ETH', _CETH_NAME_ROUTER[ChainId.PULSECHAIN] = 'ETH', _CETH_NAME_ROUTER[ChainId.BASE] = 'ETH', _CETH_NAME_ROUTER[ChainId.VELAS] = 'ETH', _CETH_NAME_ROUTER[ChainId.LINEA] = 'ETH', _CETH_NAME_ROUTER[ChainId.ROOTSTOCK] = 'ETH', _CETH_NAME_ROUTER[ChainId.BOBA] = 'ETH', _CETH_NAME_ROUTER[ChainId.BOBA_BNB] = 'ETH', _CETH_NAME_ROUTER[ChainId.AURORA] = 'ETH', _CETH_NAME_ROUTER[ChainId.CLOVER] = 'ETH', _CETH_NAME_ROUTER[ChainId.ZKSYNC] = 'ETH', _CETH_NAME_ROUTER[ChainId.SCROLL] = 'ETH', _CETH_NAME_ROUTER[ChainId.BLAST] = 'ETH', _CETH_NAME_ROUTER[ChainId.OPBNB] = 'ETH', _CETH_NAME_ROUTER[ChainId.MOONBEAM] = 'ETH', _CETH_NAME_ROUTER[ChainId.MANTLE] = 'ETH', _CETH_NAME_ROUTER[ChainId.POLYGON_ZKEVM] = 'ETH', _CETH_NAME_ROUTER[ChainId.BERA] = 'ETH', _CETH_NAME_ROUTER[ChainId.SONIC] = 'ETH', _CETH_NAME_ROUTER[ChainId.EXPCHAIN_TESTNET] = 'ETH', _CETH_NAME_ROUTER[ChainId.CYTONIC_TESTNET] = 'ETH', _CETH_NAME_ROUTER);
/**
* Returns the percent d