@alcorexchange/alcor-swap-sdk 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/entities/fractions/currencyAmount.js +3 -3
- package/build/entities/pool.js +4 -4
- package/build/entities/route.js +4 -4
- package/build/entities/trade.js +32 -2
- package/build/esm/entities/fractions/currencyAmount.js +3 -3
- package/build/esm/entities/pool.js +4 -4
- package/build/esm/entities/route.js +4 -4
- package/build/esm/entities/trade.js +32 -2
- package/package.json +2 -2
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.CurrencyAmount = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _msgpack = require("@msgpack/msgpack");
|
|
8
8
|
var _tinyInvariant = _interopRequireDefault(require("tiny-invariant"));
|
|
9
9
|
var _token = require("../token");
|
|
10
10
|
var _fraction = require("./fraction");
|
|
@@ -153,12 +153,12 @@ let CurrencyAmount = exports.CurrencyAmount = /*#__PURE__*/function (_Fraction)
|
|
|
153
153
|
numerator: amount.numerator.toString(),
|
|
154
154
|
denominator: amount.denominator.toString()
|
|
155
155
|
};
|
|
156
|
-
return
|
|
156
|
+
return (0, _msgpack.encode)(json);
|
|
157
157
|
}
|
|
158
158
|
}, {
|
|
159
159
|
key: "fromBuffer",
|
|
160
160
|
value: function fromBuffer(buffer) {
|
|
161
|
-
const json =
|
|
161
|
+
const json = (0, _msgpack.decode)(buffer);
|
|
162
162
|
return this.fromJSON(json);
|
|
163
163
|
}
|
|
164
164
|
}]);
|
package/build/entities/pool.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Pool = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _msgpack = require("@msgpack/msgpack");
|
|
8
8
|
var _fractions = require("./fractions");
|
|
9
9
|
var _token = require("./token");
|
|
10
10
|
var _internalConstants = require("../internalConstants");
|
|
@@ -195,7 +195,7 @@ let Pool = exports.Pool = /*#__PURE__*/function () {
|
|
|
195
195
|
} = this.swap(zeroForOne, outputAmount.quotient * _internalConstants.NEGATIVE_ONE, sqrtPriceLimitX64);
|
|
196
196
|
const inputToken = zeroForOne ? this.tokenA : this.tokenB;
|
|
197
197
|
const inputAmount = zeroForOne ? amountA : amountB;
|
|
198
|
-
const amountOutReceived = zeroForOne ? amountB : amountA * _internalConstants.NEGATIVE_ONE;
|
|
198
|
+
const amountOutReceived = zeroForOne ? amountB * _internalConstants.NEGATIVE_ONE : amountA * _internalConstants.NEGATIVE_ONE;
|
|
199
199
|
if (!(amountOutReceived === outputAmount.quotient)) {
|
|
200
200
|
throw new _errors.InsufficientReservesError();
|
|
201
201
|
}
|
|
@@ -355,7 +355,7 @@ let Pool = exports.Pool = /*#__PURE__*/function () {
|
|
|
355
355
|
value: function toBuffer(pool) {
|
|
356
356
|
if (pool.buffer) return pool.buffer;
|
|
357
357
|
const json = Pool.toJSON(pool);
|
|
358
|
-
pool.buffer =
|
|
358
|
+
pool.buffer = (0, _msgpack.encode)(json);
|
|
359
359
|
const hash = Pool.createHash(pool.buffer, pool);
|
|
360
360
|
if (hash) pool.bufferHash = hash;
|
|
361
361
|
return pool.buffer;
|
|
@@ -374,7 +374,7 @@ let Pool = exports.Pool = /*#__PURE__*/function () {
|
|
|
374
374
|
if (bufferHash && this.hashToPoolMap.has(bufferHash)) {
|
|
375
375
|
return this.hashToPoolMap.get(bufferHash);
|
|
376
376
|
}
|
|
377
|
-
const json =
|
|
377
|
+
const json = (0, _msgpack.decode)(bytes);
|
|
378
378
|
const pool = Pool.fromJSON(json);
|
|
379
379
|
if (bufferHash) this.hashToPoolMap.set(bufferHash, pool);
|
|
380
380
|
this.idToPoolMap.set(pool.id, pool);
|
package/build/entities/route.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Route = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _msgpack = require("@msgpack/msgpack");
|
|
8
8
|
var _tinyInvariant = _interopRequireDefault(require("tiny-invariant"));
|
|
9
9
|
var _fractions = require("./fractions");
|
|
10
10
|
var _token = require("./token");
|
|
@@ -127,12 +127,12 @@ let Route = exports.Route = /*#__PURE__*/function () {
|
|
|
127
127
|
key: "toBuffer",
|
|
128
128
|
value: function toBuffer(route, lightWeightVersion = false) {
|
|
129
129
|
const json = this.toJSON(route, lightWeightVersion);
|
|
130
|
-
return
|
|
130
|
+
return (0, _msgpack.encode)(json);
|
|
131
131
|
}
|
|
132
132
|
}, {
|
|
133
133
|
key: "fromBuffer",
|
|
134
134
|
value: function fromBuffer(buffer) {
|
|
135
|
-
const json =
|
|
135
|
+
const json = (0, _msgpack.decode)(buffer);
|
|
136
136
|
return this.fromJSON(json);
|
|
137
137
|
}
|
|
138
138
|
}, {
|
|
@@ -151,7 +151,7 @@ let Route = exports.Route = /*#__PURE__*/function () {
|
|
|
151
151
|
output: _token.Token.toJSON(route.output),
|
|
152
152
|
_midPrice: route._midPrice
|
|
153
153
|
};
|
|
154
|
-
return
|
|
154
|
+
return (0, _msgpack.encode)(json);
|
|
155
155
|
}
|
|
156
156
|
}]);
|
|
157
157
|
}();
|
package/build/entities/trade.js
CHANGED
|
@@ -492,8 +492,38 @@ let Trade = exports.Trade = /*#__PURE__*/function () {
|
|
|
492
492
|
key: "bestTradeExactOut",
|
|
493
493
|
value: function bestTradeExactOut(routes, currencyAmountOut, maxNumResults = 1) {
|
|
494
494
|
(0, _tinyInvariant.default)(routes.length > 0, 'ROUTES');
|
|
495
|
+
|
|
496
|
+
// Pre-filter: remove routes with zero-liquidity pools
|
|
497
|
+
const validRoutes = routes.filter(route => route.pools.every(pool => pool.active && pool.liquidity > _internalConstants.ZERO));
|
|
498
|
+
|
|
499
|
+
// Helper: compute min liquidity (no overflow)
|
|
500
|
+
const getMinLiquidity = route => {
|
|
501
|
+
let min = route.pools[0].liquidity;
|
|
502
|
+
for (let i = 1; i < route.pools.length; i++) {
|
|
503
|
+
if (route.pools[i].liquidity < min) {
|
|
504
|
+
min = route.pools[i].liquidity;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
return min;
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
// Precompute min liquidity for sorting
|
|
511
|
+
const routeMinLiq = new Map();
|
|
512
|
+
for (const route of validRoutes) {
|
|
513
|
+
routeMinLiq.set(route, getMinLiquidity(route));
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// Sort routes: fewer hops first, then by min liquidity desc
|
|
517
|
+
validRoutes.sort((a, b) => {
|
|
518
|
+
if (a.pools.length !== b.pools.length) return a.pools.length - b.pools.length;
|
|
519
|
+
const minLiqA = routeMinLiq.get(a);
|
|
520
|
+
const minLiqB = routeMinLiq.get(b);
|
|
521
|
+
if (minLiqA > minLiqB) return -1;
|
|
522
|
+
if (minLiqA < minLiqB) return 1;
|
|
523
|
+
return 0;
|
|
524
|
+
});
|
|
495
525
|
const bestTrades = [];
|
|
496
|
-
for (const route of
|
|
526
|
+
for (const route of validRoutes) {
|
|
497
527
|
let trade;
|
|
498
528
|
try {
|
|
499
529
|
trade = Trade.fromRoute(route, currencyAmountOut, _internalConstants.TradeType.EXACT_OUTPUT);
|
|
@@ -504,7 +534,7 @@ let Trade = exports.Trade = /*#__PURE__*/function () {
|
|
|
504
534
|
}
|
|
505
535
|
throw error;
|
|
506
536
|
}
|
|
507
|
-
if (!trade.inputAmount.greaterThan(0)
|
|
537
|
+
if (!trade.inputAmount.greaterThan(0)) continue;
|
|
508
538
|
(0, _sortedInsert.sortedInsert)(bestTrades, trade, maxNumResults, tradeComparator);
|
|
509
539
|
}
|
|
510
540
|
return bestTrades;
|
|
@@ -14,7 +14,7 @@ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf
|
|
|
14
14
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
15
15
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
16
16
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
17
|
-
import
|
|
17
|
+
import { decode, encode } from "@msgpack/msgpack";
|
|
18
18
|
import invariant from "tiny-invariant";
|
|
19
19
|
import { Token } from "../token";
|
|
20
20
|
import { Fraction } from "./fraction";
|
|
@@ -146,12 +146,12 @@ export let CurrencyAmount = /*#__PURE__*/function (_Fraction) {
|
|
|
146
146
|
numerator: amount.numerator.toString(),
|
|
147
147
|
denominator: amount.denominator.toString()
|
|
148
148
|
};
|
|
149
|
-
return
|
|
149
|
+
return encode(json);
|
|
150
150
|
}
|
|
151
151
|
}, {
|
|
152
152
|
key: "fromBuffer",
|
|
153
153
|
value: function fromBuffer(buffer) {
|
|
154
|
-
const json =
|
|
154
|
+
const json = decode(buffer);
|
|
155
155
|
return this.fromJSON(json);
|
|
156
156
|
}
|
|
157
157
|
}]);
|
|
@@ -5,7 +5,7 @@ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r),
|
|
|
5
5
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
6
6
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
7
7
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
-
import
|
|
8
|
+
import { decode, encode } from "@msgpack/msgpack";
|
|
9
9
|
// Avoid importing node crypto at module load so browser bundles can tree-shake/ignore it.
|
|
10
10
|
const getNodeCrypto = () => {
|
|
11
11
|
try {
|
|
@@ -189,7 +189,7 @@ export let Pool = /*#__PURE__*/function () {
|
|
|
189
189
|
} = this.swap(zeroForOne, outputAmount.quotient * NEGATIVE_ONE, sqrtPriceLimitX64);
|
|
190
190
|
const inputToken = zeroForOne ? this.tokenA : this.tokenB;
|
|
191
191
|
const inputAmount = zeroForOne ? amountA : amountB;
|
|
192
|
-
const amountOutReceived = zeroForOne ? amountB : amountA * NEGATIVE_ONE;
|
|
192
|
+
const amountOutReceived = zeroForOne ? amountB * NEGATIVE_ONE : amountA * NEGATIVE_ONE;
|
|
193
193
|
if (!(amountOutReceived === outputAmount.quotient)) {
|
|
194
194
|
throw new InsufficientReservesError();
|
|
195
195
|
}
|
|
@@ -349,7 +349,7 @@ export let Pool = /*#__PURE__*/function () {
|
|
|
349
349
|
value: function toBuffer(pool) {
|
|
350
350
|
if (pool.buffer) return pool.buffer;
|
|
351
351
|
const json = Pool.toJSON(pool);
|
|
352
|
-
pool.buffer =
|
|
352
|
+
pool.buffer = encode(json);
|
|
353
353
|
const hash = Pool.createHash(pool.buffer, pool);
|
|
354
354
|
if (hash) pool.bufferHash = hash;
|
|
355
355
|
return pool.buffer;
|
|
@@ -368,7 +368,7 @@ export let Pool = /*#__PURE__*/function () {
|
|
|
368
368
|
if (bufferHash && this.hashToPoolMap.has(bufferHash)) {
|
|
369
369
|
return this.hashToPoolMap.get(bufferHash);
|
|
370
370
|
}
|
|
371
|
-
const json =
|
|
371
|
+
const json = decode(bytes);
|
|
372
372
|
const pool = Pool.fromJSON(json);
|
|
373
373
|
if (bufferHash) this.hashToPoolMap.set(bufferHash, pool);
|
|
374
374
|
this.idToPoolMap.set(pool.id, pool);
|
|
@@ -4,7 +4,7 @@ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r),
|
|
|
4
4
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
5
5
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
6
6
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
-
import
|
|
7
|
+
import { decode, encode } from "@msgpack/msgpack";
|
|
8
8
|
import invariant from 'tiny-invariant';
|
|
9
9
|
import { Price } from './fractions';
|
|
10
10
|
import { Token } from './token';
|
|
@@ -121,12 +121,12 @@ export let Route = /*#__PURE__*/function () {
|
|
|
121
121
|
key: "toBuffer",
|
|
122
122
|
value: function toBuffer(route, lightWeightVersion = false) {
|
|
123
123
|
const json = this.toJSON(route, lightWeightVersion);
|
|
124
|
-
return
|
|
124
|
+
return encode(json);
|
|
125
125
|
}
|
|
126
126
|
}, {
|
|
127
127
|
key: "fromBuffer",
|
|
128
128
|
value: function fromBuffer(buffer) {
|
|
129
|
-
const json =
|
|
129
|
+
const json = decode(buffer);
|
|
130
130
|
return this.fromJSON(json);
|
|
131
131
|
}
|
|
132
132
|
}, {
|
|
@@ -145,7 +145,7 @@ export let Route = /*#__PURE__*/function () {
|
|
|
145
145
|
output: Token.toJSON(route.output),
|
|
146
146
|
_midPrice: route._midPrice
|
|
147
147
|
};
|
|
148
|
-
return
|
|
148
|
+
return encode(json);
|
|
149
149
|
}
|
|
150
150
|
}]);
|
|
151
151
|
}();
|
|
@@ -483,8 +483,38 @@ export let Trade = /*#__PURE__*/function () {
|
|
|
483
483
|
key: "bestTradeExactOut",
|
|
484
484
|
value: function bestTradeExactOut(routes, currencyAmountOut, maxNumResults = 1) {
|
|
485
485
|
invariant(routes.length > 0, 'ROUTES');
|
|
486
|
+
|
|
487
|
+
// Pre-filter: remove routes with zero-liquidity pools
|
|
488
|
+
const validRoutes = routes.filter(route => route.pools.every(pool => pool.active && pool.liquidity > ZERO));
|
|
489
|
+
|
|
490
|
+
// Helper: compute min liquidity (no overflow)
|
|
491
|
+
const getMinLiquidity = route => {
|
|
492
|
+
let min = route.pools[0].liquidity;
|
|
493
|
+
for (let i = 1; i < route.pools.length; i++) {
|
|
494
|
+
if (route.pools[i].liquidity < min) {
|
|
495
|
+
min = route.pools[i].liquidity;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return min;
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
// Precompute min liquidity for sorting
|
|
502
|
+
const routeMinLiq = new Map();
|
|
503
|
+
for (const route of validRoutes) {
|
|
504
|
+
routeMinLiq.set(route, getMinLiquidity(route));
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// Sort routes: fewer hops first, then by min liquidity desc
|
|
508
|
+
validRoutes.sort((a, b) => {
|
|
509
|
+
if (a.pools.length !== b.pools.length) return a.pools.length - b.pools.length;
|
|
510
|
+
const minLiqA = routeMinLiq.get(a);
|
|
511
|
+
const minLiqB = routeMinLiq.get(b);
|
|
512
|
+
if (minLiqA > minLiqB) return -1;
|
|
513
|
+
if (minLiqA < minLiqB) return 1;
|
|
514
|
+
return 0;
|
|
515
|
+
});
|
|
486
516
|
const bestTrades = [];
|
|
487
|
-
for (const route of
|
|
517
|
+
for (const route of validRoutes) {
|
|
488
518
|
let trade;
|
|
489
519
|
try {
|
|
490
520
|
trade = Trade.fromRoute(route, currencyAmountOut, TradeType.EXACT_OUTPUT);
|
|
@@ -495,7 +525,7 @@ export let Trade = /*#__PURE__*/function () {
|
|
|
495
525
|
}
|
|
496
526
|
throw error;
|
|
497
527
|
}
|
|
498
|
-
if (!trade.inputAmount.greaterThan(0)
|
|
528
|
+
if (!trade.inputAmount.greaterThan(0)) continue;
|
|
499
529
|
sortedInsert(bestTrades, trade, maxNumResults, tradeComparator);
|
|
500
530
|
}
|
|
501
531
|
return bestTrades;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alcorexchange/alcor-swap-sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"module": "build/esm/index.js",
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"workerpool": "^9.2.0"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
+
"@msgpack/msgpack": "^3.1.2",
|
|
75
76
|
"big.js": "^5.2.2",
|
|
76
77
|
"decimal.js-light": "^2.5.0",
|
|
77
78
|
"eos-common": "^0.12.0",
|
|
@@ -79,7 +80,6 @@
|
|
|
79
80
|
"eosjs-account-name": "2.3.0",
|
|
80
81
|
"lodash": "^4.17.21",
|
|
81
82
|
"mnemonist": "^0.39.8",
|
|
82
|
-
"msgpack-lite": "^0.1.26",
|
|
83
83
|
"node-fetch": "2",
|
|
84
84
|
"tiny-invariant": "^1.1.0",
|
|
85
85
|
"tiny-warning": "^1.0.3",
|