Skip to content

Commit f224e4e

Browse files
authored
feat: add mint club v2 staking contracts (#16059)
1 parent cc16846 commit f224e4e

File tree

1 file changed

+69
-5
lines changed

1 file changed

+69
-5
lines changed

projects/mint-club-v2/index.js

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,72 @@
1-
const { staking } = require('../helper/staking')
21
const { sumTokens2 } = require('../helper/unwrapLPs')
32

43
module.exports = {
5-
methodology: "Calculates the total collateral value of all the Mint.club V2 Bonding Curve protocols.",
4+
methodology: "Calculates the total collateral value of all the Mint.club V2 Bonding Curve protocols and staking pools.",
65
};
76

7+
const chains = ['avax', 'ethereum', 'optimism', 'arbitrum', 'polygon', 'bsc', 'base', 'blast', 'degen', 'zora', 'klaytn', 'shibarium', 'unichain']
8+
89
const V2_BOND_CONTRACTS = {
910
avax: "0x3Fd5B4DcDa968C8e22898523f5343177F94ccfd1",
1011
blast: "0x621c335b4BD8f2165E120DC70d3AfcAfc6628681",
1112
degen: "0x3bc6B601196752497a68B2625DB4f2205C3b150b",
1213
zora: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27",
1314
klaytn: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27",
14-
ham: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27",
1515
shibarium: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27",
1616
unichain: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27"
1717
}
1818

19+
const STAKE_CONTRACTS = {
20+
ethereum: '0x5b64cECC5cF3E4B1A668Abd895D16BdDC0c77a17',
21+
optimism: '0x29b0E6D2C2884aEa3FB4CB5dD1C7002A8E10c724',
22+
arbitrum: '0x7B09b728ee8c6a714dC3F10367b5DF9b217FE633',
23+
avax: '0x95BDA90196c4e737933360F4639c46Ace657AAb7',
24+
polygon: '0x5b64cECC5cF3E4B1A668Abd895D16BdDC0c77a17',
25+
bsc: '0x5b64cECC5cF3E4B1A668Abd895D16BdDC0c77a17',
26+
base: '0x364e0f814a2c5524d26e82937815c574f8bB86C1',
27+
blast: '0x95BDA90196c4e737933360F4639c46Ace657AAb7',
28+
degen: '0x9a176d09b3824cf50417e348696cBbBc43d7818d',
29+
zora: '0x621c335b4BD8f2165E120DC70d3AfcAfc6628681',
30+
klaytn: '0x06FD26c092Db44E5491abB7cDC580CE24D93030c',
31+
cyber: '0x621c335b4BD8f2165E120DC70d3AfcAfc6628681',
32+
apeChain: '0xF44939c1613143ad587c79602182De7DcF593e33',
33+
shibarium: '0xF44939c1613143ad587c79602182De7DcF593e33',
34+
hashkey: '0xF44939c1613143ad587c79602182De7DcF593e33',
35+
unichain: '0xF44939c1613143ad587c79602182De7DcF593e33',
36+
over: '0xF44939c1613143ad587c79602182De7DcF593e33',
37+
}
38+
1939
const ownTokens = {
2040
bsc: ['0x1f3Af095CDa17d63cad238358837321e95FC5915']
2141
}
2242

23-
const chains = ['avax', 'ethereum', 'optimism', 'arbitrum', 'polygon', 'bsc', 'base', 'blast', 'degen', 'zora', 'klaytn', 'ham', 'shibarium', 'unichain']
43+
async function getStakingTvl(api, stakingContract) {
44+
const poolCount = await api.call({
45+
target: stakingContract,
46+
abi: 'function poolCount() view returns (uint256)'
47+
});
48+
49+
if (poolCount == 0) return;
50+
51+
const stakingTokensSet = new Set();
52+
53+
const ids = Array.from({ length: Number(poolCount) }, (_, k) => k)
54+
const pools = await api.multiCall({
55+
target: stakingContract,
56+
abi: 'function pools(uint256) view returns (address stakingToken, bool isStakingTokenERC20, address rewardToken, address creator, uint104 rewardAmount, uint32 rewardDuration, uint32 totalSkippedDuration, uint40 rewardStartedAt, uint40 cancelledAt, uint128 totalStaked, uint32 activeStakerCount, uint40 lastRewardUpdatedAt, uint256 accRewardPerShare)',
57+
calls: ids,
58+
permitFailure: true,
59+
})
60+
for (const pool of pools) {
61+
if (pool.isStakingTokenERC20 && pool.cancelledAt == 0) stakingTokensSet.add(pool.stakingToken)
62+
}
63+
64+
const tokens = Array.from(stakingTokensSet);
65+
if (tokens.length === 0) return;
66+
await sumTokens2({ api, owner: stakingContract, tokens, permitFailure: true })
67+
return api.getBalances()
68+
}
69+
2470

2571
chains.forEach(chain => {
2672
const BOND_CONTRACT = V2_BOND_CONTRACTS[chain] ?? '0xc5a076cad94176c2996B32d8466Be1cE757FAa27'
@@ -31,5 +77,23 @@ chains.forEach(chain => {
3177
return sumTokens2({ api, owner: BOND_CONTRACT, tokens: rTokens, permitFailure: true, blacklistedTokens: ownTokens[chain] })
3278
}
3379
}
34-
if (ownTokens[chain]) module.exports[chain].staking = staking(BOND_CONTRACT, ownTokens[chain])
80+
81+
if (STAKE_CONTRACTS[chain] || ownTokens[chain]) {
82+
module.exports[chain].staking = async (api) => {
83+
if (STAKE_CONTRACTS[chain]) {
84+
await getStakingTvl(api, STAKE_CONTRACTS[chain]);
85+
}
86+
87+
// Handle legacy staking logic for ownTokens
88+
if (ownTokens[chain]) {
89+
const balances = await api.call({
90+
target: ownTokens[chain][0],
91+
abi: 'erc20:balanceOf',
92+
params: [BOND_CONTRACT]
93+
});
94+
api.add(ownTokens[chain][0], balances);
95+
}
96+
return api.getBalances()
97+
}
98+
}
3599
})

0 commit comments

Comments
 (0)