diff --git a/dapp/src/components/Footer.tsx b/dapp/src/components/Footer.tsx index 730a3626b..1a0222010 100644 --- a/dapp/src/components/Footer.tsx +++ b/dapp/src/components/Footer.tsx @@ -29,10 +29,6 @@ const NAVIGATION: FooterListItem[] = [ children: "FAQ", href: externalHref.FAQ, }, - { - children: "Blog", - href: externalHref.BLOG, - }, { children: "Discord", href: externalHref.DISCORD, diff --git a/dapp/src/components/MidasVaultDetails.tsx b/dapp/src/components/MidasVaultDetails.tsx index 5173980c1..15fecc38b 100644 --- a/dapp/src/components/MidasVaultDetails.tsx +++ b/dapp/src/components/MidasVaultDetails.tsx @@ -1,6 +1,6 @@ import React from "react" import TbtcIcon from "#/assets/icons/TbtcIcon" -import { externalHref, transparency, vaults } from "#/constants" +import { externalHref, transparency } from "#/constants" import { addressUtils } from "#/utils" import { Button, Icon, Link, Text } from "@chakra-ui/react" import { IconArrowUpRight } from "@tabler/icons-react" @@ -15,46 +15,38 @@ import DeBankLink from "./shared/DeBankLink" export default function MidasVaultDetailsDescription() { return ( <> - This BTC-neutral vault generates yield from multiple sources: DeFi - (liquidity provision + delta-neutral strategies), options premia, and BTC - staking (Starknet).{" "} + This vault holds tBTC prior to the deployment to vetted strategies.{" "} Midas {" "} - provides algorithmic infrastructure and 24/7 portfolio monitoring. Risk - and strategy management are handled by{" "} - - Re7 Labs - - , the innovation arm of Re7 Capital and creators of the Re7 DeFi Ratings - framework. Risk parameters for the vault have been reviewed and approved - by the Acre Security Council, following the{" "} - - Acre Deployment Policy - - . A protocol fee of 20% on earned rewards will go to the Acre DAO and its - partners. Deposits and withdrawals are always under your direct control, - and all deployments, rewards, and redemptions are fully on-chain and - auditable. + is the infrastructure provider and reviews all deposits and redemptions + for accounting, security and additional infrastructure. The tBTC is ready + to request redeem from the Midas vault at any time with approximately 72 + hour cool down time. If redeeming back to Bitcoin, there is a 0.20% fee + from the Threshold Network bridge. > ) } +function AddressValue({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ) +} + export function getMidasVaultDetails({ depositFeePercentage, withdrawalFeePercentage, @@ -67,7 +59,7 @@ export function getMidasVaultDetails({ vaultTvlInUsd: number }) { return { - vaultName: "BTC-Neutral Blended Yield", + vaultName: "Midas acreBTC (macreBTC) Vault", description: , icon: TbtcIcon, sections: [ @@ -77,10 +69,10 @@ export function getMidasVaultDetails({ tooltip: "Annual Percentage Yield (APY) is the annual rate of return earned on an investment.", items: [ - { label: "Gross Annual", value: "4% (est.)" }, - { label: "Net Annual", value: "3% (est.)" }, - { label: "Net Monthly", value: "0.87% (est.)" }, - { label: "Net Weekly", value: "0.20% (est.)" }, + { label: "Gross Annual", value: "0%" }, + { label: "Net Annual", value: "0%" }, + { label: "Net Monthly", value: "0%" }, + { label: "Net Weekly", value: "0%" }, ], }, { @@ -132,81 +124,46 @@ export function getMidasVaultDetails({ label: "Transparency", items: [ { - label: "BTC-Neutral Blended Yield Vault", + label: "Available BTC (tBTC) Liquidity", value: ( - - - {addressUtils.truncateAddress( - vaults.VAULT_PROVIDERS.tbtc.address, - )} - - - - ), - }, - { - label: "Assets to be Deployed", - value: ( - - + + {addressUtils.truncateAddress( - transparency.ASSETS_TO_BE_DEPLOYED, + transparency.AVAILABLE_LIQUIDITY_BUFFER, )} - + ), }, { - label: "Onchain Wallets", + label: "AcreBTC", value: ( - - - {addressUtils.truncateAddress(transparency.ONCHAIN_WALLETS)} - + + + {addressUtils.truncateAddress(transparency.ACREBTC_TOKEN)} + - + ), }, { - label: "Available Liquidity Buffer", + label: "Withdrawal Queue", value: ( - - - {addressUtils.truncateAddress( - transparency.AVAILABLE_LIQUIDITY_BUFFER, - )} - + + + {addressUtils.truncateAddress(transparency.WITHDRAWAL_QUEUE)} + - + ), }, ], @@ -215,22 +172,7 @@ export function getMidasVaultDetails({ sectionKey: "misc", items: [ { - label: "Risk Manager", - value: ( - } - href={externalHref.RE7} - isExternal - > - Re7 Labs - - ), - }, - { - label: "Vault Infrastructure Provider", + label: "Infrastructure Provider", value: ( + + + + + Attention: Deposits Paused and Vault Upgrade Scheduled for Fall 2026. + Withdrawals Remain Live. + + + + ) +} diff --git a/dapp/src/components/VaultDetailsModal.tsx b/dapp/src/components/VaultDetailsModal.tsx index e3fd2fae6..f74840e48 100644 --- a/dapp/src/components/VaultDetailsModal.tsx +++ b/dapp/src/components/VaultDetailsModal.tsx @@ -162,10 +162,7 @@ export function VaultDetailsModalBase({ - - No centralized custodian. All on-chain. Rewards auto-compound to - Bitcoin every ~14 days. - + No centralized custodian. All on-chain. > diff --git a/dapp/src/components/Vaults.tsx b/dapp/src/components/Vaults.tsx index 48d6d85aa..22ba27c7a 100644 --- a/dapp/src/components/Vaults.tsx +++ b/dapp/src/components/Vaults.tsx @@ -35,8 +35,6 @@ import { IconExclamationCircle, IconRefresh, } from "@tabler/icons-react" -import { getMidasVaultDetails } from "./MidasVaultDetails" -import { VaultDetails } from "./VaultDetailsModal" const { formatNumberToCompactString, getPercentValue } = numbersUtils @@ -47,7 +45,6 @@ type VaultItem = { tvl: number tvlCap: number curator: keyof typeof vaults.VAULT_CURATORS - details: VaultDetails } type VaultsRootProps = CardProps @@ -77,7 +74,7 @@ function VaultsRoot(props: VaultsRootProps) { Portfolio Weight NET APY TVL - Risk Manager + Infrastructure Provider @@ -152,7 +149,7 @@ function VaultTableRow({ vault }: { vault: VaultItem }) { {portfolioWeightPercentage}% - {aprPercentage}% (est.) + {aprPercentage}% {formattedTvl} @@ -192,8 +189,6 @@ function VaultTableRow({ vault }: { vault: VaultItem }) { function Vaults(props: VaultsRootProps) { const statistics = useStatistics() - const { data: depositFeePercentage } = useDepositFeePercentage() - const { data: withdrawalFeePercentage } = useWithdrawalFeePercentage() const handleRefetch = () => logPromiseFailure(statistics.refetch()) @@ -246,16 +241,10 @@ function Vaults(props: VaultsRootProps) { { provider: "tbtc", portfolioWeight: 1, - apr: 11, + apr: 0, tvl: statistics.data.tvl.usdValue, tvlCap: statistics.data.tvl.cap, - curator: "re7", - details: getMidasVaultDetails({ - depositFeePercentage, - withdrawalFeePercentage, - tvlCapInUsd: statistics.data.tvl.cap, - vaultTvlInUsd: statistics.data.tvl.usdValue, - }), + curator: "midas", }, ] diff --git a/dapp/src/constants/externalHref.ts b/dapp/src/constants/externalHref.ts index 8860d1471..f0260065e 100644 --- a/dapp/src/constants/externalHref.ts +++ b/dapp/src/constants/externalHref.ts @@ -3,15 +3,11 @@ export default { DOCS: "https://docs.acre.fi", FAQ: "https://docs.acre.fi/faq", CONTRACTS: "https://docs.acre.fi/contracts", - BLOG: "https://blog.acre.fi", WEBSITE: "https://acre.fi", TERMS_OF_USE: "https://acre.fi/terms-of-use", PRIVACY_POLICY: "https://acre.fi/privacy-policy", X: "https://x.com/AcreBTC", - RE7: "https://www.re7labs.xyz/", MIDAS: "https://midas.app/", - MIDAS_TEAM: "https://midas.app/team", - ACRE_DEPLOYMENT_POLICY: "https://docs.acre.fi/acre-deployment-policy", AAVE: "https://aave.com/", GIZA: "https://www.gizatech.xyz/", RE7_CAPITAL: "https://re7.capital/", diff --git a/dapp/src/constants/transparency.ts b/dapp/src/constants/transparency.ts index 87a7711b5..f503c4bf1 100644 --- a/dapp/src/constants/transparency.ts +++ b/dapp/src/constants/transparency.ts @@ -1,5 +1,5 @@ export default { - ASSETS_TO_BE_DEPLOYED: "0xbA53a278D6d68c2C8F6d600eA93581a702A6006A", - ONCHAIN_WALLETS: "0x7C819F438250CD9331D3E8EA540B72B3FF702f07", AVAILABLE_LIQUIDITY_BUFFER: "0x910CA844Fb578f670Ca5190c1cF4ab851155Bf99", + ACREBTC_TOKEN: "0x19531C886339dd28b9923d903F6B235C45396dedf", + WITHDRAWAL_QUEUE: "0xe7b8c14cA8Fb4f226C0A3e45e636b84809BB5D06", } diff --git a/dapp/src/constants/vaults.ts b/dapp/src/constants/vaults.ts index 7cfd2779b..bc7119c71 100644 --- a/dapp/src/constants/vaults.ts +++ b/dapp/src/constants/vaults.ts @@ -3,7 +3,7 @@ import externalHref from "./externalHref" const VAULT_PROVIDERS = { tbtc: { - label: "BTC-Neutral Blended Yield", + label: "tBTC Allocator Vault", icon: TbtcIcon, address: "0x6A6092d9c47A7E4C085f2ED9FD4a376124587Ae0", depositToken: "tBTC", @@ -11,9 +11,9 @@ const VAULT_PROVIDERS = { } const VAULT_CURATORS = { - re7: { - label: "Re7 Labs", - url: externalHref.RE7, + midas: { + label: "Midas", + url: externalHref.MIDAS, }, } diff --git a/dapp/src/hooks/useRegisterAcreEthereumAddressInLedgerLive.ts b/dapp/src/hooks/useRegisterAcreEthereumAddressInLedgerLive.ts index d3ca9416a..0882f1c89 100644 --- a/dapp/src/hooks/useRegisterAcreEthereumAddressInLedgerLive.ts +++ b/dapp/src/hooks/useRegisterAcreEthereumAddressInLedgerLive.ts @@ -43,7 +43,7 @@ const useRegisterAcreEthereumAddressInLedgerLive = () => { tokenTicker: TOKEN_TICKER, meta: { protocol: "Acre", - apy: "14%", + apy: "0%", }, }) }, diff --git a/dapp/src/pages/DashboardPage/AcrePointsCard/AcrePointsLabel.tsx b/dapp/src/pages/DashboardPage/AcrePointsCard/AcrePointsLabel.tsx deleted file mode 100644 index 95b4f3a0f..000000000 --- a/dapp/src/pages/DashboardPage/AcrePointsCard/AcrePointsLabel.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react" -import { HStack, Text } from "@chakra-ui/react" -import Countdown from "#/components/shared/Countdown" -import { logPromiseFailure } from "#/utils" -import { useAcrePointsData, useUserPointsData } from "#/hooks" -import LabelWrapper from "./LabelWrapper" - -export function NextDropTimestampLabel() { - const { data: acrePointsData, refetch: acrePointsDataRefetch } = - useAcrePointsData() - const { refetch: userPointsDataRefetch } = useUserPointsData() - - const handleOnCountdownEnd = () => { - logPromiseFailure(acrePointsDataRefetch()) - logPromiseFailure(userPointsDataRefetch()) - } - - if (!acrePointsData?.nextDropTimestamp) return null - - return ( - - - Next drop in - - - - ) -} - -export default function AcrePointsLabel() { - const { data } = useAcrePointsData() - - if (!data) return null - - return ( - - - - ) -} diff --git a/dapp/src/pages/DashboardPage/AcrePointsCard/UserPointsLabel.tsx b/dapp/src/pages/DashboardPage/AcrePointsCard/UserPointsLabel.tsx index 1d2a492fc..d632c67e4 100644 --- a/dapp/src/pages/DashboardPage/AcrePointsCard/UserPointsLabel.tsx +++ b/dapp/src/pages/DashboardPage/AcrePointsCard/UserPointsLabel.tsx @@ -7,7 +7,6 @@ import TooltipIcon from "#/components/shared/TooltipIcon" import useDebounce from "#/hooks/useDebounce" import { time } from "#/constants" import LabelWrapper from "./LabelWrapper" -import { NextDropTimestampLabel } from "./AcrePointsLabel" function ClaimableBalanceLabel() { const { mutate: claimPoints } = useClaimPoints() @@ -79,7 +78,6 @@ export default function UserPointsLabel() { return ( - ) diff --git a/dapp/src/pages/DashboardPage/AcrePointsCard/index.tsx b/dapp/src/pages/DashboardPage/AcrePointsCard/index.tsx index 8fc0d98cd..d6271382c 100644 --- a/dapp/src/pages/DashboardPage/AcrePointsCard/index.tsx +++ b/dapp/src/pages/DashboardPage/AcrePointsCard/index.tsx @@ -13,7 +13,6 @@ import { useAcrePointsData, useUserPointsData, useWallet } from "#/hooks" import UserDataSkeleton from "#/components/shared/UserDataSkeleton" import TooltipIcon from "#/components/shared/TooltipIcon" import acrePointsIllustrationSrc from "#/assets/images/acre-points-illustration.png" -import AcrePointsLabel from "./AcrePointsLabel" import UserPointsLabel from "./UserPointsLabel" const { numberToLocaleString } = numbersUtils @@ -40,8 +39,8 @@ export default function AcrePointsCard(props: CardProps) { @@ -58,9 +57,11 @@ export default function AcrePointsCard(props: CardProps) { - - {isConnected ? : } - + {isConnected && ( + + + + )} ) diff --git a/dapp/src/pages/DashboardPage/EstimatedAPRCard.tsx b/dapp/src/pages/DashboardPage/CurrentAPYCard.tsx similarity index 56% rename from dapp/src/pages/DashboardPage/EstimatedAPRCard.tsx rename to dapp/src/pages/DashboardPage/CurrentAPYCard.tsx index 791976b2e..091922aba 100644 --- a/dapp/src/pages/DashboardPage/EstimatedAPRCard.tsx +++ b/dapp/src/pages/DashboardPage/CurrentAPYCard.tsx @@ -4,21 +4,21 @@ import FeaturedMetricsCard, { } from "#/components/shared/FeaturedMetricsCard" import { IconTrendingUp } from "@tabler/icons-react" -type EstimatedAPRCardProps = Omit< +type CurrentAPYCardProps = Omit< FeaturedMetricsCardProps, "label" | "icon" | "value" | "infoContent" > -function EstimatedAPRCard(props: EstimatedAPRCardProps) { +function CurrentAPYCard(props: CurrentAPYCardProps) { return ( ) } -export default EstimatedAPRCard +export default CurrentAPYCard diff --git a/dapp/src/pages/DashboardPage/PositionDetails.tsx b/dapp/src/pages/DashboardPage/PositionDetails.tsx index 09e2c2b4d..9650a845a 100644 --- a/dapp/src/pages/DashboardPage/PositionDetails.tsx +++ b/dapp/src/pages/DashboardPage/PositionDetails.tsx @@ -3,7 +3,6 @@ import { // useActivitiesCount, useBitcoinPosition, useTransactionModal, - useStatistics, useWallet, useMobileMode, useActivities, @@ -48,10 +47,6 @@ export default function PositionDetails() { const { data: activities } = useActivities() const isMobileMode = useMobileMode() - const statistics = useStatistics() - - const { tvl } = statistics.data - const { isConnected } = useWallet() const isDisabledForMobileMode = @@ -87,17 +82,14 @@ export default function PositionDetails() { - + Deposit diff --git a/dapp/src/pages/DashboardPage/index.tsx b/dapp/src/pages/DashboardPage/index.tsx index 96c9b04f9..73378187c 100644 --- a/dapp/src/pages/DashboardPage/index.tsx +++ b/dapp/src/pages/DashboardPage/index.tsx @@ -2,22 +2,24 @@ import React from "react" import { featureFlags } from "#/constants" import { useActivities, useTriggerConnectWalletModal, useWallet } from "#/hooks" import usePositionStats from "#/hooks/usePositionStats" -import { Card, Grid, VStack } from "@chakra-ui/react" +import { Box, Card, Grid, VStack } from "@chakra-ui/react" import Vaults from "#/components/Vaults" import WithdrawalStatusBanner, { WithdrawStatus, } from "#/components/WithdrawalStatusBanner" +import ProtocolPauseBanner from "#/components/ProtocolPauseBanner" import DashboardCard from "./DashboardCard" import AcrePointsCard from "./AcrePointsCard" import AcrePointsTemplateCard from "./AcrePointsTemplateCard" import TransactionHistory from "./TransactionHistory" import BTCDepositedCard from "./BTCDepositedCard" import RewardsEarnedCard from "./RewardsEarnedCard" -import EstimatedAPRCard from "./EstimatedAPRCard" +import CurrentAPYCard from "./CurrentAPYCard" const fullWidthGridColumn = { base: "1", md: "span 3" } const grid = { + notice: fullWidthGridColumn, dashboard: { base: "1", md: "span 2" }, points: { base: "1", md: "3 / span 1" }, withdrawals: fullWidthGridColumn, @@ -60,6 +62,10 @@ export default function DashboardPage() { gridGap={{ base: 4, "2xl": 8 }} templateColumns={{ base: "1fr ", md: "repeat(3, 1fr)" }} > + + + + {featureFlags.ACRE_POINTS_ENABLED ? ( @@ -94,7 +100,7 @@ export default function DashboardPage() { isLoading={isLoading} btcAmount={data?.earned} /> - + > )} diff --git a/dapp/src/types/chain.ts b/dapp/src/types/chain.ts index 0e0c689ac..9df547759 100644 --- a/dapp/src/types/chain.ts +++ b/dapp/src/types/chain.ts @@ -1,3 +1,3 @@ export type Chain = "bitcoin" | "ethereum" -export type ExplorerDataType = "transaction" | "address" +export type ExplorerDataType = "transaction" | "address" | "token" diff --git a/dapp/src/utils/chainUtils.ts b/dapp/src/utils/chainUtils.ts index 431e19227..e403c16a0 100644 --- a/dapp/src/utils/chainUtils.ts +++ b/dapp/src/utils/chainUtils.ts @@ -6,13 +6,19 @@ import { Chain, ExplorerDataType } from "#/types" // However, it provides us with an easy way // to handle the next data for block explorer. const createBlockExplorerLink = ( - prefix: string, + rawPrefix: string, id: string, type: ExplorerDataType, ) => { + // Some explorer base URLs carry a trailing slash, which would otherwise + // produce a double slash in the resulting link. + const prefix = rawPrefix.replace(/\/+$/, "") + switch (type) { case "address": return `${prefix}/address/${id}` + case "token": + return `${prefix}/token/${id}` case "transaction": default: { return `${prefix}/tx/${id}`