From ecea95605ddcf57f94164f7fdfd38acbb2c7a6d4 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Wed, 15 Jun 2022 01:08:26 +0800 Subject: [PATCH 1/2] refactor: none provider --- .../EVM/src/state/Connection/provider.ts | 5 +++-- .../src/state/Connection/providers/None.ts | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 packages/plugins/EVM/src/state/Connection/providers/None.ts diff --git a/packages/plugins/EVM/src/state/Connection/provider.ts b/packages/plugins/EVM/src/state/Connection/provider.ts index 055ed653cdc4..d3d5ff0d5fbc 100644 --- a/packages/plugins/EVM/src/state/Connection/provider.ts +++ b/packages/plugins/EVM/src/state/Connection/provider.ts @@ -1,5 +1,5 @@ import { ProviderType } from '@masknet/web3-shared-evm' -import { BaseProvider } from './providers/Base' +import type { BaseProvider } from './providers/Base' import { CustomNetworkProvider } from './providers/CustomNetwork' import { MaskWalletProvider } from './providers/MaskWallet' import { MetaMaskProvider } from './providers/MetaMask' @@ -9,12 +9,13 @@ import { Coin98Provider } from './providers/Coin98' import { MathWalletProvider } from './providers/MathWallet' import FortmaticProvider from './providers/Fortmatic' import TorusProvider from './providers/Torus' +import { NoneProvider } from './providers/None' /** * Register all supported providers */ export const Providers: Record = { - [ProviderType.None]: new BaseProvider(), + [ProviderType.None]: new NoneProvider(), [ProviderType.MaskWallet]: new MaskWalletProvider(), [ProviderType.MetaMask]: new MetaMaskProvider(), [ProviderType.WalletConnect]: new WalletConnectProvider(), diff --git a/packages/plugins/EVM/src/state/Connection/providers/None.ts b/packages/plugins/EVM/src/state/Connection/providers/None.ts new file mode 100644 index 000000000000..11b70c3fe961 --- /dev/null +++ b/packages/plugins/EVM/src/state/Connection/providers/None.ts @@ -0,0 +1,19 @@ +import type { RequestArguments } from 'web3-core' +import type { ProviderOptions } from '@masknet/web3-shared-base' +import { ChainId, createPayload } from '@masknet/web3-shared-evm' +import { BaseProvider } from './Base' +import type { EVM_Provider } from '../types' +import { SharedContextSettings } from '../../../settings' + +export class NoneProvider extends BaseProvider implements EVM_Provider { + override async request( + requestArguments: RequestArguments, + options?: ProviderOptions, + ): Promise { + const response = await SharedContextSettings.value.send( + createPayload(0, requestArguments.method, requestArguments.params), + options, + ) + return response?.result as T + } +} From 1e70ed374131d177c4624f63005de077c9282a9d Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Wed, 15 Jun 2022 01:36:28 +0800 Subject: [PATCH 2/2] fix: provider middleware --- .../src/state/Connection/interceptors/MaskWallet.ts | 6 ++---- .../EVM/src/state/Connection/interceptors/None.ts | 11 +++++++++++ .../src/state/Connection/middleware/Interceptor.ts | 2 ++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/plugins/EVM/src/state/Connection/interceptors/None.ts diff --git a/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts b/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts index a02f43c56d75..a89665c4d2cd 100644 --- a/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts +++ b/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts @@ -1,13 +1,11 @@ import { toHex } from 'web3-utils' import { EthereumMethodType } from '@masknet/web3-shared-evm' import type { Context, Middleware } from '../types' -import { SharedContextSettings, Web3StateSettings } from '../../../settings' +import { SharedContextSettings } from '../../../settings' export class MaskWallet implements Middleware { async fn(context: Context, next: () => Promise) { - const { Connection } = Web3StateSettings.value - const { hasNativeAPI, send, account, chainId, signTransaction, signPersonalMessage, signTypedData } = - SharedContextSettings.value + const { hasNativeAPI, send, account, chainId } = SharedContextSettings.value // redirect to native app if (hasNativeAPI) { diff --git a/packages/plugins/EVM/src/state/Connection/interceptors/None.ts b/packages/plugins/EVM/src/state/Connection/interceptors/None.ts new file mode 100644 index 000000000000..2b814920b119 --- /dev/null +++ b/packages/plugins/EVM/src/state/Connection/interceptors/None.ts @@ -0,0 +1,11 @@ +import { isRiskMethod } from '@masknet/web3-shared-evm' +import type { Context, Middleware } from '../types' + +export class NoneWallet implements Middleware { + async fn(context: Context, next: () => Promise) { + if (isRiskMethod(context.method)) { + context.abort(new Error('No allowed.')) + } + await next() + } +} diff --git a/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts b/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts index 52ac8a888f1e..d3be9c5b1365 100644 --- a/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts +++ b/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts @@ -1,11 +1,13 @@ import { ProviderType } from '@masknet/web3-shared-evm' import type { Context, Middleware } from '../types' +import { NoneWallet } from '../interceptors/None' import { MaskWallet } from '../interceptors/MaskWallet' import { WalletConnect } from '../interceptors/WalletConnect' import { MetaMask } from '../interceptors/MetaMask' export class Interceptor implements Middleware { private interceptors: Partial>> = { + [ProviderType.None]: new NoneWallet(), [ProviderType.MaskWallet]: new MaskWallet(), [ProviderType.MetaMask]: new MetaMask(), [ProviderType.WalletConnect]: new WalletConnect(),