@paraswap/dex-lib 4.1.7-mwrappedm.1 → 4.1.7-mwrappedm.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/dex/index.js +4 -2
- package/build/dex/index.js.map +1 -1
- package/build/dex/usual/m-wrapped-m.d.ts +17 -0
- package/build/dex/usual/m-wrapped-m.js +60 -0
- package/build/dex/usual/m-wrapped-m.js.map +1 -0
- package/build/dex/usual/usual.js +0 -4
- package/build/dex/usual/usual.js.map +1 -1
- package/build/dex/usual/wrapped-m-m.d.ts +17 -0
- package/build/dex/usual/wrapped-m-m.js +60 -0
- package/build/dex/usual/wrapped-m-m.js.map +1 -0
- package/package.json +1 -1
- package/src/dex/index.ts +4 -2
- package/src/dex/usual/m-wrapped-m.ts +76 -0
- package/src/dex/usual/usual-e2e.test.ts +47 -0
- package/src/dex/usual/usual-integration.test.ts +196 -0
- package/src/dex/usual/usual.ts +0 -4
- package/src/dex/usual/wrapped-m-m.ts +76 -0
- package/src/dex/m-token/config.ts +0 -18
- package/src/dex/m-token/m-token-e2e.test.ts +0 -93
- package/src/dex/m-token/m-token-integration.test.ts +0 -199
- package/src/dex/m-token/m-token.ts +0 -167
- package/src/dex/m-token/m-wrapped-m.ts +0 -68
- package/src/dex/m-token/types.ts +0 -10
package/build/dex/index.js
CHANGED
|
@@ -103,8 +103,9 @@ const stader_1 = require("./stader/stader");
|
|
|
103
103
|
const usual_bond_1 = require("./usual/usual-bond");
|
|
104
104
|
const usual_m_wrapped_m_1 = require("./usual/usual-m-wrapped-m");
|
|
105
105
|
const usual_m_usd0_1 = require("./usual/usual-m-usd0");
|
|
106
|
+
const m_wrapped_m_1 = require("./usual/m-wrapped-m");
|
|
107
|
+
const wrapped_m_m_1 = require("./usual/wrapped-m-m");
|
|
106
108
|
const usual_pp_1 = require("./usual-pp/usual-pp");
|
|
107
|
-
const m_wrapped_m_1 = require("./m-token/m-wrapped-m");
|
|
108
109
|
const LegacyDexes = [
|
|
109
110
|
curve_v2_1.CurveV2,
|
|
110
111
|
stable_pool_1.StablePool,
|
|
@@ -197,9 +198,10 @@ const Dexes = [
|
|
|
197
198
|
cables_1.Cables,
|
|
198
199
|
fluid_dex_1.FluidDex,
|
|
199
200
|
usual_m_wrapped_m_1.UsualMWrappedM,
|
|
201
|
+
m_wrapped_m_1.MWrappedM,
|
|
202
|
+
wrapped_m_m_1.WrappedMM,
|
|
200
203
|
usual_m_usd0_1.UsualMUsd0,
|
|
201
204
|
usual_pp_1.UsualPP,
|
|
202
|
-
m_wrapped_m_1.MWrappedM,
|
|
203
205
|
];
|
|
204
206
|
class DexAdapterService {
|
|
205
207
|
dexHelper;
|
package/build/dex/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dex/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAEvB,kDAA8C;AAE9C,qDAAiD;AACjD,2DAAuD;AACvD,sCAAmC;AACnC,0EAAsE;AACtE,wDAAoD;AACpD,2DAAuD;AACvD,uDAA0D;AAC1D,wDAAoD;AACpD,sDAAwD;AACxD,sDAAsD;AACtD,gDAA6C;AAC7C,4CAAyC;AACzC,4CAAyC;AACzC,4CAAyC;AACzC,kDAA+C;AAC/C,+CAA2C;AAC3C,+CAA2C;AAC3C,kDAA8C;AAC9C,+CAA2C;AAC3C,uCAAmC;AACnC,+CAA4C;AAC5C,yCAAsC;AAEtC,4CAAwC;AAExC,sCAAmC;AACnC,sDAAmD;AACnD,qDAAiD;AACjD,kDAA+C;AAC/C,mCAAgC;AAChC,qDAAgD;AAChD,yFAAoF;AACpF,iDAAkD;AAClD,+CAA4C;AAC5C,wDAAoD;AACpD,4DAAyD;AACzD,0DAAuD;AACvD,8DAA2D;AAC3D,kEAA+D;AAC/D,sEAAmE;AACnE,kEAA+D;AAC/D,wEAAqE;AACrE,qDAAkD;AAClD,0DAAuD;AACvD,kEAA+D;AAC/D,sEAAmE;AACnE,2DAAuD;AACvD,uDAA0D;AAC1D,kDAA8C;AAC9C,0EAAqE;AACrE,2DAAwD;AACxD,0EAAqE;AACrE,gFAA0E;AAC1E,4DAA4D;AAC5D,2DAAuD;AACvD,4CAAyC;AACzC,yCAAsC;AACtC,+CAA4C;AAC5C,kDAA+C;AAC/C,kDAA+C;AAC/C,iEAA6D;AAC7D,2DAAuD;AACvD,2DAAuD;AACvD,2DAAuD;AACvD,2DAAuD;AACvD,kDAA8C;AAC9C,uEAAiE;AACjE,uEAAiE;AACjE,oEAAgE;AAChE,+CAA4C;AAC5C,0EAAsE;AACtE,mFAA8E;AAC9E,2DAAuD;AACvD,0DAAsD;AACtD,+CAA4C;AAC5C,yCAAsC;AACtC,4CAAyC;AACzC,yCAAsC;AACtC,kEAA+D;AAC/D,uCAAoC;AACpC,yCAAsC;AACtC,uGAAmG;AACnG,iEAA4D;AAC5D,0EAAoE;AACpE,yCAAsC;AACtC,qDAAiD;AACjD,gFAA4E;AAC5E,0EAAqE;AACrE,kDAA8C;AAC9C,kDAA8C;AAC9C,4CAAyC;AACzC,2DAAuD;AACvD,uDAA0D;AAC1D,iEAA6D;AAC7D,4CAAyC;AACzC,4CAAyC;AACzC,mDAA+C;AAC/C,iEAA2D;AAC3D,uDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dex/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Address, NumberAsString, DexExchangeParam } from '../../types';
|
|
2
|
+
import { SwapSide, Network } from '../../constants';
|
|
3
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
4
|
+
import { Interface } from '@ethersproject/abi';
|
|
5
|
+
import { Usual } from './usual';
|
|
6
|
+
export declare class MWrappedM extends Usual {
|
|
7
|
+
readonly network: Network;
|
|
8
|
+
readonly dexKey: string;
|
|
9
|
+
readonly dexHelper: IDexHelper;
|
|
10
|
+
static dexKeysWithNetwork: {
|
|
11
|
+
key: string;
|
|
12
|
+
networks: Network[];
|
|
13
|
+
}[];
|
|
14
|
+
wrappedMInterface: Interface;
|
|
15
|
+
constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
|
|
16
|
+
getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: {}, side: SwapSide): Promise<DexExchangeParam>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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.MWrappedM = void 0;
|
|
7
|
+
const constants_1 = require("../../constants");
|
|
8
|
+
const abi_1 = require("@ethersproject/abi");
|
|
9
|
+
const usual_1 = require("./usual");
|
|
10
|
+
const utils_1 = require("../../utils");
|
|
11
|
+
const WrappedM_abi_json_1 = __importDefault(require("../../abi/m-token/WrappedM.abi.json"));
|
|
12
|
+
const Config = {
|
|
13
|
+
MWrappedM: {
|
|
14
|
+
[constants_1.Network.MAINNET]: {
|
|
15
|
+
fromToken: {
|
|
16
|
+
address: '0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b', // M
|
|
17
|
+
decimals: 6,
|
|
18
|
+
},
|
|
19
|
+
toToken: {
|
|
20
|
+
address: '0x437cc33344a0B27A429f795ff6B469C72698B291', // WrappedM
|
|
21
|
+
decimals: 6,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
class MWrappedM extends usual_1.Usual {
|
|
27
|
+
network;
|
|
28
|
+
dexKey;
|
|
29
|
+
dexHelper;
|
|
30
|
+
static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(Config);
|
|
31
|
+
wrappedMInterface;
|
|
32
|
+
constructor(network, dexKey, dexHelper) {
|
|
33
|
+
super(network, dexKey, dexHelper, Config[dexKey][network]);
|
|
34
|
+
this.network = network;
|
|
35
|
+
this.dexKey = dexKey;
|
|
36
|
+
this.dexHelper = dexHelper;
|
|
37
|
+
this.wrappedMInterface = new abi_1.Interface(WrappedM_abi_json_1.default);
|
|
38
|
+
}
|
|
39
|
+
async getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
|
|
40
|
+
if (this.isFromToken(srcToken) && this.isToToken(destToken)) {
|
|
41
|
+
const fn = srcToken.toLowerCase() === this.config.fromToken.address.toLowerCase()
|
|
42
|
+
? 'wrap(address, uint256)'
|
|
43
|
+
: 'unwrap(address, uint256)';
|
|
44
|
+
const exchangeData = this.wrappedMInterface.encodeFunctionData(fn, [
|
|
45
|
+
recipient,
|
|
46
|
+
srcAmount,
|
|
47
|
+
]);
|
|
48
|
+
return {
|
|
49
|
+
needWrapNative: false,
|
|
50
|
+
dexFuncHasRecipient: true,
|
|
51
|
+
exchangeData,
|
|
52
|
+
targetExchange: this.config.toToken.address,
|
|
53
|
+
returnAmountPos: undefined,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
throw new Error('LOGIC ERROR');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.MWrappedM = MWrappedM;
|
|
60
|
+
//# sourceMappingURL=m-wrapped-m.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"m-wrapped-m.js","sourceRoot":"","sources":["../../../src/dex/usual/m-wrapped-m.ts"],"names":[],"mappings":";;;;;;AAMA,+CAAoD;AAGpD,4CAA6D;AAC7D,mCAAgC;AAChC,uCAAoD;AACpD,4FAAgE;AAEhE,MAAM,MAAM,GAA4B;IACtC,SAAS,EAAE;QACT,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,SAAS,EAAE;gBACT,OAAO,EAAE,4CAA4C,EAAE,IAAI;gBAC3D,QAAQ,EAAE,CAAC;aACZ;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,4CAA4C,EAAE,WAAW;gBAClE,QAAQ,EAAE,CAAC;aACZ;SACF;KACF;CACF,CAAC;AAEF,MAAa,SAAU,SAAQ,aAAK;IAOvB;IACA;IACA;IARJ,MAAM,CAAC,kBAAkB,GAC9B,IAAA,6BAAqB,EAAC,MAAM,CAAC,CAAC;IAEhC,iBAAiB,CAAY;IAE7B,YACW,OAAgB,EAChB,MAAc,EACd,SAAqB;QAE9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAJlD,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAY;QAG9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAS,CAAC,2BAA+B,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAQ,EACR,IAAc;QAEd,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,EAAE,GACN,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE;gBACpE,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,0BAA0B,CAAC;YAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,EAAE;gBACjE,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;YAEH,OAAO;gBACL,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,IAAI;gBACzB,YAAY;gBACZ,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;gBAC3C,eAAe,EAAE,SAAS;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;;AA7CH,8BA8CC"}
|
package/build/dex/usual/usual.js
CHANGED
|
@@ -34,7 +34,6 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.Usual = void 0;
|
|
37
|
-
const constants_1 = require("../../constants");
|
|
38
37
|
const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
|
|
39
38
|
const simple_exchange_1 = require("../simple-exchange");
|
|
40
39
|
const bigint_constants_1 = require("../../bigint-constants");
|
|
@@ -87,9 +86,6 @@ class Usual extends simple_exchange_1.SimpleExchange {
|
|
|
87
86
|
return [];
|
|
88
87
|
}
|
|
89
88
|
async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
|
|
90
|
-
if (side === constants_1.SwapSide.BUY) {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
89
|
const isValidSwap = this.isValidTokens(srcToken.address, destToken.address);
|
|
94
90
|
if (!isValidSwap) {
|
|
95
91
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usual.js","sourceRoot":"","sources":["../../../src/dex/usual/usual.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"usual.js","sourceRoot":"","sources":["../../../src/dex/usual/usual.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Address, NumberAsString, DexExchangeParam } from '../../types';
|
|
2
|
+
import { SwapSide, Network } from '../../constants';
|
|
3
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
4
|
+
import { Interface } from '@ethersproject/abi';
|
|
5
|
+
import { Usual } from './usual';
|
|
6
|
+
export declare class WrappedMM extends Usual {
|
|
7
|
+
readonly network: Network;
|
|
8
|
+
readonly dexKey: string;
|
|
9
|
+
readonly dexHelper: IDexHelper;
|
|
10
|
+
static dexKeysWithNetwork: {
|
|
11
|
+
key: string;
|
|
12
|
+
networks: Network[];
|
|
13
|
+
}[];
|
|
14
|
+
wrappedMInterface: Interface;
|
|
15
|
+
constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
|
|
16
|
+
getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: {}, side: SwapSide): Promise<DexExchangeParam>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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.WrappedMM = void 0;
|
|
7
|
+
const constants_1 = require("../../constants");
|
|
8
|
+
const abi_1 = require("@ethersproject/abi");
|
|
9
|
+
const usual_1 = require("./usual");
|
|
10
|
+
const utils_1 = require("../../utils");
|
|
11
|
+
const WrappedM_abi_json_1 = __importDefault(require("../../abi/m-token/WrappedM.abi.json"));
|
|
12
|
+
const Config = {
|
|
13
|
+
WrappedMM: {
|
|
14
|
+
[constants_1.Network.MAINNET]: {
|
|
15
|
+
fromToken: {
|
|
16
|
+
address: '0x437cc33344a0B27A429f795ff6B469C72698B291', // WrappedM
|
|
17
|
+
decimals: 6,
|
|
18
|
+
},
|
|
19
|
+
toToken: {
|
|
20
|
+
address: '0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b', // M
|
|
21
|
+
decimals: 6,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
class WrappedMM extends usual_1.Usual {
|
|
27
|
+
network;
|
|
28
|
+
dexKey;
|
|
29
|
+
dexHelper;
|
|
30
|
+
static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(Config);
|
|
31
|
+
wrappedMInterface;
|
|
32
|
+
constructor(network, dexKey, dexHelper) {
|
|
33
|
+
super(network, dexKey, dexHelper, Config[dexKey][network]);
|
|
34
|
+
this.network = network;
|
|
35
|
+
this.dexKey = dexKey;
|
|
36
|
+
this.dexHelper = dexHelper;
|
|
37
|
+
this.wrappedMInterface = new abi_1.Interface(WrappedM_abi_json_1.default);
|
|
38
|
+
}
|
|
39
|
+
async getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
|
|
40
|
+
if (this.isFromToken(srcToken) && this.isToToken(destToken)) {
|
|
41
|
+
const fn = srcToken.toLowerCase() === this.config.toToken.address.toLowerCase()
|
|
42
|
+
? 'wrap(address, uint256)'
|
|
43
|
+
: 'unwrap(address, uint256)';
|
|
44
|
+
const exchangeData = this.wrappedMInterface.encodeFunctionData(fn, [
|
|
45
|
+
recipient,
|
|
46
|
+
srcAmount,
|
|
47
|
+
]);
|
|
48
|
+
return {
|
|
49
|
+
needWrapNative: false,
|
|
50
|
+
dexFuncHasRecipient: true,
|
|
51
|
+
exchangeData,
|
|
52
|
+
targetExchange: this.config.fromToken.address,
|
|
53
|
+
returnAmountPos: undefined,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
throw new Error('LOGIC ERROR');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.WrappedMM = WrappedMM;
|
|
60
|
+
//# sourceMappingURL=wrapped-m-m.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapped-m-m.js","sourceRoot":"","sources":["../../../src/dex/usual/wrapped-m-m.ts"],"names":[],"mappings":";;;;;;AAMA,+CAAoD;AAGpD,4CAA6D;AAC7D,mCAAgC;AAChC,uCAAoD;AACpD,4FAAgE;AAEhE,MAAM,MAAM,GAA4B;IACtC,SAAS,EAAE;QACT,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,SAAS,EAAE;gBACT,OAAO,EAAE,4CAA4C,EAAE,WAAW;gBAClE,QAAQ,EAAE,CAAC;aACZ;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,4CAA4C,EAAE,IAAI;gBAC3D,QAAQ,EAAE,CAAC;aACZ;SACF;KACF;CACF,CAAC;AAEF,MAAa,SAAU,SAAQ,aAAK;IAOvB;IACA;IACA;IARJ,MAAM,CAAC,kBAAkB,GAC9B,IAAA,6BAAqB,EAAC,MAAM,CAAC,CAAC;IAEhC,iBAAiB,CAAY;IAE7B,YACW,OAAgB,EAChB,MAAc,EACd,SAAqB;QAE9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAJlD,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAY;QAG9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAS,CAAC,2BAA+B,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAQ,EACR,IAAc;QAEd,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,EAAE,GACN,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;gBAClE,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,0BAA0B,CAAC;YAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,EAAE;gBACjE,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;YAEH,OAAO;gBACL,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,IAAI;gBACzB,YAAY;gBACZ,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO;gBAC7C,eAAe,EAAE,SAAS;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;;AA7CH,8BA8CC"}
|
package/package.json
CHANGED
package/src/dex/index.ts
CHANGED
|
@@ -101,8 +101,9 @@ import { Stader } from './stader/stader';
|
|
|
101
101
|
import { UsualBond } from './usual/usual-bond';
|
|
102
102
|
import { UsualMWrappedM } from './usual/usual-m-wrapped-m';
|
|
103
103
|
import { UsualMUsd0 } from './usual/usual-m-usd0';
|
|
104
|
+
import { MWrappedM } from './usual/m-wrapped-m';
|
|
105
|
+
import { WrappedMM } from './usual/wrapped-m-m';
|
|
104
106
|
import { UsualPP } from './usual-pp/usual-pp';
|
|
105
|
-
import { MWrappedM } from './m-token/m-wrapped-m';
|
|
106
107
|
|
|
107
108
|
const LegacyDexes = [
|
|
108
109
|
CurveV2,
|
|
@@ -197,9 +198,10 @@ const Dexes = [
|
|
|
197
198
|
Cables,
|
|
198
199
|
FluidDex,
|
|
199
200
|
UsualMWrappedM,
|
|
201
|
+
MWrappedM,
|
|
202
|
+
WrappedMM,
|
|
200
203
|
UsualMUsd0,
|
|
201
204
|
UsualPP,
|
|
202
|
-
MWrappedM,
|
|
203
205
|
];
|
|
204
206
|
|
|
205
207
|
export type LegacyDexConstructor = new (dexHelper: IDexHelper) => IDexTxBuilder<
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Address,
|
|
3
|
+
NumberAsString,
|
|
4
|
+
DexExchangeParam,
|
|
5
|
+
DexConfigMap,
|
|
6
|
+
} from '../../types';
|
|
7
|
+
import { SwapSide, Network } from '../../constants';
|
|
8
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
9
|
+
import { DexParams } from './types';
|
|
10
|
+
import { Interface, JsonFragment } from '@ethersproject/abi';
|
|
11
|
+
import { Usual } from './usual';
|
|
12
|
+
import { getDexKeysWithNetwork } from '../../utils';
|
|
13
|
+
import WRAPPED_M_ABI from '../../abi/m-token/WrappedM.abi.json';
|
|
14
|
+
|
|
15
|
+
const Config: DexConfigMap<DexParams> = {
|
|
16
|
+
MWrappedM: {
|
|
17
|
+
[Network.MAINNET]: {
|
|
18
|
+
fromToken: {
|
|
19
|
+
address: '0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b', // M
|
|
20
|
+
decimals: 6,
|
|
21
|
+
},
|
|
22
|
+
toToken: {
|
|
23
|
+
address: '0x437cc33344a0B27A429f795ff6B469C72698B291', // WrappedM
|
|
24
|
+
decimals: 6,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export class MWrappedM extends Usual {
|
|
31
|
+
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
32
|
+
getDexKeysWithNetwork(Config);
|
|
33
|
+
|
|
34
|
+
wrappedMInterface: Interface;
|
|
35
|
+
|
|
36
|
+
constructor(
|
|
37
|
+
readonly network: Network,
|
|
38
|
+
readonly dexKey: string,
|
|
39
|
+
readonly dexHelper: IDexHelper,
|
|
40
|
+
) {
|
|
41
|
+
super(network, dexKey, dexHelper, Config[dexKey][network]);
|
|
42
|
+
this.wrappedMInterface = new Interface(WRAPPED_M_ABI as JsonFragment[]);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async getDexParam(
|
|
46
|
+
srcToken: Address,
|
|
47
|
+
destToken: Address,
|
|
48
|
+
srcAmount: NumberAsString,
|
|
49
|
+
destAmount: NumberAsString,
|
|
50
|
+
recipient: Address,
|
|
51
|
+
data: {},
|
|
52
|
+
side: SwapSide,
|
|
53
|
+
): Promise<DexExchangeParam> {
|
|
54
|
+
if (this.isFromToken(srcToken) && this.isToToken(destToken)) {
|
|
55
|
+
const fn =
|
|
56
|
+
srcToken.toLowerCase() === this.config.fromToken.address.toLowerCase()
|
|
57
|
+
? 'wrap(address, uint256)'
|
|
58
|
+
: 'unwrap(address, uint256)';
|
|
59
|
+
|
|
60
|
+
const exchangeData = this.wrappedMInterface.encodeFunctionData(fn, [
|
|
61
|
+
recipient,
|
|
62
|
+
srcAmount,
|
|
63
|
+
]);
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
needWrapNative: false,
|
|
67
|
+
dexFuncHasRecipient: true,
|
|
68
|
+
exchangeData,
|
|
69
|
+
targetExchange: this.config.toToken.address,
|
|
70
|
+
returnAmountPos: undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
throw new Error('LOGIC ERROR');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -25,6 +25,7 @@ function testForNetwork(
|
|
|
25
25
|
|
|
26
26
|
const sideToContractMethods = new Map([
|
|
27
27
|
[SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
|
|
28
|
+
[SwapSide.BUY, [ContractMethod.swapExactAmountOut]],
|
|
28
29
|
]);
|
|
29
30
|
|
|
30
31
|
describe(`${network}`, () => {
|
|
@@ -75,6 +76,52 @@ describe('UsualBond E2E', () => {
|
|
|
75
76
|
});
|
|
76
77
|
});
|
|
77
78
|
|
|
79
|
+
describe('WrappedMM E2E', () => {
|
|
80
|
+
const dexKey = 'WrappedMM';
|
|
81
|
+
|
|
82
|
+
describe('Mainnet', () => {
|
|
83
|
+
const network = Network.MAINNET;
|
|
84
|
+
|
|
85
|
+
const tokenASymbol: string = 'WrappedM';
|
|
86
|
+
const tokenBSymbol: string = 'M';
|
|
87
|
+
|
|
88
|
+
const tokenAAmount: string = '1000000000';
|
|
89
|
+
const tokenBAmount: string = '1000000000';
|
|
90
|
+
|
|
91
|
+
testForNetwork(
|
|
92
|
+
network,
|
|
93
|
+
dexKey,
|
|
94
|
+
tokenASymbol,
|
|
95
|
+
tokenBSymbol,
|
|
96
|
+
tokenAAmount,
|
|
97
|
+
tokenBAmount,
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe('MWrappedM E2E', () => {
|
|
103
|
+
const dexKey = 'MWrappedM';
|
|
104
|
+
|
|
105
|
+
describe('Mainnet', () => {
|
|
106
|
+
const network = Network.MAINNET;
|
|
107
|
+
|
|
108
|
+
const tokenASymbol: string = 'M';
|
|
109
|
+
const tokenBSymbol: string = 'WrappedM';
|
|
110
|
+
|
|
111
|
+
const tokenAAmount: string = '1000000000';
|
|
112
|
+
const tokenBAmount: string = '1000000000';
|
|
113
|
+
|
|
114
|
+
testForNetwork(
|
|
115
|
+
network,
|
|
116
|
+
dexKey,
|
|
117
|
+
tokenASymbol,
|
|
118
|
+
tokenBSymbol,
|
|
119
|
+
tokenAAmount,
|
|
120
|
+
tokenBAmount,
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
78
125
|
describe('UsualMWrappedM E2E', () => {
|
|
79
126
|
const dexKey = 'UsualMWrappedM';
|
|
80
127
|
|
|
@@ -16,6 +16,8 @@ import { UsualMWrappedM } from './usual-m-wrapped-m';
|
|
|
16
16
|
import { UsualMUsd0 } from './usual-m-usd0';
|
|
17
17
|
import { Usual } from './usual';
|
|
18
18
|
import { UsualBond } from './usual-bond';
|
|
19
|
+
import { WrappedMM } from './wrapped-m-m';
|
|
20
|
+
import { MWrappedM } from './m-wrapped-m';
|
|
19
21
|
|
|
20
22
|
async function testPricingOnNetwork(
|
|
21
23
|
usual: Usual,
|
|
@@ -317,3 +319,197 @@ describe('UsualM<>USD0', function () {
|
|
|
317
319
|
});
|
|
318
320
|
});
|
|
319
321
|
});
|
|
322
|
+
|
|
323
|
+
describe('WrappedM<>M', function () {
|
|
324
|
+
const dexKey = 'WrappedMM';
|
|
325
|
+
let blockNumber: number;
|
|
326
|
+
let wrappedMM: WrappedMM;
|
|
327
|
+
|
|
328
|
+
describe('Mainnet', () => {
|
|
329
|
+
const network = Network.MAINNET;
|
|
330
|
+
const dexHelper = new DummyDexHelper(network);
|
|
331
|
+
|
|
332
|
+
// Don't forget to update relevant tokens in constant-e2e.ts
|
|
333
|
+
|
|
334
|
+
const amountsForSell = [
|
|
335
|
+
0n,
|
|
336
|
+
1n * BI_POWS[18],
|
|
337
|
+
2n * BI_POWS[18],
|
|
338
|
+
3n * BI_POWS[18],
|
|
339
|
+
4n * BI_POWS[18],
|
|
340
|
+
5n * BI_POWS[18],
|
|
341
|
+
6n * BI_POWS[18],
|
|
342
|
+
7n * BI_POWS[18],
|
|
343
|
+
8n * BI_POWS[18],
|
|
344
|
+
9n * BI_POWS[18],
|
|
345
|
+
10n * BI_POWS[18],
|
|
346
|
+
];
|
|
347
|
+
|
|
348
|
+
beforeAll(async () => {
|
|
349
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
350
|
+
wrappedMM = new WrappedMM(network, dexKey, dexHelper);
|
|
351
|
+
if (wrappedMM.initializePricing) {
|
|
352
|
+
await wrappedMM.initializePricing(blockNumber);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
357
|
+
await testPricingOnNetwork(
|
|
358
|
+
wrappedMM,
|
|
359
|
+
network,
|
|
360
|
+
dexKey,
|
|
361
|
+
blockNumber,
|
|
362
|
+
'WrappedM',
|
|
363
|
+
'M',
|
|
364
|
+
SwapSide.SELL,
|
|
365
|
+
amountsForSell,
|
|
366
|
+
'',
|
|
367
|
+
);
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
371
|
+
await testPricingOnNetwork(
|
|
372
|
+
wrappedMM,
|
|
373
|
+
network,
|
|
374
|
+
dexKey,
|
|
375
|
+
blockNumber,
|
|
376
|
+
'WrappedM',
|
|
377
|
+
'M',
|
|
378
|
+
SwapSide.BUY,
|
|
379
|
+
amountsForSell,
|
|
380
|
+
'',
|
|
381
|
+
);
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
it('getTopPoolsForToken: WrappedM', async function () {
|
|
385
|
+
const tokenA = Tokens[network]['WrappedM'];
|
|
386
|
+
const dexHelper = new DummyDexHelper(network);
|
|
387
|
+
const wrappedMM = new WrappedMM(network, dexKey, dexHelper);
|
|
388
|
+
|
|
389
|
+
const poolLiquidity = await wrappedMM.getTopPoolsForToken(
|
|
390
|
+
tokenA.address,
|
|
391
|
+
10,
|
|
392
|
+
);
|
|
393
|
+
console.log(
|
|
394
|
+
`${tokenA.symbol} Top Pools:`,
|
|
395
|
+
JSON.stringify(poolLiquidity, null, 2),
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
it('getTopPoolsForToken: M', async function () {
|
|
402
|
+
const tokenA = Tokens[network]['M'];
|
|
403
|
+
const dexHelper = new DummyDexHelper(network);
|
|
404
|
+
const wrappedMM = new WrappedMM(network, dexKey, dexHelper);
|
|
405
|
+
|
|
406
|
+
const poolLiquidity = await wrappedMM.getTopPoolsForToken(
|
|
407
|
+
tokenA.address,
|
|
408
|
+
10,
|
|
409
|
+
);
|
|
410
|
+
console.log(
|
|
411
|
+
`${tokenA.symbol} Top Pools:`,
|
|
412
|
+
JSON.stringify(poolLiquidity, null, 2),
|
|
413
|
+
);
|
|
414
|
+
|
|
415
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
describe('M<>WrappedM', function () {
|
|
421
|
+
const dexKey = 'MWrappedM';
|
|
422
|
+
let blockNumber: number;
|
|
423
|
+
let mWrappedM: MWrappedM;
|
|
424
|
+
|
|
425
|
+
describe('Mainnet', () => {
|
|
426
|
+
const network = Network.MAINNET;
|
|
427
|
+
const dexHelper = new DummyDexHelper(network);
|
|
428
|
+
|
|
429
|
+
// Don't forget to update relevant tokens in constant-e2e.ts
|
|
430
|
+
|
|
431
|
+
const amountsForSell = [
|
|
432
|
+
0n,
|
|
433
|
+
1n * BI_POWS[18],
|
|
434
|
+
2n * BI_POWS[18],
|
|
435
|
+
3n * BI_POWS[18],
|
|
436
|
+
4n * BI_POWS[18],
|
|
437
|
+
5n * BI_POWS[18],
|
|
438
|
+
6n * BI_POWS[18],
|
|
439
|
+
7n * BI_POWS[18],
|
|
440
|
+
8n * BI_POWS[18],
|
|
441
|
+
9n * BI_POWS[18],
|
|
442
|
+
10n * BI_POWS[18],
|
|
443
|
+
];
|
|
444
|
+
|
|
445
|
+
beforeAll(async () => {
|
|
446
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
447
|
+
mWrappedM = new MWrappedM(network, dexKey, dexHelper);
|
|
448
|
+
if (mWrappedM.initializePricing) {
|
|
449
|
+
await mWrappedM.initializePricing(blockNumber);
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
454
|
+
await testPricingOnNetwork(
|
|
455
|
+
mWrappedM,
|
|
456
|
+
network,
|
|
457
|
+
dexKey,
|
|
458
|
+
blockNumber,
|
|
459
|
+
'M',
|
|
460
|
+
'WrappedM',
|
|
461
|
+
SwapSide.SELL,
|
|
462
|
+
amountsForSell,
|
|
463
|
+
'',
|
|
464
|
+
);
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
468
|
+
await testPricingOnNetwork(
|
|
469
|
+
mWrappedM,
|
|
470
|
+
network,
|
|
471
|
+
dexKey,
|
|
472
|
+
blockNumber,
|
|
473
|
+
'M',
|
|
474
|
+
'WrappedM',
|
|
475
|
+
SwapSide.BUY,
|
|
476
|
+
amountsForSell,
|
|
477
|
+
'',
|
|
478
|
+
);
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
it('getTopPoolsForToken: M', async function () {
|
|
482
|
+
const tokenA = Tokens[network]['M'];
|
|
483
|
+
const dexHelper = new DummyDexHelper(network);
|
|
484
|
+
const mWrappedM = new MWrappedM(network, dexKey, dexHelper);
|
|
485
|
+
|
|
486
|
+
const poolLiquidity = await mWrappedM.getTopPoolsForToken(
|
|
487
|
+
tokenA.address,
|
|
488
|
+
10,
|
|
489
|
+
);
|
|
490
|
+
console.log(
|
|
491
|
+
`${tokenA.symbol} Top Pools:`,
|
|
492
|
+
JSON.stringify(poolLiquidity, null, 2),
|
|
493
|
+
);
|
|
494
|
+
|
|
495
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
it('getTopPoolsForToken: WrappedM', async function () {
|
|
499
|
+
const tokenA = Tokens[network]['WrappedM'];
|
|
500
|
+
const dexHelper = new DummyDexHelper(network);
|
|
501
|
+
const mWrappedM = new MWrappedM(network, dexKey, dexHelper);
|
|
502
|
+
|
|
503
|
+
const poolLiquidity = await mWrappedM.getTopPoolsForToken(
|
|
504
|
+
tokenA.address,
|
|
505
|
+
10,
|
|
506
|
+
);
|
|
507
|
+
console.log(
|
|
508
|
+
`${tokenA.symbol} Top Pools:`,
|
|
509
|
+
JSON.stringify(poolLiquidity, null, 2),
|
|
510
|
+
);
|
|
511
|
+
|
|
512
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
});
|
package/src/dex/usual/usual.ts
CHANGED
|
@@ -86,10 +86,6 @@ export class Usual extends SimpleExchange implements IDex<UsualBondData> {
|
|
|
86
86
|
blockNumber: number,
|
|
87
87
|
limitPools?: string[],
|
|
88
88
|
): Promise<null | ExchangePrices<UsualBondData>> {
|
|
89
|
-
if (side === SwapSide.BUY) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
89
|
const isValidSwap = this.isValidTokens(srcToken.address, destToken.address);
|
|
94
90
|
|
|
95
91
|
if (!isValidSwap) {
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Address,
|
|
3
|
+
NumberAsString,
|
|
4
|
+
DexExchangeParam,
|
|
5
|
+
DexConfigMap,
|
|
6
|
+
} from '../../types';
|
|
7
|
+
import { SwapSide, Network } from '../../constants';
|
|
8
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
9
|
+
import { DexParams } from './types';
|
|
10
|
+
import { Interface, JsonFragment } from '@ethersproject/abi';
|
|
11
|
+
import { Usual } from './usual';
|
|
12
|
+
import { getDexKeysWithNetwork } from '../../utils';
|
|
13
|
+
import WRAPPED_M_ABI from '../../abi/m-token/WrappedM.abi.json';
|
|
14
|
+
|
|
15
|
+
const Config: DexConfigMap<DexParams> = {
|
|
16
|
+
WrappedMM: {
|
|
17
|
+
[Network.MAINNET]: {
|
|
18
|
+
fromToken: {
|
|
19
|
+
address: '0x437cc33344a0B27A429f795ff6B469C72698B291', // WrappedM
|
|
20
|
+
decimals: 6,
|
|
21
|
+
},
|
|
22
|
+
toToken: {
|
|
23
|
+
address: '0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b', // M
|
|
24
|
+
decimals: 6,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export class WrappedMM extends Usual {
|
|
31
|
+
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
32
|
+
getDexKeysWithNetwork(Config);
|
|
33
|
+
|
|
34
|
+
wrappedMInterface: Interface;
|
|
35
|
+
|
|
36
|
+
constructor(
|
|
37
|
+
readonly network: Network,
|
|
38
|
+
readonly dexKey: string,
|
|
39
|
+
readonly dexHelper: IDexHelper,
|
|
40
|
+
) {
|
|
41
|
+
super(network, dexKey, dexHelper, Config[dexKey][network]);
|
|
42
|
+
this.wrappedMInterface = new Interface(WRAPPED_M_ABI as JsonFragment[]);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async getDexParam(
|
|
46
|
+
srcToken: Address,
|
|
47
|
+
destToken: Address,
|
|
48
|
+
srcAmount: NumberAsString,
|
|
49
|
+
destAmount: NumberAsString,
|
|
50
|
+
recipient: Address,
|
|
51
|
+
data: {},
|
|
52
|
+
side: SwapSide,
|
|
53
|
+
): Promise<DexExchangeParam> {
|
|
54
|
+
if (this.isFromToken(srcToken) && this.isToToken(destToken)) {
|
|
55
|
+
const fn =
|
|
56
|
+
srcToken.toLowerCase() === this.config.toToken.address.toLowerCase()
|
|
57
|
+
? 'wrap(address, uint256)'
|
|
58
|
+
: 'unwrap(address, uint256)';
|
|
59
|
+
|
|
60
|
+
const exchangeData = this.wrappedMInterface.encodeFunctionData(fn, [
|
|
61
|
+
recipient,
|
|
62
|
+
srcAmount,
|
|
63
|
+
]);
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
needWrapNative: false,
|
|
67
|
+
dexFuncHasRecipient: true,
|
|
68
|
+
exchangeData,
|
|
69
|
+
targetExchange: this.config.fromToken.address,
|
|
70
|
+
returnAmountPos: undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
throw new Error('LOGIC ERROR');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { DexConfigMap } from '../../types';
|
|
2
|
-
import { DexParams } from './types';
|
|
3
|
-
import { Network } from '../../constants';
|
|
4
|
-
|
|
5
|
-
export const Config: DexConfigMap<DexParams> = {
|
|
6
|
-
MWrappedM: {
|
|
7
|
-
[Network.MAINNET]: {
|
|
8
|
-
MToken: {
|
|
9
|
-
address: '0x866A2BF4E572CbcF37D5071A7a58503Bfb36be1b',
|
|
10
|
-
decimals: 6,
|
|
11
|
-
},
|
|
12
|
-
WrappedM: {
|
|
13
|
-
address: '0x437cc33344a0B27A429f795ff6B469C72698B291',
|
|
14
|
-
decimals: 6,
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import dotenv from 'dotenv';
|
|
3
|
-
dotenv.config();
|
|
4
|
-
|
|
5
|
-
import { testE2E } from '../../../tests/utils-e2e';
|
|
6
|
-
import { Tokens, Holders } from '../../../tests/constants-e2e';
|
|
7
|
-
import { Network, ContractMethod, SwapSide } from '../../constants';
|
|
8
|
-
import { StaticJsonRpcProvider } from '@ethersproject/providers';
|
|
9
|
-
import { generateConfig } from '../../config';
|
|
10
|
-
|
|
11
|
-
function testForNetwork(
|
|
12
|
-
network: Network,
|
|
13
|
-
dexKey: string,
|
|
14
|
-
tokenASymbol: string,
|
|
15
|
-
tokenBSymbol: string,
|
|
16
|
-
tokenAAmount: string,
|
|
17
|
-
tokenBAmount: string,
|
|
18
|
-
) {
|
|
19
|
-
const provider = new StaticJsonRpcProvider(
|
|
20
|
-
generateConfig(network).privateHttpProvider,
|
|
21
|
-
network,
|
|
22
|
-
);
|
|
23
|
-
const tokens = Tokens[network];
|
|
24
|
-
const holders = Holders[network];
|
|
25
|
-
|
|
26
|
-
const sideToContractMethods = new Map([
|
|
27
|
-
[SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
|
|
28
|
-
[SwapSide.BUY, [ContractMethod.swapExactAmountOut]],
|
|
29
|
-
]);
|
|
30
|
-
|
|
31
|
-
describe(`${network}`, () => {
|
|
32
|
-
sideToContractMethods.forEach((contractMethods, side) =>
|
|
33
|
-
describe(`${side}`, () => {
|
|
34
|
-
const isSell = side === SwapSide.SELL;
|
|
35
|
-
|
|
36
|
-
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
37
|
-
describe(`${contractMethod}`, () => {
|
|
38
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
39
|
-
await testE2E(
|
|
40
|
-
tokens[tokenASymbol],
|
|
41
|
-
tokens[tokenBSymbol],
|
|
42
|
-
holders[tokenASymbol],
|
|
43
|
-
isSell ? tokenAAmount : tokenBAmount,
|
|
44
|
-
side,
|
|
45
|
-
dexKey,
|
|
46
|
-
contractMethod,
|
|
47
|
-
network,
|
|
48
|
-
provider,
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it(`${tokenBSymbol} -> ${tokenASymbol}`, async () => {
|
|
53
|
-
await testE2E(
|
|
54
|
-
tokens[tokenBSymbol],
|
|
55
|
-
tokens[tokenASymbol],
|
|
56
|
-
holders[tokenBSymbol],
|
|
57
|
-
isSell ? tokenBAmount : tokenAAmount,
|
|
58
|
-
side,
|
|
59
|
-
dexKey,
|
|
60
|
-
contractMethod,
|
|
61
|
-
network,
|
|
62
|
-
provider,
|
|
63
|
-
);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}),
|
|
68
|
-
);
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
describe('MWrappedM E2E', () => {
|
|
73
|
-
const dexKey = 'MWrappedM';
|
|
74
|
-
|
|
75
|
-
describe('Mainnet', () => {
|
|
76
|
-
const network = Network.MAINNET;
|
|
77
|
-
|
|
78
|
-
const tokenASymbol: string = 'M';
|
|
79
|
-
const tokenBSymbol: string = 'WrappedM';
|
|
80
|
-
|
|
81
|
-
const tokenAAmount: string = '1000000000';
|
|
82
|
-
const tokenBAmount: string = '1000000000';
|
|
83
|
-
|
|
84
|
-
testForNetwork(
|
|
85
|
-
network,
|
|
86
|
-
dexKey,
|
|
87
|
-
tokenASymbol,
|
|
88
|
-
tokenBSymbol,
|
|
89
|
-
tokenAAmount,
|
|
90
|
-
tokenBAmount,
|
|
91
|
-
);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import dotenv from 'dotenv';
|
|
3
|
-
dotenv.config();
|
|
4
|
-
|
|
5
|
-
import { DummyDexHelper } from '../../dex-helper/index';
|
|
6
|
-
import { Network, SwapSide } from '../../constants';
|
|
7
|
-
import { BI_POWS } from '../../bigint-constants';
|
|
8
|
-
import { MToken } from './m-token';
|
|
9
|
-
import { MWrappedM } from './m-wrapped-m';
|
|
10
|
-
import {
|
|
11
|
-
checkPoolPrices,
|
|
12
|
-
checkPoolsLiquidity,
|
|
13
|
-
checkConstantPoolPrices,
|
|
14
|
-
} from '../../../tests/utils';
|
|
15
|
-
import { Tokens } from '../../../tests/constants-e2e';
|
|
16
|
-
|
|
17
|
-
async function testPricingOnNetwork(
|
|
18
|
-
mWrappedM: MToken,
|
|
19
|
-
network: Network,
|
|
20
|
-
dexKey: string,
|
|
21
|
-
blockNumber: number,
|
|
22
|
-
srcTokenSymbol: string,
|
|
23
|
-
destTokenSymbol: string,
|
|
24
|
-
side: SwapSide,
|
|
25
|
-
amounts: bigint[],
|
|
26
|
-
funcNameToCheck: string,
|
|
27
|
-
) {
|
|
28
|
-
const networkTokens = Tokens[network];
|
|
29
|
-
|
|
30
|
-
const pools = await mWrappedM.getPoolIdentifiers(
|
|
31
|
-
networkTokens[srcTokenSymbol],
|
|
32
|
-
networkTokens[destTokenSymbol],
|
|
33
|
-
side,
|
|
34
|
-
blockNumber,
|
|
35
|
-
);
|
|
36
|
-
console.log(
|
|
37
|
-
`${srcTokenSymbol} <> ${destTokenSymbol} Pool Identifiers: `,
|
|
38
|
-
pools,
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
expect(pools.length).toBeGreaterThan(0);
|
|
42
|
-
|
|
43
|
-
const poolPrices = await mWrappedM.getPricesVolume(
|
|
44
|
-
networkTokens[srcTokenSymbol],
|
|
45
|
-
networkTokens[destTokenSymbol],
|
|
46
|
-
amounts,
|
|
47
|
-
side,
|
|
48
|
-
blockNumber,
|
|
49
|
-
pools,
|
|
50
|
-
);
|
|
51
|
-
console.log(
|
|
52
|
-
`${srcTokenSymbol} <> ${destTokenSymbol} Pool Prices: `,
|
|
53
|
-
poolPrices,
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
expect(poolPrices).not.toBeNull();
|
|
57
|
-
if (mWrappedM.hasConstantPriceLargeAmounts) {
|
|
58
|
-
checkConstantPoolPrices(poolPrices!, amounts, dexKey);
|
|
59
|
-
} else {
|
|
60
|
-
checkPoolPrices(poolPrices!, amounts, side, dexKey);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Check if onchain pricing equals to calculated ones
|
|
64
|
-
checkPoolPrices(poolPrices!, amounts, side, dexKey);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
describe('MWrappedM', function () {
|
|
68
|
-
const dexKey = 'MWrappedM';
|
|
69
|
-
let blockNumber: number;
|
|
70
|
-
let mWrappedM: MWrappedM;
|
|
71
|
-
|
|
72
|
-
describe('Mainnet', () => {
|
|
73
|
-
const network = Network.MAINNET;
|
|
74
|
-
const dexHelper = new DummyDexHelper(network);
|
|
75
|
-
|
|
76
|
-
const tokens = Tokens[network];
|
|
77
|
-
|
|
78
|
-
const srcTokenSymbol = 'M';
|
|
79
|
-
const destTokenSymbol = 'WrappedM';
|
|
80
|
-
|
|
81
|
-
// Don't forget to update relevant tokens in constant-e2e.ts
|
|
82
|
-
|
|
83
|
-
const amounts = [
|
|
84
|
-
0n,
|
|
85
|
-
1n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
86
|
-
2n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
87
|
-
3n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
88
|
-
4n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
89
|
-
5n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
90
|
-
6n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
91
|
-
7n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
92
|
-
8n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
93
|
-
9n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
94
|
-
10n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
95
|
-
];
|
|
96
|
-
|
|
97
|
-
beforeAll(async () => {
|
|
98
|
-
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
99
|
-
mWrappedM = new MWrappedM(network, dexKey, dexHelper);
|
|
100
|
-
if (mWrappedM.initializePricing) {
|
|
101
|
-
await mWrappedM.initializePricing();
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('getPoolIdentifiers and getPricesVolume SELL M -> WrappedM', async function () {
|
|
106
|
-
await testPricingOnNetwork(
|
|
107
|
-
mWrappedM,
|
|
108
|
-
network,
|
|
109
|
-
dexKey,
|
|
110
|
-
blockNumber,
|
|
111
|
-
srcTokenSymbol,
|
|
112
|
-
destTokenSymbol,
|
|
113
|
-
SwapSide.SELL,
|
|
114
|
-
amounts,
|
|
115
|
-
'',
|
|
116
|
-
);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('getPoolIdentifiers and getPricesVolume SELL WrappedM -> M', async function () {
|
|
120
|
-
await testPricingOnNetwork(
|
|
121
|
-
mWrappedM,
|
|
122
|
-
network,
|
|
123
|
-
dexKey,
|
|
124
|
-
blockNumber,
|
|
125
|
-
destTokenSymbol,
|
|
126
|
-
srcTokenSymbol,
|
|
127
|
-
SwapSide.SELL,
|
|
128
|
-
amounts,
|
|
129
|
-
'',
|
|
130
|
-
);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('getPoolIdentifiers and getPricesVolume BUY M -> WrappedM', async function () {
|
|
134
|
-
await testPricingOnNetwork(
|
|
135
|
-
mWrappedM,
|
|
136
|
-
network,
|
|
137
|
-
dexKey,
|
|
138
|
-
blockNumber,
|
|
139
|
-
srcTokenSymbol,
|
|
140
|
-
destTokenSymbol,
|
|
141
|
-
SwapSide.BUY,
|
|
142
|
-
amounts,
|
|
143
|
-
'',
|
|
144
|
-
);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it('getPoolIdentifiers and getPricesVolume BUY WrappedM -> M', async function () {
|
|
148
|
-
await testPricingOnNetwork(
|
|
149
|
-
mWrappedM,
|
|
150
|
-
network,
|
|
151
|
-
dexKey,
|
|
152
|
-
blockNumber,
|
|
153
|
-
destTokenSymbol,
|
|
154
|
-
srcTokenSymbol,
|
|
155
|
-
SwapSide.BUY,
|
|
156
|
-
amounts,
|
|
157
|
-
'',
|
|
158
|
-
);
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it('getTopPoolsForToken: M', async function () {
|
|
162
|
-
const symbol = srcTokenSymbol;
|
|
163
|
-
|
|
164
|
-
const poolLiquidity = await mWrappedM.getTopPoolsForToken(
|
|
165
|
-
tokens[symbol].address,
|
|
166
|
-
10,
|
|
167
|
-
);
|
|
168
|
-
console.log(
|
|
169
|
-
`${symbol} Top Pools:`,
|
|
170
|
-
JSON.stringify(poolLiquidity, null, 2),
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
checkPoolsLiquidity(
|
|
174
|
-
poolLiquidity,
|
|
175
|
-
Tokens[network][symbol].address,
|
|
176
|
-
dexKey,
|
|
177
|
-
);
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('getTopPoolsForToken: WrappedM', async function () {
|
|
181
|
-
const symbol = destTokenSymbol;
|
|
182
|
-
|
|
183
|
-
const poolLiquidity = await mWrappedM.getTopPoolsForToken(
|
|
184
|
-
tokens[symbol].address,
|
|
185
|
-
10,
|
|
186
|
-
);
|
|
187
|
-
console.log(
|
|
188
|
-
`${symbol} Top Pools:`,
|
|
189
|
-
JSON.stringify(poolLiquidity, null, 2),
|
|
190
|
-
);
|
|
191
|
-
|
|
192
|
-
checkPoolsLiquidity(
|
|
193
|
-
poolLiquidity,
|
|
194
|
-
Tokens[network][symbol].address,
|
|
195
|
-
dexKey,
|
|
196
|
-
);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
});
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { AsyncOrSync } from 'ts-essentials';
|
|
2
|
-
import type {
|
|
3
|
-
Token,
|
|
4
|
-
Address,
|
|
5
|
-
ExchangePrices,
|
|
6
|
-
PoolPrices,
|
|
7
|
-
AdapterExchangeParam,
|
|
8
|
-
Logger,
|
|
9
|
-
PoolLiquidity,
|
|
10
|
-
} from '../../types';
|
|
11
|
-
import { SwapSide, Network } from '../../constants';
|
|
12
|
-
import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
|
|
13
|
-
import { IDex } from '../idex';
|
|
14
|
-
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
15
|
-
import type { MTokenData, DexParams } from './types';
|
|
16
|
-
import { SimpleExchange } from '../simple-exchange';
|
|
17
|
-
import { BI_POWS } from '../../bigint-constants';
|
|
18
|
-
|
|
19
|
-
export class MToken extends SimpleExchange implements IDex<MTokenData> {
|
|
20
|
-
readonly hasConstantPriceLargeAmounts = true;
|
|
21
|
-
|
|
22
|
-
readonly needWrapNative = false;
|
|
23
|
-
|
|
24
|
-
readonly isFeeOnTransferSupported = false;
|
|
25
|
-
|
|
26
|
-
logger: Logger;
|
|
27
|
-
|
|
28
|
-
constructor(
|
|
29
|
-
readonly network: Network,
|
|
30
|
-
readonly dexKey: string,
|
|
31
|
-
readonly dexHelper: IDexHelper,
|
|
32
|
-
readonly config: DexParams,
|
|
33
|
-
) {
|
|
34
|
-
super(dexHelper, dexKey);
|
|
35
|
-
this.logger = dexHelper.getLogger(dexKey);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// No initialization needed for constant price
|
|
39
|
-
async initializePricing() {}
|
|
40
|
-
|
|
41
|
-
// Legacy: was only used for V5
|
|
42
|
-
// Returns the list of contract adapters (name and index)
|
|
43
|
-
// for a buy/sell. Return null if there are no adapters.
|
|
44
|
-
getAdapters() {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Returns list of pool identifiers that can be used
|
|
49
|
-
// for a given swap. poolIdentifiers must be unique
|
|
50
|
-
// across DEXes. It is recommended to use
|
|
51
|
-
// ${dexKey}_${poolAddress} as a poolIdentifier
|
|
52
|
-
async getPoolIdentifiers(
|
|
53
|
-
from: Token,
|
|
54
|
-
to: Token,
|
|
55
|
-
side: SwapSide,
|
|
56
|
-
blockNumber: number,
|
|
57
|
-
): Promise<string[]> {
|
|
58
|
-
if (!this.ensureOrigin({ from, to })) {
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return [`${this.dexKey}_${this.config.WrappedM.address}`];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Returns pool prices for amounts.
|
|
66
|
-
// If limitPools is defined only pools in limitPools
|
|
67
|
-
// should be used. If limitPools is undefined then
|
|
68
|
-
// any pools can be used.
|
|
69
|
-
async getPricesVolume(
|
|
70
|
-
from: Token,
|
|
71
|
-
to: Token,
|
|
72
|
-
amounts: bigint[],
|
|
73
|
-
side: SwapSide,
|
|
74
|
-
blockNumber: number,
|
|
75
|
-
limitPools?: string[],
|
|
76
|
-
): Promise<null | ExchangePrices<MTokenData>> {
|
|
77
|
-
if (!this.ensureOrigin({ from, to })) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// 1:1 swap
|
|
82
|
-
// Amounts need no adjustment
|
|
83
|
-
const unitOut = BI_POWS[to.decimals];
|
|
84
|
-
|
|
85
|
-
return [
|
|
86
|
-
{
|
|
87
|
-
unit: unitOut,
|
|
88
|
-
prices: amounts,
|
|
89
|
-
data: {},
|
|
90
|
-
poolAddresses: [this.config.WrappedM.address],
|
|
91
|
-
exchange: this.dexKey,
|
|
92
|
-
gasCost: 70000,
|
|
93
|
-
poolIdentifier: this.dexKey,
|
|
94
|
-
},
|
|
95
|
-
];
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Returns estimated gas cost of calldata for this DEX in multiSwap
|
|
99
|
-
getCalldataGasCost(poolPrices: PoolPrices<MTokenData>): number | number[] {
|
|
100
|
-
return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Encode params required by the exchange adapter
|
|
104
|
-
// V5: Used for multiSwap, buy & megaSwap
|
|
105
|
-
// V6: Not used, can be left blank
|
|
106
|
-
// Hint: abiCoder.encodeParameter() could be useful
|
|
107
|
-
getAdapterParam(
|
|
108
|
-
srcToken: string,
|
|
109
|
-
destToken: string,
|
|
110
|
-
srcAmount: string,
|
|
111
|
-
destAmount: string,
|
|
112
|
-
data: MTokenData,
|
|
113
|
-
side: SwapSide,
|
|
114
|
-
): AdapterExchangeParam {
|
|
115
|
-
const exchange = this.config.WrappedM.address;
|
|
116
|
-
const payload = '0x';
|
|
117
|
-
|
|
118
|
-
return {
|
|
119
|
-
targetExchange: exchange,
|
|
120
|
-
payload,
|
|
121
|
-
networkFee: '0',
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Returns list of top pools based on liquidity. Max
|
|
126
|
-
// limit number pools should be returned.
|
|
127
|
-
async getTopPoolsForToken(
|
|
128
|
-
tokenAddress: Address,
|
|
129
|
-
limit: number,
|
|
130
|
-
): Promise<PoolLiquidity[]> {
|
|
131
|
-
if (!this.isMOrWrappedM(tokenAddress)) {
|
|
132
|
-
return [];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const isM =
|
|
136
|
-
tokenAddress.toLowerCase() === this.config.MToken.address.toLowerCase();
|
|
137
|
-
|
|
138
|
-
return [
|
|
139
|
-
{
|
|
140
|
-
exchange: this.dexKey,
|
|
141
|
-
address: this.config.WrappedM.address,
|
|
142
|
-
connectorTokens: [isM ? this.config.WrappedM : this.config.MToken],
|
|
143
|
-
liquidityUSD: 1000000000, // Returning a big number to prefer this DEX
|
|
144
|
-
},
|
|
145
|
-
];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Checks if the token addresses is M or WrappedM
|
|
149
|
-
isMOrWrappedM(tokenAddress: Address): boolean {
|
|
150
|
-
return (
|
|
151
|
-
tokenAddress.toLowerCase() === this.config.MToken.address.toLowerCase() ||
|
|
152
|
-
tokenAddress.toLowerCase() === this.config.WrappedM.address.toLowerCase()
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Ensures that the token addresses are correct
|
|
157
|
-
ensureOrigin(args: Partial<{ from: Token; to: Token }>): boolean {
|
|
158
|
-
const areDifferentAddresses =
|
|
159
|
-
args?.from?.address?.toLowerCase() !== args?.to?.address?.toLowerCase();
|
|
160
|
-
|
|
161
|
-
return (
|
|
162
|
-
areDifferentAddresses &&
|
|
163
|
-
this.isMOrWrappedM(args?.from?.address || '') &&
|
|
164
|
-
this.isMOrWrappedM(args?.to?.address || '')
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Network, SwapSide } from '../../constants';
|
|
2
|
-
import { getDexKeysWithNetwork } from '../../utils';
|
|
3
|
-
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
4
|
-
import { MToken } from './m-token';
|
|
5
|
-
import type {
|
|
6
|
-
Address,
|
|
7
|
-
DexExchangeParam,
|
|
8
|
-
NumberAsString,
|
|
9
|
-
Token,
|
|
10
|
-
} from '../../types';
|
|
11
|
-
import { Interface } from '@ethersproject/abi';
|
|
12
|
-
import WRAPPED_M_ABI from '../../abi/m-token/WrappedM.abi.json';
|
|
13
|
-
import { Config } from './config';
|
|
14
|
-
|
|
15
|
-
export class MWrappedM extends MToken {
|
|
16
|
-
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
17
|
-
getDexKeysWithNetwork(Config);
|
|
18
|
-
|
|
19
|
-
wrappedMInterface: Interface;
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
readonly network: Network,
|
|
23
|
-
readonly dexKey: string,
|
|
24
|
-
readonly dexHelper: IDexHelper,
|
|
25
|
-
) {
|
|
26
|
-
const config = Config[dexKey][network];
|
|
27
|
-
super(network, dexKey, dexHelper, config);
|
|
28
|
-
|
|
29
|
-
this.wrappedMInterface = new Interface(WRAPPED_M_ABI);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async getDexParam(
|
|
33
|
-
from: Address,
|
|
34
|
-
to: Address,
|
|
35
|
-
srcAmount: NumberAsString,
|
|
36
|
-
destAmount: NumberAsString,
|
|
37
|
-
recipient: Address,
|
|
38
|
-
data: {},
|
|
39
|
-
side: SwapSide,
|
|
40
|
-
): Promise<DexExchangeParam> {
|
|
41
|
-
if (
|
|
42
|
-
!this.ensureOrigin({
|
|
43
|
-
from: { address: from } as Token,
|
|
44
|
-
to: { address: to } as Token,
|
|
45
|
-
})
|
|
46
|
-
) {
|
|
47
|
-
throw new Error('Unexpected token addresses');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const fn =
|
|
51
|
-
from.toLowerCase() === this.config.MToken.address.toLowerCase()
|
|
52
|
-
? 'wrap(address, uint256)'
|
|
53
|
-
: 'unwrap(address, uint256)';
|
|
54
|
-
|
|
55
|
-
const exchangeData = this.wrappedMInterface.encodeFunctionData(fn, [
|
|
56
|
-
recipient,
|
|
57
|
-
srcAmount,
|
|
58
|
-
]);
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
needWrapNative: false,
|
|
62
|
-
dexFuncHasRecipient: true,
|
|
63
|
-
exchangeData,
|
|
64
|
-
targetExchange: this.config.WrappedM.address,
|
|
65
|
-
returnAmountPos: undefined,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
}
|
package/src/dex/m-token/types.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Address } from '../../types';
|
|
2
|
-
|
|
3
|
-
// Data that returned by the API that can be used for
|
|
4
|
-
// tx building.
|
|
5
|
-
export type MTokenData = {};
|
|
6
|
-
|
|
7
|
-
export type DexParams = {
|
|
8
|
-
MToken: { address: Address; decimals: number };
|
|
9
|
-
WrappedM: { address: Address; decimals: number };
|
|
10
|
-
};
|