From c988e2728a783c38fc9e63ac10712cf127d878fc Mon Sep 17 00:00:00 2001 From: Christopher Cali Date: Wed, 25 Oct 2023 10:14:57 -0400 Subject: [PATCH] Add basic withdrawal functionality to Staking component --- apps/web/src/composables/operators.ts | 2 +- apps/web/src/composables/staking.ts | 5 +- .../src/pages/overview/components/Staking.vue | 113 ++++++++++++------ 3 files changed, 78 insertions(+), 42 deletions(-) diff --git a/apps/web/src/composables/operators.ts b/apps/web/src/composables/operators.ts index aa7803311..7463fb75a 100644 --- a/apps/web/src/composables/operators.ts +++ b/apps/web/src/composables/operators.ts @@ -62,7 +62,7 @@ export default function useOperators() { async function getUserOperators(): Promise { const userAddresses = user.value?.accounts.map((account: Account) => account.address) as string[] - + console.log('ethereumUrl :>> ', ethereumUrl) const scanner = new Scanner({ ethereumUrl, ssvNetworkAddress, diff --git a/apps/web/src/composables/staking.ts b/apps/web/src/composables/staking.ts index 6b03fbfa6..3fb314812 100644 --- a/apps/web/src/composables/staking.ts +++ b/apps/web/src/composables/staking.ts @@ -105,8 +105,9 @@ export default function useStaking() { const managerSigner = (manager as CasimirManager).connect(signer as ethers.Signer) const value = ethers.utils.parseEther(amount) // const withdrawableBalance = await (manager as CasimirManager).getWithdrawableBalance() - const result = await managerSigner.requestWithdrawal(value) - return await result.wait() + const withdrawableBalance = await managerSigner.getBufferedBalance() + console.log('withdrawableBalance :>> ', withdrawableBalance) + return await managerSigner.requestWithdrawal(value) } return { diff --git a/apps/web/src/pages/overview/components/Staking.vue b/apps/web/src/pages/overview/components/Staking.vue index ee5218187..7a596720c 100644 --- a/apps/web/src/pages/overview/components/Staking.vue +++ b/apps/web/src/pages/overview/components/Staking.vue @@ -11,7 +11,7 @@ import confetti from 'canvas-confetti' import TermsOfService from '@/components/TermsOfService.vue' -const { stakingComposableInitialized, deposit, getDepositFees, getUserStake, initializeStakingComposable } = useStaking() +const { stakingComposableInitialized, deposit, initializeStakingComposable, withdraw } = useStaking() const { getEthersBalance } = useEthers() const { convertString } = useFormat() const { getCurrentPrice } = usePrice() @@ -281,20 +281,77 @@ const handleDeposit = async () => { // currentUserStake.value = await getUserStake(selectedWalletAddress.value as string) } +const handleWithdraw = async () => { + stakeButtonText.value = 'Withdrawing...' + + // const activeAddress = await detectActiveWalletAddress(selectedStakingProvider.value) + // if (activeAddress !== selectedWalletAddress.value) { + // formattedAmountToStake.value = '' + // return alert(`The account you selected is not the same as the one that is active in your ${selectedStakingProvider.value} wallet. Please open your browser extension and select the account that you want to log in with.`) + // } + + const result = await withdraw({ + amount: formattedAmountToStake.value, + walletProvider: selectedStakingProvider.value, + type: stakeType.value + }) + + if (!result) stakeButtonText.value = 'Failed!' + stakeButtonText.value = 'Withdrawn!' + + setTimeout(() =>{ + stakeButtonText.value = 'Withdraw' + formattedAmountToStake.value = '' + }, 1000) + + if (result) { + const waitResponse = await result.wait(1) + eigenIsToggled.value = false + addressBalance.value = (Math.round(await getEthersBalance(user.value?.address as string) * 100) / 100) + ' ETH' + if (waitResponse){ + alert('Your Stake Has Been Withdrawn!') + } else { + alert('Your Stake Action Has Failed, Please Try Again Later!') + } + } + + // currentUserStake.value = await getUserStake(selectedWalletAddress.value as string) +} + function setStakeOrWithdraw(option: 'stake' | 'withdraw') { stakeOrWithdraw.value = option + formattedAmountToStake.value = '' + stakeButtonText.value = option === 'stake' ? 'Stake' : 'Withdraw' } - -