aftermath-ts-sdk 0.0.155 → 0.0.157
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/dist/general/utils/caller.d.ts.map +1 -1
- package/dist/general/utils/caller.js +2 -1
- package/dist/packages/pools/utils/cmmmCalculations.d.ts.map +1 -1
- package/dist/packages/pools/utils/cmmmCalculations.js +18 -22
- package/dist/packages/router/api/routerApiHelpers.d.ts.map +1 -1
- package/dist/packages/router/api/routerApiHelpers.js +2 -1
- package/dist/packages/router/utils/async/routerAsyncGraph.d.ts.map +1 -1
- package/dist/packages/router/utils/async/routerAsyncGraph.js +2 -0
- package/dist/packages/router/utils/synchronous/routerGraph.d.ts +3 -1
- package/dist/packages/router/utils/synchronous/routerGraph.d.ts.map +1 -1
- package/dist/packages/router/utils/synchronous/routerGraph.js +68 -16
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caller.d.ts","sourceRoot":"","sources":["../../../src/general/utils/caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACN,aAAa,EACb,gBAAgB,EAGhB,GAAG,EACH,MAAM,aAAa,CAAC;AAGrB,qBAAa,MAAM;aAQD,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAM;gBAOd,OAAO,CAAC,oBAAkB,EACzB,SAAS,GAAE,GAAQ;IAcrC,OAAO,CAAC,MAAM,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"caller.d.ts","sourceRoot":"","sources":["../../../src/general/utils/caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACN,aAAa,EACb,gBAAgB,EAGhB,GAAG,EACH,MAAM,aAAa,CAAC;AAGrB,qBAAa,MAAM;aAQD,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAM;gBAOd,OAAO,CAAC,oBAAkB,EACzB,SAAS,GAAE,GAAQ;IAcrC,OAAO,CAAC,MAAM,CAAC,iBAAiB;mBAYX,mBAAmB;IAQxC,OAAO,CAAC,aAAa,CAQnB;cAMc,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EACpD,GAAG,EAAE,GAAG,EACR,IAAI,CAAC,EAAE,QAAQ,EACf,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC;cAsBF,mBAAmB,CAAC,QAAQ,GAAG,SAAS,EACvD,GAAG,EAAE,GAAG,EACR,IAAI,CAAC,EAAE,QAAQ,EACf,MAAM,CAAC,EAAE,WAAW;cAWL,cAAc,CAAC,SAAS,EAAE,QAAQ,GAAG,aAAa,EACjE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,QAAQ,EACd,MAAM,CAAC,EAAE,WAAW;CAQrB"}
|
|
@@ -44,7 +44,8 @@ class Caller {
|
|
|
44
44
|
return "https://devnet.aftermath.finance";
|
|
45
45
|
if (network === "LOCAL")
|
|
46
46
|
return "http://localhost:3000";
|
|
47
|
-
|
|
47
|
+
const safeNetwork = network.slice(-1) === "/" ? network.slice(0, -1) : network;
|
|
48
|
+
return safeNetwork;
|
|
48
49
|
}
|
|
49
50
|
static fetchResponseToType(response) {
|
|
50
51
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmmmCalculations.d.ts","sourceRoot":"","sources":["../../../../src/packages/pools/utils/cmmmCalculations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAEN,WAAW,EACX,aAAa,EACb,MAAM,8BAA8B,CAAC;AA0CtC,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAG7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;IAMpD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAG9C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;IAEpD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAkB;IAElD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;IACpD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA8B;IAC7D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAC5D,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA0B;IAO1D,OAAc,aAAa,SAAU,UAAU,KAAG,MAAM,CAmBtD;IAIF,OAAc,sBAAsB,SAC7B,MAAM,OACP,MAAM,YACD,MAAM,KACd,MAAM,CAON;IAUH,OAAc,uBAAuB,SAC9B,UAAU,SACT,QAAQ,oEAqCd;IAGF,OAAc,aAAa,SACpB,UAAU,cACJ,QAAQ,eACP,QAAQ,KACnB,MAAM,CAMN;IAGH,OAAc,qBAAqB,SAC5B,UAAU,cACJ,QAAQ,eACP,QAAQ,eACR,OAAO,KAClB,MAAM,CAqBP;IAGF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAwB9B;IAGF,OAAc,cAAc,SACrB,UAAU,cACJ,QAAQ,eACP,QAAQ,YACX,OAAO,KACf,OAAO,CAyDR;IAGF,OAAc,cAAc,SACrB,UAAU,cACJ,QAAQ,eACP,QAAQ,aACV,OAAO,KAChB,OAAO,CA0DR;IAMF,OAAc,eAAe,SACtB,UAAU,aACL,cAAc,uBACJ,cAAc,KACjC,aAAa,CA8Hd;IAIF,OAAc,gBAAgB,SACvB,UAAU,sBACI,cAAc,cACtB,cAAc,KACxB,aAAa,CA8Fd;IAGF,OAAc,uBAAuB,SAC9B,UAAU,aACL,cAAc,KACvB,aAAa,CA8Ed;IAEF,OAAO,CAAC,MAAM,CAAC,sCAAsC,
|
|
1
|
+
{"version":3,"file":"cmmmCalculations.d.ts","sourceRoot":"","sources":["../../../../src/packages/pools/utils/cmmmCalculations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAEN,WAAW,EACX,aAAa,EACb,MAAM,8BAA8B,CAAC;AA0CtC,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAG7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;IAMpD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAG9C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;IAEpD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAkB;IAElD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;IACpD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA8B;IAC7D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAC5D,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA0B;IAO1D,OAAc,aAAa,SAAU,UAAU,KAAG,MAAM,CAmBtD;IAIF,OAAc,sBAAsB,SAC7B,MAAM,OACP,MAAM,YACD,MAAM,KACd,MAAM,CAON;IAUH,OAAc,uBAAuB,SAC9B,UAAU,SACT,QAAQ,oEAqCd;IAGF,OAAc,aAAa,SACpB,UAAU,cACJ,QAAQ,eACP,QAAQ,KACnB,MAAM,CAMN;IAGH,OAAc,qBAAqB,SAC5B,UAAU,cACJ,QAAQ,eACP,QAAQ,eACR,OAAO,KAClB,MAAM,CAqBP;IAGF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAwB9B;IAGF,OAAc,cAAc,SACrB,UAAU,cACJ,QAAQ,eACP,QAAQ,YACX,OAAO,KACf,OAAO,CAyDR;IAGF,OAAc,cAAc,SACrB,UAAU,cACJ,QAAQ,eACP,QAAQ,aACV,OAAO,KAChB,OAAO,CA0DR;IAMF,OAAc,eAAe,SACtB,UAAU,aACL,cAAc,uBACJ,cAAc,KACjC,aAAa,CA8Hd;IAIF,OAAc,gBAAgB,SACvB,UAAU,sBACI,cAAc,cACtB,cAAc,KACxB,aAAa,CA8Fd;IAGF,OAAc,uBAAuB,SAC9B,UAAU,aACL,cAAc,KACvB,aAAa,CA8Ed;IAEF,OAAO,CAAC,MAAM,CAAC,sCAAsC,CA0FnD;IAGF,OAAc,yBAAyB,SAChC,UAAU,uBACK,cAAc,WAC1B,WAAW,KAClB,cAAc,CA4Hf;IAEF,OAAO,CAAC,MAAM,CAAC,wCAAwC,CAqIrD;IAMF,OAAc,kBAAkB,SACzB,UAAU,aACL,cAAc,KACvB,cAAc,CAwBf;IAOF,OAAc,mBAAmB,SAC1B,UAAU,cACJ,cAAc,KACxB,cAAc,CAwBf;IAIF,OAAO,CAAC,MAAM,CAAC,gDAAgD,CAqG7D;IAMF,OAAc,cAAc,SACrB,UAAU,aACL,cAAc,mBACR,WAAW,cAChB,cAAc,oBACR,WAAW,KAC3B,OAAO,CAsFR;IAKF,OAAc,gBAAgB,SACvB,UAAU,cACJ,QAAQ,eACP,QAAQ,aACV,OAAO,cACN,OAAO,KACjB,OAAO,CAqGR;IAIF,OAAc,iBAAiB,SACxB,UAAU,aACL,cAAc,cACb,aAAa,KACvB,OAAO,CA6FR;IAIF,OAAc,kBAAkB,SACzB,UAAU,iBACD,cAAc,WACpB,WAAW,KAClB,OAAO,CA+FR;IAGF,OAAc,qBAAqB,SAC5B,UAAU,cACJ,QAAQ,eACP,QAAQ,YACX,OAAO,KACf,OAAO,CAQP;IAGH,OAAc,qBAAqB,SAC5B,UAAU,cACJ,QAAQ,eACP,QAAQ,aACV,OAAO,KAChB,OAAO,CASP;IAIH,OAAc,sBAAsB,SAC7B,UAAU,aACL,cAAc,uBACJ,cAAc,KACjC,WAAW,CAsCZ;IAIF,OAAc,uBAAuB,SAC9B,UAAU,sBACI,cAAc,cACtB,cAAc,KACxB,WAAW,CAsCZ;IAIF,OAAc,8BAA8B,SACrC,UAAU,aACL,cAAc,KACvB,WAAW,CAuDZ;IAKF,OAAc,gCAAgC,SACvC,UAAU,uBACK,cAAc,WAC1B,WAAW,KAClB,WAAW,CA4DZ;CACF"}
|
|
@@ -487,33 +487,40 @@ CmmmCalculations.calcDepositFixedAmountsInitialEstimate = (pool, amountsIn) => {
|
|
|
487
487
|
let a = fixed_1.Fixed.directCast(pool.flatness);
|
|
488
488
|
let ac = 1 - a;
|
|
489
489
|
let balance;
|
|
490
|
+
let amount;
|
|
490
491
|
let weight;
|
|
492
|
+
let r;
|
|
493
|
+
let rMin = 0;
|
|
494
|
+
let cfMin = 0;
|
|
491
495
|
let prod = 0;
|
|
492
496
|
let sum = 0;
|
|
497
|
+
let part1;
|
|
498
|
+
// start cf_max as corresponding to r = 1
|
|
493
499
|
for (let [coinType, coin] of Object.entries(coins)) {
|
|
494
|
-
balance = fixed_1.Fixed.convertFromInt(coin.balance
|
|
500
|
+
balance = fixed_1.Fixed.convertFromInt(coin.balance);
|
|
501
|
+
amount = fixed_1.Fixed.convertFromInt(amountsIn[coinType] || BigInt(0));
|
|
495
502
|
weight = fixed_1.Fixed.directCast(coin.weight);
|
|
496
|
-
|
|
497
|
-
|
|
503
|
+
// this is all in so use fees in
|
|
504
|
+
part1 = balance + (1 - fixed_1.Fixed.directCast(coin.tradeFeeIn)) * amount;
|
|
505
|
+
prod += weight * Math.log(part1);
|
|
506
|
+
sum += weight * part1;
|
|
507
|
+
// r_min portion of the loop
|
|
508
|
+
r = fixed_1.Fixed.directCast(coin.tradeFeeOut) * balance / (balance + amount);
|
|
509
|
+
rMin = Math.max(r, rMin);
|
|
498
510
|
}
|
|
499
511
|
prod = Math.exp(prod);
|
|
500
512
|
let cfMax = (2 * a * prod * sum) / (prod + invariant) + ac * prod;
|
|
501
|
-
let r;
|
|
502
|
-
let rMin = 0;
|
|
503
513
|
let rMax = 1;
|
|
504
|
-
let amount;
|
|
505
|
-
let part1;
|
|
506
514
|
let cf;
|
|
507
|
-
let cfMin = 0;
|
|
508
|
-
let skip;
|
|
509
515
|
for (let [coinType, coin] of Object.entries(coins)) {
|
|
510
516
|
balance = fixed_1.Fixed.convertFromInt(coin.balance);
|
|
511
517
|
weight = fixed_1.Fixed.directCast(coin.weight);
|
|
512
518
|
amount = fixed_1.Fixed.convertFromInt(amountsIn[coinType] || BigInt(0));
|
|
513
519
|
r = balance / (balance + amount);
|
|
520
|
+
if (r <= rMin)
|
|
521
|
+
continue;
|
|
514
522
|
prod = 0;
|
|
515
523
|
sum = 0;
|
|
516
|
-
skip = false;
|
|
517
524
|
for (let [coinType2, coin2] of Object.entries(coins)) {
|
|
518
525
|
balance = fixed_1.Fixed.convertFromInt(coin2.balance);
|
|
519
526
|
weight = fixed_1.Fixed.directCast(coin2.weight);
|
|
@@ -529,23 +536,12 @@ CmmmCalculations.calcDepositFixedAmountsInitialEstimate = (pool, amountsIn) => {
|
|
|
529
536
|
else {
|
|
530
537
|
// r * (B0 + Din) < B0 so use fees out
|
|
531
538
|
part1 =
|
|
532
|
-
(balance - part1) /
|
|
539
|
+
balance - (balance - part1) /
|
|
533
540
|
fixed_1.Fixed.complement(fixed_1.Fixed.directCast(coin.tradeFeeOut));
|
|
534
|
-
if (part1 + 1 >= balance) {
|
|
535
|
-
skip = true;
|
|
536
|
-
break;
|
|
537
|
-
}
|
|
538
|
-
else {
|
|
539
|
-
part1 = balance - part1;
|
|
540
|
-
}
|
|
541
541
|
}
|
|
542
542
|
prod += weight * Math.log(part1);
|
|
543
543
|
sum += weight * part1;
|
|
544
544
|
}
|
|
545
|
-
if (skip) {
|
|
546
|
-
// this discontinuity occurs beyond draining the pool
|
|
547
|
-
continue;
|
|
548
|
-
}
|
|
549
545
|
prod = Math.exp(prod);
|
|
550
546
|
cf = (2 * a * prod * sum) / (prod + invariant) + ac * prod;
|
|
551
547
|
if (cf <= invariant) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routerApiHelpers.d.ts","sourceRoot":"","sources":["../../../../src/packages/router/api/routerApiHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EACN,OAAO,EACP,QAAQ,EAER,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,QAAQ,EACR,UAAU,EACV,GAAG,EAEH,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,qBAAa,gBAAgB;IAsBhB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAjBrC,gBAAuB,SAAS;;;;MAI9B;IAMF,SAAgB,kBAAkB,8BAAC;IACnC,SAAgB,YAAY,wBAAC;gBAMA,QAAQ,EAAE,YAAY;IAe5C,sBAAsB,WAAkB;QAC9C,SAAS,EAAE,kBAAkB,EAAE,CAAC;KAChC,8CAGC;IAMK,oCAAoC,WAAkB;QAC5D,SAAS,EAAE,kBAAkB,EAAE,CAAC;QAChC,OAAO,EAAE,UAAU,GAAG,GAAG,CAAC;QAC1B,KAAK,EAAE,+BAA+B,CAAC;QACvC,UAAU,EAAE,QAAQ,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,QAAQ,CAAC;QACtB,QAAQ,CAAC,EAAE,UAAU,CAAC;QACtB,WAAW,CAAC,EAAE,iBAAiB,CAAC;KAGhC,KAAG,QAAQ,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"routerApiHelpers.d.ts","sourceRoot":"","sources":["../../../../src/packages/router/api/routerApiHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EACN,OAAO,EACP,QAAQ,EAER,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,QAAQ,EACR,UAAU,EACV,GAAG,EAEH,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,qBAAa,gBAAgB;IAsBhB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAjBrC,gBAAuB,SAAS;;;;MAI9B;IAMF,SAAgB,kBAAkB,8BAAC;IACnC,SAAgB,YAAY,wBAAC;gBAMA,QAAQ,EAAE,YAAY;IAe5C,sBAAsB,WAAkB;QAC9C,SAAS,EAAE,kBAAkB,EAAE,CAAC;KAChC,8CAGC;IAMK,oCAAoC,WAAkB;QAC5D,SAAS,EAAE,kBAAkB,EAAE,CAAC;QAChC,OAAO,EAAE,UAAU,GAAG,GAAG,CAAC;QAC1B,KAAK,EAAE,+BAA+B,CAAC;QACvC,UAAU,EAAE,QAAQ,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,QAAQ,CAAC;QACtB,QAAQ,CAAC,EAAE,UAAU,CAAC;QACtB,WAAW,CAAC,EAAE,iBAAiB,CAAC;KAGhC,KAAG,QAAQ,wBAAwB,CAAC,CAkEnC;IAEF,OAAO,CAAC,6CAA6C,CAuDnD;IAmDW,qCAAqC,CAAC,MAAM,EAAE;QAC1D,aAAa,EAAE,UAAU,CAAC;QAC1B,aAAa,EAAE,wBAAwB,CAAC;QACxC,QAAQ,EAAE,QAAQ,CAAC;KACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAc7B,OAAc,uBAAuB,WAAY;QAChD,YAAY,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACpB,KAAG,OAAO,EAAE,CAqBX;IAUF,OAAO,CAAC,MAAM,CAAC,uCAAuC,CAwCpD;CACF"}
|
|
@@ -58,11 +58,12 @@ class RouterApiHelpers {
|
|
|
58
58
|
synchronousCompleteRoutes,
|
|
59
59
|
];
|
|
60
60
|
const completeRoutes = allCompleteRoutes.filter((routes) => routes.length > 0);
|
|
61
|
-
|
|
61
|
+
const result = routerAsyncGraph_1.RouterAsyncGraph.createFinalCompleteRoute({
|
|
62
62
|
tradeResults: exactTradeResults,
|
|
63
63
|
completeRoutes: completeRoutes.length <= 0 ? undefined : completeRoutes,
|
|
64
64
|
coinInAmounts,
|
|
65
65
|
});
|
|
66
|
+
return result;
|
|
66
67
|
});
|
|
67
68
|
this.fetchCompleteTradeRoutesForLastRouteAsyncPool = (inputs) => __awaiter(this, void 0, void 0, function* () {
|
|
68
69
|
const { routerGraph } = inputs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routerAsyncGraph.d.ts","sourceRoot":"","sources":["../../../../../src/packages/router/utils/async/routerAsyncGraph.ts"],"names":[],"mappings":"AACA,OAAO,EACN,OAAO,EACP,uBAAuB,EACvB,wBAAwB,EAExB,MAAM,mBAAmB,CAAC;AAM3B,qBAAa,gBAAgB;WASd,wBAAwB,CAAC,MAAM,EAAE;QAC9C,YAAY,EAAE,uBAAuB,CAAC;QACtC,aAAa,EAAE,OAAO,EAAE,CAAC;QACzB,cAAc,CAAC,EAAE,wBAAwB,EAAE,EAAE,CAAC;KAC9C,GAAG,wBAAwB;
|
|
1
|
+
{"version":3,"file":"routerAsyncGraph.d.ts","sourceRoot":"","sources":["../../../../../src/packages/router/utils/async/routerAsyncGraph.ts"],"names":[],"mappings":"AACA,OAAO,EACN,OAAO,EACP,uBAAuB,EACvB,wBAAwB,EAExB,MAAM,mBAAmB,CAAC;AAM3B,qBAAa,gBAAgB;WASd,wBAAwB,CAAC,MAAM,EAAE;QAC9C,YAAY,EAAE,uBAAuB,CAAC;QACtC,aAAa,EAAE,OAAO,EAAE,CAAC;QACzB,cAAc,CAAC,EAAE,wBAAwB,EAAE,EAAE,CAAC;KAC9C,GAAG,wBAAwB;IAuB5B,OAAc,8BAA8B,WAAY;QACvD,YAAY,EAAE,uBAAuB,CAAC;KACtC,KAAG,wBAAwB,EAAE,EAAE,CA+C9B;IAUF,OAAO,CAAC,MAAM,CAAC,uBAAuB,CA2CpC;IAEF,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAqCxC;CACF"}
|
|
@@ -17,6 +17,8 @@ class RouterAsyncGraph {
|
|
|
17
17
|
const completeRoutes = inputs.completeRoutes
|
|
18
18
|
? [...asyncCompleteRoutes, ...inputs.completeRoutes]
|
|
19
19
|
: asyncCompleteRoutes;
|
|
20
|
+
if (completeRoutes.length < 0)
|
|
21
|
+
throw new Error("unable to find route");
|
|
20
22
|
const chosenCompleteRoutes = this.splitTradeBetweenRoutes(Object.assign(Object.assign({}, inputs), { completeRoutes }));
|
|
21
23
|
const finalCompleteRoute = this.singleCompleteRouteFromMany({
|
|
22
24
|
completeRoutes: chosenCompleteRoutes,
|
|
@@ -15,7 +15,7 @@ type TradeInfo = RouterTradeInfo & {
|
|
|
15
15
|
};
|
|
16
16
|
export declare class RouterGraph {
|
|
17
17
|
static readonly defaultOptions: RouterOptions;
|
|
18
|
-
readonly
|
|
18
|
+
readonly syncGraph: RouterCompleteGraph;
|
|
19
19
|
readonly constants: RouterOptions;
|
|
20
20
|
constructor(network: SuiNetwork | Url, graph: RouterSerializableCompleteGraph, options?: RouterOptions);
|
|
21
21
|
getCompleteRouteGivenAmountIn(inputs: {
|
|
@@ -38,6 +38,8 @@ export declare class RouterGraph {
|
|
|
38
38
|
static graphFromSerializable(inputs: {
|
|
39
39
|
graph: RouterSerializableCompleteGraph;
|
|
40
40
|
network: SuiNetwork | Url;
|
|
41
|
+
isTotal?: boolean;
|
|
42
|
+
isAsync?: boolean;
|
|
41
43
|
}): RouterCompleteGraph;
|
|
42
44
|
static supportedCoinPathsFromGraph: (inputs: {
|
|
43
45
|
graph: RouterSerializableCompleteGraph;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routerGraph.d.ts","sourceRoot":"","sources":["../../../../../src/packages/router/utils/synchronous/routerGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EACN,OAAO,EACP,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,+BAA+B,EAE/B,wBAAwB,EAExB,eAAe,EAIf,UAAU,EACV,QAAQ,EACR,GAAG,EAIH,sBAAsB,EACtB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAO5C,KAAK,kBAAkB,GAAG;IACzB,MAAM,EAAE,UAAU,EAAE,CAAC;CACrB,GAAG,SAAS,CAAC;AAEd,KAAK,UAAU,GAAG;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB,GAAG,SAAS,CAAC;AAEd,KAAK,SAAS,GAAG,SAAS,GAAG;IAC5B,OAAO,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,KAAK,SAAS,GAAG,eAAe,GAAG;IAClC,gBAAgB,EAAE,OAAO,CAAC;CAC1B,CAAC;AAMF,qBAAa,WAAW;IAKvB,gBAAuB,cAAc,EAAE,aAAa,CAKlD;
|
|
1
|
+
{"version":3,"file":"routerGraph.d.ts","sourceRoot":"","sources":["../../../../../src/packages/router/utils/synchronous/routerGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,6 +115,8 @@ class RouterGraph {
|
|
|
115
115
|
let routeSpotPrice = 1;
|
|
116
116
|
try {
|
|
117
117
|
for (const path of originalRoute.paths) {
|
|
118
|
+
if (!(path.poolUid in currentPools))
|
|
119
|
+
continue;
|
|
118
120
|
const pool = currentPools[path.poolUid];
|
|
119
121
|
const spotPrice = pool.getSpotPrice({
|
|
120
122
|
coinInType: path.coinIn.type,
|
|
@@ -181,14 +183,25 @@ class RouterGraph {
|
|
|
181
183
|
return undefined;
|
|
182
184
|
}
|
|
183
185
|
};
|
|
184
|
-
this.
|
|
186
|
+
// this.syncGraph = RouterGraph.graphFromSerializable({
|
|
187
|
+
// graph,
|
|
188
|
+
// network,
|
|
189
|
+
// isTotal: true,
|
|
190
|
+
// });
|
|
191
|
+
this.syncGraph = RouterGraph.graphFromSerializable({ graph, network });
|
|
192
|
+
// this.asyncGraph = RouterGraph.graphFromSerializable({
|
|
193
|
+
// graph,
|
|
194
|
+
// network,
|
|
195
|
+
// isAsync: true,
|
|
196
|
+
// });
|
|
185
197
|
this.constants = Object.assign(Object.assign({}, RouterGraph.defaultOptions), options);
|
|
186
198
|
}
|
|
187
199
|
/////////////////////////////////////////////////////////////////////
|
|
188
200
|
//// Public Methods
|
|
189
201
|
/////////////////////////////////////////////////////////////////////
|
|
190
202
|
getCompleteRouteGivenAmountIn(inputs) {
|
|
191
|
-
|
|
203
|
+
const result = this.getCompleteRoute(Object.assign(Object.assign({}, inputs), { isGivenAmountOut: false }));
|
|
204
|
+
return result;
|
|
192
205
|
}
|
|
193
206
|
// public getCompleteRouteGivenAmountOut(
|
|
194
207
|
// coinIn: CoinType,
|
|
@@ -228,9 +241,10 @@ class RouterGraph {
|
|
|
228
241
|
};
|
|
229
242
|
}
|
|
230
243
|
});
|
|
231
|
-
|
|
244
|
+
const result = completeRoutes.every((route) => route.routes.length === 0)
|
|
232
245
|
? []
|
|
233
246
|
: completeRoutes;
|
|
247
|
+
return result;
|
|
234
248
|
}
|
|
235
249
|
/////////////////////////////////////////////////////////////////////
|
|
236
250
|
//// Public Static Methods
|
|
@@ -257,13 +271,38 @@ class RouterGraph {
|
|
|
257
271
|
return graph;
|
|
258
272
|
}
|
|
259
273
|
static graphFromSerializable(inputs) {
|
|
274
|
+
const { isTotal, isAsync } = inputs;
|
|
260
275
|
const pools = Object.entries(inputs.graph.pools).reduce((acc, [uid, pool]) => {
|
|
261
276
|
const poolClass = (0, routerPoolInterface_1.createRouterPool)({
|
|
262
277
|
pool,
|
|
263
278
|
network: inputs.network,
|
|
264
279
|
});
|
|
280
|
+
if (!isTotal &&
|
|
281
|
+
((isAsync && !poolClass.noHopsAllowed) ||
|
|
282
|
+
(!isAsync && poolClass.noHopsAllowed)))
|
|
283
|
+
return acc;
|
|
265
284
|
return Object.assign(Object.assign({}, acc), { [uid]: poolClass });
|
|
266
285
|
}, {});
|
|
286
|
+
// const coinNodes = Object.entries(inputs.graph.coinNodes).reduce(
|
|
287
|
+
// (acc, [coinIn, coinNode]) => ({
|
|
288
|
+
// acc,
|
|
289
|
+
// [coinIn]: {
|
|
290
|
+
// ...coinNode,
|
|
291
|
+
// coinOutThroughPoolEdges: Object.entries(
|
|
292
|
+
// coinNode.coinOutThroughPoolEdges
|
|
293
|
+
// ).reduce(
|
|
294
|
+
// (acc, [coin, poolUids]) => ({
|
|
295
|
+
// ...acc,
|
|
296
|
+
// [coin]: poolUids.filter((uid) =>
|
|
297
|
+
// Object.keys(pools).includes(uid)
|
|
298
|
+
// ),
|
|
299
|
+
// }),
|
|
300
|
+
// {}
|
|
301
|
+
// ),
|
|
302
|
+
// },
|
|
303
|
+
// }),
|
|
304
|
+
// {}
|
|
305
|
+
// );
|
|
267
306
|
const graph = {
|
|
268
307
|
coinNodes: inputs.graph.coinNodes,
|
|
269
308
|
pools,
|
|
@@ -274,20 +313,20 @@ class RouterGraph {
|
|
|
274
313
|
//// Private Methods
|
|
275
314
|
/////////////////////////////////////////////////////////////////////
|
|
276
315
|
getCompleteRoute(inputs) {
|
|
277
|
-
if (Object.keys(this.
|
|
278
|
-
throw new Error("empty
|
|
316
|
+
if (Object.keys(this.syncGraph).length <= 0)
|
|
317
|
+
throw new Error("empty graphs");
|
|
279
318
|
const { coinInType, coinInAmount, coinOutType, referrer, externalFee, isGivenAmountOut, } = inputs;
|
|
280
319
|
if (externalFee &&
|
|
281
320
|
externalFee.feePercentage >=
|
|
282
321
|
router_1.Router.constants.maxExternalFeePercentage)
|
|
283
322
|
throw new Error(`external fee percentage exceeds max of ${router_1.Router.constants.maxExternalFeePercentage}`);
|
|
284
|
-
const routes = RouterGraph.findRoutes(helpers_1.Helpers.deepCopy(this.
|
|
285
|
-
const routesAfterTrades = this.splitTradeBetweenRoutes(helpers_1.Helpers.deepCopy(this.
|
|
323
|
+
const routes = RouterGraph.findRoutes(helpers_1.Helpers.deepCopy(this.syncGraph), helpers_1.Helpers.deepCopy(this.syncGraph), coinInType, coinOutType, this.constants.maxRouteLength, isGivenAmountOut);
|
|
324
|
+
const routesAfterTrades = this.splitTradeBetweenRoutes(helpers_1.Helpers.deepCopy(this.syncGraph), routes, coinInAmount, isGivenAmountOut, referrer);
|
|
286
325
|
const completeRoute = RouterGraph.completeRouteFromRoutes(routesAfterTrades, coinInType, coinInAmount, coinOutType);
|
|
287
326
|
const transformedRoute = isGivenAmountOut
|
|
288
327
|
? RouterGraph.transformCompleteRouteIfGivenAmountOut(completeRoute)
|
|
289
328
|
: completeRoute;
|
|
290
|
-
const completeTradeRoute = RouterGraph.routerCompleteTradeRouteFromCompleteTradeRoute(transformedRoute, this.
|
|
329
|
+
const completeTradeRoute = RouterGraph.routerCompleteTradeRouteFromCompleteTradeRoute(transformedRoute, this.syncGraph.pools, referrer, externalFee);
|
|
291
330
|
return completeTradeRoute;
|
|
292
331
|
}
|
|
293
332
|
}
|
|
@@ -298,8 +337,8 @@ _a = RouterGraph;
|
|
|
298
337
|
/////////////////////////////////////////////////////////////////////
|
|
299
338
|
RouterGraph.defaultOptions = {
|
|
300
339
|
maxRouteLength: 3,
|
|
301
|
-
tradePartitionCount:
|
|
302
|
-
minRoutesToCheck:
|
|
340
|
+
tradePartitionCount: 5,
|
|
341
|
+
minRoutesToCheck: 10,
|
|
303
342
|
maxGasCost: BigInt(500000000), // 0.5 SUI
|
|
304
343
|
};
|
|
305
344
|
/////////////////////////////////////////////////////////////////////
|
|
@@ -388,12 +427,21 @@ RouterGraph.updateCoinNodesFromPool = (coinNodes, pool) => {
|
|
|
388
427
|
/////////////////////////////////////////////////////////////////////
|
|
389
428
|
//// Route Finding
|
|
390
429
|
/////////////////////////////////////////////////////////////////////
|
|
391
|
-
RouterGraph.findRoutes = (
|
|
392
|
-
const
|
|
393
|
-
const startingRoutes = _a.createStartingRoutes(
|
|
394
|
-
const routes = _a.findCompleteRoutes(
|
|
395
|
-
const
|
|
396
|
-
|
|
430
|
+
RouterGraph.findRoutes = (syncGraph, asyncGraph, coinIn, coinOut, maxRouteLength, isGivenAmountOut) => {
|
|
431
|
+
const syncCoinInEdges = syncGraph.coinNodes[coinIn].coinOutThroughPoolEdges;
|
|
432
|
+
const startingRoutes = _a.createStartingRoutes(syncGraph.pools, syncCoinInEdges, coinIn, coinOut, false);
|
|
433
|
+
const routes = _a.findCompleteRoutes(syncGraph, startingRoutes, coinOut, maxRouteLength, isGivenAmountOut);
|
|
434
|
+
// const asyncCoinInEdges =
|
|
435
|
+
// syncGraph.coinNodes[coinIn].coinOutThroughPoolEdges;
|
|
436
|
+
// const noHopRoutes = this.createStartingRoutes(
|
|
437
|
+
// asyncGraph.pools,
|
|
438
|
+
// asyncCoinInEdges,
|
|
439
|
+
// coinIn,
|
|
440
|
+
// coinOut,
|
|
441
|
+
// true
|
|
442
|
+
// );
|
|
443
|
+
// return [...routes, ...noHopRoutes];
|
|
444
|
+
return [...routes];
|
|
397
445
|
};
|
|
398
446
|
RouterGraph.createStartingRoutes = (pools, coinInEdges, coinIn,
|
|
399
447
|
// NOTE: should this really be unused ?
|
|
@@ -401,6 +449,8 @@ finalCoinOut, onlyNoHopPools) => {
|
|
|
401
449
|
let routes = [];
|
|
402
450
|
for (const [coinOut, throughPools] of Object.entries(coinInEdges)) {
|
|
403
451
|
for (const poolUid of throughPools) {
|
|
452
|
+
if (!(poolUid in pools))
|
|
453
|
+
continue;
|
|
404
454
|
const pool = pools[poolUid];
|
|
405
455
|
if (onlyNoHopPools && !pool.noHopsAllowed)
|
|
406
456
|
continue;
|
|
@@ -463,6 +513,8 @@ RouterGraph.findCompleteRoutes = (graph, routes, coinOut, maxRouteLength, isGive
|
|
|
463
513
|
// )
|
|
464
514
|
lastPath.poolUid === poolUid)
|
|
465
515
|
continue;
|
|
516
|
+
if (!(poolUid in graph.pools))
|
|
517
|
+
continue;
|
|
466
518
|
const pool = graph.pools[poolUid];
|
|
467
519
|
const newRoute = Object.assign(Object.assign({}, route), { paths: [
|
|
468
520
|
...route.paths,
|