From 34ed19c68512f661df4b02b201c3d1da9aa38418 Mon Sep 17 00:00:00 2001 From: ioay Date: Tue, 5 Mar 2024 19:37:01 +0100 Subject: [PATCH 01/11] Show current position in Ledger Live dApp --- dapp/src/hooks/useBtcBalance.ts | 33 +++++++++++++++++++ dapp/src/hooks/useInitApp.ts | 2 ++ .../pages/OverviewPage/PositionDetails.tsx | 5 ++- dapp/src/store/btc/btcSelector.ts | 3 ++ dapp/src/store/btc/btcSlice.ts | 13 +++++++- dapp/src/store/middleware.ts | 4 ++- 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 dapp/src/hooks/useBtcBalance.ts diff --git a/dapp/src/hooks/useBtcBalance.ts b/dapp/src/hooks/useBtcBalance.ts new file mode 100644 index 000000000..d08e40dbe --- /dev/null +++ b/dapp/src/hooks/useBtcBalance.ts @@ -0,0 +1,33 @@ +import { useCallback, useEffect } from "react" +import { EthereumAddress } from "@acre-btc/sdk" +import { useAcreContext } from "#/acre-react/hooks" +import { logPromiseFailure } from "#/utils" +import { btcSlice } from "#/store/btc" +import { useWalletContext } from "./useWalletContext" +import { useAppDispatch } from "./store" + +export function useBtcBalance() { + const { acre, isInitialized } = useAcreContext() + const { ethAccount } = useWalletContext() + const dispatch = useAppDispatch() + + const getBtcBalance = useCallback(async () => { + if (isInitialized && ethAccount && acre) { + const chainIdentifier = EthereumAddress.from(ethAccount.address) + const sharesBalance = await acre.staking.sharesBalance(chainIdentifier) + const estimatedBitcoinBalance = + await acre.staking.estimatedBitcoinBalance(chainIdentifier) + + if (typeof sharesBalance === "bigint") + dispatch(btcSlice.actions.setSharesBalance(sharesBalance)) + if (typeof estimatedBitcoinBalance === "bigint") + dispatch( + btcSlice.actions.setEstimatedBtcBalance(estimatedBitcoinBalance), + ) + } + }, [acre, isInitialized, ethAccount, dispatch]) + + useEffect(() => { + logPromiseFailure(getBtcBalance()) + }, [getBtcBalance]) +} diff --git a/dapp/src/hooks/useInitApp.ts b/dapp/src/hooks/useInitApp.ts index bfa07283e..b31b09c14 100644 --- a/dapp/src/hooks/useInitApp.ts +++ b/dapp/src/hooks/useInitApp.ts @@ -1,6 +1,7 @@ import { useSentry } from "./sentry" import { useInitializeAcreSdk } from "./useInitializeAcreSdk" import { useFetchBTCPriceUSD } from "./useFetchBTCPriceUSD" +import { useBtcBalance } from "./useBtcBalance" export function useInitApp() { // TODO: Let's uncomment when dark mode is ready @@ -8,4 +9,5 @@ export function useInitApp() { useSentry() useInitializeAcreSdk() useFetchBTCPriceUSD() + useBtcBalance() } diff --git a/dapp/src/pages/OverviewPage/PositionDetails.tsx b/dapp/src/pages/OverviewPage/PositionDetails.tsx index afa2b3727..7ac6def38 100644 --- a/dapp/src/pages/OverviewPage/PositionDetails.tsx +++ b/dapp/src/pages/OverviewPage/PositionDetails.tsx @@ -14,8 +14,11 @@ import { TextMd } from "#/components/shared/Typography" import { Info } from "#/assets/icons" import { ACTION_FLOW_TYPES, ActionFlowType } from "#/types" import TransactionModal from "#/components/TransactionModal" +import { useAppSelector } from "#/hooks" +import { selectEstimatedBtcBalance } from "#/store/btc" export default function PositionDetails(props: CardProps) { + const estimatedBtcBalance = useAppSelector(selectEstimatedBtcBalance) const [actionFlowType, setActionFlowType] = useState< ActionFlowType | undefined >(undefined) @@ -37,7 +40,7 @@ export default function PositionDetails(props: CardProps) { + state.btc.estimatedBtcBalance +export const selectSharesBalance = (state: RootState) => state.btc.sharesBalance export const selectBtcUsdPrice = (state: RootState) => state.btc.usdPrice diff --git a/dapp/src/store/btc/btcSlice.ts b/dapp/src/store/btc/btcSlice.ts index 84468710d..49096b7af 100644 --- a/dapp/src/store/btc/btcSlice.ts +++ b/dapp/src/store/btc/btcSlice.ts @@ -2,11 +2,15 @@ import { PayloadAction, createSlice } from "@reduxjs/toolkit" import { fetchBTCPriceUSD } from "./btcThunk" type BtcState = { + estimatedBtcBalance: bigint + sharesBalance: bigint isLoadingPriceUSD: boolean usdPrice: number } const initialState: BtcState = { + estimatedBtcBalance: 0n, + sharesBalance: 0n, isLoadingPriceUSD: false, usdPrice: 0, } @@ -15,7 +19,14 @@ const initialState: BtcState = { export const btcSlice = createSlice({ name: "btc", initialState, - reducers: {}, + reducers: { + setSharesBalance(state, action: PayloadAction) { + state.sharesBalance = action.payload + }, + setEstimatedBtcBalance(state, action: PayloadAction) { + state.estimatedBtcBalance = action.payload + }, + }, extraReducers: (builder) => { builder.addCase(fetchBTCPriceUSD.pending, (state) => { state.isLoadingPriceUSD = true diff --git a/dapp/src/store/middleware.ts b/dapp/src/store/middleware.ts index 451fd90f1..8950058df 100644 --- a/dapp/src/store/middleware.ts +++ b/dapp/src/store/middleware.ts @@ -1 +1,3 @@ -export const middleware = {} +export const middleware = { + serializableCheck: false, +} From 4d239921e47d545b192384edd7b0a012bb26ca49 Mon Sep 17 00:00:00 2001 From: ioay Date: Wed, 13 Mar 2024 19:09:06 +0100 Subject: [PATCH 02/11] Hooks namning change & minor improvements --- dapp/src/hooks/store/index.ts | 1 + .../src/hooks/store/useEstimatedBtcBalance.ts | 6 +++++ ...useBtcBalance.ts => useFetchBtcBalance.ts} | 23 ++++++++----------- dapp/src/hooks/useInitApp.ts | 4 ++-- .../pages/OverviewPage/PositionDetails.tsx | 5 ++-- dapp/src/store/btc/btcSelector.ts | 8 ++++--- 6 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 dapp/src/hooks/store/useEstimatedBtcBalance.ts rename dapp/src/hooks/{useBtcBalance.ts => useFetchBtcBalance.ts} (62%) diff --git a/dapp/src/hooks/store/index.ts b/dapp/src/hooks/store/index.ts index 20f33eb3c..9afcc7285 100644 --- a/dapp/src/hooks/store/index.ts +++ b/dapp/src/hooks/store/index.ts @@ -1,2 +1,3 @@ export * from "./useAppDispatch" export * from "./useAppSelector" +export * from "./useEstimatedBtcBalance" diff --git a/dapp/src/hooks/store/useEstimatedBtcBalance.ts b/dapp/src/hooks/store/useEstimatedBtcBalance.ts new file mode 100644 index 000000000..9820c6c4b --- /dev/null +++ b/dapp/src/hooks/store/useEstimatedBtcBalance.ts @@ -0,0 +1,6 @@ +import { selectEstimatedBtcBalance } from "#/store/btc" +import { useAppSelector } from "./useAppSelector" + +export function useEstimatedBtcBalance() { + return useAppSelector(selectEstimatedBtcBalance) +} diff --git a/dapp/src/hooks/useBtcBalance.ts b/dapp/src/hooks/useFetchBtcBalance.ts similarity index 62% rename from dapp/src/hooks/useBtcBalance.ts rename to dapp/src/hooks/useFetchBtcBalance.ts index d08e40dbe..dfafbdfc9 100644 --- a/dapp/src/hooks/useBtcBalance.ts +++ b/dapp/src/hooks/useFetchBtcBalance.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect } from "react" +import { useEffect } from "react" import { EthereumAddress } from "@acre-btc/sdk" import { useAcreContext } from "#/acre-react/hooks" import { logPromiseFailure } from "#/utils" @@ -6,28 +6,23 @@ import { btcSlice } from "#/store/btc" import { useWalletContext } from "./useWalletContext" import { useAppDispatch } from "./store" -export function useBtcBalance() { +export function useFetchBtcBalance() { const { acre, isInitialized } = useAcreContext() const { ethAccount } = useWalletContext() const dispatch = useAppDispatch() - const getBtcBalance = useCallback(async () => { - if (isInitialized && ethAccount && acre) { + useEffect(() => { + const getBtcBalance = async () => { + if (!isInitialized || !ethAccount || !acre) return + const chainIdentifier = EthereumAddress.from(ethAccount.address) const sharesBalance = await acre.staking.sharesBalance(chainIdentifier) const estimatedBitcoinBalance = await acre.staking.estimatedBitcoinBalance(chainIdentifier) - if (typeof sharesBalance === "bigint") - dispatch(btcSlice.actions.setSharesBalance(sharesBalance)) - if (typeof estimatedBitcoinBalance === "bigint") - dispatch( - btcSlice.actions.setEstimatedBtcBalance(estimatedBitcoinBalance), - ) + dispatch(btcSlice.actions.setSharesBalance(sharesBalance)) + dispatch(btcSlice.actions.setEstimatedBtcBalance(estimatedBitcoinBalance)) } - }, [acre, isInitialized, ethAccount, dispatch]) - - useEffect(() => { logPromiseFailure(getBtcBalance()) - }, [getBtcBalance]) + }, [acre, isInitialized, ethAccount, dispatch]) } diff --git a/dapp/src/hooks/useInitApp.ts b/dapp/src/hooks/useInitApp.ts index b31b09c14..570651bf1 100644 --- a/dapp/src/hooks/useInitApp.ts +++ b/dapp/src/hooks/useInitApp.ts @@ -1,7 +1,7 @@ import { useSentry } from "./sentry" import { useInitializeAcreSdk } from "./useInitializeAcreSdk" import { useFetchBTCPriceUSD } from "./useFetchBTCPriceUSD" -import { useBtcBalance } from "./useBtcBalance" +import { useFetchBtcBalance } from "./useFetchBtcBalance" export function useInitApp() { // TODO: Let's uncomment when dark mode is ready @@ -9,5 +9,5 @@ export function useInitApp() { useSentry() useInitializeAcreSdk() useFetchBTCPriceUSD() - useBtcBalance() + useFetchBtcBalance() } diff --git a/dapp/src/pages/OverviewPage/PositionDetails.tsx b/dapp/src/pages/OverviewPage/PositionDetails.tsx index 7ac6def38..f6d9d42b5 100644 --- a/dapp/src/pages/OverviewPage/PositionDetails.tsx +++ b/dapp/src/pages/OverviewPage/PositionDetails.tsx @@ -14,11 +14,10 @@ import { TextMd } from "#/components/shared/Typography" import { Info } from "#/assets/icons" import { ACTION_FLOW_TYPES, ActionFlowType } from "#/types" import TransactionModal from "#/components/TransactionModal" -import { useAppSelector } from "#/hooks" -import { selectEstimatedBtcBalance } from "#/store/btc" +import { useEstimatedBtcBalance } from "#/hooks/store" export default function PositionDetails(props: CardProps) { - const estimatedBtcBalance = useAppSelector(selectEstimatedBtcBalance) + const estimatedBtcBalance = useEstimatedBtcBalance() const [actionFlowType, setActionFlowType] = useState< ActionFlowType | undefined >(undefined) diff --git a/dapp/src/store/btc/btcSelector.ts b/dapp/src/store/btc/btcSelector.ts index 677188654..806f5b65b 100644 --- a/dapp/src/store/btc/btcSelector.ts +++ b/dapp/src/store/btc/btcSelector.ts @@ -1,6 +1,8 @@ import { RootState } from ".." -export const selectEstimatedBtcBalance = (state: RootState) => +export const selectEstimatedBtcBalance = (state: RootState): bigint => state.btc.estimatedBtcBalance -export const selectSharesBalance = (state: RootState) => state.btc.sharesBalance -export const selectBtcUsdPrice = (state: RootState) => state.btc.usdPrice +export const selectSharesBalance = (state: RootState): bigint => + state.btc.sharesBalance +export const selectBtcUsdPrice = (state: RootState): number => + state.btc.usdPrice From 3c72154a4f363b5d758218b4cfd55b0499d89689 Mon Sep 17 00:00:00 2001 From: ioay Date: Thu, 21 Mar 2024 22:18:11 +0100 Subject: [PATCH 03/11] Added bigint sanitizer to redux enhancers & updated serializable check --- dapp/package.json | 1 + dapp/src/store/enhancers.ts | 30 ++++++++++++++++++++++++++++++ dapp/src/store/index.ts | 2 ++ dapp/src/store/middleware.ts | 7 ++++++- dapp/src/utils/index.ts | 1 + dapp/src/utils/json.ts | 13 +++++++++++++ pnpm-lock.yaml | 14 +++++++++++++- 7 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 dapp/src/store/enhancers.ts create mode 100644 dapp/src/utils/json.ts diff --git a/dapp/package.json b/dapp/package.json index f93626084..968b3350f 100644 --- a/dapp/package.json +++ b/dapp/package.json @@ -21,6 +21,7 @@ "@emotion/styled": "^11.11.0", "@ledgerhq/wallet-api-client": "^1.5.0", "@ledgerhq/wallet-api-client-react": "^1.3.0", + "@redux-devtools/extension": "^3.3.0", "@reduxjs/toolkit": "^2.2.0", "@sentry/react": "^7.98.0", "@sentry/types": "^7.102.0", diff --git a/dapp/src/store/enhancers.ts b/dapp/src/store/enhancers.ts new file mode 100644 index 000000000..ef089a73d --- /dev/null +++ b/dapp/src/store/enhancers.ts @@ -0,0 +1,30 @@ +import { encodeJSON } from "#/utils" +import { devToolsEnhancer } from "@redux-devtools/extension" + +// This sanitizer runs on store and action data before serializing for remote +// redux devtools. The goal is to end up with an object that is directly +// JSON-serializable and deserializable; the remote end will display the +// resulting objects without additional processing or decoding logic. +function devToolsSanitizer(input: T) { + switch (typeof input) { + // We can make use of encodeJSON instead of recursively looping through + // the input + case "bigint": + case "object": + // We only need to sanitize bigints and objects + // that may or may not contain them. + return JSON.parse(encodeJSON(input)) as T + default: + return input + } +} + +export const enhancers = import.meta.env.DEV + ? { + autoBatch: undefined, + devToolsEnhancer: devToolsEnhancer({ + actionSanitizer: devToolsSanitizer, + stateSanitizer: devToolsSanitizer, + }), + } + : {} diff --git a/dapp/src/store/index.ts b/dapp/src/store/index.ts index fc68092ae..b099ca384 100644 --- a/dapp/src/store/index.ts +++ b/dapp/src/store/index.ts @@ -1,10 +1,12 @@ import { configureStore } from "@reduxjs/toolkit" import { middleware } from "./middleware" import { reducer } from "./reducer" +import { enhancers } from "./enhancers" export const store = configureStore({ reducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware(middleware), + enhancers: (getDefaultEnhancers) => getDefaultEnhancers(enhancers), devTools: !import.meta.env.PROD, }) diff --git a/dapp/src/store/middleware.ts b/dapp/src/store/middleware.ts index 8950058df..80413c5ce 100644 --- a/dapp/src/store/middleware.ts +++ b/dapp/src/store/middleware.ts @@ -1,3 +1,8 @@ +import { isPlain } from "@reduxjs/toolkit" + export const middleware = { - serializableCheck: false, + serializableCheck: { + isSerializable: (value: unknown) => + isPlain(value) || typeof value === "bigint", + }, } diff --git a/dapp/src/utils/index.ts b/dapp/src/utils/index.ts index cb7034c47..36f75497e 100644 --- a/dapp/src/utils/index.ts +++ b/dapp/src/utils/index.ts @@ -8,3 +8,4 @@ export * from "./time" export * from "./promise" export * from "./exchangeApi" export * from "./verifyDepositAddress" +export * from "./json" diff --git a/dapp/src/utils/json.ts b/dapp/src/utils/json.ts new file mode 100644 index 000000000..ed50aef94 --- /dev/null +++ b/dapp/src/utils/json.ts @@ -0,0 +1,13 @@ +/** + * Encode an unknown input as JSON, special-casing bigints and undefined. + * + * @param input an object, array, or primitive to encode as JSON + */ +export function encodeJSON(input: bigint | object | null): string { + return JSON.stringify(input, (_, value): object | null => { + if (typeof value === "bigint") { + return { B_I_G_I_N_T: value.toString() } + } + return value as object | null + }) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5efefe084..b7b3b6b09 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -141,6 +141,9 @@ importers: '@ledgerhq/wallet-api-client-react': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) + '@redux-devtools/extension': + specifier: ^3.3.0 + version: 3.3.0(redux@5.0.1) '@reduxjs/toolkit': specifier: ^2.2.0 version: 2.2.1(react-redux@9.1.0)(react@18.2.0) @@ -5864,6 +5867,16 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false + /@redux-devtools/extension@3.3.0(redux@5.0.1): + resolution: {integrity: sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==} + peerDependencies: + redux: ^3.1.0 || ^4.0.0 || ^5.0.0 + dependencies: + '@babel/runtime': 7.23.4 + immutable: 4.3.4 + redux: 5.0.1 + dev: false + /@reduxjs/toolkit@2.2.1(react-redux@9.1.0)(react@18.2.0): resolution: {integrity: sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==} peerDependencies: @@ -13186,7 +13199,6 @@ packages: /immutable@4.3.4: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} - dev: true /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} From 99ff8d94f30caedb03a2f98bc6bcf56fe252f571 Mon Sep 17 00:00:00 2001 From: ioay Date: Fri, 22 Mar 2024 14:15:39 +0100 Subject: [PATCH 04/11] Destructuring action creators --- dapp/src/hooks/useFetchBtcBalance.ts | 6 +++--- dapp/src/store/btc/btcSlice.ts | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dapp/src/hooks/useFetchBtcBalance.ts b/dapp/src/hooks/useFetchBtcBalance.ts index dfafbdfc9..b41eb4470 100644 --- a/dapp/src/hooks/useFetchBtcBalance.ts +++ b/dapp/src/hooks/useFetchBtcBalance.ts @@ -2,7 +2,7 @@ import { useEffect } from "react" import { EthereumAddress } from "@acre-btc/sdk" import { useAcreContext } from "#/acre-react/hooks" import { logPromiseFailure } from "#/utils" -import { btcSlice } from "#/store/btc" +import { setEstimatedBtcBalance, setSharesBalance } from "#/store/btc" import { useWalletContext } from "./useWalletContext" import { useAppDispatch } from "./store" @@ -20,8 +20,8 @@ export function useFetchBtcBalance() { const estimatedBitcoinBalance = await acre.staking.estimatedBitcoinBalance(chainIdentifier) - dispatch(btcSlice.actions.setSharesBalance(sharesBalance)) - dispatch(btcSlice.actions.setEstimatedBtcBalance(estimatedBitcoinBalance)) + dispatch(setSharesBalance(sharesBalance)) + dispatch(setEstimatedBtcBalance(estimatedBitcoinBalance)) } logPromiseFailure(getBtcBalance()) }, [acre, isInitialized, ethAccount, dispatch]) diff --git a/dapp/src/store/btc/btcSlice.ts b/dapp/src/store/btc/btcSlice.ts index 49096b7af..a3e7ce9fc 100644 --- a/dapp/src/store/btc/btcSlice.ts +++ b/dapp/src/store/btc/btcSlice.ts @@ -43,3 +43,5 @@ export const btcSlice = createSlice({ ) }, }) + +export const { setSharesBalance, setEstimatedBtcBalance } = btcSlice.actions From 427921d943ad49636aeea99d5b637b09a8c7a967 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 3 Apr 2024 20:49:15 +0200 Subject: [PATCH 05/11] Rename Bitcoin Depositor contract We renamed the depositor contract from AcreBitcoinDepositor to BitcoinDepositor, as there is no point in prefixing the contract with Acre. We used to do that for ethereum typed messages clear signing, but we no longer need ethereum messages signing with Bitcoin-only experience. --- ...coinDepositor.sol => BitcoinDepositor.sol} | 9 +++---- ...arness.sol => BitcoinDepositorHarness.sol} | 10 +++++--- ....sol => BitcoinDepositorMisplacedSlot.sol} | 10 ++++---- ...ot.sol => BitcoinDepositorMissingSlot.sol} | 10 ++++---- ...DepositorV2.sol => BitcoinDepositorV2.sol} | 11 +++----- ...itor.ts => 03_deploy_bitcoin_depositor.ts} | 22 ++++++---------- ...3_transfer_ownership_bitcoin_depositor.ts} | 12 ++++----- ...inDepositor.json => BitcoinDepositor.json} | 0 ...sitor.test.ts => BitcoinDepositor.test.ts} | 6 ++--- ...st.ts => BitcoinDepositor.upgrade.test.ts} | 25 +++++++++---------- core/test/helpers/context.ts | 6 ++--- sdk/src/lib/contracts/bitcoin-depositor.ts | 2 +- ...inDepositor.json => BitcoinDepositor.json} | 0 sdk/src/lib/ethereum/bitcoin-depositor.ts | 8 +++--- .../modules/staking/stake-initialization.ts | 2 +- sdk/test/lib/ethereum/eip712.test.ts | 2 +- sdk/test/modules/staking.test.ts | 2 +- 17 files changed, 62 insertions(+), 75 deletions(-) rename core/contracts/{AcreBitcoinDepositor.sol => BitcoinDepositor.sol} (99%) rename core/contracts/test/{AcreBitcoinDepositorHarness.sol => BitcoinDepositorHarness.sol} (90%) rename core/contracts/test/upgrades/{AcreBitcoinDepositorMisplacedSlot.sol => BitcoinDepositorMisplacedSlot.sol} (98%) rename core/contracts/test/upgrades/{AcreBitcoinDepositorMissingSlot.sol => BitcoinDepositorMissingSlot.sol} (98%) rename core/contracts/test/upgrades/{AcreBitcoinDepositorV2.sol => BitcoinDepositorV2.sol} (98%) rename core/deploy/{03_deploy_acre_bitcoin_depositor.ts => 03_deploy_bitcoin_depositor.ts} (68%) rename core/deploy/{23_transfer_ownership_acre_bitcoin_depositor.ts => 23_transfer_ownership_bitcoin_depositor.ts} (72%) rename core/deployments/sepolia/{AcreBitcoinDepositor.json => BitcoinDepositor.json} (100%) rename core/test/{AcreBitcoinDepositor.test.ts => BitcoinDepositor.test.ts} (99%) rename core/test/{AcreBitcoinDepositor.upgrade.test.ts => BitcoinDepositor.upgrade.test.ts} (90%) rename sdk/src/lib/ethereum/artifacts/sepolia/{AcreBitcoinDepositor.json => BitcoinDepositor.json} (100%) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/BitcoinDepositor.sol similarity index 99% rename from core/contracts/AcreBitcoinDepositor.sol rename to core/contracts/BitcoinDepositor.sol index 6e46fbcab..f2d514ac5 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/BitcoinDepositor.sol @@ -13,7 +13,7 @@ import {stBTC} from "./stBTC.sol"; // TODO: Make Pausable -/// @title Acre Bitcoin Depositor contract. +/// @title Bitcoin Depositor contract. /// @notice The contract integrates Acre staking with tBTC minting. /// User who wants to stake BTC in Acre should submit a Bitcoin transaction /// to the most recently created off-chain ECDSA wallets of the tBTC Bridge @@ -37,10 +37,7 @@ import {stBTC} from "./stBTC.sol"; /// Depositor address. After tBTC is minted to the Depositor, on the stake /// finalization tBTC is staked in Acre and stBTC shares are emitted /// to the staker. -contract AcreBitcoinDepositor is - AbstractTBTCDepositor, - Ownable2StepUpgradeable -{ +contract BitcoinDepositor is AbstractTBTCDepositor, Ownable2StepUpgradeable { using SafeERC20 for IERC20; /// @notice State of the stake request. @@ -270,7 +267,7 @@ contract AcreBitcoinDepositor is _disableInitializers(); } - /// @notice Acre Bitcoin Depositor contract initializer. + /// @notice Bitcoin Depositor contract initializer. /// @param bridge tBTC Bridge contract instance. /// @param tbtcVault tBTC Vault contract instance. /// @param _tbtcToken tBTC token contract instance. diff --git a/core/contracts/test/AcreBitcoinDepositorHarness.sol b/core/contracts/test/BitcoinDepositorHarness.sol similarity index 90% rename from core/contracts/test/AcreBitcoinDepositorHarness.sol rename to core/contracts/test/BitcoinDepositorHarness.sol index 71b0b3a33..3a87bb3af 100644 --- a/core/contracts/test/AcreBitcoinDepositorHarness.sol +++ b/core/contracts/test/BitcoinDepositorHarness.sol @@ -2,17 +2,17 @@ /* solhint-disable func-name-mixedcase */ pragma solidity ^0.8.21; -import {AcreBitcoinDepositor} from "../AcreBitcoinDepositor.sol"; +import {BitcoinDepositor} from "../BitcoinDepositor.sol"; import {MockBridge, MockTBTCVault} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositor.sol"; import {IBridge} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {TestERC20} from "./TestERC20.sol"; -/// @dev A test contract to expose internal function from AcreBitcoinDepositor contract. +/// @dev A test contract to expose internal function from BitcoinDepositor contract. /// This solution follows Foundry recommendation: /// https://book.getfoundry.sh/tutorials/best-practices#internal-functions -contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { +contract BitcoinDepositorHarness is BitcoinDepositor { function exposed_finalizeBridging( uint256 depositKey ) external returns (uint256 amountToStake, address staker) { @@ -25,7 +25,9 @@ contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { } /// @dev A test contract to stub tBTC Bridge contract. -contract BridgeStub is MockBridge {} +contract BridgeStub is MockBridge { + +} /// @dev A test contract to stub tBTC Vault contract. contract TBTCVaultStub is MockTBTCVault { diff --git a/core/contracts/test/upgrades/AcreBitcoinDepositorMisplacedSlot.sol b/core/contracts/test/upgrades/BitcoinDepositorMisplacedSlot.sol similarity index 98% rename from core/contracts/test/upgrades/AcreBitcoinDepositorMisplacedSlot.sol rename to core/contracts/test/upgrades/BitcoinDepositorMisplacedSlot.sol index 744ebe5bb..848facd99 100644 --- a/core/contracts/test/upgrades/AcreBitcoinDepositorMisplacedSlot.sol +++ b/core/contracts/test/upgrades/BitcoinDepositorMisplacedSlot.sol @@ -11,11 +11,11 @@ import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; import {stBTC} from "../../stBTC.sol"; -/// @title AcreBitcoinDepositorMisplacedSlot -/// @dev This is a contract used to test Acre Bitcoin Depositor upgradeability. -/// It is a copy of AcreBitcoinDepositor contract with some differences +/// @title BitcoinDepositorMisplacedSlot +/// @dev This is a contract used to test Bitcoin Depositor upgradeability. +/// It is a copy of BitcoinDepositor contract with some differences /// marked with `TEST:` comments. -contract AcreBitcoinDepositorMisplacedSlot is +contract BitcoinDepositorMisplacedSlot is AbstractTBTCDepositor, Ownable2StepUpgradeable { @@ -251,7 +251,7 @@ contract AcreBitcoinDepositorMisplacedSlot is _disableInitializers(); } - /// @notice Acre Bitcoin Depositor contract initializer. + /// @notice Bitcoin Depositor contract initializer. /// @param bridge tBTC Bridge contract instance. /// @param tbtcVault tBTC Vault contract instance. /// @param _tbtcToken tBTC token contract instance. diff --git a/core/contracts/test/upgrades/AcreBitcoinDepositorMissingSlot.sol b/core/contracts/test/upgrades/BitcoinDepositorMissingSlot.sol similarity index 98% rename from core/contracts/test/upgrades/AcreBitcoinDepositorMissingSlot.sol rename to core/contracts/test/upgrades/BitcoinDepositorMissingSlot.sol index 13213eac7..83190769c 100644 --- a/core/contracts/test/upgrades/AcreBitcoinDepositorMissingSlot.sol +++ b/core/contracts/test/upgrades/BitcoinDepositorMissingSlot.sol @@ -11,11 +11,11 @@ import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; import {stBTC} from "../../stBTC.sol"; -/// @title AcreBitcoinDepositorMissingSlot -/// @dev This is a contract used to test Acre Bitcoin Depositor upgradeability. -/// It is a copy of AcreBitcoinDepositor contract with some differences +/// @title BitcoinDepositorMissingSlot +/// @dev This is a contract used to test Bitcoin Depositor upgradeability. +/// It is a copy of BitcoinDepositor contract with some differences /// marked with `TEST:` comments. -contract AcreBitcoinDepositorMissingSlot is +contract BitcoinDepositorMissingSlot is AbstractTBTCDepositor, Ownable2StepUpgradeable { @@ -249,7 +249,7 @@ contract AcreBitcoinDepositorMissingSlot is _disableInitializers(); } - /// @notice Acre Bitcoin Depositor contract initializer. + /// @notice Bitcoin Depositor contract initializer. /// @param bridge tBTC Bridge contract instance. /// @param tbtcVault tBTC Vault contract instance. /// @param _tbtcToken tBTC token contract instance. diff --git a/core/contracts/test/upgrades/AcreBitcoinDepositorV2.sol b/core/contracts/test/upgrades/BitcoinDepositorV2.sol similarity index 98% rename from core/contracts/test/upgrades/AcreBitcoinDepositorV2.sol rename to core/contracts/test/upgrades/BitcoinDepositorV2.sol index 911570891..f826bc95f 100644 --- a/core/contracts/test/upgrades/AcreBitcoinDepositorV2.sol +++ b/core/contracts/test/upgrades/BitcoinDepositorV2.sol @@ -11,14 +11,11 @@ import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; import {stBTC} from "../../stBTC.sol"; -/// @title AcreBitcoinDepositorV2 -/// @dev This is a contract used to test Acre Bitcoin Depositor upgradeability. -/// It is a copy of AcreBitcoinDepositor contract with some differences +/// @title BitcoinDepositorV2 +/// @dev This is a contract used to test Bitcoin Depositor upgradeability. +/// It is a copy of BitcoinDepositor contract with some differences /// marked with `TEST:` comments. -contract AcreBitcoinDepositorV2 is - AbstractTBTCDepositor, - Ownable2StepUpgradeable -{ +contract BitcoinDepositorV2 is AbstractTBTCDepositor, Ownable2StepUpgradeable { using SafeERC20 for IERC20; /// @notice State of the stake request. diff --git a/core/deploy/03_deploy_acre_bitcoin_depositor.ts b/core/deploy/03_deploy_bitcoin_depositor.ts similarity index 68% rename from core/deploy/03_deploy_acre_bitcoin_depositor.ts rename to core/deploy/03_deploy_bitcoin_depositor.ts index 73df43e9c..476cd4e08 100644 --- a/core/deploy/03_deploy_acre_bitcoin_depositor.ts +++ b/core/deploy/03_deploy_bitcoin_depositor.ts @@ -12,13 +12,13 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const tbtc = await deployments.get("TBTC") const stbtc = await deployments.get("stBTC") - const [, acreBitcoinDepositorDeployment] = await helpers.upgrades.deployProxy( - "AcreBitcoinDepositor", + const [, deployment] = await helpers.upgrades.deployProxy( + "BitcoinDepositor", { contractName: process.env.HARDHAT_TEST === "true" - ? "AcreBitcoinDepositorHarness" - : "AcreBitcoinDepositor", + ? "BitcoinDepositorHarness" + : "BitcoinDepositor", factoryOpts: { signer: deployer, }, @@ -35,15 +35,9 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { }, ) - if ( - acreBitcoinDepositorDeployment.transactionHash && - hre.network.tags.etherscan - ) { - await waitForTransaction( - hre, - acreBitcoinDepositorDeployment.transactionHash, - ) - await helpers.etherscan.verify(acreBitcoinDepositorDeployment) + if (deployment.transactionHash && hre.network.tags.etherscan) { + await waitForTransaction(hre, deployment.transactionHash) + await helpers.etherscan.verify(deployment) } // TODO: Add Tenderly verification @@ -51,5 +45,5 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func -func.tags = ["AcreBitcoinDepositor"] +func.tags = ["BitcoinDepositor"] func.dependencies = ["TBTC", "stBTC"] diff --git a/core/deploy/23_transfer_ownership_acre_bitcoin_depositor.ts b/core/deploy/23_transfer_ownership_bitcoin_depositor.ts similarity index 72% rename from core/deploy/23_transfer_ownership_acre_bitcoin_depositor.ts rename to core/deploy/23_transfer_ownership_bitcoin_depositor.ts index c04f6f679..8d6d5ffde 100644 --- a/core/deploy/23_transfer_ownership_acre_bitcoin_depositor.ts +++ b/core/deploy/23_transfer_ownership_bitcoin_depositor.ts @@ -6,12 +6,10 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { deployer, governance } = await getNamedAccounts() const { log } = deployments - log( - `transferring ownership of AcreBitcoinDepositor contract to ${governance}`, - ) + log(`transferring ownership of BitcoinDepositor contract to ${governance}`) await deployments.execute( - "AcreBitcoinDepositor", + "BitcoinDepositor", { from: deployer, log: true, waitConfirmations: 1 }, "transferOwnership", governance, @@ -19,7 +17,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { if (hre.network.name !== "mainnet") { await deployments.execute( - "AcreBitcoinDepositor", + "BitcoinDepositor", { from: governance, log: true, waitConfirmations: 1 }, "acceptOwnership", ) @@ -28,5 +26,5 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func -func.tags = ["TransferOwnershipAcreBitcoinDepositor"] -func.dependencies = ["AcreBitcoinDepositor"] +func.tags = ["TransferOwnershipBitcoinDepositor"] +func.dependencies = ["BitcoinDepositor"] diff --git a/core/deployments/sepolia/AcreBitcoinDepositor.json b/core/deployments/sepolia/BitcoinDepositor.json similarity index 100% rename from core/deployments/sepolia/AcreBitcoinDepositor.json rename to core/deployments/sepolia/BitcoinDepositor.json diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/BitcoinDepositor.test.ts similarity index 99% rename from core/test/AcreBitcoinDepositor.test.ts rename to core/test/BitcoinDepositor.test.ts index 313ba35a3..498edd0d5 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/BitcoinDepositor.test.ts @@ -12,7 +12,7 @@ import type { StBTC, BridgeStub, TBTCVaultStub, - AcreBitcoinDepositorHarness, + BitcoinDepositorHarness, TestERC20, } from "../typechain" import { deployment } from "./helpers" @@ -30,7 +30,7 @@ async function fixture() { const { lastBlockTime } = helpers.time const { getNamedSigners, getUnnamedSigners } = helpers.signers -describe("AcreBitcoinDepositor", () => { +describe("BitcoinDepositor", () => { const defaultDepositDustThreshold = 1000000 // 1000000 satoshi = 0.01 BTC const defaultDepositTreasuryFeeDivisor = 2000 // 1/2000 = 0.05% = 0.0005 const defaultDepositTxMaxFee = 1000 // 1000 satoshi = 0.00001 BTC @@ -50,7 +50,7 @@ describe("AcreBitcoinDepositor", () => { const depositorFee = to1ePrecision(10, 10) // 10 satoshi const amountToStake = to1ePrecision(896501, 8) // 8965,01 satoshi - let bitcoinDepositor: AcreBitcoinDepositorHarness + let bitcoinDepositor: BitcoinDepositorHarness let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub let stbtc: StBTC diff --git a/core/test/AcreBitcoinDepositor.upgrade.test.ts b/core/test/BitcoinDepositor.upgrade.test.ts similarity index 90% rename from core/test/AcreBitcoinDepositor.upgrade.test.ts rename to core/test/BitcoinDepositor.upgrade.test.ts index 7bad1eda9..3016d2ed9 100644 --- a/core/test/AcreBitcoinDepositor.upgrade.test.ts +++ b/core/test/BitcoinDepositor.upgrade.test.ts @@ -8,10 +8,10 @@ import { beforeAfterSnapshotWrapper, deployment } from "./helpers" import { TestERC20, StBTC, - AcreBitcoinDepositor, + BitcoinDepositor, BridgeStub, TBTCVaultStub, - AcreBitcoinDepositorV2, + BitcoinDepositorV2, } from "../typechain" import { to1e18 } from "./utils" @@ -24,12 +24,12 @@ async function fixture() { return { tbtc, stbtc, bitcoinDepositor, tbtcBridge, tbtcVault } } -describe("AcreBitcoinDepositor contract upgrade", () => { +describe("BitcoinDepositor contract upgrade", () => { let tbtc: TestERC20 let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub let stbtc: StBTC - let bitcoinDepositor: AcreBitcoinDepositor + let bitcoinDepositor: BitcoinDepositor let governance: HardhatEthersSigner before(async () => { @@ -45,8 +45,8 @@ describe("AcreBitcoinDepositor contract upgrade", () => { it("should throw an error", async () => { await expect( helpers.upgrades.upgradeProxy( - "AcreBitcoinDepositor", - "AcreBitcoinDepositorMisplacedSlot", + "BitcoinDepositor", + "BitcoinDepositorMisplacedSlot", { initializerArgs: [ await tbtcBridge.getAddress(), @@ -67,8 +67,8 @@ describe("AcreBitcoinDepositor contract upgrade", () => { it("should throw an error", async () => { await expect( helpers.upgrades.upgradeProxy( - "AcreBitcoinDepositor", - "AcreBitcoinDepositorMissingSlot", + "BitcoinDepositor", + "BitcoinDepositorMissingSlot", { initializerArgs: [ await tbtcBridge.getAddress(), @@ -86,7 +86,7 @@ describe("AcreBitcoinDepositor contract upgrade", () => { context("when upgrading to a valid contract", () => { const newVariable = 1n - let bitcoinDepositorV2: AcreBitcoinDepositorV2 + let bitcoinDepositorV2: BitcoinDepositorV2 let v1InitialParameters: { minStakeAmount: bigint maxSingleStakeAmount: bigint @@ -111,8 +111,8 @@ describe("AcreBitcoinDepositor contract upgrade", () => { } const [upgradedDepositor] = await helpers.upgrades.upgradeProxy( - "AcreBitcoinDepositor", - "AcreBitcoinDepositorV2", + "BitcoinDepositor", + "BitcoinDepositorV2", { factoryOpts: { signer: governance }, proxyOpts: { @@ -124,8 +124,7 @@ describe("AcreBitcoinDepositor contract upgrade", () => { }, ) - bitcoinDepositorV2 = - upgradedDepositor as unknown as AcreBitcoinDepositorV2 + bitcoinDepositorV2 = upgradedDepositor as unknown as BitcoinDepositorV2 }) it("new instance should have the same address as the old one", async () => { diff --git a/core/test/helpers/context.ts b/core/test/helpers/context.ts index 239721235..839138653 100644 --- a/core/test/helpers/context.ts +++ b/core/test/helpers/context.ts @@ -8,7 +8,7 @@ import type { BridgeStub, TestERC4626, TBTCVaultStub, - AcreBitcoinDepositorHarness, + BitcoinDepositorHarness, } from "../../typechain" // eslint-disable-next-line import/prefer-default-export @@ -16,8 +16,8 @@ export async function deployment() { await deployments.fixture() const stbtc: stBTC = await getDeployedContract("stBTC") - const bitcoinDepositor: AcreBitcoinDepositorHarness = - await getDeployedContract("AcreBitcoinDepositor") + const bitcoinDepositor: BitcoinDepositorHarness = + await getDeployedContract("BitcoinDepositor") const tbtc: TestERC20 = await getDeployedContract("TBTC") const tbtcBridge: BridgeStub = await getDeployedContract("Bridge") diff --git a/sdk/src/lib/contracts/bitcoin-depositor.ts b/sdk/src/lib/contracts/bitcoin-depositor.ts index 960bc4e1f..749f78b73 100644 --- a/sdk/src/lib/contracts/bitcoin-depositor.ts +++ b/sdk/src/lib/contracts/bitcoin-depositor.ts @@ -10,7 +10,7 @@ export type DecodedExtraData = { } /** - * Interface for communication with the AcreBitcoinDepositor on-chain contract. + * Interface for communication with the BitcoinDepositor on-chain contract. */ export interface BitcoinDepositor extends DepositorProxy { /** diff --git a/sdk/src/lib/ethereum/artifacts/sepolia/AcreBitcoinDepositor.json b/sdk/src/lib/ethereum/artifacts/sepolia/BitcoinDepositor.json similarity index 100% rename from sdk/src/lib/ethereum/artifacts/sepolia/AcreBitcoinDepositor.json rename to sdk/src/lib/ethereum/artifacts/sepolia/BitcoinDepositor.json diff --git a/sdk/src/lib/ethereum/bitcoin-depositor.ts b/sdk/src/lib/ethereum/bitcoin-depositor.ts index e5b33ca80..d968ee5b6 100644 --- a/sdk/src/lib/ethereum/bitcoin-depositor.ts +++ b/sdk/src/lib/ethereum/bitcoin-depositor.ts @@ -1,5 +1,5 @@ import { packRevealDepositParameters } from "@keep-network/tbtc-v2.ts" -import { AcreBitcoinDepositor as AcreBitcoinDepositorTypechain } from "@acre-btc/core/typechain/contracts/AcreBitcoinDepositor" +import { BitcoinDepositor as BitcoinDepositorTypechain } from "@acre-btc/core/typechain/contracts/BitcoinDepositor" import { ZeroAddress, dataSlice, @@ -24,7 +24,7 @@ import { import { Hex } from "../utils" import { EthereumNetwork } from "./network" -import SepoliaBitcoinDepositor from "./artifacts/sepolia/AcreBitcoinDepositor.json" +import SepoliaBitcoinDepositor from "./artifacts/sepolia/BitcoinDepositor.json" /** * Ethereum implementation of the BitcoinDepositor. @@ -32,8 +32,8 @@ import SepoliaBitcoinDepositor from "./artifacts/sepolia/AcreBitcoinDepositor.js class EthereumBitcoinDepositor // @ts-expect-error TODO: Figure out why type generated by typechain does not // satisfy the constraint `Contract`. Error: `Property '[internal]' is missing - // in type 'AcreBitcoinDepositor' but required in type 'Contract'`. - extends EthersContractWrapper + // in type 'BitcoinDepositor' but required in type 'Contract'`. + extends EthersContractWrapper implements BitcoinDepositor { constructor(config: EthersContractConfig, network: EthereumNetwork) { diff --git a/sdk/src/modules/staking/stake-initialization.ts b/sdk/src/modules/staking/stake-initialization.ts index 4d66a111c..869de4452 100644 --- a/sdk/src/modules/staking/stake-initialization.ts +++ b/sdk/src/modules/staking/stake-initialization.ts @@ -120,7 +120,7 @@ class StakeInitialization { */ #getStakeMessageTypedData() { const domain: Domain = { - name: "AcreBitcoinDepositor", + name: "BitcoinDepositor", version: "1", verifyingContract: this.#contracts.bitcoinDepositor.getChainIdentifier(), } diff --git a/sdk/test/lib/ethereum/eip712.test.ts b/sdk/test/lib/ethereum/eip712.test.ts index 5e342e0ac..7395d8497 100644 --- a/sdk/test/lib/ethereum/eip712.test.ts +++ b/sdk/test/lib/ethereum/eip712.test.ts @@ -7,7 +7,7 @@ import { const signMessageData = { domain: { - name: "AcreBitcoinDepositor", + name: "BitcoinDepositor", version: "1", verifyingContract: EthereumAddress.from( ethers.Wallet.createRandom().address, diff --git a/sdk/test/modules/staking.test.ts b/sdk/test/modules/staking.test.ts index 664e54767..6eaca2ead 100644 --- a/sdk/test/modules/staking.test.ts +++ b/sdk/test/modules/staking.test.ts @@ -171,7 +171,7 @@ describe("Staking", () => { it("should sign message", () => { expect(messageSigner.sign).toHaveBeenCalledWith( { - name: "AcreBitcoinDepositor", + name: "BitcoinDepositor", version: "1", verifyingContract: contracts.bitcoinDepositor.getChainIdentifier(), From bcf91ae5d28f59322f300013ec5593d44af3c353 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 3 Apr 2024 21:03:24 +0200 Subject: [PATCH 06/11] Fix code format --- core/contracts/test/BitcoinDepositorHarness.sol | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/contracts/test/BitcoinDepositorHarness.sol b/core/contracts/test/BitcoinDepositorHarness.sol index 3a87bb3af..7b2f7ac41 100644 --- a/core/contracts/test/BitcoinDepositorHarness.sol +++ b/core/contracts/test/BitcoinDepositorHarness.sol @@ -25,9 +25,7 @@ contract BitcoinDepositorHarness is BitcoinDepositor { } /// @dev A test contract to stub tBTC Bridge contract. -contract BridgeStub is MockBridge { - -} +contract BridgeStub is MockBridge {} /// @dev A test contract to stub tBTC Vault contract. contract TBTCVaultStub is MockTBTCVault { From cf86aa5fccfe362061c0b11039ae01ad2d4ad920 Mon Sep 17 00:00:00 2001 From: ioay Date: Thu, 4 Apr 2024 00:56:11 +0200 Subject: [PATCH 07/11] Naming convention for useFetchBTCBalance, enhancers & devtools update --- dapp/package.json | 1 - dapp/src/hooks/index.ts | 1 + dapp/src/hooks/useFetchBTCBalance.ts | 28 ++++++++++++ dapp/src/hooks/useFetchBtcBalance.ts | 2 +- dapp/src/hooks/useInitApp.ts | 4 +- dapp/src/store/devTools.ts | 22 +++++++++ dapp/src/store/enhancers.ts | 30 ------------- dapp/src/store/index.ts | 5 +-- dapp/src/utils/json.ts | 5 ++- pnpm-lock.yaml | 67 ++++++++++++++++++---------- 10 files changed, 103 insertions(+), 62 deletions(-) create mode 100644 dapp/src/hooks/useFetchBTCBalance.ts create mode 100644 dapp/src/store/devTools.ts delete mode 100644 dapp/src/store/enhancers.ts diff --git a/dapp/package.json b/dapp/package.json index 968b3350f..f93626084 100644 --- a/dapp/package.json +++ b/dapp/package.json @@ -21,7 +21,6 @@ "@emotion/styled": "^11.11.0", "@ledgerhq/wallet-api-client": "^1.5.0", "@ledgerhq/wallet-api-client-react": "^1.3.0", - "@redux-devtools/extension": "^3.3.0", "@reduxjs/toolkit": "^2.2.0", "@sentry/react": "^7.98.0", "@sentry/types": "^7.102.0", diff --git a/dapp/src/hooks/index.ts b/dapp/src/hooks/index.ts index 292568f86..3a581470e 100644 --- a/dapp/src/hooks/index.ts +++ b/dapp/src/hooks/index.ts @@ -17,3 +17,4 @@ export * from "./useInitApp" export * from "./useCurrencyConversion" export * from "./useDepositTelemetry" export * from "./useFetchBTCPriceUSD" +export * from "./useFetchBTCBalance" diff --git a/dapp/src/hooks/useFetchBTCBalance.ts b/dapp/src/hooks/useFetchBTCBalance.ts new file mode 100644 index 000000000..360135312 --- /dev/null +++ b/dapp/src/hooks/useFetchBTCBalance.ts @@ -0,0 +1,28 @@ +import { useEffect } from "react" +import { EthereumAddress } from "@acre-btc/sdk" +import { useAcreContext } from "#/acre-react/hooks" +import { logPromiseFailure } from "#/utils" +import { setEstimatedBtcBalance, setSharesBalance } from "#/store/btc" +import { useWalletContext } from "./useWalletContext" +import { useAppDispatch } from "./store" + +export function useFetchBTCBalance() { + const { acre, isInitialized } = useAcreContext() + const { ethAccount } = useWalletContext() + const dispatch = useAppDispatch() + + useEffect(() => { + const getBtcBalance = async () => { + if (!isInitialized || !ethAccount || !acre) return + + const chainIdentifier = EthereumAddress.from(ethAccount.address) + const sharesBalance = await acre.staking.sharesBalance(chainIdentifier) + const estimatedBitcoinBalance = + await acre.staking.estimatedBitcoinBalance(chainIdentifier) + + dispatch(setSharesBalance(sharesBalance)) + dispatch(setEstimatedBtcBalance(estimatedBitcoinBalance)) + } + logPromiseFailure(getBtcBalance()) + }, [acre, isInitialized, ethAccount, dispatch]) +} diff --git a/dapp/src/hooks/useFetchBtcBalance.ts b/dapp/src/hooks/useFetchBtcBalance.ts index b41eb4470..360135312 100644 --- a/dapp/src/hooks/useFetchBtcBalance.ts +++ b/dapp/src/hooks/useFetchBtcBalance.ts @@ -6,7 +6,7 @@ import { setEstimatedBtcBalance, setSharesBalance } from "#/store/btc" import { useWalletContext } from "./useWalletContext" import { useAppDispatch } from "./store" -export function useFetchBtcBalance() { +export function useFetchBTCBalance() { const { acre, isInitialized } = useAcreContext() const { ethAccount } = useWalletContext() const dispatch = useAppDispatch() diff --git a/dapp/src/hooks/useInitApp.ts b/dapp/src/hooks/useInitApp.ts index 570651bf1..906bcd608 100644 --- a/dapp/src/hooks/useInitApp.ts +++ b/dapp/src/hooks/useInitApp.ts @@ -1,7 +1,7 @@ import { useSentry } from "./sentry" import { useInitializeAcreSdk } from "./useInitializeAcreSdk" import { useFetchBTCPriceUSD } from "./useFetchBTCPriceUSD" -import { useFetchBtcBalance } from "./useFetchBtcBalance" +import { useFetchBTCBalance } from "./useFetchBTCBalance" export function useInitApp() { // TODO: Let's uncomment when dark mode is ready @@ -9,5 +9,5 @@ export function useInitApp() { useSentry() useInitializeAcreSdk() useFetchBTCPriceUSD() - useFetchBtcBalance() + useFetchBTCBalance() } diff --git a/dapp/src/store/devTools.ts b/dapp/src/store/devTools.ts new file mode 100644 index 000000000..220b34182 --- /dev/null +++ b/dapp/src/store/devTools.ts @@ -0,0 +1,22 @@ +import { encodeJSON } from "#/utils" + +function devToolsSanitizer(input: T) { + switch (typeof input) { + // We can make use of encodeJSON instead of recursively looping through + // the input + case "bigint": + case "object": + // We only need to sanitize bigints and objects + // that may or may not contain them. + return JSON.parse(encodeJSON(input)) as T + default: + return input + } +} + +export const devTools = !import.meta.env.PROD + ? { + actionSanitizer: devToolsSanitizer, + stateSanitizer: devToolsSanitizer, + } + : false diff --git a/dapp/src/store/enhancers.ts b/dapp/src/store/enhancers.ts deleted file mode 100644 index ef089a73d..000000000 --- a/dapp/src/store/enhancers.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { encodeJSON } from "#/utils" -import { devToolsEnhancer } from "@redux-devtools/extension" - -// This sanitizer runs on store and action data before serializing for remote -// redux devtools. The goal is to end up with an object that is directly -// JSON-serializable and deserializable; the remote end will display the -// resulting objects without additional processing or decoding logic. -function devToolsSanitizer(input: T) { - switch (typeof input) { - // We can make use of encodeJSON instead of recursively looping through - // the input - case "bigint": - case "object": - // We only need to sanitize bigints and objects - // that may or may not contain them. - return JSON.parse(encodeJSON(input)) as T - default: - return input - } -} - -export const enhancers = import.meta.env.DEV - ? { - autoBatch: undefined, - devToolsEnhancer: devToolsEnhancer({ - actionSanitizer: devToolsSanitizer, - stateSanitizer: devToolsSanitizer, - }), - } - : {} diff --git a/dapp/src/store/index.ts b/dapp/src/store/index.ts index b099ca384..3353ac94a 100644 --- a/dapp/src/store/index.ts +++ b/dapp/src/store/index.ts @@ -1,13 +1,12 @@ import { configureStore } from "@reduxjs/toolkit" import { middleware } from "./middleware" import { reducer } from "./reducer" -import { enhancers } from "./enhancers" +import { devTools } from "./devTools" export const store = configureStore({ reducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware(middleware), - enhancers: (getDefaultEnhancers) => getDefaultEnhancers(enhancers), - devTools: !import.meta.env.PROD, + devTools, }) export type RootState = ReturnType diff --git a/dapp/src/utils/json.ts b/dapp/src/utils/json.ts index ed50aef94..3ceb7a3c2 100644 --- a/dapp/src/utils/json.ts +++ b/dapp/src/utils/json.ts @@ -3,11 +3,12 @@ * * @param input an object, array, or primitive to encode as JSON */ -export function encodeJSON(input: bigint | object | null): string { +export function encodeJSON(input: unknown): string { return JSON.stringify(input, (_, value): object | null => { if (typeof value === "bigint") { return { B_I_G_I_N_T: value.toString() } } - return value as object | null + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return value }) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5533f025e..3960009bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,9 +150,6 @@ importers: '@ledgerhq/wallet-api-client-react': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) - '@redux-devtools/extension': - specifier: ^3.3.0 - version: 3.3.0(redux@5.0.1) '@reduxjs/toolkit': specifier: ^2.2.0 version: 2.2.1(react-redux@9.1.0)(react@18.2.0) @@ -167,7 +164,7 @@ importers: version: 8.11.7(react-dom@18.2.0)(react@18.2.0) axios: specifier: ^1.6.7 - version: 1.6.7(debug@4.3.4) + version: 1.6.7 ethers: specifier: ^6.10.0 version: 6.10.0 @@ -474,7 +471,7 @@ packages: '@babel/traverse': 7.23.4 '@babel/types': 7.23.4 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1773,7 +1770,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.4 '@babel/types': 7.23.4 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3497,7 +3494,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 espree: 9.6.1 globals: 13.23.0 ignore: 5.3.0 @@ -4152,7 +4149,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6189,16 +6186,6 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@redux-devtools/extension@3.3.0(redux@5.0.1): - resolution: {integrity: sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==} - peerDependencies: - redux: ^3.1.0 || ^4.0.0 || ^5.0.0 - dependencies: - '@babel/runtime': 7.23.4 - immutable: 4.3.4 - redux: 5.0.1 - dev: false - /@reduxjs/toolkit@2.2.1(react-redux@9.1.0)(react@18.2.0): resolution: {integrity: sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==} peerDependencies: @@ -7339,7 +7326,7 @@ packages: '@typescript-eslint/type-utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.54.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -7384,7 +7371,7 @@ packages: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.54.0 typescript: 5.3.2 transitivePeerDependencies: @@ -7435,7 +7422,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.54.0 ts-api-utils: 1.0.3(typescript@5.3.2) typescript: 5.3.2 @@ -7482,7 +7469,7 @@ packages: dependencies: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8304,6 +8291,16 @@ packages: transitivePeerDependencies: - debug + /axios@1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + dependencies: + follow-redirects: 1.15.5 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /axios@1.6.7(debug@4.3.4): resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: @@ -8312,6 +8309,7 @@ packages: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + dev: true /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -10246,6 +10244,17 @@ packages: dependencies: ms: 2.1.3 + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -11494,7 +11503,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -12304,6 +12313,16 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /follow-redirects@1.15.5(debug@4.3.4): resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} @@ -12314,6 +12333,7 @@ packages: optional: true dependencies: debug: 4.3.4(supports-color@8.1.1) + dev: true /follow-redirects@1.5.10: resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} @@ -13947,6 +13967,7 @@ packages: /immutable@4.3.4: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} From b677f93c97f343bb8ac0604abcfdb82a022d44af Mon Sep 17 00:00:00 2001 From: ioay Date: Thu, 4 Apr 2024 10:09:43 +0200 Subject: [PATCH 08/11] Naming convention for btc hooks --- dapp/src/hooks/store/index.ts | 2 +- dapp/src/hooks/store/useEstimatedBTCBalance.ts | 6 ++++++ dapp/src/hooks/store/useEstimatedBtcBalance.ts | 2 +- dapp/src/pages/OverviewPage/PositionDetails.tsx | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 dapp/src/hooks/store/useEstimatedBTCBalance.ts diff --git a/dapp/src/hooks/store/index.ts b/dapp/src/hooks/store/index.ts index 9afcc7285..379d10f6b 100644 --- a/dapp/src/hooks/store/index.ts +++ b/dapp/src/hooks/store/index.ts @@ -1,3 +1,3 @@ export * from "./useAppDispatch" export * from "./useAppSelector" -export * from "./useEstimatedBtcBalance" +export * from "./useEstimatedBTCBalance" diff --git a/dapp/src/hooks/store/useEstimatedBTCBalance.ts b/dapp/src/hooks/store/useEstimatedBTCBalance.ts new file mode 100644 index 000000000..b8ce0bb67 --- /dev/null +++ b/dapp/src/hooks/store/useEstimatedBTCBalance.ts @@ -0,0 +1,6 @@ +import { selectEstimatedBtcBalance } from "#/store/btc" +import { useAppSelector } from "./useAppSelector" + +export function useEstimatedBTCBalance() { + return useAppSelector(selectEstimatedBtcBalance) +} diff --git a/dapp/src/hooks/store/useEstimatedBtcBalance.ts b/dapp/src/hooks/store/useEstimatedBtcBalance.ts index 9820c6c4b..b8ce0bb67 100644 --- a/dapp/src/hooks/store/useEstimatedBtcBalance.ts +++ b/dapp/src/hooks/store/useEstimatedBtcBalance.ts @@ -1,6 +1,6 @@ import { selectEstimatedBtcBalance } from "#/store/btc" import { useAppSelector } from "./useAppSelector" -export function useEstimatedBtcBalance() { +export function useEstimatedBTCBalance() { return useAppSelector(selectEstimatedBtcBalance) } diff --git a/dapp/src/pages/OverviewPage/PositionDetails.tsx b/dapp/src/pages/OverviewPage/PositionDetails.tsx index f6d9d42b5..b28460108 100644 --- a/dapp/src/pages/OverviewPage/PositionDetails.tsx +++ b/dapp/src/pages/OverviewPage/PositionDetails.tsx @@ -14,10 +14,10 @@ import { TextMd } from "#/components/shared/Typography" import { Info } from "#/assets/icons" import { ACTION_FLOW_TYPES, ActionFlowType } from "#/types" import TransactionModal from "#/components/TransactionModal" -import { useEstimatedBtcBalance } from "#/hooks/store" +import { useEstimatedBTCBalance } from "#/hooks/store" export default function PositionDetails(props: CardProps) { - const estimatedBtcBalance = useEstimatedBtcBalance() + const estimatedBtcBalance = useEstimatedBTCBalance() const [actionFlowType, setActionFlowType] = useState< ActionFlowType | undefined >(undefined) From 597b0f8970f5941ab8cb5bffad432678853f97c0 Mon Sep 17 00:00:00 2001 From: ioay Date: Thu, 4 Apr 2024 22:45:38 +0200 Subject: [PATCH 09/11] Type update for encjodeJSON function --- dapp/src/store/devTools.ts | 4 ++-- dapp/src/utils/json.ts | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dapp/src/store/devTools.ts b/dapp/src/store/devTools.ts index 220b34182..7495ca110 100644 --- a/dapp/src/store/devTools.ts +++ b/dapp/src/store/devTools.ts @@ -1,6 +1,6 @@ import { encodeJSON } from "#/utils" -function devToolsSanitizer(input: T) { +function devToolsSanitizer(input: unknown): unknown { switch (typeof input) { // We can make use of encodeJSON instead of recursively looping through // the input @@ -8,7 +8,7 @@ function devToolsSanitizer(input: T) { case "object": // We only need to sanitize bigints and objects // that may or may not contain them. - return JSON.parse(encodeJSON(input)) as T + return JSON.parse(encodeJSON(input)) default: return input } diff --git a/dapp/src/utils/json.ts b/dapp/src/utils/json.ts index 3ceb7a3c2..4214e25db 100644 --- a/dapp/src/utils/json.ts +++ b/dapp/src/utils/json.ts @@ -3,12 +3,11 @@ * * @param input an object, array, or primitive to encode as JSON */ -export function encodeJSON(input: unknown): string { - return JSON.stringify(input, (_, value): object | null => { +export function encodeJSON(input: unknown) { + return JSON.stringify(input, (_, value: unknown) => { if (typeof value === "bigint") { return { B_I_G_I_N_T: value.toString() } } - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return value }) } From d71a13b9e2cef5a8c053713954580f23a41e0e9e Mon Sep 17 00:00:00 2001 From: ioay Date: Thu, 4 Apr 2024 23:11:56 +0200 Subject: [PATCH 10/11] Passing shares balance to liquid popover --- dapp/src/components/LiquidStakingTokenPopover.tsx | 5 +++-- dapp/src/hooks/store/index.ts | 1 + dapp/src/hooks/store/useSharesBalance.ts | 6 ++++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 dapp/src/hooks/store/useSharesBalance.ts diff --git a/dapp/src/components/LiquidStakingTokenPopover.tsx b/dapp/src/components/LiquidStakingTokenPopover.tsx index b59b5b720..229a37ffa 100644 --- a/dapp/src/components/LiquidStakingTokenPopover.tsx +++ b/dapp/src/components/LiquidStakingTokenPopover.tsx @@ -10,7 +10,7 @@ import { IconButton, } from "@chakra-ui/react" import { SizeType } from "#/types" -import { useDocsDrawer, useWalletContext } from "#/hooks" +import { useDocsDrawer, useSharesBalance, useWalletContext } from "#/hooks" import { TextMd, TextSm } from "./shared/Typography" import Alert from "./shared/Alert" import { CurrencyBalance } from "./shared/CurrencyBalance" @@ -23,6 +23,7 @@ export function LiquidStakingTokenPopover({ }: LiquidStakingTokenPopoverProps) { const { isConnected } = useWalletContext() const { onOpen: openDocsDrawer } = useDocsDrawer() + const sharesBalance = useSharesBalance() return ( @@ -50,7 +51,7 @@ export function LiquidStakingTokenPopover({ Liquid staking token diff --git a/dapp/src/hooks/store/index.ts b/dapp/src/hooks/store/index.ts index 379d10f6b..ac22e8a41 100644 --- a/dapp/src/hooks/store/index.ts +++ b/dapp/src/hooks/store/index.ts @@ -1,3 +1,4 @@ export * from "./useAppDispatch" export * from "./useAppSelector" export * from "./useEstimatedBTCBalance" +export * from "./useSharesBalance" diff --git a/dapp/src/hooks/store/useSharesBalance.ts b/dapp/src/hooks/store/useSharesBalance.ts new file mode 100644 index 000000000..067e32e93 --- /dev/null +++ b/dapp/src/hooks/store/useSharesBalance.ts @@ -0,0 +1,6 @@ +import { selectSharesBalance } from "#/store/btc" +import { useAppSelector } from "./useAppSelector" + +export function useSharesBalance() { + return useAppSelector(selectSharesBalance) +} From d99c98f30137a33a77fe6639891d156a245290d0 Mon Sep 17 00:00:00 2001 From: ioay Date: Fri, 5 Apr 2024 09:29:00 +0200 Subject: [PATCH 11/11] Dapp build fix --- .../src/hooks/store/useEstimatedBtcBalance.ts | 6 ---- dapp/src/hooks/useFetchBtcBalance.ts | 28 ------------------- dapp/src/store/devTools.ts | 5 ++-- 3 files changed, 3 insertions(+), 36 deletions(-) delete mode 100644 dapp/src/hooks/store/useEstimatedBtcBalance.ts delete mode 100644 dapp/src/hooks/useFetchBtcBalance.ts diff --git a/dapp/src/hooks/store/useEstimatedBtcBalance.ts b/dapp/src/hooks/store/useEstimatedBtcBalance.ts deleted file mode 100644 index b8ce0bb67..000000000 --- a/dapp/src/hooks/store/useEstimatedBtcBalance.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { selectEstimatedBtcBalance } from "#/store/btc" -import { useAppSelector } from "./useAppSelector" - -export function useEstimatedBTCBalance() { - return useAppSelector(selectEstimatedBtcBalance) -} diff --git a/dapp/src/hooks/useFetchBtcBalance.ts b/dapp/src/hooks/useFetchBtcBalance.ts deleted file mode 100644 index 360135312..000000000 --- a/dapp/src/hooks/useFetchBtcBalance.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useEffect } from "react" -import { EthereumAddress } from "@acre-btc/sdk" -import { useAcreContext } from "#/acre-react/hooks" -import { logPromiseFailure } from "#/utils" -import { setEstimatedBtcBalance, setSharesBalance } from "#/store/btc" -import { useWalletContext } from "./useWalletContext" -import { useAppDispatch } from "./store" - -export function useFetchBTCBalance() { - const { acre, isInitialized } = useAcreContext() - const { ethAccount } = useWalletContext() - const dispatch = useAppDispatch() - - useEffect(() => { - const getBtcBalance = async () => { - if (!isInitialized || !ethAccount || !acre) return - - const chainIdentifier = EthereumAddress.from(ethAccount.address) - const sharesBalance = await acre.staking.sharesBalance(chainIdentifier) - const estimatedBitcoinBalance = - await acre.staking.estimatedBitcoinBalance(chainIdentifier) - - dispatch(setSharesBalance(sharesBalance)) - dispatch(setEstimatedBtcBalance(estimatedBitcoinBalance)) - } - logPromiseFailure(getBtcBalance()) - }, [acre, isInitialized, ethAccount, dispatch]) -} diff --git a/dapp/src/store/devTools.ts b/dapp/src/store/devTools.ts index 7495ca110..1edd8dee7 100644 --- a/dapp/src/store/devTools.ts +++ b/dapp/src/store/devTools.ts @@ -1,3 +1,4 @@ +import { DevToolsEnhancerOptions } from "@reduxjs/toolkit" import { encodeJSON } from "#/utils" function devToolsSanitizer(input: unknown): unknown { @@ -15,8 +16,8 @@ function devToolsSanitizer(input: unknown): unknown { } export const devTools = !import.meta.env.PROD - ? { + ? ({ actionSanitizer: devToolsSanitizer, stateSanitizer: devToolsSanitizer, - } + } as DevToolsEnhancerOptions) : false