@paraswap/dex-lib 3.7.8 → 3.7.9-dex-deprecation.0

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 (96) hide show
  1. package/.vscode/launch.json +53 -0
  2. package/.vscode/settings.json +2 -0
  3. package/.vscode/tasks.json +15 -0
  4. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +52 -0
  5. package/build/abi/wombat/pool.json +1289 -0
  6. package/build/dex/aave-v1/aave-v1.js +1 -0
  7. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  8. package/build/dex/aave-v2/tokens-avalanche.json +44 -0
  9. package/build/dex/aave-v2/tokens-mainnet.json +188 -0
  10. package/build/dex/aave-v2/tokens-polygon.json +44 -0
  11. package/build/dex/bProtocol.d.ts +18 -0
  12. package/build/dex/bProtocol.js +39 -0
  13. package/build/dex/bProtocol.js.map +1 -0
  14. package/build/dex/bancor.d.ts +26 -0
  15. package/build/dex/bancor.js +58 -0
  16. package/build/dex/bancor.js.map +1 -0
  17. package/build/dex/compound.d.ts +18 -0
  18. package/build/dex/compound.js +46 -0
  19. package/build/dex/compound.js.map +1 -0
  20. package/build/dex/curve-v2.d.ts +58 -0
  21. package/build/dex/curve-v2.js +180 -0
  22. package/build/dex/curve-v2.js.map +1 -0
  23. package/build/dex/dodo-v1.d.ts +33 -0
  24. package/build/dex/dodo-v1.js +63 -0
  25. package/build/dex/dodo-v1.js.map +1 -0
  26. package/build/dex/index.js +0 -16
  27. package/build/dex/index.js.map +1 -1
  28. package/build/dex/lido.d.ts +19 -0
  29. package/build/dex/lido.js +42 -0
  30. package/build/dex/lido.js.map +1 -0
  31. package/build/dex/maker-psm/scripts/gem.abi.json +136 -0
  32. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  33. package/build/dex/maker-psm/scripts/validate-state.js +185 -0
  34. package/build/dex/maker-psm/scripts/validate-state.js.map +1 -0
  35. package/build/dex/maker-psm/scripts/vat.abi.json +243 -0
  36. package/build/dex/onebit.d.ts +25 -0
  37. package/build/dex/onebit.js +42 -0
  38. package/build/dex/onebit.js.map +1 -0
  39. package/build/dex/platypus/platypus.js +17 -3
  40. package/build/dex/platypus/platypus.js.map +1 -1
  41. package/build/dex/smoothy.d.ts +26 -0
  42. package/build/dex/smoothy.js +48 -0
  43. package/build/dex/smoothy.js.map +1 -0
  44. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
  45. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
  46. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
  47. package/build/dex/stable-pool.d.ts +28 -0
  48. package/build/dex/stable-pool.js +55 -0
  49. package/build/dex/stable-pool.js.map +1 -0
  50. package/build/dex/swaap-v1/swaap-v1.js +4 -0
  51. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  52. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  53. package/build/dex/trader-joe-v2.1.js +79 -0
  54. package/build/dex/trader-joe-v2.1.js.map +1 -0
  55. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
  56. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
  57. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
  58. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
  59. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
  60. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
  61. package/package.json +1 -1
  62. package/src/dex/index.ts +0 -16
  63. package/build/dex/idle-dao/idle-dao-pool.d.ts +0 -56
  64. package/build/dex/idle-dao/idle-dao-pool.js +0 -176
  65. package/build/dex/idle-dao/idle-dao-pool.js.map +0 -1
  66. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +0 -16
  67. package/build/dex/idle-dao/idle-dao-pooling-pool.js +0 -57
  68. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +0 -1
  69. package/build/dex/idle-dao/scripts.d.ts +0 -9
  70. package/build/dex/idle-dao/scripts.js +0 -552
  71. package/build/dex/idle-dao/scripts.js.map +0 -1
  72. package/src/abi/BProtocol.json +0 -1155
  73. package/src/abi/Jarvis.json +0 -1172
  74. package/src/abi/MStableAsset.json +0 -1545
  75. package/src/abi/OneInchLp.json +0 -1304
  76. package/src/abi/Onebit.json +0 -736
  77. package/src/abi/Shell.json +0 -1294
  78. package/src/abi/TraderJoeV2Router.json +0 -50
  79. package/src/abi/zrx.v2.json +0 -1967
  80. package/src/abi/zrx.v3.json +0 -3454
  81. package/src/abi/zrx.v4.json +0 -2193
  82. package/src/dex/OneInchLp.ts +0 -84
  83. package/src/dex/bProtocol/bProtocol-e2e.test.ts +0 -93
  84. package/src/dex/bProtocol/bProtocol.ts +0 -108
  85. package/src/dex/bProtocol/types.ts +0 -13
  86. package/src/dex/jarvis.ts +0 -262
  87. package/src/dex/mStable.ts +0 -147
  88. package/src/dex/onebit/onebit.ts +0 -113
  89. package/src/dex/onebit/types.ts +0 -17
  90. package/src/dex/shell.ts +0 -84
  91. package/src/dex/trader-joe-v2.ts +0 -148
  92. package/src/dex/zerox/config.ts +0 -31
  93. package/src/dex/zerox/index.ts +0 -328
  94. package/src/dex/zerox/order.ts +0 -62
  95. package/src/dex/zerox/types.ts +0 -82
  96. package/src/dex/zerox/zerox-e2e.test.ts +0 -110
@@ -1,84 +0,0 @@
1
- import { Interface, JsonFragment } from '@ethersproject/abi';
2
- import { NULL_ADDRESS, SwapSide } from '../constants';
3
- import { AdapterExchangeParam, Address, SimpleExchangeParam } from '../types';
4
- import { IDexTxBuilder } from './idex';
5
- import { SimpleExchange } from './simple-exchange';
6
- import OneInchLpABI from '../abi/OneInchLp.json';
7
- import { isETHAddress } from '../utils';
8
- import Web3 from 'web3';
9
- import { IDexHelper } from '../dex-helper';
10
-
11
- export type OneInchLpData = {
12
- exchange: string; // _DOUBLE_CHECK_
13
- };
14
- type OneInchLpParam = [
15
- src: string,
16
- dst: string,
17
- amount: string,
18
- minReturn: string,
19
- referral: string,
20
- ];
21
- enum OneInchLpFunctions {
22
- swap = 'swap',
23
- }
24
-
25
- export class OneInchLp
26
- extends SimpleExchange
27
- implements IDexTxBuilder<OneInchLpData, OneInchLpParam>
28
- {
29
- static dexKeys = ['oneinchlp'];
30
- exchangeRouterInterface: Interface;
31
-
32
- constructor(dexHelper: IDexHelper) {
33
- super(dexHelper, 'oneinchlp');
34
- this.exchangeRouterInterface = new Interface(
35
- OneInchLpABI as JsonFragment[],
36
- );
37
- }
38
-
39
- getAdapterParam(
40
- srcToken: string,
41
- destToken: string,
42
- srcAmount: string,
43
- destAmount: string,
44
- data: OneInchLpData,
45
- side: SwapSide,
46
- ): AdapterExchangeParam {
47
- return {
48
- targetExchange: data.exchange,
49
- payload: '0x',
50
- networkFee: '0',
51
- };
52
- }
53
-
54
- async getSimpleParam(
55
- srcToken: string,
56
- destToken: string,
57
- srcAmount: string,
58
- destAmount: string,
59
- data: OneInchLpData,
60
- side: SwapSide,
61
- ): Promise<SimpleExchangeParam> {
62
- const swapFunction = OneInchLpFunctions.swap;
63
- const swapFunctionParams: OneInchLpParam = [
64
- isETHAddress(srcToken) ? NULL_ADDRESS : srcToken,
65
- isETHAddress(destToken) ? NULL_ADDRESS : destToken,
66
- srcAmount,
67
- destAmount,
68
- NULL_ADDRESS,
69
- ];
70
- const swapData = this.exchangeRouterInterface.encodeFunctionData(
71
- swapFunction,
72
- swapFunctionParams,
73
- );
74
-
75
- return this.buildSimpleParamWithoutWETHConversion(
76
- srcToken,
77
- srcAmount,
78
- destToken,
79
- destAmount,
80
- swapData,
81
- data.exchange,
82
- );
83
- }
84
- }
@@ -1,93 +0,0 @@
1
- import dotenv from 'dotenv';
2
- dotenv.config();
3
-
4
- import { testE2E } from '../../../tests/utils-e2e';
5
- import {
6
- Tokens,
7
- Holders,
8
- NativeTokenSymbols,
9
- } from '../../../tests/constants-e2e';
10
-
11
- import { ContractMethod, Network, SwapSide } from '../../constants';
12
- import { StaticJsonRpcProvider } from '@ethersproject/providers';
13
- import { generateConfig } from '../../config';
14
-
15
- const dexKey = 'bprotocol';
16
-
17
- // ! LIQUIDITY ISSUES
18
-
19
- const testForNetwork = (
20
- network: Network,
21
- swapMap: Map<SwapSide, ContractMethod[]>,
22
- ) => {
23
- const tokens = Tokens[network];
24
- const holders = Holders[network];
25
-
26
- const nativeSymbol = NativeTokenSymbols[network];
27
-
28
- const provider = new StaticJsonRpcProvider(
29
- generateConfig(network).privateHttpProvider,
30
- network,
31
- );
32
-
33
- const tokensToTest = [
34
- [
35
- {
36
- symbol: 'LUSD',
37
- amount: '100000000000000000000',
38
- },
39
- {
40
- symbol: 'ETH',
41
- amount: '35360886801038522',
42
- },
43
- ],
44
- ];
45
-
46
- swapMap.forEach((contractMethods, side) =>
47
- contractMethods.forEach((contractMethod: string) => {
48
- tokensToTest.forEach(pair => {
49
- describe(`${contractMethod}`, () => {
50
- it(`${pair[0].symbol} -> ${pair[1].symbol}`, async () => {
51
- await testE2E(
52
- tokens[pair[0].symbol],
53
- tokens[pair[1].symbol],
54
- holders[pair[0].symbol],
55
- side === SwapSide.SELL ? pair[0].amount : pair[1].amount,
56
- side,
57
- dexKey,
58
- contractMethod as any,
59
- network,
60
- provider,
61
- );
62
- });
63
-
64
- it(`${nativeSymbol} -> ${pair[0].symbol}`, async () => {
65
- await testE2E(
66
- tokens[nativeSymbol],
67
- tokens[pair[0].symbol],
68
- holders[nativeSymbol],
69
- side === SwapSide.SELL ? '1000000000000000000' : pair[0].amount,
70
- side,
71
- dexKey,
72
- contractMethod as any,
73
- network,
74
- provider,
75
- );
76
- });
77
- });
78
- });
79
- }),
80
- );
81
- };
82
-
83
- // Ensure you have the E2E_ENDPOINT_URL env variable set.
84
-
85
- describe('bProtocol E2E', () => {
86
- describe('Mainnet V6', () => {
87
- const swapMap = new Map<SwapSide, ContractMethod[]>([
88
- [SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
89
- ]);
90
-
91
- testForNetwork(Network.MAINNET, swapMap);
92
- });
93
- });
@@ -1,108 +0,0 @@
1
- import { Interface, JsonFragment } from '@ethersproject/abi';
2
- import { SwapSide } from '../../constants';
3
- import {
4
- AdapterExchangeParam,
5
- Address,
6
- DexExchangeParam,
7
- NumberAsString,
8
- SimpleExchangeParam,
9
- } from '../../types';
10
- import { IDexTxBuilder } from '../idex';
11
- import { SimpleExchange } from '../simple-exchange';
12
- import BProtocolABI from '../../abi/BProtocol.json';
13
- import { IDexHelper } from '../../dex-helper';
14
- import { BProtocolData, BProtocolFunctions, BProtocolParam } from './types';
15
- import { extractReturnAmountPosition } from '../../executor/utils';
16
-
17
- export class BProtocol
18
- extends SimpleExchange
19
- implements IDexTxBuilder<BProtocolData, BProtocolParam>
20
- {
21
- static dexKeys = ['bprotocol'];
22
- exchangeRouterInterface: Interface;
23
-
24
- constructor(dexHelper: IDexHelper) {
25
- super(dexHelper, 'bprotocol');
26
- this.exchangeRouterInterface = new Interface(
27
- BProtocolABI as JsonFragment[],
28
- );
29
- }
30
-
31
- getAdapterParam(
32
- srcToken: string,
33
- destToken: string,
34
- srcAmount: string,
35
- destAmount: string,
36
- data: BProtocolData,
37
- side: SwapSide,
38
- ): AdapterExchangeParam {
39
- return {
40
- targetExchange: data.exchange,
41
- payload: '0x',
42
- networkFee: '0',
43
- };
44
- }
45
-
46
- async getSimpleParam(
47
- srcToken: string,
48
- destToken: string,
49
- srcAmount: string,
50
- destAmount: string,
51
- data: BProtocolData,
52
- side: SwapSide,
53
- ): Promise<SimpleExchangeParam> {
54
- const swapFunction = BProtocolFunctions.swap;
55
- const swapFunctionParams: BProtocolParam = [
56
- srcAmount,
57
- destAmount,
58
- this.augustusAddress,
59
- ];
60
- const swapData = this.exchangeRouterInterface.encodeFunctionData(
61
- swapFunction,
62
- swapFunctionParams,
63
- );
64
-
65
- return this.buildSimpleParamWithoutWETHConversion(
66
- srcToken,
67
- srcAmount,
68
- destToken,
69
- destAmount,
70
- swapData,
71
- data.exchange,
72
- );
73
- }
74
-
75
- getDexParam(
76
- _srcToken: Address,
77
- _destToken: Address,
78
- srcAmount: NumberAsString,
79
- destAmount: NumberAsString,
80
- recipient: Address,
81
- data: BProtocolData,
82
- _side: SwapSide,
83
- ): DexExchangeParam {
84
- const swapFunction = BProtocolFunctions.swap;
85
- const swapFunctionParams: BProtocolParam = [
86
- srcAmount,
87
- destAmount,
88
- recipient,
89
- ];
90
- const swapData = this.exchangeRouterInterface.encodeFunctionData(
91
- swapFunction,
92
- swapFunctionParams,
93
- );
94
- return {
95
- needWrapNative: this.needWrapNative,
96
- dexFuncHasRecipient: true,
97
- exchangeData: swapData,
98
- targetExchange: data.exchange,
99
- returnAmountPos:
100
- _side === SwapSide.SELL
101
- ? extractReturnAmountPosition(
102
- this.exchangeRouterInterface,
103
- swapFunction,
104
- )
105
- : undefined,
106
- };
107
- }
108
- }
@@ -1,13 +0,0 @@
1
- export type BProtocolData = {
2
- exchange: string;
3
- };
4
-
5
- export type BProtocolParam = [
6
- lusdAmount: string,
7
- minEthReturn: string,
8
- dest: string,
9
- ];
10
-
11
- export enum BProtocolFunctions {
12
- swap = 'swap',
13
- }
package/src/dex/jarvis.ts DELETED
@@ -1,262 +0,0 @@
1
- import { Interface, JsonFragment } from '@ethersproject/abi';
2
- import { NULL_ADDRESS, SwapSide } from '../constants';
3
- import {
4
- AdapterExchangeParam,
5
- Address,
6
- DexExchangeParam,
7
- NumberAsString,
8
- SimpleExchangeParam,
9
- } from '../types';
10
- import { IDexTxBuilder } from './idex';
11
- import { SimpleExchange } from './simple-exchange';
12
- import JarvisABI from '../abi/Jarvis.json';
13
- import Web3 from 'web3';
14
- import { IDexHelper } from '../dex-helper';
15
- import { extractReturnAmountPosition } from '../executor/utils';
16
-
17
- const THIRTY_MINUTES = 60 * 30;
18
-
19
- export type JarvisData = {
20
- derivatives: string;
21
- destDerivatives?: string;
22
- pools: string[];
23
- fee: string;
24
- method: JarvisFunctions;
25
- router: Address;
26
- };
27
-
28
- type JarvisMintParam = [
29
- derivative: string,
30
- minNumTokens: string,
31
- collateralAmount: string,
32
- feePercentage: string,
33
- expiration: string,
34
- recipient: string,
35
- ];
36
-
37
- type JarvisRedeemParam = [
38
- derivative: string,
39
- numTokens: string,
40
- minCollateral: string,
41
- feePercentage: string,
42
- expiration: string,
43
- recipient: string,
44
- ];
45
-
46
- type JarvisExchangeParam = [
47
- derivative: string,
48
- destPool: string,
49
- destDerivative: string,
50
- numTokens: string,
51
- minDestNumTokens: string,
52
- feePercentage: string,
53
- expiration: string,
54
- recipient: string,
55
- ];
56
-
57
- type JarvisParam = JarvisExchangeParam | JarvisMintParam | JarvisRedeemParam;
58
-
59
- enum JarvisFunctions {
60
- mint = 'mint',
61
- redeem = 'redeem',
62
- exchange = 'exchange',
63
- }
64
-
65
- export class Jarvis
66
- extends SimpleExchange
67
- implements IDexTxBuilder<JarvisData, JarvisParam>
68
- {
69
- static dexKeys = ['jarvis'];
70
- poolInterface: Interface;
71
- needWrapNative = false;
72
-
73
- constructor(dexHelper: IDexHelper) {
74
- super(dexHelper, 'jarvis');
75
- this.poolInterface = new Interface(JarvisABI as JsonFragment[]);
76
- }
77
-
78
- getAdapterParam(
79
- srcToken: string,
80
- destToken: string,
81
- srcAmount: string,
82
- destAmount: string,
83
- data: JarvisData,
84
- side: SwapSide,
85
- ): AdapterExchangeParam {
86
- const { method } = data;
87
- const type = [
88
- JarvisFunctions.mint,
89
- JarvisFunctions.redeem,
90
- JarvisFunctions.exchange,
91
- ].indexOf(method);
92
-
93
- if (type === undefined) {
94
- throw new Error(
95
- `Jarvis: Invalid OpType ${method}, Should be one of ['mint', 'exchange', 'redeem']`,
96
- );
97
- }
98
-
99
- const payload = this.abiCoder.encodeParameter(
100
- {
101
- ParentStruct: {
102
- opType: 'uint',
103
- derivatives: 'address',
104
- destDerivatives: 'address',
105
- fee: 'uint128',
106
- destPool: 'address',
107
- expiration: 'uint128',
108
- },
109
- },
110
- {
111
- opType: type,
112
- derivatives: data.derivatives,
113
- destDerivatives: data.destDerivatives || NULL_ADDRESS,
114
- fee: data.fee,
115
- destPool: data.pools[1] || NULL_ADDRESS,
116
- expiration: (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0),
117
- },
118
- );
119
-
120
- return {
121
- targetExchange: data.pools[0],
122
- payload,
123
- networkFee: '0',
124
- };
125
- }
126
-
127
- async getSimpleParam(
128
- srcToken: string,
129
- destToken: string,
130
- srcAmount: string,
131
- destAmount: string,
132
- data: JarvisData,
133
- side: SwapSide,
134
- ): Promise<SimpleExchangeParam> {
135
- const swapFunction = data.method;
136
- const timestamp = (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0);
137
- let swapFunctionParams: JarvisParam;
138
- switch (swapFunction) {
139
- case JarvisFunctions.mint:
140
- swapFunctionParams = [
141
- data.derivatives,
142
- destAmount,
143
- srcAmount,
144
- data.fee,
145
- timestamp,
146
- this.augustusAddress,
147
- ];
148
- break;
149
- case JarvisFunctions.redeem:
150
- swapFunctionParams = [
151
- data.derivatives,
152
- srcAmount,
153
- destAmount,
154
- data.fee,
155
- timestamp,
156
- this.augustusAddress,
157
- ];
158
- break;
159
- case JarvisFunctions.exchange:
160
- swapFunctionParams = [
161
- data.derivatives,
162
- data.pools[1],
163
- data.destDerivatives!,
164
- srcAmount,
165
- destAmount,
166
- data.fee,
167
- timestamp,
168
- this.augustusAddress,
169
- ];
170
- break;
171
- default:
172
- throw new Error(`Unknown function ${swapFunction}`);
173
- }
174
-
175
- const swapData = this.poolInterface.encodeFunctionData(swapFunction, [
176
- swapFunctionParams,
177
- ]);
178
-
179
- return this.buildSimpleParamWithoutWETHConversion(
180
- srcToken,
181
- srcAmount,
182
- destToken,
183
- destAmount,
184
- swapData,
185
- data.pools[0],
186
- );
187
- }
188
-
189
- getDexParam(
190
- srcToken: Address,
191
- destToken: Address,
192
- srcAmount: NumberAsString,
193
- destAmount: NumberAsString,
194
- recipient: Address,
195
- data: JarvisData,
196
- side: SwapSide,
197
- ): DexExchangeParam {
198
- const swapFunction = data.method;
199
- const timestamp = (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0);
200
- let swapFunctionParams: JarvisParam;
201
- let outputName: string;
202
-
203
- switch (swapFunction) {
204
- case JarvisFunctions.mint:
205
- swapFunctionParams = [
206
- data.derivatives,
207
- destAmount,
208
- srcAmount,
209
- data.fee,
210
- timestamp,
211
- recipient,
212
- ];
213
- outputName = 'syntheticTokensMinted';
214
- break;
215
- case JarvisFunctions.redeem:
216
- swapFunctionParams = [
217
- data.derivatives,
218
- srcAmount,
219
- destAmount,
220
- data.fee,
221
- timestamp,
222
- recipient,
223
- ];
224
- outputName = 'collateralRedeemed';
225
- break;
226
- case JarvisFunctions.exchange:
227
- swapFunctionParams = [
228
- data.derivatives,
229
- data.pools[1],
230
- data.destDerivatives!,
231
- srcAmount,
232
- destAmount,
233
- data.fee,
234
- timestamp,
235
- recipient,
236
- ];
237
- outputName = 'destNumTokensMinted';
238
- break;
239
- default:
240
- throw new Error(`Unknown function ${swapFunction}`);
241
- }
242
-
243
- const swapData = this.poolInterface.encodeFunctionData(swapFunction, [
244
- swapFunctionParams,
245
- ]);
246
-
247
- return {
248
- needWrapNative: this.needWrapNative,
249
- dexFuncHasRecipient: true,
250
- exchangeData: swapData,
251
- targetExchange: data.pools[0],
252
- returnAmountPos:
253
- side === SwapSide.SELL
254
- ? extractReturnAmountPosition(
255
- this.poolInterface,
256
- swapFunction,
257
- outputName,
258
- )
259
- : undefined,
260
- };
261
- }
262
- }
@@ -1,147 +0,0 @@
1
- import { Interface, JsonFragment } from '@ethersproject/abi';
2
- import { Provider } from '@ethersproject/providers';
3
- import { SwapSide } from '../constants';
4
- import { AdapterExchangeParam, Address, SimpleExchangeParam } from '../types';
5
- import { IDexTxBuilder } from './idex';
6
- import { SimpleExchange } from './simple-exchange';
7
- import MStableAssetABI from '../abi/MStableAsset.json';
8
- import Web3 from 'web3';
9
- import { IDexHelper } from '../dex-helper';
10
-
11
- enum MStableFunctions {
12
- mint = 'mint',
13
- swap = 'swap',
14
- redeem = 'redeem',
15
- }
16
- type MStableData = {
17
- exchange: string;
18
- opType: MStableFunctions;
19
- isAssetContract: boolean;
20
- };
21
- type MStableMint = [
22
- _input: string,
23
- _inputQuantity: string,
24
- _minOutputQuantity: string,
25
- _recipient: string,
26
- ];
27
- type MStableSwap = [
28
- _input: string,
29
- _output: string,
30
- _inputQuantity: string,
31
- _minOutputQuantity: string,
32
- _recipient: string,
33
- ];
34
- type MStableRedeem = [
35
- _output: string,
36
- _mAssetQuantity: string,
37
- _minOutputQuantity: string,
38
- _recipient: string,
39
- ];
40
-
41
- type MStableParam = MStableMint | MStableSwap | MStableRedeem;
42
-
43
- export class MStable
44
- extends SimpleExchange
45
- implements IDexTxBuilder<MStableData, MStableParam>
46
- {
47
- static dexKeys = ['mStable'];
48
- mStableAsset: Interface;
49
-
50
- constructor(dexHelper: IDexHelper) {
51
- super(dexHelper, 'mStable');
52
- this.mStableAsset = new Interface(MStableAssetABI as JsonFragment[]);
53
- }
54
-
55
- getAdapterParam(
56
- srcToken: string,
57
- destToken: string,
58
- srcAmount: string,
59
- destAmount: string,
60
- data: MStableData,
61
- side: SwapSide,
62
- ): AdapterExchangeParam {
63
- const { opType } = data;
64
- const type = [
65
- MStableFunctions.swap,
66
- MStableFunctions.mint,
67
- MStableFunctions.redeem,
68
- ].indexOf(opType);
69
-
70
- if (type === undefined) {
71
- throw new Error(
72
- `mStable: Invalid OpType ${opType}, Should be one of ['mint', 'swap', 'redeem']`,
73
- );
74
- }
75
-
76
- const payload = this.abiCoder.encodeParameter(
77
- {
78
- ParentStruct: {
79
- opType: 'uint',
80
- },
81
- },
82
- {
83
- opType: type,
84
- },
85
- );
86
-
87
- return {
88
- targetExchange: data.exchange,
89
- payload,
90
- networkFee: '0',
91
- };
92
- }
93
-
94
- async getSimpleParam(
95
- srcToken: string,
96
- destToken: string,
97
- srcAmount: string,
98
- destAmount: string,
99
- data: MStableData,
100
- side: SwapSide,
101
- ): Promise<SimpleExchangeParam> {
102
- const { opType, isAssetContract } = data;
103
-
104
- const [swapFunction, swapFunctionsParams] = ((): [
105
- MStableFunctions,
106
- MStableParam,
107
- ] => {
108
- switch (opType) {
109
- case MStableFunctions.mint:
110
- return [
111
- opType,
112
- [srcToken, srcAmount, destAmount, this.augustusAddress],
113
- ];
114
- case MStableFunctions.swap:
115
- return [
116
- opType,
117
- [srcToken, destToken, srcAmount, destAmount, this.augustusAddress],
118
- ];
119
- case MStableFunctions.redeem:
120
- return [
121
- opType,
122
- [destToken, srcAmount, destAmount, this.augustusAddress],
123
- ];
124
- default:
125
- throw new Error(
126
- `mStable's OpType ${opType} not supported, failed to build`,
127
- );
128
- }
129
- })();
130
-
131
- // mStableAsset & mStablePool both have the same interface hence we can
132
- // simply use mStableAsset contract
133
- const swapData = this.mStableAsset.encodeFunctionData(
134
- swapFunction,
135
- swapFunctionsParams,
136
- );
137
-
138
- return this.buildSimpleParamWithoutWETHConversion(
139
- srcToken,
140
- srcAmount,
141
- destToken,
142
- destAmount,
143
- swapData,
144
- data.exchange,
145
- );
146
- }
147
- }