From eacd096e72bc34d7de3f62683f3278654a7e7143 Mon Sep 17 00:00:00 2001 From: amadiaflare Date: Tue, 9 Dec 2025 14:24:50 -0500 Subject: [PATCH 1/2] add: sparkdex fxrp on xrpl chain --- projects/sparkdex-fxrp/index.js | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 projects/sparkdex-fxrp/index.js diff --git a/projects/sparkdex-fxrp/index.js b/projects/sparkdex-fxrp/index.js new file mode 100644 index 00000000000..e1f3c2a0508 --- /dev/null +++ b/projects/sparkdex-fxrp/index.js @@ -0,0 +1,48 @@ +const { ChainApi } = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json'); + +const FXRP = '0xAd552A648C74D49E10027AB8a618A3ad4901c5bE'; + +// SparkDEX V3-1 Pools (FXRP pairs) +const SPARKDEX_V3_POOLS = [ + '0xECe100A0b337bdfa0297654f2ce49bb3936d2364', // FXRP/WFLR 0.01% + '0x589689984a06E4640593eDec64e415c415940C7F', // FXRP/WFLR 0.05% + '0xDAD1976C48cf93A7D90f106382C60Cd2c888b2dc', // FXRP/WFLR 0.3% + '0x08E6cB0c6b91dba21B9b5DFF5694faB75fA91440', // FXRP/WFLR 1% + '0xE419b154cf5a27e93966Fce28E253cADcDBE5CCF', // FXRP/USDT0 0.01% + '0x88D46717b16619B37fa2DfD2F038DEFB4459F1F7', // FXRP/USDT0 0.05% + '0x8F7E2dCbbb1A1BCacE7832e4770ec31D8C6937cB', // FXRP/USDT0 0.3% + '0x38dE858370813ae58af11245962a9b03B661a9Ae', // FXRP/USDT0 1% +]; + +// SparkDEX V2 Pool +const SPARKDEX_V2_FXRP_WFLR = '0xa76a120567ed3ab3065759d3ad3ab2acd79530bf'; + +async function lockedXRPL(api) { + const flareApi = new ChainApi({ chain: 'flare', timestamp: api.timestamp }); + await flareApi.getBlock(); + + // SparkDEX V3: FXRP balance in each pool + const v3Balances = await flareApi.multiCall({ + abi: 'erc20:balanceOf', + calls: SPARKDEX_V3_POOLS.map(pool => ({ target: FXRP, params: [pool] })), + }); + + // SparkDEX V2: FXRP balance in pool + const v2Balance = await flareApi.call({ + abi: 'erc20:balanceOf', + target: FXRP, + params: [SPARKDEX_V2_FXRP_WFLR], + }); + + const totalFxrp = v3Balances.reduce((sum, b) => sum + BigInt(b), 0n) + BigInt(v2Balance); + api.add(ADDRESSES.ripple.XRP, totalFxrp.toString()); + return api.getBalances(); +} + +module.exports = { + ripple: { + tvl: lockedXRPL, + }, + methodology: "Counts FXRP in SparkDEX V2 and V3 liquidity pools on Flare. FXRP is 1:1 backed by XRP.", +}; From 8eb04226f2c76298df67a55124473219ad645a81 Mon Sep 17 00:00:00 2001 From: amadiaflare Date: Tue, 9 Dec 2025 14:46:56 -0500 Subject: [PATCH 2/2] fix: seperate v2 and v3 --- projects/sparkdex-v2-fxrp/index.js | 29 +++++++++++++++++++ .../index.js | 14 ++------- 2 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 projects/sparkdex-v2-fxrp/index.js rename projects/{sparkdex-fxrp => sparkdex-v3-fxrp}/index.js (76%) diff --git a/projects/sparkdex-v2-fxrp/index.js b/projects/sparkdex-v2-fxrp/index.js new file mode 100644 index 00000000000..abb955b3287 --- /dev/null +++ b/projects/sparkdex-v2-fxrp/index.js @@ -0,0 +1,29 @@ +const { ChainApi } = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json'); + +const FXRP = '0xAd552A648C74D49E10027AB8a618A3ad4901c5bE'; + +// SparkDEX V2 Pool +const SPARKDEX_V2_FXRP_WFLR = '0xa76a120567ed3ab3065759d3ad3ab2acd79530bf'; + +async function lockedXRPL(api) { + const flareApi = new ChainApi({ chain: 'flare', timestamp: api.timestamp }); + await flareApi.getBlock(); + + // SparkDEX V2: FXRP balance in pool + const v2Balance = await flareApi.call({ + abi: 'erc20:balanceOf', + target: FXRP, + params: [SPARKDEX_V2_FXRP_WFLR], + }); + + api.add(ADDRESSES.ripple.XRP, v2Balance); + return api.getBalances(); +} + +module.exports = { + ripple: { + tvl: lockedXRPL, + }, + methodology: "Counts FXRP in SparkDEX V2 liquidity pool on Flare. FXRP is 1:1 backed by XRP.", +}; diff --git a/projects/sparkdex-fxrp/index.js b/projects/sparkdex-v3-fxrp/index.js similarity index 76% rename from projects/sparkdex-fxrp/index.js rename to projects/sparkdex-v3-fxrp/index.js index e1f3c2a0508..cdfc9a5d337 100644 --- a/projects/sparkdex-fxrp/index.js +++ b/projects/sparkdex-v3-fxrp/index.js @@ -15,9 +15,6 @@ const SPARKDEX_V3_POOLS = [ '0x38dE858370813ae58af11245962a9b03B661a9Ae', // FXRP/USDT0 1% ]; -// SparkDEX V2 Pool -const SPARKDEX_V2_FXRP_WFLR = '0xa76a120567ed3ab3065759d3ad3ab2acd79530bf'; - async function lockedXRPL(api) { const flareApi = new ChainApi({ chain: 'flare', timestamp: api.timestamp }); await flareApi.getBlock(); @@ -28,14 +25,7 @@ async function lockedXRPL(api) { calls: SPARKDEX_V3_POOLS.map(pool => ({ target: FXRP, params: [pool] })), }); - // SparkDEX V2: FXRP balance in pool - const v2Balance = await flareApi.call({ - abi: 'erc20:balanceOf', - target: FXRP, - params: [SPARKDEX_V2_FXRP_WFLR], - }); - - const totalFxrp = v3Balances.reduce((sum, b) => sum + BigInt(b), 0n) + BigInt(v2Balance); + const totalFxrp = v3Balances.reduce((sum, b) => sum + BigInt(b), 0n); api.add(ADDRESSES.ripple.XRP, totalFxrp.toString()); return api.getBalances(); } @@ -44,5 +34,5 @@ module.exports = { ripple: { tvl: lockedXRPL, }, - methodology: "Counts FXRP in SparkDEX V2 and V3 liquidity pools on Flare. FXRP is 1:1 backed by XRP.", + methodology: "Counts FXRP in SparkDEX V3 liquidity pools on Flare. FXRP is 1:1 backed by XRP.", };