@stake-dao/reader 0.5.36 → 0.5.38
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/bytecodes/index.js +0 -1
- package/dist/esm/bytecodes/index.js.map +1 -1
- package/dist/esm/index.js +0 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lockers/fetch/index.js +3 -5
- package/dist/esm/lockers/fetch/index.js.map +1 -1
- package/dist/esm/lockers/fetch/static.js +0 -2
- package/dist/esm/lockers/fetch/static.js.map +1 -1
- package/dist/esm/strategies/utils/boost.js +0 -4
- package/dist/esm/strategies/utils/boost.js.map +1 -1
- package/dist/esm/utils.js +0 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/votemarket/curve/fetchUserVlCvxClaimable.js +58 -6
- package/dist/esm/votemarket/curve/fetchUserVlCvxClaimable.js.map +1 -1
- package/dist/esm/votemarket/fetchCampaigns/processRawCampaigns.js +1 -0
- package/dist/esm/votemarket/fetchCampaigns/processRawCampaigns.js.map +1 -1
- package/dist/types/bytecodes/index.d.ts +0 -1
- package/dist/types/bytecodes/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/index.d.ts +5 -2
- package/dist/types/lockers/fetch/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/static.d.ts.map +1 -1
- package/dist/types/strategies/utils/boost.d.ts.map +1 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/votemarket/curve/fetchUserVlCvxClaimable.d.ts.map +1 -1
- package/dist/types/votemarket/fetchCampaigns/processRawCampaigns.d.ts.map +1 -1
- package/dist/types/votemarket/types.d.ts +2 -0
- package/dist/types/votemarket/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/bytecodes/index.ts +0 -1
- package/src/index.ts +0 -4
- package/src/lockers/fetch/index.ts +4 -5
- package/src/lockers/fetch/static.ts +0 -2
- package/src/strategies/utils/boost.ts +0 -6
- package/src/utils.ts +0 -1
- package/src/votemarket/curve/fetchUserVlCvxClaimable.ts +67 -6
- package/src/votemarket/fetchCampaigns/processRawCampaigns.ts +1 -0
- package/src/votemarket/types.ts +2 -0
- package/dist/esm/abis/angleVaultsMulticall.js +0 -85
- package/dist/esm/abis/angleVaultsMulticall.js.map +0 -1
- package/dist/esm/bytecodes/strategies/batches/batchAngleStrats.js +0 -24
- package/dist/esm/bytecodes/strategies/batches/batchAngleStrats.js.map +0 -1
- package/dist/esm/lockers/fetch/protocols/angle.js +0 -136
- package/dist/esm/lockers/fetch/protocols/angle.js.map +0 -1
- package/dist/esm/strategies/angle/endpoints.js +0 -3
- package/dist/esm/strategies/angle/endpoints.js.map +0 -1
- package/dist/esm/strategies/angle/fetch.js +0 -213
- package/dist/esm/strategies/angle/fetch.js.map +0 -1
- package/dist/types/abis/angleVaultsMulticall.d.ts +0 -42
- package/dist/types/abis/angleVaultsMulticall.d.ts.map +0 -1
- package/dist/types/bytecodes/strategies/batches/batchAngleStrats.d.ts +0 -4
- package/dist/types/bytecodes/strategies/batches/batchAngleStrats.d.ts.map +0 -1
- package/dist/types/lockers/fetch/protocols/angle.d.ts +0 -9
- package/dist/types/lockers/fetch/protocols/angle.d.ts.map +0 -1
- package/dist/types/strategies/angle/endpoints.d.ts +0 -3
- package/dist/types/strategies/angle/endpoints.d.ts.map +0 -1
- package/dist/types/strategies/angle/fetch.d.ts +0 -22
- package/dist/types/strategies/angle/fetch.d.ts.map +0 -1
- package/src/abis/angleVaultsMulticall.ts +0 -85
- package/src/bytecodes/strategies/batches/batchAngleStrats.ts +0 -26
- package/src/lockers/fetch/protocols/angle.ts +0 -157
- package/src/strategies/angle/endpoints.ts +0 -2
- package/src/strategies/angle/fetch.ts +0 -253
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import { STRAT_FEES, Zero, angleStrats, contracts } from '@stake-dao/constants';
|
|
2
|
-
import { chunk, uniq } from 'lodash-es';
|
|
3
|
-
import { encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem';
|
|
4
|
-
import { mainnet } from 'viem/chains';
|
|
5
|
-
import multicallAngleVaultsAbi from '../../abis/angleVaultsMulticall.js';
|
|
6
|
-
import { batchAngleStrats } from '../../bytecodes/index.js';
|
|
7
|
-
import { getPricesFromLlama } from '../../prices.js';
|
|
8
|
-
import { batchJsonRpc, equalTlc, multicall } from '../../utils.js';
|
|
9
|
-
import { getAprBreakdown } from '../utils/getAprBreakdown.js';
|
|
10
|
-
import getTokenTypes from '../utils/getTokenTypes.js';
|
|
11
|
-
import { ANGLE_APR_URL, ANGLE_PRICE_URL } from './endpoints.js';
|
|
12
|
-
export const fetchAngle = async ({ prices, provider, rpc, chainId }) => {
|
|
13
|
-
const stratsDataCalls = [];
|
|
14
|
-
const balancesCalls = [];
|
|
15
|
-
const dataCalls = [];
|
|
16
|
-
const strats = angleStrats.strats[chainId].filter((s) => s.chainId === chainId);
|
|
17
|
-
const tokensToFetch = [];
|
|
18
|
-
for (const s of strats) {
|
|
19
|
-
tokensToFetch.push(...s.underlyingCoins);
|
|
20
|
-
if (s.lpToken.symbol !== 'SLP') {
|
|
21
|
-
balancesCalls.push(...[
|
|
22
|
-
{
|
|
23
|
-
address: s.lpToken.address,
|
|
24
|
-
name: s.key.includes('gamma') ? 'getTotalAmounts' : 'getUnderlyingBalances',
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
address: s.lpToken.address,
|
|
28
|
-
name: 'totalSupply',
|
|
29
|
-
},
|
|
30
|
-
]);
|
|
31
|
-
}
|
|
32
|
-
dataCalls.push(...[
|
|
33
|
-
{ address: s.vault, name: 'totalSupply' },
|
|
34
|
-
{ address: s.rewards[0].gauge, name: 'totalSupply' },
|
|
35
|
-
{ address: s.rewards[0].gauge, name: 'working_supply' },
|
|
36
|
-
]);
|
|
37
|
-
}
|
|
38
|
-
const httpCalls = [
|
|
39
|
-
// Angle APR
|
|
40
|
-
(await fetch(ANGLE_APR_URL)).json(),
|
|
41
|
-
// Angle Prices
|
|
42
|
-
(await fetch(ANGLE_PRICE_URL)).json(),
|
|
43
|
-
// Defillama prices
|
|
44
|
-
await getPricesFromLlama(uniq(tokensToFetch), chainId),
|
|
45
|
-
];
|
|
46
|
-
const httpResponses = await Promise.all(httpCalls);
|
|
47
|
-
const rawBalances = await multicall(provider, balancesCalls, multicallAngleVaultsAbi);
|
|
48
|
-
const rawData = await multicall(provider, dataCalls, multicallAngleVaultsAbi);
|
|
49
|
-
const angleAprData = httpResponses[0];
|
|
50
|
-
const anglePriceData = httpResponses[1];
|
|
51
|
-
const defillamaPrices = httpResponses[2];
|
|
52
|
-
let rawPriceIndex = 0;
|
|
53
|
-
const stratsWithApy = strats.map((s) => {
|
|
54
|
-
const aprData = angleAprData[s.aprApiKey];
|
|
55
|
-
let priceData = anglePriceData.find((d) => d.token === s.aprApiKey);
|
|
56
|
-
if (!priceData) {
|
|
57
|
-
const token0 = s.underlyingCoins[0];
|
|
58
|
-
const token1 = s.underlyingCoins[1];
|
|
59
|
-
const token0Price = defillamaPrices.find((p) => p.symbol === token0.symbol);
|
|
60
|
-
const token1Price = defillamaPrices.find((p) => p.symbol === token1.symbol);
|
|
61
|
-
const token0AmountUsd = Number(formatUnits(rawBalances[rawPriceIndex].result[0], token0.decimals)) * token0Price.usdPrice;
|
|
62
|
-
const token1AmountUsd = Number(formatUnits(rawBalances[rawPriceIndex].result[1], token1.decimals)) * token1Price.usdPrice;
|
|
63
|
-
const totalLp = Number(formatUnits(rawBalances[rawPriceIndex + 1].result, 18));
|
|
64
|
-
const lpPriceInUsd = (token0AmountUsd + token1AmountUsd) / totalLp;
|
|
65
|
-
priceData = { rate: lpPriceInUsd };
|
|
66
|
-
rawPriceIndex += 2;
|
|
67
|
-
}
|
|
68
|
-
let maxApr = 0;
|
|
69
|
-
let tradingApy = 0;
|
|
70
|
-
if (aprData?.details && aprData.value && aprData.address) {
|
|
71
|
-
tradingApy = aprData.details.fees ? aprData.details.fees : 0;
|
|
72
|
-
const aprDetailsKeys = Object.keys(aprData.details);
|
|
73
|
-
const indexOfApy = aprDetailsKeys.map((k) => k.includes(s.lpToken.address.toLowerCase())).indexOf(true);
|
|
74
|
-
maxApr =
|
|
75
|
-
indexOfApy > 0
|
|
76
|
-
? aprData.details[aprDetailsKeys[indexOfApy]]
|
|
77
|
-
: aprData.details.max
|
|
78
|
-
? aprData.details.max
|
|
79
|
-
: aprData.value - tradingApy;
|
|
80
|
-
}
|
|
81
|
-
if (s.key === 'angle-sushi-eura-angle') {
|
|
82
|
-
stratsDataCalls.push({
|
|
83
|
-
vault: s.vault,
|
|
84
|
-
token: s.lpToken.address,
|
|
85
|
-
sdtLiquidityGauge: s.gaugeAddress,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
...s,
|
|
90
|
-
tradingApy,
|
|
91
|
-
minApr: (maxApr * ((100 - STRAT_FEES) / 100)) / 2.5,
|
|
92
|
-
maxApr: maxApr * ((100 - STRAT_FEES) / 100),
|
|
93
|
-
lpPriceInUsd: priceData ? priceData.rate : 1,
|
|
94
|
-
};
|
|
95
|
-
});
|
|
96
|
-
const inputArgsChunks = chunk(stratsDataCalls, 20);
|
|
97
|
-
const angleCalls = inputArgsChunks.map((inputArgs) => {
|
|
98
|
-
const inputData = encodeAbiParameters(parseAbiParameters(batchAngleStrats.inputType[chainId]), [
|
|
99
|
-
contracts.sdGaugeController[chainId],
|
|
100
|
-
inputArgs,
|
|
101
|
-
]);
|
|
102
|
-
return batchAngleStrats.bytecode[chainId].concat(inputData.slice(2));
|
|
103
|
-
});
|
|
104
|
-
const rawAngleData = await batchJsonRpc({
|
|
105
|
-
rpc,
|
|
106
|
-
calls: angleCalls,
|
|
107
|
-
outputTypeAbi: batchAngleStrats.outputTypeHr[chainId],
|
|
108
|
-
callsKey: `strategies/angle/fetch.ts: rawAngleData - chainId ${chainId} - rpc ${rpc}`,
|
|
109
|
-
});
|
|
110
|
-
let offchainDataIndex = 0;
|
|
111
|
-
const parsedStrats = stratsWithApy.map((s) => {
|
|
112
|
-
let fetchedData;
|
|
113
|
-
if (s.offchain) {
|
|
114
|
-
fetchedData = {
|
|
115
|
-
totalSupply: rawData[offchainDataIndex].result,
|
|
116
|
-
sdGaugeTotalSupply: rawData[offchainDataIndex + 1].result,
|
|
117
|
-
sdWorkingSupply: chainId === mainnet.id ? rawData[offchainDataIndex + 2].result : Zero,
|
|
118
|
-
accumulatedFees: Zero,
|
|
119
|
-
keeperFee: Zero,
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
fetchedData = rawAngleData.shift();
|
|
124
|
-
}
|
|
125
|
-
offchainDataIndex += 3;
|
|
126
|
-
const rewardsData = s.rewards.map((r) => {
|
|
127
|
-
const rewardToken = {
|
|
128
|
-
symbol: r.symbol,
|
|
129
|
-
name: r.name,
|
|
130
|
-
decimals: r.decimals,
|
|
131
|
-
address: r.address,
|
|
132
|
-
};
|
|
133
|
-
const rewardPrice = prices.find((p) => equalTlc(p.address, rewardToken.address));
|
|
134
|
-
return {
|
|
135
|
-
token: rewardToken,
|
|
136
|
-
price: rewardPrice ? rewardPrice.usdPrice : 0,
|
|
137
|
-
apr: 0,
|
|
138
|
-
streaming: false,
|
|
139
|
-
periodFinish: 0,
|
|
140
|
-
rate: '0',
|
|
141
|
-
lastUpdate: '0',
|
|
142
|
-
claimablePendingRewards: '0',
|
|
143
|
-
};
|
|
144
|
-
});
|
|
145
|
-
const boost = 2.5;
|
|
146
|
-
const sdtApr = {
|
|
147
|
-
sdtUserApr: 0,
|
|
148
|
-
sdtFuturUserApr: 0,
|
|
149
|
-
sdtMinApr: 0,
|
|
150
|
-
sdtFuturMinApr: 0,
|
|
151
|
-
sdtMaxApr: 0,
|
|
152
|
-
sdtFuturMaxApr: 0,
|
|
153
|
-
sdtBoost: 1,
|
|
154
|
-
};
|
|
155
|
-
const apr = getAprBreakdown(s, rewardsData, boost, sdtApr);
|
|
156
|
-
const totalSupply = formatUnits(fetchedData.totalSupply, 0);
|
|
157
|
-
const lpPriceInUsd = s.lpPriceInUsd;
|
|
158
|
-
const tvl = lpPriceInUsd * Number(formatUnits(BigInt(fetchedData.totalSupply), 18));
|
|
159
|
-
const sdGauge = {
|
|
160
|
-
address: s.gaugeAddress,
|
|
161
|
-
totalSupply: formatUnits(fetchedData.sdGaugeTotalSupply, 0),
|
|
162
|
-
relativeWeight: '0',
|
|
163
|
-
weight: '0',
|
|
164
|
-
futureWeight: '0',
|
|
165
|
-
workingSupply: '0',
|
|
166
|
-
};
|
|
167
|
-
return {
|
|
168
|
-
key: s.key,
|
|
169
|
-
name: s.name,
|
|
170
|
-
tokensFilter: getTokenTypes(s),
|
|
171
|
-
protocol: s.protocol,
|
|
172
|
-
chainId: s.chainId,
|
|
173
|
-
vault: s.vault,
|
|
174
|
-
lpToken: s.lpToken,
|
|
175
|
-
gaugeAddress: s.gaugeAddress,
|
|
176
|
-
coins: s.coins,
|
|
177
|
-
sdGauge,
|
|
178
|
-
lpPriceInUsd,
|
|
179
|
-
streaming: rewardsData.some((r) => Number(r.periodFinish) > Math.floor(Date.now() / 1000)),
|
|
180
|
-
tvl,
|
|
181
|
-
apr: {
|
|
182
|
-
boost,
|
|
183
|
-
...apr,
|
|
184
|
-
},
|
|
185
|
-
rewards: rewardsData,
|
|
186
|
-
// Base APR data
|
|
187
|
-
tradingApy: s.tradingApy,
|
|
188
|
-
minApr: s.minApr,
|
|
189
|
-
maxApr: s.maxApr,
|
|
190
|
-
// Raw data
|
|
191
|
-
totalSupply,
|
|
192
|
-
// Gas optimised
|
|
193
|
-
vaultFees: {
|
|
194
|
-
keeper: Number(fetchedData.keeperFee) / 100,
|
|
195
|
-
accumulated: formatUnits(fetchedData.accumulatedFees, 0),
|
|
196
|
-
},
|
|
197
|
-
};
|
|
198
|
-
});
|
|
199
|
-
return {
|
|
200
|
-
global: {
|
|
201
|
-
fees: {
|
|
202
|
-
veSdt: 5,
|
|
203
|
-
perf: 2,
|
|
204
|
-
accumulator: 8,
|
|
205
|
-
claimer: 0.5,
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
|
-
deployed: parsedStrats,
|
|
209
|
-
notDeployed: [],
|
|
210
|
-
fetched: true,
|
|
211
|
-
};
|
|
212
|
-
};
|
|
213
|
-
//# sourceMappingURL=fetch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../src/strategies/angle/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
declare const angleVaultsMulticall: ({
|
|
2
|
-
inputs: never[];
|
|
3
|
-
name: string;
|
|
4
|
-
outputs: {
|
|
5
|
-
internalType: string;
|
|
6
|
-
name: string;
|
|
7
|
-
type: string;
|
|
8
|
-
}[];
|
|
9
|
-
payable: boolean;
|
|
10
|
-
stateMutability: string;
|
|
11
|
-
type: string;
|
|
12
|
-
} | {
|
|
13
|
-
inputs: {
|
|
14
|
-
name: string;
|
|
15
|
-
type: string;
|
|
16
|
-
}[];
|
|
17
|
-
name: string;
|
|
18
|
-
outputs: {
|
|
19
|
-
name: string;
|
|
20
|
-
type: string;
|
|
21
|
-
}[];
|
|
22
|
-
stateMutability: string;
|
|
23
|
-
type: string;
|
|
24
|
-
payable?: undefined;
|
|
25
|
-
} | {
|
|
26
|
-
inputs: {
|
|
27
|
-
internalType: string;
|
|
28
|
-
name: string;
|
|
29
|
-
type: string;
|
|
30
|
-
}[];
|
|
31
|
-
name: string;
|
|
32
|
-
outputs: {
|
|
33
|
-
internalType: string;
|
|
34
|
-
name: string;
|
|
35
|
-
type: string;
|
|
36
|
-
}[];
|
|
37
|
-
stateMutability: string;
|
|
38
|
-
type: string;
|
|
39
|
-
payable?: undefined;
|
|
40
|
-
})[];
|
|
41
|
-
export default angleVaultsMulticall;
|
|
42
|
-
//# sourceMappingURL=angleVaultsMulticall.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"angleVaultsMulticall.d.ts","sourceRoot":"","sources":["../../../src/abis/angleVaultsMulticall.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkFzB,CAAA;AAED,eAAe,oBAAoB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batchAngleStrats.d.ts","sourceRoot":"","sources":["../../../../../src/bytecodes/strategies/batches/batchAngleStrats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,QAAA,MAAM,gBAAgB,EAAE,aAqBvB,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Locker } from '../types.js';
|
|
2
|
-
export declare const locker: Locker;
|
|
3
|
-
declare const angleLocker: ({ provider, common, prices }: {
|
|
4
|
-
provider: any;
|
|
5
|
-
common: any;
|
|
6
|
-
prices: any;
|
|
7
|
-
}) => Promise<any>;
|
|
8
|
-
export default angleLocker;
|
|
9
|
-
//# sourceMappingURL=angle.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"angle.d.ts","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/angle.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,eAAO,MAAM,MAAM,EAAE,MA0DpB,CAAA;AAED,QAAA,MAAM,WAAW,iCAAwC;IAAE,QAAQ,MAAC;IAAC,MAAM,MAAC;IAAC,MAAM,MAAA;CAAE,iBAuFpF,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../../../src/strategies/angle/endpoints.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,mCAAmC,CAAA;AAC7D,eAAO,MAAM,eAAe,sCAAsC,CAAA"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { type Price } from '../../prices.js';
|
|
2
|
-
interface TFetchAngle {
|
|
3
|
-
prices: Price[];
|
|
4
|
-
provider: any;
|
|
5
|
-
rpc: string;
|
|
6
|
-
chainId: number;
|
|
7
|
-
}
|
|
8
|
-
export declare const fetchAngle: ({ prices, provider, rpc, chainId }: TFetchAngle) => Promise<{
|
|
9
|
-
global: {
|
|
10
|
-
fees: {
|
|
11
|
-
veSdt: number;
|
|
12
|
-
perf: number;
|
|
13
|
-
accumulator: number;
|
|
14
|
-
claimer: number;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
deployed: any;
|
|
18
|
-
notDeployed: never[];
|
|
19
|
-
fetched: boolean;
|
|
20
|
-
}>;
|
|
21
|
-
export {};
|
|
22
|
-
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../src/strategies/angle/fetch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAsB,MAAM,iBAAiB,CAAA;AAOhE,UAAU,WAAW;IACnB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,QAAQ,EAAE,GAAG,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,UAAU,uCAA8C,WAAW;;;;;;;;;;;;EAwO/E,CAAA"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
const angleVaultsMulticall = [
|
|
2
|
-
{
|
|
3
|
-
inputs: [],
|
|
4
|
-
name: 'totalSupply',
|
|
5
|
-
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
|
|
6
|
-
payable: false,
|
|
7
|
-
stateMutability: 'view',
|
|
8
|
-
type: 'function',
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
inputs: [],
|
|
12
|
-
name: 'working_supply',
|
|
13
|
-
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
|
|
14
|
-
payable: false,
|
|
15
|
-
stateMutability: 'view',
|
|
16
|
-
type: 'function',
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
inputs: [],
|
|
20
|
-
name: 'getUnderlyingBalances',
|
|
21
|
-
outputs: [
|
|
22
|
-
{ internalType: 'uint256', name: '', type: 'uint256' },
|
|
23
|
-
{ internalType: 'uint256', name: '', type: 'uint256' },
|
|
24
|
-
],
|
|
25
|
-
payable: false,
|
|
26
|
-
stateMutability: 'view',
|
|
27
|
-
type: 'function',
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
inputs: [],
|
|
31
|
-
name: 'getTotalAmounts',
|
|
32
|
-
outputs: [
|
|
33
|
-
{ internalType: 'uint256', name: '', type: 'uint256' },
|
|
34
|
-
{ internalType: 'uint256', name: '', type: 'uint256' },
|
|
35
|
-
],
|
|
36
|
-
payable: false,
|
|
37
|
-
stateMutability: 'view',
|
|
38
|
-
type: 'function',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
inputs: [],
|
|
42
|
-
name: 'getTotalAmounts',
|
|
43
|
-
outputs: [
|
|
44
|
-
{ internalType: 'uint256', name: '', type: 'uint256' },
|
|
45
|
-
{ internalType: 'uint256', name: '', type: 'uint256' },
|
|
46
|
-
],
|
|
47
|
-
payable: false,
|
|
48
|
-
stateMutability: 'view',
|
|
49
|
-
type: 'function',
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
inputs: [{ name: 'arg0', type: 'address' }],
|
|
53
|
-
name: 'reward_data',
|
|
54
|
-
outputs: [
|
|
55
|
-
{ name: 'token', type: 'address' },
|
|
56
|
-
{ name: 'distributor', type: 'address' },
|
|
57
|
-
{ name: 'period_finish', type: 'uint256' },
|
|
58
|
-
{ name: 'rate', type: 'uint256' },
|
|
59
|
-
{ name: 'last_update', type: 'uint256' },
|
|
60
|
-
{ name: 'integral', type: 'uint256' },
|
|
61
|
-
],
|
|
62
|
-
stateMutability: 'view',
|
|
63
|
-
type: 'function',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
inputs: [{ internalType: 'address', name: '', type: 'address' }],
|
|
67
|
-
name: 'rewardData',
|
|
68
|
-
outputs: [
|
|
69
|
-
{ internalType: 'address', name: 'rewardsDistributor', type: 'address' },
|
|
70
|
-
{ internalType: 'uint256', name: 'rewardsDuration', type: 'uint256' },
|
|
71
|
-
{ internalType: 'uint256', name: 'periodFinish', type: 'uint256' },
|
|
72
|
-
{ internalType: 'uint256', name: 'rewardRate', type: 'uint256' },
|
|
73
|
-
{ internalType: 'uint256', name: 'lastUpdateTime', type: 'uint256' },
|
|
74
|
-
{
|
|
75
|
-
internalType: 'uint256',
|
|
76
|
-
name: 'rewardPerTokenStored',
|
|
77
|
-
type: 'uint256',
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
stateMutability: 'view',
|
|
81
|
-
type: 'function',
|
|
82
|
-
},
|
|
83
|
-
]
|
|
84
|
-
|
|
85
|
-
export default angleVaultsMulticall
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { BatchMetaData } from '../../types.js'
|
|
2
|
-
|
|
3
|
-
const batchAngleStrats: BatchMetaData = {
|
|
4
|
-
bytecode: {
|
|
5
|
-
1: '0x608060405234801561001057600080fd5b506040516112ad3803806112ad83398181016040528101906100329190610c31565b60008151905060008167ffffffffffffffff81111561005457610053610a85565b5b60405190808252806020026020018201604052801561008d57816020015b61007a6108f7565b8152602001906001900390816100725790505b509050600084905060005b838110156108c75760008582815181106100b5576100b4610c8d565b5b60200260200101519050600081600001519050600082604001519050826020015173ffffffffffffffffffffffffffffffffffffffff166370a0823184600001516040518263ffffffff1660e01b81526004016101129190610ccb565b602060405180830381865afa15801561012f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101539190610d1c565b86858151811061016657610165610c8d565b5b602002602001015160000181815250508173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e59190610d1c565b8685815181106101f8576101f7610c8d565b5b602002602001015160200181815250508173ffffffffffffffffffffffffffffffffffffffff1663f8ce31646040518163ffffffff1660e01b8152600401602060405180830381865afa158015610253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102779190610d1c565b86858151811061028a57610289610c8d565b5b602002602001015160400181815250508173ffffffffffffffffffffffffffffffffffffffff1663422ede426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103099190610d1c565b86858151811061031c5761031b610c8d565b5b602002602001015160600181815250508473ffffffffffffffffffffffffffffffffffffffff16636207d86684604001516040518263ffffffff1660e01b81526004016103699190610ccb565b602060405180830381865afa158015610386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103aa9190610d1c565b8685815181106103bd576103bc610c8d565b5b60200260200101516101600181815250508473ffffffffffffffffffffffffffffffffffffffff16634e791a3a84604001516040518263ffffffff1660e01b815260040161040b9190610ccb565b602060405180830381865afa158015610428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044c9190610d1c565b86858151811061045f5761045e610c8d565b5b60200260200101516101800181815250508473ffffffffffffffffffffffffffffffffffffffff16636977ff926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df9190610d1c565b8685815181106104f2576104f1610c8d565b5b60200260200101516101a00181815250508073ffffffffffffffffffffffffffffffffffffffff166317e280896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105729190610d1c565b86858151811061058557610584610c8d565b5b60200260200101516101c00181815250508073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106059190610d1c565b86858151811061061857610617610c8d565b5b60200260200101516101e001818152505060008173ffffffffffffffffffffffffffffffffffffffff1663963c94b96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190610d1c565b90508067ffffffffffffffff8111156106b6576106b5610a85565b5b6040519080825280602002602001820160405280156106ef57816020015b6106dc61097b565b8152602001906001900390816106d45790505b5087868151811061070357610702610c8d565b5b6020026020010151610200018190525060005b818110156108af5760008373ffffffffffffffffffffffffffffffffffffffff166354c49fe9836040518263ffffffff1660e01b81526004016107599190610d58565b602060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a9190610d73565b90508373ffffffffffffffffffffffffffffffffffffffff166348e9c65e826040518263ffffffff1660e01b81526004016107d59190610ccb565b60c060405180830381865afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108169190610e40565b89888151811061082957610828610c8d565b5b60200260200101516102000151838151811061084857610847610c8d565b5b602002602001015160000181905250600089888151811061086c5761086b610c8d565b5b60200260200101516102000151838151811061088b5761088a610c8d565b5b602002602001015160200181815250505080806108a790610e9c565b915050610716565b505050505080806108bf90610e9c565b915050610098565b506000826040516020016108db919061128a565b6040516020818303038152906040529050602081018059038082f35b60405180610220016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b604051806040016040528061098e61099b565b8152602001600081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a3c82610a11565b9050919050565b610a4c81610a31565b8114610a5757600080fd5b50565b600081519050610a6981610a43565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610abd82610a74565b810181811067ffffffffffffffff82111715610adc57610adb610a85565b5b80604052505050565b6000610aef6109fd565b9050610afb8282610ab4565b919050565b600067ffffffffffffffff821115610b1b57610b1a610a85565b5b602082029050602081019050919050565b600080fd5b600080fd5b600060608284031215610b4c57610b4b610b31565b5b610b566060610ae5565b90506000610b6684828501610a5a565b6000830152506020610b7a84828501610a5a565b6020830152506040610b8e84828501610a5a565b60408301525092915050565b6000610bad610ba884610b00565b610ae5565b90508083825260208201905060608402830185811115610bd057610bcf610b2c565b5b835b81811015610bf95780610be58882610b36565b845260208401935050606081019050610bd2565b5050509392505050565b600082601f830112610c1857610c17610a6f565b5b8151610c28848260208601610b9a565b91505092915050565b60008060408385031215610c4857610c47610a07565b5b6000610c5685828601610a5a565b925050602083015167ffffffffffffffff811115610c7757610c76610a0c565b5b610c8385828601610c03565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b610cc581610a31565b82525050565b6000602082019050610ce06000830184610cbc565b92915050565b6000819050919050565b610cf981610ce6565b8114610d0457600080fd5b50565b600081519050610d1681610cf0565b92915050565b600060208284031215610d3257610d31610a07565b5b6000610d4084828501610d07565b91505092915050565b610d5281610ce6565b82525050565b6000602082019050610d6d6000830184610d49565b92915050565b600060208284031215610d8957610d88610a07565b5b6000610d9784828501610a5a565b91505092915050565b600060c08284031215610db657610db5610b31565b5b610dc060c0610ae5565b90506000610dd084828501610a5a565b6000830152506020610de484828501610a5a565b6020830152506040610df884828501610d07565b6040830152506060610e0c84828501610d07565b6060830152506080610e2084828501610d07565b60808301525060a0610e3484828501610d07565b60a08301525092915050565b600060c08284031215610e5657610e55610a07565b5b6000610e6484828501610da0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ea782610ce6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ed957610ed8610e6d565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f1981610ce6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f5481610a31565b82525050565b60c082016000820151610f706000850182610f4b565b506020820151610f836020850182610f4b565b506040820151610f966040850182610f10565b506060820151610fa96060850182610f10565b506080820151610fbc6080850182610f10565b5060a0820151610fcf60a0850182610f10565b50505050565b60e082016000820151610feb6000850182610f5a565b506020820151610ffe60c0850182610f10565b50505050565b60006110108383610fd5565b60e08301905092915050565b6000602082019050919050565b600061103482610f1f565b61103e8185610f2a565b935061104983610f3b565b8060005b8381101561107a5781516110618882611004565b975061106c8361101c565b92505060018101905061104d565b5085935050505092915050565b6000610220830160008301516110a06000860182610f10565b5060208301516110b36020860182610f10565b5060408301516110c66040860182610f10565b5060608301516110d96060860182610f10565b5060808301516110ec6080860182610f10565b5060a08301516110ff60a0860182610f10565b5060c083015161111260c0860182610f10565b5060e083015161112560e0860182610f10565b5061010083015161113a610100860182610f10565b5061012083015161114f610120860182610f10565b50610140830151611164610140860182610f10565b50610160830151611179610160860182610f10565b5061018083015161118e610180860182610f10565b506101a08301516111a36101a0860182610f10565b506101c08301516111b86101c0860182610f10565b506101e08301516111cd6101e0860182610f10565b506102008301518482036102008601526111e78282611029565b9150508091505092915050565b60006112008383611087565b905092915050565b6000602082019050919050565b600061122082610ee4565b61122a8185610eef565b93508360208202850161123c85610f00565b8060005b85811015611278578484038952815161125985826111f4565b945061126483611208565b925060208a01995050600181019050611240565b50829750879550505050505092915050565b600060208201905081810360008301526112a48184611215565b90509291505056fe',
|
|
6
|
-
},
|
|
7
|
-
inputType: {
|
|
8
|
-
1: [
|
|
9
|
-
'address gaugeController, AngleStategyInfo[] inputs',
|
|
10
|
-
'struct AngleStategyInfo { address vault; address token; address sdtLiquidityGauge; }',
|
|
11
|
-
],
|
|
12
|
-
},
|
|
13
|
-
outputTypeHr: {
|
|
14
|
-
1: [
|
|
15
|
-
'AngleStratsData[] stratsData',
|
|
16
|
-
'struct AngleStratsData { uint256 vaultHoldings; uint256 totalSupply; uint256 accumulatedFees; uint256 keeperFee; uint256 veSDTFee; uint256 perfFee; uint256 accumulatorFee; uint256 claimerFee; uint256 strategyHoldings; uint256 workingBalance; uint256 workingSupplyStaked; uint256 gaugeRelativeWeight; uint256 gaugeWeight; uint256 totalGaugeWeights; uint256 sdWorkingSupply; uint256 sdGaugeTotalSupply; RewardsWithClaimable[] rewardsData; }',
|
|
17
|
-
'struct RewardsWithClaimable { RewardData rewardData; uint256 claimablePendingRewards; }',
|
|
18
|
-
'struct RewardData { address token; address distributor; uint256 period_finish; uint256 rate; uint256 last_update; uint256 integral; }',
|
|
19
|
-
],
|
|
20
|
-
},
|
|
21
|
-
outputType: {
|
|
22
|
-
1: [],
|
|
23
|
-
},
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export default batchAngleStrats
|
|
@@ -1,157 +0,0 @@
|
|
|
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 { type Call, getRes, multicall } from '../../../utils.js'
|
|
5
|
-
import { parse, parsePeg } from '../parse.js'
|
|
6
|
-
import type { Locker } from '../types.js'
|
|
7
|
-
|
|
8
|
-
export const locker: Locker = {
|
|
9
|
-
id: 'angle',
|
|
10
|
-
symbol: 'ANGLE',
|
|
11
|
-
protocol: 'Angle',
|
|
12
|
-
protocolDescription:
|
|
13
|
-
'Angle is a decentralized, capital efficient and over-collateralized stablecoin protocol composed of smart contracts running on open blockchains.',
|
|
14
|
-
website: 'https://angle.money/',
|
|
15
|
-
logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/angle.svg`,
|
|
16
|
-
chainId: 1,
|
|
17
|
-
rgb: '249, 145, 144',
|
|
18
|
-
token: tokenWithId('angle')!,
|
|
19
|
-
sdToken: tokenWithId('sdangle')!,
|
|
20
|
-
rewards: [
|
|
21
|
-
{ ...tokenWithId('sdt')!, distribution: 'streamed', origin: 'sdtEmission' },
|
|
22
|
-
{ ...tokenWithId('angle')!, distribution: 'streamed', origin: 'stratPerf' },
|
|
23
|
-
{ ...tokenWithId('eura')!, distribution: 'streamed', origin: 'native.common' },
|
|
24
|
-
{ ...tokenWithId('sdangle')!, distribution: 'distributed', origin: 'bounties' },
|
|
25
|
-
],
|
|
26
|
-
delegation: ['sdangle.eth'],
|
|
27
|
-
modules: {
|
|
28
|
-
depositor: '0x0000000000000000000000000000000000000000',
|
|
29
|
-
locker: '0xD13F8C25CceD32cdfA79EB5eD654Ce3e484dCAF5',
|
|
30
|
-
veToken: '0x0C462Dbb9EC8cD1630f1728B2CFD2769d09f0dd5',
|
|
31
|
-
gauge: '0xE55843a90672f7d8218285e51EE8fF8E233F35d5',
|
|
32
|
-
accumulator: '0x8cc02F4f383A11b989708437DbA6BB0628d7eE78',
|
|
33
|
-
redeem: '0x1D8A9c30E4e25033498347c1A054717bd0c4D356',
|
|
34
|
-
},
|
|
35
|
-
secondaryMarket: {
|
|
36
|
-
label: 'Curve',
|
|
37
|
-
poolKey: 'factory-v2-101',
|
|
38
|
-
vaultKey: '',
|
|
39
|
-
pool: '0x48fF31bBbD8Ab553Ebe7cBD84e1eA3dBa8f54957',
|
|
40
|
-
pools: ['0x48fF31bBbD8Ab553Ebe7cBD84e1eA3dBa8f54957'],
|
|
41
|
-
pegBase: 300000,
|
|
42
|
-
},
|
|
43
|
-
fees: [
|
|
44
|
-
{
|
|
45
|
-
label: { key: 'liquidity', variable: 'sdANGLE/ANGLE' },
|
|
46
|
-
value: 10,
|
|
47
|
-
key: 'liquidityFee',
|
|
48
|
-
static: true,
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
label: { key: 'treasury' },
|
|
52
|
-
value: 5,
|
|
53
|
-
key: 'daoFee',
|
|
54
|
-
static: true,
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
label: { key: 'harvester' },
|
|
58
|
-
value: 0.1,
|
|
59
|
-
key: 'claimerFee',
|
|
60
|
-
static: true,
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
extensions: {
|
|
64
|
-
coingeckoBaseSlug: 'angle',
|
|
65
|
-
},
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const angleLocker = async ({ provider, common, prices }: { provider; common; prices }) => {
|
|
69
|
-
const token = locker.token.address
|
|
70
|
-
const sdToken = locker.sdToken.address
|
|
71
|
-
|
|
72
|
-
const gauge = locker.modules.gauge
|
|
73
|
-
const depositor = locker.modules.depositor
|
|
74
|
-
const votingEscrow = locker.modules.veToken
|
|
75
|
-
const lockerAddress = locker.modules.locker
|
|
76
|
-
|
|
77
|
-
const secondaryMarket = locker.secondaryMarket!
|
|
78
|
-
const rewards = locker.rewards
|
|
79
|
-
|
|
80
|
-
const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18)
|
|
81
|
-
|
|
82
|
-
const format = (value: bigint) => formatUnits(value, locker.token.decimals)
|
|
83
|
-
const formatRes = (value: any) => format(getRes(value))
|
|
84
|
-
|
|
85
|
-
const calls: Call[] = [
|
|
86
|
-
/*********************************************************************************
|
|
87
|
-
*** Voting Escrow
|
|
88
|
-
*********************************************************************************/
|
|
89
|
-
|
|
90
|
-
// Token locked by the Locker
|
|
91
|
-
{ address: votingEscrow, name: 'locked', params: [lockerAddress] },
|
|
92
|
-
// veToken Balance of the Locker
|
|
93
|
-
{ address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
|
|
94
|
-
// Total token locked
|
|
95
|
-
{ address: votingEscrow, name: 'supply' },
|
|
96
|
-
// Total veToken supply
|
|
97
|
-
{ address: votingEscrow, name: 'totalSupply' },
|
|
98
|
-
|
|
99
|
-
/*********************************************************************************
|
|
100
|
-
*** Gauge
|
|
101
|
-
*********************************************************************************/
|
|
102
|
-
|
|
103
|
-
// Total sdToken staked
|
|
104
|
-
{ address: gauge, name: 'totalSupply' },
|
|
105
|
-
// Gauge working supply
|
|
106
|
-
{ address: gauge, name: 'working_supply' },
|
|
107
|
-
|
|
108
|
-
/*********************************************************************************
|
|
109
|
-
*** Token & sdToken
|
|
110
|
-
*********************************************************************************/
|
|
111
|
-
|
|
112
|
-
// Token balance not locked
|
|
113
|
-
{ address: token, name: 'balanceOf', params: [depositor] },
|
|
114
|
-
// sdToken in secondary market pool
|
|
115
|
-
{ address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
|
|
116
|
-
|
|
117
|
-
/*********************************************************************************
|
|
118
|
-
*** Peg
|
|
119
|
-
*********************************************************************************/
|
|
120
|
-
|
|
121
|
-
// Return amount when swapping {pegBase} sdToken to token -> get_dy(int128,int128,uint256)
|
|
122
|
-
{ address: secondaryMarket.pool, name: '0x5e0d443f', params: [One, Zero, pegBase] },
|
|
123
|
-
|
|
124
|
-
/*********************************************************************************
|
|
125
|
-
*** Rewards
|
|
126
|
-
*********************************************************************************/
|
|
127
|
-
|
|
128
|
-
// Streaming status for each reward token
|
|
129
|
-
...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
|
|
130
|
-
]
|
|
131
|
-
|
|
132
|
-
const res = await multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId))
|
|
133
|
-
const raw = {
|
|
134
|
-
tokenLocked: getRes(res.shift()),
|
|
135
|
-
veBalanceOfLocker: formatRes(res.shift()),
|
|
136
|
-
totalTokenLocked: formatRes(res.shift()),
|
|
137
|
-
veTotalSupply: formatRes(res.shift()),
|
|
138
|
-
totalSupplyStaked: formatRes(res.shift()),
|
|
139
|
-
gaugeWorkingSupply: formatRes(res.shift()),
|
|
140
|
-
amountTokenNotLock: formatRes(res.shift()),
|
|
141
|
-
sdTokenInPool: formatRes(res.shift()),
|
|
142
|
-
peg: getRes(res.shift()),
|
|
143
|
-
rewards: rewards.map(() => getRes(res.shift())),
|
|
144
|
-
veTokenRate: '4',
|
|
145
|
-
_workingSupply: '0',
|
|
146
|
-
_veBalanceOfLocker: '0',
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
raw.tokenLocked = format(raw.tokenLocked[0])
|
|
150
|
-
raw.peg = parsePeg(locker, raw.peg)
|
|
151
|
-
raw._workingSupply = raw.gaugeWorkingSupply
|
|
152
|
-
raw._veBalanceOfLocker = raw.veBalanceOfLocker
|
|
153
|
-
|
|
154
|
-
return parse({ locker, common, prices, raw })
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export default angleLocker
|