Skip to content

Commit

Permalink
Add eigen contract addresses & update breakdownMetrics composable
Browse files Browse the repository at this point in the history
  • Loading branch information
ccali11 committed Oct 23, 2023
1 parent a94c4f4 commit 479f528
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 19 deletions.
39 changes: 26 additions & 13 deletions apps/web/src/composables/breakdownMetrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ const { getCurrentPrice } = usePrice()
const loadingInitializeBreakdownMetrics = ref(false)
const loadingInitializeBreakdownMetricsError = ref(false)

let manager: CasimirManager
let defaultManager: CasimirManager
let eigenManager: CasimirManager

export default function useBreakdownMetrics() {

Expand All @@ -41,15 +42,17 @@ export default function useBreakdownMetrics() {
/* Get User's Current Stake */
const addresses = (userValue.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
const currentUserStakePromises = [] as Array<Promise<ethers.BigNumber>>
addresses.forEach(address => currentUserStakePromises.push((manager as CasimirManager).getUserStake(address)))
addresses.forEach(address => currentUserStakePromises.push((defaultManager as CasimirManager).getUserStake(address)))
addresses.forEach(address => currentUserStakePromises.push((eigenManager as CasimirManager).getUserStake(address)))
const settledCurrentUserStakePromises = await Promise.allSettled(currentUserStakePromises) as Array<PromiseFulfilledResult<ethers.BigNumber>>
const currentUserStake = settledCurrentUserStakePromises.filter(result => result.status === 'fulfilled').map(result => result.value)
const currentUserStakeSum = currentUserStake.reduce((acc, curr) => acc.add(curr), ethers.BigNumber.from(0))
const currentUserStakeETH = parseFloat(ethers.utils.formatEther(currentUserStakeSum))

/* Get User's All Time Deposits and Withdrawals */
const userEventTotalsPromises = [] as Array<Promise<ContractEventsByAddress>>
addresses.forEach(address => {userEventTotalsPromises.push(getContractEventsTotalsByAddress(address))})
addresses.forEach(address => {userEventTotalsPromises.push(getContractEventsTotalsByAddress(address, defaultManager))})
addresses.forEach(address => {userEventTotalsPromises.push(getContractEventsTotalsByAddress(address, eigenManager))})
const userEventTotals = await Promise.all(userEventTotalsPromises) as Array<ContractEventsByAddress>
const userEventTotalsSum = userEventTotals.reduce((acc, curr) => {
const { StakeDeposited, WithdrawalInitiated } = curr
Expand Down Expand Up @@ -78,7 +81,7 @@ export default function useBreakdownMetrics() {
}
}

async function getContractEventsTotalsByAddress(address: string) : Promise<ContractEventsByAddress> {
async function getContractEventsTotalsByAddress(address: string, manager: CasimirManager) : Promise<ContractEventsByAddress> {
try {
const eventList = [
'StakeDeposited',
Expand Down Expand Up @@ -122,7 +125,9 @@ export default function useBreakdownMetrics() {
async function getCurrentStaked(): Promise<BreakdownAmount> {
const addresses = (userValue.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
try {
const promises = addresses.map((address) => (manager as CasimirManager).getUserStake(address))
const defaultManagerPromises = addresses.map((address) => (defaultManager as CasimirManager).getUserStake(address))
const eigenManagerPromises = addresses.map((address) => (eigenManager as CasimirManager).getUserStake(address))
const promises = [...defaultManagerPromises, ...eigenManagerPromises]
const settledPromises = await Promise.allSettled(promises) as Array<PromiseFulfilledResult<ethers.BigNumber>>
const currentStaked = settledPromises
.filter((result) => result.status === 'fulfilled')
Expand Down Expand Up @@ -201,18 +206,24 @@ export default function useBreakdownMetrics() {
function listenForContractEvents() {
stopListeningForContractEvents() // Clear old listeners
try {
(manager as CasimirManager).on('StakeDeposited', stakeDepositedListener);
(manager as CasimirManager).on('StakeRebalanced', stakeRebalancedListener);
(manager as CasimirManager).on('WithdrawalInitiated', withdrawalInitiatedListener)
(defaultManager as CasimirManager).on('StakeDeposited', stakeDepositedListener);
(defaultManager as CasimirManager).on('StakeRebalanced', stakeRebalancedListener);
(defaultManager as CasimirManager).on('WithdrawalInitiated', withdrawalInitiatedListener);
(eigenManager as CasimirManager).on('StakeDeposited', stakeDepositedListener);
(eigenManager as CasimirManager).on('StakeRebalanced', stakeRebalancedListener);
(eigenManager as CasimirManager).on('WithdrawalInitiated', withdrawalInitiatedListener)
} catch (err) {
console.log(`There was an error in listenForContractEvents: ${err}`)
}
}

function stopListeningForContractEvents() {
(manager as CasimirManager).removeListener('StakeDeposited', stakeDepositedListener);
(manager as CasimirManager).removeListener('StakeRebalanced', stakeRebalancedListener);
(manager as CasimirManager).removeListener('WithdrawalInitiated', withdrawalInitiatedListener)
(defaultManager as CasimirManager).removeListener('StakeDeposited', stakeDepositedListener);
(defaultManager as CasimirManager).removeListener('StakeRebalanced', stakeRebalancedListener);
(defaultManager as CasimirManager).removeListener('WithdrawalInitiated', withdrawalInitiatedListener);
(eigenManager as CasimirManager).removeListener('StakeDeposited', stakeDepositedListener);
(eigenManager as CasimirManager).removeListener('StakeRebalanced', stakeRebalancedListener);
(eigenManager as CasimirManager).removeListener('WithdrawalInitiated', withdrawalInitiatedListener)
}

const stakeDepositedListener = async () => await refreshBreakdown()
Expand Down Expand Up @@ -243,7 +254,8 @@ export default function useBreakdownMetrics() {

async function initializeComposable(user: UserWithAccountsAndOperators){
userValue.value = toValue(user)
manager = (await getContracts()).manager
defaultManager = (await getContracts()).defaultManager
eigenManager = (await getContracts()).eigenManager

try {
loadingInitializeBreakdownMetrics.value = true
Expand All @@ -260,7 +272,8 @@ export default function useBreakdownMetrics() {
}

async function uninitializeComposable(){
manager = (await getContracts()).manager
defaultManager = (await getContracts()).defaultManager
eigenManager = (await getContracts()).eigenManager
userValue.value = undefined
provider.removeAllListeners('block')
stopListeningForContractEvents()
Expand Down
19 changes: 13 additions & 6 deletions apps/web/src/composables/contracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,21 @@ export default function useContracts() {
const managerConfigs: ManagerConfig[] = await Promise.all((await factory.getManagerIds()).map(async (id: number) => {
return await factory.getManagerConfig(id)
}))
const manager = new ethers.Contract(managerConfigs[0].managerAddress, ICasimirManagerAbi, provider) as CasimirManager
const registry = new ethers.Contract(managerConfigs[0].registryAddress, ICasimirRegistryAbi, provider) as CasimirRegistry
const views = new ethers.Contract(managerConfigs[0].viewsAddress, ICasimirViewsAbi, provider) as CasimirViews
const defaultManager = new ethers.Contract(managerConfigs[0].managerAddress, ICasimirManagerAbi, provider) as CasimirManager
const defaultRegistry = new ethers.Contract(managerConfigs[0].registryAddress, ICasimirRegistryAbi, provider) as CasimirRegistry
const defaultViews = new ethers.Contract(managerConfigs[0].viewsAddress, ICasimirViewsAbi, provider) as CasimirViews

const eigenManager = new ethers.Contract(managerConfigs[1].managerAddress, ICasimirManagerAbi, provider) as CasimirManager
const eigenRegistry = new ethers.Contract(managerConfigs[1].registryAddress, ICasimirRegistryAbi, provider) as CasimirRegistry
const eigenViews = new ethers.Contract(managerConfigs[1].viewsAddress, ICasimirViewsAbi, provider) as CasimirViews

return {
manager,
registry,
views
defaultManager,
defaultRegistry,
defaultViews,
eigenManager,
eigenRegistry,
eigenViews
}
}

Expand Down

0 comments on commit 479f528

Please sign in to comment.