@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
70 lines (69 loc) • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getVault = void 0;
// Extracts vault properties from Stakewise API
async function extractVaultProperties(connector, vault) {
const vars_getVault = {
address: vault.toLowerCase()
};
const today = new Date();
const dateBeforeYesterday = new Date();
dateBeforeYesterday.setDate(dateBeforeYesterday.getDate() - 8);
today.setDate(today.getDate());
const vaultData = await connector.graphqlRequest({
type: 'graph',
op: 'Vault',
query: `
query Vault($address: ID!) {
vault(id: $address) {
address: id
performance: score
apy
admin
isErc20
imageUrl
capacity
mevEscrow
isPrivate
createdAt
mevEscrow
tokenName
feePercent
totalAssets
isBlocklist
displayName
description
whitelister
tokenSymbol
feeRecipient
blocklistCount
whitelistCount
blocklistManager
}
}
`,
variables: vars_getVault
});
if (!vaultData.data.vault) {
throw new Error(`Vault data is missing the vault field`);
}
return { vaultData: vaultData.data };
}
// Get latest balance and cached properties
async function extractVaultDetails(connector, vault) {
const vaultProperties = await extractVaultProperties(connector, vault);
const vaultData = vaultProperties.vaultData;
return {
address: vault,
name: vaultData.vault.displayName,
description: vaultData.vault.description,
logoUrl: vaultData.vault.imageUrl,
tvl: BigInt(vaultData.vault.totalAssets).toString(),
apy: vaultData.vault.apy > 0 ? vaultData.vault.apy : '0'
};
}
async function getVault(params) {
const { connector, vault } = params;
return extractVaultDetails(connector, vault);
}
exports.getVault = getVault;