1- const { staking } = require ( '../helper/staking' )
21const { sumTokens2 } = require ( '../helper/unwrapLPs' )
32
43module . 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+
89const 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+
1939const 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
2571chains . 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