From 6ad2fbd6ef3632ecadf0a5cef4e57bd76b60baaa Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Wed, 15 Jun 2022 17:07:32 +0800 Subject: [PATCH 1/2] refactor: reduce getWallets queries --- packages/mask/src/plugin-infra/host.ts | 125 +++++++++++++------------ 1 file changed, 65 insertions(+), 60 deletions(-) diff --git a/packages/mask/src/plugin-infra/host.ts b/packages/mask/src/plugin-infra/host.ts index a6d4e04f0423..125959530442 100644 --- a/packages/mask/src/plugin-infra/host.ts +++ b/packages/mask/src/plugin-infra/host.ts @@ -17,78 +17,83 @@ import { currentMaskWalletAccountSettings, currentMaskWalletChainIdSettings } fr import { WalletMessages, WalletRPC } from '../plugins/Wallet/messages' import type { WalletConnectQRCodeDialogEvent } from '@masknet/plugin-wallet' +const SharedContext: Omit = { + nativeType: nativeAPI?.type, + hasNativeAPI, + + send: WalletRPC.sendPayload, + + fetch: Services.Helper.r2d2Fetch, + + openPopupWindow: Services.Helper.openPopupWindow, + closePopupWindow: Services.Helper.removePopupWindow, + + openWalletConnectDialog: (uri: string, callback) => { + const onClose = (ev: WalletConnectQRCodeDialogEvent) => { + if (ev.open) return + callback() + WalletMessages.events.walletConnectQRCodeDialogUpdated.off(onClose) + } + + WalletMessages.events.walletConnectQRCodeDialogUpdated.on(onClose) + WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ + open: true, + uri, + }) + }, + closeWalletConnectDialog: () => { + WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ + open: false, + }) + }, + + account: createSubscriptionFromValueRef(currentMaskWalletAccountSettings), + chainId: createSubscriptionFromValueRef(currentMaskWalletChainIdSettings), + + wallets: createSubscriptionFromAsync( + () => { + console.log('DEBUG: wallet rpc get wallets') + return WalletRPC.getWallets() + }, + EMPTY_LIST, + WalletMessages.events.walletsUpdated.on, + ), + walletPrimary: createSubscriptionFromAsync( + () => WalletRPC.getWalletPrimary(), + null, + WalletMessages.events.walletsUpdated.on, + ), + + personaSignMessage: Services.Identity.signWithPersona, + + updateAccount: WalletRPC.updateMaskAccount, + resetAccount: WalletRPC.resetMaskAccount, + selectAccount: WalletRPC.selectMaskAccount, + + signTransaction: WalletRPC.signTransaction, + signTypedData: WalletRPC.signTypedData, + signPersonalMessage: WalletRPC.signPersonalMessage, + + getWallets: WalletRPC.getWallets, + getWalletPrimary: WalletRPC.getWalletPrimary, + addWallet: WalletRPC.updateWallet, + updateWallet: WalletRPC.updateWallet, + removeWallet: WalletRPC.removeWallet, +} + export function createSharedContext(pluginID: string, signal: AbortSignal): Plugin.Shared.SharedContext { return { createKVStorage(type: 'memory' | 'persistent', defaultValues: T) { if (type === 'memory') return InMemoryStorages.Plugin.createSubScope(pluginID, defaultValues, signal) else return PersistentStorages.Plugin.createSubScope(pluginID, defaultValues, signal) }, - - nativeType: nativeAPI?.type, - hasNativeAPI, - - send: WalletRPC.sendPayload, - - fetch: Services.Helper.r2d2Fetch, - - openPopupWindow: Services.Helper.openPopupWindow, - closePopupWindow: Services.Helper.removePopupWindow, - - openWalletConnectDialog: (uri: string, callback) => { - const onClose = (ev: WalletConnectQRCodeDialogEvent) => { - if (ev.open) return - callback() - WalletMessages.events.walletConnectQRCodeDialogUpdated.off(onClose) - } - - WalletMessages.events.walletConnectQRCodeDialogUpdated.on(onClose) - WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ - open: true, - uri, - }) - }, - closeWalletConnectDialog: () => { - WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ - open: false, - }) - }, - - account: createSubscriptionFromValueRef(currentMaskWalletAccountSettings), - chainId: createSubscriptionFromValueRef(currentMaskWalletChainIdSettings), - currentPersona: createSubscriptionFromAsync( Services.Settings.getCurrentPersonaIdentifier, undefined, MaskMessages.events.currentPersonaIdentifier.on, signal, ), - - wallets: createSubscriptionFromAsync( - () => WalletRPC.getWallets(), - EMPTY_LIST, - WalletMessages.events.walletsUpdated.on, - ), - walletPrimary: createSubscriptionFromAsync( - () => WalletRPC.getWalletPrimary(), - null, - WalletMessages.events.walletsUpdated.on, - ), - - personaSignMessage: Services.Identity.signWithPersona, - - updateAccount: WalletRPC.updateMaskAccount, - resetAccount: WalletRPC.resetMaskAccount, - selectAccount: WalletRPC.selectMaskAccount, - - signTransaction: WalletRPC.signTransaction, - signTypedData: WalletRPC.signTypedData, - signPersonalMessage: WalletRPC.signPersonalMessage, - - getWallets: WalletRPC.getWallets, - getWalletPrimary: WalletRPC.getWalletPrimary, - addWallet: WalletRPC.updateWallet, - updateWallet: WalletRPC.updateWallet, - removeWallet: WalletRPC.removeWallet, + ... SharedContext, } } From bf4800f8831c0fe5ce89a844aeebc997ea31ac6f Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Wed, 15 Jun 2022 17:24:32 +0800 Subject: [PATCH 2/2] refactor: reduce persona queries --- packages/mask/src/plugin-infra/host.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/mask/src/plugin-infra/host.ts b/packages/mask/src/plugin-infra/host.ts index 125959530442..6fc34dd2ba7d 100644 --- a/packages/mask/src/plugin-infra/host.ts +++ b/packages/mask/src/plugin-infra/host.ts @@ -17,7 +17,13 @@ import { currentMaskWalletAccountSettings, currentMaskWalletChainIdSettings } fr import { WalletMessages, WalletRPC } from '../plugins/Wallet/messages' import type { WalletConnectQRCodeDialogEvent } from '@masknet/plugin-wallet' -const SharedContext: Omit = { +const SharedContext: Omit = { + currentPersona: createSubscriptionFromAsync( + Services.Settings.getCurrentPersonaIdentifier, + undefined, + MaskMessages.events.currentPersonaIdentifier.on, + ), + nativeType: nativeAPI?.type, hasNativeAPI, @@ -84,15 +90,9 @@ const SharedContext: Omit(type: 'memory' | 'persistent', defaultValues: T) { - if (type === 'memory') return InMemoryStorages.Plugin.createSubScope(pluginID, defaultValues, signal) - else return PersistentStorages.Plugin.createSubScope(pluginID, defaultValues, signal) + if (type === 'memory') return InMemoryStorages.Plugin.createSubScope(pluginID, defaultValues) + else return PersistentStorages.Plugin.createSubScope(pluginID, defaultValues) }, - currentPersona: createSubscriptionFromAsync( - Services.Settings.getCurrentPersonaIdentifier, - undefined, - MaskMessages.events.currentPersonaIdentifier.on, - signal, - ), ... SharedContext, } }