@stake-dao/reader 0.5.19 → 0.5.21
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/lockers/fetch/index.js +3 -3
- package/dist/esm/lockers/fetch/index.js.map +1 -1
- package/dist/esm/sdt/fetch.js +21 -28
- package/dist/esm/sdt/fetch.js.map +1 -1
- package/dist/esm/strategies/stakeDao/fetch.js +1 -1
- package/dist/esm/strategies/stakeDao/fetch.js.map +1 -1
- package/dist/esm/utils/getAverageYearlyRewards.js +8 -6
- package/dist/esm/utils/getAverageYearlyRewards.js.map +1 -1
- package/dist/types/sdt/fetch.d.ts +0 -3
- package/dist/types/sdt/fetch.d.ts.map +1 -1
- package/dist/types/utils/getAverageYearlyRewards.d.ts +1 -1
- package/dist/types/utils/getAverageYearlyRewards.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/lockers/fetch/index.ts +3 -3
- package/src/sdt/fetch.ts +19 -28
- package/src/strategies/stakeDao/fetch.ts +1 -1
- package/src/utils/getAverageYearlyRewards.ts +14 -6
|
@@ -35,13 +35,13 @@ export const fetchLockers = async ({ provider, prices }) => {
|
|
|
35
35
|
const parsed = await Promise.all([
|
|
36
36
|
curveLocker({ provider: provider[mainnet.id], common, prices }),
|
|
37
37
|
yieldbasisLocker({ provider: provider[mainnet.id], common, prices }),
|
|
38
|
+
balancerLocker({ provider: provider[mainnet.id], common, prices }),
|
|
38
39
|
pendleLocker({ provider: provider[mainnet.id], common, prices }),
|
|
39
40
|
fxnLocker({ provider: provider[mainnet.id], common, prices }),
|
|
41
|
+
fraxFxsLocker({ provider: provider[fraxtal.id], common, prices }),
|
|
42
|
+
spectraLocker({ provider: provider[base.id], common, prices }),
|
|
40
43
|
yearnLocker({ provider: provider[mainnet.id], common, prices }),
|
|
41
44
|
yieldnestLocker({ provider: provider[mainnet.id], common, prices }),
|
|
42
|
-
balancerLocker({ provider: provider[mainnet.id], common, prices }),
|
|
43
|
-
spectraLocker({ provider: provider[base.id], common, prices }),
|
|
44
|
-
fraxFxsLocker({ provider: provider[fraxtal.id], common, prices }),
|
|
45
45
|
zerolendLocker({ provider: provider[linea.id], common, prices }),
|
|
46
46
|
maverickLocker({ provider: provider[mainnet.id], common, prices }),
|
|
47
47
|
blackpoolLocker({ provider: provider[mainnet.id], common, prices }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lockers/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,WAAW,MAAM,sBAAsB,CAAA;AAC9C,OAAO,cAAc,MAAM,yBAAyB,CAAA;AACpD,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,WAAW,MAAM,sBAAsB,CAAA;AAC9C,OAAO,cAAc,MAAM,0BAA0B,CAAA;AACrD,OAAO,aAAa,MAAM,yBAAyB,CAAA;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAC1C,OAAO,cAAc,MAAM,yBAAyB,CAAA;AACpD,OAAO,iBAAiB,MAAM,4BAA4B,CAAA;AAC1D,OAAO,YAAY,MAAM,uBAAuB,CAAA;AAChD,OAAO,aAAa,MAAM,wBAAwB,CAAA;AAClD,OAAO,WAAW,MAAM,sBAAsB,CAAA;AAC9C,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AACxD,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,cAAc,MAAM,yBAAyB,CAAA;AAOpD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAiB,EAAE,EAAE;IACxE,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/F,qBAAqB;QACrB,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,eAAe;QACf,KAAK,CAAC,GAAG,4BAA4B,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5F,qBAAqB;QACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACjG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACtB;QACD,sBAAsB;QACtB,KAAK,CAAC,yCAAyC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1E,KAAK,CAAC,kDAAkD,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KACpF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;IAErE,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/D,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACpE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lockers/fetch/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/sdt/fetch.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { formatUnits, parseAbi, parseUnits } from 'viem';
|
|
2
|
-
import { ONE_DAY, contract, tokenWithId } from '@stake-dao/constants';
|
|
2
|
+
import { ONE_DAY, OneEther, contract, tokenWithId } from '@stake-dao/constants';
|
|
3
3
|
import { mainnet } from 'viem/chains';
|
|
4
4
|
import {} from '../prices.js';
|
|
5
5
|
import { equalTlc, multicall } from '../utils.js';
|
|
6
6
|
import { getLogsFromEtherscan } from '../utils/etherscan.js';
|
|
7
7
|
import getAverageYearlyRewards from '../utils/getAverageYearlyRewards.js';
|
|
8
8
|
import veSdtAlternativeYields from './veSdtAlternativeYields.js';
|
|
9
|
-
const NB_EVENTS_TO_USE =
|
|
9
|
+
const NB_EVENTS_TO_USE = 10;
|
|
10
10
|
const EVENT_TOPIC = '0xce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6';
|
|
11
|
-
// Need SDT and
|
|
11
|
+
// Need SDT and USDC price
|
|
12
12
|
export const fetchSdt = async ({ provider, prices, explorerApiKey }) => {
|
|
13
13
|
const sdtToken = tokenWithId('sdt');
|
|
14
|
-
const
|
|
14
|
+
const usdcToken = tokenWithId('usdc');
|
|
15
15
|
const now = Math.ceil(new Date().getTime() / 1000);
|
|
16
16
|
const lastCheck = now - ONE_DAY * 60;
|
|
17
17
|
const lastCheckBlock = await (await fetch(`https://coins.llama.fi/block/ethereum/${lastCheck}`)).json();
|
|
@@ -19,22 +19,20 @@ export const fetchSdt = async ({ provider, prices, explorerApiKey }) => {
|
|
|
19
19
|
try {
|
|
20
20
|
const rawEventsData = await getLogsFromEtherscan({
|
|
21
21
|
chainId: mainnet.id,
|
|
22
|
-
address: contract('
|
|
22
|
+
address: contract('usdcVeSdtFeeDistributor'),
|
|
23
23
|
apikey: explorerApiKey,
|
|
24
24
|
extraQueryParams: {
|
|
25
25
|
fromBlock: `${lastCheckBlock.height}`,
|
|
26
26
|
topic0: EVENT_TOPIC,
|
|
27
27
|
},
|
|
28
28
|
});
|
|
29
|
-
amountPerYear = await getAverageYearlyRewards(rawEventsData, NB_EVENTS_TO_USE);
|
|
29
|
+
amountPerYear = await getAverageYearlyRewards(rawEventsData, NB_EVENTS_TO_USE, false, usdcToken.decimals);
|
|
30
30
|
}
|
|
31
31
|
catch {
|
|
32
32
|
amountPerYear = 0;
|
|
33
33
|
}
|
|
34
34
|
const rawSdtData = await multicall(provider, [
|
|
35
|
-
{ address: contract('sdFrx3CrvVault'), name: 'getPricePerFullShare' },
|
|
36
35
|
{ address: sdtToken.address, name: 'balanceOf', params: [contract('veSdt')] },
|
|
37
|
-
{ address: sdtToken.address, name: 'balanceOf', params: [contract('vestedSdt')] },
|
|
38
36
|
{ address: sdtToken.address, name: 'totalSupply' },
|
|
39
37
|
{ address: contract('veSdt'), name: 'totalSupply' },
|
|
40
38
|
{
|
|
@@ -42,42 +40,37 @@ export const fetchSdt = async ({ provider, prices, explorerApiKey }) => {
|
|
|
42
40
|
name: 'received_balance',
|
|
43
41
|
params: [contract('voteBoosterStrategy')],
|
|
44
42
|
},
|
|
45
|
-
{ address: contract('liquidLockersGaugeController'), name: 'get_total_weight' },
|
|
46
|
-
{ address: frax3CrvToken.address, name: 'get_virtual_price' },
|
|
47
43
|
], parseAbi([
|
|
48
|
-
'function getPricePerFullShare() external view returns (uint256)',
|
|
49
44
|
'function balanceOf(address user) external view returns (uint256)',
|
|
50
45
|
'function totalSupply() external view returns (uint256)',
|
|
51
46
|
'function received_balance(address user) external view returns (uint256)',
|
|
52
47
|
'function get_total_weight() external view returns (uint256)',
|
|
53
|
-
'function get_virtual_price() external view returns (uint256)',
|
|
54
48
|
]));
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
49
|
+
const lockedSdtBalance = rawSdtData[0].result;
|
|
50
|
+
const sdtTotalSupply = rawSdtData[1].result;
|
|
51
|
+
const veSdtTotalSupply = rawSdtData[2].result;
|
|
52
|
+
const voteBoosterVeSdt = rawSdtData[3].result;
|
|
53
|
+
let sdtPrice = 0;
|
|
54
|
+
let usdcPrice = 0;
|
|
55
|
+
for (const p of prices) {
|
|
56
|
+
if (equalTlc(p.address, sdtToken.address))
|
|
57
|
+
sdtPrice = p.usdPrice;
|
|
58
|
+
if (equalTlc(p.address, usdcToken.address))
|
|
59
|
+
usdcPrice = p.usdPrice;
|
|
60
|
+
}
|
|
61
|
+
const lockedInUsd = (parseUnits(`${sdtPrice}`, sdtToken.decimals) * lockedSdtBalance) / OneEther;
|
|
66
62
|
const percentLocked = parseUnits(formatUnits(lockedSdtBalance, 0), sdtToken.decimals) / sdtTotalSupply;
|
|
67
63
|
const averageLock = (parseUnits(formatUnits(veSdtTotalSupply, 0), sdtToken.decimals) / lockedSdtBalance) * BigInt(4);
|
|
68
|
-
const apr = (
|
|
64
|
+
const apr = (usdcPrice * amountPerYear) / Number(formatUnits(lockedInUsd, 18));
|
|
69
65
|
const parsedData = {
|
|
70
66
|
alternativeYields: veSdtAlternativeYields,
|
|
71
67
|
veSdtTotalSupply: Number(formatUnits(veSdtTotalSupply, 18)),
|
|
72
68
|
locked: Number(formatUnits(lockedSdtBalance, sdtToken.decimals)),
|
|
73
|
-
lockedInUsd: Number(formatUnits(lockedInUsd, sdtToken.decimals
|
|
74
|
-
vestedInUsd: Number(formatUnits(vestedInUsd, sdtToken.decimals * 2)),
|
|
69
|
+
lockedInUsd: Number(formatUnits(lockedInUsd, sdtToken.decimals)),
|
|
75
70
|
percentLocked: Number(formatUnits(percentLocked, 18)) * 100,
|
|
76
71
|
averageLockInYears: Number(formatUnits(averageLock, 18)),
|
|
77
72
|
apr: apr * 100,
|
|
78
73
|
voteBoosterVeSdt: Number(formatUnits(voteBoosterVeSdt, sdtToken.decimals)),
|
|
79
|
-
lockersTotalWeight,
|
|
80
|
-
frax3CrvPrice,
|
|
81
74
|
};
|
|
82
75
|
return parsedData;
|
|
83
76
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/sdt/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAExD,OAAO,EAAE,OAAO,EAAc,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/sdt/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export const fetchStakeDao = async ({ provider, chainId, lockers, prices, explor
|
|
|
15
15
|
const queryParams = { ...baseQueryParams, chainid: `${chainId}`, apikey: explorerApiKey };
|
|
16
16
|
const url = `https://api.etherscan.io/v2/api?${new URLSearchParams(queryParams)}`;
|
|
17
17
|
const rawEventsData = await (await fetch(url)).json();
|
|
18
|
-
amountPerYear = await getAverageYearlyRewards(rawEventsData, 5);
|
|
18
|
+
amountPerYear = await getAverageYearlyRewards(rawEventsData, 5, false, 18);
|
|
19
19
|
}
|
|
20
20
|
catch {
|
|
21
21
|
amountPerYear = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../src/strategies/stakeDao/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,uBAAuB,MAAM,wCAAwC,CAAA;AAE5E,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,GAAG,QAAQ,EAAE;IACxB,OAAO,EAAE,4CAA4C;IACrD,MAAM,EAAE,oEAAoE;CAC7E,CAAA;AAUD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,EAAE,EAAE;IAC5G,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,EAAE,GAAG,eAAe,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QACzF,MAAM,GAAG,GAAG,mCAAmC,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE,CAAA;QAEjF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACrD,aAAa,GAAG,MAAM,uBAAuB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../src/strategies/stakeDao/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ONE_YEAR, Zero } from '@stake-dao/constants';
|
|
1
|
+
import { ONE_WEEK, ONE_YEAR, Zero } from '@stake-dao/constants';
|
|
2
2
|
import { decodeAbiParameters, formatUnits } from 'viem';
|
|
3
3
|
const decodeEvent = (rawEventsData) => {
|
|
4
4
|
return rawEventsData.result?.map((event) => {
|
|
@@ -19,19 +19,21 @@ const decodeEventWithRewardToken = (rawEventsData) => {
|
|
|
19
19
|
return { eventTimestamp: Number(eventTimestamp), eventAmount, eventRewardToken };
|
|
20
20
|
});
|
|
21
21
|
};
|
|
22
|
-
const getAverageYearlyRewards = async (rawEventsData, nbEvents, withRewardToken) => {
|
|
22
|
+
const getAverageYearlyRewards = async (rawEventsData, nbEvents, withRewardToken, decimals) => {
|
|
23
23
|
const eventsData = (withRewardToken ? decodeEventWithRewardToken(rawEventsData) : decodeEvent(rawEventsData))
|
|
24
24
|
.filter((event) => event.eventAmount > Zero)
|
|
25
25
|
.sort((a, b) => b.eventTimestamp - a.eventTimestamp);
|
|
26
|
+
const eventsSize = Math.min(nbEvents, eventsData.length);
|
|
26
27
|
const amountPerYear = eventsData
|
|
27
|
-
.slice(0,
|
|
28
|
+
.slice(0, eventsSize)
|
|
28
29
|
.map((_, index) => {
|
|
29
|
-
const
|
|
30
|
-
const
|
|
30
|
+
const prevTimestamp = eventsData[index + 1]?.eventTimestamp || eventsData[index].eventTimestamp - ONE_WEEK;
|
|
31
|
+
const duration = eventsData[index].eventTimestamp - prevTimestamp;
|
|
32
|
+
const amount = Number(formatUnits(eventsData[index].eventAmount, decimals));
|
|
31
33
|
// Annualized Reward
|
|
32
34
|
return (amount / duration) * ONE_YEAR;
|
|
33
35
|
})
|
|
34
|
-
.reduce((total, x) => (total += x), 0) /
|
|
36
|
+
.reduce((total, x) => (total += x), 0) / eventsSize;
|
|
35
37
|
return amountPerYear;
|
|
36
38
|
};
|
|
37
39
|
export default getAverageYearlyRewards;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAverageYearlyRewards.js","sourceRoot":"","sources":["../../../src/utils/getAverageYearlyRewards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"getAverageYearlyRewards.js","sourceRoot":"","sources":["../../../src/utils/getAverageYearlyRewards.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,13 +25,10 @@ export declare const fetchSdt: ({ provider, prices, explorerApiKey }: TFetchSdt)
|
|
|
25
25
|
veSdtTotalSupply: number;
|
|
26
26
|
locked: number;
|
|
27
27
|
lockedInUsd: number;
|
|
28
|
-
vestedInUsd: number;
|
|
29
28
|
percentLocked: number;
|
|
30
29
|
averageLockInYears: number;
|
|
31
30
|
apr: number;
|
|
32
31
|
voteBoosterVeSdt: number;
|
|
33
|
-
lockersTotalWeight: number;
|
|
34
|
-
frax3CrvPrice: number;
|
|
35
32
|
}>;
|
|
36
33
|
export {};
|
|
37
34
|
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/sdt/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAA;AASzC,UAAU,SAAS;IACjB,QAAQ,EAAE,GAAG,CAAA;IACb,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACvB;AAGD,eAAO,MAAM,QAAQ,yCAAgD,SAAS
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/sdt/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAA;AASzC,UAAU,SAAS;IACjB,QAAQ,EAAE,GAAG,CAAA;IACb,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACvB;AAGD,eAAO,MAAM,QAAQ,yCAAgD,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;EA4E7E,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const getAverageYearlyRewards: (rawEventsData: any, nbEvents: number, withRewardToken
|
|
1
|
+
declare const getAverageYearlyRewards: (rawEventsData: any, nbEvents: number, withRewardToken: boolean, decimals: number) => Promise<number>;
|
|
2
2
|
export default getAverageYearlyRewards;
|
|
3
3
|
//# sourceMappingURL=getAverageYearlyRewards.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAverageYearlyRewards.d.ts","sourceRoot":"","sources":["../../../src/utils/getAverageYearlyRewards.ts"],"names":[],"mappings":"AAgCA,QAAA,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"getAverageYearlyRewards.d.ts","sourceRoot":"","sources":["../../../src/utils/getAverageYearlyRewards.ts"],"names":[],"mappings":"AAgCA,QAAA,MAAM,uBAAuB,kBACZ,GAAG,YACR,MAAM,mBACC,OAAO,YACd,MAAM,oBAsBjB,CAAA;AAED,eAAe,uBAAuB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stake-dao/reader",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.21",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"graphql-request": "^6.0.0",
|
|
36
36
|
"lodash-es": "^4.17.21",
|
|
37
37
|
"viem": "2.35.0",
|
|
38
|
-
"@stake-dao/constants": "0.5.
|
|
38
|
+
"@stake-dao/constants": "0.5.7"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/lodash-es": "^4.17.12",
|
|
@@ -46,13 +46,13 @@ export const fetchLockers = async ({ provider, prices }: TFetchLockers) => {
|
|
|
46
46
|
const parsed = await Promise.all([
|
|
47
47
|
curveLocker({ provider: provider[mainnet.id], common, prices }),
|
|
48
48
|
yieldbasisLocker({ provider: provider[mainnet.id], common, prices }),
|
|
49
|
+
balancerLocker({ provider: provider[mainnet.id], common, prices }),
|
|
49
50
|
pendleLocker({ provider: provider[mainnet.id], common, prices }),
|
|
50
51
|
fxnLocker({ provider: provider[mainnet.id], common, prices }),
|
|
52
|
+
fraxFxsLocker({ provider: provider[fraxtal.id], common, prices }),
|
|
53
|
+
spectraLocker({ provider: provider[base.id], common, prices }),
|
|
51
54
|
yearnLocker({ provider: provider[mainnet.id], common, prices }),
|
|
52
55
|
yieldnestLocker({ provider: provider[mainnet.id], common, prices }),
|
|
53
|
-
balancerLocker({ provider: provider[mainnet.id], common, prices }),
|
|
54
|
-
spectraLocker({ provider: provider[base.id], common, prices }),
|
|
55
|
-
fraxFxsLocker({ provider: provider[fraxtal.id], common, prices }),
|
|
56
56
|
zerolendLocker({ provider: provider[linea.id], common, prices }),
|
|
57
57
|
maverickLocker({ provider: provider[mainnet.id], common, prices }),
|
|
58
58
|
blackpoolLocker({ provider: provider[mainnet.id], common, prices }),
|
package/src/sdt/fetch.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { formatUnits, parseAbi, parseUnits } from 'viem'
|
|
2
2
|
|
|
3
|
-
import { ONE_DAY, type Token, contract, tokenWithId } from '@stake-dao/constants'
|
|
3
|
+
import { ONE_DAY, OneEther, type Token, contract, tokenWithId } from '@stake-dao/constants'
|
|
4
4
|
import { mainnet } from 'viem/chains'
|
|
5
5
|
import { type Price } from '../prices.js'
|
|
6
6
|
import { equalTlc, multicall } from '../utils.js'
|
|
@@ -8,7 +8,7 @@ import { getLogsFromEtherscan } from '../utils/etherscan.js'
|
|
|
8
8
|
import getAverageYearlyRewards from '../utils/getAverageYearlyRewards.js'
|
|
9
9
|
import veSdtAlternativeYields from './veSdtAlternativeYields.js'
|
|
10
10
|
|
|
11
|
-
const NB_EVENTS_TO_USE =
|
|
11
|
+
const NB_EVENTS_TO_USE = 10
|
|
12
12
|
const EVENT_TOPIC = '0xce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6'
|
|
13
13
|
|
|
14
14
|
interface TFetchSdt {
|
|
@@ -17,10 +17,10 @@ interface TFetchSdt {
|
|
|
17
17
|
explorerApiKey: string
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
// Need SDT and
|
|
20
|
+
// Need SDT and USDC price
|
|
21
21
|
export const fetchSdt = async ({ provider, prices, explorerApiKey }: TFetchSdt) => {
|
|
22
22
|
const sdtToken = tokenWithId('sdt') as Token
|
|
23
|
-
const
|
|
23
|
+
const usdcToken = tokenWithId('usdc') as Token
|
|
24
24
|
|
|
25
25
|
const now = Math.ceil(new Date().getTime() / 1000)
|
|
26
26
|
const lastCheck = now - ONE_DAY * 60
|
|
@@ -31,14 +31,14 @@ export const fetchSdt = async ({ provider, prices, explorerApiKey }: TFetchSdt)
|
|
|
31
31
|
try {
|
|
32
32
|
const rawEventsData = await getLogsFromEtherscan({
|
|
33
33
|
chainId: mainnet.id,
|
|
34
|
-
address: contract('
|
|
34
|
+
address: contract('usdcVeSdtFeeDistributor'),
|
|
35
35
|
apikey: explorerApiKey,
|
|
36
36
|
extraQueryParams: {
|
|
37
37
|
fromBlock: `${lastCheckBlock.height}`,
|
|
38
38
|
topic0: EVENT_TOPIC,
|
|
39
39
|
},
|
|
40
40
|
})
|
|
41
|
-
amountPerYear = await getAverageYearlyRewards(rawEventsData, NB_EVENTS_TO_USE)
|
|
41
|
+
amountPerYear = await getAverageYearlyRewards(rawEventsData, NB_EVENTS_TO_USE, false, usdcToken.decimals)
|
|
42
42
|
} catch {
|
|
43
43
|
amountPerYear = 0
|
|
44
44
|
}
|
|
@@ -46,9 +46,7 @@ export const fetchSdt = async ({ provider, prices, explorerApiKey }: TFetchSdt)
|
|
|
46
46
|
const rawSdtData: any = await multicall(
|
|
47
47
|
provider,
|
|
48
48
|
[
|
|
49
|
-
{ address: contract('sdFrx3CrvVault'), name: 'getPricePerFullShare' },
|
|
50
49
|
{ address: sdtToken.address, name: 'balanceOf', params: [contract('veSdt')] },
|
|
51
|
-
{ address: sdtToken.address, name: 'balanceOf', params: [contract('vestedSdt')] },
|
|
52
50
|
{ address: sdtToken.address, name: 'totalSupply' },
|
|
53
51
|
{ address: contract('veSdt'), name: 'totalSupply' },
|
|
54
52
|
{
|
|
@@ -56,50 +54,43 @@ export const fetchSdt = async ({ provider, prices, explorerApiKey }: TFetchSdt)
|
|
|
56
54
|
name: 'received_balance',
|
|
57
55
|
params: [contract('voteBoosterStrategy')],
|
|
58
56
|
},
|
|
59
|
-
{ address: contract('liquidLockersGaugeController'), name: 'get_total_weight' },
|
|
60
|
-
{ address: frax3CrvToken.address, name: 'get_virtual_price' },
|
|
61
57
|
],
|
|
62
58
|
parseAbi([
|
|
63
|
-
'function getPricePerFullShare() external view returns (uint256)',
|
|
64
59
|
'function balanceOf(address user) external view returns (uint256)',
|
|
65
60
|
'function totalSupply() external view returns (uint256)',
|
|
66
61
|
'function received_balance(address user) external view returns (uint256)',
|
|
67
62
|
'function get_total_weight() external view returns (uint256)',
|
|
68
|
-
'function get_virtual_price() external view returns (uint256)',
|
|
69
63
|
]),
|
|
70
64
|
)
|
|
71
65
|
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const veSdtTotalSupply = rawSdtData[4].result
|
|
77
|
-
const voteBoosterVeSdt = rawSdtData[5].result
|
|
66
|
+
const lockedSdtBalance = rawSdtData[0].result
|
|
67
|
+
const sdtTotalSupply = rawSdtData[1].result
|
|
68
|
+
const veSdtTotalSupply = rawSdtData[2].result
|
|
69
|
+
const voteBoosterVeSdt = rawSdtData[3].result
|
|
78
70
|
|
|
79
|
-
|
|
80
|
-
|
|
71
|
+
let sdtPrice = 0
|
|
72
|
+
let usdcPrice = 0
|
|
81
73
|
|
|
82
|
-
const
|
|
74
|
+
for (const p of prices) {
|
|
75
|
+
if (equalTlc(p.address, sdtToken.address)) sdtPrice = p.usdPrice
|
|
76
|
+
if (equalTlc(p.address, usdcToken.address)) usdcPrice = p.usdPrice
|
|
77
|
+
}
|
|
83
78
|
|
|
84
|
-
const lockedInUsd = parseUnits(`${sdtPrice}`, sdtToken.decimals) * lockedSdtBalance
|
|
85
|
-
const vestedInUsd = parseUnits(`${sdtPrice}`, sdtToken.decimals) * vestedSdtBalance
|
|
79
|
+
const lockedInUsd = (parseUnits(`${sdtPrice}`, sdtToken.decimals) * lockedSdtBalance) / OneEther
|
|
86
80
|
const percentLocked = parseUnits(formatUnits(lockedSdtBalance, 0), sdtToken.decimals) / sdtTotalSupply
|
|
87
81
|
const averageLock = (parseUnits(formatUnits(veSdtTotalSupply, 0), sdtToken.decimals) / lockedSdtBalance) * BigInt(4)
|
|
88
82
|
|
|
89
|
-
const apr = (
|
|
83
|
+
const apr = (usdcPrice * amountPerYear) / Number(formatUnits(lockedInUsd, 18))
|
|
90
84
|
|
|
91
85
|
const parsedData = {
|
|
92
86
|
alternativeYields: veSdtAlternativeYields,
|
|
93
87
|
veSdtTotalSupply: Number(formatUnits(veSdtTotalSupply, 18)),
|
|
94
88
|
locked: Number(formatUnits(lockedSdtBalance, sdtToken.decimals)),
|
|
95
|
-
lockedInUsd: Number(formatUnits(lockedInUsd, sdtToken.decimals
|
|
96
|
-
vestedInUsd: Number(formatUnits(vestedInUsd, sdtToken.decimals * 2)),
|
|
89
|
+
lockedInUsd: Number(formatUnits(lockedInUsd, sdtToken.decimals)),
|
|
97
90
|
percentLocked: Number(formatUnits(percentLocked, 18)) * 100,
|
|
98
91
|
averageLockInYears: Number(formatUnits(averageLock, 18)),
|
|
99
92
|
apr: apr * 100,
|
|
100
93
|
voteBoosterVeSdt: Number(formatUnits(voteBoosterVeSdt, sdtToken.decimals)),
|
|
101
|
-
lockersTotalWeight,
|
|
102
|
-
frax3CrvPrice,
|
|
103
94
|
}
|
|
104
95
|
|
|
105
96
|
return parsedData
|
|
@@ -28,7 +28,7 @@ export const fetchStakeDao = async ({ provider, chainId, lockers, prices, explor
|
|
|
28
28
|
const url = `https://api.etherscan.io/v2/api?${new URLSearchParams(queryParams)}`
|
|
29
29
|
|
|
30
30
|
const rawEventsData = await (await fetch(url)).json()
|
|
31
|
-
amountPerYear = await getAverageYearlyRewards(rawEventsData, 5)
|
|
31
|
+
amountPerYear = await getAverageYearlyRewards(rawEventsData, 5, false, 18)
|
|
32
32
|
} catch {
|
|
33
33
|
amountPerYear = 0
|
|
34
34
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ONE_YEAR, Zero } from '@stake-dao/constants'
|
|
1
|
+
import { ONE_WEEK, ONE_YEAR, Zero } from '@stake-dao/constants'
|
|
2
2
|
import { decodeAbiParameters, formatUnits } from 'viem'
|
|
3
3
|
|
|
4
4
|
const decodeEvent = (rawEventsData: any) => {
|
|
@@ -30,22 +30,30 @@ const decodeEventWithRewardToken = (rawEventsData: any) => {
|
|
|
30
30
|
})
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
const getAverageYearlyRewards = async (
|
|
33
|
+
const getAverageYearlyRewards = async (
|
|
34
|
+
rawEventsData: any,
|
|
35
|
+
nbEvents: number,
|
|
36
|
+
withRewardToken: boolean,
|
|
37
|
+
decimals: number,
|
|
38
|
+
) => {
|
|
34
39
|
const eventsData = (withRewardToken ? decodeEventWithRewardToken(rawEventsData) : decodeEvent(rawEventsData))
|
|
35
40
|
.filter((event) => event.eventAmount > Zero)
|
|
36
41
|
.sort((a, b) => b.eventTimestamp - a.eventTimestamp)
|
|
37
42
|
|
|
43
|
+
const eventsSize = Math.min(nbEvents, eventsData.length)
|
|
44
|
+
|
|
38
45
|
const amountPerYear =
|
|
39
46
|
eventsData
|
|
40
|
-
.slice(0,
|
|
47
|
+
.slice(0, eventsSize)
|
|
41
48
|
.map((_, index) => {
|
|
42
|
-
const
|
|
43
|
-
const
|
|
49
|
+
const prevTimestamp = eventsData[index + 1]?.eventTimestamp || eventsData[index].eventTimestamp - ONE_WEEK
|
|
50
|
+
const duration = eventsData[index].eventTimestamp - prevTimestamp
|
|
51
|
+
const amount = Number(formatUnits(eventsData[index].eventAmount, decimals))
|
|
44
52
|
|
|
45
53
|
// Annualized Reward
|
|
46
54
|
return (amount / duration) * ONE_YEAR
|
|
47
55
|
})
|
|
48
|
-
.reduce((total, x) => (total += x), 0) /
|
|
56
|
+
.reduce((total, x) => (total += x), 0) / eventsSize
|
|
49
57
|
|
|
50
58
|
return amountPerYear
|
|
51
59
|
}
|