DeFi Llama
Search…
⌃K

General EVM contract calls

Balance Calls

use sumTokens2 method from helper to return token balances
For example, you have a vault with USDC and ETH tokens in it in arbitrum
const { sumTokensExport, sumTokens } = require('./helper/unwrapLPs')
const owner = '0x...' // vault address
const tokens = [
'0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC
'0x0000000000000000000000000000000000000000', // ETH
]
module.exports = {
arbitrum: {
tvl: sumTokensExport({ owner, tokens })
}
}
// or
module.exports = {
arbitrum: {
tvl: async (_, _1, _2, { api }) => {
return sumTokens2({ owner, tokens, api, })
}
}
}

Custom Contract Calls

Contract calls are the most common ways of recording TVL.
const response = await api.call({<params>})
Often after a single contract call you'll also want to add the balance to your balances object, which can be easily done with sumSingleBalance.
await sdk.util.sumSingleBalance(balances, tokenAddress, balanceOfToken);
When you have lots of calls to functions with the same ABI, it's easier to use multiCall and sumMultiBalanceOf.
const tokensInacBTC = [
'0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
'0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D'
];
const acBTCTokenHolder = '0x73FddFb941c11d16C827169Bb94aCC227841C396';
const underlyingacBTC = await api.multiCall({
calls: tokensInacBTC.map(token => ({
target: token,
params: [acBTCTokenHolder]
})),
abi: 'erc20:balanceOf',
withMetadata: true,
});
sdk.util.sumMultiBalanceOf(balances, underlyingacBTC);