Skip to content

Commit 7bf2c99

Browse files
authored
Gauntlet aera v3 tvl update (DefiLlama#15363)
1 parent e8c8063 commit 7bf2c99

File tree

4 files changed

+74
-199
lines changed

4 files changed

+74
-199
lines changed

projects/aera-v3/contracts.js

Lines changed: 23 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -2,92 +2,42 @@ const { ethers } = require("ethers");
22

33
const topics = {
44
MultiDepositorVault_VaultCreated: ethers.id("VaultCreated(address,address,address,(string,string),(address,address,address),address,string)"),
5-
BaseVault_VaultCreated: ethers.id("VaultCreated(address,address,address,string)"),
65
SingleDepositorVault_VaultCreated: ethers.id("VaultCreated(address,address,address,(string,string),(address,address,address),address,string)"),
7-
MetaMorpho_CreateMetaMorpho: ethers.id("CreateMetaMorpho(address indexed,address indexed,address,uint256,address indexed,string,string,bytes32)"),
86
}
97
const eventAbis = {
108
MultiDepositorVault_VaultCreated: 'event VaultCreated(address indexed vault, address indexed owner, address hooks, (string name, string symbol) erc20Params, (address feeCalculator, address feeToken, address feeRecipient) feeVaultParams, address beforeTransferHook, string description)',
11-
BaseVault_VaultCreated: 'event VaultCreated(address indexed vault, address indexed owner, address submitHooks, string description)',
129
SingleDepositorVault_VaultCreated: 'event VaultCreated(address indexed vault, address indexed owner, address submitHooks, address feeToken, address feeCalculator, address feeRecipient, string description)',
13-
MetaMorpho_CreateMetaMorpho: 'event CreateMetaMorpho(address indexed metaMorpho, address indexed caller, address initialOwner, uint256 initialTimelock, address indexed asset, string name, string symbol, bytes32 salt)',
1410
}
1511

1612
module.exports = {
1713
ethereum: {
1814
fromBlock: 22583788,
19-
morphoBlue: '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb',
20-
metaMorphoFactories: [
21-
{
22-
address: '0x1897A8997241C1cD4bD0698647e4EB7213535c24',
23-
fromBlock: 21439510,
24-
eventAbi: eventAbis.MetaMorpho_CreateMetaMorpho,
25-
topic: topics.MetaMorpho_CreateMetaMorpho
26-
},
27-
{
28-
address: '0xa9c3d3a366466fa809d1ae982fb2c46e5fc41101',
29-
fromBlock: 18925584,
30-
eventAbi: eventAbis.MetaMorpho_CreateMetaMorpho,
31-
topic: topics.MetaMorpho_CreateMetaMorpho
32-
}
33-
],
34-
vaultFactories: {
35-
multiDepositorVaultFactory: {
36-
address: '0x29722cC9a1cACff4a15914F9bC274B46F3b90B4F',
37-
fromBlock: 22583788,
38-
eventAbi: eventAbis.MultiDepositorVault_VaultCreated,
39-
topics: [topics.MultiDepositorVault_VaultCreated]
40-
},
41-
baseVaultFactory: {
42-
address: '0x1A8E10A9503e747Aeb81DA5941bCDa6C6a9741B9',
43-
fromBlock: 22583788,
44-
eventAbi: eventAbis.BaseVault_VaultCreated,
45-
topics: [topics.BaseVault_VaultCreated]
46-
},
47-
singleDepositorVaultFactory: {
48-
address: '0x8f1FdB45160234d6E7e3653F5Af8e09A2Ce25AEb',
49-
fromBlock: 22584116,
50-
eventAbi: eventAbis.SingleDepositorVault_VaultCreated,
51-
topics: [topics.SingleDepositorVault_VaultCreated]
52-
},
53-
},
15+
multiDepositorVaultFactory: {
16+
address: '0x29722cC9a1cACff4a15914F9bC274B46F3b90B4F',
17+
fromBlock: 22583788,
18+
eventAbi: eventAbis.MultiDepositorVault_VaultCreated,
19+
topics: [topics.MultiDepositorVault_VaultCreated]
20+
},
21+
singleDepositorVaultFactory: {
22+
address: '0x8f1FdB45160234d6E7e3653F5Af8e09A2Ce25AEb',
23+
fromBlock: 22584116,
24+
eventAbi: eventAbis.SingleDepositorVault_VaultCreated,
25+
topics: [topics.SingleDepositorVault_VaultCreated]
26+
},
5427
},
5528
base: {
5629
fromBlock: 30834355,
57-
morphoBlue: '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb',
58-
metaMorphoFactories: [
59-
{
60-
address: '0xFf62A7c278C62eD665133147129245053Bbf5918',
61-
fromBlock: 23928808,
62-
eventAbi: eventAbis.MetaMorpho_CreateMetaMorpho,
63-
topic: topics.MetaMorpho_CreateMetaMorpho
64-
},
65-
{
66-
address: '0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101',
67-
fromBlock: 13978134,
68-
eventAbi: eventAbis.MetaMorpho_CreateMetaMorpho,
69-
topic: topics.MetaMorpho_CreateMetaMorpho
70-
}
71-
],
72-
vaultFactories: {
73-
multiDepositorVaultFactory: {
74-
address: '0x29722cC9a1cACff4a15914F9bC274B46F3b90B4F',
75-
fromBlock: 30834355,
76-
eventAbi: eventAbis.MultiDepositorVault_VaultCreated,
77-
topics: [topics.MultiDepositorVault_VaultCreated]
78-
},
79-
baseVaultFactory: {
80-
address: '0x1A8E10A9503e747Aeb81DA5941bCDa6C6a9741B9',
81-
fromBlock: 30834356,
82-
eventAbi: eventAbis.BaseVault_VaultCreated,
83-
topics: [topics.BaseVault_VaultCreated]
84-
},
85-
singleDepositorVaultFactory: {
86-
address: '0x8f1FdB45160234d6E7e3653F5Af8e09A2Ce25AEb',
87-
fromBlock: 30834356,
88-
eventAbi: eventAbis.SingleDepositorVault_VaultCreated,
89-
topics: [topics.SingleDepositorVault_VaultCreated]
90-
},
30+
multiDepositorVaultFactory: {
31+
address: '0x29722cC9a1cACff4a15914F9bC274B46F3b90B4F',
32+
fromBlock: 30834355,
33+
eventAbi: eventAbis.MultiDepositorVault_VaultCreated,
34+
topics: [topics.MultiDepositorVault_VaultCreated]
35+
},
36+
singleDepositorVaultFactory: {
37+
address: '0x8f1FdB45160234d6E7e3653F5Af8e09A2Ce25AEb',
38+
fromBlock: 30834356,
39+
eventAbi: eventAbis.SingleDepositorVault_VaultCreated,
40+
topics: [topics.SingleDepositorVault_VaultCreated]
9141
},
9242
},
9343
};

projects/aera-v3/index.js

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,44 @@
1-
const { getAeraVaults, getMorphoVaults, sumErc4626Balances } = require('./utils');
2-
const { getTokens } = require('./tokens');
3-
const { sumTokens2 } = require('../helper/unwrapLPs');
1+
const { getMultiDepositorVaults } = require('./utils');
42

53
async function tvl(api) {
6-
const aeraVaults = await getAeraVaults(api);
7-
const tokens = await getTokens(api);
8-
const morphoVaults = await getMorphoVaults(api);
9-
const erc20 = tokens.filter(token => !morphoVaults.includes(token));
10-
const morphoFiltered = tokens.filter(token => morphoVaults.includes(token));
11-
await Promise.all([
12-
sumErc4626Balances({api, owners: aeraVaults, vaults: morphoFiltered}),
13-
sumTokens2({owners: aeraVaults, tokens: erc20, api}),
14-
]);
4+
const multiDepositorVaults = await getMultiDepositorVaults(api);
5+
6+
// Compute TVL for multi depositor vaults
7+
// TODO: Add single depositor vaults
8+
await Promise.all(multiDepositorVaults.map(async (vault) => {
9+
const [totalSupply, feeCalculator, decimals ] = await Promise.all([
10+
api.call({
11+
abi: 'function totalSupply() view returns (uint256)',
12+
target: vault,
13+
}),
14+
api.call({
15+
abi: 'function feeCalculator() view returns (address)',
16+
target: vault,
17+
}),
18+
api.call({
19+
abi: 'function decimals() view returns (uint8)',
20+
target: vault,
21+
}),
22+
])
23+
24+
const [numeraireToken, vaultState] = await Promise.all([
25+
api.call({
26+
abi: 'function NUMERAIRE() view returns (address)',
27+
target: feeCalculator,
28+
}),
29+
api.call({
30+
abi: 'function getVaultState(address vault) external view returns ((bool paused, uint8 maxPriceAge, uint16 minUpdateIntervalMinutes, uint16 maxPriceToleranceRatio, uint16 minPriceToleranceRatio, uint8 maxUpdateDelayDays, uint32 timestamp, uint24 accrualLag, uint128 unitPrice, uint128 highestPrice, uint128 lastTotalSupply))',
31+
target: feeCalculator,
32+
params: [vault],
33+
}),
34+
])
35+
36+
const unitPrice = vaultState[8];
37+
const numeraireBalance = totalSupply * unitPrice / 10 ** decimals;
38+
console.log(numeraireBalance.toString());
39+
40+
api.add(numeraireToken, numeraireBalance);
41+
}));
1542
}
1643

1744
module.exports = {

projects/aera-v3/tokens.js

Lines changed: 0 additions & 40 deletions
This file was deleted.

projects/aera-v3/utils.js

Lines changed: 12 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,22 @@
11
const contracts = require('./contracts');
22
const { getLogs } = require('../helper/cache/getLogs')
33

4-
async function getAeraVaults(api) {
4+
async function getMultiDepositorVaults(api) {
55
const vaults = [];
6-
await Promise.all(Object.values(contracts[api.chain].vaultFactories).map(async (factory) => {
7-
const logs = await getLogs({
8-
// skipCache: true,
9-
api,
10-
target: factory.address,
11-
topic: factory.topic,
12-
topics: factory.topics,
13-
eventAbi: factory.eventAbi,
14-
fromBlock: factory.fromBlock,
15-
onlyArgs: true,
16-
});
17-
vaults.push(...logs.map(x => x.vault))
18-
}));
19-
return vaults;
20-
}
21-
22-
async function getMorphoVaults(api) {
23-
const vaults = [];
24-
await Promise.all(contracts[api.chain].metaMorphoFactories.map(async (factory) => {
6+
const factory = contracts[api.chain].multiDepositorVaultFactory;
257
const logs = await getLogs({
26-
// skipCache: true,
27-
api,
28-
target: factory.address,
29-
topic: factory.topic,
30-
topics: factory.topics,
31-
eventAbi: factory.eventAbi,
32-
fromBlock: factory.fromBlock,
33-
onlyArgs: true,
34-
});
35-
vaults.push(...logs.map(x => x.metaMorpho));
36-
}));
37-
return vaults;
38-
}
39-
40-
async function sumErc4626Balances({api, owners, vaults}) {
41-
// vaults = vaults.filter(vault => vault !== '0xc582F04d8a82795aa2Ff9c8bb4c1c889fe7b754e');
42-
const assets = await api.multiCall({
43-
calls: vaults.map(vault => ({
44-
target: vault,
45-
params: []
46-
})),
47-
abi: 'address:asset',
48-
withMetadata: true,
49-
});
50-
51-
const vaultsToAssets = vaults.reduce((acc, vault, index) => {
52-
acc[vault] = assets[index].output;
53-
return acc;
54-
}, {});
55-
56-
const vaultsAndOwners = vaults.flatMap((vault, index) =>
57-
owners.map(owner => ({
58-
target: vault,
59-
params: [owner],
60-
})));
61-
62-
const shares = await api.multiCall({
63-
calls: vaultsAndOwners,
64-
abi: 'function balanceOf(address) view returns (uint256)',
8+
api,
9+
target: factory.address,
10+
topic: factory.topic,
11+
topics: factory.topics,
12+
eventAbi: factory.eventAbi,
13+
fromBlock: factory.fromBlock,
14+
onlyArgs: true,
6515
});
66-
const balances = await api.multiCall({
67-
calls: shares.map((share, index) => ({
68-
target: vaultsAndOwners[index].target,
69-
params: [share],
70-
})),
71-
abi: 'function convertToAssets(uint256) view returns (uint256)',
72-
});
73-
const assetsForBalances = vaultsAndOwners.map((vault) => (vaultsToAssets[vault.target]));
74-
await api.addTokens(
75-
assetsForBalances,
76-
balances
77-
);
16+
vaults.push(...logs.map(x => x.vault))
17+
return vaults;
7818
}
7919

8020
module.exports = {
81-
getAeraVaults,
82-
getMorphoVaults,
83-
sumErc4626Balances,
21+
getMultiDepositorVaults,
8422
};

0 commit comments

Comments
 (0)