From 355498d2fdb829ba2cf13f77f92c2861fe23cea2 Mon Sep 17 00:00:00 2001 From: abdullahabro Date: Wed, 29 Oct 2025 19:11:28 +0500 Subject: [PATCH 1/5] Add Bluefin CLMM Pools APY tracking --- src/adaptors/bluefin-clmm/index.js | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/adaptors/bluefin-clmm/index.js diff --git a/src/adaptors/bluefin-clmm/index.js b/src/adaptors/bluefin-clmm/index.js new file mode 100644 index 0000000000..4e4d3235b2 --- /dev/null +++ b/src/adaptors/bluefin-clmm/index.js @@ -0,0 +1,36 @@ +const axios = require('axios'); + +const apyDataUrl = 'https://swap.api.sui-prod.bluefin.io/api/v1/pools/apy/stats'; + +const apy = async () => { + const response = await axios.get(apyDataUrl); + const pools = response.data.data; + + return pools + .map((p) => { + const stats = p.apyStats[0]; + const apyBase = Number(stats.aprFee); + const apyReward = Number(stats.aprRewards); + // Extract reward token addresses from rewards array + const rewardTokens = p.rewards?.map((reward) => reward.symbol) || []; + return { + pool: p.pool, + chain: 'Sui', + project: 'bluefin-clmm', + symbol: `${p.coinA.symbol}-${p.coinB.symbol}`, + underlyingTokens: [p.coinA.coinType, p.coinB.coinType], + rewardTokens, + tvlUsd: Number(stats.tvlUsd), + apyBase, + apyReward: apyReward > 0 ? apyReward : 0, + poolMeta: `(${Number(p.feeRate)}%)`, + url: `https://trade.bluefin.io/deposit/${p.pool}`, + }; + }) + .filter((i) => i.tvlUsd > 0) + .sort((a, b) => b.tvlUsd - a.tvlUsd); +}; + +module.exports = { + apy, +}; From a680365615fefd97b109c9ba811149f6370072ad Mon Sep 17 00:00:00 2001 From: abdullahabro Date: Wed, 29 Oct 2025 19:18:16 +0500 Subject: [PATCH 2/5] fikter out pools with only >10k tvl --- src/adaptors/bluefin-clmm/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adaptors/bluefin-clmm/index.js b/src/adaptors/bluefin-clmm/index.js index 4e4d3235b2..2447cf1b2e 100644 --- a/src/adaptors/bluefin-clmm/index.js +++ b/src/adaptors/bluefin-clmm/index.js @@ -27,7 +27,7 @@ const apy = async () => { url: `https://trade.bluefin.io/deposit/${p.pool}`, }; }) - .filter((i) => i.tvlUsd > 0) + .filter((i) => i.tvlUsd >= 1e4) // show pools with at least $10,000 TVL .sort((a, b) => b.tvlUsd - a.tvlUsd); }; From 2643ad471355d8663cd833de30ccaf20528586aa Mon Sep 17 00:00:00 2001 From: abdullahabro Date: Wed, 29 Oct 2025 19:25:01 +0500 Subject: [PATCH 3/5] Change project name --- src/adaptors/bluefin-clmm/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adaptors/bluefin-clmm/index.js b/src/adaptors/bluefin-clmm/index.js index 2447cf1b2e..f150bbc921 100644 --- a/src/adaptors/bluefin-clmm/index.js +++ b/src/adaptors/bluefin-clmm/index.js @@ -16,7 +16,7 @@ const apy = async () => { return { pool: p.pool, chain: 'Sui', - project: 'bluefin-clmm', + project: 'bluefin-spot', symbol: `${p.coinA.symbol}-${p.coinB.symbol}`, underlyingTokens: [p.coinA.coinType, p.coinB.coinType], rewardTokens, From 692c1682d55ab0623716f7e29df749eecc8f9edc Mon Sep 17 00:00:00 2001 From: abdullahabro Date: Wed, 29 Oct 2025 21:07:16 +0500 Subject: [PATCH 4/5] Change folder name --- src/adaptors/bluefin-spot/index.js | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/adaptors/bluefin-spot/index.js diff --git a/src/adaptors/bluefin-spot/index.js b/src/adaptors/bluefin-spot/index.js new file mode 100644 index 0000000000..f150bbc921 --- /dev/null +++ b/src/adaptors/bluefin-spot/index.js @@ -0,0 +1,36 @@ +const axios = require('axios'); + +const apyDataUrl = 'https://swap.api.sui-prod.bluefin.io/api/v1/pools/apy/stats'; + +const apy = async () => { + const response = await axios.get(apyDataUrl); + const pools = response.data.data; + + return pools + .map((p) => { + const stats = p.apyStats[0]; + const apyBase = Number(stats.aprFee); + const apyReward = Number(stats.aprRewards); + // Extract reward token addresses from rewards array + const rewardTokens = p.rewards?.map((reward) => reward.symbol) || []; + return { + pool: p.pool, + chain: 'Sui', + project: 'bluefin-spot', + symbol: `${p.coinA.symbol}-${p.coinB.symbol}`, + underlyingTokens: [p.coinA.coinType, p.coinB.coinType], + rewardTokens, + tvlUsd: Number(stats.tvlUsd), + apyBase, + apyReward: apyReward > 0 ? apyReward : 0, + poolMeta: `(${Number(p.feeRate)}%)`, + url: `https://trade.bluefin.io/deposit/${p.pool}`, + }; + }) + .filter((i) => i.tvlUsd >= 1e4) // show pools with at least $10,000 TVL + .sort((a, b) => b.tvlUsd - a.tvlUsd); +}; + +module.exports = { + apy, +}; From 079013d99df5afa196e0f6c3cf6df165ca8450fa Mon Sep 17 00:00:00 2001 From: abdullahabro Date: Wed, 29 Oct 2025 21:11:31 +0500 Subject: [PATCH 5/5] remove old folder --- src/adaptors/bluefin-clmm/index.js | 36 ------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 src/adaptors/bluefin-clmm/index.js diff --git a/src/adaptors/bluefin-clmm/index.js b/src/adaptors/bluefin-clmm/index.js deleted file mode 100644 index f150bbc921..0000000000 --- a/src/adaptors/bluefin-clmm/index.js +++ /dev/null @@ -1,36 +0,0 @@ -const axios = require('axios'); - -const apyDataUrl = 'https://swap.api.sui-prod.bluefin.io/api/v1/pools/apy/stats'; - -const apy = async () => { - const response = await axios.get(apyDataUrl); - const pools = response.data.data; - - return pools - .map((p) => { - const stats = p.apyStats[0]; - const apyBase = Number(stats.aprFee); - const apyReward = Number(stats.aprRewards); - // Extract reward token addresses from rewards array - const rewardTokens = p.rewards?.map((reward) => reward.symbol) || []; - return { - pool: p.pool, - chain: 'Sui', - project: 'bluefin-spot', - symbol: `${p.coinA.symbol}-${p.coinB.symbol}`, - underlyingTokens: [p.coinA.coinType, p.coinB.coinType], - rewardTokens, - tvlUsd: Number(stats.tvlUsd), - apyBase, - apyReward: apyReward > 0 ? apyReward : 0, - poolMeta: `(${Number(p.feeRate)}%)`, - url: `https://trade.bluefin.io/deposit/${p.pool}`, - }; - }) - .filter((i) => i.tvlUsd >= 1e4) // show pools with at least $10,000 TVL - .sort((a, b) => b.tvlUsd - a.tvlUsd); -}; - -module.exports = { - apy, -};