@factordao/governance 1.0.3 → 1.0.5

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/README.md CHANGED
@@ -7,12 +7,12 @@ This repository contains the governance for Factor.
7
7
  - [x] Create the function to get all the vaults for all the available chains
8
8
  - [x] Create the subgraph to track the `emit Vote(user, vaults[i], weights[i], newVote);` event from `FactorScale`
9
9
  - [x] Create the function to get all the votes for a given user
10
- - [] Create the function to get all the votes for all the users
10
+ - [x] Create the function to get all the votes for all the users
11
11
  - [ ] Create the function to get all the votes allocations
12
- - [ ] Create the subgraph to track the `emit ReceiveVotingResults(wTime, vaults, fctrAmounts);` event from `FactorGaugeController` of both Arbitrum and Base which is emitted after the broadcast
13
- - [ ] Create the function to get all the rewards for a given vault
14
- - [ ] Create the function to get all the rewards for all vaults
15
- - [ ] Create the subgraph to track the `emit UpdateVaultReward(vault, newSpeed, uint128(block.timestamp) + WEEK);` event from `FactorGaugeController`
16
- - [ ] Create the function to get the inventives, if they're active or not and how much they're worth
12
+ - [x] Create the subgraph to track the `emit ReceiveVotingResults(wTime, vaults, fctrAmounts);` event from `FactorGaugeController` of both Arbitrum and Base which is emitted after the broadcast
13
+ - [x] Create the subgraph to track the `emit UpdateVaultReward(vault, newSpeed, uint128(block.timestamp) + WEEK);` event from `FactorGaugeController`
14
+ - [x] Create the function to get all the rewards for a given vault
15
+ - [x] Create the function to get all the rewards for all vaults
16
+ - [ ] Create the function to get the incentives, if they're active or not and how much they're worth
17
17
  - [ ] Create the function to get the `function earned(address account, address _rewardsToken)` for a given account and rewards token to get the rewards for the user (?)
18
- - [ ] Calculate the APY for scale and the given vault (?)
18
+ - [ ] Calculate the APY for scale and the given vault (?)
package/dist/cjs/index.js CHANGED
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAvailableVaultsForVoting = getAvailableVaultsForVoting;
4
4
  exports.getVotesForUser = getVotesForUser;
5
5
  exports.getVotesForAllUsers = getVotesForAllUsers;
6
+ exports.getRewardsForVault = getRewardsForVault;
7
+ exports.getRewardsForAllVaults = getRewardsForAllVaults;
8
+ exports.getTokenBalancesForUser = getTokenBalancesForUser;
9
+ exports.getTokenBalancesForAllUsers = getTokenBalancesForAllUsers;
6
10
  const subgraphs_1 = require("./utils/subgraphs");
7
11
  async function getAvailableVaultsForVoting(chainId, environment) {
8
12
  const subgraphUrl = subgraphs_1.factorScaleSubgraphUrl[chainId]?.[environment];
@@ -80,4 +84,230 @@ async function getVotesForAllUsers(chainId, environment) {
80
84
  }
81
85
  return votesByVault;
82
86
  }
87
+ const DECIMALS = 18n;
88
+ const DECIMALS_DIVISOR = 10n ** DECIMALS;
89
+ function formatWeiToDecimal(wei) {
90
+ const whole = wei / DECIMALS_DIVISOR;
91
+ const remainder = wei % DECIMALS_DIVISOR;
92
+ if (remainder === 0n) {
93
+ return whole.toString();
94
+ }
95
+ const remainderStr = remainder.toString().padStart(Number(DECIMALS), '0');
96
+ const trimmed = remainderStr.replace(/0+$/, '');
97
+ return `${whole}.${trimmed}`;
98
+ }
99
+ function transformVaultReward(data) {
100
+ const fctrPerSec = BigInt(data.fctrPerSec);
101
+ const incentiveEndsAt = Number(data.incentiveEndsAt);
102
+ const timestamp = Number(data.timestamp);
103
+ const durationSec = BigInt(incentiveEndsAt - timestamp);
104
+ const totalIncentive = fctrPerSec * durationSec;
105
+ return {
106
+ vault: data.vault,
107
+ fctrPerSec,
108
+ incentiveEndsAt,
109
+ block: Number(data.block),
110
+ timestamp,
111
+ txid: data.txid,
112
+ totalIncentive,
113
+ totalIncentiveFmt: formatWeiToDecimal(totalIncentive),
114
+ };
115
+ }
116
+ async function getRewardsForVault(chainId, environment, vault) {
117
+ const subgraphUrl = subgraphs_1.factorGaugeControllerSubgraphUrl[chainId]?.[environment];
118
+ if (!subgraphUrl) {
119
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
120
+ }
121
+ const query = `
122
+ {
123
+ vaultReward(id: "${vault.toLowerCase()}") {
124
+ id
125
+ vault
126
+ fctrPerSec
127
+ incentiveEndsAt
128
+ block
129
+ timestamp
130
+ txid
131
+ }
132
+ }
133
+ `;
134
+ const response = await fetch(subgraphUrl, {
135
+ method: 'POST',
136
+ headers: {
137
+ 'Content-Type': 'application/json',
138
+ },
139
+ body: JSON.stringify({ query }),
140
+ });
141
+ const data = await response.json();
142
+ if (!data.data.vaultReward) {
143
+ return null;
144
+ }
145
+ return transformVaultReward(data.data.vaultReward);
146
+ }
147
+ async function getRewardsForAllVaults(chainId, environment) {
148
+ const subgraphUrl = subgraphs_1.factorGaugeControllerSubgraphUrl[chainId]?.[environment];
149
+ if (!subgraphUrl) {
150
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
151
+ }
152
+ const rewards = await (0, subgraphs_1.fetchPaginatedData)(subgraphUrl, (first, skip) => `
153
+ {
154
+ vaultRewards(
155
+ first: ${first}
156
+ skip: ${skip}
157
+ orderBy: timestamp
158
+ orderDirection: desc
159
+ ) {
160
+ id
161
+ vault
162
+ fctrPerSec
163
+ incentiveEndsAt
164
+ block
165
+ timestamp
166
+ txid
167
+ }
168
+ }
169
+ `, (data) => data.data.vaultRewards || []);
170
+ return rewards.map(transformVaultReward);
171
+ }
172
+ function formatBalanceToDecimal(balance, decimals) {
173
+ const divisor = 10n ** BigInt(decimals);
174
+ const whole = balance / divisor;
175
+ const remainder = balance % divisor;
176
+ if (remainder === 0n) {
177
+ return whole.toString();
178
+ }
179
+ const remainderStr = remainder.toString().padStart(decimals, '0');
180
+ const trimmed = remainderStr.replace(/0+$/, '');
181
+ return `${whole}.${trimmed}`;
182
+ }
183
+ // veFCTR voting power calculation based on VeBalanceLib.sol
184
+ // MAX_LOCK_TIME = 104 weeks in seconds
185
+ const MAX_LOCK_TIME = 104n * 7n * 24n * 60n * 60n; // 104 weeks in seconds
186
+ /**
187
+ * Calculate voting power for veFCTR based on locked amount and expiry
188
+ * Formula: votingPower = amount * (expiry - currentTime) / MAX_LOCK_TIME
189
+ *
190
+ * If the position is expired (expiry <= currentTime), voting power is 0
191
+ */
192
+ function calculateVotingPower(amount, expiry) {
193
+ const currentTime = BigInt(Math.floor(Date.now() / 1000));
194
+ const expiryBigInt = BigInt(expiry);
195
+ if (expiryBigInt <= currentTime) {
196
+ return 0n;
197
+ }
198
+ const timeRemaining = expiryBigInt - currentTime;
199
+ return (amount * timeRemaining) / MAX_LOCK_TIME;
200
+ }
201
+ function transformAccountBalance(data) {
202
+ const balance = BigInt(data.balance);
203
+ const decimals = data.token.decimals ?? 18;
204
+ const expiry = data.expiry ? Number(data.expiry) : null;
205
+ // Calculate voting power if expiry is present (veFCTR token)
206
+ let votingPower = null;
207
+ let votingPowerFmt = null;
208
+ if (expiry !== null) {
209
+ votingPower = calculateVotingPower(balance, expiry);
210
+ votingPowerFmt = formatBalanceToDecimal(votingPower, decimals);
211
+ }
212
+ return {
213
+ tokenAddress: data.token.address,
214
+ tokenName: data.token.name,
215
+ tokenSymbol: data.token.symbol,
216
+ tokenDecimals: data.token.decimals,
217
+ balance,
218
+ balanceFmt: formatBalanceToDecimal(balance, decimals),
219
+ expiry,
220
+ votingPower,
221
+ votingPowerFmt,
222
+ lastBlock: Number(data.lastBlock),
223
+ lastTimestamp: Number(data.lastTimestamp),
224
+ };
225
+ }
226
+ async function getTokenBalancesForUser(chainId, environment, user) {
227
+ const subgraphUrl = subgraphs_1.factorFCTRSubgraphUrl[chainId]?.[environment];
228
+ if (!subgraphUrl) {
229
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
230
+ }
231
+ const userAddress = user.toLowerCase();
232
+ const query = `
233
+ {
234
+ accountBalances(where: { account_: { address: "${userAddress}" }, balance_gt: "0" }) {
235
+ id
236
+ account {
237
+ id
238
+ address
239
+ }
240
+ token {
241
+ id
242
+ address
243
+ name
244
+ symbol
245
+ decimals
246
+ totalSupply
247
+ }
248
+ balance
249
+ expiry
250
+ lastBlock
251
+ lastTimestamp
252
+ }
253
+ }
254
+ `;
255
+ const response = await fetch(subgraphUrl, {
256
+ method: 'POST',
257
+ headers: {
258
+ 'Content-Type': 'application/json',
259
+ },
260
+ body: JSON.stringify({ query }),
261
+ });
262
+ const data = await response.json();
263
+ const accountBalances = data.data.accountBalances || [];
264
+ return {
265
+ userAddress,
266
+ balances: accountBalances.map(transformAccountBalance),
267
+ };
268
+ }
269
+ async function getTokenBalancesForAllUsers(chainId, environment) {
270
+ const subgraphUrl = subgraphs_1.factorFCTRSubgraphUrl[chainId]?.[environment];
271
+ if (!subgraphUrl) {
272
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
273
+ }
274
+ const accountBalances = await (0, subgraphs_1.fetchPaginatedData)(subgraphUrl, (first, skip) => `
275
+ {
276
+ accountBalances(
277
+ first: ${first}
278
+ skip: ${skip}
279
+ where: { balance_gt: "0" }
280
+ orderBy: lastTimestamp
281
+ orderDirection: desc
282
+ ) {
283
+ id
284
+ account {
285
+ id
286
+ address
287
+ }
288
+ token {
289
+ id
290
+ address
291
+ name
292
+ symbol
293
+ decimals
294
+ totalSupply
295
+ }
296
+ balance
297
+ expiry
298
+ lastBlock
299
+ lastTimestamp
300
+ }
301
+ }
302
+ `, (data) => data.data.accountBalances || []);
303
+ const balancesByUser = {};
304
+ for (const accountBalance of accountBalances) {
305
+ const userAddress = accountBalance.account.address;
306
+ if (!balancesByUser[userAddress]) {
307
+ balancesByUser[userAddress] = [];
308
+ }
309
+ balancesByUser[userAddress].push(transformAccountBalance(accountBalance));
310
+ }
311
+ return balancesByUser;
312
+ }
83
313
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAIA,kEAmBC;AAED,0CAqBC;AAED,kDAuCC;AAvFD,iDAAiH;AAI1G,KAAK,UAAU,2BAA2B,CAAC,OAAgB,EAAE,WAA8B;IAC9F,MAAM,WAAW,GAAG,kCAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,KAAK,GAAG;;;;;;;KAOb,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5B,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,OAAgB,EAAE,WAA8B,EAAE,IAAY;IAChG,MAAM,WAAW,GAAG,kCAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,KAAK,GAAG;;uCAEqB,IAAI,CAAC,WAAW,EAAE;;;;;;;KAOpD,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,OAAgB,EAAE,WAA8B;IACtF,MAAM,WAAW,GAAG,kCAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,8BAAkB,EAClC,WAAW,EACX,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;;;yBAGA,KAAK;wBACN,IAAI;;;;;;;;;;;SAWnB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAClC,CAAC;IAEF,MAAM,YAAY,GAAe,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QACzC,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;YACjC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;SAChC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;AAC7B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;AAC3B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.factorGaugeControllerSubgraphUrl = exports.factorScaleSubgraphUrl = void 0;
3
+ exports.factorFCTRSubgraphUrl = exports.factorGaugeControllerSubgraphUrl = exports.factorScaleSubgraphUrl = void 0;
4
4
  exports.fetchPaginatedData = fetchPaginatedData;
5
5
  const tokenlist_1 = require("@factordao/tokenlist");
6
6
  const DEFAULT_PAGE_SIZE = 1000;
@@ -51,9 +51,27 @@ exports.factorScaleSubgraphUrl = {
51
51
  };
52
52
  exports.factorGaugeControllerSubgraphUrl = {
53
53
  [tokenlist_1.ChainId.ARBITRUM_ONE]: {
54
+ testing: 'https://api.goldsky.com/api/public/project_cmgzitcts001c5np28moc9lyy/subgraphs/gauge-arbitrum_testing/v0.0.1/gn',
55
+ production: '',
56
+ },
57
+ [tokenlist_1.ChainId.BASE]: {
58
+ testing: 'https://api.goldsky.com/api/public/project_cmgzitcts001c5np28moc9lyy/subgraphs/gauge-base_testing/v0.0.2/gn',
59
+ production: '',
60
+ },
61
+ [tokenlist_1.ChainId.OPTIMISM]: {
62
+ testing: '',
63
+ production: '',
64
+ },
65
+ [tokenlist_1.ChainId.SONIC]: {
54
66
  testing: '',
55
67
  production: '',
56
68
  },
69
+ };
70
+ exports.factorFCTRSubgraphUrl = {
71
+ [tokenlist_1.ChainId.ARBITRUM_ONE]: {
72
+ testing: 'https://api.goldsky.com/api/public/project_cmgzitcts001c5np28moc9lyy/subgraphs/token-balance-arbitrum_testing/v0.0.3/gn',
73
+ production: '',
74
+ },
57
75
  [tokenlist_1.ChainId.BASE]: {
58
76
  testing: '',
59
77
  production: '',
@@ -1 +1 @@
1
- {"version":3,"file":"subgraphs.js","sourceRoot":"","sources":["../../../src/utils/subgraphs.ts"],"names":[],"mappings":";;;AAKA,gDAqCC;AA1CD,oDAA+C;AAG/C,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAExB,KAAK,UAAU,kBAAkB,CACpC,WAAmB,EACnB,YAAqD,EACrD,aAAqC;IAErC,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE1B,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,iBAAiB,CAAC;QAChD,IAAI,IAAI,iBAAiB,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAEY,QAAA,sBAAsB,GAAG;IAClC,CAAC,mBAAO,CAAC,YAAY,CAAC,EAAE;QACpB,OAAO,EAAE,iHAAiH;QAC1H,UAAU,EAAE,oHAAoH;KACnI;IACD,CAAC,mBAAO,CAAC,IAAI,CAAC,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,mBAAO,CAAC,KAAK,CAAC,EAAE;QACb,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;CAC2D,CAAC;AAEpD,QAAA,gCAAgC,GAAG;IAC5C,CAAC,mBAAO,CAAC,YAAY,CAAC,EAAE;QACpB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,mBAAO,CAAC,IAAI,CAAC,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,mBAAO,CAAC,KAAK,CAAC,EAAE;QACb,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;CAC2D,CAAC"}
1
+ {"version":3,"file":"subgraphs.js","sourceRoot":"","sources":["../../../src/utils/subgraphs.ts"],"names":[],"mappings":"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"}
package/dist/mjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { factorScaleSubgraphUrl, fetchPaginatedData } from './utils/subgraphs';
1
+ import { factorScaleSubgraphUrl, factorGaugeControllerSubgraphUrl, factorFCTRSubgraphUrl, fetchPaginatedData, } from './utils/subgraphs';
2
2
  export async function getAvailableVaultsForVoting(chainId, environment) {
3
3
  const subgraphUrl = factorScaleSubgraphUrl[chainId]?.[environment];
4
4
  if (!subgraphUrl) {
@@ -75,4 +75,230 @@ export async function getVotesForAllUsers(chainId, environment) {
75
75
  }
76
76
  return votesByVault;
77
77
  }
78
+ const DECIMALS = 18n;
79
+ const DECIMALS_DIVISOR = 10n ** DECIMALS;
80
+ function formatWeiToDecimal(wei) {
81
+ const whole = wei / DECIMALS_DIVISOR;
82
+ const remainder = wei % DECIMALS_DIVISOR;
83
+ if (remainder === 0n) {
84
+ return whole.toString();
85
+ }
86
+ const remainderStr = remainder.toString().padStart(Number(DECIMALS), '0');
87
+ const trimmed = remainderStr.replace(/0+$/, '');
88
+ return `${whole}.${trimmed}`;
89
+ }
90
+ function transformVaultReward(data) {
91
+ const fctrPerSec = BigInt(data.fctrPerSec);
92
+ const incentiveEndsAt = Number(data.incentiveEndsAt);
93
+ const timestamp = Number(data.timestamp);
94
+ const durationSec = BigInt(incentiveEndsAt - timestamp);
95
+ const totalIncentive = fctrPerSec * durationSec;
96
+ return {
97
+ vault: data.vault,
98
+ fctrPerSec,
99
+ incentiveEndsAt,
100
+ block: Number(data.block),
101
+ timestamp,
102
+ txid: data.txid,
103
+ totalIncentive,
104
+ totalIncentiveFmt: formatWeiToDecimal(totalIncentive),
105
+ };
106
+ }
107
+ export async function getRewardsForVault(chainId, environment, vault) {
108
+ const subgraphUrl = factorGaugeControllerSubgraphUrl[chainId]?.[environment];
109
+ if (!subgraphUrl) {
110
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
111
+ }
112
+ const query = `
113
+ {
114
+ vaultReward(id: "${vault.toLowerCase()}") {
115
+ id
116
+ vault
117
+ fctrPerSec
118
+ incentiveEndsAt
119
+ block
120
+ timestamp
121
+ txid
122
+ }
123
+ }
124
+ `;
125
+ const response = await fetch(subgraphUrl, {
126
+ method: 'POST',
127
+ headers: {
128
+ 'Content-Type': 'application/json',
129
+ },
130
+ body: JSON.stringify({ query }),
131
+ });
132
+ const data = await response.json();
133
+ if (!data.data.vaultReward) {
134
+ return null;
135
+ }
136
+ return transformVaultReward(data.data.vaultReward);
137
+ }
138
+ export async function getRewardsForAllVaults(chainId, environment) {
139
+ const subgraphUrl = factorGaugeControllerSubgraphUrl[chainId]?.[environment];
140
+ if (!subgraphUrl) {
141
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
142
+ }
143
+ const rewards = await fetchPaginatedData(subgraphUrl, (first, skip) => `
144
+ {
145
+ vaultRewards(
146
+ first: ${first}
147
+ skip: ${skip}
148
+ orderBy: timestamp
149
+ orderDirection: desc
150
+ ) {
151
+ id
152
+ vault
153
+ fctrPerSec
154
+ incentiveEndsAt
155
+ block
156
+ timestamp
157
+ txid
158
+ }
159
+ }
160
+ `, (data) => data.data.vaultRewards || []);
161
+ return rewards.map(transformVaultReward);
162
+ }
163
+ function formatBalanceToDecimal(balance, decimals) {
164
+ const divisor = 10n ** BigInt(decimals);
165
+ const whole = balance / divisor;
166
+ const remainder = balance % divisor;
167
+ if (remainder === 0n) {
168
+ return whole.toString();
169
+ }
170
+ const remainderStr = remainder.toString().padStart(decimals, '0');
171
+ const trimmed = remainderStr.replace(/0+$/, '');
172
+ return `${whole}.${trimmed}`;
173
+ }
174
+ // veFCTR voting power calculation based on VeBalanceLib.sol
175
+ // MAX_LOCK_TIME = 104 weeks in seconds
176
+ const MAX_LOCK_TIME = 104n * 7n * 24n * 60n * 60n; // 104 weeks in seconds
177
+ /**
178
+ * Calculate voting power for veFCTR based on locked amount and expiry
179
+ * Formula: votingPower = amount * (expiry - currentTime) / MAX_LOCK_TIME
180
+ *
181
+ * If the position is expired (expiry <= currentTime), voting power is 0
182
+ */
183
+ function calculateVotingPower(amount, expiry) {
184
+ const currentTime = BigInt(Math.floor(Date.now() / 1000));
185
+ const expiryBigInt = BigInt(expiry);
186
+ if (expiryBigInt <= currentTime) {
187
+ return 0n;
188
+ }
189
+ const timeRemaining = expiryBigInt - currentTime;
190
+ return (amount * timeRemaining) / MAX_LOCK_TIME;
191
+ }
192
+ function transformAccountBalance(data) {
193
+ const balance = BigInt(data.balance);
194
+ const decimals = data.token.decimals ?? 18;
195
+ const expiry = data.expiry ? Number(data.expiry) : null;
196
+ // Calculate voting power if expiry is present (veFCTR token)
197
+ let votingPower = null;
198
+ let votingPowerFmt = null;
199
+ if (expiry !== null) {
200
+ votingPower = calculateVotingPower(balance, expiry);
201
+ votingPowerFmt = formatBalanceToDecimal(votingPower, decimals);
202
+ }
203
+ return {
204
+ tokenAddress: data.token.address,
205
+ tokenName: data.token.name,
206
+ tokenSymbol: data.token.symbol,
207
+ tokenDecimals: data.token.decimals,
208
+ balance,
209
+ balanceFmt: formatBalanceToDecimal(balance, decimals),
210
+ expiry,
211
+ votingPower,
212
+ votingPowerFmt,
213
+ lastBlock: Number(data.lastBlock),
214
+ lastTimestamp: Number(data.lastTimestamp),
215
+ };
216
+ }
217
+ export async function getTokenBalancesForUser(chainId, environment, user) {
218
+ const subgraphUrl = factorFCTRSubgraphUrl[chainId]?.[environment];
219
+ if (!subgraphUrl) {
220
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
221
+ }
222
+ const userAddress = user.toLowerCase();
223
+ const query = `
224
+ {
225
+ accountBalances(where: { account_: { address: "${userAddress}" }, balance_gt: "0" }) {
226
+ id
227
+ account {
228
+ id
229
+ address
230
+ }
231
+ token {
232
+ id
233
+ address
234
+ name
235
+ symbol
236
+ decimals
237
+ totalSupply
238
+ }
239
+ balance
240
+ expiry
241
+ lastBlock
242
+ lastTimestamp
243
+ }
244
+ }
245
+ `;
246
+ const response = await fetch(subgraphUrl, {
247
+ method: 'POST',
248
+ headers: {
249
+ 'Content-Type': 'application/json',
250
+ },
251
+ body: JSON.stringify({ query }),
252
+ });
253
+ const data = await response.json();
254
+ const accountBalances = data.data.accountBalances || [];
255
+ return {
256
+ userAddress,
257
+ balances: accountBalances.map(transformAccountBalance),
258
+ };
259
+ }
260
+ export async function getTokenBalancesForAllUsers(chainId, environment) {
261
+ const subgraphUrl = factorFCTRSubgraphUrl[chainId]?.[environment];
262
+ if (!subgraphUrl) {
263
+ throw new Error(`Subgraph URL not found for chainId ${chainId} and environment ${environment}`);
264
+ }
265
+ const accountBalances = await fetchPaginatedData(subgraphUrl, (first, skip) => `
266
+ {
267
+ accountBalances(
268
+ first: ${first}
269
+ skip: ${skip}
270
+ where: { balance_gt: "0" }
271
+ orderBy: lastTimestamp
272
+ orderDirection: desc
273
+ ) {
274
+ id
275
+ account {
276
+ id
277
+ address
278
+ }
279
+ token {
280
+ id
281
+ address
282
+ name
283
+ symbol
284
+ decimals
285
+ totalSupply
286
+ }
287
+ balance
288
+ expiry
289
+ lastBlock
290
+ lastTimestamp
291
+ }
292
+ }
293
+ `, (data) => data.data.accountBalances || []);
294
+ const balancesByUser = {};
295
+ for (const accountBalance of accountBalances) {
296
+ const userAddress = accountBalance.account.address;
297
+ if (!balancesByUser[userAddress]) {
298
+ balancesByUser[userAddress] = [];
299
+ }
300
+ balancesByUser[userAddress].push(transformAccountBalance(accountBalance));
301
+ }
302
+ return balancesByUser;
303
+ }
78
304
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAoC,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIjH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAgB,EAAE,WAA8B;IAC9F,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,KAAK,GAAG;;;;;;;KAOb,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAgB,EAAE,WAA8B,EAAE,IAAY;IAChG,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,KAAK,GAAG;;uCAEqB,IAAI,CAAC,WAAW,EAAE;;;;;;;KAOpD,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAgB,EAAE,WAA8B;IACtF,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAClC,WAAW,EACX,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;;;yBAGA,KAAK;wBACN,IAAI;;;;;;;;;;;SAWnB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAClC,CAAC;IAEF,MAAM,YAAY,GAAe,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QACzC,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;YACjC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;SAChC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;AAC7B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;AAC3B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B"}
@@ -1,4 +1,4 @@
1
- import { ChainId } from "@factordao/tokenlist";
1
+ import { ChainId } from '@factordao/tokenlist';
2
2
  const DEFAULT_PAGE_SIZE = 1000;
3
3
  export async function fetchPaginatedData(subgraphUrl, queryBuilder, dataExtractor) {
4
4
  const allData = [];
@@ -47,9 +47,27 @@ export const factorScaleSubgraphUrl = {
47
47
  };
48
48
  export const factorGaugeControllerSubgraphUrl = {
49
49
  [ChainId.ARBITRUM_ONE]: {
50
+ testing: 'https://api.goldsky.com/api/public/project_cmgzitcts001c5np28moc9lyy/subgraphs/gauge-arbitrum_testing/v0.0.1/gn',
51
+ production: '',
52
+ },
53
+ [ChainId.BASE]: {
54
+ testing: 'https://api.goldsky.com/api/public/project_cmgzitcts001c5np28moc9lyy/subgraphs/gauge-base_testing/v0.0.2/gn',
55
+ production: '',
56
+ },
57
+ [ChainId.OPTIMISM]: {
58
+ testing: '',
59
+ production: '',
60
+ },
61
+ [ChainId.SONIC]: {
50
62
  testing: '',
51
63
  production: '',
52
64
  },
65
+ };
66
+ export const factorFCTRSubgraphUrl = {
67
+ [ChainId.ARBITRUM_ONE]: {
68
+ testing: 'https://api.goldsky.com/api/public/project_cmgzitcts001c5np28moc9lyy/subgraphs/token-balance-arbitrum_testing/v0.0.3/gn',
69
+ production: '',
70
+ },
53
71
  [ChainId.BASE]: {
54
72
  testing: '',
55
73
  production: '',
@@ -1 +1 @@
1
- {"version":3,"file":"subgraphs.js","sourceRoot":"","sources":["../../../src/utils/subgraphs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,WAAmB,EACnB,YAAqD,EACrD,aAAqC;IAErC,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE1B,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,iBAAiB,CAAC;QAChD,IAAI,IAAI,iBAAiB,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QACpB,OAAO,EAAE,iHAAiH;QAC1H,UAAU,EAAE,oHAAoH;KACnI;IACD,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACb,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;CAC2D,CAAC;AAEjE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC5C,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QACpB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;IACD,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACb,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACjB;CAC2D,CAAC"}
1
+ {"version":3,"file":"subgraphs.js","sourceRoot":"","sources":["../../../src/utils/subgraphs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@factordao/governance",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "dist",
package/types/index.d.ts CHANGED
@@ -1,5 +1,9 @@
1
- import { FactorEnvironment, VaultVotes } from './types';
1
+ import { FactorEnvironment, VaultVotes, VaultReward, UserTokenBalances, AllUsersTokenBalances } from './types';
2
2
  import { ChainId } from '@factordao/tokenlist';
3
3
  export declare function getAvailableVaultsForVoting(chainId: ChainId, environment: FactorEnvironment): Promise<any>;
4
4
  export declare function getVotesForUser(chainId: ChainId, environment: FactorEnvironment, user: string): Promise<any>;
5
5
  export declare function getVotesForAllUsers(chainId: ChainId, environment: FactorEnvironment): Promise<VaultVotes>;
6
+ export declare function getRewardsForVault(chainId: ChainId, environment: FactorEnvironment, vault: string): Promise<VaultReward | null>;
7
+ export declare function getRewardsForAllVaults(chainId: ChainId, environment: FactorEnvironment): Promise<VaultReward[]>;
8
+ export declare function getTokenBalancesForUser(chainId: ChainId, environment: FactorEnvironment, user: string): Promise<UserTokenBalances>;
9
+ export declare function getTokenBalancesForAllUsers(chainId: ChainId, environment: FactorEnvironment): Promise<AllUsersTokenBalances>;
@@ -14,3 +14,60 @@ export type VaultVotes = Record<string, Array<{
14
14
  timestamp: number;
15
15
  userAddress: string;
16
16
  }>>;
17
+ export type VaultRewardData = {
18
+ id: string;
19
+ vault: string;
20
+ fctrPerSec: string;
21
+ incentiveEndsAt: string;
22
+ block: string;
23
+ timestamp: string;
24
+ txid: string;
25
+ };
26
+ export type VaultReward = {
27
+ vault: string;
28
+ fctrPerSec: bigint;
29
+ incentiveEndsAt: number;
30
+ block: number;
31
+ timestamp: number;
32
+ txid: string;
33
+ totalIncentive: bigint;
34
+ totalIncentiveFmt: string;
35
+ };
36
+ export type TokenData = {
37
+ id: string;
38
+ address: string;
39
+ name: string | null;
40
+ symbol: string | null;
41
+ decimals: number | null;
42
+ totalSupply: string | null;
43
+ };
44
+ export type AccountBalanceData = {
45
+ id: string;
46
+ account: {
47
+ id: string;
48
+ address: string;
49
+ };
50
+ token: TokenData;
51
+ balance: string;
52
+ expiry: string | null;
53
+ lastBlock: string;
54
+ lastTimestamp: string;
55
+ };
56
+ export type TokenBalance = {
57
+ tokenAddress: string;
58
+ tokenName: string | null;
59
+ tokenSymbol: string | null;
60
+ tokenDecimals: number | null;
61
+ balance: bigint;
62
+ balanceFmt: string;
63
+ expiry: number | null;
64
+ votingPower: bigint | null;
65
+ votingPowerFmt: string | null;
66
+ lastBlock: number;
67
+ lastTimestamp: number;
68
+ };
69
+ export type UserTokenBalances = {
70
+ userAddress: string;
71
+ balances: TokenBalance[];
72
+ };
73
+ export type AllUsersTokenBalances = Record<string, TokenBalance[]>;
@@ -1,5 +1,6 @@
1
- import { ChainId } from "@factordao/tokenlist";
2
- import { FactorEnvironment } from "../types";
1
+ import { ChainId } from '@factordao/tokenlist';
2
+ import { FactorEnvironment } from '../types';
3
3
  export declare function fetchPaginatedData<T>(subgraphUrl: string, queryBuilder: (first: number, skip: number) => string, dataExtractor: (response: any) => T[]): Promise<T[]>;
4
4
  export declare const factorScaleSubgraphUrl: Record<ChainId, Partial<Record<FactorEnvironment, string>>>;
5
5
  export declare const factorGaugeControllerSubgraphUrl: Record<ChainId, Partial<Record<FactorEnvironment, string>>>;
6
+ export declare const factorFCTRSubgraphUrl: Record<ChainId, Partial<Record<FactorEnvironment, string>>>;