@@ -415,6 +415,29 @@ var CHAIN_CONFIGS = {
415415 } ,
416416 } ,
417417 } ,
418+ monad : {
419+ ADDRESS_PROVIDER_V3 : null ,
420+ GEAR_TOKEN : null ,
421+ REWARD_TOKEN : '0x34752948b0dc28969485df2066ffe86d5dc36689' . toLowerCase ( ) , // MON
422+ chainName : 'Monad' ,
423+ POOLS : {
424+ '0x6b343f7b797f1488aa48c49d540690f2b2c89751' : {
425+ symbol : 'dUSDC' ,
426+ underlying : '0x754704Bc059F8C67012fEd69BC8A327a5aafb603' , // USDC
427+ name : 'USDC Pool' ,
428+ } ,
429+ '0x34752948b0dc28969485df2066ffe86d5dc36689' : {
430+ symbol : 'dMON' ,
431+ underlying : '0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A' , // MON
432+ name : 'MON Pool' ,
433+ } ,
434+ '0x164a35f31e4e0f6c45d500962a6978d2cbd5a16b' : {
435+ symbol : 'dUSDT0' ,
436+ underlying : '0xe7cd86e13AC4309349F30B3435a9d337750fC82D' , // USDT0
437+ name : 'USDT0 Pool' ,
438+ } ,
439+ } ,
440+ } ,
418441} ;
419442
420443// Legacy constants for backward compatibility
@@ -474,6 +497,7 @@ function getPoolUrl(chain, poolAddress) {
474497 etlk : '42793' ,
475498 lisk : '1135' ,
476499 hemi : '43111' ,
500+ monad : '143' ,
477501 } ;
478502
479503 const chainId = chainIds [ chain ] ;
@@ -522,6 +546,15 @@ const MERKL_CONFIGS = {
522546 poolId : '0x614eB485DE3c6C49701b40806AC1B985ad6F0A2f' ,
523547 rewardToken : '0xad11a8BEb98bbf61dbb1aa0F6d6F2ECD87b35afA' , // USDC.E
524548 } ,
549+ monad : {
550+ chainId : 143 ,
551+ rewardToken : '0x34752948b0dc28969485df2066ffe86d5dc36689' , // MON
552+ pools : [
553+ '0x6b343f7b797f1488aa48c49d540690f2b2c89751' , // USDC Pool
554+ '0x34752948b0dc28969485df2066ffe86d5dc36689' , // MON Pool
555+ '0x164a35f31e4e0f6c45d500962a6978d2cbd5a16b' , // USDT0 Pool
556+ ] ,
557+ } ,
525558} ;
526559
527560// Fetch Merkl rewards data for supported chains
@@ -742,7 +775,7 @@ async function getPlasmaPoolsV3(chain) {
742775
743776async function getPoolsV3 ( chain ) {
744777 // Handle non-registry chains using the individual pool approach
745- if ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' ) {
778+ if ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' || chain === 'monad' ) {
746779 return await getPlasmaPoolsV3 ( chain ) ;
747780 }
748781
@@ -865,7 +898,7 @@ async function getPoolsV3(chain) {
865898async function getTokensData ( chain , pools ) {
866899 // For non-registry chains, we need to use known token addresses for pricing
867900 let tokens ;
868- if ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' ) {
901+ if ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' || chain === 'monad' ) {
869902 tokens = pools . map ( ( p ) => p . underlyingForPrice || p . underlying ) ;
870903 } else {
871904 tokens = pools . map ( ( p ) => p . underlying ) ;
@@ -963,15 +996,15 @@ async function getApyV3(pools, tokens, daoFees, chain, merklRewards = {}) {
963996 const underlying = pool . underlying . toLowerCase ( ) ;
964997 const poolAddr = pool . pool . toLowerCase ( ) ;
965998 // For non-registry chains, use the underlyingForPrice token for pricing
966- const priceToken = ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' ) && pool . underlyingForPrice ?
999+ const priceToken = ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' || chain === 'monad' ) && pool . underlyingForPrice ?
9671000 pool . underlyingForPrice . toLowerCase ( ) : underlying ;
9681001 const underlyingPrice = tokens [ priceToken ] ?. price || 0 ;
9691002 const daoFee = Number ( daoFees [ poolAddr ] ?? 0 ) ;
9701003
9711004 // Calculate TVL and borrowing data using the same logic for all chains
9721005 let totalSupplyUsd , totalBorrowUsd , tvlUsd ;
9731006
974- if ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' ) {
1007+ if ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' || chain === 'monad' ) {
9751008 // Use proper Gearbox calculation for non-registry chains with real borrowing data
9761009 totalSupplyUsd = calculateTvl (
9771010 pool . availableLiquidity ,
@@ -1003,7 +1036,7 @@ async function getApyV3(pools, tokens, daoFees, chain, merklRewards = {}) {
10031036 tvlUsd = totalSupplyUsd - totalBorrowUsd ;
10041037 }
10051038
1006- const dieselPrice = ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' ) ?
1039+ const dieselPrice = ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' || chain === 'monad' ) ?
10071040 Number ( underlyingPrice ) / WAD : // For non-registry chains, use simpler calculation
10081041 ( Number ( underlyingPrice ) * Number ( pool . dieselRate ) ) / RAY ;
10091042 const supplyInfo = {
@@ -1057,7 +1090,7 @@ async function getApyV3(pools, tokens, daoFees, chain, merklRewards = {}) {
10571090 url : getPoolUrl ( chain , pool . pool ) ,
10581091 // daoFee here is taken from last cm connected to this pool. in theory, it can be different for different CMs
10591092 // in practice, it's 25% for v3 cms and 50% for v2 cms
1060- apyBaseBorrow : ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' ) ?
1093+ apyBaseBorrow : ( chain === 'plasma' || chain === 'etlk' || chain === 'lisk' || chain === 'hemi' || chain === 'monad' ) ?
10611094 // For non-registry chains, use base interest rate directly (no DAO fees initially)
10621095 ( Number ( pool . baseInterestRate ) / 1e27 ) * 100 :
10631096 ( ( daoFee + PERCENTAGE_FACTOR ) *
@@ -1071,7 +1104,7 @@ async function getApyV3(pools, tokens, daoFees, chain, merklRewards = {}) {
10711104 } ) ;
10721105}
10731106async function getApy ( ) {
1074- const supportedChains = [ 'ethereum' , 'plasma' , 'etlk' , 'lisk' , 'hemi' ] ;
1107+ const supportedChains = [ 'ethereum' , 'plasma' , 'etlk' , 'lisk' , 'hemi' , 'monad' ] ;
10751108 const allPools = [ ] ;
10761109
10771110 console . log ( `🚀 Fetching Gearbox data for chains: ${ supportedChains . join ( ', ' ) } ` ) ;
0 commit comments