From a4ea023ba432dbae8de97e40388a129f8fd58269 Mon Sep 17 00:00:00 2001 From: Zdeadex <51711900+zdeadex@users.noreply.github.com> Date: Mon, 1 Sep 2025 15:29:47 +0200 Subject: [PATCH 1/6] Create index.ts --- projects/winnieswap/index.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 projects/winnieswap/index.ts diff --git a/projects/winnieswap/index.ts b/projects/winnieswap/index.ts new file mode 100644 index 00000000000..2ec8a1f4392 --- /dev/null +++ b/projects/winnieswap/index.ts @@ -0,0 +1,34 @@ +const winnieFactory = '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63' + +const abis = { + token0: 'address:token0', + token1: 'address:token1', + getDeployers: 'address[]:getDeployers', + getStickyVault: 'function getStickyVault(address deployer) view returns (address[])', + getUnderlyingBalances: 'function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)' +} + +const tvl = async (api) => { + const deployers = await api.call({ target: winnieFactory, abi: abis.getDeployers }) + const stickyvaults = (await api.multiCall({ calls: deployers.map((d) => ({ target: winnieFactory, params: [d] })), abi: abis.getStickyVault })).flat() + + const [token0s, token1s, balances] = await Promise.all([ + api.multiCall({ calls: stickyvault, abi: abis.token0, permitFailure: true }), + api.multiCall({ calls: stickyvault, abi: abis.token1, permitFailure: true }), + api.multiCall({ calls: stickyvault, abi: abis.getUnderlyingBalances, permitFailure: true }) + ]) + + stickyvault.forEach((_, i) => { + const token0 = token0s[i] + const token1 = token1s[i] + const balance = balances[i] + if (!token0 !token1 !balance) return + const { amount0Current, amount1Current } = balance + api.add(token0, amount0Current) + api.add(token1, amount1Current) + }) +} + +module.exports = { + berachain: { tvl } +} From 8044f5bac1c32a5053555459f7bbeb2479c1ad46 Mon Sep 17 00:00:00 2001 From: Zdeadex <51711900+zdeadex@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:30:53 +0200 Subject: [PATCH 2/6] Update and rename index.ts to index.js --- projects/winnieswap/{index.ts => index.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename projects/winnieswap/{index.ts => index.js} (94%) diff --git a/projects/winnieswap/index.ts b/projects/winnieswap/index.js similarity index 94% rename from projects/winnieswap/index.ts rename to projects/winnieswap/index.js index 2ec8a1f4392..11dd1d1452e 100644 --- a/projects/winnieswap/index.ts +++ b/projects/winnieswap/index.js @@ -1,4 +1,4 @@ -const winnieFactory = '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63' +const winnieFactory = '0x18B9ABf2E821E2fE7A08Dc255d5a7e77fFc0b844' const abis = { token0: 'address:token0', From c47937922f1d650a35bf217898552043de6ab096 Mon Sep 17 00:00:00 2001 From: Zdeadex <51711900+zdeadex@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:56:54 +0200 Subject: [PATCH 3/6] Update index.js --- projects/winnieswap/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/winnieswap/index.js b/projects/winnieswap/index.js index 11dd1d1452e..580c2a2cfa0 100644 --- a/projects/winnieswap/index.js +++ b/projects/winnieswap/index.js @@ -13,16 +13,16 @@ const tvl = async (api) => { const stickyvaults = (await api.multiCall({ calls: deployers.map((d) => ({ target: winnieFactory, params: [d] })), abi: abis.getStickyVault })).flat() const [token0s, token1s, balances] = await Promise.all([ - api.multiCall({ calls: stickyvault, abi: abis.token0, permitFailure: true }), - api.multiCall({ calls: stickyvault, abi: abis.token1, permitFailure: true }), - api.multiCall({ calls: stickyvault, abi: abis.getUnderlyingBalances, permitFailure: true }) + api.multiCall({ calls: stickyvaults, abi: abis.token0, permitFailure: true }), + api.multiCall({ calls: stickyvaults, abi: abis.token1, permitFailure: true }), + api.multiCall({ calls: stickyvaults, abi: abis.getUnderlyingBalances, permitFailure: true }) ]) - stickyvault.forEach((_, i) => { + stickyvaults.forEach((_, i) => { const token0 = token0s[i] const token1 = token1s[i] const balance = balances[i] - if (!token0 !token1 !balance) return + if (!token0 || !token1 || !balance) return const { amount0Current, amount1Current } = balance api.add(token0, amount0Current) api.add(token1, amount1Current) From 760b22f0cb158f3383174171fecd49f2c515d828 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:03:53 +0200 Subject: [PATCH 4/6] Refactor TVL calculation and update exports --- projects/winnieswap/index.js | 45 ++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/projects/winnieswap/index.js b/projects/winnieswap/index.js index 580c2a2cfa0..995ff1e8d2b 100644 --- a/projects/winnieswap/index.js +++ b/projects/winnieswap/index.js @@ -1,34 +1,29 @@ -const winnieFactory = '0x18B9ABf2E821E2fE7A08Dc255d5a7e77fFc0b844' +const stickyFactory = '0x18B9ABf2E821E2fE7A08Dc255d5a7e77fFc0b844' const abis = { - token0: 'address:token0', - token1: 'address:token1', getDeployers: 'address[]:getDeployers', - getStickyVault: 'function getStickyVault(address deployer) view returns (address[])', - getUnderlyingBalances: 'function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)' + getStickyVault: 'function getStickyVaults(address deployer) view returns (address[])', } -const tvl = async (api) => { - const deployers = await api.call({ target: winnieFactory, abi: abis.getDeployers }) - const stickyvaults = (await api.multiCall({ calls: deployers.map((d) => ({ target: winnieFactory, params: [d] })), abi: abis.getStickyVault })).flat() +const akkarisTVL = async (api) => { + const deployers = await api.call({ target: stickyFactory, abi: abis.getDeployers }) + const stickyVaults = (await api.multiCall({ calls: deployers, target: stickyFactory, abi: abis.getStickyVault })).flat() - const [token0s, token1s, balances] = await Promise.all([ - api.multiCall({ calls: stickyvaults, abi: abis.token0, permitFailure: true }), - api.multiCall({ calls: stickyvaults, abi: abis.token1, permitFailure: true }), - api.multiCall({ calls: stickyvaults, abi: abis.getUnderlyingBalances, permitFailure: true }) + const [token0s, token1s,] = await Promise.all([ + api.multiCall({ calls: stickyVaults, abi: 'address:token0', }), + api.multiCall({ calls: stickyVaults, abi: 'address:token1', }), ]) - - stickyvaults.forEach((_, i) => { - const token0 = token0s[i] - const token1 = token1s[i] - const balance = balances[i] - if (!token0 || !token1 || !balance) return - const { amount0Current, amount1Current } = balance - api.add(token0, amount0Current) - api.add(token1, amount1Current) - }) + const tokensAndOwners2 = [token0s.concat(token1s), stickyVaults.concat(stickyVaults)] + return api.sumTokens({ tokensAndOwners2 }) } -module.exports = { - berachain: { tvl } -} +const { uniV3Export } = require('../helper/uniswapV3'); +const { mergeExports } = require('../helper/utils') + +const uniExports = uniV3Export({ + berachain: { factory: '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63', fromBlock: 7402487 }, +}) + +module.exports = mergeExports([{ + berachain: { tvl: akkarisTVL } +}, uniExports]) From 385640c3a643df6598c0a6026015d274b4954ac6 Mon Sep 17 00:00:00 2001 From: Zdeadex Date: Mon, 3 Nov 2025 12:07:03 +0100 Subject: [PATCH 5/6] WinnieSwap: Add AutoWin vaults, use getUnderlyingBalances, and fix pool detection - Add AutoWin vaults (auto-compounding ERC-4626 vaults) to TVL calculation - Use getUnderlyingBalances() for accurate liquidity tracking (similar to Kodiak v3) - Reduce fromBlock from 7402487 to 2500000 to capture early pools including NECT-HONEY - Improve architecture with separate functions for sticky vaults and autowin vaults --- projects/winnieswap/index.js | 61 +++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/projects/winnieswap/index.js b/projects/winnieswap/index.js index 995ff1e8d2b..0bdf5a66710 100644 --- a/projects/winnieswap/index.js +++ b/projects/winnieswap/index.js @@ -1,29 +1,74 @@ const stickyFactory = '0x18B9ABf2E821E2fE7A08Dc255d5a7e77fFc0b844' +const autoWinFactory = '0x21b35a3dcF462540cb8EEA0e5d8594FF9e93C2e1' const abis = { getDeployers: 'address[]:getDeployers', getStickyVault: 'function getStickyVaults(address deployer) view returns (address[])', + getAutoWinVaults: 'function getAutoWinVaults(address deployer) view returns (address[])', + getUnderlyingBalances: 'function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)', + token0: 'address:token0', + token1: 'address:token1', } -const akkarisTVL = async (api) => { +const stickyVaultsTVL = async (api) => { const deployers = await api.call({ target: stickyFactory, abi: abis.getDeployers }) const stickyVaults = (await api.multiCall({ calls: deployers, target: stickyFactory, abi: abis.getStickyVault })).flat() - const [token0s, token1s,] = await Promise.all([ - api.multiCall({ calls: stickyVaults, abi: 'address:token0', }), - api.multiCall({ calls: stickyVaults, abi: 'address:token1', }), + const [token0s, token1s, balances] = await Promise.all([ + api.multiCall({ calls: stickyVaults, abi: abis.token0, permitFailure: true }), + api.multiCall({ calls: stickyVaults, abi: abis.token1, permitFailure: true }), + api.multiCall({ calls: stickyVaults, abi: abis.getUnderlyingBalances, permitFailure: true }) ]) - const tokensAndOwners2 = [token0s.concat(token1s), stickyVaults.concat(stickyVaults)] - return api.sumTokens({ tokensAndOwners2 }) + + stickyVaults.forEach((_, i) => { + const token0 = token0s[i] + const token1 = token1s[i] + const balance = balances[i] + if (!token0 || !token1 || !balance) return + const { amount0Current, amount1Current } = balance + api.add(token0, amount0Current) + api.add(token1, amount1Current) + }) +} + +const autoWinVaultsTVL = async (api) => { + const deployers = await api.call({ target: autoWinFactory, abi: abis.getDeployers }) + const autoWinVaults = (await api.multiCall({ calls: deployers, target: autoWinFactory, abi: abis.getAutoWinVaults })).flat() + + const [token0s, token1s, balances] = await Promise.all([ + api.multiCall({ calls: autoWinVaults, abi: abis.token0, permitFailure: true }), + api.multiCall({ calls: autoWinVaults, abi: abis.token1, permitFailure: true }), + api.multiCall({ calls: autoWinVaults, abi: abis.getUnderlyingBalances, permitFailure: true }) + ]) + + autoWinVaults.forEach((_, i) => { + const token0 = token0s[i] + const token1 = token1s[i] + const balance = balances[i] + if (!token0 || !token1 || !balance) return + const { amount0Current, amount1Current } = balance + api.add(token0, amount0Current) + api.add(token1, amount1Current) + }) } const { uniV3Export } = require('../helper/uniswapV3'); const { mergeExports } = require('../helper/utils') const uniExports = uniV3Export({ - berachain: { factory: '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63', fromBlock: 7402487 }, + berachain: { + factory: '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63', + fromBlock: 2500000, // Reduced to capture earlier pools including NECT-HONEY + }, }) +const vaultsTVL = async (api) => { + await Promise.all([ + stickyVaultsTVL(api), + autoWinVaultsTVL(api), + ]) +} + module.exports = mergeExports([{ - berachain: { tvl: akkarisTVL } + berachain: { tvl: vaultsTVL } }, uniExports]) From a38e92201fea2124e5740f7435d19892e0dcb786 Mon Sep 17 00:00:00 2001 From: Zdeadex <51711900+zdeadex@users.noreply.github.com> Date: Wed, 5 Nov 2025 20:09:56 +0100 Subject: [PATCH 6/6] Refactor TVL functions and remove autoWinVaults --- projects/winnieswap/index.js | 61 +++++------------------------------- 1 file changed, 8 insertions(+), 53 deletions(-) diff --git a/projects/winnieswap/index.js b/projects/winnieswap/index.js index 0bdf5a66710..3ee10a9cc03 100644 --- a/projects/winnieswap/index.js +++ b/projects/winnieswap/index.js @@ -1,74 +1,29 @@ const stickyFactory = '0x18B9ABf2E821E2fE7A08Dc255d5a7e77fFc0b844' -const autoWinFactory = '0x21b35a3dcF462540cb8EEA0e5d8594FF9e93C2e1' const abis = { getDeployers: 'address[]:getDeployers', getStickyVault: 'function getStickyVaults(address deployer) view returns (address[])', - getAutoWinVaults: 'function getAutoWinVaults(address deployer) view returns (address[])', - getUnderlyingBalances: 'function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)', - token0: 'address:token0', - token1: 'address:token1', } -const stickyVaultsTVL = async (api) => { +const akkarisTVL = async (api) => { const deployers = await api.call({ target: stickyFactory, abi: abis.getDeployers }) const stickyVaults = (await api.multiCall({ calls: deployers, target: stickyFactory, abi: abis.getStickyVault })).flat() - const [token0s, token1s, balances] = await Promise.all([ - api.multiCall({ calls: stickyVaults, abi: abis.token0, permitFailure: true }), - api.multiCall({ calls: stickyVaults, abi: abis.token1, permitFailure: true }), - api.multiCall({ calls: stickyVaults, abi: abis.getUnderlyingBalances, permitFailure: true }) + const [token0s, token1s,] = await Promise.all([ + api.multiCall({ calls: stickyVaults, abi: 'address:token0', }), + api.multiCall({ calls: stickyVaults, abi: 'address:token1', }), ]) - - stickyVaults.forEach((_, i) => { - const token0 = token0s[i] - const token1 = token1s[i] - const balance = balances[i] - if (!token0 || !token1 || !balance) return - const { amount0Current, amount1Current } = balance - api.add(token0, amount0Current) - api.add(token1, amount1Current) - }) -} - -const autoWinVaultsTVL = async (api) => { - const deployers = await api.call({ target: autoWinFactory, abi: abis.getDeployers }) - const autoWinVaults = (await api.multiCall({ calls: deployers, target: autoWinFactory, abi: abis.getAutoWinVaults })).flat() - - const [token0s, token1s, balances] = await Promise.all([ - api.multiCall({ calls: autoWinVaults, abi: abis.token0, permitFailure: true }), - api.multiCall({ calls: autoWinVaults, abi: abis.token1, permitFailure: true }), - api.multiCall({ calls: autoWinVaults, abi: abis.getUnderlyingBalances, permitFailure: true }) - ]) - - autoWinVaults.forEach((_, i) => { - const token0 = token0s[i] - const token1 = token1s[i] - const balance = balances[i] - if (!token0 || !token1 || !balance) return - const { amount0Current, amount1Current } = balance - api.add(token0, amount0Current) - api.add(token1, amount1Current) - }) + const tokensAndOwners2 = [token0s.concat(token1s), stickyVaults.concat(stickyVaults)] + return api.sumTokens({ tokensAndOwners2 }) } const { uniV3Export } = require('../helper/uniswapV3'); const { mergeExports } = require('../helper/utils') const uniExports = uniV3Export({ - berachain: { - factory: '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63', - fromBlock: 2500000, // Reduced to capture earlier pools including NECT-HONEY - }, + berachain: { factory: '0x76fD9D07d5e4D889CAbED96884F15f7ebdcd6B63', fromBlock: 2500000 }, }) -const vaultsTVL = async (api) => { - await Promise.all([ - stickyVaultsTVL(api), - autoWinVaultsTVL(api), - ]) -} - module.exports = mergeExports([{ - berachain: { tvl: vaultsTVL } + berachain: { tvl: akkarisTVL } }, uniExports])