diff --git a/lib/js/packages/reef-mobile-js/dist/index.js b/lib/js/packages/reef-mobile-js/dist/index.js index d4219083..335202fc 100644 --- a/lib/js/packages/reef-mobile-js/dist/index.js +++ b/lib/js/packages/reef-mobile-js/dist/index.js @@ -48,9 +48,9 @@ } }); - // ../../node_modules/ws/browser.js + // node_modules/ws/browser.js var require_browser = __commonJS({ - "../../node_modules/ws/browser.js"(exports2, module2) { + "node_modules/ws/browser.js"(exports2, module2) { "use strict"; module2.exports = function() { throw new Error( @@ -11049,7 +11049,7 @@ ${formatDisplay(all, fmt)}`); } function memoize(fn2, { getInstanceId = defaultGetId } = {}) { const cache = {}; - const memoized2 = (...args) => { + const memoized = (...args) => { const stringParams = (0, stringify_js_1.stringify)(args); const instanceId = getInstanceId(); if (!cache[instanceId]) { @@ -11060,14 +11060,14 @@ ${formatDisplay(all, fmt)}`); } return cache[instanceId][stringParams]; }; - memoized2.unmemoize = (...args) => { + memoized.unmemoize = (...args) => { const stringParams = (0, stringify_js_1.stringify)(args); const instanceId = getInstanceId(); if (cache[instanceId]?.[stringParams] !== void 0) { delete cache[instanceId][stringParams]; } }; - return memoized2; + return memoized; } exports2.memoize = memoize; } @@ -18996,14 +18996,14 @@ ${formatDisplay(all, fmt)}`); var UNSORTED5 = [0, 2, 42]; var TESTNETS5 = ["testnet"]; function toExpanded5(o) { - const network3 = o.network || ""; - const nameParts = network3.replace(/_/g, "-").split("-"); + const network2 = o.network || ""; + const nameParts = network2.replace(/_/g, "-").split("-"); const n = o; - n.slip44 = index_js_1.knownLedger[network3]; + n.slip44 = index_js_1.knownLedger[network2]; n.hasLedgerSupport = !!n.slip44; - n.genesisHash = index_js_1.knownGenesis[network3] || []; - n.icon = index_js_1.knownIcon[network3] || "substrate"; - n.isTestnet = !!index_js_1.knownTestnet[network3] || TESTNETS5.includes(nameParts[nameParts.length - 1]); + n.genesisHash = index_js_1.knownGenesis[network2] || []; + n.icon = index_js_1.knownIcon[network2] || "substrate"; + n.isTestnet = !!index_js_1.knownTestnet[network2] || TESTNETS5.includes(nameParts[nameParts.length - 1]); n.isIgnored = n.isTestnet || !(o.standardAccount && o.decimals?.length && o.symbols?.length) && o.prefix !== 42; return n; } @@ -19667,15 +19667,14 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/utils.js + // ../../node_modules/@noble/curves/abstract/utils.js var require_utils2 = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/utils.js"(exports2) { + "../../node_modules/@noble/curves/abstract/utils.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.notImplemented = exports2.bitMask = void 0; + exports2.bitMask = void 0; exports2.isBytes = isBytes8; exports2.abytes = abytes2; - exports2.abool = abool2; exports2.bytesToHex = bytesToHex3; exports2.numberToHexUnpadded = numberToHexUnpadded3; exports2.hexToNumber = hexToNumber3; @@ -19689,14 +19688,11 @@ ${formatDisplay(all, fmt)}`); exports2.concatBytes = concatBytes4; exports2.equalBytes = equalBytes2; exports2.utf8ToBytes = utf8ToBytes5; - exports2.inRange = inRange2; - exports2.aInRange = aInRange2; exports2.bitLen = bitLen2; exports2.bitGet = bitGet2; exports2.bitSet = bitSet2; exports2.createHmacDrbg = createHmacDrbg2; exports2.validateObject = validateObject2; - exports2.memoized = memoized2; var _0n10 = /* @__PURE__ */ BigInt(0); var _1n10 = /* @__PURE__ */ BigInt(1); var _2n8 = /* @__PURE__ */ BigInt(2); @@ -19707,10 +19703,6 @@ ${formatDisplay(all, fmt)}`); if (!isBytes8(item)) throw new Error("Uint8Array expected"); } - function abool2(title, value) { - if (typeof value !== "boolean") - throw new Error(`${title} must be valid boolean, got "${value}".`); - } var hexes4 = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0")); function bytesToHex3(bytes5) { abytes2(bytes5); @@ -19820,14 +19812,6 @@ ${formatDisplay(all, fmt)}`); throw new Error(`utf8ToBytes expected string, got ${typeof str2}`); return new Uint8Array(new TextEncoder().encode(str2)); } - var isPosBig2 = (n) => typeof n === "bigint" && _0n10 <= n; - function inRange2(n, min, max2) { - return isPosBig2(n) && isPosBig2(min) && isPosBig2(max2) && min <= n && n < max2; - } - function aInRange2(title, n, min, max2) { - if (!inRange2(n, min, max2)) - throw new Error(`expected valid ${title}: ${min} <= n < ${max2}, got ${typeof n} ${n}`); - } function bitLen2(n) { let len; for (len = 0; n > _0n10; n >>= _1n10, len += 1) @@ -19921,27 +19905,12 @@ ${formatDisplay(all, fmt)}`); checkField(fieldName, type, true); return object; } - var notImplemented2 = () => { - throw new Error("not implemented"); - }; - exports2.notImplemented = notImplemented2; - function memoized2(fn2) { - const map2 = /* @__PURE__ */ new WeakMap(); - return (arg, ...args) => { - const val = map2.get(arg); - if (val !== void 0) - return val; - const computed = fn2(arg, ...args); - map2.set(arg, computed); - return computed; - }; - } } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/modular.js + // ../../node_modules/@noble/curves/abstract/modular.js var require_modular = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/modular.js"(exports2) { + "../../node_modules/@noble/curves/abstract/modular.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.isNegativeLE = void 0; @@ -19955,7 +19924,6 @@ ${formatDisplay(all, fmt)}`); exports2.FpPow = FpPow2; exports2.FpInvertBatch = FpInvertBatch2; exports2.FpDiv = FpDiv; - exports2.FpLegendre = FpLegendre; exports2.FpIsSquare = FpIsSquare; exports2.nLength = nLength2; exports2.Field = Field2; @@ -20160,14 +20128,10 @@ ${formatDisplay(all, fmt)}`); function FpDiv(f10, lhs, rhs) { return f10.mul(lhs, typeof rhs === "bigint" ? invert3(rhs, f10.ORDER) : f10.inv(rhs)); } - function FpLegendre(order) { - const legendreConst = (order - _1n10) / _2n8; - return (f10, x) => f10.pow(x, legendreConst); - } function FpIsSquare(f10) { - const legendre = FpLegendre(f10.ORDER); + const legendreConst = (f10.ORDER - _1n10) / _2n8; return (x) => { - const p = legendre(f10, x); + const p = f10.pow(x, legendreConst); return f10.eql(p, f10.ZERO) || f10.eql(p, f10.ONE); }; } @@ -20267,9 +20231,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/curve.js + // ../../node_modules/@noble/curves/abstract/curve.js var require_curve = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/curve.js"(exports2) { + "../../node_modules/@noble/curves/abstract/curve.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.wNAF = wNAF2; @@ -20278,19 +20242,12 @@ ${formatDisplay(all, fmt)}`); var utils_js_1 = require_utils2(); var _0n10 = BigInt(0); var _1n10 = BigInt(1); - var pointPrecomputes3 = /* @__PURE__ */ new WeakMap(); - var pointWindowSizes2 = /* @__PURE__ */ new WeakMap(); function wNAF2(c, bits2) { const constTimeNegate = (condition, item) => { const neg3 = item.negate(); return condition ? neg3 : item; }; - const validateW = (W) => { - if (!Number.isSafeInteger(W) || W <= 0 || W > bits2) - throw new Error(`Wrong window size=${W}, should be [1..${bits2}]`); - }; const opts = (W) => { - validateW(W); const windows = Math.ceil(bits2 / W) + 1; const windowSize = 2 ** (W - 1); return { windows, windowSize }; @@ -20351,20 +20308,16 @@ ${formatDisplay(all, fmt)}`); } return { p, f: f10 }; }, - wNAFCached(P, n, transform) { - const W = pointWindowSizes2.get(P) || 1; - let comp = pointPrecomputes3.get(P); + wNAFCached(P, precomputesMap, n, transform) { + const W = P._WINDOW_SIZE || 1; + let comp = precomputesMap.get(P); if (!comp) { comp = this.precomputeWindow(P, W); - if (W !== 1) - pointPrecomputes3.set(P, transform(comp)); + if (W !== 1) { + precomputesMap.set(P, transform(comp)); + } } return this.wNAF(W, comp, n); - }, - setWindowSize(P, W) { - validateW(W); - pointWindowSizes2.set(P, W); - pointPrecomputes3.delete(P); } }; } @@ -20388,9 +20341,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/weierstrass.js + // ../../node_modules/@noble/curves/abstract/weierstrass.js var require_weierstrass = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/weierstrass.js"(exports2) { + "../../node_modules/@noble/curves/abstract/weierstrass.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.DER = void 0; @@ -20402,12 +20355,6 @@ ${formatDisplay(all, fmt)}`); var mod3 = require_modular(); var ut = require_utils2(); var utils_js_1 = require_utils2(); - function validateSigVerOpts2(opts) { - if (opts.lowS !== void 0) - (0, utils_js_1.abool)("lowS", opts.lowS); - if (opts.prehash !== void 0) - (0, utils_js_1.abool)("prehash", opts.prehash); - } function validatePointOpts2(curve) { const opts = (0, curve_js_1.validateBasic)(curve); ut.validateObject(opts, { @@ -20511,10 +20458,14 @@ ${formatDisplay(all, fmt)}`); if (!Fp3.eql(Fp3.sqr(CURVE2.Gy), weierstrassEquation(CURVE2.Gx))) throw new Error("bad generator point: equation left != right"); function isWithinCurveOrder2(num) { - return ut.inRange(num, _1n10, CURVE2.n); + return typeof num === "bigint" && _0n10 < num && num < CURVE2.n; + } + function assertGE(num) { + if (!isWithinCurveOrder2(num)) + throw new Error("Expected valid bigint: 0 < bigint < curve.n"); } function normPrivateKeyToScalar(key2) { - const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N11 } = CURVE2; + const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE2; if (lengths && typeof key2 !== "bigint") { if (ut.isBytes(key2)) key2 = ut.bytesToHex(key2); @@ -20529,47 +20480,15 @@ ${formatDisplay(all, fmt)}`); throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key2}`); } if (wrapPrivateKey) - num = mod3.mod(num, N11); - ut.aInRange("private key", num, _1n10, N11); + num = mod3.mod(num, n); + assertGE(num); return num; } + const pointPrecomputes2 = /* @__PURE__ */ new Map(); function assertPrjPoint(other) { if (!(other instanceof Point4)) throw new Error("ProjectivePoint expected"); } - const toAffineMemo = (0, utils_js_1.memoized)((p, iz2) => { - const { px: x, py: y, pz: z } = p; - if (Fp3.eql(z, Fp3.ONE)) - return { x, y }; - const is0 = p.is0(); - if (iz2 == null) - iz2 = is0 ? Fp3.ONE : Fp3.inv(z); - const ax2 = Fp3.mul(x, iz2); - const ay2 = Fp3.mul(y, iz2); - const zz2 = Fp3.mul(z, iz2); - if (is0) - return { x: Fp3.ZERO, y: Fp3.ZERO }; - if (!Fp3.eql(zz2, Fp3.ONE)) - throw new Error("invZ was invalid"); - return { x: ax2, y: ay2 }; - }); - const assertValidMemo = (0, utils_js_1.memoized)((p) => { - if (p.is0()) { - if (CURVE2.allowInfinityPoint && !Fp3.is0(p.py)) - return; - throw new Error("bad point: ZERO"); - } - const { x, y } = p.toAffine(); - if (!Fp3.isValid(x) || !Fp3.isValid(y)) - throw new Error("bad point: x or y not FE"); - const left = Fp3.sqr(y); - const right = weierstrassEquation(x); - if (!Fp3.eql(left, right)) - throw new Error("bad point: equation left != right"); - if (!p.isTorsionFree()) - throw new Error("bad point: not in prime-order subgroup"); - return true; - }); class Point4 { constructor(px2, py2, pz2) { this.px = px2; @@ -20581,7 +20500,6 @@ ${formatDisplay(all, fmt)}`); throw new Error("y required"); if (pz2 == null || !Fp3.isValid(pz2)) throw new Error("z required"); - Object.freeze(this); } static fromAffine(p) { const { x, y } = p || {}; @@ -20613,10 +20531,24 @@ ${formatDisplay(all, fmt)}`); return Point4.BASE.multiply(normPrivateKeyToScalar(privateKey)); } _setWindowSize(windowSize) { - wnaf.setWindowSize(this, windowSize); + this._WINDOW_SIZE = windowSize; + pointPrecomputes2.delete(this); } assertValidity() { - assertValidMemo(this); + if (this.is0()) { + if (CURVE2.allowInfinityPoint && !Fp3.is0(this.py)) + return; + throw new Error("bad point: ZERO"); + } + const { x, y } = this.toAffine(); + if (!Fp3.isValid(x) || !Fp3.isValid(y)) + throw new Error("bad point: x or y not FE"); + const left = Fp3.sqr(y); + const right = weierstrassEquation(x); + if (!Fp3.eql(left, right)) + throw new Error("bad point: equation left != right"); + if (!this.isTorsionFree()) + throw new Error("bad point: not in prime-order subgroup"); } hasEvenY() { const { y } = this.toAffine(); @@ -20729,19 +20661,22 @@ ${formatDisplay(all, fmt)}`); return this.equals(Point4.ZERO); } wNAF(n) { - return wnaf.wNAFCached(this, n, Point4.normalizeZ); + return wnaf.wNAFCached(this, pointPrecomputes2, n, (comp) => { + const toInv = Fp3.invertBatch(comp.map((p) => p.pz)); + return comp.map((p, i) => p.toAffine(toInv[i])).map(Point4.fromAffine); + }); } - multiplyUnsafe(sc2) { - ut.aInRange("scalar", sc2, _0n10, CURVE2.n); + multiplyUnsafe(n) { const I = Point4.ZERO; - if (sc2 === _0n10) + if (n === _0n10) return I; - if (sc2 === _1n10) + assertGE(n); + if (n === _1n10) return this; const { endo } = CURVE2; if (!endo) - return wnaf.unsafeLadder(this, sc2); - let { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(sc2); + return wnaf.unsafeLadder(this, n); + let { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(n); let k1p = I; let k2p = I; let d = this; @@ -20762,11 +20697,12 @@ ${formatDisplay(all, fmt)}`); return k1p.add(k2p); } multiply(scalar) { - const { endo, n: N11 } = CURVE2; - ut.aInRange("scalar", scalar, _1n10, N11); + assertGE(scalar); + let n = scalar; let point3, fake; + const { endo } = CURVE2; if (endo) { - const { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(scalar); + const { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(n); let { p: k1p, f: f1p } = this.wNAF(k12); let { p: k2p, f: f2p } = this.wNAF(k22); k1p = wnaf.constTimeNegate(k1neg, k1p); @@ -20775,7 +20711,7 @@ ${formatDisplay(all, fmt)}`); point3 = k1p.add(k2p); fake = f1p.add(f2p); } else { - const { p, f: f10 } = this.wNAF(scalar); + const { p, f: f10 } = this.wNAF(n); point3 = p; fake = f10; } @@ -20788,7 +20724,18 @@ ${formatDisplay(all, fmt)}`); return sum.is0() ? void 0 : sum; } toAffine(iz2) { - return toAffineMemo(this, iz2); + const { px: x, py: y, pz: z } = this; + const is0 = this.is0(); + if (iz2 == null) + iz2 = is0 ? Fp3.ONE : Fp3.inv(z); + const ax2 = Fp3.mul(x, iz2); + const ay2 = Fp3.mul(y, iz2); + const zz2 = Fp3.mul(z, iz2); + if (is0) + return { x: Fp3.ZERO, y: Fp3.ZERO }; + if (!Fp3.eql(zz2, Fp3.ONE)) + throw new Error("invZ was invalid"); + return { x: ax2, y: ay2 }; } isTorsionFree() { const { h: cofactor, isTorsionFree } = CURVE2; @@ -20807,12 +20754,10 @@ ${formatDisplay(all, fmt)}`); return this.multiplyUnsafe(CURVE2.h); } toRawBytes(isCompressed = true) { - (0, utils_js_1.abool)("isCompressed", isCompressed); this.assertValidity(); return toBytes4(Point4, this, isCompressed); } toHex(isCompressed = true) { - (0, utils_js_1.abool)("isCompressed", isCompressed); return ut.bytesToHex(this.toRawBytes(isCompressed)); } } @@ -20846,6 +20791,9 @@ ${formatDisplay(all, fmt)}`); const { Fp: Fp3, n: CURVE_ORDER } = CURVE2; const compressedLen = Fp3.BYTES + 1; const uncompressedLen = 2 * Fp3.BYTES + 1; + function isValidFieldElement2(num) { + return _0n10 < num && num < Fp3.ORDER; + } function modN(a) { return mod3.mod(a, CURVE_ORDER); } @@ -20858,7 +20806,6 @@ ${formatDisplay(all, fmt)}`); const a = point3.toAffine(); const x = Fp3.toBytes(a.x); const cat = ut.concatBytes; - (0, utils_js_1.abool)("isCompressed", isCompressed); if (isCompressed) { return cat(Uint8Array.from([point3.hasEvenY() ? 2 : 3]), x); } else { @@ -20871,7 +20818,7 @@ ${formatDisplay(all, fmt)}`); const tail = bytes5.subarray(1); if (len === compressedLen && (head === 2 || head === 3)) { const x = ut.bytesToNumberBE(tail); - if (!ut.inRange(x, _1n10, Fp3.ORDER)) + if (!isValidFieldElement2(x)) throw new Error("Point is not on curve"); const y22 = weierstrassEquation(x); let y; @@ -20921,8 +20868,10 @@ ${formatDisplay(all, fmt)}`); return new Signature3(r10, s); } assertValidity() { - ut.aInRange("r", this.r, _1n10, CURVE_ORDER); - ut.aInRange("s", this.s, _1n10, CURVE_ORDER); + if (!isWithinCurveOrder2(this.r)) + throw new Error("r must be 0 < r < CURVE.n"); + if (!isWithinCurveOrder2(this.s)) + throw new Error("s must be 0 < s < CURVE.n"); } addRecoveryBit(recovery) { return new Signature3(this.r, this.s, recovery); @@ -21018,7 +20967,10 @@ ${formatDisplay(all, fmt)}`); }; const ORDER_MASK = ut.bitMask(CURVE2.nBitLength); function int2octets2(num) { - ut.aInRange(`num < 2^${CURVE2.nBitLength}`, num, _0n10, ORDER_MASK); + if (typeof num !== "bigint") + throw new Error("bigint expected"); + if (!(_0n10 <= num && num < ORDER_MASK)) + throw new Error(`bigint expected < 2^${CURVE2.nBitLength}`); return ut.numberToBytesBE(num, CURVE2.nByteLength); } function prepSig(msgHash, privateKey, opts = defaultSigOpts) { @@ -21029,7 +20981,6 @@ ${formatDisplay(all, fmt)}`); if (lowS == null) lowS = true; msgHash = (0, utils_js_1.ensureBytes)("msgHash", msgHash); - validateSigVerOpts2(opts); if (prehash) msgHash = (0, utils_js_1.ensureBytes)("prehashed msgHash", hash8(msgHash)); const h1int = bits2int_modN(msgHash); @@ -21078,7 +21029,6 @@ ${formatDisplay(all, fmt)}`); publicKey = (0, utils_js_1.ensureBytes)("publicKey", publicKey); if ("strict" in opts) throw new Error("options.strict was renamed to lowS"); - validateSigVerOpts2(opts); const { lowS, prehash } = opts; let _sig = void 0; let P; @@ -21231,9 +21181,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/_shortw_utils.js + // ../../node_modules/@noble/curves/_shortw_utils.js var require_shortw_utils = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/_shortw_utils.js"(exports2) { + "../../node_modules/@noble/curves/_shortw_utils.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.getHash = getHash2; @@ -21255,9 +21205,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/hash-to-curve.js + // ../../node_modules/@noble/curves/abstract/hash-to-curve.js var require_hash_to_curve = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/hash-to-curve.js"(exports2) { + "../../node_modules/@noble/curves/abstract/hash-to-curve.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.expand_message_xmd = expand_message_xmd; @@ -21404,9 +21354,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/secp256k1.js + // ../../node_modules/@noble/curves/secp256k1.js var require_secp256k1 = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/secp256k1.js"(exports2) { + "../../node_modules/@noble/curves/secp256k1.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.encodeToCurve = exports2.hashToCurve = exports2.schnorr = exports2.secp256k1 = void 0; @@ -21481,6 +21431,8 @@ ${formatDisplay(all, fmt)}`); } }, sha256_1.sha256); var _0n10 = BigInt(0); + var fe = (x) => typeof x === "bigint" && _0n10 < x && x < secp256k1P2; + var ge = (x) => typeof x === "bigint" && _0n10 < x && x < secp256k1N2; var TAGGED_HASH_PREFIXES2 = {}; function taggedHash(tag, ...messages) { let tagP = TAGGED_HASH_PREFIXES2[tag]; @@ -21504,7 +21456,8 @@ ${formatDisplay(all, fmt)}`); return { scalar, bytes: pointToBytes(p) }; } function lift_x(x) { - (0, utils_js_1.aInRange)("x", x, _1n10, secp256k1P2); + if (!fe(x)) + throw new Error("bad x: need 0 < x < p"); const xx2 = modP(x * x); const c = modP(xx2 * x + BigInt(7)); let y = sqrtMod3(c); @@ -21514,9 +21467,8 @@ ${formatDisplay(all, fmt)}`); p.assertValidity(); return p; } - var num = utils_js_1.bytesToNumberBE; function challenge(...args) { - return modN(num(taggedHash("BIP0340/challenge", ...args))); + return modN((0, utils_js_1.bytesToNumberBE)(taggedHash("BIP0340/challenge", ...args))); } function schnorrGetPublicKey(privateKey) { return schnorrGetExtPubKey(privateKey).bytes; @@ -21525,9 +21477,9 @@ ${formatDisplay(all, fmt)}`); const m = (0, utils_js_1.ensureBytes)("message", message); const { bytes: px2, scalar: d } = schnorrGetExtPubKey(privateKey); const a = (0, utils_js_1.ensureBytes)("auxRand", auxRand, 32); - const t = numTo32b2(d ^ num(taggedHash("BIP0340/aux", a))); + const t = numTo32b2(d ^ (0, utils_js_1.bytesToNumberBE)(taggedHash("BIP0340/aux", a))); const rand2 = taggedHash("BIP0340/nonce", t, px2, m); - const k_2 = modN(num(rand2)); + const k_2 = modN((0, utils_js_1.bytesToNumberBE)(rand2)); if (k_2 === _0n10) throw new Error("sign failed: k is zero"); const { bytes: rx2, scalar: k } = schnorrGetExtPubKey(k_2); @@ -21544,12 +21496,12 @@ ${formatDisplay(all, fmt)}`); const m = (0, utils_js_1.ensureBytes)("message", message); const pub = (0, utils_js_1.ensureBytes)("publicKey", publicKey, 32); try { - const P = lift_x(num(pub)); - const r10 = num(sig.subarray(0, 32)); - if (!(0, utils_js_1.inRange)(r10, _1n10, secp256k1P2)) + const P = lift_x((0, utils_js_1.bytesToNumberBE)(pub)); + const r10 = (0, utils_js_1.bytesToNumberBE)(sig.subarray(0, 32)); + if (!fe(r10)) return false; - const s = num(sig.subarray(32, 64)); - if (!(0, utils_js_1.inRange)(s, _1n10, secp256k1N2)) + const s = (0, utils_js_1.bytesToNumberBE)(sig.subarray(32, 64)); + if (!ge(s)) return false; const e = challenge(numTo32b2(r10), pointToBytes(P), m); const R = GmulAdd(P, s, modN(-e)); @@ -22033,9 +21985,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/edwards.js + // ../../node_modules/@noble/curves/abstract/edwards.js var require_edwards = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/edwards.js"(exports2) { + "../../node_modules/@noble/curves/abstract/edwards.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.twistedEdwards = twistedEdwards; @@ -22077,63 +22029,40 @@ ${formatDisplay(all, fmt)}`); }); const adjustScalarBytes = CURVE2.adjustScalarBytes || ((bytes5) => bytes5); const domain = CURVE2.domain || ((data, ctx, phflag) => { - (0, utils_js_1.abool)("phflag", phflag); if (ctx.length || phflag) throw new Error("Contexts/pre-hash are not supported"); return data; }); - function aCoordinate(title, n) { - ut.aInRange("coordinate " + title, n, _0n10, MASK); - } - function assertPoint(other) { + const inBig = (n) => typeof n === "bigint" && _0n10 < n; + const inRange = (n, max2) => inBig(n) && inBig(max2) && n < max2; + const in0MaskRange = (n) => n === _0n10 || inRange(n, MASK); + function assertInRange(n, max2) { + if (inRange(n, max2)) + return n; + throw new Error(`Expected valid scalar < ${max2}, got ${typeof n} ${n}`); + } + function assertGE0(n) { + return n === _0n10 ? n : assertInRange(n, CURVE_ORDER); + } + const pointPrecomputes2 = /* @__PURE__ */ new Map(); + function isPoint(other) { if (!(other instanceof Point4)) throw new Error("ExtendedPoint expected"); } - const toAffineMemo = (0, utils_js_1.memoized)((p, iz2) => { - const { ex: x, ey: y, ez: z } = p; - const is0 = p.is0(); - if (iz2 == null) - iz2 = is0 ? _8n3 : Fp3.inv(z); - const ax2 = modP(x * iz2); - const ay2 = modP(y * iz2); - const zz2 = modP(z * iz2); - if (is0) - return { x: _0n10, y: _1n10 }; - if (zz2 !== _1n10) - throw new Error("invZ was invalid"); - return { x: ax2, y: ay2 }; - }); - const assertValidMemo = (0, utils_js_1.memoized)((p) => { - const { a, d } = CURVE2; - if (p.is0()) - throw new Error("bad point: ZERO"); - const { ex: X, ey: Y, ez: Z10, et: T } = p; - const X22 = modP(X * X); - const Y22 = modP(Y * Y); - const Z22 = modP(Z10 * Z10); - const Z42 = modP(Z22 * Z22); - const aX2 = modP(X22 * a); - const left = modP(Z22 * modP(aX2 + Y22)); - const right = modP(Z42 + modP(d * modP(X22 * Y22))); - if (left !== right) - throw new Error("bad point: equation left != right (1)"); - const XY2 = modP(X * Y); - const ZT2 = modP(Z10 * T); - if (XY2 !== ZT2) - throw new Error("bad point: equation left != right (2)"); - return true; - }); class Point4 { constructor(ex2, ey2, ez2, et) { this.ex = ex2; this.ey = ey2; this.ez = ez2; this.et = et; - aCoordinate("x", ex2); - aCoordinate("y", ey2); - aCoordinate("z", ez2); - aCoordinate("t", et); - Object.freeze(this); + if (!in0MaskRange(ex2)) + throw new Error("x required"); + if (!in0MaskRange(ey2)) + throw new Error("y required"); + if (!in0MaskRange(ez2)) + throw new Error("z required"); + if (!in0MaskRange(et)) + throw new Error("t required"); } get x() { return this.toAffine().x; @@ -22145,8 +22074,8 @@ ${formatDisplay(all, fmt)}`); if (p instanceof Point4) throw new Error("extended point not allowed"); const { x, y } = p || {}; - aCoordinate("x", x); - aCoordinate("y", y); + if (!in0MaskRange(x) || !in0MaskRange(y)) + throw new Error("invalid affine point"); return new Point4(x, y, _1n10, modP(x * y)); } static normalizeZ(points) { @@ -22154,13 +22083,30 @@ ${formatDisplay(all, fmt)}`); return points.map((p, i) => p.toAffine(toInv[i])).map(Point4.fromAffine); } _setWindowSize(windowSize) { - wnaf.setWindowSize(this, windowSize); + this._WINDOW_SIZE = windowSize; + pointPrecomputes2.delete(this); } assertValidity() { - assertValidMemo(this); + const { a, d } = CURVE2; + if (this.is0()) + throw new Error("bad point: ZERO"); + const { ex: X, ey: Y, ez: Z10, et: T } = this; + const X22 = modP(X * X); + const Y22 = modP(Y * Y); + const Z22 = modP(Z10 * Z10); + const Z42 = modP(Z22 * Z22); + const aX2 = modP(X22 * a); + const left = modP(Z22 * modP(aX2 + Y22)); + const right = modP(Z42 + modP(d * modP(X22 * Y22))); + if (left !== right) + throw new Error("bad point: equation left != right (1)"); + const XY2 = modP(X * Y); + const ZT2 = modP(Z10 * T); + if (XY2 !== ZT2) + throw new Error("bad point: equation left != right (2)"); } equals(other) { - assertPoint(other); + isPoint(other); const { ex: X12, ey: Y12, ez: Z12 } = this; const { ex: X22, ey: Y22, ez: Z22 } = other; const X1Z2 = modP(X12 * Z22); @@ -22194,7 +22140,7 @@ ${formatDisplay(all, fmt)}`); return new Point4(X32, Y32, Z32, T32); } add(other) { - assertPoint(other); + isPoint(other); const { a, d } = CURVE2; const { ex: X12, ey: Y12, ez: Z12, et: T12 } = this; const { ex: X22, ey: Y22, ez: Z22, et: T22 } = other; @@ -22233,17 +22179,14 @@ ${formatDisplay(all, fmt)}`); return this.add(other.negate()); } wNAF(n) { - return wnaf.wNAFCached(this, n, Point4.normalizeZ); + return wnaf.wNAFCached(this, pointPrecomputes2, n, Point4.normalizeZ); } multiply(scalar) { - const n = scalar; - ut.aInRange("scalar", n, _1n10, CURVE_ORDER); - const { p, f: f10 } = this.wNAF(n); + const { p, f: f10 } = this.wNAF(assertInRange(scalar, CURVE_ORDER)); return Point4.normalizeZ([p, f10])[0]; } multiplyUnsafe(scalar) { - const n = scalar; - ut.aInRange("scalar", n, _0n10, CURVE_ORDER); + let n = assertGE0(scalar); if (n === _0n10) return I; if (this.equals(I) || n === _1n10) @@ -22259,7 +22202,18 @@ ${formatDisplay(all, fmt)}`); return wnaf.unsafeLadder(this, CURVE_ORDER).is0(); } toAffine(iz2) { - return toAffineMemo(this, iz2); + const { ex: x, ey: y, ez: z } = this; + const is0 = this.is0(); + if (iz2 == null) + iz2 = is0 ? _8n3 : Fp3.inv(z); + const ax2 = modP(x * iz2); + const ay2 = modP(y * iz2); + const zz2 = modP(z * iz2); + if (is0) + return { x: _0n10, y: _1n10 }; + if (zz2 !== _1n10) + throw new Error("invZ was invalid"); + return { x: ax2, y: ay2 }; } clearCofactor() { const { h: cofactor2 } = CURVE2; @@ -22271,13 +22225,17 @@ ${formatDisplay(all, fmt)}`); const { d, a } = CURVE2; const len = Fp3.BYTES; hex8 = (0, utils_js_1.ensureBytes)("pointHex", hex8, len); - (0, utils_js_1.abool)("zip215", zip215); const normed = hex8.slice(); const lastByte = hex8[len - 1]; normed[len - 1] = lastByte & ~128; const y = ut.bytesToNumberLE(normed); - const max2 = zip215 ? MASK : Fp3.ORDER; - ut.aInRange("pointHex.y", y, _0n10, max2); + if (y === _0n10) { + } else { + if (zip215) + assertInRange(y, MASK); + else + assertInRange(y, Fp3.ORDER); + } const y22 = modP(y * y); const u = modP(y22 - _1n10); const v = modP(d * y22 - a); @@ -22342,7 +22300,7 @@ ${formatDisplay(all, fmt)}`); const R = G.multiply(r10).toRawBytes(); const k = hashDomainToScalar(options.context, R, pointBytes, msg); const s = modN(r10 + k * scalar); - ut.aInRange("signature.s", s, _0n10, CURVE_ORDER); + assertGE0(s); const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp3.BYTES)); return (0, utils_js_1.ensureBytes)("result", res, nByteLength * 2); } @@ -22352,8 +22310,6 @@ ${formatDisplay(all, fmt)}`); const len = Fp3.BYTES; sig = (0, utils_js_1.ensureBytes)("signature", sig, 2 * len); msg = (0, utils_js_1.ensureBytes)("message", msg); - if (zip215 !== void 0) - (0, utils_js_1.abool)("zip215", zip215); if (prehash) msg = prehash(msg); const s = ut.bytesToNumberLE(sig.slice(len, 2 * len)); @@ -22393,9 +22349,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/montgomery.js + // ../../node_modules/@noble/curves/abstract/montgomery.js var require_montgomery = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/abstract/montgomery.js"(exports2) { + "../../node_modules/@noble/curves/abstract/montgomery.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.montgomery = montgomery; @@ -22431,11 +22387,15 @@ ${formatDisplay(all, fmt)}`); x_3 = modP(x_3 + dummy); return [x_2, x_3]; } + function assertFieldElement(n) { + if (typeof n === "bigint" && _0n10 <= n && n < P) + return n; + throw new Error("Expected valid scalar 0 < scalar < CURVE.P"); + } const a24 = (CURVE2.a - BigInt(2)) / BigInt(4); - function montgomeryLadder(u, scalar) { - (0, utils_js_1.aInRange)("u", u, _0n10, P); - (0, utils_js_1.aInRange)("scalar", scalar, _0n10, P); - const k = scalar; + function montgomeryLadder(pointU, scalar) { + const u = assertFieldElement(pointU); + const k = assertFieldElement(scalar); const x_1 = u; let x_2 = _1n10; let z_2 = _0n10; @@ -22518,9 +22478,9 @@ ${formatDisplay(all, fmt)}`); } }); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/ed25519.js + // ../../node_modules/@noble/curves/ed25519.js var require_ed25519 = __commonJS({ - "../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/ed25519.js"(exports2) { + "../../node_modules/@noble/curves/ed25519.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.hash_to_ristretto255 = exports2.hashToRistretto255 = exports2.RistrettoPoint = exports2.encodeToCurve = exports2.hashToCurve = exports2.edwardsToMontgomery = exports2.x25519 = exports2.ed25519ph = exports2.ed25519ctx = exports2.ed25519 = exports2.ED25519_TORSION_SUBGROUP = void 0; @@ -70568,7 +70528,7 @@ ${formatDisplay(all, fmt)}`); } }; - // ../../node_modules/@reef-chain/util-lib/dist/module/util-lib.mjs + // node_modules/@reef-chain/util-lib/dist/module/util-lib.mjs var import_meta = {}; var Rj = Object.defineProperty; var Cj = (t, e, r10) => e in t ? Rj(t, e, { enumerable: true, configurable: true, writable: true, value: r10 }) : t[e] = r10; @@ -158893,7 +158853,7 @@ ${bz(e, r10)}`); }, Symbol.toStringTag, { value: "Module" })); // ../../node_modules/@reef-chain/util-lib/package.json - var version = "2.6.1"; + var version = "2.5.12"; // src/jsApi/accountApi.ts var import_utils3 = __toESM(require_utils3()); @@ -162344,8 +162304,8 @@ ${bz(e, r10)}`); getChainId() { return __awaiter5(this, void 0, void 0, function* () { this._checkProvider("getChainId"); - const network3 = yield this.provider.getNetwork(); - return network3.chainId; + const network2 = yield this.provider.getNetwork(); + return network2.chainId; }); } getGasPrice() { @@ -167017,7 +166977,7 @@ ${bz(e, r10)}`); function isRenetworkable(value) { return value && typeof value.renetwork === "function"; } - function ethDefaultProvider(network3) { + function ethDefaultProvider(network2) { const func = function(providers, options) { if (options == null) { options = {}; @@ -167025,26 +166985,26 @@ ${bz(e, r10)}`); const providerList = []; if (providers.InfuraProvider && options.infura !== "-") { try { - providerList.push(new providers.InfuraProvider(network3, options.infura)); + providerList.push(new providers.InfuraProvider(network2, options.infura)); } catch (error) { } } if (providers.EtherscanProvider && options.etherscan !== "-") { try { - providerList.push(new providers.EtherscanProvider(network3, options.etherscan)); + providerList.push(new providers.EtherscanProvider(network2, options.etherscan)); } catch (error) { } } if (providers.AlchemyProvider && options.alchemy !== "-") { try { - providerList.push(new providers.AlchemyProvider(network3, options.alchemy)); + providerList.push(new providers.AlchemyProvider(network2, options.alchemy)); } catch (error) { } } if (providers.PocketProvider && options.pocket !== "-") { const skip = ["goerli", "ropsten", "rinkeby", "sepolia"]; try { - const provider = new providers.PocketProvider(network3, options.pocket); + const provider = new providers.PocketProvider(network2, options.pocket); if (provider.network && skip.indexOf(provider.network.name) === -1) { providerList.push(provider); } @@ -167053,14 +167013,14 @@ ${bz(e, r10)}`); } if (providers.CloudflareProvider && options.cloudflare !== "-") { try { - providerList.push(new providers.CloudflareProvider(network3)); + providerList.push(new providers.CloudflareProvider(network2)); } catch (error) { } } if (providers.AnkrProvider && options.ankr !== "-") { try { const skip = ["ropsten"]; - const provider = new providers.AnkrProvider(network3, options.ankr); + const provider = new providers.AnkrProvider(network2, options.ankr); if (provider.network && skip.indexOf(provider.network.name) === -1) { providerList.push(provider); } @@ -167074,27 +167034,27 @@ ${bz(e, r10)}`); let quorum = 1; if (options.quorum != null) { quorum = options.quorum; - } else if (network3 === "homestead") { + } else if (network2 === "homestead") { quorum = 2; } return new providers.FallbackProvider(providerList, quorum); } return providerList[0]; }; - func.renetwork = function(network4) { - return ethDefaultProvider(network4); + func.renetwork = function(network3) { + return ethDefaultProvider(network3); }; return func; } - function etcDefaultProvider(url, network3) { + function etcDefaultProvider(url, network2) { const func = function(providers, options) { if (providers.JsonRpcProvider) { - return new providers.JsonRpcProvider(url, network3); + return new providers.JsonRpcProvider(url, network2); } return null; }; - func.renetwork = function(network4) { - return etcDefaultProvider(url, network4); + func.renetwork = function(network3) { + return etcDefaultProvider(url, network3); }; return func; } @@ -167178,14 +167138,14 @@ ${bz(e, r10)}`); bnb: { chainId: 56, name: "bnb" }, bnbt: { chainId: 97, name: "bnbt" } }; - function getNetwork(network3) { - if (network3 == null) { + function getNetwork(network2) { + if (network2 == null) { return null; } - if (typeof network3 === "number") { + if (typeof network2 === "number") { for (const name6 in networks) { const standard2 = networks[name6]; - if (standard2.chainId === network3) { + if (standard2.chainId === network2) { return { name: standard2.name, chainId: standard2.chainId, @@ -167195,12 +167155,12 @@ ${bz(e, r10)}`); } } return { - chainId: network3, + chainId: network2, name: "unknown" }; } - if (typeof network3 === "string") { - const standard2 = networks[network3]; + if (typeof network2 === "string") { + const standard2 = networks[network2]; if (standard2 == null) { return null; } @@ -167211,28 +167171,28 @@ ${bz(e, r10)}`); _defaultProvider: standard2._defaultProvider || null }; } - const standard = networks[network3.name]; + const standard = networks[network2.name]; if (!standard) { - if (typeof network3.chainId !== "number") { - logger23.throwArgumentError("invalid network chainId", "network", network3); + if (typeof network2.chainId !== "number") { + logger23.throwArgumentError("invalid network chainId", "network", network2); } - return network3; + return network2; } - if (network3.chainId !== 0 && network3.chainId !== standard.chainId) { - logger23.throwArgumentError("network chainId mismatch", "network", network3); + if (network2.chainId !== 0 && network2.chainId !== standard.chainId) { + logger23.throwArgumentError("network chainId mismatch", "network", network2); } - let defaultProvider = network3._defaultProvider || null; + let defaultProvider = network2._defaultProvider || null; if (defaultProvider == null && standard._defaultProvider) { if (isRenetworkable(standard._defaultProvider)) { - defaultProvider = standard._defaultProvider.renetwork(network3); + defaultProvider = standard._defaultProvider.renetwork(network2); } else { defaultProvider = standard._defaultProvider; } } return { - name: network3.name, + name: network2.name, chainId: standard.chainId, - ensAddress: network3.ensAddress || standard.ensAddress || null, + ensAddress: network2.ensAddress || standard.ensAddress || null, _defaultProvider: defaultProvider }; } @@ -168666,29 +168626,29 @@ ${bz(e, r10)}`); var defaultFormatter = null; var nextPollId = 1; var BaseProvider = class extends Provider { - constructor(network3) { + constructor(network2) { super(); this._events = []; this._emitted = { block: -2 }; this.disableCcipRead = false; this.formatter = new.target.getFormatter(); - defineReadOnly(this, "anyNetwork", network3 === "any"); + defineReadOnly(this, "anyNetwork", network2 === "any"); if (this.anyNetwork) { - network3 = this.detectNetwork(); + network2 = this.detectNetwork(); } - if (network3 instanceof Promise) { - this._networkPromise = network3; - network3.catch((error) => { + if (network2 instanceof Promise) { + this._networkPromise = network2; + network2.catch((error) => { }); this._ready().catch((error) => { }); } else { - const knownNetwork = getStatic(new.target, "getNetwork")(network3); + const knownNetwork = getStatic(new.target, "getNetwork")(network2); if (knownNetwork) { defineReadOnly(this, "_network", knownNetwork); this.emit("network", knownNetwork, null); } else { - logger26.throwArgumentError("invalid network", "network", network3); + logger26.throwArgumentError("invalid network", "network", network2); } } this._maxInternalBlockNumber = -1024; @@ -168700,26 +168660,26 @@ ${bz(e, r10)}`); _ready() { return __awaiter11(this, void 0, void 0, function* () { if (this._network == null) { - let network3 = null; + let network2 = null; if (this._networkPromise) { try { - network3 = yield this._networkPromise; + network2 = yield this._networkPromise; } catch (error) { } } - if (network3 == null) { - network3 = yield this.detectNetwork(); + if (network2 == null) { + network2 = yield this.detectNetwork(); } - if (!network3) { + if (!network2) { logger26.throwError("no network detected", import_logger26.Logger.errors.UNKNOWN_ERROR, {}); } if (this._network == null) { if (this.anyNetwork) { - this._network = network3; + this._network = network2; } else { - defineReadOnly(this, "_network", network3); + defineReadOnly(this, "_network", network2); } - this.emit("network", network3, null); + this.emit("network", network2, null); } } return this._network; @@ -168727,8 +168687,8 @@ ${bz(e, r10)}`); } get ready() { return poll(() => { - return this._ready().then((network3) => { - return network3; + return this._ready().then((network2) => { + return network2; }, (error) => { if (error.code === import_logger26.Logger.errors.NETWORK_ERROR && error.event === "noNetwork") { return void 0; @@ -168743,8 +168703,8 @@ ${bz(e, r10)}`); } return defaultFormatter; } - static getNetwork(network3) { - return getNetwork(network3 == null ? "homestead" : network3); + static getNetwork(network2) { + return getNetwork(network2 == null ? "homestead" : network2); } ccipReadFetch(tx2, calldata, urls) { return __awaiter11(this, void 0, void 0, function* () { @@ -168799,7 +168759,7 @@ ${bz(e, r10)}`); const reqTime = getTime(); const checkInternalBlockNumber = resolveProperties({ blockNumber: this.perform("getBlockNumber", {}), - networkError: this.getNetwork().then((network3) => null, (error) => error) + networkError: this.getNetwork().then((network2) => null, (error) => error) }).then(({ blockNumber, networkError }) => { if (networkError) { if (this._internalBlockNumber === checkInternalBlockNumber) { @@ -168959,9 +168919,9 @@ ${bz(e, r10)}`); } getNetwork() { return __awaiter11(this, void 0, void 0, function* () { - const network3 = yield this._ready(); + const network2 = yield this._ready(); const currentNetwork = yield this.detectNetwork(); - if (network3.chainId !== currentNetwork.chainId) { + if (network2.chainId !== currentNetwork.chainId) { if (this.anyNetwork) { this._network = currentNetwork; this._lastBlockNumber = -2; @@ -168971,19 +168931,19 @@ ${bz(e, r10)}`); this._emitted.block = -2; this._maxInternalBlockNumber = -1024; this._internalBlockNumber = null; - this.emit("network", currentNetwork, network3); + this.emit("network", currentNetwork, network2); yield stall(0); return this._network; } const error = logger26.makeError("underlying network changed", import_logger26.Logger.errors.NETWORK_ERROR, { event: "changed", - network: network3, + network: network2, detectedNetwork: currentNetwork }); this.emit("error", error); throw error; } - return network3; + return network2; }); } get blockNumber() { @@ -169724,13 +169684,13 @@ ${bz(e, r10)}`); if (operation == null) { operation = "ENS"; } - const network3 = yield this.getNetwork(); - if (!network3.ensAddress) { - logger26.throwError("network does not support ENS", import_logger26.Logger.errors.UNSUPPORTED_OPERATION, { operation, network: network3.name }); + const network2 = yield this.getNetwork(); + if (!network2.ensAddress) { + logger26.throwError("network does not support ENS", import_logger26.Logger.errors.UNSUPPORTED_OPERATION, { operation, network: network2.name }); } try { const addrData = yield this.call({ - to: network3.ensAddress, + to: network2.ensAddress, data: "0x0178b8bf" + namehash(name6).substring(2) }); return this.formatter.callAddress(addrData); @@ -170303,13 +170263,13 @@ ${bz(e, r10)}`); maxPriorityFeePerGas: true }; var JsonRpcProvider = class extends BaseProvider { - constructor(url, network3) { - let networkOrReady = network3; + constructor(url, network2) { + let networkOrReady = network2; if (networkOrReady == null) { networkOrReady = new Promise((resolve, reject) => { setTimeout(() => { - this.detectNetwork().then((network4) => { - resolve(network4); + this.detectNetwork().then((network3) => { + resolve(network3); }, (error) => { reject(error); }); @@ -170637,16 +170597,16 @@ ${bz(e, r10)}`); var logger28 = new import_logger29.Logger(version20); var NextId = 1; var WebSocketProvider = class extends JsonRpcProvider { - constructor(url, network3) { - if (network3 === "any") { + constructor(url, network2) { + if (network2 === "any") { logger28.throwError("WebSocketProvider does not support 'any' network yet", import_logger29.Logger.errors.UNSUPPORTED_OPERATION, { operation: "network:any" }); } if (typeof url === "string") { - super(url, network3); + super(url, network2); } else { - super("_websocket", network3); + super("_websocket", network2); } this._pollingInterval = -1; this._wsReady = false; @@ -170915,28 +170875,28 @@ ${bz(e, r10)}`); detectNetwork: { get: () => super.detectNetwork } }); return __awaiter14(this, void 0, void 0, function* () { - let network3 = this.network; - if (network3 == null) { - network3 = yield _super.detectNetwork.call(this); - if (!network3) { + let network2 = this.network; + if (network2 == null) { + network2 = yield _super.detectNetwork.call(this); + if (!network2) { logger29.throwError("no network detected", import_logger30.Logger.errors.UNKNOWN_ERROR, {}); } if (this._network == null) { - defineReadOnly(this, "_network", network3); - this.emit("network", network3, null); + defineReadOnly(this, "_network", network2); + this.emit("network", network2, null); } } - return network3; + return network2; }); } }; var UrlJsonRpcProvider = class extends StaticJsonRpcProvider { - constructor(network3, apiKey) { + constructor(network2, apiKey) { logger29.checkAbstract(new.target, UrlJsonRpcProvider); - network3 = getStatic(new.target, "getNetwork")(network3); + network2 = getStatic(new.target, "getNetwork")(network2); apiKey = getStatic(new.target, "getApiKey")(apiKey); - const connection = getStatic(new.target, "getUrl")(network3, apiKey); - super(connection, network3); + const connection = getStatic(new.target, "getUrl")(network2, apiKey); + super(connection, network2); if (typeof apiKey === "string") { defineReadOnly(this, "apiKey", apiKey); } else if (apiKey != null) { @@ -170960,7 +170920,7 @@ ${bz(e, r10)}`); static getApiKey(apiKey) { return apiKey; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { return logger29.throwError("not implemented; sub-classes must override getUrl", import_logger30.Logger.errors.NOT_IMPLEMENTED, { operation: "getUrl" }); @@ -170971,8 +170931,8 @@ ${bz(e, r10)}`); var logger30 = new import_logger31.Logger(version20); var defaultApiKey = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC"; var AlchemyWebSocketProvider = class extends WebSocketProvider { - constructor(network3, apiKey) { - const provider = new AlchemyProvider(network3, apiKey); + constructor(network2, apiKey) { + const provider = new AlchemyProvider(network2, apiKey); const url = provider.connection.url.replace(/^http/i, "ws").replace(".alchemyapi.", ".ws.alchemyapi."); super(url, provider.network); defineReadOnly(this, "apiKey", provider.apiKey); @@ -170982,8 +170942,8 @@ ${bz(e, r10)}`); } }; var AlchemyProvider = class extends UrlJsonRpcProvider { - static getWebSocketProvider(network3, apiKey) { - return new AlchemyWebSocketProvider(network3, apiKey); + static getWebSocketProvider(network2, apiKey) { + return new AlchemyWebSocketProvider(network2, apiKey); } static getApiKey(apiKey) { if (apiKey == null) { @@ -170994,9 +170954,9 @@ ${bz(e, r10)}`); } return apiKey; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { let host = null; - switch (network3.name) { + switch (network2.name) { case "homestead": host = "eth-mainnet.alchemyapi.io/v2/"; break; @@ -171071,13 +171031,13 @@ ${bz(e, r10)}`); } return apiKey; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { if (apiKey == null) { apiKey = defaultApiKey2; } const connection = { allowGzip: true, - url: "https://" + getHost(network3.name) + apiKey, + url: "https://" + getHost(network2.name) + apiKey, throttleCallback: (attempt, url) => { if (apiKey.apiKey === defaultApiKey2) { showThrottleMessage(); @@ -171130,9 +171090,9 @@ ${bz(e, r10)}`); } return null; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { let host = null; - switch (network3.name) { + switch (network2.name) { case "homestead": host = "https://cloudflare-eth.com/"; break; @@ -171315,8 +171275,8 @@ ${bz(e, r10)}`); throw error; } var EtherscanProvider = class extends BaseProvider { - constructor(network3, apiKey) { - super(network3); + constructor(network2, apiKey) { + super(network2); defineReadOnly(this, "baseUrl", this.getBaseUrl()); defineReadOnly(this, "apiKey", apiKey || null); } @@ -171610,16 +171570,16 @@ ${bz(e, r10)}`); function checkNetworks(networks2) { let result = null; for (let i = 0; i < networks2.length; i++) { - const network3 = networks2[i]; - if (network3 == null) { + const network2 = networks2[i]; + if (network2 == null) { return null; } if (result) { - if (!(result.name === network3.name && result.chainId === network3.chainId && (result.ensAddress === network3.ensAddress || result.ensAddress == null && network3.ensAddress == null))) { + if (!(result.name === network2.name && result.chainId === network2.chainId && (result.ensAddress === network2.ensAddress || result.ensAddress == null && network2.ensAddress == null))) { logger34.throwArgumentError("provider mismatch", "networks", networks2); } } else { - result = network3; + result = network2; } } return result; @@ -172110,8 +172070,8 @@ ${bz(e, r10)}`); var logger35 = new import_logger36.Logger(version20); var defaultProjectId = "84842078b09946638c03157f83405213"; var InfuraWebSocketProvider = class extends WebSocketProvider { - constructor(network3, apiKey) { - const provider = new InfuraProvider(network3, apiKey); + constructor(network2, apiKey) { + const provider = new InfuraProvider(network2, apiKey); const connection = provider.connection; if (connection.password) { logger35.throwError("INFURA WebSocket project secrets unsupported", import_logger36.Logger.errors.UNSUPPORTED_OPERATION, { @@ -172119,7 +172079,7 @@ ${bz(e, r10)}`); }); } const url = connection.url.replace(/^http/i, "ws").replace("/v3/", "/ws/v3/"); - super(url, network3); + super(url, network2); defineReadOnly(this, "apiKey", provider.projectId); defineReadOnly(this, "projectId", provider.projectId); defineReadOnly(this, "projectSecret", provider.projectSecret); @@ -172129,8 +172089,8 @@ ${bz(e, r10)}`); } }; var InfuraProvider = class extends UrlJsonRpcProvider { - static getWebSocketProvider(network3, apiKey) { - return new InfuraWebSocketProvider(network3, apiKey); + static getWebSocketProvider(network2, apiKey) { + return new InfuraWebSocketProvider(network2, apiKey); } static getApiKey(apiKey) { const apiKeyObj = { @@ -172154,9 +172114,9 @@ ${bz(e, r10)}`); apiKeyObj.apiKey = apiKeyObj.projectId; return apiKeyObj; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { let host = null; - switch (network3 ? network3.name : "unknown") { + switch (network2 ? network2.name : "unknown") { case "homestead": host = "mainnet.infura.io"; break; @@ -172187,7 +172147,7 @@ ${bz(e, r10)}`); default: logger35.throwError("unsupported network", import_logger36.Logger.errors.INVALID_ARGUMENT, { argument: "network", - value: network3 + value: network2 }); } const connection = { @@ -172286,10 +172246,10 @@ ${bz(e, r10)}`); } return apiKey || defaultApiKey3; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { logger36.warn("NodeSmith will be discontinued on 2019-12-20; please migrate to another platform."); let host = null; - switch (network3.name) { + switch (network2.name) { case "homestead": host = "https://ethereum.api.nodesmith.io/v1/mainnet/jsonrpc"; break; @@ -172337,9 +172297,9 @@ ${bz(e, r10)}`); } return apiKeyObj; } - static getUrl(network3, apiKey) { + static getUrl(network2, apiKey) { let host = null; - switch (network3 ? network3.name : "unknown") { + switch (network2 ? network2.name : "unknown") { case "goerli": host = "eth-goerli.gateway.pokt.network"; break; @@ -172364,7 +172324,7 @@ ${bz(e, r10)}`); default: logger37.throwError("unsupported network", import_logger38.Logger.errors.INVALID_ARGUMENT, { argument: "network", - value: network3 + value: network2 }); } const url = `https://${host}/v1/lb/${apiKey.applicationId}`; @@ -172463,7 +172423,7 @@ ${bz(e, r10)}`); }; } var Web3Provider = class extends JsonRpcProvider { - constructor(provider, network3) { + constructor(provider, network2) { if (provider == null) { logger38.throwArgumentError("missing provider", "provider", provider); } @@ -172495,7 +172455,7 @@ ${bz(e, r10)}`); path = "unknown:"; } } - super(path, network3); + super(path, network2); defineReadOnly(this, "jsonRpcFetchFunc", jsonRpcFetchFunc); defineReadOnly(this, "provider", subprovider); } @@ -172507,30 +172467,30 @@ ${bz(e, r10)}`); // node_modules/@ethersproject/providers/lib.esm/index.js var import_logger40 = __toESM(require_lib()); var logger39 = new import_logger40.Logger(version20); - function getDefaultProvider(network3, options) { - if (network3 == null) { - network3 = "homestead"; + function getDefaultProvider(network2, options) { + if (network2 == null) { + network2 = "homestead"; } - if (typeof network3 === "string") { - const match = network3.match(/^(ws|http)s?:/i); + if (typeof network2 === "string") { + const match = network2.match(/^(ws|http)s?:/i); if (match) { switch (match[1].toLowerCase()) { case "http": case "https": - return new JsonRpcProvider(network3); + return new JsonRpcProvider(network2); case "ws": case "wss": - return new WebSocketProvider(network3); + return new WebSocketProvider(network2); default: - logger39.throwArgumentError("unsupported URL scheme", "network", network3); + logger39.throwArgumentError("unsupported URL scheme", "network", network2); } } } - const n = getNetwork(network3); + const n = getNetwork(network2); if (!n || !n._defaultProvider) { logger39.throwError("unsupported getDefaultProvider network", import_logger40.Logger.errors.NETWORK_ERROR, { operation: "getDefaultProvider", - network: network3 + network: network2 }); } return n._defaultProvider({ @@ -175911,7 +175871,7 @@ query FETCH_NFT_INFO($nftId: BigInt!,$ownerAddress: String!) { (async () => { try { observer.next({ status: "approving" }); - const [network3, reefSigners, provider] = await firstValueFrom( + const [network2, reefSigners, provider] = await firstValueFrom( combineLatest([z7e.selectedNetwork$, z7e.accounts$, z7e.selectedProvider$]).pipe(take(1)) ); const reefSigner = reefSigners.find((s) => s.address === signerAddress); @@ -175928,7 +175888,7 @@ query FETCH_NFT_INFO($nftId: BigInt!,$ownerAddress: String!) { ); const signer = await c9e(reefSigner.address, provider, signingKey); const swapRouter = new Contract( - x7e.getReefswapNetworkConfig(network3).routerAddress, + x7e.getReefswapNetworkConfig(network2).routerAddress, ReefswapRouter, signer ); @@ -175937,7 +175897,7 @@ query FETCH_NFT_INFO($nftId: BigInt!,$ownerAddress: String!) { await approveTokenAmount( token1.address, sellAmount, - x7e.getReefswapNetworkConfig(network3).routerAddress, + x7e.getReefswapNetworkConfig(network2).routerAddress, signer ); observer.next({ status: "approved" }); @@ -175971,8 +175931,8 @@ query FETCH_NFT_INFO($nftId: BigInt!,$ownerAddress: String!) { return firstValueFrom( combineLatest([z7e.selectedNetwork$, z7e.selectedProvider$]).pipe( take(1), - switchMap(async ([network3, provider]) => { - return getPoolReserves(token1Address, token2Address, provider, x7e.getReefswapNetworkConfig(network3).factoryAddress); + switchMap(async ([network2, provider]) => { + return getPoolReserves(token1Address, token2Address, provider, x7e.getReefswapNetworkConfig(network2).factoryAddress); }), take(1) ) @@ -177512,8 +177472,8 @@ query FETCH_TX_INFO { var bignumber_default = BigNumber18; // src/jsApi/utils/networkUtils.ts - var getDexUrl = (network3) => { - if (network3 == "testnet") + var getDexUrl = (network2) => { + if (network2 == "testnet") return "https://squid.subsquid.io/reef-swap-testnet/graphql"; return "https://squid.subsquid.io/reef-swap/graphql"; }; @@ -177572,6 +177532,22 @@ query FETCH_TX_INFO { ` }; }; + var getPoolTotalValueLockedQry = (toTime) => ({ + query: ` + query totalSupply($toTime: String!) { + totalSupply(toTime: $toTime) { + pool { + address + token1 + token2 + } + reserved1 + reserved2 + } + } +`, + variables: { toTime } + }); var getTokenInfoQuery = (tokenAddr) => { return { query: ` @@ -177630,6 +177606,13 @@ query FETCH_TX_INFO { const res = current.minus(previous).div(previous).multipliedBy(100); return res.toNumber(); }; + var getTokenPrice = (address, prices) => new BigNumber18( + prices[address] && !Number.isNaN(prices[address]) ? prices[address] : 0 + ); + var tvl = "0"; + var getMarketCap = () => { + return tvl; + }; var fetchAllPools = async (limit, offset, search, signerAddress) => { try { const selectedNw = await firstValueFrom(z7e.selectedNetwork$); @@ -177651,6 +177634,29 @@ query FETCH_TX_INFO { } const { data } = await response.json(); K7e.calculateTokenPrices(data.allPoolsList, tokenPrices); + const toTime = new Date(); + const marketCapResponse = await fetch(getDexUrl(selectedNw.name), { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(getPoolTotalValueLockedQry(toTime.toISOString())) + }); + if (!response.ok) { + throw new Error("Network response was not ok"); + } + const { data: marketCapData } = await marketCapResponse.json(); + if (!marketCapData || marketCapData.totalSupply.length === 0) { + tvl = "0"; + } + const totalSupply = marketCapData.totalSupply.reduce((acc, { reserved1, reserved2, pool: { token1, token2 } }) => { + const tokenPrice1 = getTokenPrice(token1, tokenPrices); + const tokenPrice2 = getTokenPrice(token2, tokenPrices); + const r12 = tokenPrice1.multipliedBy(new bignumber_default(reserved1).div(new bignumber_default(10).pow(18))); + const r22 = tokenPrice2.multipliedBy(new bignumber_default(reserved2).div(new bignumber_default(10).pow(18))); + return acc.plus(r12).plus(r22); + }, new bignumber_default(0)); + tvl = parseFloat(totalSupply.toString()).toFixed(4).toString(); let tokenAddresess = []; for (let i = 0; i < data.allPoolsList.length; i++) { if (!tokenAddresess.includes(data.allPoolsList[i].token1)) { @@ -177805,6 +177811,9 @@ query FETCH_TX_INFO { getPools: async (limit, offset, search, signerAddress) => { return await fetchAllPools(limit, offset, search, signerAddress); }, + getMarketCap: () => { + return getMarketCap(); + }, getPoolPairs: async (tokenAddress) => { return await getPoolPairs(tokenAddress); }, @@ -180318,14 +180327,14 @@ query FETCH_TX_INFO { var UNSORTED = [0, 2, 42]; var TESTNETS = ["testnet"]; function toExpanded(o) { - const network3 = o.network || ""; - const nameParts = network3.replace(/_/g, "-").split("-"); + const network2 = o.network || ""; + const nameParts = network2.replace(/_/g, "-").split("-"); const n = o; - n.slip44 = knownLedger[network3]; + n.slip44 = knownLedger[network2]; n.hasLedgerSupport = !!n.slip44; - n.genesisHash = knownGenesis[network3] || []; - n.icon = knownIcon[network3] || "substrate"; - n.isTestnet = !!knownTestnet[network3] || TESTNETS.includes(nameParts[nameParts.length - 1]); + n.genesisHash = knownGenesis[network2] || []; + n.icon = knownIcon[network2] || "substrate"; + n.isTestnet = !!knownTestnet[network2] || TESTNETS.includes(nameParts[nameParts.length - 1]); n.isIgnored = n.isTestnet || !(o.standardAccount && o.decimals && o.symbols) && o.prefix !== 42; return n; } @@ -183866,9 +183875,9 @@ zoo`.split("\n"); var sanitizeMap = /* @__PURE__ */ new Map(); function sanitize(value) { const startValue = value.toString(); - const memoized2 = sanitizeMap.get(startValue); - if (memoized2) { - return memoized2; + const memoized = sanitizeMap.get(startValue); + if (memoized) { + return memoized; } let result = startValue; for (let i = 0, count = mappings.length; i < count; i++) { @@ -189522,14 +189531,14 @@ zoo`.split("\n"); var UNSORTED2 = [0, 2, 42]; var TESTNETS2 = ["testnet"]; function toExpanded2(o) { - const network3 = o.network || ""; - const nameParts = network3.replace(/_/g, "-").split("-"); + const network2 = o.network || ""; + const nameParts = network2.replace(/_/g, "-").split("-"); const n = o; - n.slip44 = knownLedger2[network3]; + n.slip44 = knownLedger2[network2]; n.hasLedgerSupport = !!n.slip44; - n.genesisHash = knownGenesis2[network3] || []; - n.icon = knownIcon2[network3] || "substrate"; - n.isTestnet = !!knownTestnet2[network3] || TESTNETS2.includes(nameParts[nameParts.length - 1]); + n.genesisHash = knownGenesis2[network2] || []; + n.icon = knownIcon2[network2] || "substrate"; + n.isTestnet = !!knownTestnet2[network2] || TESTNETS2.includes(nameParts[nameParts.length - 1]); n.isIgnored = n.isTestnet || !(o.standardAccount && o.decimals?.length && o.symbols?.length) && o.prefix !== 42; return n; } @@ -201965,11 +201974,9 @@ zoo`.split("\n"); var hmac2 = (hash8, key2, message) => new HMAC(hash8, key2).update(message).digest(); hmac2.create = (hash8, key2) => new HMAC(hash8, key2); - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/esm/abstract/utils.js + // ../../node_modules/@noble/curves/esm/abstract/utils.js var utils_exports2 = {}; __export(utils_exports2, { - aInRange: () => aInRange, - abool: () => abool, abytes: () => abytes, bitGet: () => bitGet, bitLen: () => bitLen, @@ -201984,10 +201991,7 @@ zoo`.split("\n"); equalBytes: () => equalBytes, hexToBytes: () => hexToBytes, hexToNumber: () => hexToNumber, - inRange: () => inRange, isBytes: () => isBytes5, - memoized: () => memoized, - notImplemented: () => notImplemented, numberToBytesBE: () => numberToBytesBE, numberToBytesLE: () => numberToBytesLE, numberToHexUnpadded: () => numberToHexUnpadded, @@ -202005,10 +202009,6 @@ zoo`.split("\n"); if (!isBytes5(item)) throw new Error("Uint8Array expected"); } - function abool(title, value) { - if (typeof value !== "boolean") - throw new Error(`${title} must be valid boolean, got "${value}".`); - } var hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0")); function bytesToHex(bytes5) { abytes(bytes5); @@ -202118,14 +202118,6 @@ zoo`.split("\n"); throw new Error(`utf8ToBytes expected string, got ${typeof str2}`); return new Uint8Array(new TextEncoder().encode(str2)); } - var isPosBig = (n) => typeof n === "bigint" && _0n <= n; - function inRange(n, min, max2) { - return isPosBig(n) && isPosBig(min) && isPosBig(max2) && min <= n && n < max2; - } - function aInRange(title, n, min, max2) { - if (!inRange(n, min, max2)) - throw new Error(`expected valid ${title}: ${min} <= n < ${max2}, got ${typeof n} ${n}`); - } function bitLen(n) { let len; for (len = 0; n > _0n; n >>= _1n, len += 1) @@ -202218,22 +202210,8 @@ zoo`.split("\n"); checkField(fieldName, type, true); return object; } - var notImplemented = () => { - throw new Error("not implemented"); - }; - function memoized(fn2) { - const map2 = /* @__PURE__ */ new WeakMap(); - return (arg, ...args) => { - const val = map2.get(arg); - if (val !== void 0) - return val; - const computed = fn2(arg, ...args); - map2.set(arg, computed); - return computed; - }; - } - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/esm/abstract/modular.js + // ../../node_modules/@noble/curves/esm/abstract/modular.js var _0n2 = BigInt(0); var _1n2 = BigInt(1); var _2n2 = BigInt(2); @@ -202496,22 +202474,15 @@ zoo`.split("\n"); return isLE4 ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen); } - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/esm/abstract/curve.js + // ../../node_modules/@noble/curves/esm/abstract/curve.js var _0n3 = BigInt(0); var _1n3 = BigInt(1); - var pointPrecomputes = /* @__PURE__ */ new WeakMap(); - var pointWindowSizes = /* @__PURE__ */ new WeakMap(); function wNAF(c, bits2) { const constTimeNegate = (condition, item) => { const neg3 = item.negate(); return condition ? neg3 : item; }; - const validateW = (W) => { - if (!Number.isSafeInteger(W) || W <= 0 || W > bits2) - throw new Error(`Wrong window size=${W}, should be [1..${bits2}]`); - }; const opts = (W) => { - validateW(W); const windows = Math.ceil(bits2 / W) + 1; const windowSize = 2 ** (W - 1); return { windows, windowSize }; @@ -202572,20 +202543,16 @@ zoo`.split("\n"); } return { p, f: f10 }; }, - wNAFCached(P, n, transform) { - const W = pointWindowSizes.get(P) || 1; - let comp = pointPrecomputes.get(P); + wNAFCached(P, precomputesMap, n, transform) { + const W = P._WINDOW_SIZE || 1; + let comp = precomputesMap.get(P); if (!comp) { comp = this.precomputeWindow(P, W); - if (W !== 1) - pointPrecomputes.set(P, transform(comp)); + if (W !== 1) { + precomputesMap.set(P, transform(comp)); + } } return this.wNAF(W, comp, n); - }, - setWindowSize(P, W) { - validateW(W); - pointWindowSizes.set(P, W); - pointPrecomputes.delete(P); } }; } @@ -202607,13 +202574,7 @@ zoo`.split("\n"); }); } - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/esm/abstract/weierstrass.js - function validateSigVerOpts(opts) { - if (opts.lowS !== void 0) - abool("lowS", opts.lowS); - if (opts.prehash !== void 0) - abool("prehash", opts.prehash); - } + // ../../node_modules/@noble/curves/esm/abstract/weierstrass.js function validatePointOpts(curve) { const opts = validateBasic(curve); validateObject(opts, { @@ -202717,10 +202678,14 @@ zoo`.split("\n"); if (!Fp3.eql(Fp3.sqr(CURVE2.Gy), weierstrassEquation(CURVE2.Gx))) throw new Error("bad generator point: equation left != right"); function isWithinCurveOrder2(num) { - return inRange(num, _1n4, CURVE2.n); + return typeof num === "bigint" && _0n4 < num && num < CURVE2.n; + } + function assertGE(num) { + if (!isWithinCurveOrder2(num)) + throw new Error("Expected valid bigint: 0 < bigint < curve.n"); } function normPrivateKeyToScalar(key2) { - const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N11 } = CURVE2; + const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE2; if (lengths && typeof key2 !== "bigint") { if (isBytes5(key2)) key2 = bytesToHex(key2); @@ -202735,47 +202700,15 @@ zoo`.split("\n"); throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key2}`); } if (wrapPrivateKey) - num = mod(num, N11); - aInRange("private key", num, _1n4, N11); + num = mod(num, n); + assertGE(num); return num; } + const pointPrecomputes2 = /* @__PURE__ */ new Map(); function assertPrjPoint(other) { if (!(other instanceof Point4)) throw new Error("ProjectivePoint expected"); } - const toAffineMemo = memoized((p, iz2) => { - const { px: x, py: y, pz: z } = p; - if (Fp3.eql(z, Fp3.ONE)) - return { x, y }; - const is0 = p.is0(); - if (iz2 == null) - iz2 = is0 ? Fp3.ONE : Fp3.inv(z); - const ax2 = Fp3.mul(x, iz2); - const ay2 = Fp3.mul(y, iz2); - const zz2 = Fp3.mul(z, iz2); - if (is0) - return { x: Fp3.ZERO, y: Fp3.ZERO }; - if (!Fp3.eql(zz2, Fp3.ONE)) - throw new Error("invZ was invalid"); - return { x: ax2, y: ay2 }; - }); - const assertValidMemo = memoized((p) => { - if (p.is0()) { - if (CURVE2.allowInfinityPoint && !Fp3.is0(p.py)) - return; - throw new Error("bad point: ZERO"); - } - const { x, y } = p.toAffine(); - if (!Fp3.isValid(x) || !Fp3.isValid(y)) - throw new Error("bad point: x or y not FE"); - const left = Fp3.sqr(y); - const right = weierstrassEquation(x); - if (!Fp3.eql(left, right)) - throw new Error("bad point: equation left != right"); - if (!p.isTorsionFree()) - throw new Error("bad point: not in prime-order subgroup"); - return true; - }); class Point4 { constructor(px2, py2, pz2) { this.px = px2; @@ -202787,7 +202720,6 @@ zoo`.split("\n"); throw new Error("y required"); if (pz2 == null || !Fp3.isValid(pz2)) throw new Error("z required"); - Object.freeze(this); } static fromAffine(p) { const { x, y } = p || {}; @@ -202819,10 +202751,24 @@ zoo`.split("\n"); return Point4.BASE.multiply(normPrivateKeyToScalar(privateKey)); } _setWindowSize(windowSize) { - wnaf.setWindowSize(this, windowSize); + this._WINDOW_SIZE = windowSize; + pointPrecomputes2.delete(this); } assertValidity() { - assertValidMemo(this); + if (this.is0()) { + if (CURVE2.allowInfinityPoint && !Fp3.is0(this.py)) + return; + throw new Error("bad point: ZERO"); + } + const { x, y } = this.toAffine(); + if (!Fp3.isValid(x) || !Fp3.isValid(y)) + throw new Error("bad point: x or y not FE"); + const left = Fp3.sqr(y); + const right = weierstrassEquation(x); + if (!Fp3.eql(left, right)) + throw new Error("bad point: equation left != right"); + if (!this.isTorsionFree()) + throw new Error("bad point: not in prime-order subgroup"); } hasEvenY() { const { y } = this.toAffine(); @@ -202935,19 +202881,22 @@ zoo`.split("\n"); return this.equals(Point4.ZERO); } wNAF(n) { - return wnaf.wNAFCached(this, n, Point4.normalizeZ); + return wnaf.wNAFCached(this, pointPrecomputes2, n, (comp) => { + const toInv = Fp3.invertBatch(comp.map((p) => p.pz)); + return comp.map((p, i) => p.toAffine(toInv[i])).map(Point4.fromAffine); + }); } - multiplyUnsafe(sc2) { - aInRange("scalar", sc2, _0n4, CURVE2.n); + multiplyUnsafe(n) { const I = Point4.ZERO; - if (sc2 === _0n4) + if (n === _0n4) return I; - if (sc2 === _1n4) + assertGE(n); + if (n === _1n4) return this; const { endo } = CURVE2; if (!endo) - return wnaf.unsafeLadder(this, sc2); - let { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(sc2); + return wnaf.unsafeLadder(this, n); + let { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(n); let k1p = I; let k2p = I; let d = this; @@ -202968,11 +202917,12 @@ zoo`.split("\n"); return k1p.add(k2p); } multiply(scalar) { - const { endo, n: N11 } = CURVE2; - aInRange("scalar", scalar, _1n4, N11); + assertGE(scalar); + let n = scalar; let point3, fake; + const { endo } = CURVE2; if (endo) { - const { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(scalar); + const { k1neg, k1: k12, k2neg, k2: k22 } = endo.splitScalar(n); let { p: k1p, f: f1p } = this.wNAF(k12); let { p: k2p, f: f2p } = this.wNAF(k22); k1p = wnaf.constTimeNegate(k1neg, k1p); @@ -202981,7 +202931,7 @@ zoo`.split("\n"); point3 = k1p.add(k2p); fake = f1p.add(f2p); } else { - const { p, f: f10 } = this.wNAF(scalar); + const { p, f: f10 } = this.wNAF(n); point3 = p; fake = f10; } @@ -202994,7 +202944,18 @@ zoo`.split("\n"); return sum.is0() ? void 0 : sum; } toAffine(iz2) { - return toAffineMemo(this, iz2); + const { px: x, py: y, pz: z } = this; + const is0 = this.is0(); + if (iz2 == null) + iz2 = is0 ? Fp3.ONE : Fp3.inv(z); + const ax2 = Fp3.mul(x, iz2); + const ay2 = Fp3.mul(y, iz2); + const zz2 = Fp3.mul(z, iz2); + if (is0) + return { x: Fp3.ZERO, y: Fp3.ZERO }; + if (!Fp3.eql(zz2, Fp3.ONE)) + throw new Error("invZ was invalid"); + return { x: ax2, y: ay2 }; } isTorsionFree() { const { h: cofactor, isTorsionFree } = CURVE2; @@ -203013,12 +202974,10 @@ zoo`.split("\n"); return this.multiplyUnsafe(CURVE2.h); } toRawBytes(isCompressed = true) { - abool("isCompressed", isCompressed); this.assertValidity(); return toBytes4(Point4, this, isCompressed); } toHex(isCompressed = true) { - abool("isCompressed", isCompressed); return bytesToHex(this.toRawBytes(isCompressed)); } } @@ -203052,6 +203011,9 @@ zoo`.split("\n"); const { Fp: Fp3, n: CURVE_ORDER } = CURVE2; const compressedLen = Fp3.BYTES + 1; const uncompressedLen = 2 * Fp3.BYTES + 1; + function isValidFieldElement2(num) { + return _0n4 < num && num < Fp3.ORDER; + } function modN(a) { return mod(a, CURVE_ORDER); } @@ -203064,7 +203026,6 @@ zoo`.split("\n"); const a = point3.toAffine(); const x = Fp3.toBytes(a.x); const cat = concatBytes2; - abool("isCompressed", isCompressed); if (isCompressed) { return cat(Uint8Array.from([point3.hasEvenY() ? 2 : 3]), x); } else { @@ -203077,7 +203038,7 @@ zoo`.split("\n"); const tail = bytes5.subarray(1); if (len === compressedLen && (head === 2 || head === 3)) { const x = bytesToNumberBE(tail); - if (!inRange(x, _1n4, Fp3.ORDER)) + if (!isValidFieldElement2(x)) throw new Error("Point is not on curve"); const y22 = weierstrassEquation(x); let y; @@ -203127,8 +203088,10 @@ zoo`.split("\n"); return new Signature3(r10, s); } assertValidity() { - aInRange("r", this.r, _1n4, CURVE_ORDER); - aInRange("s", this.s, _1n4, CURVE_ORDER); + if (!isWithinCurveOrder2(this.r)) + throw new Error("r must be 0 < r < CURVE.n"); + if (!isWithinCurveOrder2(this.s)) + throw new Error("s must be 0 < s < CURVE.n"); } addRecoveryBit(recovery) { return new Signature3(this.r, this.s, recovery); @@ -203224,7 +203187,10 @@ zoo`.split("\n"); }; const ORDER_MASK = bitMask(CURVE2.nBitLength); function int2octets2(num) { - aInRange(`num < 2^${CURVE2.nBitLength}`, num, _0n4, ORDER_MASK); + if (typeof num !== "bigint") + throw new Error("bigint expected"); + if (!(_0n4 <= num && num < ORDER_MASK)) + throw new Error(`bigint expected < 2^${CURVE2.nBitLength}`); return numberToBytesBE(num, CURVE2.nByteLength); } function prepSig(msgHash, privateKey, opts = defaultSigOpts) { @@ -203235,7 +203201,6 @@ zoo`.split("\n"); if (lowS == null) lowS = true; msgHash = ensureBytes("msgHash", msgHash); - validateSigVerOpts(opts); if (prehash) msgHash = ensureBytes("prehashed msgHash", hash8(msgHash)); const h1int = bits2int_modN(msgHash); @@ -203284,7 +203249,6 @@ zoo`.split("\n"); publicKey = ensureBytes("publicKey", publicKey); if ("strict" in opts) throw new Error("options.strict was renamed to lowS"); - validateSigVerOpts(opts); const { lowS, prehash } = opts; let _sig = void 0; let P; @@ -203336,7 +203300,7 @@ zoo`.split("\n"); }; } - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/esm/_shortw_utils.js + // ../../node_modules/@noble/curves/esm/_shortw_utils.js function getHash(hash8) { return { hash: hash8, @@ -203349,7 +203313,7 @@ zoo`.split("\n"); return Object.freeze({ ...create(defHash), create }); } - // ../../node_modules/@polkadot/util-crypto/node_modules/@noble/curves/esm/secp256k1.js + // ../../node_modules/@noble/curves/esm/secp256k1.js var secp256k1P = BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"); var secp256k1N = BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"); var _1n5 = BigInt(1); @@ -208063,12 +208027,12 @@ zoo`.split("\n"); if (256 % W) { throw new Error("Point#wNAF: Invalid precomputation window, must be power of 2"); } - let precomputes = affinePoint && pointPrecomputes2.get(affinePoint); + let precomputes = affinePoint && pointPrecomputes.get(affinePoint); if (!precomputes) { precomputes = this.precomputeWindow(W); if (affinePoint && W !== 1) { precomputes = JacobianPoint.normalizeZ(precomputes); - pointPrecomputes2.set(affinePoint, precomputes); + pointPrecomputes.set(affinePoint, precomputes); } } let p = JacobianPoint.ZERO; @@ -208137,7 +208101,7 @@ zoo`.split("\n"); }; JacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n8); JacobianPoint.ZERO = new JacobianPoint(_0n8, _1n8, _0n8); - var pointPrecomputes2 = /* @__PURE__ */ new WeakMap(); + var pointPrecomputes = /* @__PURE__ */ new WeakMap(); var Point3 = class { constructor(x, y) { this.x = x; @@ -208145,7 +208109,7 @@ zoo`.split("\n"); } _setWindowSize(windowSize) { this._WINDOW_SIZE = windowSize; - pointPrecomputes2.delete(this); + pointPrecomputes.delete(this); } static fromCompressedHex(bytes5) { const isShort = bytes5.length === 32; @@ -210555,14 +210519,14 @@ zoo`.split("\n"); var UNSORTED3 = [0, 2, 42]; var TESTNETS3 = ["testnet"]; function toExpanded3(o) { - const network3 = o.network || ""; - const nameParts = network3.replace(/_/g, "-").split("-"); + const network2 = o.network || ""; + const nameParts = network2.replace(/_/g, "-").split("-"); const n = o; - n.slip44 = knownLedger3[network3]; + n.slip44 = knownLedger3[network2]; n.hasLedgerSupport = !!n.slip44; - n.genesisHash = knownGenesis3[network3] || []; - n.icon = knownIcon3[network3] || "substrate"; - n.isTestnet = !!knownTestnet3[network3] || TESTNETS3.includes(nameParts[nameParts.length - 1]); + n.genesisHash = knownGenesis3[network2] || []; + n.icon = knownIcon3[network2] || "substrate"; + n.isTestnet = !!knownTestnet3[network2] || TESTNETS3.includes(nameParts[nameParts.length - 1]); n.isIgnored = n.isTestnet || !(o.standardAccount && o.decimals && o.decimals.length && o.symbols && o.symbols.length) && o.prefix !== 42; return n; } @@ -212607,14 +212571,14 @@ zoo`.split("\n"); var UNSORTED4 = [0, 2, 42]; var TESTNETS4 = ["testnet"]; function toExpanded4(o) { - const network3 = o.network || ""; - const nameParts = network3.replace(/_/g, "-").split("-"); + const network2 = o.network || ""; + const nameParts = network2.replace(/_/g, "-").split("-"); const n = o; - n.slip44 = knownLedger4[network3]; + n.slip44 = knownLedger4[network2]; n.hasLedgerSupport = !!n.slip44; - n.genesisHash = knownGenesis4[network3] || []; - n.icon = knownIcon4[network3] || "substrate"; - n.isTestnet = !!knownTestnet4[network3] || TESTNETS4.includes(nameParts[nameParts.length - 1]); + n.genesisHash = knownGenesis4[network2] || []; + n.icon = knownIcon4[network2] || "substrate"; + n.isTestnet = !!knownTestnet4[network2] || TESTNETS4.includes(nameParts[nameParts.length - 1]); n.isIgnored = n.isTestnet || !(o.standardAccount && o.decimals?.length && o.symbols?.length) && o.prefix !== 42; return n; } @@ -212634,7 +212598,7 @@ zoo`.split("\n"); var selectableNetworks4 = availableNetworks4.filter(filterSelectable4); // node_modules/@polkadot/ui-keyring/node_modules/@polkadot/ui-settings/defaults/chains.js - var chains = /* @__PURE__ */ selectableNetworks4.filter((n) => n.genesisHash.length).reduce((chains2, { genesisHash, network: network3 }) => objectSpread3(chains2, { [network3]: genesisHash }), {}); + var chains = /* @__PURE__ */ selectableNetworks4.filter((n) => n.genesisHash.length).reduce((chains2, { genesisHash, network: network2 }) => objectSpread3(chains2, { [network2]: genesisHash }), {}); // node_modules/@polkadot/ui-keyring/node_modules/@polkadot/x-randomvalues/browser.js var crypto7 = xglobal3.crypto; @@ -216293,7 +216257,7 @@ zoo`.split("\n"); return (component === null || component === void 0 ? void 0 : component.type) === "VERSION"; } var name$p = "@firebase/app"; - var version$1 = "0.10.8"; + var version$1 = "0.10.6"; var logger44 = new Logger45("@firebase/app"); var name$o = "@firebase/app-compat"; var name$n = "@firebase/analytics-compat"; @@ -216738,7 +216702,7 @@ zoo`.split("\n"); // ../../node_modules/firebase/app/dist/esm/index.esm.js var name3 = "firebase"; - var version24 = "10.12.5"; + var version24 = "10.12.3"; registerVersion(name3, version24, "app"); // ../../node_modules/@firebase/installations/dist/esm/index.esm2017.js @@ -217281,7 +217245,7 @@ zoo`.split("\n"); var logger45 = new Logger45("@firebase/analytics"); var ERRORS2 = { ["already-exists"]: "A Firebase Analytics instance with the appId {$id} already exists. Only one Firebase Analytics instance can be created for each appId.", - ["already-initialized"]: "initializeAnalytics() cannot be called again with different options than those it was initially called with. It can be called again with the same options to return the existing instance, or getAnalytics() can be used to get a reference to the already-initialized instance.", + ["already-initialized"]: "initializeAnalytics() cannot be called again with different options than those it was initially called with. It can be called again with the same options to return the existing instance, or getAnalytics() can be used to get a reference to the already-intialized instance.", ["already-initialized-settings"]: "Firebase Analytics has already been initialized.settings() must be called before initializing any Analytics instanceor it will have no effect.", ["interop-component-reg-failed"]: "Firebase Analytics Interop Component failed to instantiate: {$reason}", ["invalid-analytics-context"]: "Firebase Analytics is not supported in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}", @@ -217734,7 +217698,7 @@ zoo`.split("\n"); logEvent$1(wrappedGtagFunction, initializationPromisesMap[analyticsInstance.app.options.appId], eventName, eventParams, options).catch((e) => logger45.error(e)); } var name5 = "@firebase/analytics"; - var version26 = "0.10.7"; + var version26 = "0.10.5"; function registerAnalytics() { _registerComponent(new Component(ANALYTICS_TYPE, (container, { options: analyticsOptions }) => { const app = container.getProvider("app").getImmediate(); diff --git a/lib/js/packages/reef-mobile-js/src/jsApi/poolsApi.ts b/lib/js/packages/reef-mobile-js/src/jsApi/poolsApi.ts index 8c3901fd..949d7d0c 100644 --- a/lib/js/packages/reef-mobile-js/src/jsApi/poolsApi.ts +++ b/lib/js/packages/reef-mobile-js/src/jsApi/poolsApi.ts @@ -1,9 +1,9 @@ import { reefState,tokenIconUtils,tokenPriceUtils,tokenUtil } from '@reef-chain/util-lib'; -import { network, reefState,tokenIconUtils,tokenPriceUtils,tokenUtil } from '@reef-chain/util-lib'; import BigNumber from 'bignumber.js'; import { getIconUrl } from './utils/poolUtils'; import { firstValueFrom, skipWhile } from 'rxjs'; import { getDexUrl } from './utils/networkUtils'; +import { BigNumber as BN } from 'bignumber.js'; const getAllPoolsQuery = (limit: number, offset: number, search: string, signerAddress: string) => { return { @@ -60,6 +60,23 @@ const getPoolPairsQuery = (tokenAddr, limit, offset) => { } }; +const getPoolTotalValueLockedQry = (toTime: string): any => ({ + query: ` + query totalSupply($toTime: String!) { + totalSupply(toTime: $toTime) { + pool { + address + token1 + token2 + } + reserved1 + reserved2 + } + } +`, + variables: { toTime }, +}); + const getTokenInfoQuery = (tokenAddr:string) => { return { query: ` @@ -76,7 +93,6 @@ const getTokenInfoQuery = (tokenAddr:string) => { } }; - const calculateUSDTVL = ({ reserved1, reserved2, @@ -126,6 +142,18 @@ const calculateVolumeChange = (pool: any, tokenPrices: any): number => { return res.toNumber(); }; +const getTokenPrice = (address: string, prices: any): BN => new BN( + prices[address] && !Number.isNaN(prices[address]) + ? prices[address] + : 0, +); + +let tvl = '0'; + +export const getMarketCap = ()=>{ + return tvl; +} + export const fetchAllPools = async (limit: number, offset: number, search: string, signerAddress: string) => { try { const selectedNw = await firstValueFrom(reefState.selectedNetwork$); @@ -155,6 +183,36 @@ export const fetchAllPools = async (limit: number, offset: number, search: strin tokenPriceUtils.calculateTokenPrices(data.allPoolsList,tokenPrices); + const toTime = new Date(); + + const marketCapResponse = await fetch(getDexUrl(selectedNw.name), { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(getPoolTotalValueLockedQry(toTime.toISOString())), + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + const { data:marketCapData } = await marketCapResponse.json(); + + if (!marketCapData || marketCapData.totalSupply.length === 0) { + tvl= '0'; + } + + const totalSupply = marketCapData.totalSupply.reduce((acc, { reserved1, reserved2, pool: { token1, token2 } }) => { + const tokenPrice1 = getTokenPrice(token1, tokenPrices); + const tokenPrice2 = getTokenPrice(token2, tokenPrices); + const r1 = tokenPrice1.multipliedBy(new BigNumber(reserved1).div(new BigNumber(10).pow(18))); + const r2 = tokenPrice2.multipliedBy(new BigNumber(reserved2).div(new BigNumber(10).pow(18))); + return acc.plus(r1).plus(r2); + }, new BigNumber(0)); + + tvl = parseFloat(totalSupply.toString()).toFixed(4).toString(); + let tokenAddresess = []; for (let i = 0; i < data.allPoolsList.length; i++) { diff --git a/lib/js/packages/reef-mobile-js/src/jsApi/utilsApi.ts b/lib/js/packages/reef-mobile-js/src/jsApi/utilsApi.ts index 26b05f6f..36bb851c 100644 --- a/lib/js/packages/reef-mobile-js/src/jsApi/utilsApi.ts +++ b/lib/js/packages/reef-mobile-js/src/jsApi/utilsApi.ts @@ -8,7 +8,7 @@ import {ERC20} from "./abi/ERC20"; import { fetchTxInfo } from './txInfoApi'; import { addressUtils } from '@reef-chain/util-lib'; import { fetchNFTinfo } from './utils/nftUtils'; -import { fetchAllPools,getPoolPairs, getTokenInfo } from './poolsApi'; +import { fetchAllPools,getMarketCap,getPoolPairs, getTokenInfo } from './poolsApi'; function lagWhenDisconnected() { return status => { @@ -65,6 +65,9 @@ export const initApi = () => { getPools: async (limit:number,offset:number,search:string,signerAddress:string) => { return await fetchAllPools(limit,offset,search,signerAddress); }, + getMarketCap:()=>{ + return getMarketCap(); + }, getPoolPairs: async (tokenAddress:string) => { return await getPoolPairs(tokenAddress); }, diff --git a/lib/model/tokens/TokensCtrl.dart b/lib/model/tokens/TokensCtrl.dart index a49ea33f..03236c87 100644 --- a/lib/model/tokens/TokensCtrl.dart +++ b/lib/model/tokens/TokensCtrl.dart @@ -82,6 +82,10 @@ class TokenCtrl { return jsApi.jsPromise('window.utils.getPools(10,${offset},"","")'); } + Future getMarketCap() async { + return jsApi.jsPromise('window.utils.getMarketCap()'); + } + Future getPoolPairs(String tokenAddress) async { return jsApi.jsPromise('window.utils.getPoolPairs("${tokenAddress}")'); } diff --git a/lib/pages/pools_page.dart b/lib/pages/pools_page.dart index ac83c77d..2ac31d50 100644 --- a/lib/pages/pools_page.dart +++ b/lib/pages/pools_page.dart @@ -38,6 +38,9 @@ class _PoolsPageState extends State { // filtering pools bool hasReef = false; //if user has reef display only swappable + //market cap + String marketCap = "0"; + // search input listeners bool _isSearchEditing = false; @@ -58,6 +61,15 @@ class _PoolsPageState extends State { }); _fetchUserBalance(); _fetchTokensAndPools(); + _fetchMc(); + } + + void _fetchMc(){ + ReefAppState.instance.tokensCtrl.getMarketCap().then((v)=>{ + setState(() { + marketCap=v; + }) + }); } void _fetchUserBalance() { @@ -386,104 +398,8 @@ class _PoolsPageState extends State { color: Colors.grey.shade100, ), ), - Row( - children: [ - // GestureDetector( - // onTap: () { - // setState(() { - // filterSwappable = true; - // }); - // }, - // child: Container( - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(20), - // color: Styles.boxBackgroundColor, - // ), - // child: Padding( - // padding: const EdgeInsets.all(8.0), - // child: Icon( - // Icons.sort, - // size: 18, - // color: Styles.textLightColor, - // ), - // ), - // ), - // ), - // Gap(8.0), - // GestureDetector( - // onTap: () { - // setState(() { - // displaySearchModal = true; - // }); - // }, - // child: Container( - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(20), - // gradient: Styles.buttonGradient), - // child: Padding( - // padding: const EdgeInsets.all(8.0), - // child: Icon( - // Icons.search, - // size: 18, - // color: Styles.whiteColor, - // ), - // ), - // ), - // ), - ], - ), ], ), - // if(filterSwappable) - // Container( - // padding: EdgeInsets.only(bottom: 4.0), - // child: Row( - // children: [ - // Text( - // "Filter applied ", - // style: TextStyle( - // color: Styles.textLightColor, - // fontWeight: FontWeight.bold), - // ), - // Container( - // padding: EdgeInsets.only( - // top: 4.0, bottom: 4.0, left: 12.0, right: 12.0), - // decoration: BoxDecoration( - // color: Styles.whiteColor, - // borderRadius: BorderRadius.circular(12.0), - // ), - // child: Row( - // children: [ - // Text( - // "can swap", - // style: TextStyle( - // color: Styles.textLightColor, - // fontSize: 12, - // fontWeight: FontWeight.w600), - // ), - // Gap(8.0), - // GestureDetector( - // onTap: (){ - // setState(() { - // filterSwappable=false; - // }); - // }, - // child: Container( - // decoration: BoxDecoration( - // color: Styles.greyColor, - // borderRadius: BorderRadius.circular(20)), - // child: Padding( - // padding: const EdgeInsets.all(2.0), - // child: Icon(CupertinoIcons.xmark, - // color: Colors.black87, size: 12), - // ), - // )), - // ], - // ), - // ), - // ], - // ), - // ), if (hasReef) Column( children: [ @@ -508,6 +424,23 @@ class _PoolsPageState extends State { ], ), ), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("Total Supply",style: GoogleFonts.spaceGrotesk( + fontWeight: FontWeight.w500, + fontSize: 22, + color: Colors.grey.shade100, + ),), + Text("\$ ${marketCap}",style: GoogleFonts.spaceGrotesk( + fontWeight: FontWeight.w500, + fontSize: 18, + color:Styles.textLightColor, + ),), + Gap(4.0) + ], + ), Flexible( child: NotificationListener( onNotification: (ScrollNotification scrollInfo) {