@paraswap/dex-lib 4.7.25-0 → 4.7.25

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.
Files changed (110) hide show
  1. package/build/abi/BProtocol.json +1155 -0
  2. package/build/abi/Jarvis.json +1172 -0
  3. package/build/abi/MStableAsset.json +1545 -0
  4. package/build/abi/OneInchLp.json +1304 -0
  5. package/build/abi/Onebit.json +736 -0
  6. package/build/abi/Shell.json +1294 -0
  7. package/build/abi/TraderJoeV2Router.json +50 -0
  8. package/build/abi/wUSDM.json +757 -0
  9. package/build/abi/zrx.v2.json +1967 -0
  10. package/build/abi/zrx.v3.json +3454 -0
  11. package/build/abi/zrx.v4.json +2193 -0
  12. package/build/dex/OneInchLp.d.ts +24 -0
  13. package/build/dex/OneInchLp.js +43 -0
  14. package/build/dex/OneInchLp.js.map +1 -0
  15. package/build/dex/bProtocol/bProtocol.d.ts +15 -0
  16. package/build/dex/bProtocol/bProtocol.js +56 -0
  17. package/build/dex/bProtocol/bProtocol.js.map +1 -0
  18. package/build/dex/bProtocol/types.d.ts +11 -0
  19. package/build/dex/bProtocol/types.js +8 -0
  20. package/build/dex/bProtocol/types.js.map +1 -0
  21. package/build/dex/idle-dao/idle-dao.d.ts +0 -1
  22. package/build/dex/idle-dao/idle-dao.js +11 -23
  23. package/build/dex/idle-dao/idle-dao.js.map +1 -1
  24. package/build/dex/infusion/infusion.d.ts +0 -1
  25. package/build/dex/infusion/infusion.js +9 -12
  26. package/build/dex/infusion/infusion.js.map +1 -1
  27. package/build/dex/jarvis.d.ts +56 -0
  28. package/build/dex/jarvis.js +163 -0
  29. package/build/dex/jarvis.js.map +1 -0
  30. package/build/dex/mStable.d.ts +44 -0
  31. package/build/dex/mStable.js +75 -0
  32. package/build/dex/mStable.js.map +1 -0
  33. package/build/dex/maker-psm/maker-psm.d.ts +41 -4
  34. package/build/dex/maker-psm/maker-psm.js +143 -40
  35. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  36. package/build/dex/onebit/onebit.d.ts +16 -0
  37. package/build/dex/onebit/onebit.js +61 -0
  38. package/build/dex/onebit/onebit.js.map +1 -0
  39. package/build/dex/onebit/types.d.ts +14 -0
  40. package/build/dex/onebit/types.js +8 -0
  41. package/build/dex/onebit/types.js.map +1 -0
  42. package/build/dex/se-vlr/config.d.ts +3 -0
  43. package/build/dex/se-vlr/config.js +24 -0
  44. package/build/dex/se-vlr/config.js.map +1 -0
  45. package/build/dex/{maker-psm/maker-psm-event-pool.d.ts → se-vlr/se-vlr-pool.d.ts} +11 -15
  46. package/build/dex/se-vlr/se-vlr-pool.js +70 -0
  47. package/build/dex/se-vlr/se-vlr-pool.js.map +1 -0
  48. package/build/dex/se-vlr/se-vlr.d.ts +35 -0
  49. package/build/dex/se-vlr/se-vlr.js +131 -0
  50. package/build/dex/se-vlr/se-vlr.js.map +1 -0
  51. package/build/dex/se-vlr/types.d.ts +6 -0
  52. package/build/dex/se-vlr/types.js +3 -0
  53. package/build/dex/se-vlr/types.js.map +1 -0
  54. package/build/dex/shell.d.ts +25 -0
  55. package/build/dex/shell.js +41 -0
  56. package/build/dex/shell.js.map +1 -0
  57. package/build/dex/solidly/forks-override/aerodrome.d.ts +1 -1
  58. package/build/dex/solidly/forks-override/aerodrome.js +14 -18
  59. package/build/dex/solidly/forks-override/aerodrome.js.map +1 -1
  60. package/build/dex/trader-joe-v2.d.ts +40 -0
  61. package/build/dex/trader-joe-v2.js +74 -0
  62. package/build/dex/trader-joe-v2.js.map +1 -0
  63. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +94 -0
  64. package/build/dex/uniswap-v3/uniswap-v3-new.js +923 -0
  65. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +1 -0
  66. package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -6
  67. package/build/dex/uniswap-v4/contract-math/Position.js +0 -29
  68. package/build/dex/uniswap-v4/contract-math/Position.js.map +1 -1
  69. package/build/dex/usual-bond/config.d.ts +3 -0
  70. package/build/dex/usual-bond/config.js +13 -0
  71. package/build/dex/usual-bond/config.js.map +1 -0
  72. package/build/dex/usual-bond/types.d.ts +7 -0
  73. package/build/dex/usual-bond/types.js +3 -0
  74. package/build/dex/usual-bond/types.js.map +1 -0
  75. package/build/dex/usual-bond/usual-bond.d.ts +35 -0
  76. package/build/dex/usual-bond/usual-bond.js +176 -0
  77. package/build/dex/usual-bond/usual-bond.js.map +1 -0
  78. package/build/dex/wusdm/config.d.ts +3 -0
  79. package/build/dex/wusdm/config.js +43 -0
  80. package/build/dex/wusdm/config.js.map +1 -0
  81. package/build/dex/wusdm/constants.d.ts +2 -0
  82. package/build/dex/wusdm/constants.js +6 -0
  83. package/build/dex/wusdm/constants.js.map +1 -0
  84. package/build/dex/wusdm/types.d.ts +18 -0
  85. package/build/dex/wusdm/types.js +11 -0
  86. package/build/dex/wusdm/types.js.map +1 -0
  87. package/build/dex/wusdm/wusdm-pool.d.ts +21 -0
  88. package/build/dex/wusdm/wusdm-pool.js +74 -0
  89. package/build/dex/wusdm/wusdm-pool.js.map +1 -0
  90. package/build/dex/wusdm/wusdm.d.ts +46 -0
  91. package/build/dex/wusdm/wusdm.js +243 -0
  92. package/build/dex/wusdm/wusdm.js.map +1 -0
  93. package/build/dex/zerox/config.d.ts +2 -0
  94. package/build/dex/zerox/config.js +33 -0
  95. package/build/dex/zerox/config.js.map +1 -0
  96. package/build/dex/zerox/index.d.ts +22 -0
  97. package/build/dex/zerox/index.js +225 -0
  98. package/build/dex/zerox/index.js.map +1 -0
  99. package/build/dex/zerox/order.d.ts +88 -0
  100. package/build/dex/zerox/order.js +53 -0
  101. package/build/dex/zerox/order.js.map +1 -0
  102. package/build/dex/zerox/types.d.ts +73 -0
  103. package/build/dex/zerox/types.js +21 -0
  104. package/build/dex/zerox/types.js.map +1 -0
  105. package/package.json +1 -1
  106. package/build/dex/maker-psm/maker-psm-event-pool.js +0 -132
  107. package/build/dex/maker-psm/maker-psm-event-pool.js.map +0 -1
  108. package/build/executor/Executor02BytecodeBuilderMultiRoute.d.ts +0 -101
  109. package/build/executor/Executor02BytecodeBuilderMultiRoute.js +0 -877
  110. package/build/executor/Executor02BytecodeBuilderMultiRoute.js.map +0 -1
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Jarvis = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const constants_1 = require("../constants");
9
+ const simple_exchange_1 = require("./simple-exchange");
10
+ const Jarvis_json_1 = __importDefault(require("../abi/Jarvis.json"));
11
+ const utils_1 = require("../executor/utils");
12
+ const THIRTY_MINUTES = 60 * 30;
13
+ var JarvisFunctions;
14
+ (function (JarvisFunctions) {
15
+ JarvisFunctions["mint"] = "mint";
16
+ JarvisFunctions["redeem"] = "redeem";
17
+ JarvisFunctions["exchange"] = "exchange";
18
+ })(JarvisFunctions || (JarvisFunctions = {}));
19
+ class Jarvis extends simple_exchange_1.SimpleExchange {
20
+ constructor(dexHelper) {
21
+ super(dexHelper, 'jarvis');
22
+ this.needWrapNative = false;
23
+ this.poolInterface = new abi_1.Interface(Jarvis_json_1.default);
24
+ }
25
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
26
+ const { method } = data;
27
+ const type = [
28
+ JarvisFunctions.mint,
29
+ JarvisFunctions.redeem,
30
+ JarvisFunctions.exchange,
31
+ ].indexOf(method);
32
+ if (type === undefined) {
33
+ throw new Error(`Jarvis: Invalid OpType ${method}, Should be one of ['mint', 'exchange', 'redeem']`);
34
+ }
35
+ const payload = this.abiCoder.encodeParameter({
36
+ ParentStruct: {
37
+ opType: 'uint',
38
+ derivatives: 'address',
39
+ destDerivatives: 'address',
40
+ fee: 'uint128',
41
+ destPool: 'address',
42
+ expiration: 'uint128',
43
+ },
44
+ }, {
45
+ opType: type,
46
+ derivatives: data.derivatives,
47
+ destDerivatives: data.destDerivatives || constants_1.NULL_ADDRESS,
48
+ fee: data.fee,
49
+ destPool: data.pools[1] || constants_1.NULL_ADDRESS,
50
+ expiration: (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0),
51
+ });
52
+ return {
53
+ targetExchange: data.pools[0],
54
+ payload,
55
+ networkFee: '0',
56
+ };
57
+ }
58
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
59
+ const swapFunction = data.method;
60
+ const timestamp = (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0);
61
+ let swapFunctionParams;
62
+ switch (swapFunction) {
63
+ case JarvisFunctions.mint:
64
+ swapFunctionParams = [
65
+ data.derivatives,
66
+ destAmount,
67
+ srcAmount,
68
+ data.fee,
69
+ timestamp,
70
+ this.augustusAddress,
71
+ ];
72
+ break;
73
+ case JarvisFunctions.redeem:
74
+ swapFunctionParams = [
75
+ data.derivatives,
76
+ srcAmount,
77
+ destAmount,
78
+ data.fee,
79
+ timestamp,
80
+ this.augustusAddress,
81
+ ];
82
+ break;
83
+ case JarvisFunctions.exchange:
84
+ swapFunctionParams = [
85
+ data.derivatives,
86
+ data.pools[1],
87
+ data.destDerivatives,
88
+ srcAmount,
89
+ destAmount,
90
+ data.fee,
91
+ timestamp,
92
+ this.augustusAddress,
93
+ ];
94
+ break;
95
+ default:
96
+ throw new Error(`Unknown function ${swapFunction}`);
97
+ }
98
+ const swapData = this.poolInterface.encodeFunctionData(swapFunction, [
99
+ swapFunctionParams,
100
+ ]);
101
+ return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, data.pools[0]);
102
+ }
103
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
104
+ const swapFunction = data.method;
105
+ const timestamp = (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0);
106
+ let swapFunctionParams;
107
+ let outputName;
108
+ switch (swapFunction) {
109
+ case JarvisFunctions.mint:
110
+ swapFunctionParams = [
111
+ data.derivatives,
112
+ destAmount,
113
+ srcAmount,
114
+ data.fee,
115
+ timestamp,
116
+ recipient,
117
+ ];
118
+ outputName = 'syntheticTokensMinted';
119
+ break;
120
+ case JarvisFunctions.redeem:
121
+ swapFunctionParams = [
122
+ data.derivatives,
123
+ srcAmount,
124
+ destAmount,
125
+ data.fee,
126
+ timestamp,
127
+ recipient,
128
+ ];
129
+ outputName = 'collateralRedeemed';
130
+ break;
131
+ case JarvisFunctions.exchange:
132
+ swapFunctionParams = [
133
+ data.derivatives,
134
+ data.pools[1],
135
+ data.destDerivatives,
136
+ srcAmount,
137
+ destAmount,
138
+ data.fee,
139
+ timestamp,
140
+ recipient,
141
+ ];
142
+ outputName = 'destNumTokensMinted';
143
+ break;
144
+ default:
145
+ throw new Error(`Unknown function ${swapFunction}`);
146
+ }
147
+ const swapData = this.poolInterface.encodeFunctionData(swapFunction, [
148
+ swapFunctionParams,
149
+ ]);
150
+ return {
151
+ needWrapNative: this.needWrapNative,
152
+ dexFuncHasRecipient: true,
153
+ exchangeData: swapData,
154
+ targetExchange: data.pools[0],
155
+ returnAmountPos: side === constants_1.SwapSide.SELL
156
+ ? (0, utils_1.extractReturnAmountPosition)(this.poolInterface, swapFunction, outputName)
157
+ : undefined,
158
+ };
159
+ }
160
+ }
161
+ exports.Jarvis = Jarvis;
162
+ Jarvis.dexKeys = ['jarvis'];
163
+ //# sourceMappingURL=jarvis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jarvis.js","sourceRoot":"","sources":["../../src/dex/jarvis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { SwapSide } from '../constants';
3
+ import { AdapterExchangeParam, SimpleExchangeParam } from '../types';
4
+ import { IDexTxBuilder } from './idex';
5
+ import { SimpleExchange } from './simple-exchange';
6
+ import { IDexHelper } from '../dex-helper';
7
+ declare enum MStableFunctions {
8
+ mint = "mint",
9
+ swap = "swap",
10
+ redeem = "redeem"
11
+ }
12
+ declare type MStableData = {
13
+ exchange: string;
14
+ opType: MStableFunctions;
15
+ isAssetContract: boolean;
16
+ };
17
+ declare type MStableMint = [
18
+ _input: string,
19
+ _inputQuantity: string,
20
+ _minOutputQuantity: string,
21
+ _recipient: string
22
+ ];
23
+ declare type MStableSwap = [
24
+ _input: string,
25
+ _output: string,
26
+ _inputQuantity: string,
27
+ _minOutputQuantity: string,
28
+ _recipient: string
29
+ ];
30
+ declare type MStableRedeem = [
31
+ _output: string,
32
+ _mAssetQuantity: string,
33
+ _minOutputQuantity: string,
34
+ _recipient: string
35
+ ];
36
+ declare type MStableParam = MStableMint | MStableSwap | MStableRedeem;
37
+ export declare class MStable extends SimpleExchange implements IDexTxBuilder<MStableData, MStableParam> {
38
+ static dexKeys: string[];
39
+ mStableAsset: Interface;
40
+ constructor(dexHelper: IDexHelper);
41
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: MStableData, side: SwapSide): AdapterExchangeParam;
42
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: MStableData, side: SwapSide): Promise<SimpleExchangeParam>;
43
+ }
44
+ export {};
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MStable = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const simple_exchange_1 = require("./simple-exchange");
9
+ const MStableAsset_json_1 = __importDefault(require("../abi/MStableAsset.json"));
10
+ var MStableFunctions;
11
+ (function (MStableFunctions) {
12
+ MStableFunctions["mint"] = "mint";
13
+ MStableFunctions["swap"] = "swap";
14
+ MStableFunctions["redeem"] = "redeem";
15
+ })(MStableFunctions || (MStableFunctions = {}));
16
+ class MStable extends simple_exchange_1.SimpleExchange {
17
+ constructor(dexHelper) {
18
+ super(dexHelper, 'mStable');
19
+ this.mStableAsset = new abi_1.Interface(MStableAsset_json_1.default);
20
+ }
21
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
22
+ const { opType } = data;
23
+ const type = [
24
+ MStableFunctions.swap,
25
+ MStableFunctions.mint,
26
+ MStableFunctions.redeem,
27
+ ].indexOf(opType);
28
+ if (type === undefined) {
29
+ throw new Error(`mStable: Invalid OpType ${opType}, Should be one of ['mint', 'swap', 'redeem']`);
30
+ }
31
+ const payload = this.abiCoder.encodeParameter({
32
+ ParentStruct: {
33
+ opType: 'uint',
34
+ },
35
+ }, {
36
+ opType: type,
37
+ });
38
+ return {
39
+ targetExchange: data.exchange,
40
+ payload,
41
+ networkFee: '0',
42
+ };
43
+ }
44
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
45
+ const { opType, isAssetContract } = data;
46
+ const [swapFunction, swapFunctionsParams] = (() => {
47
+ switch (opType) {
48
+ case MStableFunctions.mint:
49
+ return [
50
+ opType,
51
+ [srcToken, srcAmount, destAmount, this.augustusAddress],
52
+ ];
53
+ case MStableFunctions.swap:
54
+ return [
55
+ opType,
56
+ [srcToken, destToken, srcAmount, destAmount, this.augustusAddress],
57
+ ];
58
+ case MStableFunctions.redeem:
59
+ return [
60
+ opType,
61
+ [destToken, srcAmount, destAmount, this.augustusAddress],
62
+ ];
63
+ default:
64
+ throw new Error(`mStable's OpType ${opType} not supported, failed to build`);
65
+ }
66
+ })();
67
+ // mStableAsset & mStablePool both have the same interface hence we can
68
+ // simply use mStableAsset contract
69
+ const swapData = this.mStableAsset.encodeFunctionData(swapFunction, swapFunctionsParams);
70
+ return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, data.exchange);
71
+ }
72
+ }
73
+ exports.MStable = MStable;
74
+ MStable.dexKeys = ['mStable'];
75
+ //# sourceMappingURL=mStable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mStable.js","sourceRoot":"","sources":["../../src/dex/mStable.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA6D;AAK7D,uDAAmD;AACnD,iFAAuD;AAIvD,IAAK,gBAIJ;AAJD,WAAK,gBAAgB;IACnB,iCAAa,CAAA;IACb,iCAAa,CAAA;IACb,qCAAiB,CAAA;AACnB,CAAC,EAJI,gBAAgB,KAAhB,gBAAgB,QAIpB;AA4BD,MAAa,OACX,SAAQ,gCAAc;IAMtB,YAAY,SAAqB;QAC/B,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,eAAS,CAAC,2BAAiC,CAAC,CAAC;IACvE,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG;YACX,gBAAgB,CAAC,IAAI;YACrB,gBAAgB,CAAC,IAAI;YACrB,gBAAgB,CAAC,MAAM;SACxB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAElB,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,+CAA+C,CACjF,CAAC;SACH;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC3C;YACE,YAAY,EAAE;gBACZ,MAAM,EAAE,MAAM;aACf;SACF,EACD;YACE,MAAM,EAAE,IAAI;SACb,CACF,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,QAAQ;YAC7B,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAEzC,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAG3C,EAAE;YACF,QAAQ,MAAM,EAAE;gBACd,KAAK,gBAAgB,CAAC,IAAI;oBACxB,OAAO;wBACL,MAAM;wBACN,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;qBACxD,CAAC;gBACJ,KAAK,gBAAgB,CAAC,IAAI;oBACxB,OAAO;wBACL,MAAM;wBACN,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;qBACnE,CAAC;gBACJ,KAAK,gBAAgB,CAAC,MAAM;oBAC1B,OAAO;wBACL,MAAM;wBACN,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;qBACzD,CAAC;gBACJ;oBACE,MAAM,IAAI,KAAK,CACb,oBAAoB,MAAM,iCAAiC,CAC5D,CAAC;aACL;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,uEAAuE;QACvE,mCAAmC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACnD,YAAY,EACZ,mBAAmB,CACpB,CAAC;QAEF,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;;AAvGH,0BAwGC;AApGQ,eAAO,GAAG,CAAC,SAAS,CAAC,CAAC"}
@@ -1,11 +1,50 @@
1
- import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, NumberAsString, DexExchangeParam, ExchangeTxInfo, PreprocessTransactionOptions } from '../../types';
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { Token, Address, ExchangePrices, PoolPrices, Log, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, NumberAsString, DexExchangeParam, ExchangeTxInfo, PreprocessTransactionOptions } from '../../types';
2
3
  import { SwapSide, Network } from '../../constants';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
3
5
  import { IDex } from '../../dex/idex';
4
6
  import { IDexHelper } from '../../dex-helper/idex-helper';
5
7
  import { MakerPsmData, PoolState, PoolConfig, MakerPsmDirectPayload } from './types';
6
8
  import { SimpleExchange } from '../simple-exchange';
7
9
  import { OptimalSwapExchange } from '@paraswap/core';
8
- import { MakerPsmEventPool } from './maker-psm-event-pool';
10
+ export declare class MakerPsmEventPool extends StatefulEventSubscriber<PoolState> {
11
+ protected network: number;
12
+ protected dexHelper: IDexHelper;
13
+ poolConfig: PoolConfig;
14
+ protected vatAddress: Address;
15
+ handlers: {
16
+ [event: string]: (event: any, pool: PoolState, log: Log) => PoolState;
17
+ };
18
+ logDecoder: (log: Log) => any;
19
+ to18ConversionFactor: bigint;
20
+ bytes32Tout: string;
21
+ bytes32Tin: string;
22
+ constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, poolConfig: PoolConfig, vatAddress: Address);
23
+ handleFile(event: any, pool: PoolState, log: Log): PoolState;
24
+ handleSellGem(event: any, pool: PoolState, log: Log): PoolState;
25
+ handleBuyGem(event: any, pool: PoolState, log: Log): PoolState;
26
+ getIdentifier(): string;
27
+ /**
28
+ * The function is called every time any of the subscribed
29
+ * addresses release log. The function accepts the current
30
+ * state, updates the state according to the log, and returns
31
+ * the updated state.
32
+ * @param state - Current state of event subscriber
33
+ * @param log - Log released by one of the subscribed addresses
34
+ * @returns Updates state of the event subscriber after the log
35
+ */
36
+ protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
37
+ /**
38
+ * The function generates state using on-chain calls. This
39
+ * function is called to regenerate state if the event based
40
+ * system fails to fetch events and the local state is no
41
+ * more correct.
42
+ * @param blockNumber - Blocknumber for which the state should
43
+ * should be generated
44
+ * @returns state of the event subscriber at blocknumber
45
+ */
46
+ generateState(blockNumber: number): Promise<Readonly<PoolState>>;
47
+ }
9
48
  export declare class MakerPsm extends SimpleExchange implements IDex<MakerPsmData, MakerPsmDirectPayload> {
10
49
  protected network: Network;
11
50
  protected dexHelper: IDexHelper;
@@ -36,7 +75,6 @@ export declare class MakerPsm extends SimpleExchange implements IDex<MakerPsmDat
36
75
  }, dai?: Token, vatAddress?: Address, poolConfigs?: PoolConfig[]);
37
76
  static getDirectFunctionNameV6(): string[];
38
77
  initializePricing(blockNumber: number): Promise<void>;
39
- private initializeEventPools;
40
78
  getAdapters(side: SwapSide): {
41
79
  name: string;
42
80
  index: number;
@@ -61,6 +99,5 @@ export declare class MakerPsm extends SimpleExchange implements IDex<MakerPsmDat
61
99
  encoder: (...params: (string | MakerPsmDirectPayload)[]) => string;
62
100
  networkFee: string;
63
101
  };
64
- updatePoolState(): Promise<void>;
65
102
  getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
66
103
  }
@@ -36,23 +36,143 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.MakerPsm = void 0;
39
+ exports.MakerPsm = exports.MakerPsmEventPool = void 0;
40
40
  const abi_1 = require("@ethersproject/abi");
41
41
  const constants_1 = require("../../constants");
42
42
  const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
43
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
43
44
  const utils_1 = require("../../utils");
44
45
  const simple_exchange_1 = require("../simple-exchange");
45
46
  const config_1 = require("./config");
46
47
  const psm_json_1 = __importDefault(require("../../abi/maker-psm/psm.json"));
48
+ const vat_json_1 = __importDefault(require("../../abi/maker-psm/vat.json"));
47
49
  const bigint_constants_1 = require("../../bigint-constants");
48
50
  const types_1 = require("../../executor/types");
49
51
  const bytes_1 = require("@ethersproject/bytes");
50
52
  const core_1 = require("@paraswap/core");
51
53
  const ethers_1 = require("ethers");
52
- const maker_psm_event_pool_1 = require("./maker-psm-event-pool");
54
+ const vatInterface = new abi_1.Interface(vat_json_1.default);
53
55
  const psmInterface = new abi_1.Interface(psm_json_1.default);
54
56
  const WAD = bigint_constants_1.BI_POWS[18];
57
+ const bigIntify = (b) => BigInt(b.toString());
55
58
  const ceilDiv = (a, b) => (a + b - 1n) / b;
59
+ async function getOnChainState(multiContract, poolConfigs, vatAddress, blockNumber) {
60
+ const callData = poolConfigs
61
+ .map(c => [
62
+ {
63
+ target: c.psmAddress,
64
+ callData: psmInterface.encodeFunctionData('tin', []),
65
+ },
66
+ {
67
+ target: c.psmAddress,
68
+ callData: psmInterface.encodeFunctionData('tout', []),
69
+ },
70
+ {
71
+ target: vatAddress,
72
+ callData: vatInterface.encodeFunctionData('ilks', [c.identifier]),
73
+ },
74
+ ])
75
+ .flat();
76
+ const res = await multiContract.methods
77
+ .aggregate(callData)
78
+ .call({}, blockNumber);
79
+ let i = 0;
80
+ return poolConfigs.map(c => {
81
+ const tin = bigIntify(psmInterface.decodeFunctionResult('tin', res.returnData[i++])[0]);
82
+ const tout = bigIntify(psmInterface.decodeFunctionResult('tout', res.returnData[i++])[0]);
83
+ const ilks = vatInterface.decodeFunctionResult('ilks', res.returnData[i++]);
84
+ const Art = bigIntify(ilks.Art);
85
+ const line = bigIntify(ilks.line);
86
+ const rate = bigIntify(ilks.rate);
87
+ return {
88
+ tin,
89
+ tout,
90
+ Art,
91
+ line,
92
+ rate,
93
+ };
94
+ });
95
+ }
96
+ class MakerPsmEventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
97
+ network;
98
+ dexHelper;
99
+ poolConfig;
100
+ vatAddress;
101
+ handlers = {};
102
+ logDecoder;
103
+ to18ConversionFactor;
104
+ bytes32Tout = '0x746f757400000000000000000000000000000000000000000000000000000000'; // bytes32('tout')
105
+ bytes32Tin = '0x74696e0000000000000000000000000000000000000000000000000000000000'; // bytes32('tin')
106
+ constructor(parentName, network, dexHelper, logger, poolConfig, vatAddress) {
107
+ super(parentName, poolConfig.identifier, dexHelper, logger);
108
+ this.network = network;
109
+ this.dexHelper = dexHelper;
110
+ this.poolConfig = poolConfig;
111
+ this.vatAddress = vatAddress;
112
+ this.logDecoder = (log) => psmInterface.parseLog(log);
113
+ this.addressesSubscribed = [poolConfig.psmAddress];
114
+ this.to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - poolConfig.gem.decimals);
115
+ // Add handlers
116
+ this.handlers['File'] = this.handleFile.bind(this);
117
+ this.handlers['SellGem'] = this.handleSellGem.bind(this);
118
+ this.handlers['BuyGem'] = this.handleBuyGem.bind(this);
119
+ }
120
+ handleFile(event, pool, log) {
121
+ if (event.args.what === this.bytes32Tin) {
122
+ pool.tin = bigIntify(event.args.data);
123
+ }
124
+ else if (event.args.what === this.bytes32Tout) {
125
+ pool.tout = bigIntify(event.args.data);
126
+ }
127
+ return pool;
128
+ }
129
+ handleSellGem(event, pool, log) {
130
+ pool.Art += bigIntify(event.args.value) * this.to18ConversionFactor;
131
+ return pool;
132
+ }
133
+ handleBuyGem(event, pool, log) {
134
+ pool.Art -= bigIntify(event.args.value) * this.to18ConversionFactor;
135
+ return pool;
136
+ }
137
+ getIdentifier() {
138
+ return `${this.parentName}_${this.poolConfig.psmAddress}`.toLowerCase();
139
+ }
140
+ /**
141
+ * The function is called every time any of the subscribed
142
+ * addresses release log. The function accepts the current
143
+ * state, updates the state according to the log, and returns
144
+ * the updated state.
145
+ * @param state - Current state of event subscriber
146
+ * @param log - Log released by one of the subscribed addresses
147
+ * @returns Updates state of the event subscriber after the log
148
+ */
149
+ processLog(state, log) {
150
+ try {
151
+ const event = this.logDecoder(log);
152
+ if (event.name in this.handlers) {
153
+ return this.handlers[event.name](event, state, log);
154
+ }
155
+ return state;
156
+ }
157
+ catch (e) {
158
+ this.logger.error(`Error_${this.parentName}_processLog could not parse the log with topic ${log.topics}:`, e);
159
+ return null;
160
+ }
161
+ }
162
+ /**
163
+ * The function generates state using on-chain calls. This
164
+ * function is called to regenerate state if the event based
165
+ * system fails to fetch events and the local state is no
166
+ * more correct.
167
+ * @param blockNumber - Blocknumber for which the state should
168
+ * should be generated
169
+ * @returns state of the event subscriber at blocknumber
170
+ */
171
+ async generateState(blockNumber) {
172
+ return (await getOnChainState(this.dexHelper.multiContract, [this.poolConfig], this.vatAddress, blockNumber))[0];
173
+ }
174
+ }
175
+ exports.MakerPsmEventPool = MakerPsmEventPool;
56
176
  class MakerPsm extends simple_exchange_1.SimpleExchange {
57
177
  network;
58
178
  dexHelper;
@@ -76,23 +196,18 @@ class MakerPsm extends simple_exchange_1.SimpleExchange {
76
196
  this.poolConfigs = poolConfigs;
77
197
  this.logger = dexHelper.getLogger(dexKey);
78
198
  this.eventPools = {};
79
- poolConfigs.forEach(p => (this.eventPools[p.gem.address.toLowerCase()] = new maker_psm_event_pool_1.MakerPsmEventPool(dexKey, network, dexHelper, this.logger, p, this.vatAddress)));
199
+ poolConfigs.forEach(p => (this.eventPools[p.gem.address.toLowerCase()] = new MakerPsmEventPool(dexKey, network, dexHelper, this.logger, p, this.vatAddress)));
80
200
  }
81
201
  static getDirectFunctionNameV6() {
82
202
  return [core_1.ContractMethodV6.swapExactAmountInOutOnMakerPSM];
83
203
  }
84
204
  async initializePricing(blockNumber) {
85
- await this.initializeEventPools(blockNumber);
86
- }
87
- async initializeEventPools(blockNumber, subscribe = true) {
88
- await Promise.all(Object.values(this.eventPools).map(async (eventPool) => {
89
- if (subscribe) {
90
- await eventPool.initialize(blockNumber);
91
- }
92
- else {
93
- const state = await eventPool.generateState(blockNumber);
94
- eventPool.setState(state, blockNumber);
95
- }
205
+ const poolStates = await getOnChainState(this.dexHelper.multiContract, this.poolConfigs, this.vatAddress, blockNumber);
206
+ await Promise.all(this.poolConfigs.map(async (p, i) => {
207
+ const eventPool = this.eventPools[p.gem.address.toLowerCase()];
208
+ await eventPool.initialize(blockNumber, {
209
+ state: poolStates[i],
210
+ });
96
211
  }));
97
212
  }
98
213
  // Returns the list of contract adapters (name and index)
@@ -345,45 +460,33 @@ class MakerPsm extends simple_exchange_1.SimpleExchange {
345
460
  };
346
461
  return { params: payload, encoder, networkFee: '0' };
347
462
  }
348
- async updatePoolState() {
349
- const blockNumber = await this.dexHelper.web3Provider.eth.getBlockNumber();
350
- await this.initializeEventPools(blockNumber, false);
351
- }
352
463
  // Returns list of top pools based on liquidity. Max
353
464
  // limit number pools should be returned.
354
465
  async getTopPoolsForToken(tokenAddress, limit) {
355
- const token = tokenAddress.toLowerCase();
356
- const isDAI = this.dai.address.toLowerCase() === token;
466
+ const _tokenAddress = tokenAddress.toLowerCase();
357
467
  // Liquidity depends on the swapping side hence we simply use the min
358
468
  // Its always in terms of stable coin hence liquidityUSD = liquidity
359
469
  const minLiq = (poolState) => {
360
470
  const buyLimit = poolState.Art;
361
471
  const sellLimit = (poolState.line - poolState.Art * poolState.rate) / poolState.rate;
362
- const minLimit = buyLimit < sellLimit ? buyLimit : sellLimit;
363
- const liquidity = Number(minLimit) / Number(bigint_constants_1.BI_POWS[18]);
364
- return liquidity > 0 ? 2 * liquidity : 0;
472
+ return (2 *
473
+ parseInt(((buyLimit > sellLimit ? sellLimit : buyLimit) / bigint_constants_1.BI_POWS[18]).toString()));
365
474
  };
366
- const validPoolConfigs = isDAI
475
+ const isDai = _tokenAddress === this.dai.address;
476
+ const validPoolConfigs = isDai
367
477
  ? this.poolConfigs
368
- : this.eventPools[token]
369
- ? [this.eventPools[token].poolConfig]
478
+ : this.eventPools[_tokenAddress]
479
+ ? [this.eventPools[_tokenAddress].poolConfig]
370
480
  : [];
371
481
  if (!validPoolConfigs.length)
372
482
  return [];
373
- const pools = validPoolConfigs.map(config => {
374
- const eventPoolKey = config.gem.address.toLowerCase();
375
- const eventPool = this.eventPools[eventPoolKey];
376
- const state = eventPool?.getStaleState();
377
- if (!state)
378
- return null;
379
- return {
380
- exchange: this.dexKey,
381
- address: config.psmAddress,
382
- liquidityUSD: minLiq(state),
383
- connectorTokens: [isDAI ? config.gem : this.dai],
384
- };
385
- });
386
- return pools.filter(p => !!p).slice(0, limit);
483
+ const poolStates = await getOnChainState(this.dexHelper.multiContract, validPoolConfigs, this.vatAddress, 'latest');
484
+ return validPoolConfigs.map((p, i) => ({
485
+ exchange: this.dexKey,
486
+ address: p.psmAddress,
487
+ liquidityUSD: minLiq(poolStates[i]),
488
+ connectorTokens: [isDai ? p.gem : this.dai],
489
+ }));
387
490
  }
388
491
  }
389
492
  exports.MakerPsm = MakerPsm;