@paraswap/dex-lib 2.49.2-dackieswapv3-base.0 → 2.49.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/abi/Redstone.json +739 -0
- package/build/abi/angle/stagToken.json +963 -0
- package/build/abi/angle-transmuter/MorphoOracle.json +193 -0
- package/build/abi/angle-transmuter/MorphoVault.json +2506 -0
- package/build/abi/angle-transmuter/Pyth.json +1534 -0
- package/build/abi/angle-transmuter/Transmuter.json +1711 -0
- package/build/abi/pharaoh/PharaohPool.abi.json +1582 -0
- package/build/abi/smardex/smardex-factory.json +185 -0
- package/build/abi/smardex/smardex-pool.json +578 -0
- package/build/abi/smardex/smardex-router.json +648 -0
- package/build/abi/trader-joe-v2_1/FactoryABI.json +1208 -0
- package/build/abi/trader-joe-v2_1/PairABI.json +1493 -0
- package/build/abi/trader-joe-v2_1/RouterABI.json +1489 -0
- package/build/abi/trader-joe-v2_1/StateMulticall.json +193 -0
- package/build/dex/angle-staked-stable/angle-staked-stable-pool.d.ts +55 -0
- package/build/dex/angle-staked-stable/angle-staked-stable-pool.js +183 -0
- package/build/dex/angle-staked-stable/angle-staked-stable-pool.js.map +1 -0
- package/build/dex/angle-staked-stable/angle-staked-stable.d.ts +50 -0
- package/build/dex/angle-staked-stable/angle-staked-stable.js +280 -0
- package/build/dex/angle-staked-stable/angle-staked-stable.js.map +1 -0
- package/build/dex/angle-staked-stable/config.d.ts +4 -0
- package/build/dex/angle-staked-stable/config.js +46 -0
- package/build/dex/angle-staked-stable/config.js.map +1 -0
- package/build/dex/angle-staked-stable/types.d.ts +17 -0
- package/build/dex/angle-staked-stable/types.js +3 -0
- package/build/dex/angle-staked-stable/types.js.map +1 -0
- package/build/dex/angle-transmuter/angle-transmuter-pool.d.ts +61 -0
- package/build/dex/angle-transmuter/angle-transmuter-pool.js +415 -0
- package/build/dex/angle-transmuter/angle-transmuter-pool.js.map +1 -0
- package/build/dex/angle-transmuter/angle-transmuter.d.ts +59 -0
- package/build/dex/angle-transmuter/angle-transmuter.js +262 -0
- package/build/dex/angle-transmuter/angle-transmuter.js.map +1 -0
- package/build/dex/angle-transmuter/backedOracle.d.ts +19 -0
- package/build/dex/angle-transmuter/backedOracle.js +56 -0
- package/build/dex/angle-transmuter/backedOracle.js.map +1 -0
- package/build/dex/angle-transmuter/config.d.ts +4 -0
- package/build/dex/angle-transmuter/config.js +30 -0
- package/build/dex/angle-transmuter/config.js.map +1 -0
- package/build/dex/angle-transmuter/constants.d.ts +77 -0
- package/build/dex/angle-transmuter/constants.js +94 -0
- package/build/dex/angle-transmuter/constants.js.map +1 -0
- package/build/dex/angle-transmuter/morphoOracle.d.ts +42 -0
- package/build/dex/angle-transmuter/morphoOracle.js +179 -0
- package/build/dex/angle-transmuter/morphoOracle.js.map +1 -0
- package/build/dex/angle-transmuter/morphoVault.d.ts +19 -0
- package/build/dex/angle-transmuter/morphoVault.js +78 -0
- package/build/dex/angle-transmuter/morphoVault.js.map +1 -0
- package/build/dex/angle-transmuter/pyth.d.ts +19 -0
- package/build/dex/angle-transmuter/pyth.js +70 -0
- package/build/dex/angle-transmuter/pyth.js.map +1 -0
- package/build/dex/angle-transmuter/redstone.d.ts +20 -0
- package/build/dex/angle-transmuter/redstone.js +73 -0
- package/build/dex/angle-transmuter/redstone.js.map +1 -0
- package/build/dex/angle-transmuter/transmuter.d.ts +52 -0
- package/build/dex/angle-transmuter/transmuter.js +374 -0
- package/build/dex/angle-transmuter/transmuter.js.map +1 -0
- package/build/dex/angle-transmuter/types.d.ts +188 -0
- package/build/dex/angle-transmuter/types.js +33 -0
- package/build/dex/angle-transmuter/types.js.map +1 -0
- package/build/dex/angle-transmuter/utils.d.ts +9 -0
- package/build/dex/angle-transmuter/utils.js +252 -0
- package/build/dex/angle-transmuter/utils.js.map +1 -0
- package/build/dex/index.js +2 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/pancakeswap-v3/config.js +0 -15
- package/build/dex/pancakeswap-v3/config.js.map +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
- package/build/dex/smardex/subgraph-queries.d.ts +1 -0
- package/build/dex/smardex/subgraph-queries.js +17 -0
- package/build/dex/smardex/subgraph-queries.js.map +1 -0
- package/build/dex/smardex/usd-reserves.d.ts +23 -0
- package/build/dex/smardex/usd-reserves.js +86 -0
- package/build/dex/smardex/usd-reserves.js.map +1 -0
- package/build/dex/solidly/config.js +12 -0
- package/build/dex/solidly/config.js.map +1 -1
- package/build/dex/solidly/forks-override/pharaohV1.d.ts +8 -0
- package/build/dex/solidly/forks-override/pharaohV1.js +15 -0
- package/build/dex/solidly/forks-override/pharaohV1.js.map +1 -0
- package/build/dex/solidly/solidly.js +1 -0
- package/build/dex/solidly/solidly.js.map +1 -1
- package/build/dex/trader-joe-v2-1-2/config.d.ts +4 -0
- package/build/dex/trader-joe-v2-1-2/config.js +47 -0
- package/build/dex/trader-joe-v2-1-2/config.js.map +1 -0
- package/build/dex/trader-joe-v2-1-2/constants.d.ts +20 -0
- package/build/dex/trader-joe-v2-1-2/constants.js +22 -0
- package/build/dex/trader-joe-v2-1-2/constants.js.map +1 -0
- package/build/dex/trader-joe-v2-1-2/math/index.d.ts +37 -0
- package/build/dex/trader-joe-v2-1-2/math/index.js +291 -0
- package/build/dex/trader-joe-v2-1-2/math/index.js.map +1 -0
- package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.d.ts +60 -0
- package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js +248 -0
- package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js.map +1 -0
- package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.d.ts +53 -0
- package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js +307 -0
- package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js.map +1 -0
- package/build/dex/trader-joe-v2-1-2/types.d.ts +82 -0
- package/build/dex/trader-joe-v2-1-2/types.js +9 -0
- package/build/dex/trader-joe-v2-1-2/types.js.map +1 -0
- package/build/dex/trader-joe-v2_1/config.d.ts +4 -0
- package/build/dex/trader-joe-v2_1/config.js +47 -0
- package/build/dex/trader-joe-v2_1/config.js.map +1 -0
- package/build/dex/trader-joe-v2_1/constants.d.ts +20 -0
- package/build/dex/trader-joe-v2_1/constants.js +22 -0
- package/build/dex/trader-joe-v2_1/constants.js.map +1 -0
- package/build/dex/trader-joe-v2_1/math/index.d.ts +37 -0
- package/build/dex/trader-joe-v2_1/math/index.js +291 -0
- package/build/dex/trader-joe-v2_1/math/index.js.map +1 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2.1.d.ts +0 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js +384 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js.map +1 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.d.ts +60 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js +247 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2_1-pool.js.map +1 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2_1.d.ts +53 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js +307 -0
- package/build/dex/trader-joe-v2_1/trader-joe-v2_1.js.map +1 -0
- package/build/dex/trader-joe-v2_1/types.d.ts +82 -0
- package/build/dex/trader-joe-v2_1/types.js +9 -0
- package/build/dex/trader-joe-v2_1/types.js.map +1 -0
- package/build/dex/uniswap-v3/config.js +1 -1
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.js +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex/wombat/wombat-pool-poller.d.ts +22 -0
- package/build/dex/wombat/wombat-pool-poller.js +164 -0
- package/build/dex/wombat/wombat-pool-poller.js.map +1 -0
- package/build/dex-helper/Cache.d.ts +31 -0
- package/build/dex-helper/Cache.js +106 -0
- package/build/dex-helper/Cache.js.map +1 -0
- package/build/dex-helper/RedisBatcher.d.ts +20 -0
- package/build/dex-helper/RedisBatcher.js +75 -0
- package/build/dex-helper/RedisBatcher.js.map +1 -0
- package/build/dex-helper/RedisWrapper.d.ts +37 -0
- package/build/dex-helper/RedisWrapper.js +165 -0
- package/build/dex-helper/RedisWrapper.js.map +1 -0
- package/package.json +1 -1
- package/src/dex/index.ts +2 -0
- package/src/dex/pancakeswap-v3/config.ts +0 -16
- package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +1 -3
- package/src/dex/solidly/config.ts +14 -0
- package/src/dex/solidly/forks-override/pharaohV1.ts +10 -0
- package/src/dex/solidly/solidly-e2e.test.ts +21 -0
- package/src/dex/solidly/solidly-integration.test.ts +143 -0
- package/src/dex/solidly/solidly.ts +1 -0
- package/src/dex/uniswap-v3/config.ts +1 -1
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +2 -2
- package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +2 -2
- package/src/dex/uniswap-v3/uniswap-v3.ts +1 -1
- package/tests/constants-e2e.ts +5 -0
- package/.vscode/launch.json +0 -53
- package/.vscode/settings.json +0 -2
- package/.vscode/tasks.json +0 -15
- package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
- package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +0 -1
- package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
- package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
- package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
- package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
- package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
- package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
- package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
- package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChainableCommander } from 'ioredis';
|
|
2
|
+
export declare type BatchedCmd = {
|
|
3
|
+
makeCmd: (chain: ChainableCommander) => void;
|
|
4
|
+
cb: (result: string | null) => boolean;
|
|
5
|
+
};
|
|
6
|
+
declare class DexlibRedisBatcher {
|
|
7
|
+
private intervalTimeMs;
|
|
8
|
+
private interval?;
|
|
9
|
+
private _lastLoggedAt;
|
|
10
|
+
private isAlreadyRunning;
|
|
11
|
+
private cmds;
|
|
12
|
+
private tmpCmds;
|
|
13
|
+
constructor(intervalTimeMs: number);
|
|
14
|
+
enable(): void;
|
|
15
|
+
disable(): void;
|
|
16
|
+
addCmd(cmd: BatchedCmd): void;
|
|
17
|
+
execute(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export declare const redisBatcher: DexlibRedisBatcher;
|
|
20
|
+
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.redisBatcher = void 0;
|
|
7
|
+
const RedisWrapper_1 = __importDefault(require("./RedisWrapper"));
|
|
8
|
+
const REDIS_BATCHER_INTERVAL_MS = 100;
|
|
9
|
+
const LOG_PERIOD_MS = 10 * 1000;
|
|
10
|
+
const logger = console;
|
|
11
|
+
class DexlibRedisBatcher {
|
|
12
|
+
constructor(intervalTimeMs) {
|
|
13
|
+
this.intervalTimeMs = intervalTimeMs;
|
|
14
|
+
this._lastLoggedAt = 0;
|
|
15
|
+
this.isAlreadyRunning = false;
|
|
16
|
+
this.cmds = [];
|
|
17
|
+
this.tmpCmds = [];
|
|
18
|
+
}
|
|
19
|
+
enable() {
|
|
20
|
+
this.interval = setInterval(this.execute.bind(this), this.intervalTimeMs);
|
|
21
|
+
}
|
|
22
|
+
disable() {
|
|
23
|
+
if (this.interval) {
|
|
24
|
+
clearInterval(this.interval);
|
|
25
|
+
this.interval = undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
addCmd(cmd) {
|
|
29
|
+
this.tmpCmds.push(cmd);
|
|
30
|
+
}
|
|
31
|
+
async execute() {
|
|
32
|
+
if (this.isAlreadyRunning) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
this.isAlreadyRunning = true;
|
|
37
|
+
const cmdsCount = this.tmpCmds.length + this.cmds.length;
|
|
38
|
+
if (cmdsCount === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
logger.trace(`execute ${cmdsCount} cmds`);
|
|
42
|
+
this.tmpCmds.forEach(cmd => this.cmds.push(cmd));
|
|
43
|
+
this.tmpCmds.length = 0;
|
|
44
|
+
const results = await RedisWrapper_1.default.batchReadOnlyCmds(this.cmds);
|
|
45
|
+
this.cmds = this.cmds.filter((cmd, index) => {
|
|
46
|
+
if (!results) {
|
|
47
|
+
logger.error('no results');
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const res = results[index];
|
|
51
|
+
if (!res) {
|
|
52
|
+
logger.error('error in execute empty result');
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
if (res[0]) {
|
|
56
|
+
logger.error('error in execute, res[0] =', res[0]);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return !cmd.cb(res[1]);
|
|
60
|
+
});
|
|
61
|
+
if (this.cmds.length && Date.now() - this._lastLoggedAt > LOG_PERIOD_MS) {
|
|
62
|
+
logger.info(`still some cmds to run ${this.cmds.length}`);
|
|
63
|
+
this._lastLoggedAt = Date.now();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
logger.error('error in execute:', e);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
this.isAlreadyRunning = false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.redisBatcher = new DexlibRedisBatcher(REDIS_BATCHER_INTERVAL_MS);
|
|
75
|
+
//# sourceMappingURL=RedisBatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisBatcher.js","sourceRoot":"","sources":["../../src/dex-helper/RedisBatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Redis } from 'ioredis';
|
|
2
|
+
interface Pool<T> extends Array<T> {
|
|
3
|
+
next: () => T;
|
|
4
|
+
}
|
|
5
|
+
export declare class DexlibRedisWrapper {
|
|
6
|
+
static MAX_SCORE_VALUE: number;
|
|
7
|
+
private redisMasterUrl;
|
|
8
|
+
private redisSlavesUrl;
|
|
9
|
+
masterPool: Pool<Redis>;
|
|
10
|
+
slavesPool: Pool<Redis>;
|
|
11
|
+
connect(redisMasterUrl?: string, redisSlavesUrl?: string, connectionPerPool?: number): Promise<void>;
|
|
12
|
+
private _checkConnected;
|
|
13
|
+
checkConnected(): void;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
get(key: string): Promise<string | null>;
|
|
16
|
+
set(key: string, value: string): Promise<"OK">;
|
|
17
|
+
setex(key: string, seconds: number, value: string): Promise<"OK">;
|
|
18
|
+
incrWithTTLSec(key: string, ttlSec: number): Promise<number>;
|
|
19
|
+
sismember(set: string, key: string): Promise<number>;
|
|
20
|
+
publish(channel: string, value: string): Promise<number>;
|
|
21
|
+
subscribe(channel: string, cb: (channel: string, message: string) => void): Promise<unknown>;
|
|
22
|
+
del(key: string): Promise<number>;
|
|
23
|
+
zremrangebyscore(key: string, min: number, max: number): Promise<number>;
|
|
24
|
+
zadd(key: string, bulkItemsToAdd: (number | string)[], option?: 'NX'): Promise<number>;
|
|
25
|
+
zrem(key: string, membersKeys: string[]): Promise<number>;
|
|
26
|
+
zscore(key: string, member: string): Promise<string | null>;
|
|
27
|
+
hset(mapKey: string, mappings: Record<string, string>): Promise<number | undefined>;
|
|
28
|
+
hdel(mapKey: string, keys: string[]): Promise<number>;
|
|
29
|
+
hget(keyMap: string, key: string): Promise<string | null>;
|
|
30
|
+
hmget(keyMap: string, keys: string[]): Promise<(string | null)[]>;
|
|
31
|
+
hgetAll(keyMap: string): Promise<Record<string, string>>;
|
|
32
|
+
zrangebyscore(key: string, min: number, max: number, isWithScores?: boolean): Promise<string[]>;
|
|
33
|
+
zcount(key: string, min: number, max: number): Promise<number>;
|
|
34
|
+
sadd(set: string, keys: string[], ttl?: number): Promise<number | [error: Error | null, result: unknown][] | null>;
|
|
35
|
+
}
|
|
36
|
+
declare const _default: DexlibRedisWrapper;
|
|
37
|
+
export default _default;
|
|
@@ -0,0 +1,165 @@
|
|
|
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.DexlibRedisWrapper = void 0;
|
|
7
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
8
|
+
const logger = console;
|
|
9
|
+
const IOREDIS_OPTION = {
|
|
10
|
+
enableAutoPipelining: true,
|
|
11
|
+
lazyConnect: true,
|
|
12
|
+
stringNumbers: true,
|
|
13
|
+
};
|
|
14
|
+
function makePool(url, connectionPerPool) {
|
|
15
|
+
const pool = Array.apply(null, new Array(connectionPerPool)).map(() => new ioredis_1.default(url, IOREDIS_OPTION));
|
|
16
|
+
const lastIdx = pool.length - 1;
|
|
17
|
+
pool.idx = 0;
|
|
18
|
+
pool.next = () => {
|
|
19
|
+
const n = pool[pool.idx];
|
|
20
|
+
pool.idx = pool.idx === lastIdx ? 0 : pool.idx + 1;
|
|
21
|
+
return n;
|
|
22
|
+
};
|
|
23
|
+
return pool;
|
|
24
|
+
}
|
|
25
|
+
class DexlibRedisWrapper {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.redisMasterUrl = '';
|
|
28
|
+
this.redisSlavesUrl = '';
|
|
29
|
+
}
|
|
30
|
+
async connect(redisMasterUrl = 'redis://localhost:32768', redisSlavesUrl = 'redis://localhost:32768', connectionPerPool = 5) {
|
|
31
|
+
this.redisMasterUrl = redisMasterUrl;
|
|
32
|
+
this.redisSlavesUrl = redisSlavesUrl;
|
|
33
|
+
this.masterPool = makePool(redisMasterUrl, connectionPerPool);
|
|
34
|
+
this.slavesPool = makePool(redisSlavesUrl, connectionPerPool);
|
|
35
|
+
try {
|
|
36
|
+
logger.info(`Connecting to REDIS... ${this.redisMasterUrl}`);
|
|
37
|
+
await Promise.all([...this.masterPool, ...this.slavesPool].map(redis => redis.connect()));
|
|
38
|
+
logger.info('Connected to REDIS');
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
logger.error(`Connecting to REDIS ${e}`);
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
_checkConnected(redis) {
|
|
46
|
+
if (redis.status !== 'ready') {
|
|
47
|
+
throw new Error('Redis connection down!');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
checkConnected() {
|
|
51
|
+
this.masterPool.forEach(this._checkConnected);
|
|
52
|
+
this.slavesPool.forEach(this._checkConnected);
|
|
53
|
+
}
|
|
54
|
+
async close() {
|
|
55
|
+
try {
|
|
56
|
+
logger.info('Closing REDIS...');
|
|
57
|
+
await Promise.all([...this.masterPool, ...this.slavesPool].map(redis => redis.quit()));
|
|
58
|
+
logger.info('Closed REDIS');
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
logger.error(`Closing REDIS ${e}`);
|
|
62
|
+
throw e;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async get(key) {
|
|
66
|
+
return this.slavesPool.next().get(key);
|
|
67
|
+
}
|
|
68
|
+
set(key, value) {
|
|
69
|
+
return this.masterPool.next().set(key, value);
|
|
70
|
+
}
|
|
71
|
+
setex(key, seconds, value) {
|
|
72
|
+
return this.masterPool.next().setex(key, seconds, value);
|
|
73
|
+
}
|
|
74
|
+
async incrWithTTLSec(key, ttlSec) {
|
|
75
|
+
const results = await this.masterPool
|
|
76
|
+
.next()
|
|
77
|
+
.multi()
|
|
78
|
+
.incr(key)
|
|
79
|
+
.expire(key, ttlSec)
|
|
80
|
+
.exec();
|
|
81
|
+
if (!results || results[0] === null) {
|
|
82
|
+
throw new Error(`incrWithTTLSec failed`);
|
|
83
|
+
}
|
|
84
|
+
return parseInt(results[0][1], 10);
|
|
85
|
+
}
|
|
86
|
+
async sismember(set, key) {
|
|
87
|
+
const res = await this.masterPool.next().sismember(set, key);
|
|
88
|
+
return typeof res === 'number' ? res : parseInt(res, 10);
|
|
89
|
+
}
|
|
90
|
+
publish(channel, value) {
|
|
91
|
+
return this.masterPool.next().publish(channel, value);
|
|
92
|
+
}
|
|
93
|
+
subscribe(channel, cb) {
|
|
94
|
+
const redis = new ioredis_1.default(this.redisSlavesUrl, IOREDIS_OPTION);
|
|
95
|
+
redis.on('error', (error) => {
|
|
96
|
+
logger.error(`redis_subscribe_error(${channel}): ${error}`);
|
|
97
|
+
});
|
|
98
|
+
redis.on('connect', () => logger.info(`Redis_subscriber_connected(${channel})`));
|
|
99
|
+
redis.on('message', cb);
|
|
100
|
+
return redis.subscribe(channel);
|
|
101
|
+
}
|
|
102
|
+
async del(key) {
|
|
103
|
+
return this.masterPool.next().del(key);
|
|
104
|
+
}
|
|
105
|
+
async zremrangebyscore(key, min, max) {
|
|
106
|
+
return this.masterPool.next().zremrangebyscore(key, min, max);
|
|
107
|
+
}
|
|
108
|
+
async zadd(key, bulkItemsToAdd, option) {
|
|
109
|
+
return option === undefined
|
|
110
|
+
? this.masterPool.next().zadd(key, ...bulkItemsToAdd)
|
|
111
|
+
: this.masterPool.next().zadd(key, option, ...bulkItemsToAdd);
|
|
112
|
+
}
|
|
113
|
+
async zrem(key, membersKeys) {
|
|
114
|
+
return this.masterPool.next().zrem(key, membersKeys);
|
|
115
|
+
}
|
|
116
|
+
async zscore(key, member) {
|
|
117
|
+
return this.slavesPool.next().zscore(key, member);
|
|
118
|
+
}
|
|
119
|
+
async hset(mapKey, mappings) {
|
|
120
|
+
if (!Object.keys(mappings).length) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
return this.masterPool.next().hset(mapKey, mappings);
|
|
124
|
+
}
|
|
125
|
+
async hdel(mapKey, keys) {
|
|
126
|
+
if (keys.length === 0) {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
return this.masterPool.next().hdel(mapKey, ...keys);
|
|
130
|
+
}
|
|
131
|
+
async hget(keyMap, key) {
|
|
132
|
+
return this.slavesPool.next().hget(keyMap, key);
|
|
133
|
+
}
|
|
134
|
+
async hmget(keyMap, keys) {
|
|
135
|
+
return this.slavesPool.next().hmget(keyMap, ...keys);
|
|
136
|
+
}
|
|
137
|
+
async hgetAll(keyMap) {
|
|
138
|
+
return this.slavesPool.next().hgetall(keyMap);
|
|
139
|
+
}
|
|
140
|
+
async zrangebyscore(key, min, max, isWithScores = false) {
|
|
141
|
+
return isWithScores
|
|
142
|
+
? this.slavesPool.next().zrangebyscore(key, min, max, 'WITHSCORES')
|
|
143
|
+
: this.slavesPool.next().zrangebyscore(key, min, max);
|
|
144
|
+
}
|
|
145
|
+
async zcount(key, min, max) {
|
|
146
|
+
return this.slavesPool.next().zcount(key, min, max);
|
|
147
|
+
}
|
|
148
|
+
async sadd(set, keys, ttl) {
|
|
149
|
+
if (ttl) {
|
|
150
|
+
return this.masterPool
|
|
151
|
+
.next()
|
|
152
|
+
.multi()
|
|
153
|
+
.sadd(set, keys)
|
|
154
|
+
.expire(set, ttl)
|
|
155
|
+
.exec();
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return this.masterPool.next().sadd(set, keys);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.DexlibRedisWrapper = DexlibRedisWrapper;
|
|
163
|
+
DexlibRedisWrapper.MAX_SCORE_VALUE = 9007199254740991;
|
|
164
|
+
exports.default = new DexlibRedisWrapper();
|
|
165
|
+
//# sourceMappingURL=RedisWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisWrapper.js","sourceRoot":"","sources":["../../src/dex-helper/RedisWrapper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/dex/index.ts
CHANGED
|
@@ -85,6 +85,7 @@ import { Dexalot } from './dexalot/dexalot';
|
|
|
85
85
|
import { Smardex } from './smardex/smardex';
|
|
86
86
|
import { Wombat } from './wombat/wombat';
|
|
87
87
|
import { Swell } from './swell/swell';
|
|
88
|
+
import { PharaohV1 } from './solidly/forks-override/pharaohV1';
|
|
88
89
|
import { EtherFi } from './etherfi';
|
|
89
90
|
|
|
90
91
|
const LegacyDexes = [
|
|
@@ -168,6 +169,7 @@ const Dexes = [
|
|
|
168
169
|
Smardex,
|
|
169
170
|
Wombat,
|
|
170
171
|
Swell,
|
|
172
|
+
PharaohV1,
|
|
171
173
|
];
|
|
172
174
|
|
|
173
175
|
export type LegacyDexConstructor = new (dexHelper: IDexHelper) => IDexTxBuilder<
|
|
@@ -69,22 +69,6 @@ export const PancakeswapV3Config: DexConfigMap<DexParams> = {
|
|
|
69
69
|
'https://api.studio.thegraph.com/query/45376/exchange-v3-base/version/latest',
|
|
70
70
|
},
|
|
71
71
|
},
|
|
72
|
-
DackieSwapV3: {
|
|
73
|
-
[Network.BASE]: {
|
|
74
|
-
factory: '0x3D237AC6D2f425D2E890Cc99198818cc1FA48870',
|
|
75
|
-
quoter: '0x4fDBD73aD4B1DDde594BF05497C15f76308eFfb9',
|
|
76
|
-
deployer: '0x4f205D69834f9B101b9289F7AFFAc9B77B3fF9b7',
|
|
77
|
-
router: '0x4030ebafeb76e5fc848891076dfe315993800ba5',
|
|
78
|
-
supportedFees: [10000n, 2500n, 500n, 100n],
|
|
79
|
-
stateMulticall: '0xeBF40A40CA3D4310Bf53048F48e860656e1D7C81',
|
|
80
|
-
uniswapMulticall: '0x091e99cb1C49331a94dD62755D168E941AbD0693',
|
|
81
|
-
chunksCount: 10,
|
|
82
|
-
initRetryFrequency: 10,
|
|
83
|
-
initHash: `0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2`,
|
|
84
|
-
subgraphURL:
|
|
85
|
-
'https://api.studio.thegraph.com/query/50473/exchange-clmm/version/latest',
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
72
|
};
|
|
89
73
|
|
|
90
74
|
export const Adapters: Record<number, AdapterMappings> = {
|
|
@@ -87,9 +87,7 @@ export class PancakeswapV3
|
|
|
87
87
|
intervalTask?: NodeJS.Timeout;
|
|
88
88
|
|
|
89
89
|
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
90
|
-
getDexKeysWithNetwork(
|
|
91
|
-
_.pick(PancakeswapV3Config, ['PancakeswapV3', 'DackieSwapV3']),
|
|
92
|
-
);
|
|
90
|
+
getDexKeysWithNetwork(_.pick(PancakeswapV3Config, ['PancakeswapV3']));
|
|
93
91
|
|
|
94
92
|
logger: Logger;
|
|
95
93
|
|
|
@@ -159,6 +159,20 @@ export const SolidlyConfig: DexConfigMap<DexParams> = {
|
|
|
159
159
|
feeCode: 0,
|
|
160
160
|
},
|
|
161
161
|
},
|
|
162
|
+
PharaohV1: {
|
|
163
|
+
[Network.AVALANCHE]: {
|
|
164
|
+
subgraphURL:
|
|
165
|
+
'https://api.studio.thegraph.com/query/66247/pharaoh-legacy/version/latest',
|
|
166
|
+
factoryAddress: '0xAAA16c016BF556fcD620328f0759252E29b1AB57',
|
|
167
|
+
router: '0x609AcD8Fc955Dd7E744c7DFFc9930a7A6654DE43',
|
|
168
|
+
initCode:
|
|
169
|
+
'0xbf2404274de2b11f05e5aebd49e508de933034cb5fa2d0ac3de8cbd4bcef47dc',
|
|
170
|
+
poolGasCost: 180 * 1000,
|
|
171
|
+
stableFee: 5,
|
|
172
|
+
volatileFee: 25,
|
|
173
|
+
feeCode: 0,
|
|
174
|
+
},
|
|
175
|
+
},
|
|
162
176
|
Equalizer: {
|
|
163
177
|
[Network.FANTOM]: {
|
|
164
178
|
factoryAddress: '0xc6366EFD0AF1d09171fe0EBF32c7943BB310832a',
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Network } from '../../../constants';
|
|
2
|
+
import { getDexKeysWithNetwork } from '../../../utils';
|
|
3
|
+
import { SolidlyConfig } from '../config';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { Ramses } from './ramses';
|
|
6
|
+
|
|
7
|
+
export class PharaohV1 extends Ramses {
|
|
8
|
+
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
9
|
+
getDexKeysWithNetwork(_.pick(SolidlyConfig, ['PharaohV1']));
|
|
10
|
+
}
|
|
@@ -1245,6 +1245,27 @@ describe('Solidly E2E', () => {
|
|
|
1245
1245
|
});
|
|
1246
1246
|
});
|
|
1247
1247
|
});
|
|
1248
|
+
|
|
1249
|
+
describe('PharaohV1', () => {
|
|
1250
|
+
const dexKey = 'PharaohV1';
|
|
1251
|
+
|
|
1252
|
+
const tokenASymbol: string = 'USDC';
|
|
1253
|
+
const tokenBSymbol: string = 'WAVAX';
|
|
1254
|
+
|
|
1255
|
+
const tokenAAmount: string = '100000';
|
|
1256
|
+
const tokenBAmount: string = '100000000000000000';
|
|
1257
|
+
const nativeTokenAmount = '100000000000000000';
|
|
1258
|
+
|
|
1259
|
+
testForNetwork(
|
|
1260
|
+
network,
|
|
1261
|
+
dexKey,
|
|
1262
|
+
tokenASymbol,
|
|
1263
|
+
tokenBSymbol,
|
|
1264
|
+
tokenAAmount,
|
|
1265
|
+
tokenBAmount,
|
|
1266
|
+
nativeTokenAmount,
|
|
1267
|
+
);
|
|
1268
|
+
});
|
|
1248
1269
|
});
|
|
1249
1270
|
|
|
1250
1271
|
describe('Arbitrum', () => {
|
|
@@ -19,6 +19,7 @@ import { VelodromeV2 } from './forks-override/velodromeV2';
|
|
|
19
19
|
import { Equalizer } from './forks-override/equalizer';
|
|
20
20
|
import { Velocimeter } from './forks-override/velocimeter';
|
|
21
21
|
import { Usdfi } from './forks-override/usdfi';
|
|
22
|
+
import { PharaohV1 } from './forks-override/pharaohV1';
|
|
22
23
|
|
|
23
24
|
const amounts18 = [0n, BI_POWS[18], 2000000000000000000n];
|
|
24
25
|
const amounts6 = [0n, BI_POWS[6], 2000000n];
|
|
@@ -1443,6 +1444,148 @@ describe('Solidly integration tests', () => {
|
|
|
1443
1444
|
});
|
|
1444
1445
|
});
|
|
1445
1446
|
|
|
1447
|
+
describe('Avalanche', () => {
|
|
1448
|
+
const network = Network.AVALANCHE;
|
|
1449
|
+
const dexHelper = new DummyDexHelper(network);
|
|
1450
|
+
const checkOnChainPricing = constructCheckOnChainPricing(dexHelper);
|
|
1451
|
+
|
|
1452
|
+
describe('PharaohV1', function () {
|
|
1453
|
+
const dexKey = 'PharaohV1';
|
|
1454
|
+
const pharaohV1 = new PharaohV1(network, dexKey, dexHelper);
|
|
1455
|
+
|
|
1456
|
+
describe('UniswapV2 like pool', function () {
|
|
1457
|
+
const TokenASymbol = 'USDC';
|
|
1458
|
+
const tokenA = Tokens[network][TokenASymbol];
|
|
1459
|
+
const TokenBSymbol = 'WAVAX';
|
|
1460
|
+
const tokenB = Tokens[network][TokenBSymbol];
|
|
1461
|
+
|
|
1462
|
+
const amounts = amounts18;
|
|
1463
|
+
|
|
1464
|
+
it('getPoolIdentifiers and getPricesVolume', async function () {
|
|
1465
|
+
const blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
1466
|
+
const pools = await pharaohV1.getPoolIdentifiers(
|
|
1467
|
+
tokenA,
|
|
1468
|
+
tokenB,
|
|
1469
|
+
SwapSide.SELL,
|
|
1470
|
+
blocknumber,
|
|
1471
|
+
);
|
|
1472
|
+
console.log(
|
|
1473
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Identifiers: `,
|
|
1474
|
+
pools,
|
|
1475
|
+
);
|
|
1476
|
+
|
|
1477
|
+
expect(pools.length).toBeGreaterThan(0);
|
|
1478
|
+
|
|
1479
|
+
console.log('AMOUNTS: ', amounts);
|
|
1480
|
+
|
|
1481
|
+
const poolPrices = await pharaohV1.getPricesVolume(
|
|
1482
|
+
tokenA,
|
|
1483
|
+
tokenB,
|
|
1484
|
+
amounts,
|
|
1485
|
+
SwapSide.SELL,
|
|
1486
|
+
blocknumber,
|
|
1487
|
+
pools,
|
|
1488
|
+
);
|
|
1489
|
+
console.log(
|
|
1490
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Prices: `,
|
|
1491
|
+
util.inspect(poolPrices, false, null, true),
|
|
1492
|
+
);
|
|
1493
|
+
|
|
1494
|
+
expect(poolPrices).not.toBeNull();
|
|
1495
|
+
checkPoolPrices(poolPrices!, amounts, SwapSide.SELL, dexKey);
|
|
1496
|
+
|
|
1497
|
+
// Check if onchain pricing equals to calculated ones
|
|
1498
|
+
|
|
1499
|
+
for (const poolPrice of poolPrices || []) {
|
|
1500
|
+
await checkOnChainPricing(
|
|
1501
|
+
pharaohV1,
|
|
1502
|
+
'getAmountOut',
|
|
1503
|
+
blocknumber,
|
|
1504
|
+
poolPrice.prices,
|
|
1505
|
+
poolPrice.poolAddresses![0],
|
|
1506
|
+
tokenA.address,
|
|
1507
|
+
amounts,
|
|
1508
|
+
);
|
|
1509
|
+
}
|
|
1510
|
+
});
|
|
1511
|
+
|
|
1512
|
+
it('getTopPoolsForToken', async function () {
|
|
1513
|
+
const poolLiquidity = await pharaohV1.getTopPoolsForToken(
|
|
1514
|
+
tokenA.address,
|
|
1515
|
+
10,
|
|
1516
|
+
);
|
|
1517
|
+
console.log(`${TokenASymbol} Top Pools:`, poolLiquidity);
|
|
1518
|
+
|
|
1519
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
1520
|
+
});
|
|
1521
|
+
});
|
|
1522
|
+
|
|
1523
|
+
describe('Curve like stable pool', function () {
|
|
1524
|
+
const TokenASymbol = 'USDT';
|
|
1525
|
+
const tokenA = Tokens[network][TokenASymbol];
|
|
1526
|
+
const TokenBSymbol = 'USDC';
|
|
1527
|
+
const tokenB = Tokens[network][TokenBSymbol];
|
|
1528
|
+
|
|
1529
|
+
const amounts = amounts6;
|
|
1530
|
+
|
|
1531
|
+
it('getPoolIdentifiers and getPricesVolume', async function () {
|
|
1532
|
+
const blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
1533
|
+
const pools = await pharaohV1.getPoolIdentifiers(
|
|
1534
|
+
tokenA,
|
|
1535
|
+
tokenB,
|
|
1536
|
+
SwapSide.SELL,
|
|
1537
|
+
blocknumber,
|
|
1538
|
+
);
|
|
1539
|
+
console.log(
|
|
1540
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Identifiers: `,
|
|
1541
|
+
pools,
|
|
1542
|
+
);
|
|
1543
|
+
|
|
1544
|
+
expect(pools.length).toBeGreaterThan(0);
|
|
1545
|
+
|
|
1546
|
+
const poolPrices = await pharaohV1.getPricesVolume(
|
|
1547
|
+
tokenA,
|
|
1548
|
+
tokenB,
|
|
1549
|
+
amounts,
|
|
1550
|
+
SwapSide.SELL,
|
|
1551
|
+
blocknumber,
|
|
1552
|
+
pools,
|
|
1553
|
+
);
|
|
1554
|
+
console.log(
|
|
1555
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Prices: `,
|
|
1556
|
+
poolPrices,
|
|
1557
|
+
);
|
|
1558
|
+
|
|
1559
|
+
expect(poolPrices).not.toBeNull();
|
|
1560
|
+
checkPoolPrices(poolPrices!, amounts, SwapSide.SELL, dexKey);
|
|
1561
|
+
|
|
1562
|
+
// Check if onchain pricing equals to calculated ones
|
|
1563
|
+
for (const poolPrice of poolPrices || []) {
|
|
1564
|
+
await checkOnChainPricing(
|
|
1565
|
+
pharaohV1,
|
|
1566
|
+
'getAmountOut',
|
|
1567
|
+
blocknumber,
|
|
1568
|
+
poolPrice.prices,
|
|
1569
|
+
poolPrice.poolAddresses![0],
|
|
1570
|
+
tokenA.address,
|
|
1571
|
+
amounts,
|
|
1572
|
+
);
|
|
1573
|
+
}
|
|
1574
|
+
});
|
|
1575
|
+
|
|
1576
|
+
it('getTopPoolsForToken', async function () {
|
|
1577
|
+
const poolLiquidity = await pharaohV1.getTopPoolsForToken(
|
|
1578
|
+
tokenA.address,
|
|
1579
|
+
10,
|
|
1580
|
+
);
|
|
1581
|
+
console.log(`${TokenASymbol} Top Pools:`, poolLiquidity);
|
|
1582
|
+
|
|
1583
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
1584
|
+
});
|
|
1585
|
+
});
|
|
1586
|
+
});
|
|
1587
|
+
});
|
|
1588
|
+
|
|
1446
1589
|
describe('Optimism', () => {
|
|
1447
1590
|
const network = Network.OPTIMISM;
|
|
1448
1591
|
const dexHelper = new DummyDexHelper(network);
|
|
@@ -261,7 +261,7 @@ export const UniswapV3Config: DexConfigMap<DexParams> = {
|
|
|
261
261
|
'https://api.thegraph.com/subgraphs/name/ramsesexchange/concentrated-liquidity-graph',
|
|
262
262
|
},
|
|
263
263
|
},
|
|
264
|
-
|
|
264
|
+
PharaohV2: {
|
|
265
265
|
[Network.AVALANCHE]: {
|
|
266
266
|
factory: '0xAAA32926fcE6bE95ea2c51cB4Fcb60836D320C42',
|
|
267
267
|
deployer: '0x95120704f4E2D545Aea8b6B3c16d9Da1fa32E30F',
|
|
@@ -696,8 +696,8 @@ describe('UniswapV3 E2E', () => {
|
|
|
696
696
|
});
|
|
697
697
|
});
|
|
698
698
|
|
|
699
|
-
describe('
|
|
700
|
-
const dexKey = '
|
|
699
|
+
describe('PharaohV2', () => {
|
|
700
|
+
const dexKey = 'PharaohV2';
|
|
701
701
|
|
|
702
702
|
describe('Avalanche', () => {
|
|
703
703
|
const network = Network.AVALANCHE;
|
|
@@ -613,8 +613,8 @@ describe('RamsesV2', () => {
|
|
|
613
613
|
});
|
|
614
614
|
});
|
|
615
615
|
|
|
616
|
-
describe('
|
|
617
|
-
const dexKey = '
|
|
616
|
+
describe('PharaohV2', () => {
|
|
617
|
+
const dexKey = 'PharaohV2';
|
|
618
618
|
let blockNumber: number;
|
|
619
619
|
let uniswapV3: UniswapV3;
|
|
620
620
|
let uniswapV3Mainnet: UniswapV3;
|
package/tests/constants-e2e.ts
CHANGED
|
@@ -669,6 +669,10 @@ export const Tokens: {
|
|
|
669
669
|
},
|
|
670
670
|
},
|
|
671
671
|
[Network.AVALANCHE]: {
|
|
672
|
+
PHAR: {
|
|
673
|
+
address: '0xAAAB9D12A30504559b0C5a9A5977fEE4A6081c6b',
|
|
674
|
+
decimals: 18,
|
|
675
|
+
},
|
|
672
676
|
USDCe: {
|
|
673
677
|
address: '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664',
|
|
674
678
|
decimals: 6,
|
|
@@ -1236,6 +1240,7 @@ export const Holders: {
|
|
|
1236
1240
|
YUSD: '0x6c1a5ef2acde1fd2fc68def440d2c1eb35bae24a',
|
|
1237
1241
|
BTCb: '0x84c06d3c27821d0136f66306f5028d43ceac268d',
|
|
1238
1242
|
AMPL: '0xfcaA5ea7F8eb0631BcA72C345025C0A5a6D93f0E',
|
|
1243
|
+
PHAR: '0x654296D56532f62B7d91d335791d3c364a9385b5',
|
|
1239
1244
|
},
|
|
1240
1245
|
[Network.ARBITRUM]: {
|
|
1241
1246
|
SEN: '0xcb19b6b4971bd4206bab176c75b1efe3e28ee5a8',
|