From 957183062f64004603876d74ab15ebe84a8f5c67 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Wed, 13 Nov 2024 14:50:42 +0530 Subject: [PATCH 01/18] [strkfarm/index] added ETH Sensei XL --- projects/strkfarm/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 4468fef29b..40145a0d99 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -28,6 +28,10 @@ const STRATEGIES = { address: "0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250", token: ADDRESSES.starknet.ETH, // ETH Sensei zToken: '0x1b5bd713e72fdc5d63ffd83762f81297f6175a5e0a4771cdadbc1dd5fe72cb1' + }, { + address: "0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9", + token: ADDRESSES.starknet.ETH, // ETH Sensei XL + zToken: '0x057146f6409deb4c9fa12866915dd952aa07c1eb2752e451d7f3b042086bdeb8' }] } From f2be4eecb2a8224bee744e2d0c83e14288c82caf Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Sun, 24 Nov 2024 19:45:45 +0530 Subject: [PATCH 02/18] [projects/endur] added endur adaptor --- projects/endur/erc4626abi.js | 48 ++++++++++++++++++++++++++++++++++++ projects/endur/index.js | 35 ++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 projects/endur/erc4626abi.js create mode 100644 projects/endur/index.js diff --git a/projects/endur/erc4626abi.js b/projects/endur/erc4626abi.js new file mode 100644 index 0000000000..1edd29b850 --- /dev/null +++ b/projects/endur/erc4626abi.js @@ -0,0 +1,48 @@ +const ERC4626Abi = [ + { + "name": "asset", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "state_mutability": "view" + }, + { + "name": "balanceOf", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view", + "customInput": 'address', + }, + { + "name": "total_assets", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + } +] + +const ERC4626AbiMap = {} +ERC4626Abi.forEach(i => ERC4626AbiMap[i.name] = i) + +module.exports = { + ERC4626AbiMap +} \ No newline at end of file diff --git a/projects/endur/index.js b/projects/endur/index.js new file mode 100644 index 0000000000..61838b2530 --- /dev/null +++ b/projects/endur/index.js @@ -0,0 +1,35 @@ +/** + * Endur is a liquid staking solution for STRK + */ + +const {multiCall} = require("../helper/chain/starknet"); +const ADDRESSES = require('../helper/coreAssets.json'); +const ERC4626AbiMap = require('./erc4626abi') + +const LSTDATA = [{ //data of an LST contract; currently only xSTRK + address: "xSTRK DEPOSIT CONTRACT ADDRESS", + token: ADDRESSES.starknet.STRK +}] + +console.log(LSTDATA.map(c =>c.address)); + +// returns the tvl of the all LST tokens in terms of their native token +async function tvl(api) { + const totalAssets = await multiCall({ + calls: LSTDATA.map(c => c.address), + abi: ERC4626AbiMap.total_assets + }); + // the balance of the tokens will be xTOKEN + // considering all 1 TOKEN = 1xTOKEN + // eg for now we only have xSTRK i.e 1 STRK = 1 xSTRK + + api.addTokens(LSTDATA.map(c => c.token), totalAssets); +} + +module.exports = { + doublecounted: true, + methodology: "The TVL is the total staked STRK managed by Endur's LST", + starknet: { + tvl, + }, +}; \ No newline at end of file From 16953f85d0e4f5997314f85cfaf676edfef9d0c5 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Tue, 26 Nov 2024 12:42:44 +0530 Subject: [PATCH 03/18] [projects/endur] added xSTRK vault address & refac TVL [DONE] --- projects/endur/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/endur/index.js b/projects/endur/index.js index 61838b2530..f2b3879df4 100644 --- a/projects/endur/index.js +++ b/projects/endur/index.js @@ -4,15 +4,13 @@ const {multiCall} = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); -const ERC4626AbiMap = require('./erc4626abi') +const { ERC4626AbiMap } = require('./erc4626abi') const LSTDATA = [{ //data of an LST contract; currently only xSTRK - address: "xSTRK DEPOSIT CONTRACT ADDRESS", + address: "0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a", // address of xSTRK vault contract token: ADDRESSES.starknet.STRK }] -console.log(LSTDATA.map(c =>c.address)); - // returns the tvl of the all LST tokens in terms of their native token async function tvl(api) { const totalAssets = await multiCall({ From 9e92061d9c4daf71674e9c96fa8c216cf555278f Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Wed, 15 Jan 2025 15:11:07 +0530 Subject: [PATCH 04/18] adding xstrk vault --- projects/helper/chain/starknet.js | 4 ++ projects/strkfarm/index.js | 34 ++++++++++++++-- projects/strkfarm/singleton.js | 65 +++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 projects/strkfarm/singleton.js diff --git a/projects/helper/chain/starknet.js b/projects/helper/chain/starknet.js index 5a0bff1a0e..90ff37e68d 100644 --- a/projects/helper/chain/starknet.js +++ b/projects/helper/chain/starknet.js @@ -54,6 +54,7 @@ function parseOutput(result, abi, allAbi) { async function call({ abi, target, params = [], allAbi = [] } = {}, ...rest) { const { data: { result } } = await axios.post(STARKNET_RPC, formCallBody({ abi, target, params, allAbi })) + return parseOutput(result, abi, allAbi) } @@ -76,6 +77,9 @@ async function multiCall({ abi: rootAbi, target: rootTarget, calls = [], allAbi allData.push(...data) } + console.log(80); + console.log(allData); + const response = [] allData.forEach((i) => { const { result, id } = i diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 40145a0d99..0e92fe6197 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -4,8 +4,10 @@ */ const { multiCall } = require("../helper/chain/starknet"); +const { call } = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); const { ERC4626AbiMap } = require('./erc4626'); +const { SINGLETONabiMap } = require('./singleton'); const { ERC721StratAbiMap } = require('./sensei'); const STRATEGIES = { @@ -32,7 +34,13 @@ const STRATEGIES = { address: "0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9", token: ADDRESSES.starknet.ETH, // ETH Sensei XL zToken: '0x057146f6409deb4c9fa12866915dd952aa07c1eb2752e451d7f3b042086bdeb8' - }] + }], + "xSTRKStrats": [{ + address: "0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b", + token: ADDRESSES.starknet.STRK, + xSTRK: ADDRESSES.starknet.XSTRK, + vesu: "0x02545b2e5d519fc230e9cd781046d3a64e092114f07e44771e0d719d148725ef" + }] } // returns tvl and token of the AutoCompounding strategies @@ -49,6 +57,25 @@ async function computeAutoCompoundingTVL(api) { api.addTokens(contracts.map(c => c.token), totalAssets); } +async function computeXSTRKStratTVL(api) { + const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; + const contracts = STRATEGIES.xSTRKStrats; + const xSTRK_price = 1; + const data = await multiCall({ + calls: contracts.map(c => ({ + target: c.vesu, + params: [pool_id, c.xSTRK, c.token, c.address] + })), + abi: SINGLETONabiMap.check_collateralization, + }); + + console.log(1) + + // const tvl = (collateral_value * xSTRK_price) - debt_value; + + // api.addTokens(contracts.token, tvl); +} + // returns tvl and token of the Sensei strategies async function computeSenseiTVL(api) { // Sensei strategies contain multiple LP tokens in each contract bcz of looping and borrow, @@ -75,8 +102,9 @@ async function computeSenseiTVL(api) { } async function tvl(api) { - await computeAutoCompoundingTVL(api); - await computeSenseiTVL(api); + // await computeAutoCompoundingTVL(api); + // await computeSenseiTVL(api); + await computeXSTRKStratTVL(api); } module.exports = { diff --git a/projects/strkfarm/singleton.js b/projects/strkfarm/singleton.js new file mode 100644 index 0000000000..06fce49d30 --- /dev/null +++ b/projects/strkfarm/singleton.js @@ -0,0 +1,65 @@ +const Singleton = [ + { + "name": "check_collateralization_unsafe", + "type": "function", + "inputs": [ + { + "name": "pool_id", + "type": "core::felt252" + }, + { + "name": "collateral_asset", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "debt_asset", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "user", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "(core::bool, core::integer::u256, core::integer::u256)" + } + ], + "state_mutability": "view" + }, + { + "name": "check_collateralization", + "type": "function", + "inputs": [ + { + "name": "pool_id", + "type": "core::felt252" + }, + { + "name": "collateral_asset", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "debt_asset", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "user", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "(core::bool, core::integer::u256, core::integer::u256)" + } + ], + "state_mutability": "external" + }, + ] + + const SINGLETONabiMap = {} + Singleton.forEach(i => SINGLETONabiMap[i.name] = i) + + module.exports = { + SINGLETONabiMap + } \ No newline at end of file From 9afdac65cd6e0cf99deb2786151fc67e01a46740 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Thu, 16 Jan 2025 02:02:13 +0530 Subject: [PATCH 05/18] fix invalid params --- projects/strkfarm/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 0e92fe6197..a99bd7ddc2 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -66,10 +66,10 @@ async function computeXSTRKStratTVL(api) { target: c.vesu, params: [pool_id, c.xSTRK, c.token, c.address] })), - abi: SINGLETONabiMap.check_collateralization, + abi: {...SINGLETONabiMap.check_collateralization_unsafe, customInput: 'address'}, }); - console.log(1) + console.log(data) // const tvl = (collateral_value * xSTRK_price) - debt_value; From 42a2f43c1dff4890077c5e0aa576c772f6cfd392 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 17 Jan 2025 00:24:11 +0530 Subject: [PATCH 06/18] xstrk vault strat[ONGOING] --- projects/helper/chain/starknet.js | 6 +++--- projects/strkfarm/endur.js | 25 +++++++++++++++++++++++++ projects/strkfarm/index.js | 18 ++++++++++++++---- 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 projects/strkfarm/endur.js diff --git a/projects/helper/chain/starknet.js b/projects/helper/chain/starknet.js index 90ff37e68d..334ef5f1cc 100644 --- a/projects/helper/chain/starknet.js +++ b/projects/helper/chain/starknet.js @@ -26,6 +26,7 @@ function formCallBody({ abi, target, params = [], allAbi = [] }, id = 0) { requestData.contract_address = requestData.contractAddress delete requestData.contractAddress delete requestData.entrypoint + console.log(params); if (abi.customInput === 'address') requestData.calldata = params.map(i => i.slice(2)) return getCallBody(requestData, id) @@ -35,6 +36,7 @@ function formCallBody({ abi, target, params = [], allAbi = [] }, id = 0) { } function parseOutput(result, abi, allAbi) { + console.log(result); let response = new CallData([abi, ...allAbi]).parse(abi.name, result) // convert BigInt to string for (const key in response) { @@ -74,12 +76,10 @@ async function multiCall({ abi: rootAbi, target: rootTarget, calls = [], allAbi for (const chunk of chunks) { await sleep(2000) const { data } = await axios.post(STARKNET_RPC, chunk) + console.log(data); allData.push(...data) } - console.log(80); - console.log(allData); - const response = [] allData.forEach((i) => { const { result, id } = i diff --git a/projects/strkfarm/endur.js b/projects/strkfarm/endur.js new file mode 100644 index 0000000000..11f16b540b --- /dev/null +++ b/projects/strkfarm/endur.js @@ -0,0 +1,25 @@ +const Endur = [ + { + "name": "preview_redeem", + "type": "function", + "inputs": [ + { + "name": "shares", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + ] + + const endurABIMap = {} + Endur.forEach(i => endurABIMap[i.name] = i) + + module.exports = { + endurABIMap + } \ No newline at end of file diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index a99bd7ddc2..7d3abf67fe 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -8,6 +8,7 @@ const { call } = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); const { ERC4626AbiMap } = require('./erc4626'); const { SINGLETONabiMap } = require('./singleton'); +const { endurABIMap } = require('./endur'); const { ERC721StratAbiMap } = require('./sensei'); const STRATEGIES = { @@ -60,6 +61,17 @@ async function computeAutoCompoundingTVL(api) { async function computeXSTRKStratTVL(api) { const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; const contracts = STRATEGIES.xSTRKStrats; + + console.log(endurABIMap.preview_redeem) + + const price = await multiCall({ + calls: contracts.map(c => ({ + target: c.address, + params: 10n ** 18n + })), + abi: endurABIMap.preview_redeem + }); + const xSTRK_price = 1; const data = await multiCall({ calls: contracts.map(c => ({ @@ -69,11 +81,9 @@ async function computeXSTRKStratTVL(api) { abi: {...SINGLETONabiMap.check_collateralization_unsafe, customInput: 'address'}, }); - console.log(data) - - // const tvl = (collateral_value * xSTRK_price) - debt_value; + const tvl = (collateral_value * xSTRK_price) - debt_value; - // api.addTokens(contracts.token, tvl); + api.addTokens(contracts.token, tvl); } // returns tvl and token of the Sensei strategies From a647f614041ee3a3e2bdc7b6c0d15c63af50f623 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 17 Jan 2025 09:02:49 +0530 Subject: [PATCH 07/18] refac --- projects/helper/chain/starknet.js | 3 --- projects/strkfarm/erc4626.js | 18 +++++++++++++++++- projects/strkfarm/index.js | 28 ++++++++++++++++++++++------ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/projects/helper/chain/starknet.js b/projects/helper/chain/starknet.js index 334ef5f1cc..726d8492ab 100644 --- a/projects/helper/chain/starknet.js +++ b/projects/helper/chain/starknet.js @@ -26,7 +26,6 @@ function formCallBody({ abi, target, params = [], allAbi = [] }, id = 0) { requestData.contract_address = requestData.contractAddress delete requestData.contractAddress delete requestData.entrypoint - console.log(params); if (abi.customInput === 'address') requestData.calldata = params.map(i => i.slice(2)) return getCallBody(requestData, id) @@ -36,7 +35,6 @@ function formCallBody({ abi, target, params = [], allAbi = [] }, id = 0) { } function parseOutput(result, abi, allAbi) { - console.log(result); let response = new CallData([abi, ...allAbi]).parse(abi.name, result) // convert BigInt to string for (const key in response) { @@ -76,7 +74,6 @@ async function multiCall({ abi: rootAbi, target: rootTarget, calls = [], allAbi for (const chunk of chunks) { await sleep(2000) const { data } = await axios.post(STARKNET_RPC, chunk) - console.log(data); allData.push(...data) } diff --git a/projects/strkfarm/erc4626.js b/projects/strkfarm/erc4626.js index d166b787bb..475812281f 100644 --- a/projects/strkfarm/erc4626.js +++ b/projects/strkfarm/erc4626.js @@ -37,7 +37,23 @@ const ERC4626Abi = [ } ], "state_mutability": "view" - } + }, + { + "name": "preview_redeem", + "type": "function", + "inputs": [ + { + "name": "shares", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, ] const ERC4626AbiMap = {} diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 7d3abf67fe..e9e820d3d8 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -62,17 +62,31 @@ async function computeXSTRKStratTVL(api) { const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; const contracts = STRATEGIES.xSTRKStrats; - console.log(endurABIMap.preview_redeem) + const value = BigInt(10**12) + const mask = (1n << 128n) - 1n; + const low = value & mask; + const high = value >> 128n; + + const p = await call ({ + abi: ERC4626AbiMap.preview_redeem, + target: ADDRESSES.starknet.XSTRK, + params: [low.toString(), high.toString()] + }); + // console.log(p) const price = await multiCall({ calls: contracts.map(c => ({ - target: c.address, - params: 10n ** 18n + target: "0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a", + params: [10**18] })), abi: endurABIMap.preview_redeem }); + let xstrk_price = price[0]; // Assuming `price` is returned as a BigInt array + console.log("xSTRK price:", xstrk_price); + + // let xstrk_price = price / 10**18 + // console.log(xstrk_price) - const xSTRK_price = 1; const data = await multiCall({ calls: contracts.map(c => ({ target: c.vesu, @@ -80,10 +94,12 @@ async function computeXSTRKStratTVL(api) { })), abi: {...SINGLETONabiMap.check_collateralization_unsafe, customInput: 'address'}, }); + - const tvl = (collateral_value * xSTRK_price) - debt_value; + const tvl = ((data[0]['1'] / 10**18) * 1.02) - (data[0]['2'] / 10**18); + console.log(tvl) - api.addTokens(contracts.token, tvl); + // api.addTokens(contracts.map(c => c.token), tvl); } // returns tvl and token of the Sensei strategies From 1e6657207e0306d87a0a609f516ef4773820f761 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 17 Jan 2025 15:41:17 +0530 Subject: [PATCH 08/18] refac --- projects/strkfarm/index.js | 41 +++++++++++++--------------------- projects/strkfarm/singleton.js | 27 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index e9e820d3d8..a7b4044f66 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -54,7 +54,7 @@ async function computeAutoCompoundingTVL(api) { calls: contracts.map(c => c.address), abi: ERC4626AbiMap.total_assets }); - + console.log(totalAssets); api.addTokens(contracts.map(c => c.token), totalAssets); } @@ -62,44 +62,35 @@ async function computeXSTRKStratTVL(api) { const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; const contracts = STRATEGIES.xSTRKStrats; - const value = BigInt(10**12) - const mask = (1n << 128n) - 1n; - const low = value & mask; - const high = value >> 128n; - - const p = await call ({ - abi: ERC4626AbiMap.preview_redeem, - target: ADDRESSES.starknet.XSTRK, - params: [low.toString(), high.toString()] - }); - // console.log(p) - const price = await multiCall({ calls: contracts.map(c => ({ - target: "0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a", - params: [10**18] + target: c.xSTRK, + params: ['0xDE0B6B3A7640000', '0x0'] })), - abi: endurABIMap.preview_redeem + abi: { ...endurABIMap.preview_redeem, customInput: 'address' } }); - let xstrk_price = price[0]; // Assuming `price` is returned as a BigInt array - console.log("xSTRK price:", xstrk_price); - - // let xstrk_price = price / 10**18 - // console.log(xstrk_price) + let xstrk_price = Number(price[0]) / 10**18 // Assuming `price` is returned as a BigInt array const data = await multiCall({ calls: contracts.map(c => ({ target: c.vesu, params: [pool_id, c.xSTRK, c.token, c.address] })), - abi: {...SINGLETONabiMap.check_collateralization_unsafe, customInput: 'address'}, + abi: {...SINGLETONabiMap.position, customInput: 'address'}, }); - - const tvl = ((data[0]['1'] / 10**18) * 1.02) - (data[0]['2'] / 10**18); + console.log(data); + + let collateral = Number(data[0]['0']); + // let debt = Number(data[0]['2']) / 10**18; + + // console.log(collateral); + // console.log(debt); + + let tvl = (collateral * xstrk_price) - 71294647137295445217014; console.log(tvl) - // api.addTokens(contracts.map(c => c.token), tvl); + api.addTokens(contracts[0].token, [tvl]); } // returns tvl and token of the Sensei strategies diff --git a/projects/strkfarm/singleton.js b/projects/strkfarm/singleton.js index 06fce49d30..da521983a9 100644 --- a/projects/strkfarm/singleton.js +++ b/projects/strkfarm/singleton.js @@ -55,6 +55,33 @@ const Singleton = [ ], "state_mutability": "external" }, + { + "name": "position", + "type": "function", + "inputs": [ + { + "name": "pool_id", + "type": "core::felt252" + }, + { + "name": "collateral_asset", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "debt_asset", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "user", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "(vesu::data_model::Position, core::integer::u256, core::integer::u256)" + } + ], + } ] const SINGLETONabiMap = {} From d05cc2a8f673613c696195e1e3859828c27f179a Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 17 Jan 2025 17:31:57 +0530 Subject: [PATCH 09/18] refac --- projects/helper/chain/starknet.js | 3 +-- projects/strkfarm/index.js | 17 +++++------------ projects/strkfarm/singleton.js | 18 ++++++++++++++++-- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/projects/helper/chain/starknet.js b/projects/helper/chain/starknet.js index 726d8492ab..b470c4ecbe 100644 --- a/projects/helper/chain/starknet.js +++ b/projects/helper/chain/starknet.js @@ -54,7 +54,6 @@ function parseOutput(result, abi, allAbi) { async function call({ abi, target, params = [], allAbi = [] } = {}, ...rest) { const { data: { result } } = await axios.post(STARKNET_RPC, formCallBody({ abi, target, params, allAbi })) - return parseOutput(result, abi, allAbi) } @@ -187,4 +186,4 @@ async function getLogs({ fromBlock, topic, target }) { } api.call = module.exports.call -api.multiCall = module.exports.multiCall +api.multiCall = module.exports.multiCall \ No newline at end of file diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index a7b4044f66..3c027c4524 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -54,7 +54,6 @@ async function computeAutoCompoundingTVL(api) { calls: contracts.map(c => c.address), abi: ERC4626AbiMap.total_assets }); - console.log(totalAssets); api.addTokens(contracts.map(c => c.token), totalAssets); } @@ -79,16 +78,10 @@ async function computeXSTRKStratTVL(api) { abi: {...SINGLETONabiMap.position, customInput: 'address'}, }); - console.log(data); + let collateral = Number(data[0]['2']); + let debt = Number(data[0]['3']); - let collateral = Number(data[0]['0']); - // let debt = Number(data[0]['2']) / 10**18; - - // console.log(collateral); - // console.log(debt); - - let tvl = (collateral * xstrk_price) - 71294647137295445217014; - console.log(tvl) + let tvl = (collateral * xstrk_price) - debt; api.addTokens(contracts[0].token, [tvl]); } @@ -119,8 +112,8 @@ async function computeSenseiTVL(api) { } async function tvl(api) { - // await computeAutoCompoundingTVL(api); - // await computeSenseiTVL(api); + await computeAutoCompoundingTVL(api); + await computeSenseiTVL(api); await computeXSTRKStratTVL(api); } diff --git a/projects/strkfarm/singleton.js b/projects/strkfarm/singleton.js index da521983a9..6376b75cce 100644 --- a/projects/strkfarm/singleton.js +++ b/projects/strkfarm/singleton.js @@ -78,10 +78,24 @@ const Singleton = [ ], "outputs": [ { - "type": "(vesu::data_model::Position, core::integer::u256, core::integer::u256)" + "type": "(core::integer::u256, core::integer::u256, core::integer::u256, core::integer::u256)" } ], - } + }, + { + "name": "vesu::data_model::Position", + "type": "struct", + "members": [ + { + "name": "collateral_shares", + "type": "core::integer::u256" + }, + { + "name": "nominal_debt", + "type": "core::integer::u256" + } + ] + }, ] const SINGLETONabiMap = {} From f8e507e9fd358b30809f34e6671f8f899f060f92 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 17 Jan 2025 17:35:37 +0530 Subject: [PATCH 10/18] refac --- projects/helper/chain/starknet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/chain/starknet.js b/projects/helper/chain/starknet.js index b470c4ecbe..5a0bff1a0e 100644 --- a/projects/helper/chain/starknet.js +++ b/projects/helper/chain/starknet.js @@ -186,4 +186,4 @@ async function getLogs({ fromBlock, topic, target }) { } api.call = module.exports.call -api.multiCall = module.exports.multiCall \ No newline at end of file +api.multiCall = module.exports.multiCall From 7543a0badefa711e0e4e1e004aa88c213ca6b1b1 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Wed, 26 Feb 2025 17:20:25 +0530 Subject: [PATCH 11/18] [strkfarm/index] removed retired vaults --- projects/strkfarm/index.js | 73 ++++---------------------------------- 1 file changed, 6 insertions(+), 67 deletions(-) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 3c027c4524..34db02c88f 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -4,38 +4,11 @@ */ const { multiCall } = require("../helper/chain/starknet"); -const { call } = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); -const { ERC4626AbiMap } = require('./erc4626'); const { SINGLETONabiMap } = require('./singleton'); const { endurABIMap } = require('./endur'); -const { ERC721StratAbiMap } = require('./sensei'); const STRATEGIES = { - "AutoCompounding": [{ // auto-compounds user tokens (e.g. STRK) by investing in zkLend - address: "0x00541681b9ad63dff1b35f79c78d8477f64857de29a27902f7298f7b620838ea", // STRK Auto-compounding - token: ADDRESSES.starknet.STRK - }, { - address: "0x016912b22d5696e95ffde888ede4bd69fbbc60c5f873082857a47c543172694f", // USDC Auto-compounding - token: ADDRESSES.starknet.USDC - }], - "Sensei": [{ // strategy using delta neutral looping across zklend and nostra protocols - address: "0x020d5fc4c9df4f943ebb36078e703369c04176ed00accf290e8295b659d2cea6", // STRK Sensei - token: ADDRESSES.starknet.STRK, - zToken: '0x06d8fa671ef84f791b7f601fa79fea8f6ceb70b5fa84189e3159d532162efc21' - }, { - address: "0x04937b58e05a3a2477402d1f74e66686f58a61a5070fcc6f694fb9a0b3bae422", - token: ADDRESSES.starknet.USDC, // USDC Sensei - zToken: '0x047ad51726d891f972e74e4ad858a261b43869f7126ce7436ee0b2529a98f486' - }, { - address: "0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250", - token: ADDRESSES.starknet.ETH, // ETH Sensei - zToken: '0x1b5bd713e72fdc5d63ffd83762f81297f6175a5e0a4771cdadbc1dd5fe72cb1' - }, { - address: "0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9", - token: ADDRESSES.starknet.ETH, // ETH Sensei XL - zToken: '0x057146f6409deb4c9fa12866915dd952aa07c1eb2752e451d7f3b042086bdeb8' - }], "xSTRKStrats": [{ address: "0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b", token: ADDRESSES.starknet.STRK, @@ -44,23 +17,12 @@ const STRATEGIES = { }] } -// returns tvl and token of the AutoCompounding strategies -async function computeAutoCompoundingTVL(api) { - const contracts = STRATEGIES.AutoCompounding; - // though these will be zToken (i.e. zkLend token, e.g. zUSDC), - // according to zkLend, 1zToken = 1 underlying token - // so, 1 zSTRK == 1 STRK, 1 zUSDC == 1 USDC - const totalAssets = await multiCall({ - calls: contracts.map(c => c.address), - abi: ERC4626AbiMap.total_assets - }); - api.addTokens(contracts.map(c => c.token), totalAssets); -} - async function computeXSTRKStratTVL(api) { const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; const contracts = STRATEGIES.xSTRKStrats; + // fetch price of xSTRK from Endur using preview_redeem fn + // and calculate actual price after dividing by 10**18 const price = await multiCall({ calls: contracts.map(c => ({ target: c.xSTRK, @@ -70,6 +32,9 @@ async function computeXSTRKStratTVL(api) { }); let xstrk_price = Number(price[0]) / 10**18 // Assuming `price` is returned as a BigInt array + // our strategy deposits xSTRK received from endur and deposits + // to vesu as collateral and borrows STRK as debt + // hence we calculate collateral and debt values in asset terms const data = await multiCall({ calls: contracts.map(c => ({ target: c.vesu, @@ -81,39 +46,13 @@ async function computeXSTRKStratTVL(api) { let collateral = Number(data[0]['2']); let debt = Number(data[0]['3']); + let tvl = (collateral * xstrk_price) - debt; api.addTokens(contracts[0].token, [tvl]); } -// returns tvl and token of the Sensei strategies -async function computeSenseiTVL(api) { - // Sensei strategies contain multiple LP tokens in each contract bcz of looping and borrow, - // but we only consider the zToken bal divided by a factor (to offset looping) as TVL - // - This is bcz any deposit by user first gets deposited into zkLend for zToken - const contracts = STRATEGIES.Sensei; - const settings = await multiCall({ - calls: contracts.map(c => c.address), - abi: ERC721StratAbiMap.get_settings - }); - - const DENOMINATOR_FACTOR = 1000000n; - const offsetFactors = settings.map(s => s.coefs_sum2); // The factor is in 10**6 terms - const balances = await multiCall({ - calls: contracts.map(c => ({ - target: c.zToken, - params: c.address, - })), - abi: ERC4626AbiMap.balanceOf - }); - - const adjustedBalances = balances.map((b, i) => (b * DENOMINATOR_FACTOR) / (DENOMINATOR_FACTOR + BigInt(offsetFactors[i]))); - api.addTokens(contracts.map(c => c.token), adjustedBalances); -} - async function tvl(api) { - await computeAutoCompoundingTVL(api); - await computeSenseiTVL(api); await computeXSTRKStratTVL(api); } From c6c67ff66fb267eff3c7928ea0fdb1e93cf1dfe3 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 28 Feb 2025 18:20:35 +0530 Subject: [PATCH 12/18] [strkfarm/index] refac zero retired balances --- projects/strkfarm/index.js | 51 +++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 34db02c88f..e8af1abd19 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -4,11 +4,38 @@ */ const { multiCall } = require("../helper/chain/starknet"); +const { call } = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); +const { ERC4626AbiMap } = require('./erc4626'); const { SINGLETONabiMap } = require('./singleton'); const { endurABIMap } = require('./endur'); +const { ERC721StratAbiMap } = require('./sensei'); const STRATEGIES = { + "AutoCompounding": [{ // auto-compounds user tokens (e.g. STRK) by investing in zkLend + address: "0x00541681b9ad63dff1b35f79c78d8477f64857de29a27902f7298f7b620838ea", // STRK Auto-compounding + token: ADDRESSES.starknet.STRK + }, { + address: "0x016912b22d5696e95ffde888ede4bd69fbbc60c5f873082857a47c543172694f", // USDC Auto-compounding + token: ADDRESSES.starknet.USDC + }], + "Sensei": [{ // strategy using delta neutral looping across zklend and nostra protocols + address: "0x020d5fc4c9df4f943ebb36078e703369c04176ed00accf290e8295b659d2cea6", // STRK Sensei + token: ADDRESSES.starknet.STRK, + zToken: '0x06d8fa671ef84f791b7f601fa79fea8f6ceb70b5fa84189e3159d532162efc21' + }, { + address: "0x04937b58e05a3a2477402d1f74e66686f58a61a5070fcc6f694fb9a0b3bae422", + token: ADDRESSES.starknet.USDC, // USDC Sensei + zToken: '0x047ad51726d891f972e74e4ad858a261b43869f7126ce7436ee0b2529a98f486' + }, { + address: "0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250", + token: ADDRESSES.starknet.ETH, // ETH Sensei + zToken: '0x1b5bd713e72fdc5d63ffd83762f81297f6175a5e0a4771cdadbc1dd5fe72cb1' + }, { + address: "0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9", + token: ADDRESSES.starknet.ETH, // ETH Sensei XL + zToken: '0x057146f6409deb4c9fa12866915dd952aa07c1eb2752e451d7f3b042086bdeb8' + }], "xSTRKStrats": [{ address: "0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b", token: ADDRESSES.starknet.STRK, @@ -17,12 +44,18 @@ const STRATEGIES = { }] } +// returns tvl and token of the AutoCompounding strategies +async function computeAutoCompoundingTVL(api) { + // vaults under this catagory are retired so tvl balances are not considered + const retiredBalance = 0 + const contracts = STRATEGIES.AutoCompounding; + api.addTokens(contracts.map(c => c.token), retiredBalance); +} + async function computeXSTRKStratTVL(api) { const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; const contracts = STRATEGIES.xSTRKStrats; - // fetch price of xSTRK from Endur using preview_redeem fn - // and calculate actual price after dividing by 10**18 const price = await multiCall({ calls: contracts.map(c => ({ target: c.xSTRK, @@ -32,9 +65,6 @@ async function computeXSTRKStratTVL(api) { }); let xstrk_price = Number(price[0]) / 10**18 // Assuming `price` is returned as a BigInt array - // our strategy deposits xSTRK received from endur and deposits - // to vesu as collateral and borrows STRK as debt - // hence we calculate collateral and debt values in asset terms const data = await multiCall({ calls: contracts.map(c => ({ target: c.vesu, @@ -46,13 +76,22 @@ async function computeXSTRKStratTVL(api) { let collateral = Number(data[0]['2']); let debt = Number(data[0]['3']); - let tvl = (collateral * xstrk_price) - debt; api.addTokens(contracts[0].token, [tvl]); } +// returns tvl and token of the Sensei strategies +async function computeSenseiTVL(api) { + // vaults under this catagory are retired so tvl balances are not considered + const retiredBalance = 0 + const contracts = STRATEGIES.Sensei; + api.addTokens(contracts.map(c => c.token), retiredBalance); +} + async function tvl(api) { + await computeAutoCompoundingTVL(api); + await computeSenseiTVL(api); await computeXSTRKStratTVL(api); } From f37ed064f769dfa71e19344bf7825dfa41f291c8 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Wed, 9 Apr 2025 15:19:36 +0530 Subject: [PATCH 13/18] [strkfarm/index] added fusion vaults --- projects/strkfarm/data.json | 376 +++++++++++++++++++++++++++++++++ projects/strkfarm/fusionAbi.js | 20 ++ projects/strkfarm/index.js | 28 ++- projects/strkfarm/test.js | 9 + 4 files changed, 431 insertions(+), 2 deletions(-) create mode 100644 projects/strkfarm/data.json create mode 100644 projects/strkfarm/fusionAbi.js create mode 100644 projects/strkfarm/test.js diff --git a/projects/strkfarm/data.json b/projects/strkfarm/data.json new file mode 100644 index 0000000000..fe2ca6b668 --- /dev/null +++ b/projects/strkfarm/data.json @@ -0,0 +1,376 @@ +{ + "data": [ + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-01T00:00:00.000Z", + "volume": "11931351238923607669695", + "fees": "3086610242176705050" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-02T00:00:00.000Z", + "volume": "1770848869823931267578093", + "fees": "260387320645555008910" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-03T00:00:00.000Z", + "volume": "2177269846506585834488216", + "fees": "273889978423557671461" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-04T00:00:00.000Z", + "volume": "1491841597999011289443000", + "fees": "261214272277048530119" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-05T00:00:00.000Z", + "volume": "515073656896296284318526", + "fees": "51530314276557513977" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-06T00:00:00.000Z", + "volume": "405356431638146549663960", + "fees": "50248142260282674199" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-07T00:00:00.000Z", + "volume": "383983054355916889182566", + "fees": "41682664644047183602" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-08T00:00:00.000Z", + "volume": "716432705757739454464450", + "fees": "161711279182138708430" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-09T00:00:00.000Z", + "volume": "196429052192508222901350", + "fees": "19746481109250833879" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-10T00:00:00.000Z", + "volume": "475937556423534687882553", + "fees": "47600814924620680495" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-11T00:00:00.000Z", + "volume": "508106621368159477273612", + "fees": "50810793080763351548" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-12T00:00:00.000Z", + "volume": "755014401728184796521477", + "fees": "75501440172818483249" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-13T00:00:00.000Z", + "volume": "395810330265669133294647", + "fees": "39612020252450273853" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-14T00:00:00.000Z", + "volume": "140538472400162049936409", + "fees": "14123670046100838351" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-15T00:00:00.000Z", + "volume": "103797735198013088745452", + "fees": "10615592215691511544" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-16T00:00:00.000Z", + "volume": "123345674083213649097797", + "fees": "12334567408321365487" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-17T00:00:00.000Z", + "volume": "90174874683418796071159", + "fees": "9017487468341880030" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-18T00:00:00.000Z", + "volume": "133545233607222125935425", + "fees": "31691906220936175355" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-19T00:00:00.000Z", + "volume": "75468076939268877805904", + "fees": "31440909213810773535" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-20T00:00:00.000Z", + "volume": "120523199391096080618818", + "fees": "54645778120652453425" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-21T00:00:00.000Z", + "volume": "181117099857482094661793", + "fees": "76465243113095110152" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-22T00:00:00.000Z", + "volume": "103405798088118791610849", + "fees": "37399998033303317079" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-23T00:00:00.000Z", + "volume": "51811984577988868333806", + "fees": "22642875381005803268" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-24T00:00:00.000Z", + "volume": "99885299752799711541716", + "fees": "45287112325837386551" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-25T00:00:00.000Z", + "volume": "1694363993636129846128957", + "fees": "331300252001496932845" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-26T00:00:00.000Z", + "volume": "84334342873678665937853", + "fees": "35390687553121075743" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-27T00:00:00.000Z", + "volume": "50236994333858830631167", + "fees": "21662695834421439960" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-02-28T00:00:00.000Z", + "volume": "180900862554774793814656", + "fees": "72062361989073685841" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-03-01T00:00:00.000Z", + "volume": "16879247714567375350766", + "fees": "6652977330147796952" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-03-02T00:00:00.000Z", + "volume": "52312837842127597394730", + "fees": "20904490929023746685" + }, + { + "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", + "date": "2025-03-03T00:00:00.000Z", + "volume": "275228316409470105140760", + "fees": "108191516779380060493" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-01T00:00:00.000Z", + "volume": "7883284476220868986897", + "fees": "788328447622086934" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-02T00:00:00.000Z", + "volume": "413041863662644001141006", + "fees": "63031700590092719781" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-03T00:00:00.000Z", + "volume": "3631945631741335727939867", + "fees": "476733566242305696798" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-04T00:00:00.000Z", + "volume": "561230026823429016169265", + "fees": "129257348747228802198" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-05T00:00:00.000Z", + "volume": "529642605005638184843155", + "fees": "53297262381400228803" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-06T00:00:00.000Z", + "volume": "448562757038822593233818", + "fees": "53845878017060397583" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-07T00:00:00.000Z", + "volume": "811480540752157161452570", + "fees": "85531242636147913846" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-08T00:00:00.000Z", + "volume": "840958339650396037222500", + "fees": "175738362796697239357" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-09T00:00:00.000Z", + "volume": "271344791447530128557547", + "fees": "27134479144753014135" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-10T00:00:00.000Z", + "volume": "561537924624589122222425", + "fees": "56345379015185891095" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-11T00:00:00.000Z", + "volume": "419511877443775282688182", + "fees": "41951187744377530260" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-12T00:00:00.000Z", + "volume": "548504176456032263613860", + "fees": "54850417645603228949" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-13T00:00:00.000Z", + "volume": "452104317934722102280702", + "fees": "45210431793472212373" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-14T00:00:00.000Z", + "volume": "190205694727088322790456", + "fees": "19020569472708833156" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-15T00:00:00.000Z", + "volume": "212813107273968515949511", + "fees": "21281310727396852530" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-16T00:00:00.000Z", + "volume": "280992518357976115891707", + "fees": "28099251835797612909" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-17T00:00:00.000Z", + "volume": "335281572591500652695122", + "fees": "33538277664317808926" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-18T00:00:00.000Z", + "volume": "637313054882946657205572", + "fees": "115973383666911651210" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-19T00:00:00.000Z", + "volume": "57219461824355884477495", + "fees": "22315967224715725023" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-20T00:00:00.000Z", + "volume": "172601460486592517450763", + "fees": "80390918885562237185" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-21T00:00:00.000Z", + "volume": "239649081236753114547353", + "fees": "104299569310273373957" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-22T00:00:00.000Z", + "volume": "102621821188687883958653", + "fees": "36638974080161969994" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-23T00:00:00.000Z", + "volume": "96129787370285338723167", + "fees": "44695265326249313930" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-24T00:00:00.000Z", + "volume": "159565019148033403979716", + "fees": "74970153185233506953" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-25T00:00:00.000Z", + "volume": "1536161809405630932494691", + "fees": "244686811904133510827" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-26T00:00:00.000Z", + "volume": "91415294629385417081174", + "fees": "38720243895386595525" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-27T00:00:00.000Z", + "volume": "80750607579098817587567", + "fees": "36779030240851594769" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-02-28T00:00:00.000Z", + "volume": "146320345097328348406371", + "fees": "54876745352889226262" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-03-01T00:00:00.000Z", + "volume": "73260815548981594751891", + "fees": "33704426747738346662" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-03-02T00:00:00.000Z", + "volume": "46333863528024233643653", + "fees": "18006630146812467906" + }, + { + "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", + "date": "2025-03-03T00:00:00.000Z", + "volume": "126552052983566787392553", + "fees": "59026787914626314244" + } + ] +} \ No newline at end of file diff --git a/projects/strkfarm/fusionAbi.js b/projects/strkfarm/fusionAbi.js new file mode 100644 index 0000000000..37a2b96f43 --- /dev/null +++ b/projects/strkfarm/fusionAbi.js @@ -0,0 +1,20 @@ +const FusionAbi = [ + { + "type": "function", + "name": "total_assets", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, +] + +const FusionAbiMap = {} +FusionAbi.forEach(i => FusionAbiMap[i.name] = i) + +module.exports = { + FusionAbiMap +} \ No newline at end of file diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index e8af1abd19..639b807df6 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -9,6 +9,7 @@ const ADDRESSES = require('../helper/coreAssets.json'); const { ERC4626AbiMap } = require('./erc4626'); const { SINGLETONabiMap } = require('./singleton'); const { endurABIMap } = require('./endur'); +const { FusionAbiMap } = require('./fusionAbi'); const { ERC721StratAbiMap } = require('./sensei'); const STRATEGIES = { @@ -41,7 +42,20 @@ const STRATEGIES = { token: ADDRESSES.starknet.STRK, xSTRK: ADDRESSES.starknet.XSTRK, vesu: "0x02545b2e5d519fc230e9cd781046d3a64e092114f07e44771e0d719d148725ef" - }] + }], + "FusionVaults": [{ + address: "0x07fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929", + token: ADDRESSES.starknet.STRK, // Fusion STRK + }, { + address: "0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca", + token: ADDRESSES.starknet.ETH, // Fusion ETH + }, { + address: "0x00a858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c", + token: ADDRESSES.starknet.USDC, // Fusion USDC + }, { + address: "0x0115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c", + token: ADDRESSES.starknet.USDT, // Fusion USDT + }] } // returns tvl and token of the AutoCompounding strategies @@ -55,7 +69,6 @@ async function computeAutoCompoundingTVL(api) { async function computeXSTRKStratTVL(api) { const pool_id = "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"; const contracts = STRATEGIES.xSTRKStrats; - const price = await multiCall({ calls: contracts.map(c => ({ target: c.xSTRK, @@ -89,10 +102,21 @@ async function computeSenseiTVL(api) { api.addTokens(contracts.map(c => c.token), retiredBalance); } +async function computeFusionTVL(api) { + const fusionContracts = STRATEGIES.FusionVaults + // calculates tvl of each fusion vault + const totalAssets = await multiCall({ + calls: fusionContracts.map(c => c.address), + abi: FusionAbiMap.total_assets + }) + api.addTokens(fusionContracts.map(c => c.token), totalAssets); +} + async function tvl(api) { await computeAutoCompoundingTVL(api); await computeSenseiTVL(api); await computeXSTRKStratTVL(api); + await computeFusionTVL(api); } module.exports = { diff --git a/projects/strkfarm/test.js b/projects/strkfarm/test.js new file mode 100644 index 0000000000..20b7b74df0 --- /dev/null +++ b/projects/strkfarm/test.js @@ -0,0 +1,9 @@ +import data from './data.json' assert { type: 'json' }; + +let totalVolume = 0n; + +for (const entry of data.data) { + totalVolume += BigInt(entry.volume); +} + +console.log("Total Volume:", totalVolume.toString()); \ No newline at end of file From 20533c2288a23298d8120785d7121432f0f8cda8 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Wed, 9 Apr 2025 15:31:53 +0530 Subject: [PATCH 14/18] [strkfarm] removed redundent json file --- projects/strkfarm/data.json | 376 ------------------------------------ 1 file changed, 376 deletions(-) delete mode 100644 projects/strkfarm/data.json diff --git a/projects/strkfarm/data.json b/projects/strkfarm/data.json deleted file mode 100644 index fe2ca6b668..0000000000 --- a/projects/strkfarm/data.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "data": [ - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-01T00:00:00.000Z", - "volume": "11931351238923607669695", - "fees": "3086610242176705050" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-02T00:00:00.000Z", - "volume": "1770848869823931267578093", - "fees": "260387320645555008910" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-03T00:00:00.000Z", - "volume": "2177269846506585834488216", - "fees": "273889978423557671461" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-04T00:00:00.000Z", - "volume": "1491841597999011289443000", - "fees": "261214272277048530119" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-05T00:00:00.000Z", - "volume": "515073656896296284318526", - "fees": "51530314276557513977" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-06T00:00:00.000Z", - "volume": "405356431638146549663960", - "fees": "50248142260282674199" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-07T00:00:00.000Z", - "volume": "383983054355916889182566", - "fees": "41682664644047183602" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-08T00:00:00.000Z", - "volume": "716432705757739454464450", - "fees": "161711279182138708430" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-09T00:00:00.000Z", - "volume": "196429052192508222901350", - "fees": "19746481109250833879" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-10T00:00:00.000Z", - "volume": "475937556423534687882553", - "fees": "47600814924620680495" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-11T00:00:00.000Z", - "volume": "508106621368159477273612", - "fees": "50810793080763351548" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-12T00:00:00.000Z", - "volume": "755014401728184796521477", - "fees": "75501440172818483249" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-13T00:00:00.000Z", - "volume": "395810330265669133294647", - "fees": "39612020252450273853" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-14T00:00:00.000Z", - "volume": "140538472400162049936409", - "fees": "14123670046100838351" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-15T00:00:00.000Z", - "volume": "103797735198013088745452", - "fees": "10615592215691511544" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-16T00:00:00.000Z", - "volume": "123345674083213649097797", - "fees": "12334567408321365487" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-17T00:00:00.000Z", - "volume": "90174874683418796071159", - "fees": "9017487468341880030" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-18T00:00:00.000Z", - "volume": "133545233607222125935425", - "fees": "31691906220936175355" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-19T00:00:00.000Z", - "volume": "75468076939268877805904", - "fees": "31440909213810773535" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-20T00:00:00.000Z", - "volume": "120523199391096080618818", - "fees": "54645778120652453425" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-21T00:00:00.000Z", - "volume": "181117099857482094661793", - "fees": "76465243113095110152" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-22T00:00:00.000Z", - "volume": "103405798088118791610849", - "fees": "37399998033303317079" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-23T00:00:00.000Z", - "volume": "51811984577988868333806", - "fees": "22642875381005803268" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-24T00:00:00.000Z", - "volume": "99885299752799711541716", - "fees": "45287112325837386551" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-25T00:00:00.000Z", - "volume": "1694363993636129846128957", - "fees": "331300252001496932845" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-26T00:00:00.000Z", - "volume": "84334342873678665937853", - "fees": "35390687553121075743" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-27T00:00:00.000Z", - "volume": "50236994333858830631167", - "fees": "21662695834421439960" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-02-28T00:00:00.000Z", - "volume": "180900862554774793814656", - "fees": "72062361989073685841" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-03-01T00:00:00.000Z", - "volume": "16879247714567375350766", - "fees": "6652977330147796952" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-03-02T00:00:00.000Z", - "volume": "52312837842127597394730", - "fees": "20904490929023746685" - }, - { - "token": "1154528348897832322836383398094260276478746682240753657495317076362149579530", - "date": "2025-03-03T00:00:00.000Z", - "volume": "275228316409470105140760", - "fees": "108191516779380060493" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-01T00:00:00.000Z", - "volume": "7883284476220868986897", - "fees": "788328447622086934" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-02T00:00:00.000Z", - "volume": "413041863662644001141006", - "fees": "63031700590092719781" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-03T00:00:00.000Z", - "volume": "3631945631741335727939867", - "fees": "476733566242305696798" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-04T00:00:00.000Z", - "volume": "561230026823429016169265", - "fees": "129257348747228802198" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-05T00:00:00.000Z", - "volume": "529642605005638184843155", - "fees": "53297262381400228803" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-06T00:00:00.000Z", - "volume": "448562757038822593233818", - "fees": "53845878017060397583" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-07T00:00:00.000Z", - "volume": "811480540752157161452570", - "fees": "85531242636147913846" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-08T00:00:00.000Z", - "volume": "840958339650396037222500", - "fees": "175738362796697239357" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-09T00:00:00.000Z", - "volume": "271344791447530128557547", - "fees": "27134479144753014135" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-10T00:00:00.000Z", - "volume": "561537924624589122222425", - "fees": "56345379015185891095" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-11T00:00:00.000Z", - "volume": "419511877443775282688182", - "fees": "41951187744377530260" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-12T00:00:00.000Z", - "volume": "548504176456032263613860", - "fees": "54850417645603228949" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-13T00:00:00.000Z", - "volume": "452104317934722102280702", - "fees": "45210431793472212373" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-14T00:00:00.000Z", - "volume": "190205694727088322790456", - "fees": "19020569472708833156" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-15T00:00:00.000Z", - "volume": "212813107273968515949511", - "fees": "21281310727396852530" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-16T00:00:00.000Z", - "volume": "280992518357976115891707", - "fees": "28099251835797612909" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-17T00:00:00.000Z", - "volume": "335281572591500652695122", - "fees": "33538277664317808926" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-18T00:00:00.000Z", - "volume": "637313054882946657205572", - "fees": "115973383666911651210" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-19T00:00:00.000Z", - "volume": "57219461824355884477495", - "fees": "22315967224715725023" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-20T00:00:00.000Z", - "volume": "172601460486592517450763", - "fees": "80390918885562237185" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-21T00:00:00.000Z", - "volume": "239649081236753114547353", - "fees": "104299569310273373957" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-22T00:00:00.000Z", - "volume": "102621821188687883958653", - "fees": "36638974080161969994" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-23T00:00:00.000Z", - "volume": "96129787370285338723167", - "fees": "44695265326249313930" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-24T00:00:00.000Z", - "volume": "159565019148033403979716", - "fees": "74970153185233506953" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-25T00:00:00.000Z", - "volume": "1536161809405630932494691", - "fees": "244686811904133510827" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-26T00:00:00.000Z", - "volume": "91415294629385417081174", - "fees": "38720243895386595525" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-27T00:00:00.000Z", - "volume": "80750607579098817587567", - "fees": "36779030240851594769" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-02-28T00:00:00.000Z", - "volume": "146320345097328348406371", - "fees": "54876745352889226262" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-03-01T00:00:00.000Z", - "volume": "73260815548981594751891", - "fees": "33704426747738346662" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-03-02T00:00:00.000Z", - "volume": "46333863528024233643653", - "fees": "18006630146812467906" - }, - { - "token": "2009894490435840142178314390393166646092438090257831307886760648929397478285", - "date": "2025-03-03T00:00:00.000Z", - "volume": "126552052983566787392553", - "fees": "59026787914626314244" - } - ] -} \ No newline at end of file From e6cfae84abf6c76667ada0a1a8054e3c6b8d12bf Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Thu, 10 Apr 2025 14:59:58 +0530 Subject: [PATCH 15/18] [strkfarm] removed redundent file --- projects/strkfarm/test.js | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 projects/strkfarm/test.js diff --git a/projects/strkfarm/test.js b/projects/strkfarm/test.js deleted file mode 100644 index 20b7b74df0..0000000000 --- a/projects/strkfarm/test.js +++ /dev/null @@ -1,9 +0,0 @@ -import data from './data.json' assert { type: 'json' }; - -let totalVolume = 0n; - -for (const entry of data.data) { - totalVolume += BigInt(entry.volume); -} - -console.log("Total Volume:", totalVolume.toString()); \ No newline at end of file From 3a0398ca53048b80a5ba26245105fdf759f3b0c9 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Tue, 1 Jul 2025 15:27:55 +0530 Subject: [PATCH 16/18] [troves/index] --- projects/troves/ekubo.js | 36 +++++++++++++++++++++ projects/{strkfarm => troves}/endur.js | 0 projects/{strkfarm => troves}/erc4626.js | 0 projects/{strkfarm => troves}/fusionAbi.js | 0 projects/{strkfarm => troves}/index.js | 37 +++++++++++++++++++--- projects/{strkfarm => troves}/sensei.js | 0 projects/{strkfarm => troves}/singleton.js | 0 projects/troves/test.js | 9 ++++++ 8 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 projects/troves/ekubo.js rename projects/{strkfarm => troves}/endur.js (100%) rename projects/{strkfarm => troves}/erc4626.js (100%) rename projects/{strkfarm => troves}/fusionAbi.js (100%) rename projects/{strkfarm => troves}/index.js (81%) rename projects/{strkfarm => troves}/sensei.js (100%) rename projects/{strkfarm => troves}/singleton.js (100%) create mode 100644 projects/troves/test.js diff --git a/projects/troves/ekubo.js b/projects/troves/ekubo.js new file mode 100644 index 0000000000..5828d4bdea --- /dev/null +++ b/projects/troves/ekubo.js @@ -0,0 +1,36 @@ +const EkuboAbi = [ + { + "name": "total_supply", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "name": "convert_to_assets", + "type": "function", + "inputs": [ + { + "name": "shares", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "(core::integer::u256, core::integer::u256, core::integer::u256)" + } + ], + "state_mutability": "view" + }, +] + +const EkuboAbiMap = {} +EkuboAbi.forEach(i => EkuboAbiMap[i.name] = i) + +module.exports = { + EkuboAbiMap +} \ No newline at end of file diff --git a/projects/strkfarm/endur.js b/projects/troves/endur.js similarity index 100% rename from projects/strkfarm/endur.js rename to projects/troves/endur.js diff --git a/projects/strkfarm/erc4626.js b/projects/troves/erc4626.js similarity index 100% rename from projects/strkfarm/erc4626.js rename to projects/troves/erc4626.js diff --git a/projects/strkfarm/fusionAbi.js b/projects/troves/fusionAbi.js similarity index 100% rename from projects/strkfarm/fusionAbi.js rename to projects/troves/fusionAbi.js diff --git a/projects/strkfarm/index.js b/projects/troves/index.js similarity index 81% rename from projects/strkfarm/index.js rename to projects/troves/index.js index 639b807df6..1abd807b0d 100644 --- a/projects/strkfarm/index.js +++ b/projects/troves/index.js @@ -1,16 +1,15 @@ /** - * STRKFarm is a yield aggregator and strategy builder on Starknet + * Troves is a yield aggregator and strategy builder on Starknet * - We use various DeFi protocols on starknet to design yield strategies */ const { multiCall } = require("../helper/chain/starknet"); const { call } = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); -const { ERC4626AbiMap } = require('./erc4626'); +const { EkuboAbiMap } = require('./ekubo'); const { SINGLETONabiMap } = require('./singleton'); const { endurABIMap } = require('./endur'); const { FusionAbiMap } = require('./fusionAbi'); -const { ERC721StratAbiMap } = require('./sensei'); const STRATEGIES = { "AutoCompounding": [{ // auto-compounds user tokens (e.g. STRK) by investing in zkLend @@ -41,7 +40,7 @@ const STRATEGIES = { address: "0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b", token: ADDRESSES.starknet.STRK, xSTRK: ADDRESSES.starknet.XSTRK, - vesu: "0x02545b2e5d519fc230e9cd781046d3a64e092114f07e44771e0d719d148725ef" + vesu: "0x000d8d6dfec4d33bfb6895de9f3852143a17c6f92fd2a21da3d6924d34870160" }], "FusionVaults": [{ address: "0x07fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929", @@ -55,6 +54,11 @@ const STRATEGIES = { }, { address: "0x0115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c", token: ADDRESSES.starknet.USDT, // Fusion USDT + }], + "EkuboVaults": [{ + address: "0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324", + token1: ADDRESSES.starknet.STRK, + token2: ADDRESSES.starknet.XSTRK }] } @@ -84,7 +88,7 @@ async function computeXSTRKStratTVL(api) { params: [pool_id, c.xSTRK, c.token, c.address] })), abi: {...SINGLETONabiMap.position, customInput: 'address'}, - }); + }) let collateral = Number(data[0]['2']); let debt = Number(data[0]['3']); @@ -112,11 +116,34 @@ async function computeFusionTVL(api) { api.addTokens(fusionContracts.map(c => c.token), totalAssets); } +async function computeEkuboTVL(api) { + const ekuboContracts = STRATEGIES.EkuboVaults + // calculate tvl for each + const totalShares = await multiCall({ + calls: ekuboContracts.map(c => c.address), + abi: EkuboAbiMap.total_supply + }); + + const hexValues = totalShares.map(v => '0x' + v.toString(16)); + + const assets = await multiCall({ + calls: ekuboContracts.map(c => ({ + target: c.address, + params: [hexValues[0], '0x0'] + })), + abi: { ...EkuboAbiMap.convert_to_assets, customInput: 'address' } + }) + + api.addTokens(ADDRESSES.starknet.XSTRK, [assets[0]['1']]) + api.addTokens(ADDRESSES.starknet.STRK, [assets[0]['2']]) +} + async function tvl(api) { await computeAutoCompoundingTVL(api); await computeSenseiTVL(api); await computeXSTRKStratTVL(api); await computeFusionTVL(api); + await computeEkuboTVL(api); } module.exports = { diff --git a/projects/strkfarm/sensei.js b/projects/troves/sensei.js similarity index 100% rename from projects/strkfarm/sensei.js rename to projects/troves/sensei.js diff --git a/projects/strkfarm/singleton.js b/projects/troves/singleton.js similarity index 100% rename from projects/strkfarm/singleton.js rename to projects/troves/singleton.js diff --git a/projects/troves/test.js b/projects/troves/test.js new file mode 100644 index 0000000000..20b7b74df0 --- /dev/null +++ b/projects/troves/test.js @@ -0,0 +1,9 @@ +import data from './data.json' assert { type: 'json' }; + +let totalVolume = 0n; + +for (const entry of data.data) { + totalVolume += BigInt(entry.volume); +} + +console.log("Total Volume:", totalVolume.toString()); \ No newline at end of file From 943c704048adb9341ae811bce33c21fa17ee3cca Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Wed, 2 Jul 2025 16:00:03 +0530 Subject: [PATCH 17/18] [strkfarm/index] req refac --- projects/{troves => strkfarm}/ekubo.js | 0 projects/{troves => strkfarm}/endur.js | 0 projects/{troves => strkfarm}/erc4626.js | 0 projects/{troves => strkfarm}/fusionAbi.js | 0 projects/{troves => strkfarm}/index.js | 1 - projects/{troves => strkfarm}/sensei.js | 0 projects/{troves => strkfarm}/singleton.js | 0 projects/troves/test.js | 9 --------- 8 files changed, 10 deletions(-) rename projects/{troves => strkfarm}/ekubo.js (100%) rename projects/{troves => strkfarm}/endur.js (100%) rename projects/{troves => strkfarm}/erc4626.js (100%) rename projects/{troves => strkfarm}/fusionAbi.js (100%) rename projects/{troves => strkfarm}/index.js (99%) rename projects/{troves => strkfarm}/sensei.js (100%) rename projects/{troves => strkfarm}/singleton.js (100%) delete mode 100644 projects/troves/test.js diff --git a/projects/troves/ekubo.js b/projects/strkfarm/ekubo.js similarity index 100% rename from projects/troves/ekubo.js rename to projects/strkfarm/ekubo.js diff --git a/projects/troves/endur.js b/projects/strkfarm/endur.js similarity index 100% rename from projects/troves/endur.js rename to projects/strkfarm/endur.js diff --git a/projects/troves/erc4626.js b/projects/strkfarm/erc4626.js similarity index 100% rename from projects/troves/erc4626.js rename to projects/strkfarm/erc4626.js diff --git a/projects/troves/fusionAbi.js b/projects/strkfarm/fusionAbi.js similarity index 100% rename from projects/troves/fusionAbi.js rename to projects/strkfarm/fusionAbi.js diff --git a/projects/troves/index.js b/projects/strkfarm/index.js similarity index 99% rename from projects/troves/index.js rename to projects/strkfarm/index.js index 1abd807b0d..be73dda3b5 100644 --- a/projects/troves/index.js +++ b/projects/strkfarm/index.js @@ -4,7 +4,6 @@ */ const { multiCall } = require("../helper/chain/starknet"); -const { call } = require("../helper/chain/starknet"); const ADDRESSES = require('../helper/coreAssets.json'); const { EkuboAbiMap } = require('./ekubo'); const { SINGLETONabiMap } = require('./singleton'); diff --git a/projects/troves/sensei.js b/projects/strkfarm/sensei.js similarity index 100% rename from projects/troves/sensei.js rename to projects/strkfarm/sensei.js diff --git a/projects/troves/singleton.js b/projects/strkfarm/singleton.js similarity index 100% rename from projects/troves/singleton.js rename to projects/strkfarm/singleton.js diff --git a/projects/troves/test.js b/projects/troves/test.js deleted file mode 100644 index 20b7b74df0..0000000000 --- a/projects/troves/test.js +++ /dev/null @@ -1,9 +0,0 @@ -import data from './data.json' assert { type: 'json' }; - -let totalVolume = 0n; - -for (const entry of data.data) { - totalVolume += BigInt(entry.volume); -} - -console.log("Total Volume:", totalVolume.toString()); \ No newline at end of file From 2f36c401164f5db8da6c9adc02d5d0fd1b0cad08 Mon Sep 17 00:00:00 2001 From: ariyan-hashstack Date: Fri, 18 Jul 2025 17:44:32 +0530 Subject: [PATCH 18/18] [strkfarm/index] fixed tvl issues --- projects/strkfarm/endur.js | 16 ++++++++++++++++ projects/strkfarm/index.js | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/projects/strkfarm/endur.js b/projects/strkfarm/endur.js index 11f16b540b..6ad9c5e3b9 100644 --- a/projects/strkfarm/endur.js +++ b/projects/strkfarm/endur.js @@ -15,6 +15,22 @@ const Endur = [ ], "state_mutability": "view" }, + { + "name": "convert_to_assets", + "type": "function", + "inputs": [ + { + "name": "shares", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, ] const endurABIMap = {} diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index be73dda3b5..8f3c068216 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -9,6 +9,7 @@ const { EkuboAbiMap } = require('./ekubo'); const { SINGLETONabiMap } = require('./singleton'); const { endurABIMap } = require('./endur'); const { FusionAbiMap } = require('./fusionAbi'); +const { hex } = require("@coral-xyz/anchor/dist/cjs/utils/bytes"); const STRATEGIES = { "AutoCompounding": [{ // auto-compounds user tokens (e.g. STRK) by investing in zkLend @@ -125,6 +126,7 @@ async function computeEkuboTVL(api) { const hexValues = totalShares.map(v => '0x' + v.toString(16)); + // get assets ( liquidity, xstrk, strk ) for the total supply const assets = await multiCall({ calls: ekuboContracts.map(c => ({ target: c.address, @@ -132,9 +134,21 @@ async function computeEkuboTVL(api) { })), abi: { ...EkuboAbiMap.convert_to_assets, customInput: 'address' } }) + + // convert to bigInt and then to hex for contract call + let xstrk = BigInt(assets[0]['1']); + let hex_strk = '0x' + xstrk.toString(16); - api.addTokens(ADDRESSES.starknet.XSTRK, [assets[0]['1']]) - api.addTokens(ADDRESSES.starknet.STRK, [assets[0]['2']]) + // convert xstrk to strk + const strk_eq = await multiCall({ + calls: ekuboContracts.map(c => ({ + target: ADDRESSES.starknet.XSTRK, + params: [hex_strk, '0x0'] + })), + abi: { ...endurABIMap.convert_to_assets, customInput: 'address' } + }) + + api.addTokens(ADDRESSES.starknet.STRK, Number(strk_eq[0]) + Number(assets[0]['2']) ); } async function tvl(api) {