|
1 |
| -const sdk = require("@defillama/sdk"); |
2 |
| -const { sumTokensExport } = require("../helper/unwrapLPs"); |
3 |
| - |
4 |
| -const contracts = { |
| 1 | +const config = { |
5 | 2 | ethereum: {
|
6 |
| - boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
7 |
| - staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", |
8 |
| - eqbAddress: "0xfE80D611c6403f70e5B1b9B722D2B3510B740B2B", |
9 |
| - eqbRewardsAddress: "0xd8967B2B15b3CDF96039b7407813B4037f73ec27", |
10 |
| - pendleAddress: "0x808507121b80c02388fad14726482e061b8da827", |
| 3 | + pendleBooster: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
| 4 | + pendleProxy: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", |
| 5 | + eqb: "0xfE80D611c6403f70e5B1b9B722D2B3510B740B2B", |
| 6 | + vlEqb: "0xd8967B2B15b3CDF96039b7407813B4037f73ec27", |
| 7 | + pendle: "0x808507121b80c02388fad14726482e061b8da827", |
| 8 | + ePendle: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", |
| 9 | + ePendleReward: "0x357F55b46821A6C6e476CC32EBB2674cD125e849", |
11 | 10 | },
|
12 | 11 | arbitrum: {
|
13 |
| - boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
14 |
| - staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", |
15 |
| - eqbRewardsAddress: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", |
16 |
| - pendleAddress: "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", |
| 12 | + pendleBooster: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
| 13 | + pendleProxy: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", |
| 14 | + eqb: "0xBfbCFe8873fE28Dfa25f1099282b088D52bbAD9C", |
| 15 | + vlEqb: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", |
| 16 | + pendle: "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", |
| 17 | + ePendle: "0x3EaBE18eAE267D1B57f917aBa085bb5906114600", |
| 18 | + ePendleReward: "0x9739d1E515C5291faA26D92a5D02761b6BbB4D6F", |
17 | 19 | },
|
18 | 20 | bsc: {
|
19 |
| - boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
20 |
| - staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", |
21 |
| - eqbRewardsAddress: "0x0140dE476f49B6B42f7b73612b6dc317aB91D3BC", |
22 |
| - pendleAddress: "0xb3Ed0A426155B79B898849803E3B36552f7ED507", |
| 21 | + pendleBooster: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
| 22 | + pendleProxy: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", |
| 23 | + eqb: "0x374Ca32fd7934c5d43240E1e73fa9B2283468609", |
| 24 | + vlEqb: "0x0140dE476f49B6B42f7b73612b6dc317aB91D3BC", |
| 25 | + pendle: "0xb3Ed0A426155B79B898849803E3B36552f7ED507", |
| 26 | + ePendle: "0x898CA9B3ef8b6a30dA5fc7202f70E7992b3602B3", |
| 27 | + ePendleReward: "0xE2dB20ce7D845f99338BbA4bdFF00e733801Dde7", |
23 | 28 | },
|
24 | 29 | optimism: {
|
25 |
| - boosterAddress: "0x18C61629E6CBAdB85c29ba7993f251b3EbE2B356", |
26 |
| - staker: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
27 |
| - eqbRewardsAddress: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", |
28 |
| - pendleAddress: "0xBC7B1Ff1c6989f006a1185318eD4E7b5796e66E1", |
| 30 | + pendleBooster: "0x18C61629E6CBAdB85c29ba7993f251b3EbE2B356", |
| 31 | + pendleProxy: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", |
| 32 | + eqb: "0xaf3A6f67Af1624d3878A8d30b09FAe7915DcA2a0", |
| 33 | + vlEqb: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", |
| 34 | + pendle: "0xBC7B1Ff1c6989f006a1185318eD4E7b5796e66E1", |
| 35 | + ePendle: "0x86a20111fEae36f3511A30c0640d2099b3A818C5", |
| 36 | + ePendleReward: "0x898CA9B3ef8b6a30dA5fc7202f70E7992b3602B3", |
29 | 37 | },
|
30 | 38 | mantle: {
|
31 |
| - boosterAddress: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", |
32 |
| - staker: "0x479603DE0a8B6D2f4D4eaA1058Eea0d7Ac9E218d", |
33 |
| - eqbRewardsAddress: "0x71e0ce200a10f0bBFB9F924fE466ACf0B7401EbF", |
34 |
| - pendleAddress: "0xd27B18915e7acc8FD6Ac75DB6766a80f8D2f5729", |
| 39 | + pendleBooster: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", |
| 40 | + pendleProxy: "0x479603DE0a8B6D2f4D4eaA1058Eea0d7Ac9E218d", |
| 41 | + eqb: "0x3e7eF8f50246f725885102E8238CBba33F276747", |
| 42 | + vlEqb: "0x71e0ce200a10f0bBFB9F924fE466ACf0B7401EbF", |
| 43 | + pendle: "0xd27B18915e7acc8FD6Ac75DB6766a80f8D2f5729", |
| 44 | + ePendle: "0x6EE066b813cd8C2586D86F79eD0025e81801b923", |
| 45 | + ePendleReward: "0x741620136cf08a782c1Df1Fc9E3cAA760Cc4Fecc", |
| 46 | + }, |
| 47 | + base: { |
| 48 | + pendleBooster: "0x2583A2538272f31e9A15dD12A432B8C96Ab4821d", |
| 49 | + pendleProxy: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", |
| 50 | + eqb: "0x010cd9b9be7E416E07793dc6Ce2F45868A80a50a", |
| 51 | + vlEqb: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", |
| 52 | + pendle: "0xA99F6e6785Da0F5d6fB42495Fe424BCE029Eeb3E", |
| 53 | + ePendle: "0x741620136cf08a782c1Df1Fc9E3cAA760Cc4Fecc", |
| 54 | + ePendleReward: "0xB2D167EB1Fff17EbD727B0a21e7f5F50424264c8", |
35 | 55 | }
|
36 | 56 | };
|
37 | 57 |
|
38 |
| -async function tvl(chain, block) { |
39 |
| - const balances = {}; |
| 58 | +const abi = { |
| 59 | + "poolLength": "uint256:poolLength", |
| 60 | + "poolInfo": "function poolInfo(uint256) view returns (address market, address token, address rewardPool, bool shutdown)" |
| 61 | +}; |
| 62 | + |
| 63 | +const { staking } = require('../helper/staking') |
| 64 | + |
| 65 | +async function tvl(api) { |
| 66 | + const { pendleBooster, vlEqb, pendleProxy, pendle } = config[api.chain]; |
40 | 67 |
|
41 |
| - if (chain === "ethereum") { |
42 |
| - const pendleLocked = await sdk.api2.abi.call({ |
| 68 | + if (api.chain === "ethereum") { |
| 69 | + const pendleLocked = await api.call({ |
43 | 70 | target: "0x4f30A9D41B80ecC5B94306AB4364951AE3170210",
|
44 |
| - params: contracts[chain].staker, |
| 71 | + params: pendleProxy, |
45 | 72 | abi: "erc20:balanceOf",
|
46 |
| - block, |
47 | 73 | });
|
48 |
| - sdk.util.sumSingleBalance( |
49 |
| - balances, |
50 |
| - contracts[chain].pendleAddress, |
| 74 | + api.add( |
| 75 | + pendle, |
51 | 76 | pendleLocked
|
52 | 77 | );
|
53 | 78 | }
|
54 | 79 |
|
55 |
| - const poolLength = await sdk.api2.abi.call({ |
56 |
| - chain, |
57 |
| - block, |
58 |
| - target: contracts[chain].boosterAddress, |
59 |
| - abi: "function poolLength() view returns (uint256)", |
| 80 | + const poolInfos = await api.fetchList({ |
| 81 | + lengthAbi: abi.poolLength, |
| 82 | + itemAbi: abi.poolInfo, |
| 83 | + target: pendleBooster, |
60 | 84 | });
|
61 |
| - |
62 |
| - const poolInfos = await Promise.all( |
63 |
| - Array.from(Array(Number(poolLength)).keys()).map((params) => |
64 |
| - sdk.api2.abi.call({ |
65 |
| - chain, |
66 |
| - block, |
67 |
| - target: contracts[chain].boosterAddress, |
68 |
| - params, |
69 |
| - abi: "function poolInfo(uint256) view returns (address market, address token, address rewardPool, bool shutdown)", |
70 |
| - }) |
71 |
| - ) |
72 |
| - ); // multicall fails here |
73 |
| - |
74 |
| - const { output: gaugeBalances } = await sdk.api.abi.multiCall({ |
75 |
| - abi: "erc20:balanceOf", |
76 |
| - calls: Array.from(new Set(poolInfos.map((p) => p.market))).map((i) => ({ |
77 |
| - target: i, |
78 |
| - params: contracts[chain].staker, |
79 |
| - })), |
80 |
| - chain, |
81 |
| - block, |
82 |
| - }); |
83 |
| - |
84 |
| - gaugeBalances.forEach(({ output, input }, i) => |
85 |
| - sdk.util.sumSingleBalance( |
86 |
| - balances, |
87 |
| - chain + |
88 |
| - ":" + |
89 |
| - poolInfos.find( |
90 |
| - (p) => p.market.toLowerCase() === input.target.toLowerCase() |
91 |
| - ).market, |
92 |
| - output |
93 |
| - ) |
94 |
| - ); |
95 |
| - |
96 |
| - return balances; |
| 85 | + const poolTokens = poolInfos.map(pool => pool.market); |
| 86 | + const blacklistedTokens = []; |
| 87 | + if (vlEqb) blacklistedTokens.push(vlEqb); |
| 88 | + return api.sumTokens({ tokens: poolTokens, owner: pendleProxy, blacklistedTokens }); |
97 | 89 | }
|
98 | 90 |
|
99 |
| -const chains = ["ethereum", "arbitrum", 'bsc', 'optimism', 'mantle']; |
100 |
| - |
101 |
| -module.exports = { |
102 |
| - doublecounted: true, |
103 |
| -}; |
| 91 | +Object.keys(config).forEach((chain) => { |
| 92 | + const { eqb, vlEqb, ePendle, ePendleReward } = config[chain]; |
104 | 93 |
|
105 |
| -chains.forEach((chain) => { |
106 | 94 | module.exports[chain] = {
|
107 |
| - tvl: async (_, _b, { [chain]: block }) => tvl(chain, block), |
| 95 | + tvl, |
108 | 96 | };
|
109 |
| -}); |
110 | 97 |
|
111 |
| -module.exports.ethereum.staking = sumTokensExport({ |
112 |
| - owner: contracts.ethereum.eqbRewardsAddress, |
113 |
| - tokens: [contracts.ethereum.eqbAddress], |
| 98 | + const stakingContracts = []; |
| 99 | + const stakingTokens= []; |
| 100 | + if (eqb && vlEqb) { |
| 101 | + stakingContracts.push(vlEqb); |
| 102 | + stakingTokens.push(eqb); |
| 103 | + } |
| 104 | + |
| 105 | + if (ePendle && ePendleReward) { |
| 106 | + stakingContracts.push(ePendleReward); |
| 107 | + stakingTokens.push(ePendle); |
| 108 | + } |
| 109 | + |
| 110 | + if (stakingContracts.length) module.exports[chain].staking = staking(stakingContracts, stakingTokens); |
114 | 111 | });
|
| 112 | + |
| 113 | +module.exports.doublecounted = true; |
0 commit comments