Skip to content

Commit c0c89d5

Browse files
authored
avantisfi project (#1207)
* avantisfi project * change project name
1 parent aac8a8a commit c0c89d5

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module.exports = [
2+
{
3+
"type": "function",
4+
"name": "getReserveRatio",
5+
"inputs": [{ "name": "_reserveAmount", "type": "uint256", "internalType": "uint256" }],
6+
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
7+
"stateMutability": "view"
8+
},
9+
{
10+
"type": "function",
11+
"name": "getProfitMultiplier",
12+
"inputs": [],
13+
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
14+
"stateMutability": "view"
15+
},
16+
]

src/adaptors/avantis/index.js

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const utils = require('../utils');
2+
const sdk = require('@defillama/sdk4');
3+
const abiVaultManager = require('./abiVaultManager');
4+
5+
const ADDRESSES = {
6+
base: {
7+
'AvantisJuniorTranche': '0x944766f715b51967E56aFdE5f0Aa76cEaCc9E7f9',
8+
'AvantisSeniorTranche': '0x83084cB182162473d6FEFfCd3Aa48BA55a7B66F7',
9+
'AvantisVaultManager': '0xe9fB8C70aF1b99F2Baaa07Aa926FCf3d237348DD',
10+
USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
11+
},
12+
};
13+
14+
const API_BASE = 'https://api.avantisfi.com/v1/history/vaults/apr/';
15+
16+
const main = async () => {
17+
const [
18+
jrData,
19+
srData
20+
] = await Promise.all([
21+
utils.getData(
22+
`${API_BASE}${ADDRESSES.base.AvantisJuniorTranche}/7`
23+
),
24+
utils.getData(
25+
`${API_BASE}${ADDRESSES.base.AvantisSeniorTranche}/7`
26+
),
27+
]);
28+
29+
if (jrData.success === false || srData.success === false) {
30+
throw new Error('API response is not successful');
31+
}
32+
33+
const { averageApr: jrAverageApr, averageFee: jrAverageFee } = jrData
34+
const { averageApr: srAverageApr, averageFee: srAverageFee } = srData
35+
36+
let [reserveRatio, profitMultiplier, jrTvl, srTvl] = await Promise.all([
37+
sdk.api.abi.call({
38+
target: ADDRESSES.base.AvantisVaultManager,
39+
abi: abiVaultManager.find((m) => m.name === 'getReserveRatio'),
40+
params: [0],
41+
chain: "base"
42+
}),
43+
sdk.api.abi.call({
44+
target: ADDRESSES.base.AvantisVaultManager,
45+
abi: abiVaultManager.find((m) => m.name === 'getProfitMultiplier'),
46+
chain: "base"
47+
}),
48+
sdk.api.abi.call({
49+
abi: 'erc20:balanceOf',
50+
target: ADDRESSES.base.USDC,
51+
params: [ADDRESSES.base.AvantisJuniorTranche],
52+
chain: "base"
53+
}),
54+
sdk.api.abi.call({
55+
abi: 'erc20:balanceOf',
56+
target: ADDRESSES.base.USDC,
57+
params: [ADDRESSES.base.AvantisSeniorTranche],
58+
chain: "base"
59+
}),
60+
]);
61+
62+
jrTvl = jrTvl.output / 1e6;
63+
srTvl = srTvl.output / 1e6;
64+
65+
const jrFeeSplit = parseFloat(profitMultiplier.output) * parseFloat(reserveRatio.output) / 100;
66+
67+
let adjApyJr = 0,
68+
adjApySr = 0;
69+
70+
if (jrAverageApr > 0 && jrTvl > 0) {
71+
adjApyJr = ((1 + jrAverageFee / jrTvl) ** 365 - 1) * jrFeeSplit;
72+
}
73+
74+
if (srAverageApr > 0 && srTvl > 0) {
75+
adjApySr = ((1 + srAverageFee / srTvl) ** 365 - 1) * (100 - jrFeeSplit);
76+
}
77+
78+
return [
79+
{
80+
pool: `AVANTIS-${ADDRESSES.base.AvantisJuniorTranche}-base`.toLowerCase(),
81+
chain: 'base',
82+
project: 'avantis',
83+
symbol: 'USDC',
84+
poolMeta: 'junior',
85+
tvlUsd: jrTvl,
86+
apyBase: adjApyJr,
87+
url: 'https://www.avantisfi.com/earn/junior',
88+
},
89+
{
90+
pool: `AVANTIS-${ADDRESSES.base.AvantisSeniorTranche}-base`.toLowerCase(),
91+
chain: 'base',
92+
project: 'avantis',
93+
symbol: 'USDC',
94+
poolMeta: 'senior',
95+
tvlUsd: srTvl,
96+
apyBase: adjApySr,
97+
url: 'https://www.avantisfi.com/earn/senior',
98+
},
99+
];
100+
101+
};
102+
103+
module.exports = {
104+
timetravel: false,
105+
apy: main,
106+
};

0 commit comments

Comments
 (0)