@stake-dao/reader 0.4.56 → 0.4.58
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/dist/esm/endpoints.js +1 -0
- package/dist/esm/endpoints.js.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lockers/fetch/index.js +1 -1
- package/dist/esm/lockers/fetch/index.js.map +1 -1
- package/dist/esm/strategies/pendle/pendlePoints.js +1 -0
- package/dist/esm/strategies/pendle/pendlePoints.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/votemarket/curve/fetchUserVlCvxClaimable.js +90 -40
- package/dist/esm/votemarket/curve/fetchUserVlCvxClaimable.js.map +1 -1
- package/dist/esm/votemarket/fetchCampaigns/index.js +64 -0
- package/dist/esm/votemarket/fetchCampaigns/index.js.map +1 -0
- package/dist/esm/votemarket/{fetchPendingRemoteCampaigns.js → fetchCampaigns/pendingRemote.js} +2 -1
- package/dist/esm/votemarket/fetchCampaigns/pendingRemote.js.map +1 -0
- package/dist/esm/votemarket/{fetchCampaigns.js → fetchCampaigns/processRawCampaigns.js} +15 -100
- package/dist/esm/votemarket/fetchCampaigns/processRawCampaigns.js.map +1 -0
- package/dist/esm/votemarket/fetchCampaigns/updateEpoch.js +41 -0
- package/dist/esm/votemarket/fetchCampaigns/updateEpoch.js.map +1 -0
- package/dist/types/endpoints.d.ts +1 -0
- package/dist/types/endpoints.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/index.d.ts +1 -0
- package/dist/types/lockers/fetch/index.d.ts.map +1 -1
- package/dist/types/strategies/pendle/pendlePoints.d.ts +4 -0
- package/dist/types/strategies/pendle/pendlePoints.d.ts.map +1 -1
- package/dist/types/votemarket/curve/fetchUserVlCvxClaimable.d.ts +17 -1
- package/dist/types/votemarket/curve/fetchUserVlCvxClaimable.d.ts.map +1 -1
- package/dist/types/votemarket/{fetchCampaigns.d.ts → fetchCampaigns/index.d.ts} +2 -2
- package/dist/types/votemarket/fetchCampaigns/index.d.ts.map +1 -0
- package/dist/types/votemarket/{fetchPendingRemoteCampaigns.d.ts → fetchCampaigns/pendingRemote.d.ts} +2 -1
- package/dist/types/votemarket/fetchCampaigns/pendingRemote.d.ts.map +1 -0
- package/dist/types/votemarket/fetchCampaigns/processRawCampaigns.d.ts +16 -0
- package/dist/types/votemarket/fetchCampaigns/processRawCampaigns.d.ts.map +1 -0
- package/dist/types/votemarket/fetchCampaigns/updateEpoch.d.ts +9 -0
- package/dist/types/votemarket/fetchCampaigns/updateEpoch.d.ts.map +1 -0
- package/dist/types/votemarket/types.d.ts +3 -1
- package/dist/types/votemarket/types.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/endpoints.ts +2 -0
- package/src/index.ts +3 -1
- package/src/lockers/fetch/index.ts +1 -1
- package/src/strategies/pendle/pendlePoints.ts +1 -0
- package/src/votemarket/curve/fetchUserVlCvxClaimable.ts +114 -44
- package/src/votemarket/fetchCampaigns/index.ts +97 -0
- package/src/votemarket/{fetchPendingRemoteCampaigns.ts → fetchCampaigns/pendingRemote.ts} +1 -0
- package/src/votemarket/{fetchCampaigns.ts → fetchCampaigns/processRawCampaigns.ts} +19 -149
- package/src/votemarket/fetchCampaigns/updateEpoch.ts +63 -0
- package/src/votemarket/types.ts +3 -1
- package/dist/esm/votemarket/fetchCampaigns.js.map +0 -1
- package/dist/esm/votemarket/fetchPendingRemoteCampaigns.js.map +0 -1
- package/dist/types/votemarket/fetchCampaigns.d.ts.map +0 -1
- package/dist/types/votemarket/fetchPendingRemoteCampaigns.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pendlePoints.d.ts","sourceRoot":"","sources":["../../../../src/strategies/pendle/pendlePoints.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"pendlePoints.d.ts","sourceRoot":"","sources":["../../../../src/strategies/pendle/pendlePoints.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;CAsBjB,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -2,7 +2,9 @@ import { type Address } from 'viem';
|
|
|
2
2
|
type Rpcs = {
|
|
3
3
|
[chainId: number]: string;
|
|
4
4
|
};
|
|
5
|
-
export declare const fetchUserVlCvxClaimable: (provider: any, rpc: Rpcs, user: string) => Promise<({
|
|
5
|
+
export declare const fetchUserVlCvxClaimable: (provider: any, rpc: Rpcs, user: string, chainId: number) => Promise<({
|
|
6
|
+
user: string;
|
|
7
|
+
recipient: string;
|
|
6
8
|
token: any;
|
|
7
9
|
claimable: string;
|
|
8
10
|
claimableUsd: number;
|
|
@@ -11,6 +13,20 @@ export declare const fetchUserVlCvxClaimable: (provider: any, rpc: Rpcs, user: s
|
|
|
11
13
|
proof: any;
|
|
12
14
|
merkleAddress: Address;
|
|
13
15
|
isClaimed: boolean;
|
|
16
|
+
chainId: number;
|
|
17
|
+
} | {
|
|
18
|
+
user: string;
|
|
19
|
+
recipient: string;
|
|
20
|
+
token: any;
|
|
21
|
+
claimable: string;
|
|
22
|
+
claimableUsd: number;
|
|
23
|
+
amount: string;
|
|
24
|
+
amountUsd: number;
|
|
25
|
+
proof: any;
|
|
26
|
+
merkleAddress: string;
|
|
27
|
+
isClaimed: any;
|
|
28
|
+
index: any;
|
|
29
|
+
chainId: 1;
|
|
14
30
|
} | undefined)[]>;
|
|
15
31
|
export {};
|
|
16
32
|
//# sourceMappingURL=fetchUserVlCvxClaimable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchUserVlCvxClaimable.d.ts","sourceRoot":"","sources":["../../../../src/votemarket/curve/fetchUserVlCvxClaimable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,MAAM,CAAA;AAO1D,KAAK,IAAI,GAAG;IACV,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B,CAAA;
|
|
1
|
+
{"version":3,"file":"fetchUserVlCvxClaimable.d.ts","sourceRoot":"","sources":["../../../../src/votemarket/curve/fetchUserVlCvxClaimable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,MAAM,CAAA;AAO1D,KAAK,IAAI,GAAG;IACV,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B,CAAA;AA4JD,eAAO,MAAM,uBAAuB,aAAoB,GAAG,OAAO,IAAI,QAAQ,MAAM,WAAW,MAAM;;;;;;;;;mBAnC3D,OAAO;;;;;;;;;;;;;;;;iBAiHhD,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Campaign } from '
|
|
1
|
+
import type { Campaign } from '../types.js';
|
|
2
2
|
export declare const CAMPAIGNS_CHUNK_SIZE = 10;
|
|
3
3
|
export declare const CLAIM_WINDOW_LENGTH = 24;
|
|
4
4
|
export declare const CLOSE_WINDOW_LENGTH = 4;
|
|
@@ -15,4 +15,4 @@ interface FetchCampaignsProps {
|
|
|
15
15
|
}
|
|
16
16
|
export declare const fetchCampaigns: ({ platform, gaugeController, chainId, rpcs, etherscanApiKey, fromBlock, mainnetVmRemote, }: FetchCampaignsProps) => Promise<Campaign[]>;
|
|
17
17
|
export {};
|
|
18
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/votemarket/fetchCampaigns/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAI3C,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACnC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,cAAc,+FAQxB,mBAAmB,KAAG,OAAO,CAAC,QAAQ,EAAE,CAgE1C,CAAA"}
|
package/dist/types/votemarket/{fetchPendingRemoteCampaigns.d.ts → fetchCampaigns/pendingRemote.d.ts}
RENAMED
|
@@ -39,8 +39,9 @@ export declare const fetchPendingRemoteCampaigns: ({ mainnetVmRemote, chainId, f
|
|
|
39
39
|
}[];
|
|
40
40
|
rewardAddress: any;
|
|
41
41
|
rewardChainId: bigint;
|
|
42
|
+
eventTimestamp: any;
|
|
42
43
|
}[];
|
|
43
44
|
remoteCampaignsUpdate: any[];
|
|
44
45
|
}>;
|
|
45
46
|
export {};
|
|
46
|
-
//# sourceMappingURL=
|
|
47
|
+
//# sourceMappingURL=pendingRemote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendingRemote.d.ts","sourceRoot":"","sources":["../../../../src/votemarket/fetchCampaigns/pendingRemote.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,UAAU,gCAAgC;IACxC,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,2BAA2B,yEAMrC,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsHlC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Campaign } from '../types.js';
|
|
2
|
+
export declare const CAMPAIGNS_CHUNK_SIZE = 10;
|
|
3
|
+
export declare const CLAIM_WINDOW_LENGTH = 24;
|
|
4
|
+
export declare const CLOSE_WINDOW_LENGTH = 4;
|
|
5
|
+
interface ProcessRawCampaignsProps {
|
|
6
|
+
rawCampaigns: any[];
|
|
7
|
+
platform: string;
|
|
8
|
+
gaugeController: string;
|
|
9
|
+
chainId: number;
|
|
10
|
+
rpcs: {
|
|
11
|
+
[chainId: number]: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare const processRawCampaigns: ({ rawCampaigns, platform, gaugeController, chainId, rpcs, }: ProcessRawCampaignsProps) => Promise<Campaign[]>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=processRawCampaigns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processRawCampaigns.d.ts","sourceRoot":"","sources":["../../../../src/votemarket/fetchCampaigns/processRawCampaigns.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG3C,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,UAAU,wBAAwB;IAChC,YAAY,EAAE,GAAG,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CACpC;AASD,eAAO,MAAM,mBAAmB,gEAM7B,wBAAwB,KAAG,OAAO,CAAC,QAAQ,EAAE,CAkM/C,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RawCampaign, RawPeriod } from '../types.js';
|
|
2
|
+
export declare const updateEpoch: ({ period, previousPeriod, campaign, totalVotes, remainingPeriods, }: {
|
|
3
|
+
period: RawPeriod;
|
|
4
|
+
previousPeriod?: RawPeriod;
|
|
5
|
+
campaign: RawCampaign;
|
|
6
|
+
totalVotes: bigint;
|
|
7
|
+
remainingPeriods: number;
|
|
8
|
+
}) => RawCampaign;
|
|
9
|
+
//# sourceMappingURL=updateEpoch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateEpoch.d.ts","sourceRoot":"","sources":["../../../../src/votemarket/fetchCampaigns/updateEpoch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEzD,eAAO,MAAM,WAAW,wEAMrB;IACD,MAAM,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,EAAE,WAAW,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;CACzB,gBA8CA,CAAA"}
|
|
@@ -5,7 +5,9 @@ export type Period = {
|
|
|
5
5
|
updated: boolean;
|
|
6
6
|
};
|
|
7
7
|
export type Campaign = {
|
|
8
|
+
key: string;
|
|
8
9
|
id: number;
|
|
10
|
+
platform: string;
|
|
9
11
|
chainId: number;
|
|
10
12
|
gauge: string;
|
|
11
13
|
gaugeChainId: number;
|
|
@@ -38,7 +40,7 @@ export type Campaign = {
|
|
|
38
40
|
addresses: string[];
|
|
39
41
|
isWhitelist: boolean;
|
|
40
42
|
isBlacklist: boolean;
|
|
41
|
-
previousPeriod: Period;
|
|
43
|
+
previousPeriod: Period | undefined;
|
|
42
44
|
currentPeriod: Period;
|
|
43
45
|
periodLeft: number;
|
|
44
46
|
periods: Period[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/votemarket/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/votemarket/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE;QACN,QAAQ,EAAE,OAAO,CAAA;QACjB,UAAU,EAAE,OAAO,CAAA;QACnB,SAAS,EAAE,OAAO,CAAA;QAClB,WAAW,EAAE,OAAO,CAAA;QACpB,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;IACD,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAID,MAAM,MAAM,SAAS,GAAG;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stake-dao/reader",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.58",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -34,11 +34,12 @@
|
|
|
34
34
|
"dayjs": "^1.11.11",
|
|
35
35
|
"graphql-request": "^6.0.0",
|
|
36
36
|
"lodash-es": "^4.17.21",
|
|
37
|
-
"viem": "^2.
|
|
38
|
-
"@stake-dao/constants": "0.4.
|
|
37
|
+
"viem": "^2.21.53",
|
|
38
|
+
"@stake-dao/constants": "0.4.26"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@types/lodash-es": "^4.17.12"
|
|
41
|
+
"@types/lodash-es": "^4.17.12",
|
|
42
|
+
"typescript": "5.7.3"
|
|
42
43
|
},
|
|
43
44
|
"author": "Stake DAO",
|
|
44
45
|
"contributors": [
|
package/src/endpoints.ts
CHANGED
|
@@ -2,6 +2,8 @@ export const GH_STAKE_DAO_RAW_ORG = 'https://raw.githubusercontent.com/stake-dao
|
|
|
2
2
|
export const GH_STAKE_DAO_BOUNTIES_REPORT = `${GH_STAKE_DAO_RAW_ORG}/bounties-report`
|
|
3
3
|
export const GH_STAKE_DAO_VM_DATA = `${GH_STAKE_DAO_RAW_ORG}/votemarket-data`
|
|
4
4
|
|
|
5
|
+
export const STAKE_DAO_API = 'https://api.stakedao.org/api'
|
|
6
|
+
|
|
5
7
|
export const LLAMA_API_URL = 'https://coins.llama.fi'
|
|
6
8
|
export const THE_GRAPH_BASE_URL =
|
|
7
9
|
'https://gateway-arbitrum.network.thegraph.com/api/e3c2ef8231c88703a5b450c188ce2db6/subgraphs/id'
|
package/src/index.ts
CHANGED
|
@@ -67,7 +67,9 @@ export { fetchStakeDao } from './strategies/stakeDao/fetch.js'
|
|
|
67
67
|
/// --- VOTEMARKET
|
|
68
68
|
|
|
69
69
|
// General
|
|
70
|
-
export {
|
|
70
|
+
export { processRawCampaigns } from './votemarket/fetchCampaigns/processRawCampaigns.js'
|
|
71
|
+
export { fetchPendingRemoteCampaigns } from './votemarket/fetchCampaigns/pendingRemote.js'
|
|
72
|
+
export { fetchCampaigns } from './votemarket/fetchCampaigns/index.js'
|
|
71
73
|
export type { Campaign } from './votemarket/types.js'
|
|
72
74
|
|
|
73
75
|
// Curve
|
|
@@ -188,7 +188,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
188
188
|
const rewardPrice = prices.find((p) => p.address === r.address)?.usdPrice || 0
|
|
189
189
|
|
|
190
190
|
const periodFinish = Number(formatUnits(rawData ? rawData[2] : Zero, 0))
|
|
191
|
-
const streaming = periodFinish > Math.floor(Date.now() / 1000)
|
|
191
|
+
const streaming = r.distribution === 'streamed' && periodFinish > Math.floor(Date.now() / 1000)
|
|
192
192
|
|
|
193
193
|
const rate = rawData ? rawData[3] : Zero
|
|
194
194
|
const oneYearRate = rate * BigInt(ONE_YEAR)
|
|
@@ -19,6 +19,7 @@ const pendlePoints = {
|
|
|
19
19
|
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
20
20
|
],
|
|
21
21
|
'0x353d0b2efb5b3a7987fb06d30ad6160522d08426': [{ multiplier: 15, label: 'Resolv Points' }],
|
|
22
|
+
'0x82d810ededb09614144900f914e75dd76700f19d': [{ multiplier: 45, label: 'Resolv Points' }],
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
export default pendlePoints
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Zero, contract, tokenWithAddress } from '@stake-dao/constants'
|
|
2
2
|
import { type Address, formatUnits, parseAbi } from 'viem'
|
|
3
3
|
import { mainnet } from 'viem/chains'
|
|
4
|
-
import { GH_STAKE_DAO_BOUNTIES_REPORT } from '../../endpoints.js'
|
|
4
|
+
import { GH_STAKE_DAO_BOUNTIES_REPORT, STAKE_DAO_API } from '../../endpoints.js'
|
|
5
5
|
import { type Price, getPrices } from '../../prices.js'
|
|
6
6
|
import { rpcFetchTokensData } from '../../tokens.js'
|
|
7
7
|
import { equalTlc, multicall } from '../../utils.js'
|
|
@@ -18,44 +18,52 @@ type UnknownToken = {
|
|
|
18
18
|
chainId: number
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
const getMerkleData = async () => {
|
|
22
|
-
const [delegators, nonDelegators] = await Promise.all([
|
|
21
|
+
const getMerkleData = async (chainId: number) => {
|
|
22
|
+
const [delegators, nonDelegators, votiumMerkle] = await Promise.all([
|
|
23
|
+
chainId === mainnet.id
|
|
24
|
+
? fetch(
|
|
25
|
+
`${GH_STAKE_DAO_BOUNTIES_REPORT}/refs/heads/main/bounties-reports/latest/vlCVX/vlcvx_merkle_delegators.json`,
|
|
26
|
+
).then((res) => res.json())
|
|
27
|
+
: {},
|
|
23
28
|
fetch(
|
|
24
|
-
`${GH_STAKE_DAO_BOUNTIES_REPORT}/refs/heads/main/bounties-reports/latest/vlCVX/
|
|
29
|
+
`${GH_STAKE_DAO_BOUNTIES_REPORT}/refs/heads/main/bounties-reports/latest/vlCVX/vlcvx_merkle${
|
|
30
|
+
chainId === mainnet.id ? '' : `_${chainId}`
|
|
31
|
+
}.json`,
|
|
25
32
|
).then((res) => res.json()),
|
|
26
|
-
|
|
27
|
-
(res) => res.json()
|
|
28
|
-
|
|
33
|
+
chainId === mainnet.id
|
|
34
|
+
? fetch(`${STAKE_DAO_API}/votemarket/votium_merkles.json`).then((res) => res.json())
|
|
35
|
+
: { claims: {} },
|
|
29
36
|
])
|
|
30
37
|
|
|
31
|
-
return { delegators, nonDelegators }
|
|
38
|
+
return { delegators, nonDelegators, votiumMerkle }
|
|
32
39
|
}
|
|
33
40
|
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const validateMerkleRoots = (delegatorRoot: string, nonDelegatorRoot: string, merkleData: any) => {
|
|
38
|
-
const delegatorMatches = isRootMatch(delegatorRoot, merkleData.delegators.merkleRoot)
|
|
39
|
-
const nonDelegatorMatches = isRootMatch(nonDelegatorRoot, merkleData.nonDelegators.merkleRoot)
|
|
41
|
+
const validateMerkleRoots = (delegatorRoot: string, nonDelegatorRoot: string, merkleData: any, isMainnet: boolean) => {
|
|
42
|
+
const delegatorMatches = isMainnet ? equalTlc(delegatorRoot, merkleData.delegators.merkleRoot) : false
|
|
43
|
+
const nonDelegatorMatches = equalTlc(nonDelegatorRoot, merkleData.nonDelegators.merkleRoot)
|
|
40
44
|
return delegatorMatches || nonDelegatorMatches
|
|
41
45
|
}
|
|
42
46
|
|
|
43
|
-
const getMerkleRoots = async (provider: any) => {
|
|
47
|
+
const getMerkleRoots = async (provider: any, user: string) => {
|
|
44
48
|
const contracts = [contract('vlCvxDelegatorMerkle', mainnet.id), contract('vlCvxNotDelegatorMerkle', mainnet.id)]
|
|
45
49
|
|
|
46
50
|
const result = await multicall(
|
|
47
51
|
provider,
|
|
48
|
-
contracts.
|
|
49
|
-
address,
|
|
50
|
-
name: '
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
contracts.flatMap((address) => [
|
|
53
|
+
{ address, name: 'root', params: [] },
|
|
54
|
+
{ address, name: 'recipients', params: [user] },
|
|
55
|
+
]),
|
|
56
|
+
parseAbi([
|
|
57
|
+
'function root() external view returns (bytes32)',
|
|
58
|
+
'function recipients(address) external view returns (address)',
|
|
59
|
+
]),
|
|
54
60
|
)
|
|
55
61
|
|
|
56
62
|
return {
|
|
57
63
|
delegatorRoot: result[0].result,
|
|
58
|
-
|
|
64
|
+
delegatorRecipient: result[1].result,
|
|
65
|
+
nonDelegatorRoot: result[2].result,
|
|
66
|
+
nonDelegatorRecipient: result[3].result,
|
|
59
67
|
}
|
|
60
68
|
}
|
|
61
69
|
|
|
@@ -64,11 +72,7 @@ const getClaimedData = async (provider: any, tokens: string[], user: string, con
|
|
|
64
72
|
tokens.length > 0
|
|
65
73
|
? await multicall(
|
|
66
74
|
provider,
|
|
67
|
-
tokens.
|
|
68
|
-
address: contract,
|
|
69
|
-
name: 'claimed',
|
|
70
|
-
params: [user, t],
|
|
71
|
-
})),
|
|
75
|
+
tokens.flatMap((t) => [{ address: contract, name: 'claimed', params: [user, t] }]),
|
|
72
76
|
parseAbi(['function claimed(address,address) external view returns (uint256)']),
|
|
73
77
|
)
|
|
74
78
|
: []
|
|
@@ -79,12 +83,33 @@ const getClaimedData = async (provider: any, tokens: string[], user: string, con
|
|
|
79
83
|
}))
|
|
80
84
|
}
|
|
81
85
|
|
|
86
|
+
const getVotiumClaimedData = async (provider: any, merkle: any) => {
|
|
87
|
+
const rawClaimed = await multicall(
|
|
88
|
+
provider,
|
|
89
|
+
Object.keys(merkle).map((t) => ({
|
|
90
|
+
address: contract('votiumMerkle'),
|
|
91
|
+
name: 'isClaimed',
|
|
92
|
+
params: [t, merkle[t].index],
|
|
93
|
+
})),
|
|
94
|
+
parseAbi(['function isClaimed(address,uint256) external view returns(bool)']),
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return Object.keys(merkle).map((t, index) => ({
|
|
98
|
+
...merkle[t],
|
|
99
|
+
token: t,
|
|
100
|
+
claimed: rawClaimed[index].result,
|
|
101
|
+
}))
|
|
102
|
+
}
|
|
103
|
+
|
|
82
104
|
const getParsedData = (
|
|
105
|
+
user: string,
|
|
106
|
+
recipient: string,
|
|
83
107
|
merkleAddress: string,
|
|
84
108
|
userData: any,
|
|
85
109
|
unknownTokensData: any[],
|
|
86
110
|
claimedData: any[],
|
|
87
111
|
prices: Price[],
|
|
112
|
+
chainId: number,
|
|
88
113
|
) => {
|
|
89
114
|
return userData
|
|
90
115
|
? Object.keys(userData.tokens).map((token) => {
|
|
@@ -95,6 +120,8 @@ const getParsedData = (
|
|
|
95
120
|
const claimable = BigInt(userData.tokens[token].amount) - claimed
|
|
96
121
|
|
|
97
122
|
return {
|
|
123
|
+
user,
|
|
124
|
+
recipient,
|
|
98
125
|
token: rewardToken,
|
|
99
126
|
claimable: formatUnits(claimable, 0),
|
|
100
127
|
claimableUsd: Number(formatUnits(claimable, rewardToken?.decimals || 18)) * tokenPrice,
|
|
@@ -104,71 +131,114 @@ const getParsedData = (
|
|
|
104
131
|
proof: userData.tokens[token].proof,
|
|
105
132
|
merkleAddress: merkleAddress as Address,
|
|
106
133
|
isClaimed: claimable === Zero,
|
|
134
|
+
chainId,
|
|
107
135
|
}
|
|
108
136
|
})
|
|
109
137
|
: undefined
|
|
110
138
|
}
|
|
111
139
|
|
|
112
|
-
const
|
|
140
|
+
const getVotiumParsedData = (user: string, userData: any[], unknownTokensData: any[], prices: Price[]) => {
|
|
141
|
+
return userData
|
|
142
|
+
? userData.map((ud) => {
|
|
143
|
+
const rewardToken = tokenWithAddress(ud.token) || unknownTokensData.find((t) => equalTlc(t.address, ud.token))
|
|
144
|
+
|
|
145
|
+
const tokenPrice = prices.find((p) => equalTlc(ud.token, p.address))?.usdPrice || 0
|
|
113
146
|
|
|
114
|
-
|
|
115
|
-
|
|
147
|
+
return {
|
|
148
|
+
user,
|
|
149
|
+
recipient: user,
|
|
150
|
+
token: rewardToken,
|
|
151
|
+
claimable: ud.claimed ? '0' : formatUnits(BigInt(ud.amount), 0),
|
|
152
|
+
claimableUsd: ud.claimed
|
|
153
|
+
? 0
|
|
154
|
+
: Number(formatUnits(BigInt(ud.amount), rewardToken?.decimals || 18)) * tokenPrice,
|
|
155
|
+
amount: formatUnits(BigInt(ud.amount), 0),
|
|
156
|
+
amountUsd: Number(formatUnits(BigInt(ud.amount), rewardToken?.decimals || 18)) * tokenPrice,
|
|
157
|
+
proof: ud.proof,
|
|
158
|
+
merkleAddress: contract('votiumMerkle'),
|
|
159
|
+
isClaimed: ud.claimed,
|
|
160
|
+
index: ud.index,
|
|
161
|
+
chainId: mainnet.id,
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
: undefined
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export const fetchUserVlCvxClaimable = async (provider: any, rpc: Rpcs, user: string, chainId: number) => {
|
|
168
|
+
const { delegatorRoot, delegatorRecipient, nonDelegatorRoot, nonDelegatorRecipient } = await getMerkleRoots(
|
|
169
|
+
provider,
|
|
170
|
+
user,
|
|
171
|
+
)
|
|
116
172
|
|
|
117
173
|
let vlCvxClaimable: any
|
|
174
|
+
let votiumMerkleData: any
|
|
118
175
|
|
|
119
176
|
try {
|
|
120
|
-
const merkleData = await getMerkleData()
|
|
121
|
-
if (validateMerkleRoots(delegatorRoot, nonDelegatorRoot, merkleData)) {
|
|
122
|
-
vlCvxClaimable = merkleData
|
|
177
|
+
const merkleData = await getMerkleData(chainId)
|
|
178
|
+
if (validateMerkleRoots(delegatorRoot, nonDelegatorRoot, merkleData, chainId === mainnet.id)) {
|
|
179
|
+
vlCvxClaimable = { delegators: merkleData.delegators, nonDelegators: merkleData.nonDelegators }
|
|
123
180
|
}
|
|
181
|
+
votiumMerkleData = merkleData.votiumMerkle.claims[user]
|
|
124
182
|
} catch {}
|
|
125
183
|
|
|
126
|
-
if (!vlCvxClaimable) {
|
|
127
|
-
|
|
184
|
+
if (!vlCvxClaimable && !votiumMerkleData) {
|
|
185
|
+
console.error('Could not find valid merkle data')
|
|
186
|
+
return []
|
|
128
187
|
}
|
|
129
188
|
|
|
130
|
-
const vlCvxUserDelegated = vlCvxClaimable?.
|
|
131
|
-
const vlCvxUserNotDelegated = vlCvxClaimable
|
|
189
|
+
const vlCvxUserDelegated = vlCvxClaimable.delegators?.claims?.[user]
|
|
190
|
+
const vlCvxUserNotDelegated = vlCvxClaimable.nonDelegators.claims[user]
|
|
132
191
|
|
|
133
192
|
const tokensDelegated = Object.keys(vlCvxUserDelegated?.tokens || {})
|
|
134
193
|
const tokensNotDelegated = Object.keys(vlCvxUserNotDelegated?.tokens || {})
|
|
194
|
+
const tokensVotium = Object.keys(votiumMerkleData?.tokens || {})
|
|
135
195
|
|
|
136
|
-
const tokens = [...tokensDelegated, ...tokensNotDelegated]
|
|
196
|
+
const tokens = [...tokensDelegated, ...tokensNotDelegated, ...tokensVotium]
|
|
137
197
|
|
|
138
198
|
if (!tokens.length) return []
|
|
139
199
|
|
|
140
|
-
const [delegatedClaimed, notDelegatedClaimed] = await Promise.all([
|
|
200
|
+
const [delegatedClaimed, notDelegatedClaimed, votiumClaimed] = await Promise.all([
|
|
141
201
|
getClaimedData(provider, tokensDelegated, user, contract('vlCvxDelegatorMerkle')),
|
|
142
202
|
getClaimedData(provider, tokensNotDelegated, user, contract('vlCvxNotDelegatorMerkle')),
|
|
203
|
+
votiumMerkleData?.tokens && Object.keys(votiumMerkleData?.tokens).length > 0
|
|
204
|
+
? getVotiumClaimedData(provider, votiumMerkleData?.tokens)
|
|
205
|
+
: [],
|
|
143
206
|
])
|
|
144
207
|
|
|
145
208
|
const unknownTokens = tokens.filter((t) => !tokenWithAddress(t))
|
|
146
|
-
const rawUnknownTokensData = await rpcFetchTokensData(
|
|
209
|
+
const rawUnknownTokensData = await rpcFetchTokensData(chainId, rpc[chainId]!, unknownTokens)
|
|
147
210
|
const unknownTokensData: UnknownToken[] = rawUnknownTokensData.map((t) => ({
|
|
148
211
|
name: t.name,
|
|
149
212
|
symbol: t.symbol,
|
|
150
213
|
address: t.tokenAddress,
|
|
151
214
|
decimals: Number(t.decimals),
|
|
152
|
-
chainId
|
|
215
|
+
chainId,
|
|
153
216
|
}))
|
|
154
217
|
|
|
155
|
-
const prices = await getPrices(tokens.map((t) => ({ address: t })) as any[],
|
|
218
|
+
const prices = await getPrices(tokens.map((t) => ({ address: t })) as any[], chainId)
|
|
156
219
|
|
|
157
220
|
return [
|
|
158
221
|
getParsedData(
|
|
159
|
-
|
|
222
|
+
user,
|
|
223
|
+
delegatorRecipient,
|
|
224
|
+
contract('vlCvxDelegatorMerkle'),
|
|
160
225
|
vlCvxUserDelegated,
|
|
161
226
|
unknownTokensData,
|
|
162
227
|
delegatedClaimed,
|
|
163
228
|
prices,
|
|
229
|
+
chainId,
|
|
164
230
|
),
|
|
165
231
|
getParsedData(
|
|
166
|
-
|
|
232
|
+
user,
|
|
233
|
+
nonDelegatorRecipient,
|
|
234
|
+
contract('vlCvxNotDelegatorMerkle', chainId),
|
|
167
235
|
vlCvxUserNotDelegated,
|
|
168
236
|
unknownTokensData,
|
|
169
237
|
notDelegatedClaimed,
|
|
170
238
|
prices,
|
|
239
|
+
chainId,
|
|
171
240
|
),
|
|
241
|
+
getVotiumParsedData(user, votiumClaimed, unknownTokensData, prices),
|
|
172
242
|
]
|
|
173
243
|
.filter(Boolean)
|
|
174
244
|
.flat()
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { contract } from '@stake-dao/constants'
|
|
2
|
+
import { range } from 'lodash-es'
|
|
3
|
+
import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from 'viem'
|
|
4
|
+
import { arbitrum } from 'viem/chains'
|
|
5
|
+
import batchCampaigns from '../../bytecodes/votemarket/batchCampaigns.js'
|
|
6
|
+
import { batchJsonRpc, concatBytecode, equalTlc, rpcCall } from '../../utils.js'
|
|
7
|
+
import type { Campaign } from '../types.js'
|
|
8
|
+
import { fetchPendingRemoteCampaigns } from './pendingRemote.js'
|
|
9
|
+
import { processRawCampaigns } from './processRawCampaigns.js'
|
|
10
|
+
|
|
11
|
+
export const CAMPAIGNS_CHUNK_SIZE = 10
|
|
12
|
+
export const CLAIM_WINDOW_LENGTH = 24 // weeks
|
|
13
|
+
export const CLOSE_WINDOW_LENGTH = 4 // weeks
|
|
14
|
+
|
|
15
|
+
interface FetchCampaignsProps {
|
|
16
|
+
platform: string
|
|
17
|
+
gaugeController: string
|
|
18
|
+
chainId: number
|
|
19
|
+
rpcs: { [chainId: number]: string }
|
|
20
|
+
etherscanApiKey?: string
|
|
21
|
+
fromBlock?: number
|
|
22
|
+
mainnetVmRemote?: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const fetchCampaigns = async ({
|
|
26
|
+
platform,
|
|
27
|
+
gaugeController,
|
|
28
|
+
chainId,
|
|
29
|
+
rpcs,
|
|
30
|
+
etherscanApiKey,
|
|
31
|
+
fromBlock,
|
|
32
|
+
mainnetVmRemote,
|
|
33
|
+
}: FetchCampaignsProps): Promise<Campaign[]> => {
|
|
34
|
+
const rpc = rpcs[chainId]!
|
|
35
|
+
|
|
36
|
+
const nCampaignsRequest = await rpcCall(rpc, [{ to: platform, data: '0x7274e30d' }]) // campaignCount
|
|
37
|
+
const nCampaigns = Number(
|
|
38
|
+
decodeAbiParameters([{ type: 'uint256', name: 'campaignCount' }], nCampaignsRequest[0].result),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const calls = range(0, nCampaigns, CAMPAIGNS_CHUNK_SIZE).map((skip) => {
|
|
42
|
+
const inputParams = [
|
|
43
|
+
chainId,
|
|
44
|
+
platform,
|
|
45
|
+
contract('laPosteTokenFactory', chainId),
|
|
46
|
+
skip,
|
|
47
|
+
skip + CAMPAIGNS_CHUNK_SIZE > nCampaigns ? nCampaigns : skip + CAMPAIGNS_CHUNK_SIZE,
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
const inputData = encodeAbiParameters(parseAbiParameters(batchCampaigns.inputType[1]!) as any, inputParams)
|
|
51
|
+
return concatBytecode(batchCampaigns.bytecode[1]!, inputData)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
let rawCampaigns = await batchJsonRpc({
|
|
55
|
+
rpc,
|
|
56
|
+
calls,
|
|
57
|
+
outputTypeAbi: batchCampaigns.outputType![1]!,
|
|
58
|
+
parse: false,
|
|
59
|
+
callsKey: `votemarket/fetchCampaigns.ts: rawCampaigns - chainId ${chainId} - rpc ${rpc}`,
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
if (chainId === arbitrum.id && etherscanApiKey && fromBlock && mainnetVmRemote) {
|
|
63
|
+
const nextIndex = rawCampaigns.length > 0 ? Math.max(...rawCampaigns.map((rc) => Number(rc.id))) + 1 : 0
|
|
64
|
+
const { remoteCampaigns: pendingRemoteCampaigns } = await fetchPendingRemoteCampaigns({
|
|
65
|
+
mainnetVmRemote,
|
|
66
|
+
chainId,
|
|
67
|
+
fromBlock,
|
|
68
|
+
etherscanApiKey,
|
|
69
|
+
nextIndex,
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
rawCampaigns = [
|
|
73
|
+
...rawCampaigns,
|
|
74
|
+
...pendingRemoteCampaigns.filter((rmtC) => {
|
|
75
|
+
const existingCampaign = rawCampaigns.find(
|
|
76
|
+
(rc) =>
|
|
77
|
+
rc.addresses.length === rmtC.addresses.length &&
|
|
78
|
+
rc.addresses.every((rca, index) => equalTlc(rca, rmtC.addresses[index])) &&
|
|
79
|
+
equalTlc(rc.rewardAddress, rmtC.rewardAddress) &&
|
|
80
|
+
rc.rewardChainId === rmtC.rewardChainId &&
|
|
81
|
+
rc.campaign.startTimestamp === rmtC.campaign.startTimestamp &&
|
|
82
|
+
rc.campaign.endTimestamp === rmtC.campaign.endTimestamp &&
|
|
83
|
+
rc.campaign.numberOfPeriods === rmtC.campaign.numberOfPeriods &&
|
|
84
|
+
rc.campaign.maxRewardPerVote === rmtC.campaign.maxRewardPerVote &&
|
|
85
|
+
rc.campaign.totalRewardAmount === rmtC.campaign.totalRewardAmount &&
|
|
86
|
+
equalTlc(rc.campaign.gauge, rmtC.campaign.gauge) &&
|
|
87
|
+
equalTlc(rc.campaign.hook, rmtC.campaign.hook) &&
|
|
88
|
+
equalTlc(rc.campaign.manager, rmtC.campaign.manager),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
return typeof existingCampaign === 'undefined'
|
|
92
|
+
}),
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return await processRawCampaigns({ rawCampaigns, platform, chainId, gaugeController, rpcs })
|
|
97
|
+
}
|