Skip to content

Commit c12a404

Browse files
committed
Merge branch 'main' into nibiru/silverswap
2 parents d04504b + 1387064 commit c12a404

File tree

32 files changed

+649
-205
lines changed

32 files changed

+649
-205
lines changed

liquidations/smardex/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ const calculateLiquidationPrice = (position: Position): number => {
6868

6969
const formatPosition = (position: Position): Liq => {
7070
const owner =
71-
position.mainPosition?.lastOwner?.address || '0x0000000000000000000000000000000000000000';
71+
position.recipient || '0x0000000000000000000000000000000000000000';
7272

7373
const searchParam = position.history && position.history.length > 0 ?
7474
position.history[position.history.length - 1].transactionHash : position.index;

package-lock.json

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

projects/9summits/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ const configs = {
1212
'0x1E2aAaDcF528b9cC08F43d4fd7db488cE89F5741', // co-curator with tulip-capital
1313
'0x0bB2751a90fFF62e844b1521637DeD28F3f5046A', // co-curator with tulip-capital
1414
],
15+
turtleclub: [
16+
'0xa853d8f5f253468495c5a92d54a3fe6cca2aa26b',
17+
'0x7388d4b5c4cfc96c9105de913717ba7519178129',
18+
'0xDe7CFf032D453Ce6B0a796043E75d380Df258812',
19+
'0xAF87B90E8a3035905697E07Bb813d2d59D2b0951',
20+
],
1521
},
1622
base: {
1723
morphoVaultOwners: [

projects/MellowProtocol/index.js

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,35 +29,16 @@ Object.keys(config).forEach(chain => {
2929
module.exports[chain] = {
3030
tvl: async (api) => {
3131
const balances = {}
32-
const logs = await getLogs({
33-
api,
34-
target: registry,
35-
topic: 'VaultRegistered(address,address,uint256,address,address)',
36-
fromBlock,
37-
eventAbi: 'event VaultRegistered (address indexed origin, address indexed sender, uint256 indexed nft, address vault, address owner)',
38-
onlyArgs: true,
39-
extraKey: 'VaultRegistered'
40-
})
41-
const vaultKeys = {}
42-
logs.forEach(i => vaultKeys[i.nft] = i.vault)
43-
const tokenLockedLogs = await getLogs({
44-
api,
45-
target: registry,
46-
topic: 'TokenLocked(address,address,uint256)',
47-
fromBlock,
48-
eventAbi: 'event TokenLocked (address indexed origin, address indexed sender, uint256 indexed nft)',
49-
onlyArgs: true,
50-
extraKey: 'TokenLocked'
51-
})
52-
tokenLockedLogs.forEach(i => delete vaultKeys[i.nft])
53-
let vaults = Object.values(vaultKeys)
32+
33+
const vaults = await api.call({ abi: 'function vaults() view returns (address[])', target: registry })
5434
const tokens = await api.multiCall({ abi: 'function vaultTokens() view returns (address[])', calls: vaults })
5535
const bals = await api.multiCall({ abi: 'function tvl() view returns (uint256[] minTokenAmounts, uint256[] maxTokenAmounts)', calls: vaults, permitFailure: true })
5636
tokens.forEach((tokens, i) => {
5737
if (!bals[i]) return;
5838
let balsInner = bals[i].minTokenAmounts
5939
tokens.forEach((v, i) => sdk.util.sumSingleBalance(balances, v, balsInner[i], api.chain))
6040
})
41+
6142
return balances
6243
}
6344
}

projects/alterscope/index.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,23 @@ const configs = {
88
'0x0d8249DD621fB1c386A7A7A949504035Dd3436A3',
99
],
1010
},
11+
starknet: {
12+
vesu: [
13+
'0x7bafdbd2939cc3f3526c587cb0092c0d9a93b07b9ced517873f7f6bf6c65563',
14+
'0x27f2bb7fb0e232befc5aa865ee27ef82839d5fad3e6ec1de598d0fab438cb56',
15+
'0x5c678347b60b99b72f245399ba27900b5fc126af11f6637c04a193d508dda26',
16+
'0x2906e07881acceff9e4ae4d9dacbcd4239217e5114001844529176e1f0982ec',
17+
],
18+
},
1119
}
1220
}
1321

14-
module.exports = getCuratorExport(configs)
22+
module.exports = {
23+
...getCuratorExport(configs),
24+
25+
// starknet doesn't support historical queries
26+
timetravel: false,
27+
hallmarks: [
28+
['2025-06-01', "Start tracking vaults on starknet"],
29+
]
30+
}

projects/catex/index.js

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,40 @@
1-
const { sumTokens2 } = require('../helper/unwrapLPs')
21
const { get } = require('../helper/http')
32

43
const STRATEGIES_URL = 'https://raw.githubusercontent.com/Lynexfi/lynex-lists/main/strategies/main.json'
54

6-
async function getCatexPools() {
5+
async function getCatexPools(chainId) {
76
const data = await get(STRATEGIES_URL)
8-
// Get only Polygon (137) strategies
9-
const polygonStrategies = data['137'] || []
10-
// Filter for uniV4 strategies only since Catex only manages V4 pools
11-
return polygonStrategies
7+
const strategies = data[chainId] || []
8+
return strategies
129
.filter(strategy => strategy.variant === 'uniV4')
1310
.map(strategy => strategy.address)
1411
}
1512

13+
async function tvlForChain(api, chainId) {
14+
const CATEX_POOLS = await getCatexPools(chainId)
15+
if (!CATEX_POOLS.length) return {}
16+
17+
const token0s = await api.multiCall({ abi: 'address:token0', calls: CATEX_POOLS })
18+
const token1s = await api.multiCall({ abi: 'address:token1', calls: CATEX_POOLS })
19+
const totalAmounts = await api.multiCall({
20+
abi: 'function getTotalAmounts() view returns (uint256 total0, uint256 total1, uint256 totalFee0, uint256 totalFee1)',
21+
calls: CATEX_POOLS,
22+
})
23+
24+
totalAmounts.forEach((amounts, i) => {
25+
api.add(token0s[i], amounts.total0)
26+
api.add(token1s[i], amounts.total1)
27+
})
28+
29+
return api.getBalances()
30+
}
31+
1632
module.exports = {
17-
methodology: 'TVL counts the tokens locked in Gamma ALM vaults that Catex manages on top of Uniswap V4',
33+
methodology: 'TVL counts the tokens locked in ALM vaults that Catex manages on top of Uniswap V4',
1834
start: 69453847,
19-
polygon: {
20-
tvl: async (api) => {
21-
const CATEX_POOLS = await getCatexPools()
22-
23-
// Get token addresses for each vault
24-
const token0s = await api.multiCall({ abi: 'address:token0', calls: CATEX_POOLS })
25-
const token1s = await api.multiCall({ abi: 'address:token1', calls: CATEX_POOLS })
26-
27-
// Get total amounts including fees for each vault
28-
const totalAmounts = await api.multiCall({
29-
abi: 'function getTotalAmounts() view returns (uint256 total0, uint256 total1, uint256 totalFee0, uint256 totalFee1)',
30-
calls: CATEX_POOLS
31-
})
32-
33-
// Add balances for each vault
34-
totalAmounts.forEach((amounts, i) => {
35-
// Add token0 total (including fees)
36-
api.add(token0s[i], amounts.total0)
37-
// Add token1 total (including fees)
38-
api.add(token1s[i], amounts.total1)
39-
})
40-
41-
return api.getBalances()
42-
}
43-
}
35+
polygon: { tvl: (api) => tvlForChain(api, '137') },
36+
unichain: { tvl: (api) => tvlForChain(api, '130') },
37+
hallmarks: [
38+
[1748451600, "Catex migrated from Polygon to Unichain"],
39+
],
4440
}

projects/cian-curating/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const { getCuratorExport } = require("../helper/curators");
2+
3+
const configs = {
4+
methodology: 'Count all assets are deposited in all vaults curated by CIAN Protocol.',
5+
blockchains: {
6+
ethereum: {
7+
turtleclub_erc4626: [
8+
'0x0d1862e73a1430A5FD3245B47859c1BEcD6f3A1D',
9+
'0x2B11527e1fab84a5382D20efD198BF3d332f7E73',
10+
'0x65939777a9dC5A370707bb6b44b1ad0BC9e2D8a4',
11+
'0x34d16e4fB8757A88D986f9EfE2484F0badBF22C1',
12+
'0x0982eB22086183bF10acd2991A2dBeD1e3B9Ac2A',
13+
'0x76f31800eFdE39A5f98189447c7a514d974f4364',
14+
'0xd72c3a44b51C8D6631C004ecf3A318b9D2c58F80',
15+
'0x6945f516413cB2d7311297e8A39E7D004dEB5566',
16+
],
17+
},
18+
}
19+
}
20+
21+
module.exports = getCuratorExport(configs)

projects/credbull/index.js

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
const ADDRESSES = require('../helper/coreAssets.json')
22
const { getConfig } = require('../helper/cache');
3-
const {api} = require("@defillama/sdk");
3+
4+
const { getFixBalances } = require('../helper/portedTokens');
45

56
const addresses = {
67
arbitrum: {
78
cbl: "0xD6b3d81868770083307840F513A3491960b95cb6",
89
cblStakingV2: "0xc0C1DaA773570C041c47cE12c397AdDFD6B7403F",
910
},
10-
plume: { // legacy plume (ETH Gas)
11-
v2Vaults: ["0x2b9d2023DbF3c7473f1cec42F78713d09DdC9FBF"] // liquidStone X Plume
12-
},
1311
plume_mainnet: { // plume ($PLUME gas)
1412
v2Vaults: ["0x577349C99830D3c078034087A532581EF5381A08"] // liquidStone X Plume
1513
},
@@ -30,15 +28,6 @@ const vaultStablecoins = [
3028
ADDRESSES.polygon.USDT,
3129
];
3230

33-
function normalizeToken(chain, token) {
34-
const map = {
35-
'plume_mainnet': {
36-
'0x78add880a697070c1e765ac44d65323a0dcce913': ADDRESSES.plume_mainnet.USDC_e,
37-
},
38-
};
39-
return map[chain]?.[token.toLowerCase()] || token;
40-
}
41-
4231
async function includeStablecoins(api, vaultAddresses) {
4332
await Promise.all(
4433
vaultStablecoins.map(token => handleStablecoinBalance(api, vaultAddresses, token))
@@ -63,11 +52,15 @@ async function handleStablecoinBalance(api, vaultAddresses, erc20address, isIncl
6352

6453
// Credbull DeFi Vaults v1 TVL (6 or 12 month fixed APY)
6554
async function tvl(api) {
66-
let vaults = await getConfig('credbull', "https://incredbull.io/api/vaults")
67-
vaults = vaults[api.chain]
68-
const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults })
55+
const vaults = await getVaultsForChain(api.chain);
56+
if (vaults.length === 0) return; // no vaults for this chain, return early
57+
58+
const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults });
6959

70-
return api.sumTokens({ tokensAndOwners2: [tokens, vaults] })
60+
await api.sumTokens({ tokensAndOwners2: [tokens, vaults] });
61+
62+
const fixBalances = await getFixBalances(api.chain);
63+
await fixBalances(api.getBalances());
7164
}
7265

7366
// Credbull Fund (e.g. LiquidStone Fund)
@@ -100,13 +93,16 @@ async function borrowedVaults(api) {
10093
const vaults = await getVaultsForChain(api.chain);
10194
if (vaults.length === 0) return; // no vaults for this chain, return early
10295

103-
let tokens = await api.multiCall({ abi: 'address:asset', calls: vaults });
104-
tokens = tokens.map(t => normalizeToken(api.chain, t));
96+
const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults });
10597

10698
const bals = await api.multiCall({ abi: 'address:totalAssets', calls: vaults })
10799
api.add(tokens, bals)
108100
const tBals = (await api.multiCall({ abi: 'erc20:balanceOf', calls: tokens.map((t, i) => ({ target: t, params: vaults[i] })) })).map(i => i * -1)
109101
api.add(tokens, tBals)
102+
103+
// apply fixBalances to correct token labels
104+
const fixBalances = await getFixBalances(api.chain);
105+
await fixBalances(api.getBalances());
110106
}
111107

112108
// get Credbull DeFi vaults
@@ -128,6 +124,6 @@ module.exports = {
128124
methodology: 'TVL consist of the sum of every deposit of all vaults for a given asset.',
129125
arbitrum: { tvl, borrowed: borrowedVaults, staking: stakedCbl },
130126
btr: { tvl, borrowed: borrowedVaults, },
131-
plume_mainnet: { borrowed: borrowedVaults},
127+
plume_mainnet: { tvl, borrowed: borrowedVaults},
132128
polygon: { borrowed: borrowedFund, tvl: polygonTvl },
133129
};

projects/d2finance/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ const config = {
3939
'0xC4fEE8c68293a63241b64e5A2EF07fcf89005dD3',
4040
],
4141
hyperliquid: [
42-
'0xf44f49E6577B3934f981C6f0629d15154d2606E6'
42+
'0xf44f49E6577B3934f981C6f0629d15154d2606E6',
43+
'0x7410E69958a8ECE2A51C231C8528513d4d668C7a',
44+
'0xade27c7dec9211973278876f3819aedc28cd50ca'
4345
]
4446
}
4547

projects/fiva/index.js

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,77 @@ const { sumTokens} = require("../helper/chain/ton");
22
const ADDRESSES = require("../helper/coreAssets.json");
33
const plimit = require("p-limit");
44
const { call } = require('../helper/chain/ton');
5+
const { sleep } = require('../helper/utils');
56

67
const tsTON6mSyMinter = "EQAxGi9Al7hamLAORroxGkvfap6knGyzI50ThkP3CLPLTtOZ"
78
const USDTSlpSyMinter = "EQA0Pobx0rXc7MlfXvUAZlC_U4MRGJ4FKGq79dHbBJ7RsuyB"
89
const NOTSlpSyMinter = "EQD5A2ygwSgAXXTqI-OkAOY72bXn8-mRgE9wOEFLKgu6ifbD"
910
const TONSlpSyMinter = "EQB9nQdgwdaTXG6F7mDEErPuuJza6lmCfQjun-PXK3iJXm2h"
1011

11-
1212
const syEvaaMinter = "EQDi9blCcyT-k8iMpFMYY0t7mHVyiCB50ZsRgyUECJDuGvIl" // Evaa USDT (maturity 2025-06-01)
1313

14+
// i2 pools
15+
const USDTSlpSyMinter01Sep2025 = "EQDLqPppdVfv4bVqV6bpCYwmDUVCsem2LV5zda3fMIKgCxkH"
16+
const TONSlpSyMinter01Sep2025 = "EQBeLuWFjniPGnAyy7gVKJkA1mXptxP-dgBswKIY5su6NHFd"
17+
const USDe01Sep2025 = "EQDafE9flDXaRCnhrprgPj_sJNJb502Dov1GDruIRjarHscs"
18+
const tsUSDe01Sep2025 = "EQC57U5O4_OGLSEgX498PpmNqSYzcXx63wvOdtkCoe5LHcfo"
19+
20+
const syEvaaMinter01Sep2025 = "EQBY5JE96x_U5fSSsAzBj8d-_ZbK-5AihJ2rzjTZAtNqsntL"
21+
1422
const indexPrecision = 10 ** 6
1523

1624
const _rateLimited = plimit(1)
1725
const rateLimited = fn => (...args) => _rateLimited(() => fn(...args))
18-
const getEVAASuppliedUSDT = rateLimited(getSuppliedToEVAAJettons);
26+
const rateLimitedCall = rateLimited(call);
1927

20-
async function getSuppliedToEVAAJettons(api, evaaSyMinter) {
21-
const suppliedUSDTToEvaa = await call({
22-
target: evaaSyMinter,
23-
abi: 'get_total_evaa_supplied',
24-
params: []
25-
});
28+
async function getSuppliedToEVAAJettons(api, evaaSyMinters) {
29+
// Handle both single address and array of addresses
30+
const minters = Array.isArray(evaaSyMinters) ? evaaSyMinters : [evaaSyMinters];
31+
32+
let totalAdjustedUSDT = 0;
33+
34+
for (const evaaSyMinter of minters) {
35+
const suppliedUSDTToEvaa = await rateLimitedCall({
36+
target: evaaSyMinter,
37+
abi: 'get_total_evaa_supplied',
38+
params: []
39+
});
2640

27-
const indexData = await call({
28-
target: evaaSyMinter,
29-
abi: 'get_index',
30-
params: []
31-
});
41+
await sleep(1000 * (2 * Math.random() + 3)); // 3-5 second delay
3242

33-
const adjustedUSDT = suppliedUSDTToEvaa * indexData[0] / 10 ** 3 / indexPrecision;
43+
const indexData = await rateLimitedCall({
44+
target: evaaSyMinter,
45+
abi: 'get_index',
46+
params: []
47+
});
3448

35-
api.add(ADDRESSES.ton.USDT, adjustedUSDT);
49+
const adjustedUSDT = suppliedUSDTToEvaa * indexData[0] / 10 ** 3 / indexPrecision;
50+
totalAdjustedUSDT += adjustedUSDT;
51+
52+
// Add additional delay between different addresses
53+
if (minters.length > 1) {
54+
await sleep(1000 * (Math.random() + 2)); // Additional 2-3 seconds
55+
}
56+
}
57+
api.add(ADDRESSES.ton.USDT, totalAdjustedUSDT);
3658
}
3759

3860
async function tvl(api) {
3961
// balances in the SY minter smart contracts
4062
await sumTokens({
4163
api,
42-
owners: [tsTON6mSyMinter, USDTSlpSyMinter, NOTSlpSyMinter, TONSlpSyMinter],
64+
owners: [
65+
tsTON6mSyMinter, USDTSlpSyMinter, NOTSlpSyMinter, TONSlpSyMinter,
66+
USDTSlpSyMinter01Sep2025,
67+
TONSlpSyMinter01Sep2025,
68+
USDe01Sep2025,
69+
tsUSDe01Sep2025,
70+
],
4371
tokens: [ADDRESSES.null],
4472
})
4573

4674
// Evaa tvl - balance in the EVVA protocol supplied by SY minter smartcontract
47-
await getEVAASuppliedUSDT(api, syEvaaMinter);
48-
75+
await getSuppliedToEVAAJettons(api, [syEvaaMinter, syEvaaMinter01Sep2025]);
4976
}
5077

5178
module.exports = {

0 commit comments

Comments
 (0)