@stake-dao/reader 0.4.112 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/abis/lockersMulticall.js +30 -2
- package/dist/esm/abis/lockersMulticall.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lockers/fetch/index.js +53 -224
- package/dist/esm/lockers/fetch/index.js.map +1 -1
- package/dist/esm/lockers/fetch/parse.js +174 -0
- package/dist/esm/lockers/fetch/parse.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/angle.js +136 -0
- package/dist/esm/lockers/fetch/protocols/angle.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/balancer.js +172 -0
- package/dist/esm/lockers/fetch/protocols/balancer.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/blackpool.js +130 -0
- package/dist/esm/lockers/fetch/protocols/blackpool.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/curve.js +204 -0
- package/dist/esm/lockers/fetch/protocols/curve.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/frax-fpis.js +121 -0
- package/dist/esm/lockers/fetch/protocols/frax-fpis.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/frax-fxs.js +169 -0
- package/dist/esm/lockers/fetch/protocols/frax-fxs.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/fxn.js +131 -0
- package/dist/esm/lockers/fetch/protocols/fxn.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/maverick.js +172 -0
- package/dist/esm/lockers/fetch/protocols/maverick.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/pancakeswap.js +128 -0
- package/dist/esm/lockers/fetch/protocols/pancakeswap.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/pendle.js +144 -0
- package/dist/esm/lockers/fetch/protocols/pendle.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/spectra.js +133 -0
- package/dist/esm/lockers/fetch/protocols/spectra.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/yearn.js +138 -0
- package/dist/esm/lockers/fetch/protocols/yearn.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/yieldbasis.js +131 -0
- package/dist/esm/lockers/fetch/protocols/yieldbasis.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/yieldnest.js +135 -0
- package/dist/esm/lockers/fetch/protocols/yieldnest.js.map +1 -0
- package/dist/esm/lockers/fetch/protocols/zerolend.js +124 -0
- package/dist/esm/lockers/fetch/protocols/zerolend.js.map +1 -0
- package/dist/esm/lockers/fetch/static.js +33 -0
- package/dist/esm/lockers/fetch/static.js.map +1 -0
- package/dist/esm/lockers/fetch/types.js +2 -0
- package/dist/esm/lockers/fetch/types.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/pegCalls.js.map +1 -1
- package/dist/esm/lockers/utils/getBribesRewardsData.js +11 -9
- package/dist/esm/lockers/utils/getBribesRewardsData.js.map +1 -1
- package/dist/esm/lockers/utils/substractFees.js +1 -2
- package/dist/esm/lockers/utils/substractFees.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/getOnlyboostData.js +8 -3
- package/dist/esm/strategies/curve/fetch/getOnlyboostData.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/index.js +1 -1
- package/dist/esm/strategies/curve/fetch/index.js.map +1 -1
- package/dist/esm/strategies/v2/parse.js +5 -3
- package/dist/esm/strategies/v2/parse.js.map +1 -1
- package/dist/esm/utils.js +5 -0
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/abis/lockersMulticall.d.ts +1 -1
- package/dist/types/abis/lockersMulticall.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/index.d.ts +5 -99
- package/dist/types/lockers/fetch/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/parse.d.ts +52 -0
- package/dist/types/lockers/fetch/parse.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/angle.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/angle.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/balancer.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/balancer.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/blackpool.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/blackpool.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/curve.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/curve.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/frax-fpis.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/frax-fpis.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/frax-fxs.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/frax-fxs.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/fxn.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/fxn.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/maverick.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/maverick.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/pancakeswap.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/pancakeswap.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/pendle.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/pendle.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/spectra.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/spectra.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/yearn.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/yearn.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/yieldbasis.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/yieldbasis.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/yieldnest.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/yieldnest.d.ts.map +1 -0
- package/dist/types/lockers/fetch/protocols/zerolend.d.ts +9 -0
- package/dist/types/lockers/fetch/protocols/zerolend.d.ts.map +1 -0
- package/dist/types/lockers/fetch/static.d.ts +3 -0
- package/dist/types/lockers/fetch/static.d.ts.map +1 -0
- package/dist/types/lockers/fetch/types.d.ts +105 -0
- package/dist/types/lockers/fetch/types.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts +1 -1
- package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts.map +1 -1
- package/dist/types/lockers/utils/getBribesRewardsData.d.ts +1 -0
- package/dist/types/lockers/utils/getBribesRewardsData.d.ts.map +1 -1
- package/dist/types/lockers/utils/substractFees.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/getOnlyboostData.d.ts +1 -1
- package/dist/types/strategies/curve/fetch/getOnlyboostData.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/index.d.ts.map +1 -1
- package/dist/types/strategies/stakeDao/fetch.d.ts +1 -1
- package/dist/types/strategies/v2/parse.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/abis/lockersMulticall.ts +30 -2
- package/src/index.ts +2 -1
- package/src/lockers/fetch/index.ts +65 -329
- package/src/lockers/fetch/parse.ts +258 -0
- package/src/lockers/fetch/protocols/angle.ts +157 -0
- package/src/lockers/fetch/protocols/balancer.ts +195 -0
- package/src/lockers/fetch/protocols/blackpool.ts +151 -0
- package/src/lockers/fetch/protocols/curve.ts +229 -0
- package/src/lockers/fetch/protocols/frax-fpis.ts +139 -0
- package/src/lockers/fetch/protocols/frax-fxs.ts +193 -0
- package/src/lockers/fetch/protocols/fxn.ts +152 -0
- package/src/lockers/fetch/protocols/maverick.ts +193 -0
- package/src/lockers/fetch/protocols/pancakeswap.ts +149 -0
- package/src/lockers/fetch/protocols/pendle.ts +165 -0
- package/src/lockers/fetch/protocols/spectra.ts +154 -0
- package/src/lockers/fetch/protocols/yearn.ts +159 -0
- package/src/lockers/fetch/protocols/yieldbasis.ts +152 -0
- package/src/lockers/fetch/protocols/yieldnest.ts +157 -0
- package/src/lockers/fetch/protocols/zerolend.ts +144 -0
- package/src/lockers/fetch/static.ts +35 -0
- package/src/lockers/fetch/types.ts +112 -0
- package/src/lockers/utils/callsForLockers/pegCalls.ts +2 -1
- package/src/lockers/utils/getBribesRewardsData.ts +12 -11
- package/src/lockers/utils/substractFees.ts +1 -2
- package/src/strategies/curve/fetch/getOnlyboostData.ts +11 -2
- package/src/strategies/curve/fetch/index.ts +2 -0
- package/src/strategies/v2/parse.ts +10 -4
- package/src/utils.ts +5 -0
- package/dist/esm/lockers/fetch/parseBoost.js +0 -36
- package/dist/esm/lockers/fetch/parseBoost.js.map +0 -1
- package/dist/esm/lockers/fetch/parsePeg.js +0 -18
- package/dist/esm/lockers/fetch/parsePeg.js.map +0 -1
- package/dist/esm/lockers/fetch/parseVoteBoosterData.js +0 -28
- package/dist/esm/lockers/fetch/parseVoteBoosterData.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js +0 -24
- package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/feeCalls.js +0 -97
- package/dist/esm/lockers/utils/callsForLockers/feeCalls.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js +0 -9
- package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/index.js +0 -34
- package/dist/esm/lockers/utils/callsForLockers/index.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/veBoosts.js +0 -17
- package/dist/esm/lockers/utils/callsForLockers/veBoosts.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/veCalls.js +0 -33
- package/dist/esm/lockers/utils/callsForLockers/veCalls.js.map +0 -1
- package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js +0 -14
- package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js.map +0 -1
- package/dist/esm/lockers/utils/getFees.js +0 -27
- package/dist/esm/lockers/utils/getFees.js.map +0 -1
- package/dist/types/lockers/fetch/parseBoost.d.ts +0 -4
- package/dist/types/lockers/fetch/parseBoost.d.ts.map +0 -1
- package/dist/types/lockers/fetch/parsePeg.d.ts +0 -3
- package/dist/types/lockers/fetch/parsePeg.d.ts.map +0 -1
- package/dist/types/lockers/fetch/parseVoteBoosterData.d.ts +0 -13
- package/dist/types/lockers/fetch/parseVoteBoosterData.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts +0 -4
- package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts +0 -13
- package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts +0 -6
- package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/index.d.ts +0 -8
- package/dist/types/lockers/utils/callsForLockers/index.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/veBoosts.d.ts +0 -7
- package/dist/types/lockers/utils/callsForLockers/veBoosts.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts +0 -4
- package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts.map +0 -1
- package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts +0 -11
- package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts.map +0 -1
- package/dist/types/lockers/utils/getFees.d.ts +0 -4
- package/dist/types/lockers/utils/getFees.d.ts.map +0 -1
- package/src/lockers/fetch/parseBoost.ts +0 -46
- package/src/lockers/fetch/parsePeg.ts +0 -22
- package/src/lockers/fetch/parseVoteBoosterData.ts +0 -34
- package/src/lockers/utils/callsForLockers/depositorCalls.ts +0 -30
- package/src/lockers/utils/callsForLockers/feeCalls.ts +0 -124
- package/src/lockers/utils/callsForLockers/gaugeCalls.ts +0 -10
- package/src/lockers/utils/callsForLockers/index.ts +0 -51
- package/src/lockers/utils/callsForLockers/veBoosts.ts +0 -28
- package/src/lockers/utils/callsForLockers/veCalls.ts +0 -44
- package/src/lockers/utils/callsForLockers/veSdtCalls.ts +0 -15
- package/src/lockers/utils/getFees.ts +0 -31
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { ONE_WEEK, ONE_YEAR, Zero } from '@stake-dao/constants';
|
|
2
|
+
import { formatUnits, parseUnits } from 'viem';
|
|
3
|
+
import { equalTlc } from '../../utils.js';
|
|
4
|
+
import getBribesRewardsData, {} from '../utils/getBribesRewardsData.js';
|
|
5
|
+
import substractFees from '../utils/substractFees.js';
|
|
6
|
+
export const parseVoteBoosterData = (locker, voteBooster) => {
|
|
7
|
+
const voteBoosterBoost = voteBooster && Number(voteBooster.working) > 0 && Number(voteBooster.staked) > 0
|
|
8
|
+
? Number(voteBooster.working) / (Number(voteBooster.staked) * 0.4)
|
|
9
|
+
: 1;
|
|
10
|
+
return {
|
|
11
|
+
booster: locker.voteBooster.booster,
|
|
12
|
+
vSdToken: locker.voteBooster.vSdToken,
|
|
13
|
+
balance: voteBooster,
|
|
14
|
+
boost: voteBoosterBoost,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export const parsePeg = (locker, rawPeg) => {
|
|
18
|
+
if (rawPeg && rawPeg !== '-') {
|
|
19
|
+
const pegBase = parseUnits(locker.secondaryMarket?.pegBase?.toString() || '1', 0);
|
|
20
|
+
return formatUnits(rawPeg / pegBase, 18);
|
|
21
|
+
}
|
|
22
|
+
return '-';
|
|
23
|
+
};
|
|
24
|
+
export const parseAltYields = (locker, common) => {
|
|
25
|
+
const alternativeYields = JSON.parse(JSON.stringify(locker.alternativeYields || {})); // parse and stringify to avoid extensible issue
|
|
26
|
+
try {
|
|
27
|
+
if (common.cvgAprs?.[locker.modules.gauge]) {
|
|
28
|
+
alternativeYields.convergenceSdToken = {
|
|
29
|
+
label: locker.sdToken.symbol,
|
|
30
|
+
platform: 'Convergence',
|
|
31
|
+
href: 'https://app.cvg.finance/',
|
|
32
|
+
apr: common.cvgAprs[locker.modules.gauge].totalApr,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const spectraAltYield = common.spectraAprs?.find((s) => equalTlc(s.underlying.address, locker.sdToken.address));
|
|
36
|
+
alternativeYields.spectraAsdToken = spectraAltYield
|
|
37
|
+
? {
|
|
38
|
+
label: spectraAltYield.ibt.symbol,
|
|
39
|
+
platform: 'Spectra',
|
|
40
|
+
href: 'https://app.spectra.finance/pools',
|
|
41
|
+
apr: Math.max(spectraAltYield.pools.map((p) => p.lpApy?.total || 0) || [0]),
|
|
42
|
+
}
|
|
43
|
+
: undefined;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
console.error(e);
|
|
47
|
+
}
|
|
48
|
+
return alternativeYields;
|
|
49
|
+
};
|
|
50
|
+
export const parseVeBoostApr = (weeklyRewards, tokenPriceInUsd, totalDelegatedVeBoost) => {
|
|
51
|
+
let amountPerYear = 0;
|
|
52
|
+
try {
|
|
53
|
+
const weeklyRewardsWithoutNull = weeklyRewards
|
|
54
|
+
.filter((r) => r > Zero)
|
|
55
|
+
.map((r) => Number(formatUnits(r, 18)));
|
|
56
|
+
if (weeklyRewardsWithoutNull.length > 0) {
|
|
57
|
+
amountPerYear =
|
|
58
|
+
(weeklyRewardsWithoutNull.reduce((total, x) => (total += x), 0) /
|
|
59
|
+
(weeklyRewardsWithoutNull.length * ONE_WEEK)) *
|
|
60
|
+
ONE_YEAR;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.error(e);
|
|
65
|
+
amountPerYear = 0;
|
|
66
|
+
}
|
|
67
|
+
const tvl = Number(totalDelegatedVeBoost) * tokenPriceInUsd;
|
|
68
|
+
const apr = tvl > 0 ? ((amountPerYear * tokenPriceInUsd) / tvl) * 100 : 0;
|
|
69
|
+
return apr;
|
|
70
|
+
};
|
|
71
|
+
export const parseSidechains = (locker, raw, prices) => {
|
|
72
|
+
if (locker.extensions.sideChains && raw.sidechains) {
|
|
73
|
+
return locker.extensions.sideChains.map((s, index) => {
|
|
74
|
+
const rewards = s.rewards?.map((reward) => {
|
|
75
|
+
const price = prices.find((p) => equalTlc(p.address, reward.address))?.usdPrice || 0;
|
|
76
|
+
return { token: reward, price };
|
|
77
|
+
}) || [];
|
|
78
|
+
return {
|
|
79
|
+
...s,
|
|
80
|
+
...raw.sidechains[index],
|
|
81
|
+
rewards,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
};
|
|
87
|
+
export const parse = async ({ locker, raw, common, prices }) => {
|
|
88
|
+
const lockerFee = { total: 15 };
|
|
89
|
+
const tokenPrice = prices.find((p) => p.address === locker.token.address);
|
|
90
|
+
const tokenPriceInUsd = tokenPrice ? tokenPrice.usdPrice : 0;
|
|
91
|
+
const sdTokenPriceInUsd = raw.peg !== '-' ? tokenPriceInUsd * Number(raw.peg) : tokenPriceInUsd;
|
|
92
|
+
const tvl = raw.totalSupplyStaked ? Number(raw.totalSupplyStaked) * sdTokenPriceInUsd : 0;
|
|
93
|
+
const veBoostApr = locker.veBoost && raw.veBoost
|
|
94
|
+
? parseVeBoostApr(raw.veBoost.weeklyRewards, tokenPriceInUsd, Number(raw.veBoost.delegated))
|
|
95
|
+
: 0;
|
|
96
|
+
// Rewards APR
|
|
97
|
+
const rewardsData = raw.rewards.map((rawData, index) => {
|
|
98
|
+
const r = locker.rewards[index];
|
|
99
|
+
const rewardPrice = equalTlc(r.address, locker.sdToken.address)
|
|
100
|
+
? sdTokenPriceInUsd
|
|
101
|
+
: prices.find((p) => p.address === r.address)?.usdPrice || 0;
|
|
102
|
+
const periodFinish = Number(formatUnits(rawData ? rawData[2] : Zero, 0));
|
|
103
|
+
let streaming = r.distribution === 'streamed' && periodFinish > Math.floor(Date.now() / 1000);
|
|
104
|
+
const rate = rawData ? rawData[3] : Zero;
|
|
105
|
+
const oneYearRate = rate * BigInt(ONE_YEAR);
|
|
106
|
+
let apr = streaming
|
|
107
|
+
? rewardPrice && tvl > 0
|
|
108
|
+
? ((Number(formatUnits(oneYearRate, r.decimals)) * rewardPrice) / tvl) * 100
|
|
109
|
+
: 0
|
|
110
|
+
: 0;
|
|
111
|
+
if (raw.replaceApr?.[index]) {
|
|
112
|
+
apr = raw.replaceApr[index];
|
|
113
|
+
streaming = apr > 0;
|
|
114
|
+
}
|
|
115
|
+
// Remove fees from APR
|
|
116
|
+
apr = substractFees(locker.id, apr, lockerFee);
|
|
117
|
+
return {
|
|
118
|
+
token: r,
|
|
119
|
+
price: rewardPrice,
|
|
120
|
+
apr,
|
|
121
|
+
streaming,
|
|
122
|
+
periodFinish,
|
|
123
|
+
rate: formatUnits(rate, 0),
|
|
124
|
+
lastUpdate: rawData ? formatUnits(rawData[4], 0) : '0',
|
|
125
|
+
isAirdrop: r.isAirdrop,
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
const data = getBribesRewardsData(locker, common.bribesData, common.veSdtTotalSupply, raw.totalSupplyStaked, raw._veBalanceOfLocker, raw._workingSupply, raw.sdTokenInPool, raw.tokenLocked);
|
|
129
|
+
const bribeMinApr = data.bribeMinApr;
|
|
130
|
+
const bribeMaxApr = data.bribeMaxApr;
|
|
131
|
+
const bribeRewards = data.bribeRewards;
|
|
132
|
+
// Total APR
|
|
133
|
+
const minRewardsAprs = rewardsData.reduce((x, y) => x + y.apr, 0) + bribeMinApr;
|
|
134
|
+
const maxRewardsAprs = rewardsData.reduce((x, y) => x + y.apr, 0) + bribeMaxApr;
|
|
135
|
+
// Streaming status
|
|
136
|
+
const streaming = rewardsData.some((r) => r.streaming);
|
|
137
|
+
const alternativeYields = parseAltYields(locker, common);
|
|
138
|
+
// Sidechains
|
|
139
|
+
const sideChains = parseSidechains(locker, raw, prices);
|
|
140
|
+
return {
|
|
141
|
+
...locker,
|
|
142
|
+
rewards: rewardsData,
|
|
143
|
+
tokenLocked: raw.tokenLocked,
|
|
144
|
+
veBalanceOfLocker: raw.veBalanceOfLocker,
|
|
145
|
+
totalTokenLocked: raw.totalTokenLocked,
|
|
146
|
+
veTotalSupply: raw.veTotalSupply,
|
|
147
|
+
lockIncentive: raw.lockIncentive || '0',
|
|
148
|
+
gaugeWorkingSupply: raw.gaugeWorkingSupply,
|
|
149
|
+
totalSupplyStaked: raw.totalSupplyStaked,
|
|
150
|
+
amountTokenNotLock: raw.amountTokenNotLock,
|
|
151
|
+
bribeRewards,
|
|
152
|
+
apr: [minRewardsAprs, maxRewardsAprs],
|
|
153
|
+
streaming,
|
|
154
|
+
veTokenRate: raw.veTokenRate,
|
|
155
|
+
tvl,
|
|
156
|
+
peg: raw.peg,
|
|
157
|
+
tokenPriceInUsd,
|
|
158
|
+
sdTokenPriceInUsd,
|
|
159
|
+
alternativeYields,
|
|
160
|
+
extensions: {
|
|
161
|
+
...locker.extensions,
|
|
162
|
+
sideChains,
|
|
163
|
+
},
|
|
164
|
+
veBoost: locker.veBoost && raw.veBoost
|
|
165
|
+
? {
|
|
166
|
+
...locker.veBoost,
|
|
167
|
+
delegated: raw.veBoost.delegated,
|
|
168
|
+
apr: veBoostApr,
|
|
169
|
+
}
|
|
170
|
+
: undefined,
|
|
171
|
+
voteBooster: raw.voteBooster,
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/lockers/fetch/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { One, STAKE_DAO_ASSETS_BASE_URL, Zero, tokenWithId } from '@stake-dao/constants';
|
|
2
|
+
import { formatUnits, parseUnits } from 'viem';
|
|
3
|
+
import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
|
|
4
|
+
import { getRes, multicall } from '../../../utils.js';
|
|
5
|
+
import { parse, parsePeg } from '../parse.js';
|
|
6
|
+
export const locker = {
|
|
7
|
+
id: 'angle',
|
|
8
|
+
symbol: 'ANGLE',
|
|
9
|
+
protocol: 'Angle',
|
|
10
|
+
protocolDescription: 'Angle is a decentralized, capital efficient and over-collateralized stablecoin protocol composed of smart contracts running on open blockchains.',
|
|
11
|
+
website: 'https://angle.money/',
|
|
12
|
+
logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/angle.svg`,
|
|
13
|
+
chainId: 1,
|
|
14
|
+
rgb: '249, 145, 144',
|
|
15
|
+
token: tokenWithId('angle'),
|
|
16
|
+
sdToken: tokenWithId('sdangle'),
|
|
17
|
+
rewards: [
|
|
18
|
+
{ ...tokenWithId('sdt'), distribution: 'streamed', origin: 'sdtEmission' },
|
|
19
|
+
{ ...tokenWithId('angle'), distribution: 'streamed', origin: 'stratPerf' },
|
|
20
|
+
{ ...tokenWithId('eura'), distribution: 'streamed', origin: 'native.common' },
|
|
21
|
+
{ ...tokenWithId('sdangle'), distribution: 'distributed', origin: 'bounties' },
|
|
22
|
+
],
|
|
23
|
+
delegation: ['sdangle.eth'],
|
|
24
|
+
modules: {
|
|
25
|
+
depositor: '0x0000000000000000000000000000000000000000',
|
|
26
|
+
locker: '0xD13F8C25CceD32cdfA79EB5eD654Ce3e484dCAF5',
|
|
27
|
+
veToken: '0x0C462Dbb9EC8cD1630f1728B2CFD2769d09f0dd5',
|
|
28
|
+
gauge: '0xE55843a90672f7d8218285e51EE8fF8E233F35d5',
|
|
29
|
+
accumulator: '0x8cc02F4f383A11b989708437DbA6BB0628d7eE78',
|
|
30
|
+
redeem: '0x1D8A9c30E4e25033498347c1A054717bd0c4D356',
|
|
31
|
+
},
|
|
32
|
+
secondaryMarket: {
|
|
33
|
+
label: 'Curve',
|
|
34
|
+
poolKey: 'factory-v2-101',
|
|
35
|
+
vaultKey: '',
|
|
36
|
+
pool: '0x48fF31bBbD8Ab553Ebe7cBD84e1eA3dBa8f54957',
|
|
37
|
+
pools: ['0x48fF31bBbD8Ab553Ebe7cBD84e1eA3dBa8f54957'],
|
|
38
|
+
pegBase: 300000,
|
|
39
|
+
},
|
|
40
|
+
fees: [
|
|
41
|
+
{
|
|
42
|
+
label: { key: 'liquidity', variable: 'sdANGLE/ANGLE' },
|
|
43
|
+
value: 10,
|
|
44
|
+
key: 'liquidityFee',
|
|
45
|
+
static: true,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: { key: 'treasury' },
|
|
49
|
+
value: 5,
|
|
50
|
+
key: 'daoFee',
|
|
51
|
+
static: true,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
label: { key: 'harvester' },
|
|
55
|
+
value: 0.1,
|
|
56
|
+
key: 'claimerFee',
|
|
57
|
+
static: true,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
extensions: {
|
|
61
|
+
coingeckoBaseSlug: 'angle',
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
const angleLocker = async ({ provider, common, prices }) => {
|
|
65
|
+
const token = locker.token.address;
|
|
66
|
+
const sdToken = locker.sdToken.address;
|
|
67
|
+
const gauge = locker.modules.gauge;
|
|
68
|
+
const depositor = locker.modules.depositor;
|
|
69
|
+
const votingEscrow = locker.modules.veToken;
|
|
70
|
+
const lockerAddress = locker.modules.locker;
|
|
71
|
+
const secondaryMarket = locker.secondaryMarket;
|
|
72
|
+
const rewards = locker.rewards;
|
|
73
|
+
const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18);
|
|
74
|
+
const format = (value) => formatUnits(value, locker.token.decimals);
|
|
75
|
+
const formatRes = (value) => format(getRes(value));
|
|
76
|
+
const calls = [
|
|
77
|
+
/*********************************************************************************
|
|
78
|
+
*** Voting Escrow
|
|
79
|
+
*********************************************************************************/
|
|
80
|
+
// Token locked by the Locker
|
|
81
|
+
{ address: votingEscrow, name: 'locked', params: [lockerAddress] },
|
|
82
|
+
// veToken Balance of the Locker
|
|
83
|
+
{ address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
|
|
84
|
+
// Total token locked
|
|
85
|
+
{ address: votingEscrow, name: 'supply' },
|
|
86
|
+
// Total veToken supply
|
|
87
|
+
{ address: votingEscrow, name: 'totalSupply' },
|
|
88
|
+
/*********************************************************************************
|
|
89
|
+
*** Gauge
|
|
90
|
+
*********************************************************************************/
|
|
91
|
+
// Total sdToken staked
|
|
92
|
+
{ address: gauge, name: 'totalSupply' },
|
|
93
|
+
// Gauge working supply
|
|
94
|
+
{ address: gauge, name: 'working_supply' },
|
|
95
|
+
/*********************************************************************************
|
|
96
|
+
*** Token & sdToken
|
|
97
|
+
*********************************************************************************/
|
|
98
|
+
// Token balance not locked
|
|
99
|
+
{ address: token, name: 'balanceOf', params: [depositor] },
|
|
100
|
+
// sdToken in secondary market pool
|
|
101
|
+
{ address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
|
|
102
|
+
/*********************************************************************************
|
|
103
|
+
*** Peg
|
|
104
|
+
*********************************************************************************/
|
|
105
|
+
// Return amount when swapping {pegBase} sdToken to token -> get_dy(int128,int128,uint256)
|
|
106
|
+
{ address: secondaryMarket.pool, name: '0x5e0d443f', params: [One, Zero, pegBase] },
|
|
107
|
+
/*********************************************************************************
|
|
108
|
+
*** Rewards
|
|
109
|
+
*********************************************************************************/
|
|
110
|
+
// Streaming status for each reward token
|
|
111
|
+
...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
|
|
112
|
+
];
|
|
113
|
+
const res = await multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId));
|
|
114
|
+
const raw = {
|
|
115
|
+
tokenLocked: getRes(res.shift()),
|
|
116
|
+
veBalanceOfLocker: formatRes(res.shift()),
|
|
117
|
+
totalTokenLocked: formatRes(res.shift()),
|
|
118
|
+
veTotalSupply: formatRes(res.shift()),
|
|
119
|
+
totalSupplyStaked: formatRes(res.shift()),
|
|
120
|
+
gaugeWorkingSupply: formatRes(res.shift()),
|
|
121
|
+
amountTokenNotLock: formatRes(res.shift()),
|
|
122
|
+
sdTokenInPool: formatRes(res.shift()),
|
|
123
|
+
peg: getRes(res.shift()),
|
|
124
|
+
rewards: rewards.map(() => getRes(res.shift())),
|
|
125
|
+
veTokenRate: '4',
|
|
126
|
+
_workingSupply: '0',
|
|
127
|
+
_veBalanceOfLocker: '0',
|
|
128
|
+
};
|
|
129
|
+
raw.tokenLocked = format(raw.tokenLocked[0]);
|
|
130
|
+
raw.peg = parsePeg(locker, raw.peg);
|
|
131
|
+
raw._workingSupply = raw.gaugeWorkingSupply;
|
|
132
|
+
raw._veBalanceOfLocker = raw.veBalanceOfLocker;
|
|
133
|
+
return parse({ locker, common, prices, raw });
|
|
134
|
+
};
|
|
135
|
+
export default angleLocker;
|
|
136
|
+
//# sourceMappingURL=angle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angle.js","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/angle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { ONE_WEEK, One, STAKE_DAO_ASSETS_BASE_URL, Zero, contracts, tokenWithId } from '@stake-dao/constants';
|
|
2
|
+
import { range } from 'lodash-es';
|
|
3
|
+
import { formatUnits, parseUnits, zeroAddress } from 'viem';
|
|
4
|
+
import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
|
|
5
|
+
import { getRes, multicall } from '../../../utils.js';
|
|
6
|
+
import { parse, parsePeg } from '../parse.js';
|
|
7
|
+
export const locker = {
|
|
8
|
+
id: 'bal',
|
|
9
|
+
symbol: 'BAL',
|
|
10
|
+
protocol: 'Balancer',
|
|
11
|
+
protocolDescription: 'Balancer is a decentralized automated market maker (AMM) protocol built on Ethereum that represents a flexible building block for programmable liquidity.',
|
|
12
|
+
website: 'https://balancer.fi/',
|
|
13
|
+
logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/bal.svg`,
|
|
14
|
+
chainId: 1,
|
|
15
|
+
rgb: '9, 31, 59',
|
|
16
|
+
token: tokenWithId('80-bal-20-weth'),
|
|
17
|
+
sdToken: tokenWithId('sdbal'),
|
|
18
|
+
rewards: [
|
|
19
|
+
{ ...tokenWithId('sdt'), distribution: 'streamed', origin: 'sdtEmission' },
|
|
20
|
+
{ ...tokenWithId('bal'), distribution: 'streamed', origin: 'stratPerf' },
|
|
21
|
+
{ ...tokenWithId('usdc'), distribution: 'streamed', origin: 'native.common' },
|
|
22
|
+
{ ...tokenWithId('sdbal'), distribution: 'distributed', origin: 'bounties' },
|
|
23
|
+
],
|
|
24
|
+
delegation: ['sdbal.eth'],
|
|
25
|
+
modules: {
|
|
26
|
+
depositor: '0x3e0d44542972859de3CAdaF856B1a4FD351B4D2E',
|
|
27
|
+
locker: '0xea79d1a83da6db43a85942767c389fe0acf336a5',
|
|
28
|
+
veToken: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',
|
|
29
|
+
gauge: '0x3e8c72655e48591d93e6dfda16823db0ff23d859',
|
|
30
|
+
accumulator: '0x2903DBEC58d193c34708dE22f89fd7A42b6d0Eb0',
|
|
31
|
+
},
|
|
32
|
+
secondaryMarket: {
|
|
33
|
+
label: 'Balancer',
|
|
34
|
+
poolKey: '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d',
|
|
35
|
+
vaultKey: '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d',
|
|
36
|
+
pool: '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d',
|
|
37
|
+
pools: [contracts.balancerVault[1]],
|
|
38
|
+
router: contracts.balancerVault[1],
|
|
39
|
+
pegBase: 1000,
|
|
40
|
+
},
|
|
41
|
+
veBoost: {
|
|
42
|
+
address: '0x2cf8e145Bdfe7c52b49AD9bB3c294a31B2736c59',
|
|
43
|
+
delegator: '0xda9846665Bdb44b0d0CAFFd0d1D4A539932BeBdf',
|
|
44
|
+
},
|
|
45
|
+
alternativeYields: {
|
|
46
|
+
sdBalBalStakeDao: {
|
|
47
|
+
label: 'sdBAL/B-80BAL-20WETH',
|
|
48
|
+
platform: 'Stake DAO',
|
|
49
|
+
href: '/yield',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
fees: [
|
|
53
|
+
{
|
|
54
|
+
label: { key: 'liquidity', variable: 'sdBAL/B-80BAL-20WETH' },
|
|
55
|
+
value: 10,
|
|
56
|
+
key: 'liquidityFee',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
label: { key: 'treasury' },
|
|
60
|
+
value: 5,
|
|
61
|
+
key: 'daoFee',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
label: { key: 'harvesterOn', variable: 'BAL, USDC' },
|
|
65
|
+
value: 0,
|
|
66
|
+
key: 'claimerFee',
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
extensions: {
|
|
70
|
+
coingeckoBaseSlug: 'balancer',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
const balancerLocker = async ({ provider, common, prices }) => {
|
|
74
|
+
const token = locker.token.address;
|
|
75
|
+
const sdToken = locker.sdToken.address;
|
|
76
|
+
const gauge = locker.modules.gauge;
|
|
77
|
+
const depositor = locker.modules.depositor;
|
|
78
|
+
const votingEscrow = locker.modules.veToken;
|
|
79
|
+
const lockerAddress = locker.modules.locker;
|
|
80
|
+
const veBoost = locker.veBoost;
|
|
81
|
+
const secondaryMarket = locker.secondaryMarket;
|
|
82
|
+
const rewards = locker.rewards;
|
|
83
|
+
const now = Math.floor(Date.now() / 1000);
|
|
84
|
+
const lastWeek = Math.floor(now / ONE_WEEK) * ONE_WEEK;
|
|
85
|
+
const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18);
|
|
86
|
+
const format = (value) => formatUnits(value, locker.token.decimals);
|
|
87
|
+
const formatRes = (value) => format(getRes(value));
|
|
88
|
+
const calls = [
|
|
89
|
+
/*********************************************************************************
|
|
90
|
+
*** Voting Escrow
|
|
91
|
+
*********************************************************************************/
|
|
92
|
+
// Token locked by the Locker
|
|
93
|
+
{ address: votingEscrow, name: 'locked', params: [lockerAddress] },
|
|
94
|
+
// veToken Balance of the Locker
|
|
95
|
+
{ address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
|
|
96
|
+
// Total token locked
|
|
97
|
+
{ address: votingEscrow, name: 'supply' },
|
|
98
|
+
// Total veToken supply
|
|
99
|
+
{ address: votingEscrow, name: 'totalSupply' },
|
|
100
|
+
/*********************************************************************************
|
|
101
|
+
*** Gauge
|
|
102
|
+
*********************************************************************************/
|
|
103
|
+
// Total sdToken staked
|
|
104
|
+
{ address: gauge, name: 'totalSupply' },
|
|
105
|
+
// Gauge working supply
|
|
106
|
+
{ address: gauge, name: 'working_supply' },
|
|
107
|
+
/*********************************************************************************
|
|
108
|
+
*** Token & sdToken
|
|
109
|
+
*********************************************************************************/
|
|
110
|
+
// Token balance not locked
|
|
111
|
+
{ address: token, name: 'balanceOf', params: [depositor] },
|
|
112
|
+
// sdToken in secondary market pool
|
|
113
|
+
{ address: sdToken, name: 'balanceOf', params: [secondaryMarket.router] },
|
|
114
|
+
/*********************************************************************************
|
|
115
|
+
*** Peg
|
|
116
|
+
*********************************************************************************/
|
|
117
|
+
// Return amount when swapping {pegBase} sdToken to token -> get_dy(int128,int128,uint256)
|
|
118
|
+
{
|
|
119
|
+
address: contracts.balancerVault[1],
|
|
120
|
+
name: 'queryBatchSwap',
|
|
121
|
+
params: [
|
|
122
|
+
Zero,
|
|
123
|
+
[[secondaryMarket.pool, Zero, One, pegBase, '0x']],
|
|
124
|
+
[sdToken, token],
|
|
125
|
+
[zeroAddress, false, zeroAddress, false],
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
/*********************************************************************************
|
|
129
|
+
*** Rewards
|
|
130
|
+
*********************************************************************************/
|
|
131
|
+
// Streaming status for each reward token
|
|
132
|
+
...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
|
|
133
|
+
/*********************************************************************************
|
|
134
|
+
*** veBoost
|
|
135
|
+
*********************************************************************************/
|
|
136
|
+
// Total veBoost delegated through delegator
|
|
137
|
+
{ address: veBoost.delegator, name: 'totalSupply' },
|
|
138
|
+
// veBoost 5 last weeks rewards
|
|
139
|
+
...range(0, 5).map((i) => ({
|
|
140
|
+
address: veBoost.delegator,
|
|
141
|
+
name: 'weeklyRewards',
|
|
142
|
+
params: [token, lastWeek - i * ONE_WEEK],
|
|
143
|
+
})),
|
|
144
|
+
];
|
|
145
|
+
const res = await multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId));
|
|
146
|
+
const raw = {
|
|
147
|
+
tokenLocked: getRes(res.shift()),
|
|
148
|
+
veBalanceOfLocker: formatRes(res.shift()),
|
|
149
|
+
totalTokenLocked: formatRes(res.shift()),
|
|
150
|
+
veTotalSupply: formatRes(res.shift()),
|
|
151
|
+
totalSupplyStaked: formatRes(res.shift()),
|
|
152
|
+
gaugeWorkingSupply: formatRes(res.shift()),
|
|
153
|
+
amountTokenNotLock: formatRes(res.shift()),
|
|
154
|
+
sdTokenInPool: formatRes(res.shift()),
|
|
155
|
+
peg: getRes(res.shift()),
|
|
156
|
+
rewards: rewards.map(() => getRes(res.shift())),
|
|
157
|
+
veBoost: {
|
|
158
|
+
delegated: formatRes(res.shift()),
|
|
159
|
+
weeklyRewards: range(0, 5).map(() => getRes(res.shift())),
|
|
160
|
+
},
|
|
161
|
+
veTokenRate: '4',
|
|
162
|
+
_workingSupply: '0',
|
|
163
|
+
_veBalanceOfLocker: '0',
|
|
164
|
+
};
|
|
165
|
+
raw.tokenLocked = format(raw.tokenLocked[0]);
|
|
166
|
+
raw.peg = parsePeg(locker, raw.peg[1] * BigInt(-1));
|
|
167
|
+
raw._workingSupply = raw.gaugeWorkingSupply;
|
|
168
|
+
raw._veBalanceOfLocker = raw.veBalanceOfLocker;
|
|
169
|
+
return parse({ locker, common, prices, raw });
|
|
170
|
+
};
|
|
171
|
+
export default balancerLocker;
|
|
172
|
+
//# sourceMappingURL=balancer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balancer.js","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/balancer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { One, STAKE_DAO_ASSETS_BASE_URL, Zero, tokenWithId } from '@stake-dao/constants';
|
|
2
|
+
import { formatUnits, parseUnits } from 'viem';
|
|
3
|
+
import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
|
|
4
|
+
import { getRes, multicall } from '../../../utils.js';
|
|
5
|
+
import { parse, parsePeg } from '../parse.js';
|
|
6
|
+
export const locker = {
|
|
7
|
+
id: 'bpt',
|
|
8
|
+
symbol: 'BPT',
|
|
9
|
+
protocol: 'Blackpool',
|
|
10
|
+
protocolDescription: 'Blackpool is a decentralized autonomous organization (DAO) built solely for NFT gaming and trading.',
|
|
11
|
+
website: 'https://blackpool.finance/',
|
|
12
|
+
logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/bpt.svg`,
|
|
13
|
+
chainId: 1,
|
|
14
|
+
rgb: '0, 0, 0',
|
|
15
|
+
token: tokenWithId('bpt'),
|
|
16
|
+
sdToken: tokenWithId('sdbpt'),
|
|
17
|
+
rewards: [{ ...tokenWithId('weth'), distribution: 'streamed', origin: 'native.common' }],
|
|
18
|
+
delegation: ['sdbpt.eth'],
|
|
19
|
+
modules: {
|
|
20
|
+
depositor: '0x219f7496fbD30e1F21A20613F9372d608A279993',
|
|
21
|
+
locker: '0x0a4dF7809F83e130D8ffa297f03b75318E37B461',
|
|
22
|
+
veToken: '0x19886A88047350482990D4EDd0C1b863646aB921',
|
|
23
|
+
gauge: '0xa291faEEf794df6216f196a63F514B5B22244865',
|
|
24
|
+
accumulator: '0xfAC788261DA6E2aFfCD0e9AB340395378F8CBfBc',
|
|
25
|
+
},
|
|
26
|
+
secondaryMarket: {
|
|
27
|
+
label: 'Curve',
|
|
28
|
+
poolKey: 'factory-v2-177',
|
|
29
|
+
vaultKey: '',
|
|
30
|
+
pool: '0x9d259ca698746586107c234e9e9461d385ca1041',
|
|
31
|
+
pools: ['0x9d259ca698746586107c234e9e9461d385ca1041'],
|
|
32
|
+
pegBase: 5000,
|
|
33
|
+
},
|
|
34
|
+
fees: [
|
|
35
|
+
{
|
|
36
|
+
label: { key: 'liquidity', variable: 'sdBPT/BPT' },
|
|
37
|
+
value: 10,
|
|
38
|
+
key: 'liquidityFee',
|
|
39
|
+
static: true,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: { key: 'treasury' },
|
|
43
|
+
value: 5,
|
|
44
|
+
key: 'daoFee',
|
|
45
|
+
static: true,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: { key: 'harvester' },
|
|
49
|
+
value: 0.1,
|
|
50
|
+
key: 'claimerFee',
|
|
51
|
+
static: true,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
extensions: {
|
|
55
|
+
coingeckoBaseSlug: 'blackpool-token',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
const blackpoolLocker = async ({ provider, common, prices }) => {
|
|
59
|
+
const token = locker.token.address;
|
|
60
|
+
const sdToken = locker.sdToken.address;
|
|
61
|
+
const gauge = locker.modules.gauge;
|
|
62
|
+
const depositor = locker.modules.depositor;
|
|
63
|
+
const votingEscrow = locker.modules.veToken;
|
|
64
|
+
const lockerAddress = locker.modules.locker;
|
|
65
|
+
const secondaryMarket = locker.secondaryMarket;
|
|
66
|
+
const rewards = locker.rewards;
|
|
67
|
+
const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18);
|
|
68
|
+
const format = (value) => formatUnits(value, locker.token.decimals);
|
|
69
|
+
const formatRes = (value) => format(getRes(value));
|
|
70
|
+
const calls = [
|
|
71
|
+
/*********************************************************************************
|
|
72
|
+
*** Voting Escrow
|
|
73
|
+
*********************************************************************************/
|
|
74
|
+
// Token locked by the Locker
|
|
75
|
+
{ address: votingEscrow, name: 'locked', params: [lockerAddress] },
|
|
76
|
+
// veToken Balance of the Locker
|
|
77
|
+
{ address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
|
|
78
|
+
// Total token locked
|
|
79
|
+
{ address: votingEscrow, name: 'supply' },
|
|
80
|
+
// Total veToken supply
|
|
81
|
+
{ address: votingEscrow, name: 'totalSupply' },
|
|
82
|
+
/*********************************************************************************
|
|
83
|
+
*** Gauge
|
|
84
|
+
*********************************************************************************/
|
|
85
|
+
// Total sdToken staked
|
|
86
|
+
{ address: gauge, name: 'totalSupply' },
|
|
87
|
+
// Gauge working supply
|
|
88
|
+
{ address: gauge, name: 'working_supply' },
|
|
89
|
+
/*********************************************************************************
|
|
90
|
+
*** Token & sdToken
|
|
91
|
+
*********************************************************************************/
|
|
92
|
+
// Token balance not locked
|
|
93
|
+
{ address: token, name: 'balanceOf', params: [depositor] },
|
|
94
|
+
// sdToken in secondary market pool
|
|
95
|
+
{ address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
|
|
96
|
+
/*********************************************************************************
|
|
97
|
+
*** Peg
|
|
98
|
+
*********************************************************************************/
|
|
99
|
+
// Return amount when swapping {pegBase} sdToken to token -> get_dy(int128,int128,uint256)
|
|
100
|
+
{ address: secondaryMarket.pool, name: '0x5e0d443f', params: [One, Zero, pegBase] },
|
|
101
|
+
/*********************************************************************************
|
|
102
|
+
*** Rewards
|
|
103
|
+
*********************************************************************************/
|
|
104
|
+
// Streaming status for each reward token
|
|
105
|
+
...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
|
|
106
|
+
];
|
|
107
|
+
const res = await multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId));
|
|
108
|
+
const raw = {
|
|
109
|
+
tokenLocked: getRes(res.shift()),
|
|
110
|
+
veBalanceOfLocker: formatRes(res.shift()),
|
|
111
|
+
totalTokenLocked: formatRes(res.shift()),
|
|
112
|
+
veTotalSupply: formatRes(res.shift()),
|
|
113
|
+
totalSupplyStaked: formatRes(res.shift()),
|
|
114
|
+
gaugeWorkingSupply: formatRes(res.shift()),
|
|
115
|
+
amountTokenNotLock: formatRes(res.shift()),
|
|
116
|
+
sdTokenInPool: formatRes(res.shift()),
|
|
117
|
+
peg: getRes(res.shift()),
|
|
118
|
+
rewards: rewards.map(() => getRes(res.shift())),
|
|
119
|
+
veTokenRate: '4',
|
|
120
|
+
_workingSupply: '0',
|
|
121
|
+
_veBalanceOfLocker: '0',
|
|
122
|
+
};
|
|
123
|
+
raw.tokenLocked = format(raw.tokenLocked[0]);
|
|
124
|
+
raw.peg = parsePeg(locker, raw.peg);
|
|
125
|
+
raw._workingSupply = raw.gaugeWorkingSupply;
|
|
126
|
+
raw._veBalanceOfLocker = raw.veBalanceOfLocker;
|
|
127
|
+
return parse({ locker, common, prices, raw });
|
|
128
|
+
};
|
|
129
|
+
export default blackpoolLocker;
|
|
130
|
+
//# sourceMappingURL=blackpool.js.map
|