From 52742ee80898c01382c3faf2eb0aa6bf7ef1905a Mon Sep 17 00:00:00 2001 From: Himess Date: Thu, 16 Jul 2026 11:13:08 +0300 Subject: [PATCH 1/3] fix(checkStablecoin): don't flag pufETH/LanternSOL/SUNOLD as stablecoins checkStablecoin substring-matches a single token against the stablecoins list, so 'pufeth'.includes('feth'), 'lanternsol'.includes('ern') and 'sunold'.includes('uno') flag these volatile assets (restaked ETH, a SOL LST, TRON SUN) as stablecoin: true. Add a notStable exception so they don't match. 7 live pools (~$49M) flip to the correct false; 0 regressions. --- src/adaptors/checkStablecoin.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/adaptors/checkStablecoin.js b/src/adaptors/checkStablecoin.js index ee10ad51eb..c6c702dafa 100644 --- a/src/adaptors/checkStablecoin.js +++ b/src/adaptors/checkStablecoin.js @@ -2,6 +2,12 @@ const checkStablecoin = (el, stablecoins) => { let tokens = el.symbol.split('-').map((el) => el.toLowerCase()); const symbolLC = el.symbol.toLowerCase(); + // tokens that merely CONTAIN a stablecoin symbol substring but are NOT stablecoins. + // e.g. 'pufeth'.includes('feth') or 'lanternsol'.includes('ern') otherwise flag these + // volatile assets (restaked ETH, a SOL LST, TRON SUN) as stablecoin: true. + const notStable = ['pufeth', 'lanternsol', 'sunold']; + if (tokens.some((t) => notStable.includes(t))) return false; + let stable; if ( el.project === 'curve' && From 80d2f526944bb6152909f98ad8d034ab31fae824 Mon Sep 17 00:00:00 2001 From: Himess Date: Thu, 16 Jul 2026 11:40:54 +0300 Subject: [PATCH 2/3] ci: exclude checkStablecoin.js from the adapter test list checkStablecoin.js is a shared helper (like utils.js), not a project adapter, so 'npm run test --adapter=checkStablecoin.js' fails with 'module.apy is not a function'. Exclude it from getFileList.js the same way utils.js/test.js are. --- .github/workflows/getFileList.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/getFileList.js b/.github/workflows/getFileList.js index 8acf5b809d..cba599fd4f 100644 --- a/.github/workflows/getFileList.js +++ b/.github/workflows/getFileList.js @@ -9,6 +9,7 @@ const fileSet = new Set(); root1 === 'adaptors' && dir !== 'test.js' && dir !== 'utils.js' && + dir !== 'checkStablecoin.js' && dir !== 'package.json' && dir !== 'package-lock.json' ) From e5a5390318c5763a1637813575aff7a59cda949a Mon Sep 17 00:00:00 2001 From: Himess Date: Thu, 16 Jul 2026 11:46:21 +0300 Subject: [PATCH 3/3] checkStablecoin: strip parenthetical annotations before the notStable guard Match the cleanup the later stablecoin check already applies, so annotated forms like 'pufeth (...)' also hit the exclusion. --- src/adaptors/checkStablecoin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/adaptors/checkStablecoin.js b/src/adaptors/checkStablecoin.js index c6c702dafa..f7298ef840 100644 --- a/src/adaptors/checkStablecoin.js +++ b/src/adaptors/checkStablecoin.js @@ -6,7 +6,8 @@ const checkStablecoin = (el, stablecoins) => { // e.g. 'pufeth'.includes('feth') or 'lanternsol'.includes('ern') otherwise flag these // volatile assets (restaked ETH, a SOL LST, TRON SUN) as stablecoin: true. const notStable = ['pufeth', 'lanternsol', 'sunold']; - if (tokens.some((t) => notStable.includes(t))) return false; + if (tokens.some((t) => notStable.includes(t.replace(/\s*\(.*?\)\s*/g, '')))) + return false; let stable; if (