Skip to content

Commit 833f7e8

Browse files
authored
Fix reservoir doublecount (DefiLlama#17171)
1 parent 2f96a62 commit 833f7e8

File tree

2 files changed

+28
-43
lines changed

2 files changed

+28
-43
lines changed

projects/helper/unwrapLPs.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,9 @@ async function sumTokens2({
905905
resolveVlCVX = false,
906906
permitFailure = false,
907907
fetchCoValentTokens = false,
908-
tokenConfig = {},
908+
tokenConfig = {
909+
// onlyWhitelisted
910+
},
909911
sumChunkSize = undefined,
910912
uniV3ExtraConfig = {
911913
// positionIds
Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const { sumTokensExport, sumTokens2 } = require('../helper/unwrapLPs')
12
const ADDRESSES = require('../helper/coreAssets.json')
23

34
const config = {
@@ -8,29 +9,24 @@ const config = {
89
'0x9BB2c38F57883E5285b7c296c66B9eEA4769eF80',
910
'0x99A95a9E38e927486fC878f41Ff8b118Eb632b10',
1011
'0xE45321525c85fcc418C88E606B96daD8cBcc047f',
11-
'0x841DB2cA7E8A8C2fb06128e8c58AA162de0CfCbC',
12+
// '0x841DB2cA7E8A8C2fb06128e8c58AA162de0CfCbC', // duplicated in tokensAndOwners
1213
'0x99E8903bdEFB9e44cd6A24B7f6F97dDd071549bc',
13-
'0x2Adf038b67a8a29cDA82f0Eceb1fF0dba704b98d',
14+
// '0x2Adf038b67a8a29cDA82f0Eceb1fF0dba704b98d', // duplicated in tokensAndOwners
1415
'0xb82749F316CB9c06F38587aBecF3EB1bC842CC93',
1516
'0xC5deA68CCe26c014BEC516CDA70c107c534a73C4',
16-
'0x31Eae643b679A84b37E3d0B4Bd4f5dA90fB04a61'
17+
// '0x31Eae643b679A84b37E3d0B4Bd4f5dA90fB04a61', - exluded RUSD because it is project's own token
1718
],
18-
usdcHolder: '0x4809010926aec940b550D34a46A52739f996D75D',
1919
// [token, owner] pairs for direct balance queries
2020
tokensAndOwners: [
2121
['0xe0a80d35bb6618cba260120b279d357978c42bce', '0x3063C5907FAa10c01B242181Aa689bEb23D2BD65'],
2222
['0x9D39A5DE30e57443BfF2A8307A4256c8797A3497', '0x5563CDA70F7aA8b6C00C52CB3B9f0f45831a22b1'],
23-
['0xBeEf11eCb698f4B5378685C05A210bdF71093521', '0x31Eae643b679A84b37E3d0B4Bd4f5dA90fB04a61'],
23+
// ['0xBeEf11eCb698f4B5378685C05A210bdF71093521', '0x31Eae643b679A84b37E3d0B4Bd4f5dA90fB04a61'], // wrapped version of RUSD, excluded steakRUSD
2424
['0xBEeFFF209270748ddd194831b3fa287a5386f5bC', '0x841DB2cA7E8A8C2fb06128e8c58AA162de0CfCbC'],
2525
['0xA0804346780b4c2e3bE118ac957D1DB82F9d7484', '0x289C204B35859bFb924B9C0759A4FE80f610671c'],
26-
['0x777791C4d6DC2CE140D00D2828a7C93503c67777', '0x2adf038b67a8a29cda82f0eceb1ff0dba704b98d']
26+
['0x777791C4d6DC2CE140D00D2828a7C93503c67777', '0x2adf038b67a8a29cda82f0eceb1ff0dba704b98d'],
27+
['0x62C6E813b9589C3631Ba0Cdb013acdB8544038B7', '0x8d3A354f187065e0D4cEcE0C3a5886ac4eBc4903'],
28+
[ADDRESSES.ethereum.USDC, '0x4809010926aec940b550D34a46A52739f996D75D'],
2729
],
28-
// Special case: query one token but report as another
29-
specialMapping: {
30-
queryToken: '0x62C6E813b9589C3631Ba0Cdb013acdB8544038B7',
31-
queryOwner: '0x8d3A354f187065e0D4cEcE0C3a5886ac4eBc4903',
32-
reportToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3'
33-
}
3430
},
3531
plasma: {
3632
tokensAndOwners: [
@@ -51,40 +47,27 @@ const config = {
5147

5248
module.exports.ethereum = {
5349
tvl: async (api) => {
54-
const { funds, usdcHolder, tokensAndOwners, specialMapping } = config.ethereum
55-
56-
// Get underlying tokens and balances from funds
57-
const tokens = await api.multiCall({ abi: 'address:underlying', calls: funds })
58-
const bals = await api.multiCall({ abi: 'uint256:totalValue', calls: funds })
59-
const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: tokens })
60-
61-
// Adjust balances and add
62-
api.add(tokens, bals.map((v, i) => v * 10 ** (decimals[i] - 18)))
50+
const { funds, tokensAndOwners, } = config.ethereum
6351

64-
// Add USDC locked
65-
await api.sumTokens({ owner: usdcHolder, token: ADDRESSES.ethereum.USDC })
52+
const onChainDataTS = new Date('2025-11-22T00:00:00Z').getTime() / 1000
6653

67-
// Add regular token balances
68-
await api.sumTokens({ tokensAndOwners })
54+
if (api.timestamp < onChainDataTS) {
6955

70-
// Handle special mapping case
71-
const specialBalance = await api.call({
72-
abi: 'function balanceOf(address) view returns (uint256)',
73-
target: specialMapping.queryToken,
74-
params: [specialMapping.queryOwner]
75-
})
76-
api.add(specialMapping.reportToken, specialBalance)
77-
}
78-
}
56+
// Get underlying tokens and balances from funds
57+
const tokens = await api.multiCall({ abi: 'address:underlying', calls: funds })
58+
const bals = await api.multiCall({ abi: 'uint256:totalValue', calls: funds })
59+
const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: tokens })
7960

80-
module.exports.plasma = {
81-
tvl: async (api) => {
82-
await api.sumTokens({ tokensAndOwners: config.plasma.tokensAndOwners })
83-
}
84-
}
61+
// Adjust balances and add
62+
api.add(tokens, bals.map((v, i) => v * 10 ** (decimals[i] - 18)))
63+
} else {
64+
await sumTokens2({ api, owners: funds, fetchCoValentTokens: true, tokenConfig: { onlyWhitelisted: false } })
65+
}
8566

86-
module.exports.arbitrum = {
87-
tvl: async (api) => {
88-
await api.sumTokens({ tokensAndOwners: config.arbitrum.tokensAndOwners })
67+
// Add regular token balances
68+
await api.sumTokens({ tokensAndOwners })
8969
}
9070
}
71+
72+
module.exports.plasma = { tvl: sumTokensExport(config.plasma) }
73+
module.exports.arbitrum = { tvl: sumTokensExport(config.arbitrum) }

0 commit comments

Comments
 (0)