@paraswap/dex-lib 4.1.3 → 4.1.4-bal-v3-hooks.1
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/balancer-v3/directionalFeeHook.json +684 -0
- package/build/abi/balancer-v3/stableSurgeHook.json +976 -0
- package/build/dex/balancer-v3/balancer-test-helpers.d.ts +5 -0
- package/build/dex/balancer-v3/balancer-test-helpers.js +122 -0
- package/build/dex/balancer-v3/balancer-test-helpers.js.map +1 -0
- package/build/dex/balancer-v3/balancer-v3-pool.d.ts +4 -1
- package/build/dex/balancer-v3/balancer-v3-pool.js +20 -13
- package/build/dex/balancer-v3/balancer-v3-pool.js.map +1 -1
- package/build/dex/balancer-v3/balancer-v3.d.ts +4 -0
- package/build/dex/balancer-v3/balancer-v3.js +29 -3
- package/build/dex/balancer-v3/balancer-v3.js.map +1 -1
- package/build/dex/balancer-v3/config.js +39 -0
- package/build/dex/balancer-v3/config.js.map +1 -1
- package/build/dex/balancer-v3/getOnChainState.d.ts +1 -2
- package/build/dex/balancer-v3/getOnChainState.js +0 -2
- package/build/dex/balancer-v3/getOnChainState.js.map +1 -1
- package/build/dex/balancer-v3/getPoolsApi.d.ts +2 -1
- package/build/dex/balancer-v3/getPoolsApi.js +17 -10
- package/build/dex/balancer-v3/getPoolsApi.js.map +1 -1
- package/build/dex/balancer-v3/getTopPoolsApi.d.ts +5 -1
- package/build/dex/balancer-v3/getTopPoolsApi.js +6 -3
- package/build/dex/balancer-v3/getTopPoolsApi.js.map +1 -1
- package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.d.ts +54 -0
- package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.js +139 -0
- package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.js.map +1 -0
- package/build/dex/balancer-v3/hooks/directionalFeeHook.d.ts +26 -0
- package/build/dex/balancer-v3/hooks/directionalFeeHook.js +41 -0
- package/build/dex/balancer-v3/hooks/directionalFeeHook.js.map +1 -0
- package/build/dex/balancer-v3/hooks/loadHooksConfig.d.ts +2 -0
- package/build/dex/balancer-v3/hooks/loadHooksConfig.js +11 -0
- package/build/dex/balancer-v3/hooks/loadHooksConfig.js.map +1 -0
- package/build/dex/balancer-v3/hooks/stableSurgeHook.d.ts +39 -0
- package/build/dex/balancer-v3/hooks/stableSurgeHook.js +115 -0
- package/build/dex/balancer-v3/hooks/stableSurgeHook.js.map +1 -0
- package/build/dex/balancer-v3/types.d.ts +4 -1
- package/package.json +2 -2
- package/scripts/run-dex-integration-v3.ts +4 -4
- package/src/abi/balancer-v3/directionalFeeHook.json +684 -0
- package/src/abi/balancer-v3/stableSurgeHook.json +976 -0
- package/src/dex/balancer-v3/balancer-hooks-events.test.ts +166 -0
- package/src/dex/balancer-v3/balancer-stableSurge.test.ts +110 -0
- package/src/dex/balancer-v3/balancer-test-helpers.ts +199 -0
- package/src/dex/balancer-v3/balancer-v3-e2e.test.ts +20 -0
- package/src/dex/balancer-v3/balancer-v3-integration.test.ts +2 -197
- package/src/dex/balancer-v3/balancer-v3-pool.ts +37 -13
- package/src/dex/balancer-v3/balancer-v3.ts +42 -1
- package/src/dex/balancer-v3/config.ts +39 -0
- package/src/dex/balancer-v3/getOnChainState.ts +1 -4
- package/src/dex/balancer-v3/getPoolsApi.ts +42 -23
- package/src/dex/balancer-v3/getTopPoolsApi.ts +13 -2
- package/src/dex/balancer-v3/hooks/balancer-hook-event-subscriber.ts +211 -0
- package/src/dex/balancer-v3/hooks/directionalFeeHook.ts +51 -0
- package/src/dex/balancer-v3/hooks/loadHooksConfig.ts +12 -0
- package/src/dex/balancer-v3/hooks/stableSurgeHook.ts +193 -0
- package/src/dex/balancer-v3/types.ts +4 -2
- package/tests/constants-e2e.ts +6 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ImmutablePoolStateMap, PoolStateMap } from './types';
|
|
2
2
|
import { Interface, Result } from '@ethersproject/abi';
|
|
3
3
|
import { IDexHelper } from '../../dex-helper';
|
|
4
|
-
interface callData {
|
|
4
|
+
export interface callData {
|
|
5
5
|
target: string;
|
|
6
6
|
callData: string;
|
|
7
7
|
}
|
|
@@ -16,4 +16,3 @@ export declare function decodeErc4626MultiCallData(erc4626Interface: Interface,
|
|
|
16
16
|
export declare function getOnChainState(network: number, immutablePoolStateMap: ImmutablePoolStateMap, dexHelper: IDexHelper, interfaces: {
|
|
17
17
|
[name: string]: Interface;
|
|
18
18
|
}, blockNumber?: number): Promise<PoolStateMap>;
|
|
19
|
-
export {};
|
|
@@ -80,8 +80,6 @@ const poolOnChain = {
|
|
|
80
80
|
totalSupply: BigInt(resultTotalSupply[0]),
|
|
81
81
|
scalingFactors: resultTokenRates.decimalScalingFactors.map((r) => BigInt(r)),
|
|
82
82
|
isPoolPaused: resultIsPoolPaused[0],
|
|
83
|
-
hasHook: resultHooksConfig[0].hooksContract !==
|
|
84
|
-
'0x0000000000000000000000000000000000000000',
|
|
85
83
|
};
|
|
86
84
|
},
|
|
87
85
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOnChainState.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getOnChainState.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"getOnChainState.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getOnChainState.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { ImmutablePoolStateMap } from './types';
|
|
2
|
-
|
|
2
|
+
import { HooksConfigMap } from './hooks/balancer-hook-event-subscriber';
|
|
3
|
+
export declare function getPoolsApi(network: number, hooksConfigMap: HooksConfigMap, timestamp?: number): Promise<ImmutablePoolStateMap>;
|
|
@@ -17,7 +17,6 @@ function createQuery(networkId, poolTypes, timestamp) {
|
|
|
17
17
|
const whereClause = {
|
|
18
18
|
chainIn: networkString,
|
|
19
19
|
protocolVersionIn: 3,
|
|
20
|
-
hasHook: false,
|
|
21
20
|
poolTypeIn: `[${poolTypesString}]`,
|
|
22
21
|
...(timestamp && { createTime: `{lt: ${timestamp}}` }),
|
|
23
22
|
...(disabledPoolIdsString && { idNotIn: `[${disabledPoolIdsString}]` }),
|
|
@@ -41,29 +40,37 @@ function createQuery(networkId, poolTypes, timestamp) {
|
|
|
41
40
|
address
|
|
42
41
|
}
|
|
43
42
|
}
|
|
43
|
+
hook {
|
|
44
|
+
address
|
|
45
|
+
}
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
48
|
`;
|
|
47
49
|
}
|
|
48
|
-
function toImmutablePoolStateMap(pools) {
|
|
49
|
-
return pools
|
|
50
|
+
function toImmutablePoolStateMap(pools, hooksConfigMap) {
|
|
51
|
+
return (pools
|
|
52
|
+
// First filter out pools with hooks that aren't in hooksMap
|
|
53
|
+
.filter(pool => !pool.hook ||
|
|
54
|
+
(pool.hook && pool.hook.address.toLowerCase() in hooksConfigMap))
|
|
55
|
+
.reduce((map, pool) => {
|
|
50
56
|
const immutablePoolState = {
|
|
51
57
|
poolAddress: pool.id,
|
|
52
58
|
tokens: pool.poolTokens.map(t => t.address),
|
|
53
59
|
tokensUnderlying: pool.poolTokens.map(t => t.underlyingToken ? t.underlyingToken.address : null),
|
|
54
60
|
weights: pool.poolTokens.map(t => t.weight ? (0, utils_1.parseUnits)(t.weight, 18).toBigInt() : 0n),
|
|
55
61
|
poolType: pool.type,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
62
|
+
hookAddress: pool.hook ? pool.hook.address.toLowerCase() : undefined,
|
|
63
|
+
hookType: pool.hook
|
|
64
|
+
? hooksConfigMap[pool.hook.address.toLowerCase()].type
|
|
65
|
+
: undefined,
|
|
66
|
+
supportsUnbalancedLiquidity: true,
|
|
60
67
|
};
|
|
61
68
|
map[pool.id] = immutablePoolState;
|
|
62
69
|
return map;
|
|
63
|
-
}, {});
|
|
70
|
+
}, {}));
|
|
64
71
|
}
|
|
65
72
|
// Any data from API will be immutable. Mutable data such as balances, etc will be fetched via onchain/event state.
|
|
66
|
-
async function getPoolsApi(network, timestamp) {
|
|
73
|
+
async function getPoolsApi(network, hooksConfigMap, timestamp) {
|
|
67
74
|
try {
|
|
68
75
|
const query = createQuery(network, Object.values(config_1.SUPPORTED_POOLS), timestamp);
|
|
69
76
|
const response = await axios_1.default.post(config_1.apiUrl, {
|
|
@@ -74,7 +81,7 @@ async function getPoolsApi(network, timestamp) {
|
|
|
74
81
|
},
|
|
75
82
|
});
|
|
76
83
|
const pools = response.data.data.poolGetAggregatorPools;
|
|
77
|
-
return toImmutablePoolStateMap(pools);
|
|
84
|
+
return toImmutablePoolStateMap(pools, hooksConfigMap);
|
|
78
85
|
}
|
|
79
86
|
catch (error) {
|
|
80
87
|
// console.error('Error executing GraphQL query:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPoolsApi.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getPoolsApi.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"getPoolsApi.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getPoolsApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { HooksConfigMap } from './hooks/balancer-hook-event-subscriber';
|
|
1
2
|
interface PoolToken {
|
|
2
3
|
address: string;
|
|
3
4
|
decimals: number;
|
|
@@ -12,6 +13,9 @@ export interface Pool {
|
|
|
12
13
|
dynamicData: {
|
|
13
14
|
totalLiquidity: string;
|
|
14
15
|
};
|
|
16
|
+
hook: {
|
|
17
|
+
address: string;
|
|
18
|
+
} | null;
|
|
15
19
|
}
|
|
16
|
-
export declare function getTopPoolsApi(networkId: number, poolsFilter: string[], count: number): Promise<Pool[]>;
|
|
20
|
+
export declare function getTopPoolsApi(networkId: number, poolsFilter: string[], count: number, hooksTypeMap: HooksConfigMap): Promise<Pool[]>;
|
|
17
21
|
export {};
|
|
@@ -16,7 +16,6 @@ function createQuery(networkId, poolsFilter, count) {
|
|
|
16
16
|
const whereClause = {
|
|
17
17
|
chainIn: networkString,
|
|
18
18
|
protocolVersionIn: 3,
|
|
19
|
-
hasHook: false,
|
|
20
19
|
idIn: `[${poolIdString}]`,
|
|
21
20
|
...(disabledPoolIdsString && { idNotIn: `[${disabledPoolIdsString}]` }),
|
|
22
21
|
};
|
|
@@ -44,11 +43,14 @@ function createQuery(networkId, poolsFilter, count) {
|
|
|
44
43
|
dynamicData {
|
|
45
44
|
totalLiquidity
|
|
46
45
|
}
|
|
46
|
+
hook {
|
|
47
|
+
address
|
|
48
|
+
}
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
51
|
`;
|
|
50
52
|
}
|
|
51
|
-
async function getTopPoolsApi(networkId, poolsFilter, count) {
|
|
53
|
+
async function getTopPoolsApi(networkId, poolsFilter, count, hooksTypeMap) {
|
|
52
54
|
try {
|
|
53
55
|
const query = createQuery(networkId, poolsFilter, count);
|
|
54
56
|
const response = await axios_1.default.post(config_1.apiUrl, {
|
|
@@ -58,7 +60,8 @@ async function getTopPoolsApi(networkId, poolsFilter, count) {
|
|
|
58
60
|
'Content-Type': 'application/json',
|
|
59
61
|
},
|
|
60
62
|
});
|
|
61
|
-
const pools = response.data.data.poolGetAggregatorPools
|
|
63
|
+
const pools = response.data.data.poolGetAggregatorPools.filter(pool => !pool.hook ||
|
|
64
|
+
(pool.hook && pool.hook.address.toLowerCase() in hooksTypeMap));
|
|
62
65
|
return pools;
|
|
63
66
|
}
|
|
64
67
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTopPoolsApi.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getTopPoolsApi.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"getTopPoolsApi.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getTopPoolsApi.ts"],"names":[],"mappings":";;;;;AAiFA,wCA8BC;AA/GD,kDAA0B;AAC1B,qCAAqE;AA6BrE,SAAS,WAAW,CAClB,SAAiB,EACjB,WAAqB,EACrB,KAAa;IAEb,MAAM,qBAAqB,GAAG,wBAAe,CAAC,UAAU,CAAC,SAAS,CAAC;QACjE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;SACnB,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,aAAa,GAAG,yBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC;IAC5E,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,uCAAuC;IACvC,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,aAAa;QACtB,iBAAiB,EAAE,CAAC;QACpB,IAAI,EAAE,IAAI,YAAY,GAAG;QACzB,GAAG,CAAC,qBAAqB,IAAI,EAAE,OAAO,EAAE,IAAI,qBAAqB,GAAG,EAAE,CAAC;KACxE,CAAC;IAEF,iEAAiE;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;SACzC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;;;kBAGS,WAAW;iBACZ,KAAK;;;;;;;;;;;;;;;;;;;;;GAqBnB,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,WAAqB,EACrB,KAAa,EACb,YAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,eAAM,EACN;YACE,KAAK;SACN,EACD;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CACF,CAAC;QAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAC5D,IAAI,CAAC,EAAE,CACL,CAAC,IAAI,CAAC,IAAI;YACV,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,YAAY,CAAC,CACjE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0DAA0D;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi';
|
|
2
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
3
|
+
import { Log, Logger } from '../../../types';
|
|
4
|
+
import { StatefulEventSubscriber } from '../../../stateful-event-subscriber';
|
|
5
|
+
import { IDexHelper } from '../../../dex-helper/idex-helper';
|
|
6
|
+
import { DirectionalFeeConfig, DirectionalFeeHookState } from './directionalFeeHook';
|
|
7
|
+
import { StableSurgeConfig, StableSurgeHookState } from './stableSurgeHook';
|
|
8
|
+
export type HookState = DirectionalFeeHookState | StableSurgeHookState;
|
|
9
|
+
export type HookStateMap = {
|
|
10
|
+
[address: string]: HookState;
|
|
11
|
+
};
|
|
12
|
+
export type HookConfig = DirectionalFeeConfig | StableSurgeConfig;
|
|
13
|
+
export type HooksConfigMap = {
|
|
14
|
+
[hookAddress: string]: HookConfig;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* This will handle events/state for each supported hook contract. State is used during swap calculations.
|
|
18
|
+
* Each hook should have its own implementation file for state typing, fetching state and handling events.
|
|
19
|
+
*/
|
|
20
|
+
export declare class BalancerEventHook extends StatefulEventSubscriber<HookStateMap> {
|
|
21
|
+
readonly parentName: string;
|
|
22
|
+
protected network: number;
|
|
23
|
+
protected dexHelper: IDexHelper;
|
|
24
|
+
handlers: {
|
|
25
|
+
[event: string]: (event: any, state: DeepReadonly<HookStateMap>, log: Readonly<Log>) => DeepReadonly<HookStateMap> | null;
|
|
26
|
+
};
|
|
27
|
+
interfaces: Interface[];
|
|
28
|
+
logDecoder: (log: Log) => any;
|
|
29
|
+
addressesSubscribed: string[];
|
|
30
|
+
hooksConfigMap: HooksConfigMap;
|
|
31
|
+
constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger);
|
|
32
|
+
/**
|
|
33
|
+
* The function is called every time any of the subscribed
|
|
34
|
+
* addresses release log. The function accepts the current
|
|
35
|
+
* state, updates the state according to the log, and returns
|
|
36
|
+
* the updated state.
|
|
37
|
+
* @param state - Current state of event subscriber
|
|
38
|
+
* @param log - Log released by one of the subscribed addresses
|
|
39
|
+
* @returns Updates state of the event subscriber after the log
|
|
40
|
+
*/
|
|
41
|
+
protected processLog(state: DeepReadonly<HookStateMap>, log: Readonly<Log>): DeepReadonly<HookStateMap> | null;
|
|
42
|
+
/**
|
|
43
|
+
* The function generates state using on-chain calls. This
|
|
44
|
+
* function is called to regenerate state if the event based
|
|
45
|
+
* system fails to fetch events and the local state is no
|
|
46
|
+
* more correct.
|
|
47
|
+
* @param blockNumber - Blocknumber for which the state should
|
|
48
|
+
* should be generated
|
|
49
|
+
* @returns state of the event subscriber at blocknumber
|
|
50
|
+
*/
|
|
51
|
+
generateState(blockNumber: number): Promise<DeepReadonly<HookStateMap>>;
|
|
52
|
+
updateHookState(): Promise<void>;
|
|
53
|
+
combineInterfaces: (interfaces: Interface[]) => Interface;
|
|
54
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
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.BalancerEventHook = void 0;
|
|
7
|
+
const abi_1 = require("@ethersproject/abi");
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const utils_1 = require("../../../utils");
|
|
10
|
+
const stateful_event_subscriber_1 = require("../../../stateful-event-subscriber");
|
|
11
|
+
const loadHooksConfig_1 = require("./loadHooksConfig");
|
|
12
|
+
const directionalFeeHook_1 = require("./directionalFeeHook");
|
|
13
|
+
const directionalFeeHook_json_1 = __importDefault(require("../../../abi/balancer-v3/directionalFeeHook.json"));
|
|
14
|
+
const stableSurgeHook_1 = require("./stableSurgeHook");
|
|
15
|
+
const stableSurgeHook_json_1 = __importDefault(require("../../../abi/balancer-v3/stableSurgeHook.json"));
|
|
16
|
+
/**
|
|
17
|
+
* This will handle events/state for each supported hook contract. State is used during swap calculations.
|
|
18
|
+
* Each hook should have its own implementation file for state typing, fetching state and handling events.
|
|
19
|
+
*/
|
|
20
|
+
class BalancerEventHook extends stateful_event_subscriber_1.StatefulEventSubscriber {
|
|
21
|
+
parentName;
|
|
22
|
+
network;
|
|
23
|
+
dexHelper;
|
|
24
|
+
handlers = {};
|
|
25
|
+
interfaces;
|
|
26
|
+
logDecoder;
|
|
27
|
+
addressesSubscribed;
|
|
28
|
+
hooksConfigMap;
|
|
29
|
+
constructor(parentName, network, dexHelper, logger) {
|
|
30
|
+
super(parentName, 'Balancer_Hooks', dexHelper, logger);
|
|
31
|
+
this.parentName = parentName;
|
|
32
|
+
this.network = network;
|
|
33
|
+
this.dexHelper = dexHelper;
|
|
34
|
+
// Load supported hooks from config file
|
|
35
|
+
this.hooksConfigMap = (0, loadHooksConfig_1.loadHooksConfig)(network);
|
|
36
|
+
// Add each hook ABI here
|
|
37
|
+
this.interfaces = [
|
|
38
|
+
new abi_1.Interface(directionalFeeHook_json_1.default),
|
|
39
|
+
new abi_1.Interface(stableSurgeHook_json_1.default),
|
|
40
|
+
];
|
|
41
|
+
this.logDecoder = (log) => this.combineInterfaces(this.interfaces).parseLog(log);
|
|
42
|
+
// Subscribe to all hooks
|
|
43
|
+
this.addressesSubscribed = Object.keys(this.hooksConfigMap);
|
|
44
|
+
// StableSurgeHook events
|
|
45
|
+
this.handlers['ThresholdSurgePercentageChanged'] =
|
|
46
|
+
stableSurgeHook_1.thresholdSurgePercentageChangedEvent.bind(this);
|
|
47
|
+
this.handlers['MaxSurgeFeePercentageChanged'] =
|
|
48
|
+
stableSurgeHook_1.maxSurgeFeePercentageChangedEvent.bind(this);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The function is called every time any of the subscribed
|
|
52
|
+
* addresses release log. The function accepts the current
|
|
53
|
+
* state, updates the state according to the log, and returns
|
|
54
|
+
* the updated state.
|
|
55
|
+
* @param state - Current state of event subscriber
|
|
56
|
+
* @param log - Log released by one of the subscribed addresses
|
|
57
|
+
* @returns Updates state of the event subscriber after the log
|
|
58
|
+
*/
|
|
59
|
+
processLog(state, log) {
|
|
60
|
+
try {
|
|
61
|
+
const event = this.logDecoder(log);
|
|
62
|
+
if (event.name in this.handlers) {
|
|
63
|
+
return this.handlers[event.name](event, state, log);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
(0, utils_1.catchParseLogError)(e, this.logger);
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The function generates state using on-chain calls. This
|
|
73
|
+
* function is called to regenerate state if the event based
|
|
74
|
+
* system fails to fetch events and the local state is no
|
|
75
|
+
* more correct.
|
|
76
|
+
* @param blockNumber - Blocknumber for which the state should
|
|
77
|
+
* should be generated
|
|
78
|
+
* @returns state of the event subscriber at blocknumber
|
|
79
|
+
*/
|
|
80
|
+
async generateState(blockNumber) {
|
|
81
|
+
// Only hooks that are supported will be called
|
|
82
|
+
const hookState = {};
|
|
83
|
+
await Promise.all(Object.keys(this.hooksConfigMap).map(async (hookAddress) => {
|
|
84
|
+
const hookConfig = this.hooksConfigMap[hookAddress];
|
|
85
|
+
if (hookConfig.type === directionalFeeHook_1.DirectionalFee.type) {
|
|
86
|
+
hookState[hookAddress] = await (0, directionalFeeHook_1.getDirectionalFeeHookState)();
|
|
87
|
+
}
|
|
88
|
+
else if (hookConfig.type === stableSurgeHook_1.StableSurge.type) {
|
|
89
|
+
hookState[hookAddress] = await (0, stableSurgeHook_1.getStableSurgeHookState)(this.interfaces[1], hookAddress, hookConfig.factory, this.dexHelper, blockNumber);
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
return hookState;
|
|
93
|
+
}
|
|
94
|
+
async updateHookState() {
|
|
95
|
+
// Not all hooks need updated, only ones with settings/state that can't be handled by events
|
|
96
|
+
const blockNumber = await this.dexHelper.provider.getBlockNumber();
|
|
97
|
+
const currentState = lodash_1.default.cloneDeep(this.getStaleState()) || {};
|
|
98
|
+
await Promise.all(Object.keys(this.hooksConfigMap).map(async (hookAddress) => {
|
|
99
|
+
const hookConfig = this.hooksConfigMap[hookAddress];
|
|
100
|
+
// StableSurge can have new registered pools with associated hook state
|
|
101
|
+
if (hookConfig.type === stableSurgeHook_1.StableSurge.type) {
|
|
102
|
+
currentState[hookAddress] = await (0, stableSurgeHook_1.getStableSurgeHookState)(this.interfaces[1], hookAddress, hookConfig.factory, this.dexHelper, blockNumber);
|
|
103
|
+
}
|
|
104
|
+
}));
|
|
105
|
+
this.setState(currentState, blockNumber);
|
|
106
|
+
}
|
|
107
|
+
combineInterfaces = (interfaces) => {
|
|
108
|
+
// Use a Map to store unique fragments, keyed by their string representation
|
|
109
|
+
const uniqueFragments = new Map();
|
|
110
|
+
interfaces.forEach((interfaceInstance) => {
|
|
111
|
+
interfaceInstance.fragments.forEach((fragment) => {
|
|
112
|
+
let key;
|
|
113
|
+
if (fragment instanceof abi_1.FunctionFragment) {
|
|
114
|
+
// For functions, use the signature as the key
|
|
115
|
+
// This includes name and parameter types
|
|
116
|
+
key = fragment.format();
|
|
117
|
+
}
|
|
118
|
+
else if (fragment instanceof abi_1.EventFragment) {
|
|
119
|
+
// For events, use the signature as the key
|
|
120
|
+
key = fragment.format();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// For other fragment types (like errors), use their string representation
|
|
124
|
+
key = fragment.toString();
|
|
125
|
+
}
|
|
126
|
+
// Only add if we haven't seen this signature before
|
|
127
|
+
if (!uniqueFragments.has(key)) {
|
|
128
|
+
uniqueFragments.set(key, fragment);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
// Convert the Map values back to an array
|
|
133
|
+
const dedupedFragments = Array.from(uniqueFragments.values());
|
|
134
|
+
// Create a new interface with the deduped fragments
|
|
135
|
+
return new abi_1.Interface(dedupedFragments);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
exports.BalancerEventHook = BalancerEventHook;
|
|
139
|
+
//# sourceMappingURL=balancer-hook-event-subscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balancer-hook-event-subscriber.js","sourceRoot":"","sources":["../../../../src/dex/balancer-v3/hooks/balancer-hook-event-subscriber.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Log } from '../../../types';
|
|
2
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
3
|
+
import { HookStateMap } from './balancer-hook-event-subscriber';
|
|
4
|
+
export declare const DirectionalFee: {
|
|
5
|
+
type: "DirectionalFee";
|
|
6
|
+
};
|
|
7
|
+
export type DirectionalFeeConfig = {
|
|
8
|
+
type: typeof DirectionalFee.type;
|
|
9
|
+
address: string;
|
|
10
|
+
};
|
|
11
|
+
export type DirectionalFeeHookState = {
|
|
12
|
+
test: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Retrieve any initial hook state required.
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export declare function getDirectionalFeeHookState(): Promise<DirectionalFeeHookState>;
|
|
19
|
+
/**
|
|
20
|
+
* Handles the event emitted when a new hook is registered.
|
|
21
|
+
* @param event
|
|
22
|
+
* @param state
|
|
23
|
+
* @param log
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export declare function exitFeeHookExampleRegisteredEvent(event: any, state: DeepReadonly<HookStateMap>, log: Readonly<Log>): DeepReadonly<HookStateMap> | null;
|
|
@@ -0,0 +1,41 @@
|
|
|
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.DirectionalFee = void 0;
|
|
7
|
+
exports.getDirectionalFeeHookState = getDirectionalFeeHookState;
|
|
8
|
+
exports.exitFeeHookExampleRegisteredEvent = exitFeeHookExampleRegisteredEvent;
|
|
9
|
+
/**
|
|
10
|
+
* Each supported hook should implement its own version of this file making it easy to retrieve required onchain state.
|
|
11
|
+
*/
|
|
12
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
13
|
+
exports.DirectionalFee = {
|
|
14
|
+
type: 'DirectionalFee',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Retrieve any initial hook state required.
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
async function getDirectionalFeeHookState() {
|
|
21
|
+
// Note - for other hooks this function would retrieve any initial state using onchain calls
|
|
22
|
+
return { test: 'initial' };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Handles the event emitted when a new hook is registered.
|
|
26
|
+
* @param event
|
|
27
|
+
* @param state
|
|
28
|
+
* @param log
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
function exitFeeHookExampleRegisteredEvent(event, state, log) {
|
|
32
|
+
// Note - This is a non-important event but demos the use case. Other hooks would implement this for any state changes required for swap maths.
|
|
33
|
+
const hookAddress = event.args.hooksContract.toLowerCase();
|
|
34
|
+
if (!state[hookAddress]) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const newState = lodash_1.default.cloneDeep(state);
|
|
38
|
+
newState[hookAddress] = { test: event.args.pool };
|
|
39
|
+
return newState;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=directionalFeeHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directionalFeeHook.js","sourceRoot":"","sources":["../../../../src/dex/balancer-v3/hooks/directionalFeeHook.ts"],"names":[],"mappings":";;;;;;AAyBA,gEAGC;AASD,8EAaC;AAlDD;;GAEG;AACH,oDAAuB;AAKV,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAyB;CAChC,CAAC;AAWF;;;GAGG;AACI,KAAK,UAAU,0BAA0B;IAC9C,4FAA4F;IAC5F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iCAAiC,CAC/C,KAAU,EACV,KAAiC,EACjC,GAAkB;IAElB,+IAA+I;IAC/I,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAC,CAAC,SAAS,CAAC,KAAK,CAAiB,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadHooksConfig = loadHooksConfig;
|
|
4
|
+
const config_1 = require("./../config");
|
|
5
|
+
function loadHooksConfig(network) {
|
|
6
|
+
const hooks = config_1.BalancerV3Config.BalancerV3[network].hooks;
|
|
7
|
+
if (!hooks)
|
|
8
|
+
return {};
|
|
9
|
+
return Object.fromEntries(hooks.map(hook => [hook.address.toLowerCase(), hook]));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=loadHooksConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadHooksConfig.js","sourceRoot":"","sources":["../../../../src/dex/balancer-v3/hooks/loadHooksConfig.ts"],"names":[],"mappings":";;AAGA,0CAQC;AAXD,wCAA+C;AAG/C,SAAgB,eAAe,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,yBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;IAEzD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Log } from '../../../types';
|
|
2
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
3
|
+
import { HookStateMap } from './balancer-hook-event-subscriber';
|
|
4
|
+
import { Interface } from '@ethersproject/abi';
|
|
5
|
+
import { IDexHelper } from '../../../dex-helper';
|
|
6
|
+
export declare const StableSurge: {
|
|
7
|
+
type: "StableSurge";
|
|
8
|
+
};
|
|
9
|
+
export type StableSurgeConfig = {
|
|
10
|
+
type: typeof StableSurge.type;
|
|
11
|
+
factory: string;
|
|
12
|
+
address: string;
|
|
13
|
+
};
|
|
14
|
+
export type StableSurgePoolSetting = {
|
|
15
|
+
surgeThresholdPercentage?: bigint;
|
|
16
|
+
maxSurgeFeePercentage?: bigint;
|
|
17
|
+
};
|
|
18
|
+
export type StableSurgeHookState = Record<string, StableSurgePoolSetting>;
|
|
19
|
+
/**
|
|
20
|
+
* Retrieve any initial hook state required.
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
export declare function getStableSurgeHookState(hookInterface: Interface, hookAddress: string, factoryAddress: string, dexHelper: IDexHelper, blockNumber: number): Promise<StableSurgeHookState>;
|
|
24
|
+
/**
|
|
25
|
+
* Handles the event emitted when threshold surge percentage changed.
|
|
26
|
+
* @param event
|
|
27
|
+
* @param state
|
|
28
|
+
* @param log
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
export declare function thresholdSurgePercentageChangedEvent(event: any, state: DeepReadonly<HookStateMap>, log: Readonly<Log>): DeepReadonly<HookStateMap> | null;
|
|
32
|
+
/**
|
|
33
|
+
* Handles the event emitted when max surge fee percentage changed.
|
|
34
|
+
* @param event
|
|
35
|
+
* @param state
|
|
36
|
+
* @param log
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
export declare function maxSurgeFeePercentageChangedEvent(event: any, state: DeepReadonly<HookStateMap>, log: Readonly<Log>): DeepReadonly<HookStateMap> | null;
|