diff --git a/package-lock.json b/package-lock.json index 9262e7edde..a541388890 100644 --- a/package-lock.json +++ b/package-lock.json @@ -886,9 +886,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.73", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.73.tgz", - "integrity": "sha512-uLZeOFNWPKVyZAMtO7dXSJreHKWqETHpbPMZzpNR47icGl4nS2o/SX8xW82BmdLU7cp25EG9sN/sKkht/KnWvA==", + "version": "5.0.74", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.74.tgz", + "integrity": "sha512-qk/UrP5A55Co7pnj7WE3Cloc7zZSFESUTb5fXRaowH9K5oWi/JRJ4LQZOI38sami586q9/sWLwJrKBlU+lQIVw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/kernel/abi.js b/projects/kernel/abi.js new file mode 100644 index 0000000000..d70d466c83 --- /dev/null +++ b/projects/kernel/abi.js @@ -0,0 +1,5 @@ +exports.abi = { + numApprovedTokens: "function numApprovedTokens() view returns (uint256)", + approvedTokens: "function approvedTokens(uint256) view returns (address)", + tokens: "function tokens(address) view returns (address vaultToken, address rateProvider, uint256 cap, uint256 deposited, bool paused)" +}; \ No newline at end of file diff --git a/projects/kernel/index.js b/projects/kernel/index.js new file mode 100644 index 0000000000..fce117aa7b --- /dev/null +++ b/projects/kernel/index.js @@ -0,0 +1,30 @@ +const abi = { + tokens: "function tokens(address) view returns (address vaultToken, address rateProvider, uint256 cap, uint256 deposited, bool paused)" +} + +const ASSETS = [ + "0xf02C96DbbB92DC0325AD52B3f9F2b951f972bf00", // krETH + "0x513D27c94C0D81eeD9DC2a88b4531a69993187cF", // ksETH + "0x0bB9aB78aAF7179b7515e6753d89822b91e670C4", // kUSD +] + +const tvl = async (api) => { + const tokens = await api.fetchList({ lengthAbi: 'numApprovedTokens', itemAbi: 'approvedTokens', calls: ASSETS, groupedByInput: true, }); + const assets = [] + const balanceCalls = [] + tokens.forEach((tokens, i) => { + assets.push(...tokens) + balanceCalls.push(...tokens.map(token => ({ target: ASSETS[i], params: token }))) + }) + const balances = (await api.multiCall({ calls: balanceCalls, abi: abi.tokens })).map(i => i.deposited) + api.add(assets, balances) +}; + +module.exports = { + doublecounted: true, + methodology: 'The TVL represents the sum of each LST deposited in the protocol', + ethereum: { + tvl, + }, +}; +