From 9b98add67b9fb2a446a25c718a693f0e60b96290 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 15 Jun 2022 17:33:06 +0800 Subject: [PATCH 1/2] fix(lucky drop): history too many requests --- packages/mask/shared/kv-storage.ts | 34 ++++++++++--------- .../shared/ApplicationSettingPluginList.tsx | 11 ++++-- .../SNSAdaptor/hooks/useAllPoolsAsSeller.ts | 6 ++-- .../ITO/SNSAdaptor/hooks/useClaimAll.ts | 6 ++-- .../mask/src/plugins/ITO/SNSAdaptor/index.tsx | 2 +- .../SNSAdaptor/hooks/useRedPacketHistory.ts | 9 +++-- .../Referral/SNSAdaptor/ReferralDialog.tsx | 1 + .../src/plugins/Referral/SNSAdaptor/index.tsx | 2 +- .../Savings/SNSAdaptor/SavingsDialog.tsx | 1 + 9 files changed, 40 insertions(+), 32 deletions(-) diff --git a/packages/mask/shared/kv-storage.ts b/packages/mask/shared/kv-storage.ts index 1b7be65d1294..85fa7bdc8753 100644 --- a/packages/mask/shared/kv-storage.ts +++ b/packages/mask/shared/kv-storage.ts @@ -30,24 +30,26 @@ export const PersistentStorages = { Settings: createPersistentKVStorage('settings', { debugging: false, }), - ApplicationEntryUnListedList: createPersistentKVStorage<{ [key: string]: boolean }>( + ApplicationEntryUnListedList: createPersistentKVStorage<{ current: { [key: string]: boolean } }>( ApplicationEntryUnlistedListKey, { - [PluginId.RedPacket]: false, - [PluginId.FileService]: false, - [PluginId.ITO]: false, - [`${PluginId.ITO}_claim`]: false, - [PluginId.CrossChainBridge]: false, - [PluginId.MaskBox]: false, - [PluginId.Savings]: false, - [PluginId.Avatar]: false, - [PluginId.Trader]: false, - [PluginId.Tips]: false, - [PluginId.Transak]: false, - [PluginId.Pets]: false, - [PluginId.FindTruman]: false, - [PluginId.GoPlusSecurity]: false, - [PluginId.Referral]: false, + current: { + [PluginId.RedPacket]: false, + [PluginId.FileService]: false, + [PluginId.ITO]: false, + [`${PluginId.ITO}_claim`]: false, + [PluginId.CrossChainBridge]: false, + [PluginId.MaskBox]: false, + [PluginId.Savings]: false, + [PluginId.Avatar]: false, + [PluginId.Trader]: false, + [PluginId.Tips]: false, + [PluginId.Transak]: false, + [PluginId.Pets]: false, + [PluginId.FindTruman]: false, + [PluginId.GoPlusSecurity]: false, + [PluginId.Referral]: false, + }, }, ), } diff --git a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx index e1ae1c7860e9..b1337bb4f6e1 100644 --- a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx +++ b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx @@ -15,12 +15,17 @@ export interface Application { // #region kv storage export function setUnlistedApp(app: Application, unlisted: boolean) { - PersistentStorages.ApplicationEntryUnListedList.storage[app.entry.ApplicationEntryID].setValue(unlisted) + const state = PersistentStorages.ApplicationEntryUnListedList.storage.current + if (!state.initialized) return + PersistentStorages.ApplicationEntryUnListedList.storage.current.setValue({ + ...state.value, + [app.entry.ApplicationEntryID]: unlisted, + }) } export function getUnlistedApp(app: Application): boolean { - const state = PersistentStorages.ApplicationEntryUnListedList.storage[app.entry.ApplicationEntryID] - return state.initialized ? state.value : true + const state = PersistentStorages.ApplicationEntryUnListedList.storage.current + return state.initialized ? state.value[app.entry.ApplicationEntryID] : true } // #endregion diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts index 935eacaf63bb..a60c73173055 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts @@ -1,4 +1,4 @@ -import { useBlockNumber, useChainId, useWeb3Connection, Web3Helper } from '@masknet/plugin-infra/web3' +import { useChainId, useWeb3Connection, Web3Helper } from '@masknet/plugin-infra/web3' import { NetworkPluginID } from '@masknet/web3-shared-base' import { ChainId, getITOConstants } from '@masknet/web3-shared-evm' import { useRef, useEffect } from 'react' @@ -12,7 +12,6 @@ export function useAllPoolsAsSeller(address: string) { const allPoolsRef = useRef([]) const chainId = useChainId(NetworkPluginID.PLUGIN_EVM) const connection = useWeb3Connection(NetworkPluginID.PLUGIN_EVM, { chainId }) - const { value: blockNumber = 0 } = useBlockNumber(NetworkPluginID.PLUGIN_EVM) useEffect(() => { allPoolsRef.current = [] @@ -24,11 +23,12 @@ export function useAllPoolsAsSeller(address: string) { pools: EMPTY_LIST, loadMore: false, } + const blockNumber = await connection.getBlockNumber() const _pools = await getAllPoolsAsSeller(address, blockNumber, chainId, connection) const pools = _pools.filter((a) => !allPoolsRef.current.map((b) => b.pool.pid).includes(a.pool.pid)) allPoolsRef.current = allPoolsRef.current.concat(pools) return { pools: allPoolsRef.current, loadMore: pools.length > 0 } - }, [address, blockNumber, chainId, connection]) + }, [address, chainId, connection]) } async function getAllPoolsAsSeller( diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimAll.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimAll.ts index d53f5a621b9c..71215e2d71de 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimAll.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimAll.ts @@ -3,7 +3,7 @@ import { useAsyncRetry } from 'react-use' import type { SwappedTokenType } from '../../types' import * as chain from '../utils/chain' import type { ChainId } from '@masknet/web3-shared-evm' -import { useBlockNumber, useWeb3Connection } from '@masknet/plugin-infra/web3' +import { useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID } from '@masknet/web3-shared-base' export function useClaimAll(swapperAddress: string, chainId: ChainId) { @@ -13,14 +13,14 @@ export function useClaimAll(swapperAddress: string, chainId: ChainId) { allPoolsRef.current = [] }, [chainId]) - const { value: blockNumber = 0 } = useBlockNumber(NetworkPluginID.PLUGIN_EVM, { chainId }) const connection = useWeb3Connection(NetworkPluginID.PLUGIN_EVM, { chainId }) const asyncResult = useAsyncRetry(async () => { if (allPoolsRef.current.length > 0 || !connection) return allPoolsRef.current + const blockNumber = await connection.getBlockNumber() const results = await chain.getClaimAllPools(chainId, blockNumber, swapperAddress, connection) allPoolsRef.current = results return allPoolsRef.current - }, [swapperAddress, blockNumber, chainId]) + }, [swapperAddress, chainId]) return { ...asyncResult, diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx index 878146b6d175..9e6d47b77c49 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx @@ -123,7 +123,7 @@ const sns: Plugin.SNSAdaptor.Definition = { : clickHandler } /> - setOpen(false)} /> + {open ? setOpen(false)} /> : null} ) }, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts index 5706c16c864d..35241589cf81 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts @@ -1,19 +1,18 @@ import { useAsyncRetry } from 'react-use' import { NetworkPluginID } from '@masknet/web3-shared-base' import { ChainId, getRedPacketConstants } from '@masknet/web3-shared-evm' -import { useBlockNumber, useWeb3Connection, Web3Helper } from '@masknet/plugin-infra/web3' +import { useWeb3Connection, Web3Helper } from '@masknet/plugin-infra/web3' import * as chain from '../utils/chain' import { RedPacketRPC } from '../../messages' export function useRedPacketHistory(address: string, chainId: ChainId) { - const { value: blockNumber = 0 } = useBlockNumber(NetworkPluginID.PLUGIN_EVM) const connection = useWeb3Connection(NetworkPluginID.PLUGIN_EVM, { chainId }) return useAsyncRetry(async () => { - if (!blockNumber || !connection) return [] - + if (!connection) return [] + const blockNumber = await connection.getBlockNumber() return getRedPacketHistory(address, chainId, blockNumber, connection) - }, [address, chainId, blockNumber, connection]) + }, [address, chainId, connection]) } async function getRedPacketHistory( diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/ReferralDialog.tsx b/packages/mask/src/plugins/Referral/SNSAdaptor/ReferralDialog.tsx index aafcbfecb7f0..9f0e60ebd172 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/ReferralDialog.tsx +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/ReferralDialog.tsx @@ -161,6 +161,7 @@ export function ReferralDialog({ open, onClose }: ReferralDialogProps) { return ( - setOpen(false)} /> + {open ? setOpen(false)} /> : null} ) }, diff --git a/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx b/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx index dee2a02a2b79..1de646ea47ae 100644 --- a/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx +++ b/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx @@ -104,6 +104,7 @@ export function SavingsDialog({ open, onClose }: SavingsDialogProps) { { if (selectedProtocol === null) { onClose?.() From 1013be45a4fcc8d8ce4f44010baf44d831e9cf50 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 15 Jun 2022 17:40:58 +0800 Subject: [PATCH 2/2] chore: reply code review --- .../src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts | 2 +- .../plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts index a60c73173055..351a2bd2d8f6 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAllPoolsAsSeller.ts @@ -37,7 +37,7 @@ async function getAllPoolsAsSeller( chainId: ChainId, connection: Web3Helper.Web3Connection, ) { - if (!connection) return [] + if (!connection) return EMPTY_LIST const { ITO2_CONTRACT_CREATION_BLOCK_HEIGHT } = getITOConstants(chainId) diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts index 35241589cf81..7eb3d6c885d7 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketHistory.ts @@ -1,6 +1,7 @@ import { useAsyncRetry } from 'react-use' import { NetworkPluginID } from '@masknet/web3-shared-base' import { ChainId, getRedPacketConstants } from '@masknet/web3-shared-evm' +import { EMPTY_LIST } from '@masknet/shared-base' import { useWeb3Connection, Web3Helper } from '@masknet/plugin-infra/web3' import * as chain from '../utils/chain' import { RedPacketRPC } from '../../messages' @@ -9,7 +10,7 @@ export function useRedPacketHistory(address: string, chainId: ChainId) { const connection = useWeb3Connection(NetworkPluginID.PLUGIN_EVM, { chainId }) return useAsyncRetry(async () => { - if (!connection) return [] + if (!connection) return EMPTY_LIST const blockNumber = await connection.getBlockNumber() return getRedPacketHistory(address, chainId, blockNumber, connection) }, [address, chainId, connection])