@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.
- package/build/abi/BProtocol.json +1155 -0
- package/build/abi/Jarvis.json +1172 -0
- package/build/abi/MStableAsset.json +1545 -0
- package/build/abi/OneInchLp.json +1304 -0
- package/build/abi/Onebit.json +736 -0
- package/build/abi/Shell.json +1294 -0
- package/build/abi/TraderJoeV2Router.json +50 -0
- package/build/abi/wUSDM.json +757 -0
- package/build/abi/zrx.v2.json +1967 -0
- package/build/abi/zrx.v3.json +3454 -0
- package/build/abi/zrx.v4.json +2193 -0
- package/build/dex/OneInchLp.d.ts +24 -0
- package/build/dex/OneInchLp.js +43 -0
- package/build/dex/OneInchLp.js.map +1 -0
- package/build/dex/bProtocol/bProtocol.d.ts +15 -0
- package/build/dex/bProtocol/bProtocol.js +56 -0
- package/build/dex/bProtocol/bProtocol.js.map +1 -0
- package/build/dex/bProtocol/types.d.ts +11 -0
- package/build/dex/bProtocol/types.js +8 -0
- package/build/dex/bProtocol/types.js.map +1 -0
- package/build/dex/idle-dao/idle-dao.d.ts +0 -1
- package/build/dex/idle-dao/idle-dao.js +11 -23
- package/build/dex/idle-dao/idle-dao.js.map +1 -1
- package/build/dex/infusion/infusion.d.ts +0 -1
- package/build/dex/infusion/infusion.js +9 -12
- package/build/dex/infusion/infusion.js.map +1 -1
- package/build/dex/jarvis.d.ts +56 -0
- package/build/dex/jarvis.js +163 -0
- package/build/dex/jarvis.js.map +1 -0
- package/build/dex/mStable.d.ts +44 -0
- package/build/dex/mStable.js +75 -0
- package/build/dex/mStable.js.map +1 -0
- package/build/dex/maker-psm/maker-psm.d.ts +41 -4
- package/build/dex/maker-psm/maker-psm.js +143 -40
- package/build/dex/maker-psm/maker-psm.js.map +1 -1
- package/build/dex/onebit/onebit.d.ts +16 -0
- package/build/dex/onebit/onebit.js +61 -0
- package/build/dex/onebit/onebit.js.map +1 -0
- package/build/dex/onebit/types.d.ts +14 -0
- package/build/dex/onebit/types.js +8 -0
- package/build/dex/onebit/types.js.map +1 -0
- package/build/dex/se-vlr/config.d.ts +3 -0
- package/build/dex/se-vlr/config.js +24 -0
- package/build/dex/se-vlr/config.js.map +1 -0
- package/build/dex/{maker-psm/maker-psm-event-pool.d.ts → se-vlr/se-vlr-pool.d.ts} +11 -15
- package/build/dex/se-vlr/se-vlr-pool.js +70 -0
- package/build/dex/se-vlr/se-vlr-pool.js.map +1 -0
- package/build/dex/se-vlr/se-vlr.d.ts +35 -0
- package/build/dex/se-vlr/se-vlr.js +131 -0
- package/build/dex/se-vlr/se-vlr.js.map +1 -0
- package/build/dex/se-vlr/types.d.ts +6 -0
- package/build/dex/se-vlr/types.js +3 -0
- package/build/dex/se-vlr/types.js.map +1 -0
- package/build/dex/shell.d.ts +25 -0
- package/build/dex/shell.js +41 -0
- package/build/dex/shell.js.map +1 -0
- package/build/dex/solidly/forks-override/aerodrome.d.ts +1 -1
- package/build/dex/solidly/forks-override/aerodrome.js +14 -18
- package/build/dex/solidly/forks-override/aerodrome.js.map +1 -1
- package/build/dex/trader-joe-v2.d.ts +40 -0
- package/build/dex/trader-joe-v2.js +74 -0
- package/build/dex/trader-joe-v2.js.map +1 -0
- package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +94 -0
- package/build/dex/uniswap-v3/uniswap-v3-new.js +923 -0
- package/build/dex/uniswap-v3/uniswap-v3-new.js.map +1 -0
- package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -6
- package/build/dex/uniswap-v4/contract-math/Position.js +0 -29
- package/build/dex/uniswap-v4/contract-math/Position.js.map +1 -1
- package/build/dex/usual-bond/config.d.ts +3 -0
- package/build/dex/usual-bond/config.js +13 -0
- package/build/dex/usual-bond/config.js.map +1 -0
- package/build/dex/usual-bond/types.d.ts +7 -0
- package/build/dex/usual-bond/types.js +3 -0
- package/build/dex/usual-bond/types.js.map +1 -0
- package/build/dex/usual-bond/usual-bond.d.ts +35 -0
- package/build/dex/usual-bond/usual-bond.js +176 -0
- package/build/dex/usual-bond/usual-bond.js.map +1 -0
- package/build/dex/wusdm/config.d.ts +3 -0
- package/build/dex/wusdm/config.js +43 -0
- package/build/dex/wusdm/config.js.map +1 -0
- package/build/dex/wusdm/constants.d.ts +2 -0
- package/build/dex/wusdm/constants.js +6 -0
- package/build/dex/wusdm/constants.js.map +1 -0
- package/build/dex/wusdm/types.d.ts +18 -0
- package/build/dex/wusdm/types.js +11 -0
- package/build/dex/wusdm/types.js.map +1 -0
- package/build/dex/wusdm/wusdm-pool.d.ts +21 -0
- package/build/dex/wusdm/wusdm-pool.js +74 -0
- package/build/dex/wusdm/wusdm-pool.js.map +1 -0
- package/build/dex/wusdm/wusdm.d.ts +46 -0
- package/build/dex/wusdm/wusdm.js +243 -0
- package/build/dex/wusdm/wusdm.js.map +1 -0
- package/build/dex/zerox/config.d.ts +2 -0
- package/build/dex/zerox/config.js +33 -0
- package/build/dex/zerox/config.js.map +1 -0
- package/build/dex/zerox/index.d.ts +22 -0
- package/build/dex/zerox/index.js +225 -0
- package/build/dex/zerox/index.js.map +1 -0
- package/build/dex/zerox/order.d.ts +88 -0
- package/build/dex/zerox/order.js +53 -0
- package/build/dex/zerox/order.js.map +1 -0
- package/build/dex/zerox/types.d.ts +73 -0
- package/build/dex/zerox/types.js +21 -0
- package/build/dex/zerox/types.js.map +1 -0
- package/package.json +1 -1
- package/build/dex/maker-psm/maker-psm-event-pool.js +0 -132
- package/build/dex/maker-psm/maker-psm-event-pool.js.map +0 -1
- package/build/executor/Executor02BytecodeBuilderMultiRoute.d.ts +0 -101
- package/build/executor/Executor02BytecodeBuilderMultiRoute.js +0 -877
- 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 {
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
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
|
-
|
|
363
|
-
|
|
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
|
|
475
|
+
const isDai = _tokenAddress === this.dai.address;
|
|
476
|
+
const validPoolConfigs = isDai
|
|
367
477
|
? this.poolConfigs
|
|
368
|
-
: this.eventPools[
|
|
369
|
-
? [this.eventPools[
|
|
478
|
+
: this.eventPools[_tokenAddress]
|
|
479
|
+
? [this.eventPools[_tokenAddress].poolConfig]
|
|
370
480
|
: [];
|
|
371
481
|
if (!validPoolConfigs.length)
|
|
372
482
|
return [];
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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;
|