@paraswap/dex-lib 2.50.7-sdai → 2.50.7-sdai.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 +2 -2
- package/build/dex/index.js.map +1 -1
- package/build/dex/sdai/config.js +1 -4
- package/build/dex/sdai/config.js.map +1 -1
- package/build/dex/sdai/scripts/validate-state.js +2 -2
- package/build/dex/spark/config.d.ts +11 -0
- package/build/dex/spark/config.js +21 -0
- package/build/dex/spark/config.js.map +1 -0
- package/build/dex/spark/constants.d.ts +2 -0
- package/build/dex/spark/constants.js +6 -0
- package/build/dex/spark/constants.js.map +1 -0
- package/build/dex/spark/scripts/validate-state.d.ts +1 -0
- package/build/dex/spark/scripts/validate-state.js +102 -0
- package/build/dex/spark/scripts/validate-state.js.map +1 -0
- package/build/dex/spark/spark-sdai-pool.d.ts +16 -0
- package/build/dex/spark/spark-sdai-pool.js +85 -0
- package/build/dex/spark/spark-sdai-pool.js.map +1 -0
- package/build/dex/spark/spark.d.ts +51 -0
- package/build/dex/spark/spark.js +172 -0
- package/build/dex/spark/spark.js.map +1 -0
- package/build/dex/spark/types.d.ts +21 -0
- package/build/dex/spark/types.js +11 -0
- package/build/dex/spark/types.js.map +1 -0
- package/build/dex/spark/utils.d.ts +4 -0
- package/build/dex/spark/utils.js +39 -0
- package/build/dex/spark/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/dex/index.ts +2 -2
- package/src/dex/{sdai → spark}/config.ts +3 -6
- package/src/dex/{sdai → spark}/scripts/validate-state.ts +8 -8
- package/src/dex/{sdai/sdai-e2e.test.ts → spark/spark-e2e.test.ts} +1 -1
- package/src/dex/{sdai/sdai-events.test.ts → spark/spark-events.test.ts} +6 -6
- package/src/dex/{sdai/sdai-integration.test.ts → spark/spark-integration.test.ts} +20 -17
- package/src/dex/{sdai/sdai-pool.ts → spark/spark-sdai-pool.ts} +7 -7
- package/src/dex/{sdai/sdai.ts → spark/spark.ts} +14 -11
- package/src/dex/{sdai → spark}/types.ts +4 -4
- package/src/dex/{sdai → spark}/utils.ts +2 -3
- /package/src/dex/{sdai → spark}/constants.ts +0 -0
package/build/dex/index.js
CHANGED
|
@@ -89,7 +89,7 @@ const wombat_1 = require("./wombat/wombat");
|
|
|
89
89
|
const swell_1 = require("./swell/swell");
|
|
90
90
|
const pharaohV1_1 = require("./solidly/forks-override/pharaohV1");
|
|
91
91
|
const etherfi_1 = require("./etherfi");
|
|
92
|
-
const
|
|
92
|
+
const spark_1 = require("./spark/spark");
|
|
93
93
|
const LegacyDexes = [
|
|
94
94
|
curve_v2_1.CurveV2,
|
|
95
95
|
stable_pool_1.StablePool,
|
|
@@ -171,7 +171,7 @@ const Dexes = [
|
|
|
171
171
|
wombat_1.Wombat,
|
|
172
172
|
swell_1.Swell,
|
|
173
173
|
pharaohV1_1.PharaohV1,
|
|
174
|
-
|
|
174
|
+
spark_1.Spark,
|
|
175
175
|
];
|
|
176
176
|
class DexAdapterService {
|
|
177
177
|
constructor(dexHelper, network, sellAdapters = {}, buyAdapters = {}) {
|
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,yCAAqC;AAErC,qCAAkC;AAClC,qDAAiD;AACjD,+CAA2C;AAC3C,sCAAmC;AACnC,0EAAsE;AACtE,mCAAgC;AAChC,wDAAoD;AACpD,2DAAuD;AACvD,uDAA0D;AAC1D,wDAAoD;AACpD,sDAAwD;AACxD,sDAAsD;AACtD,gDAA6C;AAC7C,4CAAyC;AACzC,4CAAyC;AACzC,qCAAkC;AAClC,2CAAwC;AACxC,uCAAoC;AACpC,mCAAgC;AAChC,qCAAkC;AAClC,yCAAsC;AACtC,+CAA2C;AAC3C,+CAA2C;AAC3C,+CAA2C;AAC3C,2CAAwC;AACxC,uCAAmC;AACnC,uCAAmC;AACnC,uCAAoC;AACpC,yCAAsC;AAEtC,4CAAwC;AAExC,iCAA8B;AAC9B,sDAAmD;AACnD,qDAAiD;AACjD,kDAA+C;AAC/C,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,wDAAqD;AACrD,gEAA6D;AAC7D,0DAAuD;AACvD,kEAA+D;AAC/D,sEAAmE;AACnE,2DAAuD;AACvD,uDAA0D;AAC1D,kDAA8C;AAC9C,0EAAqE;AACrE,2DAAwD;AACxD,0EAAqE;AACrE,2DAAuD;AACvD,kDAA8C;AAC9C,4CAAyC;AACzC,+CAA4C;AAC5C,kDAA+C;AAC/C,iEAA6D;AAC7D,2DAAuD;AACvD,2DAAuD;AACvD,2DAAuD;AACvD,mDAA8C;AAC9C,kDAA8C;AAC9C,6DAAyD;AACzD,uDAAiD;AACjD,oEAAgE;AAChE,+CAA4C;AAC5C,2DAAuD;AACvD,0DAAsD;AACtD,+CAA4C;AAC5C,+CAA4C;AAC5C,4CAAyC;AACzC,yCAAsC;AACtC,kEAA+D;AAC/D,uCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dex/index.ts"],"names":[],"mappings":"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"}
|
package/build/dex/sdai/config.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.Adapters = exports.SDaiConfig = void 0;
|
|
|
4
4
|
const constants_1 = require("../../constants");
|
|
5
5
|
const core_1 = require("@paraswap/core");
|
|
6
6
|
exports.SDaiConfig = {
|
|
7
|
-
|
|
7
|
+
sdai: {
|
|
8
8
|
[constants_1.Network.MAINNET]: {
|
|
9
9
|
sdaiAddress: '0x83F20F44975D03b1b09e64809B757c47f942BEeA',
|
|
10
10
|
daiAddress: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
|
@@ -14,9 +14,6 @@ exports.SDaiConfig = {
|
|
|
14
14
|
};
|
|
15
15
|
exports.Adapters = {
|
|
16
16
|
[constants_1.Network.MAINNET]: {
|
|
17
|
-
// TODO: uncomment this when SDAI integration got deployed
|
|
18
|
-
// [SwapSide.SELL]: [{ name: 'Adapter06', index: 2 }],
|
|
19
|
-
// [SwapSide.BUY]: [{ name: 'BuyAdapter02', index: 5 }],
|
|
20
17
|
[core_1.SwapSide.SELL]: [{ name: 'Adapter06', index: 1 }],
|
|
21
18
|
[core_1.SwapSide.BUY]: [{ name: 'BuyAdapter02', index: 4 }],
|
|
22
19
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/sdai/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAC1C,yCAA0C;AAE7B,QAAA,UAAU,GAA6B;IAClD,IAAI,EAAE;QACJ,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,WAAW,EAAE,4CAA4C;YACzD,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,4CAA4C;SACzD;KACF;CACF,CAAC;AAEW,QAAA,QAAQ,GAIjB;IACF,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;QACjB,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/sdai/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAC1C,yCAA0C;AAE7B,QAAA,UAAU,GAA6B;IAClD,IAAI,EAAE;QACJ,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,WAAW,EAAE,4CAA4C;YACzD,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,4CAA4C;SACzD;KACF;CACF,CAAC;AAEW,QAAA,QAAQ,GAIjB;IACF,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;QACjB,CAAC,eAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClD,CAAC,eAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;KACrD;CACF,CAAC"}
|
|
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
|
|
|
15
15
|
const abi_1 = require("@ethersproject/abi");
|
|
16
16
|
const pot_json_1 = __importDefault(require("../../../abi/maker-psm/pot.json"));
|
|
17
17
|
const network = constants_1.Network.MAINNET;
|
|
18
|
-
const dexKey = '
|
|
18
|
+
const dexKey = 'sdai';
|
|
19
19
|
const { potAddress } = config_1.SDaiConfig[dexKey][network];
|
|
20
20
|
const blockHeaders = {};
|
|
21
21
|
const dexHelper = new dex_helper_1.DummyDexHelper(network);
|
|
@@ -58,7 +58,7 @@ async function isPoolStateEqualToReal(state, blockNumber) {
|
|
|
58
58
|
}
|
|
59
59
|
async function checkPoolStateForBlockRange(startBlockNumber, endBlockNumber) {
|
|
60
60
|
const network = constants_1.Network.MAINNET;
|
|
61
|
-
const dexKey = '
|
|
61
|
+
const dexKey = 'sdai';
|
|
62
62
|
const dexHelper = new dex_helper_1.DummyDexHelper(network);
|
|
63
63
|
const sdai = new sdai_1.SDai(network, dexKey, dexHelper);
|
|
64
64
|
const pool = await sdai.eventPool;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SparkParams } from './types';
|
|
2
|
+
import { DexConfigMap } from '../../types';
|
|
3
|
+
export declare const SDaiConfig: DexConfigMap<SparkParams>;
|
|
4
|
+
export declare const Adapters: {
|
|
5
|
+
[chainId: number]: {
|
|
6
|
+
[side: string]: {
|
|
7
|
+
name: string;
|
|
8
|
+
index: number;
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Adapters = exports.SDaiConfig = void 0;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
const core_1 = require("@paraswap/core");
|
|
6
|
+
exports.SDaiConfig = {
|
|
7
|
+
Spark: {
|
|
8
|
+
[constants_1.Network.MAINNET]: {
|
|
9
|
+
sdaiAddress: '0x83F20F44975D03b1b09e64809B757c47f942BEeA',
|
|
10
|
+
daiAddress: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
|
11
|
+
potAddress: '0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
exports.Adapters = {
|
|
16
|
+
[constants_1.Network.MAINNET]: {
|
|
17
|
+
[core_1.SwapSide.SELL]: [{ name: 'Adapter06', index: 1 }],
|
|
18
|
+
[core_1.SwapSide.BUY]: [{ name: 'BuyAdapter02', index: 4 }],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/spark/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAC1C,yCAA0C;AAE7B,QAAA,UAAU,GAA8B;IACnD,KAAK,EAAE;QACL,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,WAAW,EAAE,4CAA4C;YACzD,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,4CAA4C;SACzD;KACF;CACF,CAAC;AAEW,QAAA,QAAQ,GAIjB;IACF,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;QACjB,CAAC,eAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClD,CAAC,eAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;KACrD;CACF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SDAI_REDEEM_GAS_COST = exports.SDAI_DEPOSIT_GAS_COST = void 0;
|
|
4
|
+
exports.SDAI_DEPOSIT_GAS_COST = 165000;
|
|
5
|
+
exports.SDAI_REDEEM_GAS_COST = 90000;
|
|
6
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/spark/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,MAAO,CAAC;AAChC,QAAA,oBAAoB,GAAG,KAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
/* eslint-disable no-console */
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
dotenv_1.default.config();
|
|
9
|
+
const constants_1 = require("../../../constants");
|
|
10
|
+
const dex_helper_1 = require("../../../dex-helper");
|
|
11
|
+
const ethers_1 = require("ethers");
|
|
12
|
+
const spark_1 = require("../spark");
|
|
13
|
+
const config_1 = require("../config");
|
|
14
|
+
const utils_1 = require("../utils");
|
|
15
|
+
const abi_1 = require("@ethersproject/abi");
|
|
16
|
+
const pot_json_1 = __importDefault(require("../../../abi/maker-psm/pot.json"));
|
|
17
|
+
const network = constants_1.Network.MAINNET;
|
|
18
|
+
const dexKey = 'Spark';
|
|
19
|
+
const { potAddress } = config_1.SDaiConfig[dexKey][network];
|
|
20
|
+
const blockHeaders = {};
|
|
21
|
+
const dexHelper = new dex_helper_1.DummyDexHelper(network);
|
|
22
|
+
const logger = dexHelper.getLogger(dexKey);
|
|
23
|
+
function preprocessField(value) {
|
|
24
|
+
if (typeof value === 'bigint' ||
|
|
25
|
+
typeof value === 'number' ||
|
|
26
|
+
ethers_1.ethers.BigNumber.isBigNumber(value)) {
|
|
27
|
+
return value.toString();
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function compareAndLogDifferences(obj1, obj2, keyNames, checkEachKey = false) {
|
|
32
|
+
let isValid = true;
|
|
33
|
+
let keys = keyNames;
|
|
34
|
+
if (checkEachKey) {
|
|
35
|
+
// find common keys
|
|
36
|
+
const keys1 = Object.keys(obj1);
|
|
37
|
+
const keys2 = new Set(Object.keys(obj2));
|
|
38
|
+
keys = keys1.filter(key => keys2.has(key));
|
|
39
|
+
}
|
|
40
|
+
for (let fieldName of keys) {
|
|
41
|
+
const value1 = preprocessField(obj1[fieldName]);
|
|
42
|
+
const value2 = preprocessField(obj2[fieldName]);
|
|
43
|
+
if (value1 !== value2) {
|
|
44
|
+
console.log(`${fieldName.toString()} mismatch: actual: ${value1} vs pool: ${value2}`);
|
|
45
|
+
isValid = false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return isValid;
|
|
49
|
+
}
|
|
50
|
+
async function isPoolStateEqualToReal(state, blockNumber) {
|
|
51
|
+
const expected = await (0, utils_1.getOnChainState)(dexHelper.multiContract, potAddress, new abi_1.Interface(pot_json_1.default), blockNumber);
|
|
52
|
+
const isValidState = compareAndLogDifferences(state, expected, [
|
|
53
|
+
'rho',
|
|
54
|
+
'dsr',
|
|
55
|
+
'dsr',
|
|
56
|
+
]);
|
|
57
|
+
return isValidState;
|
|
58
|
+
}
|
|
59
|
+
async function checkPoolStateForBlockRange(startBlockNumber, endBlockNumber) {
|
|
60
|
+
const network = constants_1.Network.MAINNET;
|
|
61
|
+
const dexKey = 'Spark';
|
|
62
|
+
const dexHelper = new dex_helper_1.DummyDexHelper(network);
|
|
63
|
+
const spark = new spark_1.Spark(network, dexKey, dexHelper);
|
|
64
|
+
const pool = await spark.eventPool;
|
|
65
|
+
const logsToDispatch = await dexHelper.provider.getLogs({
|
|
66
|
+
fromBlock: startBlockNumber,
|
|
67
|
+
toBlock: endBlockNumber,
|
|
68
|
+
address: potAddress,
|
|
69
|
+
});
|
|
70
|
+
console.log(logsToDispatch.length);
|
|
71
|
+
// group logs by block number
|
|
72
|
+
const logsByBlockNumber = {};
|
|
73
|
+
for (let log of logsToDispatch) {
|
|
74
|
+
if (!logsByBlockNumber[log.blockNumber]) {
|
|
75
|
+
logsByBlockNumber[log.blockNumber] = [];
|
|
76
|
+
}
|
|
77
|
+
logsByBlockNumber[log.blockNumber].push(log);
|
|
78
|
+
}
|
|
79
|
+
const sortedBlocks = Object.keys(logsByBlockNumber)
|
|
80
|
+
.map(Number)
|
|
81
|
+
.sort((a, b) => Number(a) - Number(b));
|
|
82
|
+
for (let blockNumber of sortedBlocks) {
|
|
83
|
+
if (!blockHeaders[blockNumber]) {
|
|
84
|
+
blockHeaders[blockNumber] = await dexHelper.web3Provider.eth.getBlock(blockNumber);
|
|
85
|
+
}
|
|
86
|
+
await pool?.update(logsByBlockNumber[blockNumber], {
|
|
87
|
+
[blockNumber]: blockHeaders[blockNumber],
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const state = pool?.getState(startBlockNumber);
|
|
91
|
+
return isPoolStateEqualToReal(state, endBlockNumber);
|
|
92
|
+
}
|
|
93
|
+
async function main() {
|
|
94
|
+
// use findBreakingBlock to find the block where the state is broken
|
|
95
|
+
// console.log(await findBreakingBlock(startBlockNumber, endBlockNumber));
|
|
96
|
+
// previously broken block 150502863
|
|
97
|
+
console.log(await checkPoolStateForBlockRange(19199247 - 10000, 19199247));
|
|
98
|
+
}
|
|
99
|
+
main()
|
|
100
|
+
.then(() => console.log('Done'))
|
|
101
|
+
.catch(e => console.error(e));
|
|
102
|
+
//# sourceMappingURL=validate-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-state.js","sourceRoot":"","sources":["../../../../src/dex/spark/scripts/validate-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
|
|
2
|
+
import { Interface } from '@ethersproject/abi';
|
|
3
|
+
import type { IDexHelper } from '../../dex-helper';
|
|
4
|
+
import type { AsyncOrSync, DeepReadonly } from 'ts-essentials';
|
|
5
|
+
import type { Address, BlockHeader, Log, Logger } from '../../types';
|
|
6
|
+
import type { SparkSDaiPoolState } from './types';
|
|
7
|
+
export declare class SparkSDaiEventPool extends StatefulEventSubscriber<SparkSDaiPoolState> {
|
|
8
|
+
protected dexHelper: IDexHelper;
|
|
9
|
+
private potAddress;
|
|
10
|
+
private potInterface;
|
|
11
|
+
constructor(parentName: string, dexHelper: IDexHelper, potAddress: Address, potInterface: Interface, logger: Logger);
|
|
12
|
+
protected processLog(state: DeepReadonly<SparkSDaiPoolState>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): AsyncOrSync<DeepReadonly<SparkSDaiPoolState> | null>;
|
|
13
|
+
generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<SparkSDaiPoolState>>;
|
|
14
|
+
convertToSDai(daiAmount: bigint, blockNumber: number): bigint;
|
|
15
|
+
convertToDai(sdaiAmount: bigint, blockNumber: number): bigint;
|
|
16
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SparkSDaiEventPool = void 0;
|
|
4
|
+
const bigint_constants_1 = require("../../bigint-constants");
|
|
5
|
+
const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
const RAY = bigint_constants_1.BI_POWS[27];
|
|
8
|
+
const ZERO = BigInt(0);
|
|
9
|
+
const TWO = BigInt(2);
|
|
10
|
+
const HALF = RAY / TWO;
|
|
11
|
+
// function file(bytes32,uint256)
|
|
12
|
+
const FILE_TOPICHASH = `0x29ae811400000000000000000000000000000000000000000000000000000000`;
|
|
13
|
+
// function drip()
|
|
14
|
+
const DRIP_TOPICHASH = `0x9f678cca00000000000000000000000000000000000000000000000000000000`;
|
|
15
|
+
// function cage()
|
|
16
|
+
const CAGE_TOPICHASH = `0x6924500900000000000000000000000000000000000000000000000000000000`;
|
|
17
|
+
// bytes32 repr of "dsr" string
|
|
18
|
+
const DSR_TOPIC = `0x6473720000000000000000000000000000000000000000000000000000000000`;
|
|
19
|
+
const rpow = (x, n) => {
|
|
20
|
+
if (!x && !n)
|
|
21
|
+
return RAY;
|
|
22
|
+
if (!x)
|
|
23
|
+
return ZERO;
|
|
24
|
+
let z = n % TWO > ZERO ? x : RAY;
|
|
25
|
+
for (n = n / TWO; n; n /= TWO) {
|
|
26
|
+
x = (x * x + HALF) / RAY;
|
|
27
|
+
if (n % TWO > ZERO) {
|
|
28
|
+
z = (z * x + HALF) / RAY;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return z;
|
|
32
|
+
};
|
|
33
|
+
const calcChi = (state, currentTimestamp) => {
|
|
34
|
+
currentTimestamp || (currentTimestamp = Math.floor(Date.now() / 1000));
|
|
35
|
+
if (!state.live)
|
|
36
|
+
return RAY;
|
|
37
|
+
const { dsr: dsr_, chi: chi_, rho: rho_ } = state;
|
|
38
|
+
const now = BigInt(currentTimestamp);
|
|
39
|
+
const rho = BigInt(rho_);
|
|
40
|
+
const dsr = BigInt(dsr_);
|
|
41
|
+
const chi = BigInt(chi_);
|
|
42
|
+
return now > rho ? (rpow(dsr, now - rho) * chi) / RAY : chi;
|
|
43
|
+
};
|
|
44
|
+
class SparkSDaiEventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
|
|
45
|
+
constructor(parentName, dexHelper, potAddress, potInterface, logger) {
|
|
46
|
+
super(parentName, 'Spark', dexHelper, logger);
|
|
47
|
+
this.dexHelper = dexHelper;
|
|
48
|
+
this.potAddress = potAddress;
|
|
49
|
+
this.potInterface = potInterface;
|
|
50
|
+
this.addressesSubscribed = [potAddress];
|
|
51
|
+
}
|
|
52
|
+
processLog(state, log, blockHeader) {
|
|
53
|
+
if (log.topics[0] === FILE_TOPICHASH && log.topics[2] === DSR_TOPIC) {
|
|
54
|
+
return {
|
|
55
|
+
...state,
|
|
56
|
+
dsr: BigInt(log.topics[3]).toString(),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (log.topics[0] === DRIP_TOPICHASH) {
|
|
60
|
+
return {
|
|
61
|
+
...state,
|
|
62
|
+
rho: blockHeader.timestamp.toString(),
|
|
63
|
+
chi: calcChi(state, +blockHeader.timestamp).toString(),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
async generateState(blockNumber = 'latest') {
|
|
69
|
+
return (0, utils_1.getOnChainState)(this.dexHelper.multiContract, this.potAddress, this.potInterface, blockNumber);
|
|
70
|
+
}
|
|
71
|
+
convertToSDai(daiAmount, blockNumber) {
|
|
72
|
+
const state = this.getState(blockNumber);
|
|
73
|
+
if (!state)
|
|
74
|
+
throw new Error(`SDai state at ${blockNumber} does not exists`);
|
|
75
|
+
return (daiAmount * RAY) / calcChi(state);
|
|
76
|
+
}
|
|
77
|
+
convertToDai(sdaiAmount, blockNumber) {
|
|
78
|
+
const state = this.getState(blockNumber);
|
|
79
|
+
if (!state)
|
|
80
|
+
throw new Error(`SDai state at ${blockNumber} does not exists`);
|
|
81
|
+
return (sdaiAmount * calcChi(state)) / RAY;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.SparkSDaiEventPool = SparkSDaiEventPool;
|
|
85
|
+
//# sourceMappingURL=spark-sdai-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spark-sdai-pool.js","sourceRoot":"","sources":["../../../src/dex/spark/spark-sdai-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { SimpleExchange } from '../simple-exchange';
|
|
2
|
+
import { IDex } from '../idex';
|
|
3
|
+
import { SparkParams, SparkData } from './types';
|
|
4
|
+
import { Network, SwapSide } from '../../constants';
|
|
5
|
+
import { AdapterExchangeParam, Address, ExchangePrices, Logger, PoolLiquidity, PoolPrices, SimpleExchangeParam, Token } from '../../types';
|
|
6
|
+
import { IDexHelper } from '../../dex-helper';
|
|
7
|
+
import { Interface } from 'ethers/lib/utils';
|
|
8
|
+
import { SparkSDaiEventPool } from './spark-sdai-pool';
|
|
9
|
+
export declare class Spark extends SimpleExchange implements IDex<SparkData, SparkParams> {
|
|
10
|
+
protected network: Network;
|
|
11
|
+
protected dexHelper: IDexHelper;
|
|
12
|
+
readonly daiAddress: string;
|
|
13
|
+
readonly sdaiAddress: string;
|
|
14
|
+
readonly potAddress: string;
|
|
15
|
+
protected adapters: {
|
|
16
|
+
[side: string]: {
|
|
17
|
+
name: string;
|
|
18
|
+
index: number;
|
|
19
|
+
}[];
|
|
20
|
+
};
|
|
21
|
+
protected sdaiInterface: Interface;
|
|
22
|
+
protected potInterface: Interface;
|
|
23
|
+
readonly hasConstantPriceLargeAmounts = true;
|
|
24
|
+
readonly isFeeOnTransferSupported = false;
|
|
25
|
+
static dexKeysWithNetwork: {
|
|
26
|
+
key: string;
|
|
27
|
+
networks: Network[];
|
|
28
|
+
}[];
|
|
29
|
+
readonly eventPool: SparkSDaiEventPool;
|
|
30
|
+
logger: Logger;
|
|
31
|
+
constructor(network: Network, dexKey: string, dexHelper: IDexHelper, daiAddress?: string, sdaiAddress?: string, potAddress?: string, adapters?: {
|
|
32
|
+
[side: string]: {
|
|
33
|
+
name: string;
|
|
34
|
+
index: number;
|
|
35
|
+
}[];
|
|
36
|
+
}, sdaiInterface?: Interface, potInterface?: Interface);
|
|
37
|
+
getAdapters(side: SwapSide): {
|
|
38
|
+
name: string;
|
|
39
|
+
index: number;
|
|
40
|
+
}[] | null;
|
|
41
|
+
isSDai(tokenAddress: Address): boolean;
|
|
42
|
+
isDai(tokenAddress: Address): boolean;
|
|
43
|
+
isAppropriatePair(srcToken: Token, destToken: Token): boolean;
|
|
44
|
+
initializePricing(blockNumber: number): Promise<void>;
|
|
45
|
+
getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
|
|
46
|
+
getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<SparkData>>;
|
|
47
|
+
getCalldataGasCost(poolPrices: PoolPrices<SparkData>): number | number[];
|
|
48
|
+
getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
|
|
49
|
+
getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: SparkData, side: SwapSide): Promise<SimpleExchangeParam>;
|
|
50
|
+
getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: SparkData, side: SwapSide): AdapterExchangeParam;
|
|
51
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Spark = void 0;
|
|
30
|
+
const simple_exchange_1 = require("../simple-exchange");
|
|
31
|
+
const types_1 = require("./types");
|
|
32
|
+
const constants_1 = require("../../constants");
|
|
33
|
+
const utils_1 = require("../../utils");
|
|
34
|
+
const config_1 = require("./config");
|
|
35
|
+
const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
|
|
36
|
+
const pot_json_1 = __importDefault(require("../../abi/maker-psm/pot.json"));
|
|
37
|
+
const SavingsDai_abi_json_1 = __importDefault(require("../../abi/sdai/SavingsDai.abi.json"));
|
|
38
|
+
const utils_2 = require("ethers/lib/utils");
|
|
39
|
+
const spark_sdai_pool_1 = require("./spark-sdai-pool");
|
|
40
|
+
const bigint_constants_1 = require("../../bigint-constants");
|
|
41
|
+
const constants_2 = require("./constants");
|
|
42
|
+
class Spark extends simple_exchange_1.SimpleExchange {
|
|
43
|
+
constructor(network, dexKey, dexHelper, daiAddress = config_1.SDaiConfig[dexKey][network].daiAddress, sdaiAddress = config_1.SDaiConfig[dexKey][network].sdaiAddress, potAddress = config_1.SDaiConfig[dexKey][network].potAddress, adapters = config_1.Adapters[network] || {}, sdaiInterface = new utils_2.Interface(SavingsDai_abi_json_1.default), potInterface = new utils_2.Interface(pot_json_1.default)) {
|
|
44
|
+
super(dexHelper, dexKey);
|
|
45
|
+
this.network = network;
|
|
46
|
+
this.dexHelper = dexHelper;
|
|
47
|
+
this.daiAddress = daiAddress;
|
|
48
|
+
this.sdaiAddress = sdaiAddress;
|
|
49
|
+
this.potAddress = potAddress;
|
|
50
|
+
this.adapters = adapters;
|
|
51
|
+
this.sdaiInterface = sdaiInterface;
|
|
52
|
+
this.potInterface = potInterface;
|
|
53
|
+
this.hasConstantPriceLargeAmounts = true;
|
|
54
|
+
this.isFeeOnTransferSupported = false;
|
|
55
|
+
this.logger = dexHelper.getLogger(dexKey);
|
|
56
|
+
this.eventPool = new spark_sdai_pool_1.SparkSDaiEventPool(this.dexKey, dexHelper, this.potAddress, this.potInterface, this.logger);
|
|
57
|
+
}
|
|
58
|
+
getAdapters(side) {
|
|
59
|
+
return this.adapters[side] || null;
|
|
60
|
+
}
|
|
61
|
+
isSDai(tokenAddress) {
|
|
62
|
+
return this.sdaiAddress.toLowerCase() === tokenAddress.toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
isDai(tokenAddress) {
|
|
65
|
+
return this.daiAddress.toLowerCase() === tokenAddress.toLowerCase();
|
|
66
|
+
}
|
|
67
|
+
isAppropriatePair(srcToken, destToken) {
|
|
68
|
+
return ((this.isDai(srcToken.address) && this.isSDai(destToken.address)) ||
|
|
69
|
+
(this.isDai(destToken.address) && this.isSDai(srcToken.address)));
|
|
70
|
+
}
|
|
71
|
+
async initializePricing(blockNumber) {
|
|
72
|
+
await this.eventPool.initialize(blockNumber);
|
|
73
|
+
}
|
|
74
|
+
async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
|
|
75
|
+
return this.isAppropriatePair(srcToken, destToken)
|
|
76
|
+
? [`${this.dexKey}_${this.sdaiAddress}`]
|
|
77
|
+
: [];
|
|
78
|
+
}
|
|
79
|
+
async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
|
|
80
|
+
if (!this.isAppropriatePair(srcToken, destToken))
|
|
81
|
+
return null;
|
|
82
|
+
if (!this.eventPool.getState(blockNumber))
|
|
83
|
+
return null;
|
|
84
|
+
if (side === constants_1.SwapSide.SELL) {
|
|
85
|
+
const calcSellFn = (blockNumber, amountIn) => this.isDai(srcToken.address)
|
|
86
|
+
? this.eventPool.convertToSDai(amountIn, blockNumber)
|
|
87
|
+
: this.eventPool.convertToDai(amountIn, blockNumber);
|
|
88
|
+
return [
|
|
89
|
+
{
|
|
90
|
+
prices: amounts.map(amount => calcSellFn(blockNumber, amount)),
|
|
91
|
+
unit: calcSellFn(blockNumber, bigint_constants_1.BI_POWS[18]),
|
|
92
|
+
gasCost: constants_2.SDAI_DEPOSIT_GAS_COST,
|
|
93
|
+
exchange: this.dexKey,
|
|
94
|
+
data: { exchange: `${this.sdaiAddress}` },
|
|
95
|
+
poolAddresses: [`${this.sdaiAddress}`],
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const calcBuyFn = (blockNumber, amountIn) => this.isDai(srcToken.address)
|
|
101
|
+
? this.eventPool.convertToDai(amountIn, blockNumber)
|
|
102
|
+
: this.eventPool.convertToSDai(amountIn, blockNumber);
|
|
103
|
+
return [
|
|
104
|
+
{
|
|
105
|
+
prices: amounts.map(amount => calcBuyFn(blockNumber, amount)),
|
|
106
|
+
unit: calcBuyFn(blockNumber, bigint_constants_1.BI_POWS[18]),
|
|
107
|
+
gasCost: constants_2.SDAI_REDEEM_GAS_COST,
|
|
108
|
+
exchange: this.dexKey,
|
|
109
|
+
data: { exchange: `${this.sdaiAddress}` },
|
|
110
|
+
poolAddresses: [`${this.sdaiAddress}`],
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Returns estimated gas cost of calldata for this DEX in multiSwap
|
|
116
|
+
getCalldataGasCost(poolPrices) {
|
|
117
|
+
return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
|
|
118
|
+
}
|
|
119
|
+
async getTopPoolsForToken(tokenAddress, limit) {
|
|
120
|
+
if (!this.isDai(tokenAddress) && !this.isSDai(tokenAddress))
|
|
121
|
+
return [];
|
|
122
|
+
return [
|
|
123
|
+
{
|
|
124
|
+
exchange: this.dexKey,
|
|
125
|
+
address: this.sdaiAddress,
|
|
126
|
+
connectorTokens: [
|
|
127
|
+
{
|
|
128
|
+
decimals: 18,
|
|
129
|
+
address: this.isDai(tokenAddress)
|
|
130
|
+
? this.sdaiAddress
|
|
131
|
+
: this.daiAddress,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
liquidityUSD: 1000000000, // Just returning a big number so this DEX will be preferred
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
|
|
139
|
+
const isSell = side === constants_1.SwapSide.SELL;
|
|
140
|
+
const { exchange } = data;
|
|
141
|
+
let swapData;
|
|
142
|
+
if (this.isDai(srcToken)) {
|
|
143
|
+
swapData = this.sdaiInterface.encodeFunctionData(isSell ? types_1.SparkSDaiFunctions.deposit : types_1.SparkSDaiFunctions.mint, [isSell ? srcAmount : destAmount, this.augustusAddress]);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
swapData = this.sdaiInterface.encodeFunctionData(isSell ? types_1.SparkSDaiFunctions.redeem : types_1.SparkSDaiFunctions.withdraw, [
|
|
147
|
+
isSell ? srcAmount : destAmount,
|
|
148
|
+
this.augustusAddress,
|
|
149
|
+
this.augustusAddress,
|
|
150
|
+
]);
|
|
151
|
+
}
|
|
152
|
+
return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, exchange);
|
|
153
|
+
}
|
|
154
|
+
getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
|
|
155
|
+
const { exchange } = data;
|
|
156
|
+
const payload = this.abiCoder.encodeParameter({
|
|
157
|
+
ParentStruct: {
|
|
158
|
+
toStaked: 'bool',
|
|
159
|
+
},
|
|
160
|
+
}, {
|
|
161
|
+
toStaked: this.isDai(srcToken),
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
targetExchange: exchange,
|
|
165
|
+
payload,
|
|
166
|
+
networkFee: '0',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.Spark = Spark;
|
|
171
|
+
Spark.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.SDaiConfig);
|
|
172
|
+
//# sourceMappingURL=spark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spark.js","sourceRoot":"","sources":["../../../src/dex/spark/spark.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAoD;AAEpD,mCAAqE;AACrE,+CAAoD;AACpD,uCAAoD;AACpD,qCAAgD;AAYhD,2EAA6D;AAC7D,4EAAkD;AAClD,6FAA+D;AAC/D,4CAA6C;AAC7C,uDAAuD;AACvD,6DAAiD;AACjD,2CAA0E;AAE1E,MAAa,KACX,SAAQ,gCAAc;IAYtB,YACY,OAAgB,EAC1B,MAAc,EACJ,SAAqB,EAEtB,aAAqB,mBAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAC3D,cAAsB,mBAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAC7D,aAAqB,mBAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAE1D,WAAW,iBAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAClC,gBAAgB,IAAI,iBAAS,CAAC,6BAAa,CAAC,EAC5C,eAAe,IAAI,iBAAS,CAAC,kBAAM,CAAC;QAE9C,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAZf,YAAO,GAAP,OAAO,CAAS;QAEhB,cAAS,GAAT,SAAS,CAAY;QAEtB,eAAU,GAAV,UAAU,CAAiD;QAC3D,gBAAW,GAAX,WAAW,CAAkD;QAC7D,eAAU,GAAV,UAAU,CAAiD;QAE1D,aAAQ,GAAR,QAAQ,CAA0B;QAClC,kBAAa,GAAb,aAAa,CAA+B;QAC5C,iBAAY,GAAZ,YAAY,CAAwB;QApBvC,iCAA4B,GAAG,IAAI,CAAC;QACpC,6BAAwB,GAAG,KAAK,CAAC;QAsBxC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,oCAAkB,CACrC,IAAI,CAAC,MAAM,EACX,SAAS,EACT,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,YAAqB;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,YAAqB;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC;IAED,iBAAiB,CAAC,QAAe,EAAE,SAAgB;QACjD,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC;YAChD,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE;YAC1B,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAE,QAAgB,EAAE,EAAE,CAC3D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAEzD,OAAO;gBACL;oBACE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBAC9D,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,0BAAO,CAAC,EAAE,CAAC,CAAC;oBAC1C,OAAO,EAAE,iCAAqB;oBAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;oBACzC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;iBACvC;aACF,CAAC;SACH;aAAM;YACL,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,QAAgB,EAAE,EAAE,CAC1D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAE1D,OAAO;gBACL;oBACE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBAC7D,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,0BAAO,CAAC,EAAE,CAAC,CAAC;oBACzC,OAAO,EAAE,gCAAoB;oBAC7B,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;oBACzC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;iBACvC;aACF,CAAC;SACH;IACH,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,UAAiC;QAClD,OAAO,iBAAiB,CAAC,cAAc,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,YAAqB,EACrB,KAAa;QAEb,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAC;QAEvE,OAAO;YACL;gBACE,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,eAAe,EAAE;oBACf;wBACE,QAAQ,EAAE,EAAE;wBACZ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;4BAC/B,CAAC,CAAC,IAAI,CAAC,WAAW;4BAClB,CAAC,CAAC,IAAI,CAAC,UAAU;qBACpB;iBACF;gBACD,YAAY,EAAE,UAAU,EAAE,4DAA4D;aACvF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAe,EACf,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,IAAI,QAAgB,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACxB,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAC9C,MAAM,CAAC,CAAC,CAAC,0BAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,0BAAkB,CAAC,IAAI,EAC7D,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CACxD,CAAC;SACH;aAAM;YACL,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAC9C,MAAM,CAAC,CAAC,CAAC,0BAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,0BAAkB,CAAC,QAAQ,EAChE;gBACE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;gBAC/B,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,eAAe;aACrB,CACF,CAAC;SACH;QAED,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAe,EACf,IAAc;QAEd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC3C;YACE,YAAY,EAAE;gBACZ,QAAQ,EAAE,MAAM;aACjB;SACF,EACD;YACE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;SAC/B,CACF,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,QAAQ;YACxB,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;;AAjNH,sBAkNC;AA3Me,wBAAkB,GAC9B,IAAA,6BAAqB,EAAC,mBAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Address } from '../../types';
|
|
2
|
+
export declare type SparkData = {
|
|
3
|
+
exchange: Address;
|
|
4
|
+
};
|
|
5
|
+
export declare type SparkParams = {
|
|
6
|
+
sdaiAddress: Address;
|
|
7
|
+
daiAddress: Address;
|
|
8
|
+
potAddress: Address;
|
|
9
|
+
};
|
|
10
|
+
export declare enum SparkSDaiFunctions {
|
|
11
|
+
deposit = "deposit",
|
|
12
|
+
redeem = "redeem",
|
|
13
|
+
withdraw = "withdraw",
|
|
14
|
+
mint = "mint"
|
|
15
|
+
}
|
|
16
|
+
export declare type SparkSDaiPoolState = {
|
|
17
|
+
rho: string;
|
|
18
|
+
chi: string;
|
|
19
|
+
dsr: string;
|
|
20
|
+
live: boolean;
|
|
21
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SparkSDaiFunctions = void 0;
|
|
4
|
+
var SparkSDaiFunctions;
|
|
5
|
+
(function (SparkSDaiFunctions) {
|
|
6
|
+
SparkSDaiFunctions["deposit"] = "deposit";
|
|
7
|
+
SparkSDaiFunctions["redeem"] = "redeem";
|
|
8
|
+
SparkSDaiFunctions["withdraw"] = "withdraw";
|
|
9
|
+
SparkSDaiFunctions["mint"] = "mint";
|
|
10
|
+
})(SparkSDaiFunctions = exports.SparkSDaiFunctions || (exports.SparkSDaiFunctions = {}));
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/spark/types.ts"],"names":[],"mappings":";;;AAUA,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,uCAAiB,CAAA;IACjB,2CAAqB,CAAA;IACrB,mCAAa,CAAA;AACf,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Contract } from 'web3-eth-contract';
|
|
2
|
+
import { SparkSDaiPoolState } from './types';
|
|
3
|
+
import { Interface } from '@ethersproject/abi';
|
|
4
|
+
export declare function getOnChainState(multiContract: Contract, potAddress: string, potInterface: Interface, blockNumber: number | 'latest'): Promise<SparkSDaiPoolState>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOnChainState = void 0;
|
|
4
|
+
const abi_1 = require("@ethersproject/abi");
|
|
5
|
+
const coder = new abi_1.AbiCoder();
|
|
6
|
+
// - `dsr`: the Dai Savings Rate
|
|
7
|
+
// - `chi`: the Rate Accumulator
|
|
8
|
+
// - `rho`: time of last drip
|
|
9
|
+
async function getOnChainState(multiContract, potAddress, potInterface, blockNumber) {
|
|
10
|
+
const data = await multiContract.methods
|
|
11
|
+
.aggregate([
|
|
12
|
+
{
|
|
13
|
+
target: potAddress,
|
|
14
|
+
callData: potInterface.encodeFunctionData('dsr', []),
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
target: potAddress,
|
|
18
|
+
callData: potInterface.encodeFunctionData('chi', []),
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
target: potAddress,
|
|
22
|
+
callData: potInterface.encodeFunctionData('rho', []),
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
target: potAddress,
|
|
26
|
+
callData: potInterface.encodeFunctionData('live', []),
|
|
27
|
+
},
|
|
28
|
+
])
|
|
29
|
+
.call({}, blockNumber);
|
|
30
|
+
const [dsr, chi, rho, live] = data.returnData.map(item => coder.decode(['uint256'], item)[0].toString());
|
|
31
|
+
return {
|
|
32
|
+
live: !!live,
|
|
33
|
+
dsr,
|
|
34
|
+
chi,
|
|
35
|
+
rho,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
exports.getOnChainState = getOnChainState;
|
|
39
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/dex/spark/utils.ts"],"names":[],"mappings":";;;AAEA,4CAAyD;AAEzD,MAAM,KAAK,GAAG,IAAI,cAAQ,EAAE,CAAC;AAE7B,gCAAgC;AAChC,gCAAgC;AAChC,6BAA6B;AACtB,KAAK,UAAU,eAAe,CACnC,aAAuB,EACvB,UAAkB,EAClB,YAAuB,EACvB,WAA8B;IAE9B,MAAM,IAAI,GAA0B,MAAM,aAAa,CAAC,OAAO;SAC5D,SAAS,CAAC;QACT;YACE,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;SACrD;QACD;YACE,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;SACrD;QACD;YACE,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;SACrD;QACD;YACE,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;SACtD;KACF,CAAC;SACD,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEzB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACvD,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC9C,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG;QACH,GAAG;QACH,GAAG;KACJ,CAAC;AACJ,CAAC;AArCD,0CAqCC"}
|
package/package.json
CHANGED
package/src/dex/index.ts
CHANGED
|
@@ -87,7 +87,7 @@ import { Wombat } from './wombat/wombat';
|
|
|
87
87
|
import { Swell } from './swell/swell';
|
|
88
88
|
import { PharaohV1 } from './solidly/forks-override/pharaohV1';
|
|
89
89
|
import { EtherFi } from './etherfi';
|
|
90
|
-
import {
|
|
90
|
+
import { Spark } from './spark/spark';
|
|
91
91
|
|
|
92
92
|
const LegacyDexes = [
|
|
93
93
|
CurveV2,
|
|
@@ -171,7 +171,7 @@ const Dexes = [
|
|
|
171
171
|
Wombat,
|
|
172
172
|
Swell,
|
|
173
173
|
PharaohV1,
|
|
174
|
-
|
|
174
|
+
Spark,
|
|
175
175
|
];
|
|
176
176
|
|
|
177
177
|
export type LegacyDexConstructor = new (dexHelper: IDexHelper) => IDexTxBuilder<
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SparkParams } from './types';
|
|
2
2
|
import { DexConfigMap } from '../../types';
|
|
3
3
|
import { Network } from '../../constants';
|
|
4
4
|
import { SwapSide } from '@paraswap/core';
|
|
5
5
|
|
|
6
|
-
export const SDaiConfig: DexConfigMap<
|
|
7
|
-
|
|
6
|
+
export const SDaiConfig: DexConfigMap<SparkParams> = {
|
|
7
|
+
Spark: {
|
|
8
8
|
[Network.MAINNET]: {
|
|
9
9
|
sdaiAddress: '0x83F20F44975D03b1b09e64809B757c47f942BEeA',
|
|
10
10
|
daiAddress: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
|
@@ -19,9 +19,6 @@ export const Adapters: {
|
|
|
19
19
|
};
|
|
20
20
|
} = {
|
|
21
21
|
[Network.MAINNET]: {
|
|
22
|
-
// TODO: uncomment this when SDAI integration got deployed
|
|
23
|
-
// [SwapSide.SELL]: [{ name: 'Adapter06', index: 2 }],
|
|
24
|
-
// [SwapSide.BUY]: [{ name: 'BuyAdapter02', index: 5 }],
|
|
25
22
|
[SwapSide.SELL]: [{ name: 'Adapter06', index: 1 }],
|
|
26
23
|
[SwapSide.BUY]: [{ name: 'BuyAdapter02', index: 4 }],
|
|
27
24
|
},
|
|
@@ -4,17 +4,17 @@ dotenv.config();
|
|
|
4
4
|
|
|
5
5
|
import { Network } from '../../../constants';
|
|
6
6
|
import { DummyDexHelper } from '../../../dex-helper';
|
|
7
|
-
import {
|
|
7
|
+
import { SparkSDaiPoolState } from '../types';
|
|
8
8
|
import { BlockHeader } from 'web3-eth';
|
|
9
9
|
import { ethers } from 'ethers';
|
|
10
|
-
import {
|
|
10
|
+
import { Spark } from '../spark';
|
|
11
11
|
import { SDaiConfig } from '../config';
|
|
12
12
|
import { getOnChainState } from '../utils';
|
|
13
13
|
import { Interface } from '@ethersproject/abi';
|
|
14
14
|
import PotAbi from '../../../abi/maker-psm/pot.json';
|
|
15
15
|
|
|
16
16
|
const network = Network.MAINNET;
|
|
17
|
-
const dexKey = '
|
|
17
|
+
const dexKey = 'Spark';
|
|
18
18
|
|
|
19
19
|
const { potAddress } = SDaiConfig[dexKey][network];
|
|
20
20
|
const blockHeaders: Record<number, BlockHeader> = {};
|
|
@@ -65,7 +65,7 @@ function compareAndLogDifferences<T extends object, Y extends object>(
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
async function isPoolStateEqualToReal(
|
|
68
|
-
state:
|
|
68
|
+
state: SparkSDaiPoolState,
|
|
69
69
|
blockNumber: number,
|
|
70
70
|
) {
|
|
71
71
|
const expected = await getOnChainState(
|
|
@@ -89,11 +89,11 @@ async function checkPoolStateForBlockRange(
|
|
|
89
89
|
endBlockNumber: number,
|
|
90
90
|
): Promise<boolean> {
|
|
91
91
|
const network = Network.MAINNET;
|
|
92
|
-
const dexKey = '
|
|
92
|
+
const dexKey = 'Spark';
|
|
93
93
|
const dexHelper = new DummyDexHelper(network);
|
|
94
94
|
|
|
95
|
-
const
|
|
96
|
-
const pool = await
|
|
95
|
+
const spark = new Spark(network, dexKey, dexHelper);
|
|
96
|
+
const pool = await spark.eventPool;
|
|
97
97
|
|
|
98
98
|
const logsToDispatch = await dexHelper.provider.getLogs({
|
|
99
99
|
fromBlock: startBlockNumber,
|
|
@@ -128,7 +128,7 @@ async function checkPoolStateForBlockRange(
|
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
const state = pool?.getState(startBlockNumber) as
|
|
131
|
+
const state = pool?.getState(startBlockNumber) as SparkSDaiPoolState;
|
|
132
132
|
return isPoolStateEqualToReal(state, endBlockNumber);
|
|
133
133
|
}
|
|
134
134
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import dotenv from 'dotenv';
|
|
2
2
|
dotenv.config();
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { SparkSDaiEventPool } from './spark-sdai-pool';
|
|
5
5
|
import { SDaiConfig } from './config';
|
|
6
6
|
import { Network } from '../../constants';
|
|
7
7
|
import { DummyDexHelper } from '../../dex-helper/index';
|
|
8
8
|
import { testEventSubscriber } from '../../../tests/utils-events';
|
|
9
|
-
import {
|
|
9
|
+
import { SparkSDaiPoolState } from './types';
|
|
10
10
|
|
|
11
11
|
import PotAbi from '../../abi/maker-psm/pot.json';
|
|
12
12
|
import { Interface } from '@ethersproject/abi';
|
|
@@ -46,13 +46,13 @@ import _ from 'lodash';
|
|
|
46
46
|
*/
|
|
47
47
|
|
|
48
48
|
jest.setTimeout(50 * 1000);
|
|
49
|
-
const dexKey = '
|
|
49
|
+
const dexKey = 'Spark';
|
|
50
50
|
const network = Network.MAINNET;
|
|
51
51
|
|
|
52
52
|
async function fetchPoolState(
|
|
53
|
-
sdaiPool:
|
|
53
|
+
sdaiPool: SparkSDaiEventPool,
|
|
54
54
|
blockNumber: number,
|
|
55
|
-
): Promise<
|
|
55
|
+
): Promise<SparkSDaiPoolState> {
|
|
56
56
|
return sdaiPool.generateState(blockNumber);
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -76,7 +76,7 @@ describe('SDai Event', function () {
|
|
|
76
76
|
const dexHelper = new DummyDexHelper(network);
|
|
77
77
|
const logger = dexHelper.getLogger(dexKey);
|
|
78
78
|
|
|
79
|
-
const sdaiPool = new
|
|
79
|
+
const sdaiPool = new SparkSDaiEventPool(
|
|
80
80
|
dexKey,
|
|
81
81
|
dexHelper,
|
|
82
82
|
addresses.potAddress,
|
|
@@ -6,7 +6,7 @@ import { Network, SwapSide } from '../../constants';
|
|
|
6
6
|
import { checkPoolPrices, checkPoolsLiquidity } from '../../../tests/utils';
|
|
7
7
|
import { Tokens } from '../../../tests/constants-e2e';
|
|
8
8
|
import { BI_POWS } from '../../bigint-constants';
|
|
9
|
-
import {
|
|
9
|
+
import { Spark } from './spark';
|
|
10
10
|
|
|
11
11
|
const network = Network.MAINNET;
|
|
12
12
|
|
|
@@ -18,22 +18,22 @@ const DaiToken = Tokens[network][DaiSymbol];
|
|
|
18
18
|
|
|
19
19
|
const amounts = [0n, BI_POWS[18], 2000000000000000000n];
|
|
20
20
|
|
|
21
|
-
const dexKey = '
|
|
21
|
+
const dexKey = 'Spark';
|
|
22
22
|
const dexHelper = new DummyDexHelper(network);
|
|
23
23
|
let blocknumber: number;
|
|
24
|
-
let
|
|
24
|
+
let spark: Spark;
|
|
25
25
|
|
|
26
|
-
describe('
|
|
26
|
+
describe('Spark', function () {
|
|
27
27
|
beforeAll(async () => {
|
|
28
28
|
blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
await
|
|
29
|
+
spark = new Spark(network, dexKey, dexHelper);
|
|
30
|
+
if (spark.initializePricing) {
|
|
31
|
+
await spark.initializePricing(blocknumber);
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
it('getPoolIdentifiers and getPricesVolume DAI -> sDAI SELL', async function () {
|
|
36
|
-
const pools = await
|
|
36
|
+
const pools = await spark.getPoolIdentifiers(
|
|
37
37
|
DaiToken,
|
|
38
38
|
SDaiToken,
|
|
39
39
|
SwapSide.SELL,
|
|
@@ -43,7 +43,7 @@ describe('SDai', function () {
|
|
|
43
43
|
|
|
44
44
|
expect(pools.length).toBeGreaterThan(0);
|
|
45
45
|
|
|
46
|
-
const poolPrices = await
|
|
46
|
+
const poolPrices = await spark.getPricesVolume(
|
|
47
47
|
DaiToken,
|
|
48
48
|
SDaiToken,
|
|
49
49
|
amounts,
|
|
@@ -58,7 +58,7 @@ describe('SDai', function () {
|
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
it('getPoolIdentifiers and getPricesVolume sDAI -> DAI SELL', async function () {
|
|
61
|
-
const pools = await
|
|
61
|
+
const pools = await spark.getPoolIdentifiers(
|
|
62
62
|
SDaiToken,
|
|
63
63
|
DaiToken,
|
|
64
64
|
SwapSide.SELL,
|
|
@@ -68,7 +68,7 @@ describe('SDai', function () {
|
|
|
68
68
|
|
|
69
69
|
expect(pools.length).toBeGreaterThan(0);
|
|
70
70
|
|
|
71
|
-
const poolPrices = await
|
|
71
|
+
const poolPrices = await spark.getPricesVolume(
|
|
72
72
|
SDaiToken,
|
|
73
73
|
DaiToken,
|
|
74
74
|
amounts,
|
|
@@ -83,7 +83,7 @@ describe('SDai', function () {
|
|
|
83
83
|
});
|
|
84
84
|
|
|
85
85
|
it('getPoolIdentifiers and getPricesVolume DAI -> sDAI BUY', async function () {
|
|
86
|
-
const pools = await
|
|
86
|
+
const pools = await spark.getPoolIdentifiers(
|
|
87
87
|
DaiToken,
|
|
88
88
|
SDaiToken,
|
|
89
89
|
SwapSide.BUY,
|
|
@@ -93,7 +93,7 @@ describe('SDai', function () {
|
|
|
93
93
|
|
|
94
94
|
expect(pools.length).toBeGreaterThan(0);
|
|
95
95
|
|
|
96
|
-
const poolPrices = await
|
|
96
|
+
const poolPrices = await spark.getPricesVolume(
|
|
97
97
|
DaiToken,
|
|
98
98
|
SDaiToken,
|
|
99
99
|
amounts,
|
|
@@ -108,7 +108,7 @@ describe('SDai', function () {
|
|
|
108
108
|
});
|
|
109
109
|
|
|
110
110
|
it('getPoolIdentifiers and getPricesVolume sDAI -> DAI BUY', async function () {
|
|
111
|
-
const pools = await
|
|
111
|
+
const pools = await spark.getPoolIdentifiers(
|
|
112
112
|
SDaiToken,
|
|
113
113
|
DaiToken,
|
|
114
114
|
SwapSide.BUY,
|
|
@@ -118,7 +118,7 @@ describe('SDai', function () {
|
|
|
118
118
|
|
|
119
119
|
expect(pools.length).toBeGreaterThan(0);
|
|
120
120
|
|
|
121
|
-
const poolPrices = await
|
|
121
|
+
const poolPrices = await spark.getPricesVolume(
|
|
122
122
|
SDaiToken,
|
|
123
123
|
DaiToken,
|
|
124
124
|
amounts,
|
|
@@ -133,14 +133,17 @@ describe('SDai', function () {
|
|
|
133
133
|
});
|
|
134
134
|
|
|
135
135
|
it('Dai getTopPoolsForToken', async function () {
|
|
136
|
-
const poolLiquidity = await
|
|
136
|
+
const poolLiquidity = await spark.getTopPoolsForToken(DaiToken.address, 10);
|
|
137
137
|
console.log(`${DaiSymbol} Top Pools:`, poolLiquidity);
|
|
138
138
|
|
|
139
139
|
checkPoolsLiquidity(poolLiquidity, DaiToken.address, dexKey);
|
|
140
140
|
});
|
|
141
141
|
|
|
142
142
|
it('SDai getTopPoolsForToken', async function () {
|
|
143
|
-
const poolLiquidity = await
|
|
143
|
+
const poolLiquidity = await spark.getTopPoolsForToken(
|
|
144
|
+
SDaiToken.address,
|
|
145
|
+
10,
|
|
146
|
+
);
|
|
144
147
|
console.log(`${SDaiSymbol} Top Pools:`, poolLiquidity);
|
|
145
148
|
|
|
146
149
|
checkPoolsLiquidity(poolLiquidity, SDaiToken.address, dexKey);
|
|
@@ -5,7 +5,7 @@ import { Interface } from '@ethersproject/abi';
|
|
|
5
5
|
import type { IDexHelper } from '../../dex-helper';
|
|
6
6
|
import type { AsyncOrSync, DeepReadonly } from 'ts-essentials';
|
|
7
7
|
import type { Address, BlockHeader, Log, Logger } from '../../types';
|
|
8
|
-
import type {
|
|
8
|
+
import type { SparkSDaiPoolState } from './types';
|
|
9
9
|
import { getOnChainState } from './utils';
|
|
10
10
|
|
|
11
11
|
const RAY = BI_POWS[27];
|
|
@@ -38,7 +38,7 @@ const rpow = (x: bigint, n: bigint): bigint => {
|
|
|
38
38
|
return z;
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
const calcChi = (state:
|
|
41
|
+
const calcChi = (state: SparkSDaiPoolState, currentTimestamp?: number) => {
|
|
42
42
|
currentTimestamp ||= Math.floor(Date.now() / 1000);
|
|
43
43
|
if (!state.live) return RAY;
|
|
44
44
|
|
|
@@ -51,7 +51,7 @@ const calcChi = (state: SDaiPoolState, currentTimestamp?: number) => {
|
|
|
51
51
|
return now > rho ? (rpow(dsr, now - rho) * chi) / RAY : chi;
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
export class
|
|
54
|
+
export class SparkSDaiEventPool extends StatefulEventSubscriber<SparkSDaiPoolState> {
|
|
55
55
|
constructor(
|
|
56
56
|
parentName: string,
|
|
57
57
|
protected dexHelper: IDexHelper,
|
|
@@ -59,15 +59,15 @@ export class SDaiEventPool extends StatefulEventSubscriber<SDaiPoolState> {
|
|
|
59
59
|
private potInterface: Interface,
|
|
60
60
|
logger: Logger,
|
|
61
61
|
) {
|
|
62
|
-
super(parentName, '
|
|
62
|
+
super(parentName, 'Spark', dexHelper, logger);
|
|
63
63
|
this.addressesSubscribed = [potAddress];
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
protected processLog(
|
|
67
|
-
state: DeepReadonly<
|
|
67
|
+
state: DeepReadonly<SparkSDaiPoolState>,
|
|
68
68
|
log: Readonly<Log>,
|
|
69
69
|
blockHeader: Readonly<BlockHeader>,
|
|
70
|
-
): AsyncOrSync<DeepReadonly<
|
|
70
|
+
): AsyncOrSync<DeepReadonly<SparkSDaiPoolState> | null> {
|
|
71
71
|
if (log.topics[0] === FILE_TOPICHASH && log.topics[2] === DSR_TOPIC) {
|
|
72
72
|
return {
|
|
73
73
|
...state,
|
|
@@ -88,7 +88,7 @@ export class SDaiEventPool extends StatefulEventSubscriber<SDaiPoolState> {
|
|
|
88
88
|
|
|
89
89
|
async generateState(
|
|
90
90
|
blockNumber: number | 'latest' = 'latest',
|
|
91
|
-
): Promise<DeepReadonly<
|
|
91
|
+
): Promise<DeepReadonly<SparkSDaiPoolState>> {
|
|
92
92
|
return getOnChainState(
|
|
93
93
|
this.dexHelper.multiContract,
|
|
94
94
|
this.potAddress,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SimpleExchange } from '../simple-exchange';
|
|
2
2
|
import { IDex } from '../idex';
|
|
3
|
-
import {
|
|
3
|
+
import { SparkParams, SparkData, SparkSDaiFunctions } from './types';
|
|
4
4
|
import { Network, SwapSide } from '../../constants';
|
|
5
5
|
import { getDexKeysWithNetwork } from '../../utils';
|
|
6
6
|
import { Adapters, SDaiConfig } from './config';
|
|
@@ -19,18 +19,21 @@ import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
|
|
|
19
19
|
import PotAbi from '../../abi/maker-psm/pot.json';
|
|
20
20
|
import SavingsDaiAbi from '../../abi/sdai/SavingsDai.abi.json';
|
|
21
21
|
import { Interface } from 'ethers/lib/utils';
|
|
22
|
-
import {
|
|
22
|
+
import { SparkSDaiEventPool } from './spark-sdai-pool';
|
|
23
23
|
import { BI_POWS } from '../../bigint-constants';
|
|
24
24
|
import { SDAI_DEPOSIT_GAS_COST, SDAI_REDEEM_GAS_COST } from './constants';
|
|
25
25
|
|
|
26
|
-
export class
|
|
26
|
+
export class Spark
|
|
27
|
+
extends SimpleExchange
|
|
28
|
+
implements IDex<SparkData, SparkParams>
|
|
29
|
+
{
|
|
27
30
|
readonly hasConstantPriceLargeAmounts = true;
|
|
28
31
|
readonly isFeeOnTransferSupported = false;
|
|
29
32
|
|
|
30
33
|
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
31
34
|
getDexKeysWithNetwork(SDaiConfig);
|
|
32
35
|
|
|
33
|
-
public readonly eventPool:
|
|
36
|
+
public readonly eventPool: SparkSDaiEventPool;
|
|
34
37
|
logger: Logger;
|
|
35
38
|
|
|
36
39
|
constructor(
|
|
@@ -48,7 +51,7 @@ export class SDai extends SimpleExchange implements IDex<SDaiData, SDaiParams> {
|
|
|
48
51
|
) {
|
|
49
52
|
super(dexHelper, dexKey);
|
|
50
53
|
this.logger = dexHelper.getLogger(dexKey);
|
|
51
|
-
this.eventPool = new
|
|
54
|
+
this.eventPool = new SparkSDaiEventPool(
|
|
52
55
|
this.dexKey,
|
|
53
56
|
dexHelper,
|
|
54
57
|
this.potAddress,
|
|
@@ -98,7 +101,7 @@ export class SDai extends SimpleExchange implements IDex<SDaiData, SDaiParams> {
|
|
|
98
101
|
side: SwapSide,
|
|
99
102
|
blockNumber: number,
|
|
100
103
|
limitPools?: string[],
|
|
101
|
-
): Promise<null | ExchangePrices<
|
|
104
|
+
): Promise<null | ExchangePrices<SparkData>> {
|
|
102
105
|
if (!this.isAppropriatePair(srcToken, destToken)) return null;
|
|
103
106
|
if (!this.eventPool.getState(blockNumber)) return null;
|
|
104
107
|
|
|
@@ -138,7 +141,7 @@ export class SDai extends SimpleExchange implements IDex<SDaiData, SDaiParams> {
|
|
|
138
141
|
}
|
|
139
142
|
|
|
140
143
|
// Returns estimated gas cost of calldata for this DEX in multiSwap
|
|
141
|
-
getCalldataGasCost(poolPrices: PoolPrices<
|
|
144
|
+
getCalldataGasCost(poolPrices: PoolPrices<SparkData>): number | number[] {
|
|
142
145
|
return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
|
|
143
146
|
}
|
|
144
147
|
|
|
@@ -170,7 +173,7 @@ export class SDai extends SimpleExchange implements IDex<SDaiData, SDaiParams> {
|
|
|
170
173
|
destToken: string,
|
|
171
174
|
srcAmount: string,
|
|
172
175
|
destAmount: string,
|
|
173
|
-
data:
|
|
176
|
+
data: SparkData,
|
|
174
177
|
side: SwapSide,
|
|
175
178
|
): Promise<SimpleExchangeParam> {
|
|
176
179
|
const isSell = side === SwapSide.SELL;
|
|
@@ -179,12 +182,12 @@ export class SDai extends SimpleExchange implements IDex<SDaiData, SDaiParams> {
|
|
|
179
182
|
let swapData: string;
|
|
180
183
|
if (this.isDai(srcToken)) {
|
|
181
184
|
swapData = this.sdaiInterface.encodeFunctionData(
|
|
182
|
-
isSell ?
|
|
185
|
+
isSell ? SparkSDaiFunctions.deposit : SparkSDaiFunctions.mint,
|
|
183
186
|
[isSell ? srcAmount : destAmount, this.augustusAddress],
|
|
184
187
|
);
|
|
185
188
|
} else {
|
|
186
189
|
swapData = this.sdaiInterface.encodeFunctionData(
|
|
187
|
-
isSell ?
|
|
190
|
+
isSell ? SparkSDaiFunctions.redeem : SparkSDaiFunctions.withdraw,
|
|
188
191
|
[
|
|
189
192
|
isSell ? srcAmount : destAmount,
|
|
190
193
|
this.augustusAddress,
|
|
@@ -208,7 +211,7 @@ export class SDai extends SimpleExchange implements IDex<SDaiData, SDaiParams> {
|
|
|
208
211
|
destToken: string,
|
|
209
212
|
srcAmount: string,
|
|
210
213
|
destAmount: string,
|
|
211
|
-
data:
|
|
214
|
+
data: SparkData,
|
|
212
215
|
side: SwapSide,
|
|
213
216
|
): AdapterExchangeParam {
|
|
214
217
|
const { exchange } = data;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { Address } from '../../types';
|
|
2
2
|
|
|
3
|
-
export type
|
|
3
|
+
export type SparkData = { exchange: Address };
|
|
4
4
|
|
|
5
|
-
export type
|
|
5
|
+
export type SparkParams = {
|
|
6
6
|
sdaiAddress: Address;
|
|
7
7
|
daiAddress: Address;
|
|
8
8
|
potAddress: Address;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
export enum
|
|
11
|
+
export enum SparkSDaiFunctions {
|
|
12
12
|
deposit = 'deposit',
|
|
13
13
|
redeem = 'redeem',
|
|
14
14
|
withdraw = 'withdraw',
|
|
15
15
|
mint = 'mint',
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export type
|
|
18
|
+
export type SparkSDaiPoolState = {
|
|
19
19
|
rho: string;
|
|
20
20
|
chi: string;
|
|
21
21
|
dsr: string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Contract } from 'web3-eth-contract';
|
|
2
|
-
import {
|
|
2
|
+
import { SparkSDaiPoolState } from './types';
|
|
3
3
|
import { Interface, AbiCoder } from '@ethersproject/abi';
|
|
4
|
-
import { currentBigIntTimestampInS } from '../../utils';
|
|
5
4
|
|
|
6
5
|
const coder = new AbiCoder();
|
|
7
6
|
|
|
@@ -13,7 +12,7 @@ export async function getOnChainState(
|
|
|
13
12
|
potAddress: string,
|
|
14
13
|
potInterface: Interface,
|
|
15
14
|
blockNumber: number | 'latest',
|
|
16
|
-
): Promise<
|
|
15
|
+
): Promise<SparkSDaiPoolState> {
|
|
17
16
|
const data: { returnData: any[] } = await multiContract.methods
|
|
18
17
|
.aggregate([
|
|
19
18
|
{
|
|
File without changes
|