From 20688a163a6afc29fa5b1607cfc21a5f44a9574e Mon Sep 17 00:00:00 2001 From: unclebill Date: Mon, 22 Nov 2021 15:23:35 +0800 Subject: [PATCH 01/19] wip: solana wallet --- .i18n-codegen.json | 12 + packages/mask/.webpack/config.ts | 1 + packages/mask/package.json | 1 + packages/mask/src/plugin-infra/register.ts | 1 + packages/plugins/Solana/package.json | 20 + .../plugins/Solana/src/UI/Dashboard/index.tsx | 16 + .../Solana/src/UI/SNSAdaptor/index.tsx | 16 + .../plugins/Solana/src/UI/Web3State/index.ts | 61 + .../plugins/Solana/src/UI/Web3UI/index.tsx | 8 + .../src/UI/components/AccountOverview.tsx | 7 + .../Solana/src/UI/components/AssetList.tsx | 7 + .../src/UI/components/CollectionList.tsx | 7 + .../src/UI/components/DashboardAssetsTab.tsx | 7 + .../src/UI/components/DashboardHistoryTab.tsx | 7 + .../src/UI/components/DashboardOverview.tsx | 7 + .../UI/components/DashboardTransferTab.tsx | 7 + .../Solana/src/UI/components/PluginPanel.tsx | 102 ++ .../UI/components/ProviderIconClickBait.tsx | 28 + .../src/UI/components/TransactionList.tsx | 7 + packages/plugins/Solana/src/Worker/index.ts | 9 + packages/plugins/Solana/src/apis/index.ts | 72 + .../plugins/Solana/src/assets/phantom.png | Bin 0 -> 30151 bytes packages/plugins/Solana/src/assets/solana.png | Bin 0 -> 33009 bytes packages/plugins/Solana/src/base.ts | 19 + packages/plugins/Solana/src/constants.ts | 39 + .../plugins/Solana/src/helpers/formatter.ts | 5 + packages/plugins/Solana/src/helpers/index.ts | 1 + packages/plugins/Solana/src/hooks/index.ts | 1 + packages/plugins/Solana/src/index.ts | 23 + .../plugins/Solana/src/locales/en-US.json | 6 + .../plugins/Solana/src/locales/es-ES.json | 1 + .../plugins/Solana/src/locales/fa-IR.json | 1 + .../plugins/Solana/src/locales/fr-FR.json | 1 + packages/plugins/Solana/src/locales/index.ts | 30 + .../plugins/Solana/src/locales/it-IT.json | 1 + .../plugins/Solana/src/locales/ja-JP.json | 1 + .../plugins/Solana/src/locales/ko-KR.json | 1 + .../plugins/Solana/src/locales/qya-AA.json | 6 + .../plugins/Solana/src/locales/ru-RU.json | 1 + .../plugins/Solana/src/locales/zh-CN.json | 1 + .../plugins/Solana/src/locales/zh-TW.json | 1 + packages/plugins/Solana/src/messages.ts | 6 + packages/plugins/Solana/src/services.ts | 1 + packages/plugins/Solana/src/storage/index.ts | 15 + packages/plugins/Solana/src/types.ts | 3 + packages/plugins/Solana/tsconfig.json | 18 + .../web3-shared/solana/constants/index.ts | 1 + packages/web3-shared/solana/hooks/index.ts | 4 + .../web3-shared/solana/hooks/useAccount.ts | 7 + .../web3-shared/solana/hooks/useBalance.ts | 9 + .../solana/hooks/useChainConfig.ts | 14 + .../web3-shared/solana/hooks/useChainId.ts | 5 + packages/web3-shared/solana/index.ts | 5 +- packages/web3-shared/solana/package.json | 8 +- packages/web3-shared/solana/pipes/index.ts | 44 + packages/web3-shared/solana/sdk/index.ts | 8 + packages/web3-shared/solana/tsconfig.json | 3 +- packages/web3-shared/solana/types.ts | 14 + pnpm-lock.yaml | 1341 ++++++++++++----- pnpm-workspace.yaml | 1 + 60 files changed, 1659 insertions(+), 390 deletions(-) create mode 100644 packages/plugins/Solana/package.json create mode 100644 packages/plugins/Solana/src/UI/Dashboard/index.tsx create mode 100644 packages/plugins/Solana/src/UI/SNSAdaptor/index.tsx create mode 100644 packages/plugins/Solana/src/UI/Web3State/index.ts create mode 100644 packages/plugins/Solana/src/UI/Web3UI/index.tsx create mode 100644 packages/plugins/Solana/src/UI/components/AccountOverview.tsx create mode 100644 packages/plugins/Solana/src/UI/components/AssetList.tsx create mode 100644 packages/plugins/Solana/src/UI/components/CollectionList.tsx create mode 100644 packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx create mode 100644 packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx create mode 100644 packages/plugins/Solana/src/UI/components/DashboardOverview.tsx create mode 100644 packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx create mode 100644 packages/plugins/Solana/src/UI/components/PluginPanel.tsx create mode 100644 packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx create mode 100644 packages/plugins/Solana/src/UI/components/TransactionList.tsx create mode 100644 packages/plugins/Solana/src/Worker/index.ts create mode 100644 packages/plugins/Solana/src/apis/index.ts create mode 100644 packages/plugins/Solana/src/assets/phantom.png create mode 100644 packages/plugins/Solana/src/assets/solana.png create mode 100644 packages/plugins/Solana/src/base.ts create mode 100644 packages/plugins/Solana/src/constants.ts create mode 100644 packages/plugins/Solana/src/helpers/formatter.ts create mode 100644 packages/plugins/Solana/src/helpers/index.ts create mode 100644 packages/plugins/Solana/src/hooks/index.ts create mode 100644 packages/plugins/Solana/src/index.ts create mode 100644 packages/plugins/Solana/src/locales/en-US.json create mode 100644 packages/plugins/Solana/src/locales/es-ES.json create mode 100644 packages/plugins/Solana/src/locales/fa-IR.json create mode 100644 packages/plugins/Solana/src/locales/fr-FR.json create mode 100644 packages/plugins/Solana/src/locales/index.ts create mode 100644 packages/plugins/Solana/src/locales/it-IT.json create mode 100644 packages/plugins/Solana/src/locales/ja-JP.json create mode 100644 packages/plugins/Solana/src/locales/ko-KR.json create mode 100644 packages/plugins/Solana/src/locales/qya-AA.json create mode 100644 packages/plugins/Solana/src/locales/ru-RU.json create mode 100644 packages/plugins/Solana/src/locales/zh-CN.json create mode 100644 packages/plugins/Solana/src/locales/zh-TW.json create mode 100644 packages/plugins/Solana/src/messages.ts create mode 100644 packages/plugins/Solana/src/services.ts create mode 100644 packages/plugins/Solana/src/storage/index.ts create mode 100644 packages/plugins/Solana/src/types.ts create mode 100644 packages/plugins/Solana/tsconfig.json create mode 100644 packages/web3-shared/solana/constants/index.ts create mode 100644 packages/web3-shared/solana/hooks/index.ts create mode 100644 packages/web3-shared/solana/hooks/useAccount.ts create mode 100644 packages/web3-shared/solana/hooks/useBalance.ts create mode 100644 packages/web3-shared/solana/hooks/useChainConfig.ts create mode 100644 packages/web3-shared/solana/hooks/useChainId.ts create mode 100644 packages/web3-shared/solana/pipes/index.ts create mode 100644 packages/web3-shared/solana/sdk/index.ts create mode 100644 packages/web3-shared/solana/types.ts diff --git a/.i18n-codegen.json b/.i18n-codegen.json index b42e205a2468..a4cde9461702 100644 --- a/.i18n-codegen.json +++ b/.i18n-codegen.json @@ -133,6 +133,18 @@ "trans": "Translate", "sourceMap": "inline" } + }, + { + "input": "./packages/plugins/Solana/src/locales/en-US.json", + "output": "./packages/plugins/Solana/src/locales/i18n_generated", + "parser": "i18next", + "generator": { + "type": "i18next/react-hooks", + "hooks": "useI18N", + "namespace": "com.maskbook.solana", + "trans": "Translate", + "sourceMap": "inline" + } } ] } diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index fe5dc496fde0..83a6c573aeaa 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -81,6 +81,7 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { '@masknet/plugin-flow': join(__dirname, '../../plugins/Flow/src/'), '@masknet/plugin-rss3': join(__dirname, '../../plugins/RSS3/src/'), '@masknet/plugin-dao': join(__dirname, '../../plugins/DAO/src/'), + '@masknet/plugin-solana': join(__dirname, '../../plugins/Solana/src/'), '@masknet/plugin-wallet': join(__dirname, '../../plugins/Wallet/src/'), '@masknet/plugin-file-service': join(__dirname, '../../plugins/FileService/src/'), '@masknet/external-plugin-previewer': join(__dirname, '../../external-plugin-previewer/src/'), diff --git a/packages/mask/package.json b/packages/mask/package.json index abafe44a6898..1f8eb73348ed 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -25,6 +25,7 @@ "@masknet/plugin-rss3": "workspace:*", "@masknet/plugin-dao": "workspace:*", "@masknet/plugin-debugger": "workspace:*", + "@masknet/plugin-solana": "workspace:*", "@masknet/plugin-infra": "workspace:*", "@masknet/plugin-wallet": "workspace:*", "@masknet/public-api": "workspace:*", diff --git a/packages/mask/src/plugin-infra/register.ts b/packages/mask/src/plugin-infra/register.ts index a2c6575b7f10..efa0e0a60ca8 100644 --- a/packages/mask/src/plugin-infra/register.ts +++ b/packages/mask/src/plugin-infra/register.ts @@ -7,6 +7,7 @@ import '@masknet/plugin-flow' import '@masknet/plugin-file-service' import '@masknet/plugin-rss3' import '@masknet/plugin-dao' +import '@masknet/plugin-solana' import '../plugins/Wallet' import '../plugins/EVM' import '../plugins/RedPacket' diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json new file mode 100644 index 000000000000..37af3188b82b --- /dev/null +++ b/packages/plugins/Solana/package.json @@ -0,0 +1,20 @@ +{ + "name": "@masknet/plugin-solana", + "private": true, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "dependencies": { + "@masknet/icons": "workspace:*", + "@masknet/plugin-infra": "workspace:*", + "@masknet/shared": "workspace:*", + "@masknet/shared-base": "workspace:*", + "@masknet/theme": "workspace:*", + "@masknet/web3-shared-solana": "workspace:*", + "@solana/wallet-adapter-base": "^0.7.0", + "@solana/wallet-adapter-react": "^0.13.1", + "@solana/wallet-adapter-wallets": "^0.11.3", + "@solana/web3.js": "^1.30.2", + "bignumber.js": "^9.0.1", + "react-use": "^17.3.1" + } +} diff --git a/packages/plugins/Solana/src/UI/Dashboard/index.tsx b/packages/plugins/Solana/src/UI/Dashboard/index.tsx new file mode 100644 index 000000000000..d8d1fdbfa573 --- /dev/null +++ b/packages/plugins/Solana/src/UI/Dashboard/index.tsx @@ -0,0 +1,16 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../../base' +import { Web3UI } from '../Web3UI' +import { createWeb3State } from '../Web3State' +import { setupStorage, StorageDefaultValue } from '../../storage' + +const sns: Plugin.Dashboard.Definition = { + ...base, + init(signal, context) { + setupStorage(context.createKVStorage('memory', StorageDefaultValue)) + sns.Web3State = createWeb3State(signal) + }, + Web3UI, +} + +export default sns diff --git a/packages/plugins/Solana/src/UI/SNSAdaptor/index.tsx b/packages/plugins/Solana/src/UI/SNSAdaptor/index.tsx new file mode 100644 index 000000000000..c209a46482c9 --- /dev/null +++ b/packages/plugins/Solana/src/UI/SNSAdaptor/index.tsx @@ -0,0 +1,16 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../../base' +import { Web3UI } from '../Web3UI' +import { createWeb3State } from '../Web3State' +import { setupStorage, StorageDefaultValue } from '../../storage' + +const sns: Plugin.SNSAdaptor.Definition = { + ...base, + init(signal, context) { + setupStorage(context.createKVStorage('memory', StorageDefaultValue)) + sns.Web3State = createWeb3State(signal) + }, + Web3UI, +} + +export default sns diff --git a/packages/plugins/Solana/src/UI/Web3State/index.ts b/packages/plugins/Solana/src/UI/Web3State/index.ts new file mode 100644 index 000000000000..0b9c6641295d --- /dev/null +++ b/packages/plugins/Solana/src/UI/Web3State/index.ts @@ -0,0 +1,61 @@ +import BigNumber from 'bignumber.js' +import type { Web3Plugin } from '@masknet/plugin-infra' +import { + ChainId, + NetworkType, + ProviderType, + resolveBlockLinkOnExplorer, + resolveTransactionLinkOnExplorer, + resolveAddressLinkOnExplorer, +} from '@masknet/web3-shared-solana' +import { createConstantSubscription, mapSubscription } from '@masknet/shared-base' +import { getStorage, StorageDefaultValue } from '../../storage' +import { formatAddress } from '../../helpers' +import { getFungibleAssets } from '../../apis' + +function createSubscriptionFromUser(getter: (value: typeof StorageDefaultValue.user) => T) { + return mapSubscription(getStorage().user.subscription, getter) +} + +export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilities.Capabilities { + const chainId = ChainId.Testnet + + return { + Shared: { + allowTestnet: createConstantSubscription(false), + account: createSubscriptionFromUser((user) => { + return user?.addr ?? '' + }), + wallets: createSubscriptionFromUser((user): Web3Plugin.Wallet[] => { + if (!user?.addr) return [] + return [ + { + name: 'Solana', + address: user?.addr, + hasDerivationPath: false, + hasStoredKeyInfo: false, + }, + ] + }), + chainId: createConstantSubscription(chainId), + networkType: createConstantSubscription(NetworkType.Solana), + providerType: createSubscriptionFromUser((user) => { + return user?.addr ? ProviderType.Blocto : undefined + }), + }, + Asset: { + getFungibleAssets, + }, + Utils: { + formatAddress, + formatBalance: (value) => new BigNumber(value).toFixed(), + formatCurrency: (value) => new BigNumber(value).toFixed(), + + isChainIdValid: () => true, + + resolveTransactionLink: resolveTransactionLinkOnExplorer, + resolveAddressLink: resolveAddressLinkOnExplorer, + resolveBlockLink: resolveBlockLinkOnExplorer, + }, + } +} diff --git a/packages/plugins/Solana/src/UI/Web3UI/index.tsx b/packages/plugins/Solana/src/UI/Web3UI/index.tsx new file mode 100644 index 000000000000..017a04ffe144 --- /dev/null +++ b/packages/plugins/Solana/src/UI/Web3UI/index.tsx @@ -0,0 +1,8 @@ +import type { Web3Plugin } from '@masknet/plugin-infra' +import { ProviderIconClickBait } from '../components/ProviderIconClickBait' + +export const Web3UI: Web3Plugin.UI.UI = { + SelectProviderDialog: { + ProviderIconClickBait, + }, +} diff --git a/packages/plugins/Solana/src/UI/components/AccountOverview.tsx b/packages/plugins/Solana/src/UI/components/AccountOverview.tsx new file mode 100644 index 000000000000..01c47df04cd9 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/AccountOverview.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface AccountOverviewProps {} + +export function AccountOverview(props: AccountOverviewProps) { + return The current account overview. +} diff --git a/packages/plugins/Solana/src/UI/components/AssetList.tsx b/packages/plugins/Solana/src/UI/components/AssetList.tsx new file mode 100644 index 000000000000..340222116c48 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/AssetList.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface AssetListProps {} + +export function AssetList(props: AssetListProps) { + return No Asset. +} diff --git a/packages/plugins/Solana/src/UI/components/CollectionList.tsx b/packages/plugins/Solana/src/UI/components/CollectionList.tsx new file mode 100644 index 000000000000..207993efb99c --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/CollectionList.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface CollectionListProps {} + +export function CollectionList(props: CollectionListProps) { + return No Collection. +} diff --git a/packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx b/packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx new file mode 100644 index 000000000000..8bcec1fff6b5 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface DashboardAssetsTabProps {} + +export function DashboardAssetsTab(props: DashboardAssetsTabProps) { + return Dashboard Assets Tab. +} diff --git a/packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx b/packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx new file mode 100644 index 000000000000..1b3a1295b76a --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface DashboardHistoryTabProps {} + +export function DashboardHistoryTab(props: DashboardHistoryTabProps) { + return Dashboard History Tab. +} diff --git a/packages/plugins/Solana/src/UI/components/DashboardOverview.tsx b/packages/plugins/Solana/src/UI/components/DashboardOverview.tsx new file mode 100644 index 000000000000..94fc5b2816a4 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/DashboardOverview.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface DashboardOverviewProps {} + +export function DashboardOverview(props: DashboardOverviewProps) { + return Dashboard Overview. +} diff --git a/packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx b/packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx new file mode 100644 index 000000000000..b39faeede170 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface DashboardTransferTabProps {} + +export function DashboardTransferTab(props: DashboardTransferTabProps) { + return Dashboard Transfer Tab. +} diff --git a/packages/plugins/Solana/src/UI/components/PluginPanel.tsx b/packages/plugins/Solana/src/UI/components/PluginPanel.tsx new file mode 100644 index 000000000000..92079d14f4cb --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/PluginPanel.tsx @@ -0,0 +1,102 @@ +import { CopyIcon } from '@masknet/icons' +import { makeStyles } from '@masknet/theme' +import { useAccount } from '@masknet/web3-shared-solana' +import { Box, Button, IconButton, Typography } from '@mui/material' +import { useCallback } from 'react' +import { useCopyToClipboard } from 'react-use' +import { useI18N } from '../../locales' + +const useStyles = makeStyles()((theme) => ({ + root: { + display: 'flex', + flexDirection: 'column', + height: 350, + padding: theme.spacing(0, 2, 0, 3), + }, + main: { + display: 'flex', + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'flex-start', + }, + copy: { + width: 16, + height: 16, + cursor: 'pointer', + stroke: theme.palette.text.secondary, + }, + label: { + fontSize: 18, + }, + balance: { + fontSize: 24, + }, + image: { + width: 24, + height: 24, + }, +})) + +export interface PluginPanelProps {} + +export function PluginPanel(props: PluginPanelProps) { + const t = useI18N() + const { classes } = useStyles() + + const { value: account } = useAccount() + const address = '0x000000000' + const balance = '10' + const [, copyToClipboard] = useCopyToClipboard() + + const onLogIn = useCallback(() => console.log('login'), []) + const onSignUp = useCallback(() => console.log('signup'), []) + const onLogOut = useCallback(() => console.log('logout'), []) + + console.log(account) + + if (address) + return ( + + + + + Profile Information + + + + {address} + copyToClipboard(address)}> + + + + + + {balance} Solana + + + + + + + + ) + + return ( + + + {t.card_state_text_no_profile()} + + + + + + + ) +} diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx new file mode 100644 index 000000000000..b82d1f5f1e34 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -0,0 +1,28 @@ +import { useCallback, cloneElement, isValidElement } from 'react' +import type { Web3Plugin } from '@masknet/plugin-infra' + +export function ProviderIconClickBait({ + network, + provider, + children, + onSubmit, + onClick, +}: Web3Plugin.UI.ProviderIconClickBaitProps) { + const onLogIn = useCallback(async () => { + onClick?.(network, provider) + console.log('login') + }, [network, provider, onClick, onSubmit]) + + return ( + <> + {isValidElement(children) + ? cloneElement(children, { + ...children.props, + ...{ + onClick: onLogIn, + }, + }) + : children} + + ) +} diff --git a/packages/plugins/Solana/src/UI/components/TransactionList.tsx b/packages/plugins/Solana/src/UI/components/TransactionList.tsx new file mode 100644 index 000000000000..b6c4590a1e68 --- /dev/null +++ b/packages/plugins/Solana/src/UI/components/TransactionList.tsx @@ -0,0 +1,7 @@ +import { Typography } from '@mui/material' + +export interface TransactionListProps {} + +export function TransactionList(props: TransactionListProps) { + return No transaction. +} diff --git a/packages/plugins/Solana/src/Worker/index.ts b/packages/plugins/Solana/src/Worker/index.ts new file mode 100644 index 000000000000..824d930b57e1 --- /dev/null +++ b/packages/plugins/Solana/src/Worker/index.ts @@ -0,0 +1,9 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' +import '../messages' + +const worker: Plugin.Worker.Definition = { + ...base, + init(signal) {}, +} +export default worker diff --git a/packages/plugins/Solana/src/apis/index.ts b/packages/plugins/Solana/src/apis/index.ts new file mode 100644 index 000000000000..d16c0d7c95b5 --- /dev/null +++ b/packages/plugins/Solana/src/apis/index.ts @@ -0,0 +1,72 @@ +import { CurrencyType, Pagination, TokenType } from '@masknet/plugin-infra' +import { ChainId } from '@masknet/web3-shared-solana' + +export function getFungibleAssets(address: string, providerType: string, networkType: string, pagination?: Pagination) { + return Promise.resolve([ + { + id: '0x1654653399040a61', + chainId: ChainId.MainnetBeta, + balance: '3042328822', + price: { + [CurrencyType.USD]: '42.64', + }, + value: { + [CurrencyType.USD]: '42.62', + }, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5426.png', + token: { + id: '0x1654653399040a61', + chainId: ChainId.MainnetBeta, + type: TokenType.Fungible, + name: 'Solana', + symbol: 'Solana', + decimals: 8, + address: '0x1654653399040a61', + }, + }, + { + id: '0x3c5959b568896393', + chainId: ChainId.MainnetBeta, + balance: '0', + price: { + [CurrencyType.USD]: '42.64', + }, + value: { + [CurrencyType.USD]: '0', + }, + logoURI: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABkCAYAAAB0F0VpAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABmoAMABAAAAAEAAABkAAAAAHl4y70AAALkaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTAyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMDA8L2V4aWY6UGl4ZWxZRGltZW5z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', + token: { + id: '0x3c5959b568896393', + chainId: ChainId.MainnetBeta, + type: TokenType.Fungible, + name: 'Solana USD', + symbol: 'SUSD', + decimals: 8, + address: '0x3c5959b568896393', + }, + }, + { + id: '0xcfdd90d4a00f7b5b', + chainId: ChainId.MainnetBeta, + balance: '0', + price: { + [CurrencyType.USD]: '42.64', + }, + value: { + [CurrencyType.USD]: '0', + }, + logoURI: + 'data:image/png;base64,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dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz7mnKrlkb3lkI0g55qE6KSH5pysPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPkhzdWFuIExlZTwvcGRmOkF1dGhvcj4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6eG1wPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvJz4KICA8eG1wOkNyZWF0b3JUb29sPkNhbnZhPC94bXA6Q3JlYXRvclRvb2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0ncic/PolbVtwAAAAASUVORK5CYII=', + token: { + id: '0xcfdd90d4a00f7b5b', + chainId: ChainId.MainnetBeta, + type: TokenType.Fungible, + name: 'USD Tether', + symbol: 'USDT', + decimals: 8, + address: '0xcfdd90d4a00f7b5b', + }, + }, + ]) +} diff --git a/packages/plugins/Solana/src/assets/phantom.png b/packages/plugins/Solana/src/assets/phantom.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0c961445d07ad8d8d6b85440d4954f13df2352 GIT binary patch literal 30151 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 Fe*omnNzDKN literal 0 HcmV?d00001 diff --git a/packages/plugins/Solana/src/assets/solana.png b/packages/plugins/Solana/src/assets/solana.png new file mode 100644 index 0000000000000000000000000000000000000000..a045f6e2f9155331cafdce3fa8638545d782443b GIT binary patch literal 33009 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 8) return address + return `${address.substr(0, 2 + size)}...${address.substr(-size)}` +} diff --git a/packages/plugins/Solana/src/helpers/index.ts b/packages/plugins/Solana/src/helpers/index.ts new file mode 100644 index 000000000000..80c86669067a --- /dev/null +++ b/packages/plugins/Solana/src/helpers/index.ts @@ -0,0 +1 @@ +export * from './formatter' diff --git a/packages/plugins/Solana/src/hooks/index.ts b/packages/plugins/Solana/src/hooks/index.ts new file mode 100644 index 000000000000..336ce12bb910 --- /dev/null +++ b/packages/plugins/Solana/src/hooks/index.ts @@ -0,0 +1 @@ +export {} diff --git a/packages/plugins/Solana/src/index.ts b/packages/plugins/Solana/src/index.ts new file mode 100644 index 000000000000..48ab76cba202 --- /dev/null +++ b/packages/plugins/Solana/src/index.ts @@ -0,0 +1,23 @@ +import { registerPlugin } from '@masknet/plugin-infra' +import { base } from './base' + +registerPlugin({ + ...base, + SNSAdaptor: { + load: () => import('./UI/SNSAdaptor'), + hotModuleReload: (hot) => + import.meta.webpackHot && + import.meta.webpackHot.accept('./UI/SNSAdaptor', () => hot(import('./UI/SNSAdaptor'))), + }, + Dashboard: { + load: () => import('./UI/Dashboard'), + hotModuleReload: (hot) => + import.meta.webpackHot && + import.meta.webpackHot.accept('./UI/Dashboard', () => hot(import('./UI/Dashboard'))), + }, + Worker: { + load: () => import('./Worker'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./Worker', () => hot(import('./Worker'))), + }, +}) diff --git a/packages/plugins/Solana/src/locales/en-US.json b/packages/plugins/Solana/src/locales/en-US.json new file mode 100644 index 000000000000..ee5e3125b8c9 --- /dev/null +++ b/packages/plugins/Solana/src/locales/en-US.json @@ -0,0 +1,6 @@ +{ + "button_log_in": "Log In", + "button_log_out": "Log Out", + "button_sign_up": "Sign Up", + "card_state_text_no_profile": "No Profile" +} diff --git a/packages/plugins/Solana/src/locales/es-ES.json b/packages/plugins/Solana/src/locales/es-ES.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/es-ES.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/fa-IR.json b/packages/plugins/Solana/src/locales/fa-IR.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/fa-IR.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/fr-FR.json b/packages/plugins/Solana/src/locales/fr-FR.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/fr-FR.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/index.ts b/packages/plugins/Solana/src/locales/index.ts new file mode 100644 index 000000000000..947f5bf3f420 --- /dev/null +++ b/packages/plugins/Solana/src/locales/index.ts @@ -0,0 +1,30 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts +import en_US from './en-US.json' +import es_ES from './es-ES.json' +import fa_IR from './fa-IR.json' +import fr_FR from './fr-FR.json' +import it_IT from './it-IT.json' +import ja_JP from './ja-JP.json' +import ko_KR from './ko-KR.json' +import qya_AA from './qya-AA.json' +import ru_RU from './ru-RU.json' +import zh_CN from './zh-CN.json' +import zh_TW from './zh-TW.json' + +export * from './i18n_generated' +export const languages = { + en: en_US, + es: es_ES, + fa: fa_IR, + fr: fr_FR, + it: it_IT, + ja: ja_JP, + ko: ko_KR, + qy: qya_AA, + ru: ru_RU, + 'zh-CN': zh_CN, + zh: zh_TW, +} diff --git a/packages/plugins/Solana/src/locales/it-IT.json b/packages/plugins/Solana/src/locales/it-IT.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/it-IT.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/ja-JP.json b/packages/plugins/Solana/src/locales/ja-JP.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/ja-JP.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/ko-KR.json b/packages/plugins/Solana/src/locales/ko-KR.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/ko-KR.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/qya-AA.json b/packages/plugins/Solana/src/locales/qya-AA.json new file mode 100644 index 000000000000..b3c231a9fe1c --- /dev/null +++ b/packages/plugins/Solana/src/locales/qya-AA.json @@ -0,0 +1,6 @@ +{ + "button_log_in": "crwdns9789:0crwdne9789:0", + "button_log_out": "crwdns9791:0crwdne9791:0", + "button_sign_up": "crwdns9793:0crwdne9793:0", + "card_state_text_no_profile": "crwdns9795:0crwdne9795:0" +} diff --git a/packages/plugins/Solana/src/locales/ru-RU.json b/packages/plugins/Solana/src/locales/ru-RU.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/ru-RU.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/zh-CN.json b/packages/plugins/Solana/src/locales/zh-CN.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/zh-CN.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/locales/zh-TW.json b/packages/plugins/Solana/src/locales/zh-TW.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/Solana/src/locales/zh-TW.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/Solana/src/messages.ts b/packages/plugins/Solana/src/messages.ts new file mode 100644 index 000000000000..2ab1707c64d9 --- /dev/null +++ b/packages/plugins/Solana/src/messages.ts @@ -0,0 +1,6 @@ +import { createPluginMessage, createPluginRPC } from '@masknet/plugin-infra' +import { PLUGIN_ID } from './constants' + +if (import.meta.webpackHot) import.meta.webpackHot.accept() +const SolanaMessage = createPluginMessage(PLUGIN_ID) +export const SolanaRPC = createPluginRPC(PLUGIN_ID, () => import('./services'), SolanaMessage.rpc) diff --git a/packages/plugins/Solana/src/services.ts b/packages/plugins/Solana/src/services.ts new file mode 100644 index 000000000000..5914b704d67f --- /dev/null +++ b/packages/plugins/Solana/src/services.ts @@ -0,0 +1 @@ +export * from './apis' diff --git a/packages/plugins/Solana/src/storage/index.ts b/packages/plugins/Solana/src/storage/index.ts new file mode 100644 index 000000000000..c457e366e056 --- /dev/null +++ b/packages/plugins/Solana/src/storage/index.ts @@ -0,0 +1,15 @@ +import type { ScopedStorage } from '@masknet/shared-base' + +export const StorageDefaultValue = { + user: null, +} + +let storage: ScopedStorage = null! + +export function setupStorage(_: typeof storage) { + storage = _ +} + +export function getStorage() { + return storage.storage +} diff --git a/packages/plugins/Solana/src/types.ts b/packages/plugins/Solana/src/types.ts new file mode 100644 index 000000000000..7e98c52e47e2 --- /dev/null +++ b/packages/plugins/Solana/src/types.ts @@ -0,0 +1,3 @@ +export interface FungibleToken { + address: string +} diff --git a/packages/plugins/Solana/tsconfig.json b/packages/plugins/Solana/tsconfig.json new file mode 100644 index 000000000000..1c52138b65b9 --- /dev/null +++ b/packages/plugins/Solana/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "tsBuildInfoFile": "dist/.tsbuildinfo", + "resolveJsonModule": true + }, + "include": ["src", "src/**/*.json"], + "references": [ + { "path": "../../icons" }, + { "path": "../../plugin-infra" }, + { "path": "../../shared" }, + { "path": "../../shared-base" }, + { "path": "../../theme" }, + { "path": "../../web3-shared/solana" } + ] +} diff --git a/packages/web3-shared/solana/constants/index.ts b/packages/web3-shared/solana/constants/index.ts new file mode 100644 index 000000000000..336ce12bb910 --- /dev/null +++ b/packages/web3-shared/solana/constants/index.ts @@ -0,0 +1 @@ +export {} diff --git a/packages/web3-shared/solana/hooks/index.ts b/packages/web3-shared/solana/hooks/index.ts new file mode 100644 index 000000000000..d724bae93835 --- /dev/null +++ b/packages/web3-shared/solana/hooks/index.ts @@ -0,0 +1,4 @@ +export * from './useAccount' +export * from './useBalance' +export * from './useChainId' +export * from './useChainConfig' diff --git a/packages/web3-shared/solana/hooks/useAccount.ts b/packages/web3-shared/solana/hooks/useAccount.ts new file mode 100644 index 000000000000..eba81f4d04c2 --- /dev/null +++ b/packages/web3-shared/solana/hooks/useAccount.ts @@ -0,0 +1,7 @@ +import { useAsyncRetry } from 'react-use' + +export function useAccount() { + return useAsyncRetry(async () => { + return '0x000000000' + }, []) +} diff --git a/packages/web3-shared/solana/hooks/useBalance.ts b/packages/web3-shared/solana/hooks/useBalance.ts new file mode 100644 index 000000000000..b8eeccb00910 --- /dev/null +++ b/packages/web3-shared/solana/hooks/useBalance.ts @@ -0,0 +1,9 @@ +import { useMemo } from 'react' +import { useAccount } from './useAccount' + +export function useBalance() { + const { value: account } = useAccount() + return useMemo(() => { + return account?.balance ?? '0' + }, [account?.balance]) +} diff --git a/packages/web3-shared/solana/hooks/useChainConfig.ts b/packages/web3-shared/solana/hooks/useChainConfig.ts new file mode 100644 index 000000000000..d1f2ef3cf014 --- /dev/null +++ b/packages/web3-shared/solana/hooks/useChainConfig.ts @@ -0,0 +1,14 @@ +import { useMemo } from 'react' +import type { ChainId } from '../types' +import { useAuthConstants } from '../constants' + +export function useChainConfig(chainId: ChainId) { + const authConstants = useAuthConstants(chainId) + + return useMemo(() => { + return { + 'accessNode.api': authConstants.ACCESS_NODE_API, + 'discovery.wallet': authConstants.DISCOVERY_WALLET, + } + }, [authConstants]) +} diff --git a/packages/web3-shared/solana/hooks/useChainId.ts b/packages/web3-shared/solana/hooks/useChainId.ts new file mode 100644 index 000000000000..d3d2b0c85b6e --- /dev/null +++ b/packages/web3-shared/solana/hooks/useChainId.ts @@ -0,0 +1,5 @@ +import { ChainId } from '../types' + +export function useChainId() { + return ChainId.Mainnet +} diff --git a/packages/web3-shared/solana/index.ts b/packages/web3-shared/solana/index.ts index 336ce12bb910..eb228c55b200 100644 --- a/packages/web3-shared/solana/index.ts +++ b/packages/web3-shared/solana/index.ts @@ -1 +1,4 @@ -export {} +export * from './sdk' +export * from './types' +export * from './pipes' +export * from './hooks' diff --git a/packages/web3-shared/solana/package.json b/packages/web3-shared/solana/package.json index 95c1370158a3..b4322381fd4e 100644 --- a/packages/web3-shared/solana/package.json +++ b/packages/web3-shared/solana/package.json @@ -2,5 +2,11 @@ "name": "@masknet/web3-shared-solana", "private": true, "main": "./dist/index.js", - "types": "./dist/index.d.ts" + "types": "./dist/index.d.ts", + "dependencies": { + "@masknet/web3-constants": "workspace:*", + "@masknet/web3-kit": "workspace:*", + "react-use": "^17.3.1", + "urlcat": "^2.0.4" + } } diff --git a/packages/web3-shared/solana/pipes/index.ts b/packages/web3-shared/solana/pipes/index.ts new file mode 100644 index 000000000000..d53407f750cf --- /dev/null +++ b/packages/web3-shared/solana/pipes/index.ts @@ -0,0 +1,44 @@ +import urlcat from 'urlcat' +import { createLookupTableResolver } from '@masknet/web3-kit' +import { ChainId, ProviderType } from '../types' + +export const resolveChainName = createLookupTableResolver( + { + [ChainId.Mainnet]: 'mainnet', + [ChainId.Testnet]: 'testnet', + }, + () => 'Unknown chain id', +) + +export const resolveProviderName = createLookupTableResolver( + { + [ProviderType.Phantom]: 'Phantom', + [ProviderType.Sollet]: 'Sollet', + }, + () => 'Unknown provider type', +) + +export const resolveLinkOnExplorer = createLookupTableResolver( + { + [ChainId.MainnetBeta]: 'https://explorer.solana.com/', + [ChainId.Testnet]: 'https://explorer.solana.com/?cluster=testnet', + [ChainId.Devnet]: 'https://explorer.solana.com/?cluster=devnet', + }, + () => 'Unknown chain id', +) + +export function resolveTransactionLinkOnExplorer(chainId: ChainId, tx: string) { + return urlcat(resolveLinkOnExplorer(chainId), '/transaction/:tx', { + tx, + }) +} + +export function resolveAddressLinkOnExplorer(chainId: ChainId, address: string) { + return urlcat(resolveLinkOnExplorer(chainId), '/account/:address', { + address, + }) +} + +export function resolveBlockLinkOnExplorer(chainId: ChainId, blockNumber: string) { + return '' +} diff --git a/packages/web3-shared/solana/sdk/index.ts b/packages/web3-shared/solana/sdk/index.ts new file mode 100644 index 000000000000..1d3fe5a367fa --- /dev/null +++ b/packages/web3-shared/solana/sdk/index.ts @@ -0,0 +1,8 @@ +import type { ChainId } from '../types' +import { getAuthConstants } from '../constants' + +export function createClient(chainId: ChainId) { + const authConstants = getAuthConstants(chainId) + + return {} +} diff --git a/packages/web3-shared/solana/tsconfig.json b/packages/web3-shared/solana/tsconfig.json index 5863529e241a..9c09406d2dfe 100644 --- a/packages/web3-shared/solana/tsconfig.json +++ b/packages/web3-shared/solana/tsconfig.json @@ -5,5 +5,6 @@ "outDir": "../dist/solana", "tsBuildInfoFile": "../dist/solana.tsbuildinfo" }, - "include": ["./", "./**/*.json"] + "include": ["./", "./**/*.json"], + "references": [{ "path": "../../web3-kit" }] } diff --git a/packages/web3-shared/solana/types.ts b/packages/web3-shared/solana/types.ts new file mode 100644 index 000000000000..7cd801e066e2 --- /dev/null +++ b/packages/web3-shared/solana/types.ts @@ -0,0 +1,14 @@ +export enum ChainId { + MainnetBeta = 1, + Testnet = 2, + Devnet = 2, +} + +export enum NetworkType { + Solana = 'Solana', +} + +export enum ProviderType { + Phantom = 'Phantom', + Sollet = 'Sollet', +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f13a8f31a03..e071bff83ea1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -206,8 +206,8 @@ importers: json-stable-stringify: 1.0.1 react-avatar-editor: 12.0.0_2a5ce53653c2861b1c74a6612fe40887 react-hook-form: 7.22.5_react@18.0.0-rc.0 - react-router: 6.0.0-beta.4_history@5.2.0+react@18.0.0-rc.0 - react-router-dom: 6.0.0-beta.4_154c53788755629e2430b224cbac559e + react-router: 6.1.1_react@18.0.0-rc.0 + react-router-dom: 6.1.1_757a802188413a36d4f24237d13b8e90 react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 unstated-next: 1.1.0 urlcat: 2.0.4 @@ -295,6 +295,7 @@ importers: '@masknet/plugin-flow': workspace:* '@masknet/plugin-infra': workspace:* '@masknet/plugin-rss3': workspace:* + '@masknet/plugin-solana': workspace:* '@masknet/plugin-wallet': workspace:* '@masknet/public-api': workspace:* '@masknet/sdk': workspace:* @@ -431,6 +432,7 @@ importers: '@masknet/plugin-flow': link:../plugins/Flow '@masknet/plugin-infra': link:../plugin-infra '@masknet/plugin-rss3': link:../plugins/RSS3 + '@masknet/plugin-solana': link:../plugins/Solana '@masknet/plugin-wallet': link:../plugins/Wallet '@masknet/public-api': link:../public-api '@masknet/sdk': link:../mask-sdk @@ -720,6 +722,34 @@ importers: react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 urlcat: 2.0.4 + packages/plugins/Solana: + specifiers: + '@masknet/icons': workspace:* + '@masknet/plugin-infra': workspace:* + '@masknet/shared': workspace:* + '@masknet/shared-base': workspace:* + '@masknet/theme': workspace:* + '@masknet/web3-shared-solana': workspace:* + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/wallet-adapter-react': ^0.13.1 + '@solana/wallet-adapter-wallets': ^0.11.3 + '@solana/web3.js': ^1.30.2 + bignumber.js: ^9.0.1 + react-use: ^17.3.1 + dependencies: + '@masknet/icons': link:../../icons + '@masknet/plugin-infra': link:../../plugin-infra + '@masknet/shared': link:../../shared + '@masknet/shared-base': link:../../shared-base + '@masknet/theme': link:../../theme + '@masknet/web3-shared-solana': link:../../web3-shared/solana + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-react': 0.13.1_f3bbd4dd73ec9f0f5441e1ae63d85c8e + '@solana/wallet-adapter-wallets': 0.11.3_81a881bbe6f175c24647acd053eda3ac + '@solana/web3.js': 1.31.0 + bignumber.js: 9.0.1 + react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 + packages/plugins/Wallet: specifiers: '@masknet/plugin-infra': workspace:* @@ -1055,7 +1085,16 @@ importers: urlcat: 2.0.4 packages/web3-shared/solana: - specifiers: {} + specifiers: + '@masknet/web3-constants': workspace:* + '@masknet/web3-kit': workspace:* + react-use: ^17.3.1 + urlcat: ^2.0.4 + dependencies: + '@masknet/web3-constants': link:../../web3-constants + '@masknet/web3-kit': link:../../web3-kit + react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 + urlcat: 2.0.4 packages: @@ -1186,13 +1225,6 @@ packages: '@babel/highlight': 7.16.0 dev: true - /@babel/code-frame/7.15.8: - resolution: {integrity: sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.14.5 - dev: true - /@babel/code-frame/7.16.0: resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==} engines: {node: '>=6.9.0'} @@ -1202,7 +1234,6 @@ packages: /@babel/compat-data/7.16.0: resolution: {integrity: sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==} engines: {node: '>=6.9.0'} - dev: false /@babel/compat-data/7.16.4: resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==} @@ -1214,10 +1245,10 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.0 - '@babel/generator': 7.16.0 + '@babel/generator': 7.16.5 '@babel/helper-module-transforms': 7.16.5 '@babel/helpers': 7.16.5 - '@babel/parser': 7.16.4 + '@babel/parser': 7.16.6 '@babel/template': 7.16.0 '@babel/traverse': 7.16.5 '@babel/types': 7.16.0 @@ -1241,10 +1272,10 @@ packages: '@babel/generator': 7.16.0 '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.0 '@babel/helper-module-transforms': 7.16.0 - '@babel/helpers': 7.16.3 - '@babel/parser': 7.16.4 + '@babel/helpers': 7.16.5 + '@babel/parser': 7.16.2 '@babel/template': 7.16.0 - '@babel/traverse': 7.16.3 + '@babel/traverse': 7.16.0 '@babel/types': 7.16.0 convert-source-map: 1.8.0 debug: 4.3.2 @@ -1300,6 +1331,7 @@ packages: '@babel/types': 7.16.0 jsesc: 2.5.2 source-map: 0.5.7 + dev: true /@babel/generator/7.16.5: resolution: {integrity: sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==} @@ -1308,7 +1340,6 @@ packages: '@babel/types': 7.16.0 jsesc: 2.5.2 source-map: 0.5.7 - dev: true /@babel/helper-annotate-as-pure/7.16.0: resolution: {integrity: sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==} @@ -1325,26 +1356,13 @@ packages: '@babel/types': 7.16.0 dev: true - /@babel/helper-compilation-targets/7.16.0_@babel+core@7.16.5: - resolution: {integrity: sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.16.0 - '@babel/core': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - browserslist: 4.18.1 - semver: 6.3.0 - dev: false - /@babel/helper-compilation-targets/7.16.3_@babel+core@7.16.0: resolution: {integrity: sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.16.4 + '@babel/compat-data': 7.16.0 '@babel/core': 7.16.0 '@babel/helper-validator-option': 7.14.5 browserslist: 4.19.1 @@ -1357,12 +1375,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.16.4 + '@babel/compat-data': 7.16.0 '@babel/core': 7.16.5 '@babel/helper-validator-option': 7.14.5 browserslist: 4.19.1 semver: 6.3.0 - dev: true /@babel/helper-create-class-features-plugin/7.16.0_@babel+core@7.16.5: resolution: {integrity: sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==} @@ -1400,7 +1417,7 @@ packages: '@babel/core': 7.16.5 '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/traverse': 7.16.5 debug: 4.3.3 lodash.debounce: 4.0.8 @@ -1410,35 +1427,17 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider/0.2.3_@babel+core@7.16.5: - resolution: {integrity: sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/traverse': 7.16.0 - debug: 4.3.2 - lodash.debounce: 4.0.8 - resolve: 1.20.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/helper-define-polyfill-provider/0.2.4_@babel+core@7.16.5: resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.5 + '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/traverse': 7.16.0 - debug: 4.3.2 + '@babel/helper-plugin-utils': 7.16.5 + '@babel/traverse': 7.16.5 + debug: 4.3.3 lodash.debounce: 4.0.8 resolve: 1.20.0 semver: 6.3.0 @@ -1454,7 +1453,7 @@ packages: '@babel/core': 7.16.5 '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/traverse': 7.16.5 debug: 4.3.3 lodash.debounce: 4.0.8 @@ -1469,7 +1468,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.16.0 - dev: true /@babel/helper-explode-assignable-expression/7.16.0: resolution: {integrity: sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==} @@ -1521,7 +1519,7 @@ packages: '@babel/helper-split-export-declaration': 7.16.0 '@babel/helper-validator-identifier': 7.15.7 '@babel/template': 7.16.0 - '@babel/traverse': 7.16.3 + '@babel/traverse': 7.16.0 '@babel/types': 7.16.0 transitivePeerDependencies: - supports-color @@ -1561,7 +1559,6 @@ packages: /@babel/helper-plugin-utils/7.16.5: resolution: {integrity: sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-remap-async-to-generator/7.16.4: resolution: {integrity: sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==} @@ -1626,17 +1623,6 @@ packages: - supports-color dev: true - /@babel/helpers/7.16.3: - resolution: {integrity: sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.3 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helpers/7.16.5: resolution: {integrity: sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==} engines: {node: '>=6.9.0'} @@ -1648,15 +1634,6 @@ packages: - supports-color dev: true - /@babel/highlight/7.14.5: - resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.15.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/highlight/7.16.0: resolution: {integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==} engines: {node: '>=6.9.0'} @@ -1669,7 +1646,7 @@ packages: resolution: {integrity: sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==} engines: {node: '>=6.0.0'} hasBin: true - dev: false + dev: true /@babel/parser/7.16.4: resolution: {integrity: sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==} @@ -1689,7 +1666,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.0_@babel+core@7.16.5: @@ -1699,7 +1676,7 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.5 dev: true @@ -1711,7 +1688,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-remap-async-to-generator': 7.16.4 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.5 transitivePeerDependencies: @@ -1726,7 +1703,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 transitivePeerDependencies: - supports-color dev: true @@ -1739,7 +1716,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.16.5 transitivePeerDependencies: - supports-color @@ -1753,7 +1730,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-decorators': 7.16.0_@babel+core@7.16.5 transitivePeerDependencies: - supports-color @@ -1766,7 +1743,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.5 dev: true @@ -1777,7 +1754,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-export-default-from': 7.16.0_@babel+core@7.16.5 dev: true @@ -1788,7 +1765,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.16.5 dev: true @@ -1799,7 +1776,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.5 dev: true @@ -1810,7 +1787,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.5 dev: true @@ -1821,7 +1798,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.5 dev: true @@ -1832,7 +1809,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.5 dev: true @@ -1842,7 +1819,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 '@babel/plugin-transform-parameters': 7.16.3_@babel+core@7.12.9 dev: true @@ -1853,10 +1830,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.16.4 + '@babel/compat-data': 7.16.0 '@babel/core': 7.16.5 '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.5 '@babel/plugin-transform-parameters': 7.16.3_@babel+core@7.16.5 dev: true @@ -1868,7 +1845,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.5 dev: true @@ -1879,7 +1856,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.5 dev: true @@ -1892,7 +1869,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 transitivePeerDependencies: - supports-color dev: true @@ -1906,7 +1883,7 @@ packages: '@babel/core': 7.16.5 '@babel/helper-annotate-as-pure': 7.16.0 '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.5 transitivePeerDependencies: - supports-color @@ -1920,7 +1897,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.16.5: @@ -1929,7 +1906,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.16.5: @@ -1947,7 +1924,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.16.5: @@ -1957,7 +1934,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-decorators/7.16.0_@babel+core@7.16.5: @@ -1967,7 +1944,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.5: @@ -1976,7 +1953,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-export-default-from/7.16.0_@babel+core@7.16.5: @@ -1986,7 +1963,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.16.5: @@ -1995,7 +1972,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-flow/7.16.0: @@ -2004,7 +1981,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-flow/7.16.0_@babel+core@7.16.5: @@ -2014,7 +1991,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.16.5: @@ -2032,7 +2009,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: @@ -2041,7 +2018,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-jsx/7.16.0: @@ -2068,7 +2045,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.16.5: @@ -2077,7 +2054,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.16.5: @@ -2086,7 +2063,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.9: @@ -2095,7 +2072,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.5: @@ -2104,7 +2081,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.16.5: @@ -2113,7 +2090,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.16.5: @@ -2122,7 +2099,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.16.5: @@ -2132,7 +2109,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.16.5: @@ -2142,7 +2119,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-typescript/7.16.0_@babel+core@7.16.5: @@ -2152,7 +2129,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-syntax-typescript/7.16.5_@babel+core@7.16.5: @@ -2172,7 +2149,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-async-to-generator/7.16.0_@babel+core@7.16.5: @@ -2183,7 +2160,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-remap-async-to-generator': 7.16.4 transitivePeerDependencies: - supports-color @@ -2196,7 +2173,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-block-scoping/7.16.0_@babel+core@7.16.5: @@ -2206,7 +2183,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-classes/7.16.0_@babel+core@7.16.5: @@ -2219,7 +2196,7 @@ packages: '@babel/helper-annotate-as-pure': 7.16.0 '@babel/helper-function-name': 7.16.0 '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-replace-supers': 7.16.0 '@babel/helper-split-export-declaration': 7.16.0 globals: 11.12.0 @@ -2234,7 +2211,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-destructuring/7.16.0_@babel+core@7.16.5: @@ -2244,7 +2221,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-dotall-regex/7.16.0_@babel+core@7.16.5: @@ -2255,7 +2232,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-duplicate-keys/7.16.0_@babel+core@7.16.5: @@ -2265,7 +2242,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-exponentiation-operator/7.16.0_@babel+core@7.16.5: @@ -2276,7 +2253,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-flow-strip-types/7.16.0: @@ -2285,7 +2262,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-flow': 7.16.0 dev: true @@ -2296,7 +2273,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-flow': 7.16.0_@babel+core@7.16.5 dev: true @@ -2307,7 +2284,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-function-name/7.16.0_@babel+core@7.16.5: @@ -2318,7 +2295,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-function-name': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-literals/7.16.0_@babel+core@7.16.5: @@ -2328,7 +2305,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-member-expression-literals/7.16.0_@babel+core@7.16.5: @@ -2338,7 +2315,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-modules-amd/7.16.0_@babel+core@7.16.5: @@ -2349,7 +2326,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color @@ -2363,7 +2340,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-simple-access': 7.16.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -2379,7 +2356,7 @@ packages: '@babel/core': 7.16.5 '@babel/helper-hoist-variables': 7.16.0 '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-identifier': 7.15.7 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -2394,7 +2371,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 transitivePeerDependencies: - supports-color dev: true @@ -2416,7 +2393,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-object-super/7.16.0_@babel+core@7.16.5: @@ -2426,7 +2403,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-replace-supers': 7.16.0 transitivePeerDependencies: - supports-color @@ -2439,7 +2416,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-parameters/7.16.3_@babel+core@7.16.5: @@ -2449,7 +2426,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-property-literals/7.16.0_@babel+core@7.16.5: @@ -2459,7 +2436,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-react-display-name/7.16.0: @@ -2468,7 +2445,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-react-display-name/7.16.0_@babel+core@7.16.5: @@ -2478,7 +2455,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-react-jsx-development/7.16.0: @@ -2508,7 +2485,7 @@ packages: dependencies: '@babel/helper-annotate-as-pure': 7.16.0 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-jsx': 7.16.0 '@babel/types': 7.16.0 dev: true @@ -2522,7 +2499,7 @@ packages: '@babel/core': 7.16.5 '@babel/helper-annotate-as-pure': 7.16.0 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.5 '@babel/types': 7.16.0 dev: true @@ -2534,7 +2511,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-react-pure-annotations/7.16.0_@babel+core@7.16.5: @@ -2545,7 +2522,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-regenerator/7.16.0_@babel+core@7.16.5: @@ -2565,7 +2542,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-runtime/7.15.0_@babel+core@7.16.5: @@ -2576,7 +2553,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 babel-plugin-polyfill-corejs2: 0.2.3_@babel+core@7.16.5 babel-plugin-polyfill-corejs3: 0.2.4_@babel+core@7.16.5 babel-plugin-polyfill-regenerator: 0.2.3_@babel+core@7.16.5 @@ -2592,7 +2569,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-spread/7.16.0_@babel+core@7.16.5: @@ -2602,7 +2579,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 dev: true @@ -2613,7 +2590,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-template-literals/7.16.0_@babel+core@7.16.5: @@ -2623,7 +2600,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-typeof-symbol/7.16.0_@babel+core@7.16.5: @@ -2633,7 +2610,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-typescript/7.16.1_@babel+core@7.16.5: @@ -2644,7 +2621,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-syntax-typescript': 7.16.0_@babel+core@7.16.5 transitivePeerDependencies: - supports-color @@ -2657,7 +2634,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/plugin-transform-unicode-regex/7.16.0_@babel+core@7.16.5: @@ -2668,7 +2645,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 dev: true /@babel/preset-env/7.16.4_@babel+core@7.16.5: @@ -2680,7 +2657,7 @@ packages: '@babel/compat-data': 7.16.4 '@babel/core': 7.16.5 '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-option': 7.14.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.2_@babel+core@7.16.5 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.0_@babel+core@7.16.5 @@ -2750,7 +2727,7 @@ packages: babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.16.5 babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.16.5 babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.16.5 - core-js-compat: 3.19.3 + core-js-compat: 3.20.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -2762,7 +2739,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-option': 7.14.5 '@babel/plugin-transform-flow-strip-types': 7.16.0 dev: true @@ -2774,7 +2751,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-option': 7.14.5 '@babel/plugin-transform-flow-strip-types': 7.16.0_@babel+core@7.16.5 dev: true @@ -2785,7 +2762,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/plugin-proposal-unicode-property-regex': 7.16.0_@babel+core@7.16.5 '@babel/plugin-transform-dotall-regex': 7.16.0_@babel+core@7.16.5 '@babel/types': 7.16.0 @@ -2798,7 +2775,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-option': 7.14.5 '@babel/plugin-transform-react-display-name': 7.16.0 '@babel/plugin-transform-react-jsx': 7.16.0 @@ -2813,7 +2790,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-option': 7.14.5 '@babel/plugin-transform-react-display-name': 7.16.0_@babel+core@7.16.5 '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.5 @@ -2828,7 +2805,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@babel/helper-validator-option': 7.14.5 '@babel/plugin-transform-typescript': 7.16.1_@babel+core@7.16.5 transitivePeerDependencies: @@ -2898,23 +2875,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false - - /@babel/traverse/7.16.3: - resolution: {integrity: sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/generator': 7.16.0 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-hoist-variables': 7.16.0 - '@babel/helper-split-export-declaration': 7.16.0 - '@babel/parser': 7.16.4 - '@babel/types': 7.16.0 - debug: 4.3.2 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color dev: true /@babel/traverse/7.16.5: @@ -2933,7 +2893,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types/7.16.0: resolution: {integrity: sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==} @@ -2996,6 +2955,20 @@ packages: - google-protobuf dev: false + /@blocto/sdk/0.2.18: + resolution: {integrity: sha512-jMaI2h7ZXawR4MWYj3fnvrGIiJKvIqB82IsSEQLc9MkdHDVvuF0r5JzBaGZxbhxN4+I8NQjKvJYTG1CGKRGwbw==} + dependencies: + '@solana/web3.js': 1.31.0 + bs58: 4.0.1 + buffer: 6.0.3 + eip1193-provider: 1.0.1 + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + /@cnakazawa/watch/1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} @@ -3550,11 +3523,6 @@ packages: web-ext-types: 3.2.1 dev: true - /@discoveryjs/json-ext/0.5.5: - resolution: {integrity: sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==} - engines: {node: '>=10.0.0'} - dev: true - /@discoveryjs/json-ext/0.5.6: resolution: {integrity: sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==} engines: {node: '>=10.0.0'} @@ -3810,7 +3778,7 @@ packages: resolution: {integrity: sha512-UdkhFWzWcJCZVsj1O/H8/oqj/0RVYjLc1OhPjBrQdALAkQHpCp8xXI4WLnuGTADqTdJZww0NtgwG+TRPkXt27w==} dependencies: crc-32: 1.2.0 - ethereumjs-util: 7.1.3 + ethereumjs-util: 7.1.0 /@ethereumjs/tx/3.3.0: resolution: {integrity: sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA==} @@ -3917,6 +3885,12 @@ packages: dependencies: '@ethersproject/logger': 5.4.0 + /@ethersproject/bytes/5.5.0: + resolution: {integrity: sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==} + dependencies: + '@ethersproject/logger': 5.5.0 + dev: false + /@ethersproject/constants/5.4.0: resolution: {integrity: sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q==} dependencies: @@ -4008,6 +3982,10 @@ packages: /@ethersproject/logger/5.4.0: resolution: {integrity: sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ==} + /@ethersproject/logger/5.5.0: + resolution: {integrity: sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==} + dev: false + /@ethersproject/networks/5.4.1: resolution: {integrity: sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig==} dependencies: @@ -4160,6 +4138,14 @@ packages: hash.js: 1.1.7 dev: false + /@ethersproject/sha2/5.5.0: + resolution: {integrity: sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==} + dependencies: + '@ethersproject/bytes': 5.5.0 + '@ethersproject/logger': 5.5.0 + hash.js: 1.1.7 + dev: false + /@ethersproject/signing-key/5.4.0: resolution: {integrity: sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A==} dependencies: @@ -4539,16 +4525,70 @@ packages: chalk: 4.1.2 dev: true - /@json-rpc-tools/types/1.7.6: - resolution: {integrity: sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==} + /@json-rpc-tools/provider/1.7.6: + resolution: {integrity: sha512-z7D3xvJ33UfCGv77n40lbzOYjZKVM3k2+5cV7xS8G6SCvKTzMkhkUYuD/qzQUNT4cG/lv0e9mRToweEEVLVVmA==} + dependencies: + '@json-rpc-tools/utils': 1.7.6 + axios: 0.21.1 + safe-json-utils: 1.1.1 + ws: 7.5.5 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + + /@json-rpc-tools/types/1.7.6: + resolution: {integrity: sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==} + dependencies: + keyvaluestorage-interface: 1.0.0 + dev: false + + /@json-rpc-tools/utils/1.6.1: + resolution: {integrity: sha512-cNwP4QapAls+xATU8zLLqPYa9qCbgwEyWEK7vE1oH91b3LfbUYwHtiWZ1+rv0X/mh/9cWNTo2Oi2Sah/QX0WwA==} + dependencies: + '@json-rpc-tools/types': 1.7.6 + dev: false + + /@json-rpc-tools/utils/1.7.6: + resolution: {integrity: sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw==} + dependencies: + '@json-rpc-tools/types': 1.7.6 + '@pedrouid/environment': 1.0.1 + dev: false + + /@ledgerhq/devices/6.11.2: + resolution: {integrity: sha512-j2SoG0Ifm7khsPKC2UFhJIoi1oCDCvJemmO+pz7Oc9jx8JRhIGtCfqEIUhL+ZIl0TrIYuApPLaSqJjiFi7VGCQ==} dependencies: - keyvaluestorage-interface: 1.0.0 + '@ledgerhq/errors': 6.10.0 + '@ledgerhq/logs': 6.10.0 + rxjs: 6.6.7 + semver: 7.3.5 dev: false - /@json-rpc-tools/utils/1.6.1: - resolution: {integrity: sha512-cNwP4QapAls+xATU8zLLqPYa9qCbgwEyWEK7vE1oH91b3LfbUYwHtiWZ1+rv0X/mh/9cWNTo2Oi2Sah/QX0WwA==} + /@ledgerhq/errors/6.10.0: + resolution: {integrity: sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg==} + dev: false + + /@ledgerhq/hw-transport-webhid/6.11.2: + resolution: {integrity: sha512-y/Cv2oRDXy0wsGQsSrNi6e8DziGRNbgTiW7dgXcenI/1RfsCN+2hPfNMr8a9s2zPJ8Tfv2Sm5VubbspWDhPUCQ==} dependencies: - '@json-rpc-tools/types': 1.7.6 + '@ledgerhq/devices': 6.11.2 + '@ledgerhq/errors': 6.10.0 + '@ledgerhq/hw-transport': 6.11.2 + '@ledgerhq/logs': 6.10.0 + dev: false + + /@ledgerhq/hw-transport/6.11.2: + resolution: {integrity: sha512-VZbGfyQ8iFl2W6TUkVmQ3rz8kyOXMbOdFiht3VNlglMe3KBGJWOjW9s/5LhOR348NJs797B1gl4V0Zqmn11kUg==} + dependencies: + '@ledgerhq/devices': 6.11.2 + '@ledgerhq/errors': 6.10.0 + events: 3.3.0 + dev: false + + /@ledgerhq/logs/6.10.0: + resolution: {integrity: sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw==} dev: false /@magic-works/i18n-codegen/0.0.6_typescript@4.6.0-dev.20211202: @@ -4986,6 +5026,16 @@ packages: resolution: {integrity: sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==} dev: false + /@peculiar/asn1-schema/2.0.38: + resolution: {integrity: sha512-zZ64UpCTm9me15nuCpPgJghSdbEm8atcDQPCyK+bKXjZAQ1735NCZXCSCfbckbQ4MH36Rm9403n/qMq77LFDzQ==} + dependencies: + '@types/asn1js': 2.0.2 + asn1js: 2.2.0 + pvtsutils: 1.2.1 + tslib: 2.3.1 + dev: false + optional: true + /@peculiar/asn1-schema/2.0.44: resolution: {integrity: sha512-uaCnjQ9A9WwQSMuDJcNOCYEPXTahgKbFMvI7eMOMd8lXgx0J1eU7F3BoMsK5PFxa3dVUxjSQbaOjfgGoeHGgoQ==} dependencies: @@ -5002,16 +5052,16 @@ packages: tslib: 2.3.1 dev: false - /@peculiar/webcrypto/1.2.3: - resolution: {integrity: sha512-q7wDfZy3k/tpnsYB23/MyyDkjn6IdHh8w+xwoVMS5cu6CjVoFzngXDZEOOuSE4zus2yO6ciQhhHxd4XkLpwVnQ==} + /@peculiar/webcrypto/1.2.2: + resolution: {integrity: sha512-xb8MEgfq93TAkIb70kn+llZgIFQwhdiCiOJHzekVTAS74Y+ae5bZn8KEsuycop/LXAm1kx+Kad/v9eTDTWuY/w==} engines: {node: '>=10.12.0'} requiresBuild: true dependencies: - '@peculiar/asn1-schema': 2.0.44 + '@peculiar/asn1-schema': 2.0.38 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.2.1 tslib: 2.3.1 - webcrypto-core: 1.4.0 + webcrypto-core: 1.3.0 dev: false optional: true @@ -5107,7 +5157,7 @@ packages: error-stack-parser: 2.0.6 find-up: 5.0.0 html-entities: 2.3.2 - loader-utils: 2.0.2 + loader-utils: 2.0.1 react-refresh: 0.11.0 schema-utils: 3.1.1 source-map: 0.7.3 @@ -5135,6 +5185,17 @@ packages: - google-protobuf dev: false + /@project-serum/sol-wallet-adapter/0.2.6_@solana+web3.js@1.31.0: + resolution: {integrity: sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.5.0 + dependencies: + '@solana/web3.js': 1.31.0 + bs58: 4.0.1 + eventemitter3: 4.0.7 + dev: false + /@protobufjs/aspromise/1.1.2: resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} dev: false @@ -5278,6 +5339,268 @@ packages: resolution: {integrity: sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==} dev: false + /@solana/buffer-layout/3.0.0: + resolution: {integrity: sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + dev: false + + /@solana/wallet-adapter-base/0.7.0_@solana+web3.js@1.31.0: + resolution: {integrity: sha512-sMWLOdqaaaQwa8BNCPKTBfRBf49p5JfgvI6wZw25tj1RWm/GwNWYQ4nDepWKlISVfgCakezgLVFQ6T/5myo1HA==} + peerDependencies: + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/web3.js': 1.31.0 + eventemitter3: 4.0.7 + dev: false + + /@solana/wallet-adapter-bitkeep/0.1.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-SocG9vvTf3hc3JsYbpn1xroW8yNWRoC7b7OVXHMWWeavdAA7zE3/DiP1Ir2WcOmD5LuFcfma6tgyyvU8tLGP8Q==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-bitpie/0.3.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-WV6lbeWKHHQaZCOdKiM5YTc5Az6N8iBdK/AyKJ2/d862WkpG9Ig0O3by9v0FyW91Ns0rEsXhU0oGLl2MahO76w==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-blocto/0.3.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-n3GfXOFPhrfpqK3mBCbx5WZtE3RI5/p23qGO9xV0hNSqgn1Pn7iB2oPg2t6RAaAvROif/Y9c5+zQF5doR/LKuQ==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@blocto/sdk': 0.2.18 + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + + /@solana/wallet-adapter-clover/0.2.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-s5f6m5bb/HEmMZ7bZfl+HUlb0J5qyTPq21GurH0Tt4uXnTl6NfIi67jSch/Q2gfwmCpFsoeZi0uFRpZxXdl22Q==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-coin98/0.3.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-HyEPGHojW3ueahMDFOu9h1phYAj4U8LIpXunrqUhL5ApjGFKF4ZFQYd/u2U+frFyj49rmPULlcRkLihP3h59Aw==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + '@types/bs58': 4.0.1 + bs58: 4.0.1 + dev: false + + /@solana/wallet-adapter-coinhub/0.1.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-BWRw9fKWlLPFUeQVCeEvNZo+T+vdkRAih3AZComX7nuKJ9JY1Ekh5WotmvQFr9z+DUyNfsxgXOTJ/c+tFg+M5Q==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-ledger/0.7.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-az4Z6eAFe77AlSqCOl9lHhfIrK/phQruHItLLTtT+8a1Y5QylodBNvc/CiD+I8ULwXDOvonXsFgnJnAVS/xMUg==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@ledgerhq/hw-transport': 6.11.2 + '@ledgerhq/hw-transport-webhid': 6.11.2 + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + '@types/w3c-web-hid': 1.0.2 + dev: false + + /@solana/wallet-adapter-mathwallet/0.7.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-RqQkqHHyYzg0czopiNWkzID8RF7K6s76QBzVlD1XRJI4lLJKzODu30v+5H+15JWBBtgFuys1pLHZ7p3y3Z6dvg==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-phantom/0.7.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-u2SkJ6LO+A2MKTgN9bsG5Ro0Vn9KL7NKsGPT0JrYI2rvXm3yZnhlAE0i0oq+/nFAjkL/+Onm9boOaYF0/Z7vBQ==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-react/0.13.1_f3bbd4dd73ec9f0f5441e1ae63d85c8e: + resolution: {integrity: sha512-Sk45AuOF8EgmR28zcib5NquvOwTpBlyDA8Iku1MVdXUQ9giA/tBwfJw21HIf1r+TVepg+V0xAP5FhP+MX0p6QQ==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/wallet-adapter-wallets': ^0.11.0 + '@solana/web3.js': ^1.20.0 + react: ^17.0.2 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-wallets': 0.11.3_81a881bbe6f175c24647acd053eda3ac + '@solana/web3.js': 1.31.0 + react: 18.0.0-rc.0 + dev: false + + /@solana/wallet-adapter-safepal/0.3.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-G/pCMxAeTWZlvJAKEyHRvLDZIyPkg4Zw/xfGQrTM9AG70cf3RFaiTK+8kqO1JL/xKGUsVfnJRFfPImR+hut6kw==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-slope/0.3.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-2ghqUcL8qmCMMtQ2X5xQSZzEpreRW0dfR/o7zHcp3uU4XW5OXFJ2a0YnGUiLVAAEesUG2gmplKSerp72BnPZjA==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + '@types/bs58': 4.0.1 + bs58: 4.0.1 + dev: false + + /@solana/wallet-adapter-solflare/0.4.1_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-ZydQgOuaBac0+a/Z4ROO54NObFiF/S9MOwiOfICXagk4PrWEJNbG1RwkwZzjtxAeYHEbGCb52XN2Buzm5EanJw==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-sollet/0.8.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-9Bxj2IFT9XPh7Nl9IQaTyNwS3uoowQahqE43Ei2DbFJCrlN8qC6wSnJwHGAUPMKnL85Gg0IEZmtZfmuVmyTGQg==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@project-serum/sol-wallet-adapter': 0.2.6_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-solong/0.7.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-y7pal0G/91Oxaco/AVnu9aDFgiaabaFchS1Z62WJzC89Srm7gecclckd4MrQ/TE1TaZQi+8dUWWFGHJxU1zVKg==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-tokenpocket/0.2.0_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-NmqWnq8N5+fIsP5xjQbZIPqTf+jy5VVJ4eMdXHtGVrOZUTeQPD1fnBzKhWp212nJ0ObjN+1ylSKw7XTSS3cPWA==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + dev: false + + /@solana/wallet-adapter-torus/0.8.1_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-C6iD0dcr56C3oNukjZEJgLiCNwbgmV4dx08oLmGC8dJnDBwS1A0DNpjbJ3V7k4Ywi2OgsFRInpsQqBBU8+7SOg==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + '@solana/web3.js': ^1.20.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/web3.js': 1.31.0 + '@toruslabs/openlogin': 1.3.2 + '@toruslabs/openlogin-ed25519': 1.3.0 + '@types/keccak': 3.0.1 + '@types/readable-stream': 2.3.12 + transitivePeerDependencies: + - '@babel/runtime' + dev: false + + /@solana/wallet-adapter-wallets/0.11.3_81a881bbe6f175c24647acd053eda3ac: + resolution: {integrity: sha512-SiPampUuHYlN9QJfeScH8wZSuCk7GrwuYpb1kzi0N7oqtRf/baxXmZDQFKgWIP/L49FqCEtFmCaAkck0vi8bFA==} + peerDependencies: + '@solana/wallet-adapter-base': ^0.7.0 + dependencies: + '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-bitkeep': 0.1.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-bitpie': 0.3.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-blocto': 0.3.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-clover': 0.2.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-coin98': 0.3.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-coinhub': 0.1.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-ledger': 0.7.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-mathwallet': 0.7.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-phantom': 0.7.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-safepal': 0.3.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-slope': 0.3.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-solflare': 0.4.1_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-sollet': 0.8.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-solong': 0.7.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-tokenpocket': 0.2.0_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-torus': 0.8.1_81a881bbe6f175c24647acd053eda3ac + transitivePeerDependencies: + - '@babel/runtime' + - '@solana/web3.js' + - bufferutil + - debug + - utf-8-validate + dev: false + + /@solana/web3.js/1.31.0: + resolution: {integrity: sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==} + engines: {node: '>=12.20.0'} + dependencies: + '@babel/runtime': 7.16.3 + '@ethersproject/sha2': 5.5.0 + '@solana/buffer-layout': 3.0.0 + bn.js: 5.2.0 + borsh: 0.4.0 + bs58: 4.0.1 + buffer: 6.0.1 + cross-fetch: 3.1.4 + jayson: 3.6.5 + js-sha3: 0.8.0 + rpc-websockets: 7.4.16 + secp256k1: 4.0.2 + superstruct: 0.14.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@storybook/addon-actions/6.4.9_2f50eb45a1501445764b3dbbd8573d7c: resolution: {integrity: sha512-L1N66p/vr+wPUBfrH3qffjNAcWSS/wvuL370T7cWxALA9LLA8yY9U2EpITc5btuCC5QOxApCeyHkFnrBhNa94g==} peerDependencies: @@ -5465,7 +5788,7 @@ packages: nanoid: 3.1.30 p-limit: 3.1.0 prettier: 2.5.1 - prop-types: 15.7.2 + prop-types: 15.8.0 react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 react-element-to-jsx-string: 14.3.4_757a802188413a36d4f24237d13b8e90 @@ -5677,7 +6000,7 @@ packages: core-js: 3.19.3 global: 4.4.0 memoizerific: 1.11.3 - prop-types: 15.7.2 + prop-types: 15.8.0 react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 regenerator-runtime: 0.13.9 @@ -6091,7 +6414,7 @@ packages: memoizerific: 1.11.3 overlayscrollbars: 1.13.1 polished: 4.1.3 - prop-types: 15.7.2 + prop-types: 15.8.0 react: 18.0.0-rc.0 react-colorful: 5.5.1_757a802188413a36d4f24237d13b8e90 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 @@ -6321,7 +6644,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 - ws: 8.3.0 + ws: 8.4.0 transitivePeerDependencies: - '@types/react' - acorn @@ -6394,7 +6717,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 - ws: 8.3.0 + ws: 8.4.0 transitivePeerDependencies: - '@types/react' - acorn @@ -6469,7 +6792,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 - ws: 8.3.0 + ws: 8.4.0 transitivePeerDependencies: - '@types/react' - acorn @@ -6587,8 +6910,8 @@ packages: resolution: {integrity: sha512-zbgsx9vY5XOA9bBmyw+KyuRspFXAjEJ6I3d/6Z3G1kNBeOEj9i3DT7O99Rd/THfL/3mWl8DJ/7CJVPk1ZYxunA==} dependencies: '@babel/core': 7.16.5 - '@babel/generator': 7.16.0 - '@babel/parser': 7.16.4 + '@babel/generator': 7.16.5 + '@babel/parser': 7.16.6 '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.5 '@babel/preset-env': 7.16.4_@babel+core@7.16.5 '@babel/traverse': 7.16.5 @@ -7269,6 +7592,76 @@ packages: engines: {node: '>= 10'} dev: false + /@toruslabs/eccrypto/1.1.7: + resolution: {integrity: sha512-zU4GnrH21yDY179fgp5Ovi4YjLdHy3WXM3QHCHAomYNxa03eAw2lxNR2bZ7kb698yk40s4WMrbnauukgabXH4Q==} + requiresBuild: true + dependencies: + acorn: 8.6.0 + elliptic: 6.5.4 + es6-promise: 4.2.8 + nan: 2.15.0 + optionalDependencies: + secp256k1: 3.8.0 + dev: false + + /@toruslabs/http-helpers/1.4.0: + resolution: {integrity: sha512-lPRhTWeChQunds2CGV70xvaoFMMebZAqZLpTYZjUJfziumQjT12w9HWLIzlRfGFVKoYUsUiZLpGHl0JEwHCcqg==} + engines: {node: '>=14.17.0', npm: ~6.x} + peerDependencies: + '@babel/runtime': 7.x + dependencies: + deepmerge: 4.2.2 + dev: false + + /@toruslabs/openlogin-ed25519/1.3.0: + resolution: {integrity: sha512-JYVN52FTL1kEp2cON1Up3qxI+X1bFj7wCuvq0V9KFpyOff0gacqRZUyHFxge4H15ysMdaEkuo/yZHsw/JvD6Sg==} + peerDependencies: + '@babel/runtime': 7.x + dependencies: + '@toruslabs/tweetnacl-js': 1.0.3 + dev: false + + /@toruslabs/openlogin-jrpc/1.3.1: + resolution: {integrity: sha512-yLM5I3AVEhhWqTUbSAcOjLvgwR8ZaOmVq2cw3Lvn3Dte9S04PYF+yKJD9uEz7dG3eJsh47TWiXxciQEKwaHSHQ==} + peerDependencies: + '@babel/runtime': 7.x + dependencies: + '@toruslabs/openlogin-utils': 1.3.0 + end-of-stream: 1.4.4 + events: 3.3.0 + fast-safe-stringify: 2.1.1 + once: 1.4.0 + pump: 3.0.0 + readable-stream: 3.6.0 + dev: false + + /@toruslabs/openlogin-utils/1.3.0: + resolution: {integrity: sha512-ugyBWIhNaaGJuGm4EqhNGJ1pjnUNGVwsyvMc6CCtgTEi/C07NdFUUMM9QqKcTGmRG8prdtbIlsVeTricK7EnUQ==} + peerDependencies: + '@babel/runtime': 7.x + dependencies: + base64url: 3.0.1 + keccak: 3.0.2 + randombytes: 2.1.0 + dev: false + + /@toruslabs/openlogin/1.3.2: + resolution: {integrity: sha512-vdLB8heVDRo7N7h4pqo/uPcWky+fc4165dpbDDlcQPnPov3hCJRcY8jtZ1PcmbLcCTqhhOMEr4ALAZvAs14D3g==} + peerDependencies: + '@babel/runtime': 7.x + dependencies: + '@toruslabs/eccrypto': 1.1.7 + '@toruslabs/http-helpers': 1.4.0 + '@toruslabs/openlogin-jrpc': 1.3.1 + '@toruslabs/openlogin-utils': 1.3.0 + lodash.merge: 4.6.2 + pump: 3.0.0 + dev: false + + /@toruslabs/tweetnacl-js/1.0.3: + resolution: {integrity: sha512-WQJYMTR/bkqvpk3DWOqRt5e24RhwJp9PXUoSj4zSthd3+fDhKYCI56YVMPNDKah1fCffOe9F3m8iZ5SgDZ+Csw==} + dev: false + /@tsconfig/node10/1.0.8: resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} dev: true @@ -7356,6 +7749,12 @@ packages: '@types/node': 16.11.17 dev: true + /@types/bs58/4.0.1: + resolution: {integrity: sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==} + dependencies: + base-x: 3.0.8 + dev: false + /@types/chrome/0.0.136: resolution: {integrity: sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA==} dependencies: @@ -7388,7 +7787,6 @@ packages: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 16.11.17 - dev: true /@types/d3-array/1.2.9: resolution: {integrity: sha512-E/7RgPr2ylT5dWG0CswMi9NpFcjIEDqLcUSBgNHe/EMahfqYaTx4zhcggG3khqoEB/leY4Vl6nTSbwLUPjXceA==} @@ -7593,12 +7991,12 @@ packages: /@types/eslint-scope/3.7.1: resolution: {integrity: sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==} dependencies: - '@types/eslint': 8.2.0 + '@types/eslint': 7.28.2 '@types/estree': 0.0.50 dev: true - /@types/eslint/8.2.0: - resolution: {integrity: sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==} + /@types/eslint/7.28.2: + resolution: {integrity: sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==} dependencies: '@types/estree': 0.0.50 '@types/json-schema': 7.0.9 @@ -7626,7 +8024,6 @@ packages: '@types/node': 16.11.17 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - dev: true /@types/express/4.17.13: resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} @@ -7763,6 +8160,12 @@ packages: resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} dev: true + /@types/keccak/3.0.1: + resolution: {integrity: sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg==} + dependencies: + '@types/node': 16.11.7 + dev: false + /@types/lodash-es/4.17.5: resolution: {integrity: sha512-SHBoI8/0aoMQWAgUHMQ599VM6ZiSKg8sh/0cFqqlQQMyY9uEplc0ULU5yQNzcvdR4ZKa0ey8+vFmahuRbOCT1A==} dependencies: @@ -7771,7 +8174,6 @@ packages: /@types/lodash/4.14.177: resolution: {integrity: sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw==} - dev: true /@types/lodash/4.14.178: resolution: {integrity: sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==} @@ -7803,10 +8205,6 @@ packages: form-data: 3.0.1 dev: true - /@types/node/16.11.10: - resolution: {integrity: sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==} - dev: false - /@types/node/16.11.12: resolution: {integrity: sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==} dev: true @@ -7817,6 +8215,10 @@ packages: /@types/node/16.11.6: resolution: {integrity: sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==} + /@types/node/16.11.7: + resolution: {integrity: sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==} + dev: false + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -7873,11 +8275,9 @@ packages: /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true /@types/react-avatar-editor/10.3.6: resolution: {integrity: sha512-2r9+WYriqXIyjOTxy/DSiCUhr2TBiYD4Gzbyych1WUEwdPboNj0JRz9B5868TwiGgKD61jdWYyKy/OutHs7L6A==} @@ -7982,6 +8382,13 @@ packages: csstype: 3.0.10 dev: false + /@types/readable-stream/2.3.12: + resolution: {integrity: sha512-IVe0ietigIRWjRg0gv2sydr0rhyPzdXQsBMU/gda8fl82xQL+J9UWRBcD0asxoe4pb5wTOsPrOz0KYJZVCXZJQ==} + dependencies: + '@types/node': 16.11.7 + safe-buffer: 5.2.1 + dev: false + /@types/remarkable/2.0.3: resolution: {integrity: sha512-QQUBeYApuHCNl9Br6ZoI3PlKmwZ69JHrlJktJXnjxobia9liZgsI70fm8PnCqVFAcefYK+9PGzR5L/hzCslNYQ==} dependencies: @@ -8101,6 +8508,10 @@ packages: '@types/node': 16.11.6 dev: true + /@types/w3c-web-hid/1.0.2: + resolution: {integrity: sha512-tNLnl6+/AkmASEnviwdLLE6kaXlY28cDVyQ3e+WwnEAm5DHyO7c71a5TtYX6ofrnzzdQSnNsjNMoggsbrtOYfQ==} + dev: false + /@types/web/0.0.48: resolution: {integrity: sha512-X5KKfR0MNm5ujo7421tVTF6n9MXh58DfWOuvPnuMAlr12vloTtyxJEC0rHVKIvcpqqoOJSrlkW2dMJjl9eK3Dg==} dev: false @@ -8161,6 +8572,12 @@ packages: source-map: 0.6.1 dev: true + /@types/ws/7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 16.11.7 + dev: false + /@types/ws/8.2.2: resolution: {integrity: sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==} dependencies: @@ -8719,7 +9136,6 @@ packages: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true /abab/2.0.5: resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} @@ -8755,12 +9171,12 @@ packages: acorn: 7.4.1 acorn-walk: 7.2.0 - /acorn-import-assertions/1.8.0_acorn@8.6.0: + /acorn-import-assertions/1.8.0_acorn@8.5.0: resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.6.0 + acorn: 8.5.0 dev: true /acorn-jsx/5.3.2_acorn@7.4.1: @@ -8821,7 +9237,7 @@ packages: resolution: {integrity: sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true + dev: false /acorn/8.7.0: resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} @@ -8911,7 +9327,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.8.2 + ajv: 8.8.1 dev: true /ajv-keywords/3.5.2_ajv@6.12.6: @@ -8921,12 +9337,12 @@ packages: dependencies: ajv: 6.12.6 - /ajv-keywords/5.1.0_ajv@8.8.2: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + /ajv-keywords/5.0.0_ajv@8.8.1: + resolution: {integrity: sha512-ULd1QMjRoH6JDNUQIfDLrlE+OgZlFaxyYCjzt58uNuUQtKXt8/U+vK/8Ql0gyn/C5mqZzUWtKMqr/4YquvTrWA==} peerDependencies: - ajv: ^8.8.2 + ajv: ^8.0.0 dependencies: - ajv: 8.8.2 + ajv: 8.8.1 fast-deep-equal: 3.1.3 dev: true @@ -8947,8 +9363,8 @@ packages: uri-js: 4.4.1 dev: false - /ajv/8.8.2: - resolution: {integrity: sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==} + /ajv/8.8.1: + resolution: {integrity: sha512-6CiMNDrzv0ZR916u2T+iRunnD60uWmNn8SkdB44/6stVORUg0aAkWO7PkOhpCmjmW8f2I/G/xnowD66fxGyQJg==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -9323,8 +9739,8 @@ packages: minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 - /asn1/0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + /asn1/0.2.4: + resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} dependencies: safer-buffer: 2.1.2 dev: false @@ -9442,7 +9858,7 @@ packages: hasBin: true dependencies: browserslist: 4.19.1 - caniuse-lite: 1.0.30001286 + caniuse-lite: 1.0.30001292 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -9490,7 +9906,7 @@ packages: /axios/0.21.1: resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==} dependencies: - follow-redirects: 1.14.5 + follow-redirects: 1.14.4 transitivePeerDependencies: - debug dev: false @@ -9747,7 +10163,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-plugin-utils': 7.16.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.1.0 @@ -9829,7 +10245,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.16.5 - core-js-compat: 3.19.3 + core-js-compat: 3.20.1 transitivePeerDependencies: - supports-color dev: true @@ -9840,8 +10256,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.16.5 - core-js-compat: 3.17.3 + '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.16.5 + core-js-compat: 3.20.1 transitivePeerDependencies: - supports-color dev: false @@ -9853,7 +10269,7 @@ packages: dependencies: '@babel/core': 7.16.5 '@babel/helper-define-polyfill-provider': 0.3.0_@babel+core@7.16.5 - core-js-compat: 3.19.3 + core-js-compat: 3.20.1 transitivePeerDependencies: - supports-color dev: true @@ -10293,6 +10709,11 @@ packages: resolution: {integrity: sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==} dev: false + /base64url/3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + dev: false + /batch-processor/1.0.0: resolution: {integrity: sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=} dev: true @@ -10370,6 +10791,13 @@ packages: randombytes: 2.1.0 dev: false + /bip66/1.1.5: + resolution: {integrity: sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=} + dependencies: + safe-buffer: 5.2.1 + dev: false + optional: true + /blakejs/1.1.1: resolution: {integrity: sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==} @@ -10443,6 +10871,15 @@ packages: resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} dev: true + /borsh/0.4.0: + resolution: {integrity: sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==} + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 5.2.0 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + dev: false + /boxen/4.2.0: resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} engines: {node: '>=8'} @@ -10570,8 +11007,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001286 - electron-to-chromium: 1.4.16 + caniuse-lite: 1.0.30001292 + electron-to-chromium: 1.4.28 escalade: 3.1.1 node-releases: 1.1.77 dev: true @@ -10586,6 +11023,7 @@ packages: escalade: 3.1.1 node-releases: 2.0.1 picocolors: 1.0.0 + dev: true /browserslist/4.19.1: resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==} @@ -10597,7 +11035,6 @@ packages: escalade: 3.1.1 node-releases: 2.0.1 picocolors: 1.0.0 - dev: true /bs-logger/0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -10655,10 +11092,17 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - isarray: 1.0.0 + isarray: 1.0.0 + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false - /buffer/5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + /buffer/6.0.1: + resolution: {integrity: sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 @@ -10852,6 +11296,7 @@ packages: /caniuse-lite/1.0.30001286: resolution: {integrity: sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==} + dev: true /caniuse-lite/1.0.30001292: resolution: {integrity: sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==} @@ -10990,6 +11435,10 @@ packages: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true + /ci-info/3.2.0: + resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} + dev: true + /ci-info/3.3.0: resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==} dev: true @@ -11012,6 +11461,11 @@ packages: inherits: 2.0.4 safe-buffer: 5.2.1 + /circular-json/0.5.9: + resolution: {integrity: sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==} + deprecated: CircularJSON is in maintenance only, flatted is its successor. + dev: false + /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true @@ -11540,26 +11994,11 @@ packages: - webpack-command dev: true - /core-js-compat/3.17.3: - resolution: {integrity: sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA==} - dependencies: - browserslist: 4.18.1 - semver: 7.0.0 - dev: false - - /core-js-compat/3.19.3: - resolution: {integrity: sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA==} - dependencies: - browserslist: 4.18.1 - semver: 7.0.0 - dev: true - /core-js-compat/3.20.1: resolution: {integrity: sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==} dependencies: browserslist: 4.19.1 semver: 7.0.0 - dev: true /core-js-pure/3.19.3: resolution: {integrity: sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA==} @@ -12411,6 +12850,11 @@ packages: slash: 3.0.0 dev: true + /delay/5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: false + /delayed-stream/1.0.0: resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} engines: {node: '>=0.4.0'} @@ -12665,12 +13109,22 @@ packages: dependencies: '@babel/runtime': 7.16.5 compute-scroll-into-view: 1.0.17 - prop-types: 15.7.2 + prop-types: 15.8.0 react: 18.0.0-rc.0 react-is: 17.0.2 tslib: 2.3.1 dev: true + /drbg.js/1.0.1: + resolution: {integrity: sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=} + engines: {node: '>=0.10'} + dependencies: + browserify-aes: 1.2.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + dev: false + optional: true + /duplexer/0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -12726,8 +13180,19 @@ packages: resolution: {integrity: sha512-Hj+GY0mf2NNBcgg0v6DsV0/EYI5xDLUICZ5BSLVC+8uFEzoWpWw2VR6e3eWKgGjL2YEybUdg89UXDEHaBmi03Q==} dev: false + /eip1193-provider/1.0.1: + resolution: {integrity: sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g==} + dependencies: + '@json-rpc-tools/provider': 1.7.6 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + /electron-to-chromium/1.4.16: resolution: {integrity: sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==} + dev: true /electron-to-chromium/1.4.28: resolution: {integrity: sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg==} @@ -13022,6 +13487,16 @@ packages: resolution: {integrity: sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=} dev: false + /es6-promise/4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + + /es6-promisify/5.0.0: + resolution: {integrity: sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=} + dependencies: + es6-promise: 4.2.8 + dev: false + /es6-set/0.1.5: resolution: {integrity: sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=} dependencies: @@ -13143,7 +13618,7 @@ packages: minimatch: 3.0.4 object.values: 1.1.5 resolve: 1.20.0 - tsconfig-paths: 3.12.0 + tsconfig-paths: 3.11.0 dev: true /eslint-plugin-lodash/7.3.0_eslint@8.5.0: @@ -13212,7 +13687,7 @@ packages: eslint: '>=7.32.0' dependencies: '@babel/helper-validator-identifier': 7.15.7 - ci-info: 3.3.0 + ci-info: 3.2.0 clean-regexp: 1.0.0 eslint: 8.5.0 eslint-template-visitor: 2.3.2_eslint@8.5.0 @@ -13639,7 +14114,6 @@ packages: ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 - dev: false /ethereumjs-util/7.1.3: resolution: {integrity: sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==} @@ -13650,6 +14124,7 @@ packages: create-hash: 1.2.0 ethereum-cryptography: 0.1.3 rlp: 2.2.7 + dev: false /ethereumjs-vm/2.6.0: resolution: {integrity: sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==} @@ -13789,7 +14264,6 @@ packages: dependencies: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 - dev: false /event-emitter/0.3.5: resolution: {integrity: sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=} @@ -13807,7 +14281,6 @@ packages: /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} @@ -13832,7 +14305,7 @@ packages: is-stream: 1.1.0 npm-run-path: 2.0.2 p-finally: 1.0.0 - signal-exit: 3.0.6 + signal-exit: 3.0.5 strip-eof: 1.0.0 dev: false @@ -13860,7 +14333,7 @@ packages: merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 - signal-exit: 3.0.6 + signal-exit: 3.0.5 strip-final-newline: 2.0.0 dev: true @@ -14033,6 +14506,11 @@ packages: engines: {'0': node >=0.6.0} dev: false + /eyes/0.1.8: + resolution: {integrity: sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=} + engines: {node: '> 0.1.90'} + dev: false + /fake-merkle-patricia-tree/1.0.1: resolution: {integrity: sha1-S4w6z7Ugr635hgsfFM2M40As3dM=} dependencies: @@ -14101,6 +14579,10 @@ packages: resolution: {integrity: sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==} dev: false + /fast-safe-stringify/2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: false + /fast-shallow-equal/1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false @@ -14362,6 +14844,16 @@ packages: readable-stream: 2.3.7 dev: true + /follow-redirects/1.14.4: + resolution: {integrity: sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /follow-redirects/1.14.5: resolution: {integrity: sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==} engines: {node: '>=4.0'} @@ -14370,6 +14862,7 @@ packages: peerDependenciesMeta: debug: optional: true + dev: true /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -14407,7 +14900,7 @@ packages: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.16.0 chalk: 2.4.2 micromatch: 3.1.10 minimatch: 3.0.4 @@ -15123,7 +15616,7 @@ packages: dependencies: ws: 7.5.5 optionalDependencies: - '@peculiar/webcrypto': 1.2.3 + '@peculiar/webcrypto': 1.2.2 emailjs: 2.2.0 text-encoding: 0.7.0 transitivePeerDependencies: @@ -15206,6 +15699,11 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + /has-flag/5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + dev: true + /has-glob/1.0.0: resolution: {integrity: sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=} engines: {node: '>=0.10.0'} @@ -15484,7 +15982,9 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.9.0 + terser: 5.10.0 + transitivePeerDependencies: + - acorn dev: true /html-parse-stringify/3.0.1: @@ -15543,6 +16043,8 @@ packages: pretty-error: 4.0.0 tapable: 2.2.1 webpack: 5.65.0 + transitivePeerDependencies: + - acorn dev: true /htmlparser2/6.1.0: @@ -16425,6 +16927,14 @@ packages: unfetch: 3.1.2 dev: false + /isomorphic-ws/4.0.1_ws@7.5.5: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.5 + dev: false + /isstream/0.1.2: resolution: {integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=} dev: false @@ -16451,7 +16961,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.16.5 - '@babel/parser': 7.16.4 + '@babel/parser': 7.16.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -16514,6 +17024,31 @@ packages: iterate-iterator: 1.0.2 dev: true + /jayson/3.6.5: + resolution: {integrity: sha512-wmOjX+eQcnCDyPF4KORomaIj9wj3h0B5VEbeD0+2VHfTfErB+h1zpR7oBkgCZp36AFjp3+a4CLz6U72BYpFHAw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.35 + '@types/express-serve-static-core': 4.17.25 + '@types/lodash': 4.14.177 + '@types/node': 16.11.7 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1_ws@7.5.5 + json-stringify-safe: 5.0.1 + JSONStream: 1.3.5 + lodash: 4.17.21 + uuid: 3.4.0 + ws: 7.5.5 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /jest-changed-files/27.4.2: resolution: {integrity: sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -17007,7 +17542,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.11.12 + '@types/node': 16.11.17 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -17595,6 +18130,7 @@ packages: colorette: 2.0.16 commander: 8.3.0 debug: 4.3.3_supports-color@9.2.1 + enquirer: 2.3.6 execa: 5.1.1 lilconfig: 2.0.4 listr2: 3.13.5 @@ -17618,6 +18154,7 @@ packages: optional: true dependencies: cli-truncate: 2.1.0 + clone: 2.1.2 colorette: 2.0.16 log-update: 4.0.0 p-map: 4.0.0 @@ -17673,6 +18210,15 @@ packages: json5: 2.2.0 dev: true + /loader-utils/2.0.1: + resolution: {integrity: sha512-g4miPa9uUrZz4iElkaVJgDFwKJGh8aQGM7pUL4ejXl6cu7kSb30seQOVGNMP6sW8j7DW77X68hJZ+GM7UGhXeQ==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.0 + dev: true + /loader-utils/2.0.2: resolution: {integrity: sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==} engines: {node: '>=8.9.0'} @@ -17747,7 +18293,6 @@ packages: /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.set/4.3.2: resolution: {integrity: sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=} @@ -17834,7 +18379,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /ltgt/2.2.1: resolution: {integrity: sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=} @@ -18003,6 +18547,13 @@ packages: safe-buffer: 5.1.2 dev: false + /memfs/3.3.0: + resolution: {integrity: sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: true + /memfs/3.4.0: resolution: {integrity: sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==} engines: {node: '>= 4.0.0'} @@ -18430,7 +18981,6 @@ packages: /nan/2.15.0: resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} requiresBuild: true - optional: true /nano-base32/1.0.1: resolution: {integrity: sha1-ulSMh578+5DaHE2eCX20pGySVe8=} @@ -19448,7 +19998,7 @@ packages: resolution: {integrity: sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 dev: true /portfinder/1.0.28: @@ -20003,8 +20553,8 @@ packages: react-dom: '>=0.14.0' dependencies: '@babel/plugin-transform-runtime': 7.15.0_@babel+core@7.16.5 - '@babel/runtime': 7.16.3 - prop-types: 15.7.2 + '@babel/runtime': 7.16.5 + prop-types: 15.8.0 react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 transitivePeerDependencies: @@ -20076,8 +20626,8 @@ packages: hasBin: true dependencies: '@babel/core': 7.16.5 - '@babel/generator': 7.16.0 - '@babel/runtime': 7.16.3 + '@babel/generator': 7.16.5 + '@babel/runtime': 7.16.5 ast-types: 0.14.2 commander: 2.20.3 doctrine: 3.0.0 @@ -20149,7 +20699,7 @@ packages: dependencies: '@babel/runtime': 7.16.5 invariant: 2.2.4 - prop-types: 15.7.2 + prop-types: 15.8.0 react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 react-fast-compare: 3.2.0 @@ -20194,9 +20744,9 @@ packages: peerDependencies: react: ^16.8.4 || ^17.0.0 dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 is-dom: 1.1.0 - prop-types: 15.7.2 + prop-types: 15.8.0 react: 18.0.0-rc.0 dev: true @@ -20212,7 +20762,7 @@ packages: react: ^16.6.0 || ^17.0.0 react-dom: ^16.6.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 '@popperjs/core': 2.11.0 react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 @@ -20256,19 +20806,6 @@ packages: tiny-warning: 1.0.3 dev: false - /react-router-dom/6.0.0-beta.4_154c53788755629e2430b224cbac559e: - resolution: {integrity: sha512-yppoRR8S7FxNMG6OGFn9DPJBPLsjeIuQa7GYnkRlgOSTBSPhAQpD6z7rvRzZnesQ9r6W+ibD9RvnqTcna4w/Pg==} - peerDependencies: - history: '>=5' - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - history: 5.2.0 - react: 18.0.0-rc.0 - react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 - react-router: 6.0.0-beta.4_history@5.2.0+react@18.0.0-rc.0 - dev: false - /react-router-dom/6.1.1_757a802188413a36d4f24237d13b8e90: resolution: {integrity: sha512-O3UH89DI4o+swd2q6lF4dSmpuNCxwkUXcj0zAFcVc1H+YoPE6T7uwoFMX0ws1pUvCY8lYDucFpOqCCdal6VFzg==} peerDependencies: @@ -20279,7 +20816,6 @@ packages: react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 react-router: 6.1.1_react@18.0.0-rc.0 - dev: true /react-router/5.2.1_react@18.0.0-rc.0: resolution: {integrity: sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==} @@ -20299,16 +20835,6 @@ packages: tiny-warning: 1.0.3 dev: false - /react-router/6.0.0-beta.4_history@5.2.0+react@18.0.0-rc.0: - resolution: {integrity: sha512-48JRRZJOwmfOKM12Tv3WjmNkVb2NpSEgDTWC4+MEJaud0+eyLJxqy62CKzOydMlk7hrfRFpC/elUYSZAuyx3qA==} - peerDependencies: - history: '>=5' - react: '>=16.8' - dependencies: - history: 5.2.0 - react: 18.0.0-rc.0 - dev: false - /react-router/6.1.1_react@18.0.0-rc.0: resolution: {integrity: sha512-55o96RiDZmC0uD17DPqVmzzfdNd2Dc+EjkYvMAmHl43du/GItaTdFr5WwjTryNWPXZ+OOVQxQhwAX25UwxpHtw==} peerDependencies: @@ -20316,7 +20842,6 @@ packages: dependencies: history: 5.2.0 react: 18.0.0-rc.0 - dev: true /react-sizeme/3.0.2: resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} @@ -20332,7 +20857,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.25.0 @@ -20346,7 +20871,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 react: 18.0.0-rc.0 use-composed-ref: 1.1.0_react@18.0.0-rc.0 use-latest: 1.2.0_2fa291bfae6e56080648438396754a97 @@ -20940,7 +21465,7 @@ packages: engines: {node: '>=8'} dependencies: onetime: 5.1.2 - signal-exit: 3.0.6 + signal-exit: 3.0.5 dev: true /resumer/0.0.0: @@ -21021,11 +21546,13 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.15.8 + '@babel/code-frame': 7.16.0 jest-worker: 26.6.2 rollup: 2.62.0 serialize-javascript: 4.0.0 - terser: 5.8.0 + terser: 5.10.0 + transitivePeerDependencies: + - acorn dev: true /rollup/2.62.0: @@ -21036,6 +21563,19 @@ packages: fsevents: 2.3.2 dev: true + /rpc-websockets/7.4.16: + resolution: {integrity: sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ==} + dependencies: + '@babel/runtime': 7.16.3 + circular-json: 0.5.9 + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 7.5.5_72ef9f06cb99540da679cbf1bf7a3256 + optionalDependencies: + bufferutil: 4.0.3 + utf-8-validate: 5.0.5 + dev: false + /rss3-next/0.6.17_typescript@4.6.0-dev.20211202: resolution: {integrity: sha512-UEVpr9somInaz8kreZjUjVmo0cay/Q24CQSo8QJogChlphUpFyMAJSXtC7xS2p67ZSXL9CWPtzoPZtQ4wh0hBg==} dependencies: @@ -21086,6 +21626,13 @@ packages: resolution: {integrity: sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=} dev: false + /rxjs/6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + /rxjs/7.4.0: resolution: {integrity: sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==} dependencies: @@ -21117,6 +21664,10 @@ packages: resolution: {integrity: sha512-n0hJm6BgX8wk3G+AS8MOQnfcA8dfE6ZMUfwkHUNx69YxPlU3HDaZTHXWto35Z+C4mOjK1odlT95WutkGC+0Idw==} dev: false + /safe-json-utils/1.1.1: + resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} + dev: false + /safe-regex/1.1.0: resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=} dependencies: @@ -21202,9 +21753,9 @@ packages: engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.9 - ajv: 8.8.2 + ajv: 8.8.1 ajv-formats: 2.1.1 - ajv-keywords: 5.1.0_ajv@8.8.2 + ajv-keywords: 5.0.0_ajv@8.8.1 dev: true /screenfull/5.1.0: @@ -21215,6 +21766,22 @@ packages: /scrypt-js/3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + /secp256k1/3.8.0: + resolution: {integrity: sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==} + engines: {node: '>=4.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + bip66: 1.1.5 + bn.js: 4.12.0 + create-hash: 1.2.0 + drbg.js: 1.0.1 + elliptic: 6.5.4 + nan: 2.15.0 + safe-buffer: 5.2.1 + dev: false + optional: true + /secp256k1/4.0.2: resolution: {integrity: sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==} engines: {node: '>=10.0.0'} @@ -21279,7 +21846,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /send/0.17.1: resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} @@ -21495,8 +22061,12 @@ packages: resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} dev: false + /signal-exit/3.0.5: + resolution: {integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==} + /signal-exit/3.0.6: resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} + dev: true /simple-concat/1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} @@ -21683,13 +22253,6 @@ packages: source-map: 0.5.7 dev: false - /source-map-support/0.5.20: - resolution: {integrity: sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -21733,7 +22296,7 @@ packages: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 + spdx-license-ids: 3.0.10 /spdx-exceptions/2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} @@ -21742,10 +22305,10 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 + spdx-license-ids: 3.0.10 - /spdx-license-ids/3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} + /spdx-license-ids/3.0.10: + resolution: {integrity: sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==} /spdy-transport/3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -21798,7 +22361,7 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - asn1: 0.2.6 + asn1: 0.2.4 assert-plus: 1.0.0 bcrypt-pbkdf: 1.0.2 dashdash: 1.14.1 @@ -22167,6 +22730,10 @@ packages: ts-interface-checker: 0.1.13 dev: true + /superstruct/0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + dev: false + /supports-color/2.0.0: resolution: {integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=} engines: {node: '>=0.8.0'} @@ -22201,6 +22768,8 @@ packages: /supports-color/9.2.1: resolution: {integrity: sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==} engines: {node: '>=12'} + dependencies: + has-flag: 5.0.1 dev: true /supports-hyperlinks/2.2.0: @@ -22411,7 +22980,7 @@ packages: - acorn dev: true - /terser-webpack-plugin/5.2.5_2f107d0327a8dfc6e414b5a82aeaeb8f: + /terser-webpack-plugin/5.2.5_acorn@8.5.0+webpack@5.65.0: resolution: {integrity: sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -22427,18 +22996,17 @@ packages: uglify-js: optional: true dependencies: - '@swc/core': 1.2.123 jest-worker: 27.3.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 source-map: 0.6.1 - terser: 5.10.0_acorn@8.6.0 - webpack: 5.64.4_3204a841348537a686702d158b0479f4 + terser: 5.10.0_acorn@8.5.0 + webpack: 5.65.0 transitivePeerDependencies: - acorn dev: true - /terser-webpack-plugin/5.2.5_acorn@8.6.0+webpack@5.65.0: + /terser-webpack-plugin/5.2.5_cb0c2697fca0d33c1d1d223a954bca85: resolution: {integrity: sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -22454,12 +23022,13 @@ packages: uglify-js: optional: true dependencies: + '@swc/core': 1.2.123 jest-worker: 27.3.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 source-map: 0.6.1 - terser: 5.10.0_acorn@8.6.0 - webpack: 5.65.0 + terser: 5.10.0_acorn@8.5.0 + webpack: 5.64.4_3204a841348537a686702d158b0479f4 transitivePeerDependencies: - acorn dev: true @@ -22531,7 +23100,7 @@ packages: source-map-support: 0.5.21 dev: true - /terser/5.10.0_acorn@8.6.0: + /terser/5.10.0_acorn@8.5.0: resolution: {integrity: sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==} engines: {node: '>=10'} hasBin: true @@ -22541,27 +23110,7 @@ packages: acorn: optional: true dependencies: - acorn: 8.6.0 - commander: 2.20.3 - source-map: 0.7.3 - source-map-support: 0.5.21 - dev: true - - /terser/5.8.0: - resolution: {integrity: sha512-f0JH+6yMpneYcRJN314lZrSwu9eKkUFEHLN/kNy8ceh8gaRiLgFPJqrB9HsXjhEGdv4e/ekjTOFxIlL6xlma8A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - commander: 2.20.3 - source-map: 0.7.3 - source-map-support: 0.5.20 - dev: true - - /terser/5.9.0: - resolution: {integrity: sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: + acorn: 8.5.0 commander: 2.20.3 source-map: 0.7.3 source-map-support: 0.5.21 @@ -22584,6 +23133,10 @@ packages: typical: 2.6.1 dev: false + /text-encoding-utf-8/1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: false + /text-encoding/0.7.0: resolution: {integrity: sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==} deprecated: no longer maintained @@ -23002,8 +23555,8 @@ packages: resolution: {integrity: sha512-FWqxGX2NHp5oCyaMd96o2y2uMQmSu8Dey6kvyuFdRJ2AzfmWo3kWa4UsPlCGlfQ/qu03m09ZZtppMoY8EMHuiA==} dev: false - /tsconfig-paths/3.12.0: - resolution: {integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==} + /tsconfig-paths/3.11.0: + resolution: {integrity: sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==} dependencies: '@types/json5': 0.0.29 json5: 1.0.1 @@ -23942,7 +24495,7 @@ packages: engines: {node: '>=8.0.0'} requiresBuild: true dependencies: - '@types/node': 16.11.10 + '@types/node': 16.11.7 got: 9.6.0 swarm-js: 0.1.40 dev: false @@ -24062,7 +24615,7 @@ packages: resolution: {integrity: sha512-nH5N2GiVC0C5XeMEKU16PeFP3Hb3hkPvlR6Tf9WQ+pE+jw1c8eaXBO1CJQLr15ikhUF3s94ICyHcfjzkDsmRbA==} engines: {node: '>=8.0.0'} dependencies: - '@types/node': 16.11.10 + '@types/node': 16.11.7 web3-core: 1.5.2 web3-core-helpers: 1.5.2 web3-core-method: 1.5.2 @@ -24203,6 +24756,17 @@ packages: web3-utils: 1.5.2 dev: false + /webcrypto-core/1.3.0: + resolution: {integrity: sha512-/+Hz+uNM6T8FtizWRYMNdGTXxWaljLFzQ5GKU4WqCTZKpaki94YqDA39h/SpWxEZfgkVMZzrqqtPlfy2+BloQw==} + dependencies: + '@peculiar/asn1-schema': 2.0.38 + '@peculiar/json-schema': 1.1.12 + asn1js: 2.2.0 + pvtsutils: 1.2.1 + tslib: 2.3.1 + dev: false + optional: true + /webcrypto-core/1.4.0: resolution: {integrity: sha512-HY3Zo0GcRIQUUDnlZ/shGjN+4f7LVMkdJZoGPog+oHhJsJdMz6iM8Za5xZ0t6qg7Fx/JXXz+oBv2J2p982hGTQ==} dependencies: @@ -24285,7 +24849,7 @@ packages: webpack-dev-server: optional: true dependencies: - '@discoveryjs/json-ext': 0.5.5 + '@discoveryjs/json-ext': 0.5.6 '@webpack-cli/configtest': 1.1.0_webpack-cli@4.9.1+webpack@5.65.0 '@webpack-cli/info': 1.4.0_webpack-cli@4.9.1 '@webpack-cli/serve': 1.6.0_8901023807dfe689cb4e2c4e87ee3f8e @@ -24337,7 +24901,7 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: colorette: 2.0.16 - memfs: 3.4.0 + memfs: 3.3.0 mime-types: 2.1.34 range-parser: 1.2.1 schema-utils: 4.0.0 @@ -24382,6 +24946,7 @@ packages: sockjs: 0.3.24 spdy: 4.0.2 strip-ansi: 7.0.1 + url: 0.11.0 webpack: 5.65.0 webpack-cli: 4.9.1_b84c6ca1a0d1a6eaa102e036920cc264 webpack-dev-middleware: 5.3.0_webpack@5.65.0 @@ -24539,8 +25104,8 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.6.0 - acorn-import-assertions: 1.8.0_acorn@8.6.0 + acorn: 8.5.0 + acorn-import-assertions: 1.8.0_acorn@8.5.0 browserslist: 4.18.1 chrome-trace-event: 1.0.3 enhanced-resolve: 5.8.3 @@ -24555,7 +25120,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.2.5_2f107d0327a8dfc6e414b5a82aeaeb8f + terser-webpack-plugin: 5.2.5_cb0c2697fca0d33c1d1d223a954bca85 watchpack: 2.3.0 webpack-cli: 4.9.1_b84c6ca1a0d1a6eaa102e036920cc264 webpack-sources: 3.2.2 @@ -24580,8 +25145,8 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.6.0 - acorn-import-assertions: 1.8.0_acorn@8.6.0 + acorn: 8.5.0 + acorn-import-assertions: 1.8.0_acorn@8.5.0 browserslist: 4.18.1 chrome-trace-event: 1.0.3 enhanced-resolve: 5.8.3 @@ -24596,7 +25161,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.2.5_acorn@8.6.0+webpack@5.65.0 + terser-webpack-plugin: 5.2.5_acorn@8.5.0+webpack@5.65.0 watchpack: 2.3.1 webpack-sources: 3.2.2 transitivePeerDependencies: @@ -24816,7 +25381,7 @@ packages: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 - signal-exit: 3.0.6 + signal-exit: 3.0.5 typedarray-to-buffer: 3.1.5 dev: true @@ -24880,8 +25445,8 @@ packages: optional: true dev: false - /ws/7.5.6: - resolution: {integrity: sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==} + /ws/7.5.5_72ef9f06cb99540da679cbf1bf7a3256: + resolution: {integrity: sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -24891,11 +25456,14 @@ packages: optional: true utf-8-validate: optional: true - dev: true + dependencies: + bufferutil: 4.0.3 + utf-8-validate: 5.0.5 + dev: false - /ws/8.3.0: - resolution: {integrity: sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==} - engines: {node: '>=10.0.0'} + /ws/7.5.6: + resolution: {integrity: sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -25003,7 +25571,6 @@ packages: /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c43b8674a4ef..4bc6978142a6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,6 +32,7 @@ packages: - 'packages/plugins/FileService' - 'packages/plugins/DAO' - 'packages/plugins/RSS3' + - 'packages/plugins/Solana' - 'packages/external-plugin-previewer' - 'packages/backup-format' - 'packages/encryption' From 9a3ed3ecb74484c01037dd7c52b4d55bcaad9294 Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 30 Dec 2021 12:23:35 +0800 Subject: [PATCH 02/19] fixup! wip: solana wallet --- cspell.json | 4 +- packages/mask/.webpack/config.ts | 14 +++- .../plugins/Solana/src/UI/Web3State/index.ts | 25 +++--- .../UI/components/ProviderIconClickBait.tsx | 13 +++- packages/plugins/Solana/src/apis/index.ts | 71 +----------------- packages/plugins/Solana/src/assets/sollet.png | Bin 0 -> 4462 bytes packages/plugins/Solana/src/constants.ts | 10 +-- .../Solana/src/hooks/useSollectWallet.ts | 8 ++ packages/plugins/Solana/src/storage/index.ts | 3 +- .../solana/hooks/useChainConfig.ts | 10 +-- packages/web3-shared/solana/sdk/index.ts | 3 - pnpm-lock.yaml | 4 +- 12 files changed, 58 insertions(+), 107 deletions(-) create mode 100644 packages/plugins/Solana/src/assets/sollet.png create mode 100644 packages/plugins/Solana/src/hooks/useSollectWallet.ts diff --git a/cspell.json b/cspell.json index 069b320a239f..962a05650852 100644 --- a/cspell.json +++ b/cspell.json @@ -249,7 +249,9 @@ "hexlify", "contribs", "contrib", - "juicebox" + "juicebox", + "sollet", + "signup" ], "ignoreWords": [ "cryptopunks", diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index 83a6c573aeaa..53ade601256c 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -90,6 +90,8 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { '@masknet/backup-format': join(__dirname, '../../backup-format/src/'), '@masknet/encryption': join(__dirname, '../../encryption/src'), '@uniswap/v3-sdk': require.resolve('@uniswap/v3-sdk/dist/index.js'), + '@solana/wallet-adapter-wallets$': require.resolve('@solana/wallet-adapter-wallets/lib/index.js'), + '@solana/wallet-adapter-base$': require.resolve('@solana/wallet-adapter-base/lib/index.js'), } if (profiling) { alias['react-dom$'] = 'react-dom/profiling' @@ -121,10 +123,18 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { { test: /(async-call|webextension).+\.js$/, enforce: 'pre', use: ['source-map-loader'] }, // TypeScript { - test: /\.tsx?$/, + test: /\.(t|j)sx?$/, + resolve: { + fullySpecified: false, // disable the behaviour + extensions: ['.js', '.ts', '.tsx'], + }, parser: { worker: ['OnDemandWorker', '...'] }, // Compile all ts files in the workspace - include: join(__dirname, '../../'), + include: [ + join(__dirname, '../../'), + // https://github.com/solana-labs/wallet-adapter/issues/231 + /node_modules\/@solana\/wallet-adapter-\w+/, + ], loader: require.resolve('swc-loader'), options: { // https://swc.rs/docs/configuring-swc/ diff --git a/packages/plugins/Solana/src/UI/Web3State/index.ts b/packages/plugins/Solana/src/UI/Web3State/index.ts index 0b9c6641295d..c3d70cc4941f 100644 --- a/packages/plugins/Solana/src/UI/Web3State/index.ts +++ b/packages/plugins/Solana/src/UI/Web3State/index.ts @@ -1,20 +1,19 @@ -import BigNumber from 'bignumber.js' import type { Web3Plugin } from '@masknet/plugin-infra' +import { createConstantSubscription, mapSubscription } from '@masknet/shared-base' import { ChainId, NetworkType, ProviderType, + resolveAddressLinkOnExplorer, resolveBlockLinkOnExplorer, resolveTransactionLinkOnExplorer, - resolveAddressLinkOnExplorer, } from '@masknet/web3-shared-solana' -import { createConstantSubscription, mapSubscription } from '@masknet/shared-base' -import { getStorage, StorageDefaultValue } from '../../storage' +import BigNumber from 'bignumber.js' import { formatAddress } from '../../helpers' -import { getFungibleAssets } from '../../apis' +import { getStorage, StorageDefaultValue } from '../../storage' -function createSubscriptionFromUser(getter: (value: typeof StorageDefaultValue.user) => T) { - return mapSubscription(getStorage().user.subscription, getter) +function createSubscriptionFromUser(getter: (value: typeof StorageDefaultValue.publicKey) => T) { + return mapSubscription(getStorage().publicKey.subscription, getter) } export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilities.Capabilities { @@ -24,14 +23,14 @@ export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilit Shared: { allowTestnet: createConstantSubscription(false), account: createSubscriptionFromUser((user) => { - return user?.addr ?? '' + return user?.toString() ?? '' }), wallets: createSubscriptionFromUser((user): Web3Plugin.Wallet[] => { - if (!user?.addr) return [] + if (!user) return [] return [ { name: 'Solana', - address: user?.addr, + address: user.toString(), hasDerivationPath: false, hasStoredKeyInfo: false, }, @@ -40,12 +39,10 @@ export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilit chainId: createConstantSubscription(chainId), networkType: createConstantSubscription(NetworkType.Solana), providerType: createSubscriptionFromUser((user) => { - return user?.addr ? ProviderType.Blocto : undefined + return user ? ProviderType.Sollet : undefined }), }, - Asset: { - getFungibleAssets, - }, + Asset: {}, Utils: { formatAddress, formatBalance: (value) => new BigNumber(value).toFixed(), diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index b82d1f5f1e34..a68b4aae3869 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -1,5 +1,8 @@ import { useCallback, cloneElement, isValidElement } from 'react' import type { Web3Plugin } from '@masknet/plugin-infra' +import { useSolletWallet } from '../../hooks/useSollectWallet' +import { WalletAdapterNetwork } from '@solana/wallet-adapter-base/lib/index.js' +import { getStorage } from '../../storage' export function ProviderIconClickBait({ network, @@ -8,10 +11,16 @@ export function ProviderIconClickBait({ onSubmit, onClick, }: Web3Plugin.UI.ProviderIconClickBaitProps) { + const solletWallet = useSolletWallet(WalletAdapterNetwork.Mainnet) const onLogIn = useCallback(async () => { onClick?.(network, provider) - console.log('login') - }, [network, provider, onClick, onSubmit]) + const adapter = solletWallet.adapter() + await adapter.connect() + if (adapter?.publicKey) { + await getStorage().publicKey.setValue(adapter.publicKey) + onSubmit?.(network, provider) + } + }, [solletWallet, provider, onClick, onSubmit]) return ( <> diff --git a/packages/plugins/Solana/src/apis/index.ts b/packages/plugins/Solana/src/apis/index.ts index d16c0d7c95b5..ef3cdccd9e28 100644 --- a/packages/plugins/Solana/src/apis/index.ts +++ b/packages/plugins/Solana/src/apis/index.ts @@ -1,72 +1,5 @@ -import { CurrencyType, Pagination, TokenType } from '@masknet/plugin-infra' -import { ChainId } from '@masknet/web3-shared-solana' +import type { Pagination } from '@masknet/plugin-infra' export function getFungibleAssets(address: string, providerType: string, networkType: string, pagination?: Pagination) { - return Promise.resolve([ - { - id: '0x1654653399040a61', - chainId: ChainId.MainnetBeta, - balance: '3042328822', - price: { - [CurrencyType.USD]: '42.64', - }, - value: { - [CurrencyType.USD]: '42.62', - }, - logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5426.png', - token: { - id: '0x1654653399040a61', - chainId: ChainId.MainnetBeta, - type: TokenType.Fungible, - name: 'Solana', - symbol: 'Solana', - decimals: 8, - address: '0x1654653399040a61', - }, - }, - { - id: '0x3c5959b568896393', - chainId: ChainId.MainnetBeta, - balance: '0', - price: { - [CurrencyType.USD]: '42.64', - }, - value: { - [CurrencyType.USD]: '0', - }, - logoURI: - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABkCAYAAAB0F0VpAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABmoAMABAAAAAEAAABkAAAAAHl4y70AAALkaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTAyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMDA8L2V4aWY6UGl4ZWxZRGltZW5z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', - token: { - id: '0x3c5959b568896393', - chainId: ChainId.MainnetBeta, - type: TokenType.Fungible, - name: 'Solana USD', - symbol: 'SUSD', - decimals: 8, - address: '0x3c5959b568896393', - }, - }, - { - id: '0xcfdd90d4a00f7b5b', - chainId: ChainId.MainnetBeta, - balance: '0', - price: { - [CurrencyType.USD]: '42.64', - }, - value: { - [CurrencyType.USD]: '0', - }, - logoURI: - 'data:image/png;base64,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dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz7mnKrlkb3lkI0g55qE6KSH5pysPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPkhzdWFuIExlZTwvcGRmOkF1dGhvcj4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6eG1wPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvJz4KICA8eG1wOkNyZWF0b3JUb29sPkNhbnZhPC94bXA6Q3JlYXRvclRvb2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0ncic/PolbVtwAAAAASUVORK5CYII=', - token: { - id: '0xcfdd90d4a00f7b5b', - chainId: ChainId.MainnetBeta, - type: TokenType.Fungible, - name: 'USD Tether', - symbol: 'USDT', - decimals: 8, - address: '0xcfdd90d4a00f7b5b', - }, - }, - ]) + return Promise.resolve([]) } diff --git a/packages/plugins/Solana/src/assets/sollet.png b/packages/plugins/Solana/src/assets/sollet.png new file mode 100644 index 0000000000000000000000000000000000000000..62d363ae1d4b28156b59e5c8888725f8b373aed5 GIT binary patch literal 4462 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 literal 0 HcmV?d00001 diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index 90ad885ba550..a38757dbef44 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -4,7 +4,7 @@ import { ChainId, NetworkType, ProviderType } from '@masknet/web3-shared-solana' export const PLUGIN_META_KEY = 'com.mask.solana' export const PLUGIN_ID = 'com.mask.solana' export const PLUGIN_NAME = 'Solana Chain' -export const PLUGIN_ICON = '⚙️' +export const PLUGIN_ICON = '🌅' export const PLUGIN_DESCRIPTION = '' export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ { @@ -30,10 +30,10 @@ export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ ] export const PLUGIN_PROVIDERS: Web3Plugin.ProviderDescriptor[] = [ { - ID: `${PLUGIN_ID}_phantom`, + ID: `${PLUGIN_ID}_sollet`, providerAdaptorPluginID: PLUGIN_ID, - type: ProviderType.Phantom, - name: 'Blocto', - icon: new URL('./assets/phantom.png', import.meta.url), + type: ProviderType.Sollet, + name: 'Sollet', + icon: new URL('./assets/Sollet.png', import.meta.url), }, ] diff --git a/packages/plugins/Solana/src/hooks/useSollectWallet.ts b/packages/plugins/Solana/src/hooks/useSollectWallet.ts new file mode 100644 index 000000000000..37e0ae164f95 --- /dev/null +++ b/packages/plugins/Solana/src/hooks/useSollectWallet.ts @@ -0,0 +1,8 @@ +import { getSolletWallet } from '@solana/wallet-adapter-wallets' +import type { WalletAdapterNetwork } from '@solana/wallet-adapter-base' +import { useMemo } from 'react' + +export function useSolletWallet(network: WalletAdapterNetwork) { + const wallet = useMemo(() => getSolletWallet({ network }), [network]) + return wallet +} diff --git a/packages/plugins/Solana/src/storage/index.ts b/packages/plugins/Solana/src/storage/index.ts index c457e366e056..511bfc06b659 100644 --- a/packages/plugins/Solana/src/storage/index.ts +++ b/packages/plugins/Solana/src/storage/index.ts @@ -1,7 +1,8 @@ +import type { PublicKey } from '@solana/web3.js' import type { ScopedStorage } from '@masknet/shared-base' export const StorageDefaultValue = { - user: null, + publicKey: null as null | PublicKey, } let storage: ScopedStorage = null! diff --git a/packages/web3-shared/solana/hooks/useChainConfig.ts b/packages/web3-shared/solana/hooks/useChainConfig.ts index d1f2ef3cf014..0b5e295f6d76 100644 --- a/packages/web3-shared/solana/hooks/useChainConfig.ts +++ b/packages/web3-shared/solana/hooks/useChainConfig.ts @@ -1,14 +1,8 @@ import { useMemo } from 'react' import type { ChainId } from '../types' -import { useAuthConstants } from '../constants' export function useChainConfig(chainId: ChainId) { - const authConstants = useAuthConstants(chainId) - return useMemo(() => { - return { - 'accessNode.api': authConstants.ACCESS_NODE_API, - 'discovery.wallet': authConstants.DISCOVERY_WALLET, - } - }, [authConstants]) + return {} + }, []) } diff --git a/packages/web3-shared/solana/sdk/index.ts b/packages/web3-shared/solana/sdk/index.ts index 1d3fe5a367fa..3e461a7182e2 100644 --- a/packages/web3-shared/solana/sdk/index.ts +++ b/packages/web3-shared/solana/sdk/index.ts @@ -1,8 +1,5 @@ import type { ChainId } from '../types' -import { getAuthConstants } from '../constants' export function createClient(chainId: ChainId) { - const authConstants = getAuthConstants(chainId) - return {} } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e071bff83ea1..c93dd7f5771e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14305,7 +14305,7 @@ packages: is-stream: 1.1.0 npm-run-path: 2.0.2 p-finally: 1.0.0 - signal-exit: 3.0.5 + signal-exit: 3.0.6 strip-eof: 1.0.0 dev: false @@ -22063,10 +22063,10 @@ packages: /signal-exit/3.0.5: resolution: {integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==} + dev: true /signal-exit/3.0.6: resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} - dev: true /simple-concat/1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} From c2c34d1f38505356943e98ce629fc637149cd7bb Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 30 Dec 2021 20:14:01 +0800 Subject: [PATCH 03/19] fixup! wip: solana wallet --- packages/mask/.webpack/config.ts | 2 - .../src/components/shared/WalletStatusBox.tsx | 2 +- packages/plugin-infra/src/web3-types.ts | 1 + packages/plugin-infra/src/web3/Context.tsx | 4 +- .../plugins/Solana/src/UI/Web3State/index.ts | 18 ++-- .../src/UI/components/AccountOverview.tsx | 7 -- .../Solana/src/UI/components/AssetList.tsx | 7 -- .../src/UI/components/CollectionList.tsx | 7 -- .../src/UI/components/DashboardAssetsTab.tsx | 7 -- .../src/UI/components/DashboardHistoryTab.tsx | 7 -- .../src/UI/components/DashboardOverview.tsx | 7 -- .../UI/components/DashboardTransferTab.tsx | 7 -- .../Solana/src/UI/components/PluginPanel.tsx | 102 ------------------ .../UI/components/ProviderIconClickBait.tsx | 4 +- .../src/UI/components/TransactionList.tsx | 7 -- packages/plugins/Solana/src/base.ts | 3 +- packages/plugins/Solana/src/constants.ts | 2 +- .../plugins/Solana/src/helpers/formatter.ts | 1 - .../plugins/Solana/src/locales/es-ES.json | 1 - .../plugins/Solana/src/locales/fa-IR.json | 1 - .../plugins/Solana/src/locales/fr-FR.json | 1 - packages/plugins/Solana/src/locales/index.ts | 24 ----- .../plugins/Solana/src/locales/it-IT.json | 1 - .../plugins/Solana/src/locales/languages.ts | 34 ++++++ .../plugins/Solana/src/locales/ru-RU.json | 1 - packages/plugins/Solana/src/storage/index.ts | 3 +- packages/web3-shared/solana/types.ts | 2 +- pnpm-lock.yaml | 9 +- 28 files changed, 59 insertions(+), 213 deletions(-) delete mode 100644 packages/plugins/Solana/src/UI/components/AccountOverview.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/AssetList.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/CollectionList.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/DashboardOverview.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/PluginPanel.tsx delete mode 100644 packages/plugins/Solana/src/UI/components/TransactionList.tsx delete mode 100644 packages/plugins/Solana/src/locales/es-ES.json delete mode 100644 packages/plugins/Solana/src/locales/fa-IR.json delete mode 100644 packages/plugins/Solana/src/locales/fr-FR.json delete mode 100644 packages/plugins/Solana/src/locales/it-IT.json create mode 100644 packages/plugins/Solana/src/locales/languages.ts delete mode 100644 packages/plugins/Solana/src/locales/ru-RU.json diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index 53ade601256c..374e925912f7 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -90,8 +90,6 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { '@masknet/backup-format': join(__dirname, '../../backup-format/src/'), '@masknet/encryption': join(__dirname, '../../encryption/src'), '@uniswap/v3-sdk': require.resolve('@uniswap/v3-sdk/dist/index.js'), - '@solana/wallet-adapter-wallets$': require.resolve('@solana/wallet-adapter-wallets/lib/index.js'), - '@solana/wallet-adapter-base$': require.resolve('@solana/wallet-adapter-base/lib/index.js'), } if (profiling) { alias['react-dom$'] = 'react-dom/profiling' diff --git a/packages/mask/src/components/shared/WalletStatusBox.tsx b/packages/mask/src/components/shared/WalletStatusBox.tsx index a338887c8f70..509c157cb9ad 100644 --- a/packages/mask/src/components/shared/WalletStatusBox.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox.tsx @@ -187,7 +187,7 @@ export function WalletStatusBox(props: WalletStatusBox) { )}
- + ({ [NetworkPluginID.PLUGIN_EVM]: pluginStateEVM, [NetworkPluginID.PLUGIN_FLOW]: pluginStateFlow, + [NetworkPluginID.PLUGIN_SOLANA]: pluginStateSolana, }), - [pluginStateEVM, pluginStateFlow], + [pluginStateEVM, pluginStateFlow, pluginStateSolana], ) } diff --git a/packages/plugins/Solana/src/UI/Web3State/index.ts b/packages/plugins/Solana/src/UI/Web3State/index.ts index c3d70cc4941f..b889b98c39b0 100644 --- a/packages/plugins/Solana/src/UI/Web3State/index.ts +++ b/packages/plugins/Solana/src/UI/Web3State/index.ts @@ -12,25 +12,25 @@ import BigNumber from 'bignumber.js' import { formatAddress } from '../../helpers' import { getStorage, StorageDefaultValue } from '../../storage' -function createSubscriptionFromUser(getter: (value: typeof StorageDefaultValue.publicKey) => T) { +function createSubscriptionFromPublicKey(getter: (value: typeof StorageDefaultValue.publicKey) => T) { return mapSubscription(getStorage().publicKey.subscription, getter) } export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilities.Capabilities { - const chainId = ChainId.Testnet + const chainId = ChainId.MainnetBeta return { Shared: { allowTestnet: createConstantSubscription(false), - account: createSubscriptionFromUser((user) => { - return user?.toString() ?? '' + account: createSubscriptionFromPublicKey((publicKey) => { + return publicKey ?? '' }), - wallets: createSubscriptionFromUser((user): Web3Plugin.Wallet[] => { - if (!user) return [] + wallets: createSubscriptionFromPublicKey((publicKey): Web3Plugin.Wallet[] => { + if (!publicKey) return [] return [ { name: 'Solana', - address: user.toString(), + address: publicKey, hasDerivationPath: false, hasStoredKeyInfo: false, }, @@ -38,8 +38,8 @@ export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilit }), chainId: createConstantSubscription(chainId), networkType: createConstantSubscription(NetworkType.Solana), - providerType: createSubscriptionFromUser((user) => { - return user ? ProviderType.Sollet : undefined + providerType: createSubscriptionFromPublicKey((publicKey) => { + return publicKey ? ProviderType.Sollet : undefined }), }, Asset: {}, diff --git a/packages/plugins/Solana/src/UI/components/AccountOverview.tsx b/packages/plugins/Solana/src/UI/components/AccountOverview.tsx deleted file mode 100644 index 01c47df04cd9..000000000000 --- a/packages/plugins/Solana/src/UI/components/AccountOverview.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface AccountOverviewProps {} - -export function AccountOverview(props: AccountOverviewProps) { - return The current account overview. -} diff --git a/packages/plugins/Solana/src/UI/components/AssetList.tsx b/packages/plugins/Solana/src/UI/components/AssetList.tsx deleted file mode 100644 index 340222116c48..000000000000 --- a/packages/plugins/Solana/src/UI/components/AssetList.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface AssetListProps {} - -export function AssetList(props: AssetListProps) { - return No Asset. -} diff --git a/packages/plugins/Solana/src/UI/components/CollectionList.tsx b/packages/plugins/Solana/src/UI/components/CollectionList.tsx deleted file mode 100644 index 207993efb99c..000000000000 --- a/packages/plugins/Solana/src/UI/components/CollectionList.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface CollectionListProps {} - -export function CollectionList(props: CollectionListProps) { - return No Collection. -} diff --git a/packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx b/packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx deleted file mode 100644 index 8bcec1fff6b5..000000000000 --- a/packages/plugins/Solana/src/UI/components/DashboardAssetsTab.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface DashboardAssetsTabProps {} - -export function DashboardAssetsTab(props: DashboardAssetsTabProps) { - return Dashboard Assets Tab. -} diff --git a/packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx b/packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx deleted file mode 100644 index 1b3a1295b76a..000000000000 --- a/packages/plugins/Solana/src/UI/components/DashboardHistoryTab.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface DashboardHistoryTabProps {} - -export function DashboardHistoryTab(props: DashboardHistoryTabProps) { - return Dashboard History Tab. -} diff --git a/packages/plugins/Solana/src/UI/components/DashboardOverview.tsx b/packages/plugins/Solana/src/UI/components/DashboardOverview.tsx deleted file mode 100644 index 94fc5b2816a4..000000000000 --- a/packages/plugins/Solana/src/UI/components/DashboardOverview.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface DashboardOverviewProps {} - -export function DashboardOverview(props: DashboardOverviewProps) { - return Dashboard Overview. -} diff --git a/packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx b/packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx deleted file mode 100644 index b39faeede170..000000000000 --- a/packages/plugins/Solana/src/UI/components/DashboardTransferTab.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface DashboardTransferTabProps {} - -export function DashboardTransferTab(props: DashboardTransferTabProps) { - return Dashboard Transfer Tab. -} diff --git a/packages/plugins/Solana/src/UI/components/PluginPanel.tsx b/packages/plugins/Solana/src/UI/components/PluginPanel.tsx deleted file mode 100644 index 92079d14f4cb..000000000000 --- a/packages/plugins/Solana/src/UI/components/PluginPanel.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { CopyIcon } from '@masknet/icons' -import { makeStyles } from '@masknet/theme' -import { useAccount } from '@masknet/web3-shared-solana' -import { Box, Button, IconButton, Typography } from '@mui/material' -import { useCallback } from 'react' -import { useCopyToClipboard } from 'react-use' -import { useI18N } from '../../locales' - -const useStyles = makeStyles()((theme) => ({ - root: { - display: 'flex', - flexDirection: 'column', - height: 350, - padding: theme.spacing(0, 2, 0, 3), - }, - main: { - display: 'flex', - flex: 1, - flexDirection: 'column', - justifyContent: 'center', - alignItems: 'flex-start', - }, - copy: { - width: 16, - height: 16, - cursor: 'pointer', - stroke: theme.palette.text.secondary, - }, - label: { - fontSize: 18, - }, - balance: { - fontSize: 24, - }, - image: { - width: 24, - height: 24, - }, -})) - -export interface PluginPanelProps {} - -export function PluginPanel(props: PluginPanelProps) { - const t = useI18N() - const { classes } = useStyles() - - const { value: account } = useAccount() - const address = '0x000000000' - const balance = '10' - const [, copyToClipboard] = useCopyToClipboard() - - const onLogIn = useCallback(() => console.log('login'), []) - const onSignUp = useCallback(() => console.log('signup'), []) - const onLogOut = useCallback(() => console.log('logout'), []) - - console.log(account) - - if (address) - return ( - - - - - Profile Information - - - - {address} - copyToClipboard(address)}> - - - - - - {balance} Solana - - - - - - - - ) - - return ( - - - {t.card_state_text_no_profile()} - - - - - - - ) -} diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index a68b4aae3869..68cf94fc2673 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -1,7 +1,7 @@ import { useCallback, cloneElement, isValidElement } from 'react' import type { Web3Plugin } from '@masknet/plugin-infra' +import { WalletAdapterNetwork } from '@solana/wallet-adapter-base' import { useSolletWallet } from '../../hooks/useSollectWallet' -import { WalletAdapterNetwork } from '@solana/wallet-adapter-base/lib/index.js' import { getStorage } from '../../storage' export function ProviderIconClickBait({ @@ -17,7 +17,7 @@ export function ProviderIconClickBait({ const adapter = solletWallet.adapter() await adapter.connect() if (adapter?.publicKey) { - await getStorage().publicKey.setValue(adapter.publicKey) + await getStorage().publicKey.setValue(adapter.publicKey.toBase58()) onSubmit?.(network, provider) } }, [solletWallet, provider, onClick, onSubmit]) diff --git a/packages/plugins/Solana/src/UI/components/TransactionList.tsx b/packages/plugins/Solana/src/UI/components/TransactionList.tsx deleted file mode 100644 index b6c4590a1e68..000000000000 --- a/packages/plugins/Solana/src/UI/components/TransactionList.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Typography } from '@mui/material' - -export interface TransactionListProps {} - -export function TransactionList(props: TransactionListProps) { - return No transaction. -} diff --git a/packages/plugins/Solana/src/base.ts b/packages/plugins/Solana/src/base.ts index c83965435f85..4e01c76b7749 100644 --- a/packages/plugins/Solana/src/base.ts +++ b/packages/plugins/Solana/src/base.ts @@ -1,5 +1,5 @@ import type { Plugin } from '@masknet/plugin-infra' -import { languages } from './locales' +import { languages } from './locales/languages' import { PLUGIN_ID, PLUGIN_ICON, PLUGIN_NAME, PLUGIN_DESCRIPTION, PLUGIN_PROVIDERS, PLUGIN_NETWORKS } from './constants' export const base: Plugin.Shared.Definition = { @@ -14,6 +14,7 @@ export const base: Plugin.Shared.Definition = { target: 'stable', }, i18n: languages, + declareApplicationCategories: [], declareWeb3Networks: PLUGIN_NETWORKS, declareWeb3Providers: PLUGIN_PROVIDERS, } diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index a38757dbef44..9916fde42ca0 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -18,7 +18,7 @@ export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ isMainnet: true, }, { - ID: `${PLUGIN_ID}_solana`, + ID: `${PLUGIN_ID}_solana_testnet`, networkSupporterPluginID: PLUGIN_ID, chainId: ChainId.Testnet, type: NetworkType.Solana, diff --git a/packages/plugins/Solana/src/helpers/formatter.ts b/packages/plugins/Solana/src/helpers/formatter.ts index 2c4ccdadf7af..573852f38d3c 100644 --- a/packages/plugins/Solana/src/helpers/formatter.ts +++ b/packages/plugins/Solana/src/helpers/formatter.ts @@ -1,5 +1,4 @@ export function formatAddress(address: string, size = 0) { - if (!/0x\w{16}/.test(address)) return address if (size === 0 || size >= 8) return address return `${address.substr(0, 2 + size)}...${address.substr(-size)}` } diff --git a/packages/plugins/Solana/src/locales/es-ES.json b/packages/plugins/Solana/src/locales/es-ES.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/packages/plugins/Solana/src/locales/es-ES.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/plugins/Solana/src/locales/fa-IR.json b/packages/plugins/Solana/src/locales/fa-IR.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/packages/plugins/Solana/src/locales/fa-IR.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/plugins/Solana/src/locales/fr-FR.json b/packages/plugins/Solana/src/locales/fr-FR.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/packages/plugins/Solana/src/locales/fr-FR.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/plugins/Solana/src/locales/index.ts b/packages/plugins/Solana/src/locales/index.ts index 947f5bf3f420..d6ead60252e4 100644 --- a/packages/plugins/Solana/src/locales/index.ts +++ b/packages/plugins/Solana/src/locales/index.ts @@ -2,29 +2,5 @@ // Run `npx gulp sync-languages` to regenerate. // Default fallback language in a family of languages are chosen by the alphabet order // To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts -import en_US from './en-US.json' -import es_ES from './es-ES.json' -import fa_IR from './fa-IR.json' -import fr_FR from './fr-FR.json' -import it_IT from './it-IT.json' -import ja_JP from './ja-JP.json' -import ko_KR from './ko-KR.json' -import qya_AA from './qya-AA.json' -import ru_RU from './ru-RU.json' -import zh_CN from './zh-CN.json' -import zh_TW from './zh-TW.json' export * from './i18n_generated' -export const languages = { - en: en_US, - es: es_ES, - fa: fa_IR, - fr: fr_FR, - it: it_IT, - ja: ja_JP, - ko: ko_KR, - qy: qya_AA, - ru: ru_RU, - 'zh-CN': zh_CN, - zh: zh_TW, -} diff --git a/packages/plugins/Solana/src/locales/it-IT.json b/packages/plugins/Solana/src/locales/it-IT.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/packages/plugins/Solana/src/locales/it-IT.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/plugins/Solana/src/locales/languages.ts b/packages/plugins/Solana/src/locales/languages.ts new file mode 100644 index 000000000000..5aefce48b681 --- /dev/null +++ b/packages/plugins/Solana/src/locales/languages.ts @@ -0,0 +1,34 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts +import en_US from './en-US.json' +import ja_JP from './ja-JP.json' +import ko_KR from './ko-KR.json' +import qya_AA from './qya-AA.json' +import zh_CN from './zh-CN.json' +import zh_TW from './zh-TW.json' +export const languages = { + en: en_US, + ja: ja_JP, + ko: ko_KR, + qy: qya_AA, + 'zh-CN': zh_CN, + zh: zh_TW, +} +// @ts-ignore +if (import.meta.webpackHot) { + // @ts-ignore + import.meta.webpackHot.accept( + ['./en-US.json', './ja-JP.json', './ko-KR.json', './qya-AA.json', './zh-CN.json', './zh-TW.json'], + () => + globalThis.dispatchEvent?.( + new CustomEvent('MASK_I18N_HMR', { + detail: [ + 'com.maskbook.solana', + { en: en_US, ja: ja_JP, ko: ko_KR, qy: qya_AA, 'zh-CN': zh_CN, zh: zh_TW }, + ], + }), + ), + ) +} diff --git a/packages/plugins/Solana/src/locales/ru-RU.json b/packages/plugins/Solana/src/locales/ru-RU.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/packages/plugins/Solana/src/locales/ru-RU.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/plugins/Solana/src/storage/index.ts b/packages/plugins/Solana/src/storage/index.ts index 511bfc06b659..a93886378fe8 100644 --- a/packages/plugins/Solana/src/storage/index.ts +++ b/packages/plugins/Solana/src/storage/index.ts @@ -1,8 +1,7 @@ -import type { PublicKey } from '@solana/web3.js' import type { ScopedStorage } from '@masknet/shared-base' export const StorageDefaultValue = { - publicKey: null as null | PublicKey, + publicKey: null as null | string, } let storage: ScopedStorage = null! diff --git a/packages/web3-shared/solana/types.ts b/packages/web3-shared/solana/types.ts index 7cd801e066e2..fbbd94400c3c 100644 --- a/packages/web3-shared/solana/types.ts +++ b/packages/web3-shared/solana/types.ts @@ -1,7 +1,7 @@ export enum ChainId { MainnetBeta = 1, Testnet = 2, - Devnet = 2, + Devnet = 3, } export enum NetworkType { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c93dd7f5771e..8fdef794a18c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1109,7 +1109,7 @@ packages: bintrees: 1.0.2 bn.js: 4.12.0 compare-versions: 3.6.0 - ethereumjs-abi: 0.6.6 + ethereumjs-abi: 0.6.8 ethereumjs-blockstream: 2.0.7 ethereumjs-util: 5.2.1 find-versions: 2.0.0 @@ -14004,11 +14004,11 @@ packages: resolution: {integrity: sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg==} dev: false - /ethereumjs-abi/0.6.6: - resolution: {integrity: sha512-w8KubDsA/+OAuqtIR9RGsMcoZ5nhM8vxwjJAJvEIY+clhxA3BHoLG3+ClYQaQhD0n3mlDt3U5rBrmSVJvI3c8A==} + /ethereumjs-abi/0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: bn.js: 4.12.0 - ethereumjs-util: 5.2.1 + ethereumjs-util: 6.2.1 dev: false /ethereumjs-account/2.0.5: @@ -14862,7 +14862,6 @@ packages: peerDependenciesMeta: debug: optional: true - dev: true /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} From ad64ceffb6ea05d0385b73dacb2710a84d0a9faf Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 30 Dec 2021 21:23:31 +0800 Subject: [PATCH 04/19] fix: remove hooks --- packages/web3-shared/solana/hooks/index.ts | 5 +---- packages/web3-shared/solana/hooks/useAccount.ts | 7 ------- packages/web3-shared/solana/hooks/useBalance.ts | 9 --------- packages/web3-shared/solana/hooks/useChainConfig.ts | 8 -------- packages/web3-shared/solana/hooks/useChainId.ts | 5 ----- packages/web3-shared/solana/pipes/index.ts | 3 ++- 6 files changed, 3 insertions(+), 34 deletions(-) delete mode 100644 packages/web3-shared/solana/hooks/useAccount.ts delete mode 100644 packages/web3-shared/solana/hooks/useBalance.ts delete mode 100644 packages/web3-shared/solana/hooks/useChainConfig.ts delete mode 100644 packages/web3-shared/solana/hooks/useChainId.ts diff --git a/packages/web3-shared/solana/hooks/index.ts b/packages/web3-shared/solana/hooks/index.ts index d724bae93835..336ce12bb910 100644 --- a/packages/web3-shared/solana/hooks/index.ts +++ b/packages/web3-shared/solana/hooks/index.ts @@ -1,4 +1 @@ -export * from './useAccount' -export * from './useBalance' -export * from './useChainId' -export * from './useChainConfig' +export {} diff --git a/packages/web3-shared/solana/hooks/useAccount.ts b/packages/web3-shared/solana/hooks/useAccount.ts deleted file mode 100644 index eba81f4d04c2..000000000000 --- a/packages/web3-shared/solana/hooks/useAccount.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { useAsyncRetry } from 'react-use' - -export function useAccount() { - return useAsyncRetry(async () => { - return '0x000000000' - }, []) -} diff --git a/packages/web3-shared/solana/hooks/useBalance.ts b/packages/web3-shared/solana/hooks/useBalance.ts deleted file mode 100644 index b8eeccb00910..000000000000 --- a/packages/web3-shared/solana/hooks/useBalance.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useMemo } from 'react' -import { useAccount } from './useAccount' - -export function useBalance() { - const { value: account } = useAccount() - return useMemo(() => { - return account?.balance ?? '0' - }, [account?.balance]) -} diff --git a/packages/web3-shared/solana/hooks/useChainConfig.ts b/packages/web3-shared/solana/hooks/useChainConfig.ts deleted file mode 100644 index 0b5e295f6d76..000000000000 --- a/packages/web3-shared/solana/hooks/useChainConfig.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { useMemo } from 'react' -import type { ChainId } from '../types' - -export function useChainConfig(chainId: ChainId) { - return useMemo(() => { - return {} - }, []) -} diff --git a/packages/web3-shared/solana/hooks/useChainId.ts b/packages/web3-shared/solana/hooks/useChainId.ts deleted file mode 100644 index d3d2b0c85b6e..000000000000 --- a/packages/web3-shared/solana/hooks/useChainId.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ChainId } from '../types' - -export function useChainId() { - return ChainId.Mainnet -} diff --git a/packages/web3-shared/solana/pipes/index.ts b/packages/web3-shared/solana/pipes/index.ts index d53407f750cf..ff8f4f0e603c 100644 --- a/packages/web3-shared/solana/pipes/index.ts +++ b/packages/web3-shared/solana/pipes/index.ts @@ -4,8 +4,9 @@ import { ChainId, ProviderType } from '../types' export const resolveChainName = createLookupTableResolver( { - [ChainId.Mainnet]: 'mainnet', + [ChainId.MainnetBeta]: 'mainnet', [ChainId.Testnet]: 'testnet', + [ChainId.Devnet]: 'devnet', }, () => 'Unknown chain id', ) From 3e9e26a78b1a5dcd2c240496e1bd34ba4d90265a Mon Sep 17 00:00:00 2001 From: unclebill Date: Fri, 31 Dec 2021 18:41:10 +0800 Subject: [PATCH 05/19] fix: add useConnection --- .../src/UI/components/ProviderIconClickBait.tsx | 2 +- packages/plugins/Solana/src/hooks/index.ts | 3 ++- packages/plugins/Solana/src/hooks/useConnection.ts | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 packages/plugins/Solana/src/hooks/useConnection.ts diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index 5a7d4968205c..a3ad8a86fcaa 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -1,7 +1,7 @@ import { useCallback, cloneElement, isValidElement } from 'react' import type { Web3Plugin } from '@masknet/plugin-infra' import { WalletAdapterNetwork } from '@solana/wallet-adapter-base' -import { useSolletWallet } from '../../hooks/useSolletWallet' +import { useSolletWallet } from '../../hooks' import { getStorage } from '../../storage' export function ProviderIconClickBait({ diff --git a/packages/plugins/Solana/src/hooks/index.ts b/packages/plugins/Solana/src/hooks/index.ts index 336ce12bb910..3929a247233a 100644 --- a/packages/plugins/Solana/src/hooks/index.ts +++ b/packages/plugins/Solana/src/hooks/index.ts @@ -1 +1,2 @@ -export {} +export * from './useConnection' +export * from './useSolletWallet' diff --git a/packages/plugins/Solana/src/hooks/useConnection.ts b/packages/plugins/Solana/src/hooks/useConnection.ts new file mode 100644 index 000000000000..2d1f966e243d --- /dev/null +++ b/packages/plugins/Solana/src/hooks/useConnection.ts @@ -0,0 +1,11 @@ +import { useMemo } from 'react' +import type { WalletAdapterNetwork } from '@solana/wallet-adapter-base' + +export function useConnection(network: WalletAdapterNetwork) { + const connection = useMemo(() => { + const endpoint = clusterApiUrl(network) + return new Connection(endpoint) + }, [network]) + + return connection +} From b4656a895aebed8ae07782e581b967b265fa4c85 Mon Sep 17 00:00:00 2001 From: unclebill Date: Sat, 1 Jan 2022 22:49:04 +0800 Subject: [PATCH 06/19] wip: upgrade wallet-adapter --- packages/plugins/Solana/package.json | 6 +- .../UI/components/ProviderIconClickBait.tsx | 14 +- packages/plugins/Solana/src/hooks/index.ts | 1 - .../Solana/src/hooks/useSolletWallet.ts | 8 - pnpm-lock.yaml | 468 +++++++++--------- 5 files changed, 257 insertions(+), 240 deletions(-) delete mode 100644 packages/plugins/Solana/src/hooks/useSolletWallet.ts diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json index 37af3188b82b..c374651fc3ea 100644 --- a/packages/plugins/Solana/package.json +++ b/packages/plugins/Solana/package.json @@ -10,9 +10,9 @@ "@masknet/shared-base": "workspace:*", "@masknet/theme": "workspace:*", "@masknet/web3-shared-solana": "workspace:*", - "@solana/wallet-adapter-base": "^0.7.0", - "@solana/wallet-adapter-react": "^0.13.1", - "@solana/wallet-adapter-wallets": "^0.11.3", + "@solana/wallet-adapter-base": "0.9.0", + "@solana/wallet-adapter-react": "0.15.0", + "@solana/wallet-adapter-wallets": "0.14.0", "@solana/web3.js": "^1.30.2", "bignumber.js": "^9.0.1", "react-use": "^17.3.1" diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index a3ad8a86fcaa..500b3ae78459 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -1,7 +1,8 @@ import { useCallback, cloneElement, isValidElement } from 'react' import type { Web3Plugin } from '@masknet/plugin-infra' import { WalletAdapterNetwork } from '@solana/wallet-adapter-base' -import { useSolletWallet } from '../../hooks' +import { SolletWalletAdapter } from '@solana/wallet-adapter-wallets' + import { getStorage } from '../../storage' export function ProviderIconClickBait({ @@ -11,16 +12,15 @@ export function ProviderIconClickBait({ onSubmit, onClick, }: Web3Plugin.UI.ProviderIconClickBaitProps) { - const solletWallet = useSolletWallet(WalletAdapterNetwork.Mainnet) + const solletAdapter = new SolletWalletAdapter({ network: WalletAdapterNetwork.Mainnet }) const onLogIn = useCallback(async () => { onClick?.(network, provider) - const adapter = solletWallet.adapter() - await adapter.connect() - if (adapter?.publicKey) { - await getStorage().publicKey.setValue(adapter.publicKey.toBase58()) + await solletAdapter.connect() + if (solletAdapter?.publicKey) { + await getStorage().publicKey.setValue(solletAdapter.publicKey.toBase58()) onSubmit?.(network, provider) } - }, [solletWallet, provider, onClick, onSubmit]) + }, [provider, onClick, onSubmit]) return ( <> diff --git a/packages/plugins/Solana/src/hooks/index.ts b/packages/plugins/Solana/src/hooks/index.ts index 3929a247233a..747104f30893 100644 --- a/packages/plugins/Solana/src/hooks/index.ts +++ b/packages/plugins/Solana/src/hooks/index.ts @@ -1,2 +1 @@ export * from './useConnection' -export * from './useSolletWallet' diff --git a/packages/plugins/Solana/src/hooks/useSolletWallet.ts b/packages/plugins/Solana/src/hooks/useSolletWallet.ts deleted file mode 100644 index 37e0ae164f95..000000000000 --- a/packages/plugins/Solana/src/hooks/useSolletWallet.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { getSolletWallet } from '@solana/wallet-adapter-wallets' -import type { WalletAdapterNetwork } from '@solana/wallet-adapter-base' -import { useMemo } from 'react' - -export function useSolletWallet(network: WalletAdapterNetwork) { - const wallet = useMemo(() => getSolletWallet({ network }), [network]) - return wallet -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d04808bb2b32..ff11b94262e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -730,9 +730,9 @@ importers: '@masknet/shared-base': workspace:* '@masknet/theme': workspace:* '@masknet/web3-shared-solana': workspace:* - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/wallet-adapter-react': ^0.13.1 - '@solana/wallet-adapter-wallets': ^0.11.3 + '@solana/wallet-adapter-base': 0.9.0 + '@solana/wallet-adapter-react': 0.15.0 + '@solana/wallet-adapter-wallets': 0.14.0 '@solana/web3.js': ^1.30.2 bignumber.js: ^9.0.1 react-use: ^17.3.1 @@ -743,9 +743,9 @@ importers: '@masknet/shared-base': link:../../shared-base '@masknet/theme': link:../../theme '@masknet/web3-shared-solana': link:../../web3-shared/solana - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 - '@solana/wallet-adapter-react': 0.13.1_f3bbd4dd73ec9f0f5441e1ae63d85c8e - '@solana/wallet-adapter-wallets': 0.11.3_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-base': 0.9.0 + '@solana/wallet-adapter-react': 0.15.0 + '@solana/wallet-adapter-wallets': 0.14.0 '@solana/web3.js': 1.31.0 bignumber.js: 9.0.1 react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 @@ -2957,8 +2957,8 @@ packages: - google-protobuf dev: false - /@blocto/sdk/0.2.18: - resolution: {integrity: sha512-jMaI2h7ZXawR4MWYj3fnvrGIiJKvIqB82IsSEQLc9MkdHDVvuF0r5JzBaGZxbhxN4+I8NQjKvJYTG1CGKRGwbw==} + /@blocto/sdk/0.2.21: + resolution: {integrity: sha512-yolSah+bYEZGzbBYr0GuQ2Pca1h95aF/btDJvcEyranosyR27kokvRKiPTX4Sost+giAD+Z6vrD8/hM6E+LnUw==} dependencies: '@solana/web3.js': 1.31.0 bs58: 4.0.1 @@ -4533,7 +4533,7 @@ packages: '@json-rpc-tools/utils': 1.7.6 axios: 0.21.1 safe-json-utils: 1.1.1 - ws: 7.5.5 + ws: 7.5.6 transitivePeerDependencies: - bufferutil - debug @@ -5348,43 +5348,41 @@ packages: buffer: 6.0.3 dev: false - /@solana/wallet-adapter-base/0.7.0_@solana+web3.js@1.31.0: - resolution: {integrity: sha512-sMWLOdqaaaQwa8BNCPKTBfRBf49p5JfgvI6wZw25tj1RWm/GwNWYQ4nDepWKlISVfgCakezgLVFQ6T/5myo1HA==} - peerDependencies: - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-base/0.9.0: + resolution: {integrity: sha512-GScWm5xXUwyAJVPDnJSdPi9+pt6lqniphlf0ewB48Aeqxe4QkZcTbNgdS8MtBLdz97OAAuUTPR5bOHye2V5Erg==} dependencies: '@solana/web3.js': 1.31.0 eventemitter3: 4.0.7 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-bitkeep/0.1.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-SocG9vvTf3hc3JsYbpn1xroW8yNWRoC7b7OVXHMWWeavdAA7zE3/DiP1Ir2WcOmD5LuFcfma6tgyyvU8tLGP8Q==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-bitkeep/0.3.0: + resolution: {integrity: sha512-XQDjHpFJGZJayG5W06AgVl/siAmoVFsRRKdQPi1HxyqmDzrqZ7iy/T0peqoUPGDH/QTXQW75pTzy75FkTet1ow==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-bitpie/0.3.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-WV6lbeWKHHQaZCOdKiM5YTc5Az6N8iBdK/AyKJ2/d862WkpG9Ig0O3by9v0FyW91Ns0rEsXhU0oGLl2MahO76w==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-bitpie/0.5.0: + resolution: {integrity: sha512-TPrfNAWo7v79mGdiuT58f0bZuBUZhYvkmRxsEqGV/sZXwRbV2f175KlHN4v0PXrqbU8iiPmUGpgiWJ7PihVZ/w==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-blocto/0.3.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-n3GfXOFPhrfpqK3mBCbx5WZtE3RI5/p23qGO9xV0hNSqgn1Pn7iB2oPg2t6RAaAvROif/Y9c5+zQF5doR/LKuQ==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-blocto/0.5.0: + resolution: {integrity: sha512-lsjwTea+7AfMfcArywsOz5PnPqUvqcpUOQTOGFBYUCvxskj3B+c4wTXLB4cFKx2WwqMIdfSEbxhtBLDeIGb+ow==} dependencies: - '@blocto/sdk': 0.2.18 - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@blocto/sdk': 0.2.21 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 transitivePeerDependencies: - bufferutil @@ -5392,189 +5390,181 @@ packages: - utf-8-validate dev: false - /@solana/wallet-adapter-clover/0.2.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-s5f6m5bb/HEmMZ7bZfl+HUlb0J5qyTPq21GurH0Tt4uXnTl6NfIi67jSch/Q2gfwmCpFsoeZi0uFRpZxXdl22Q==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-clover/0.4.0: + resolution: {integrity: sha512-Ih+3IZlh9OSJhdeeWM3B3qjwW2+Asqj0jVW0Nh9XaolfRCyf+fLdDs3EsdxI+UHpZT9ZMNIaxU4DvNdOhOt/3w==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-coin98/0.3.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-HyEPGHojW3ueahMDFOu9h1phYAj4U8LIpXunrqUhL5ApjGFKF4ZFQYd/u2U+frFyj49rmPULlcRkLihP3h59Aw==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-coin98/0.5.0: + resolution: {integrity: sha512-ykX+wJBaxNR/GW1e4PHAuSj9VR/zaWyW3j2B/nUPwmMKXwBqzb/H6omGl1ys2GnYB3OIGnlSVlB3hPftAPh/LQ==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 '@types/bs58': 4.0.1 bs58: 4.0.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-coinhub/0.1.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-BWRw9fKWlLPFUeQVCeEvNZo+T+vdkRAih3AZComX7nuKJ9JY1Ekh5WotmvQFr9z+DUyNfsxgXOTJ/c+tFg+M5Q==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-coinhub/0.3.0: + resolution: {integrity: sha512-rqfwOuwGuXEWLzAKHkNwNF2Ofu18CWqafV4lGtKB0TO2z49ufXjoliG5EN3jQLScdVuTNcft3Xnl+1QiCo4xng==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-ledger/0.7.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-az4Z6eAFe77AlSqCOl9lHhfIrK/phQruHItLLTtT+8a1Y5QylodBNvc/CiD+I8ULwXDOvonXsFgnJnAVS/xMUg==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-ledger/0.9.0: + resolution: {integrity: sha512-9TCwdmYdRE1QSxl3cJv0naya0jhgYW6XmoAaMWxvQXTpm2Gy8uvFHfDErTddBcC7DWCrQfAA0smUP8yYzIiShA==} dependencies: '@ledgerhq/hw-transport': 6.11.2 '@ledgerhq/hw-transport-webhid': 6.11.2 - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 '@types/w3c-web-hid': 1.0.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-mathwallet/0.7.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-RqQkqHHyYzg0czopiNWkzID8RF7K6s76QBzVlD1XRJI4lLJKzODu30v+5H+15JWBBtgFuys1pLHZ7p3y3Z6dvg==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-mathwallet/0.9.0: + resolution: {integrity: sha512-A08RD7vqBXSFIjDJT3aGJfKZk2b8dpjxpA09ECCzqXm/nMM8WIa4/wkzktMWQoWB2h9LnpHm3NB9jhVk20jfqA==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-phantom/0.7.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-u2SkJ6LO+A2MKTgN9bsG5Ro0Vn9KL7NKsGPT0JrYI2rvXm3yZnhlAE0i0oq+/nFAjkL/+Onm9boOaYF0/Z7vBQ==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-phantom/0.9.0: + resolution: {integrity: sha512-A1ujox2G38LbGXZxf/rkkzb+T9KTIvzramu11oHRd02jLaHgrO2zGRWsCRkW1ZkwoZsrbRf7zbjoUyoZiUbpVg==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-react/0.13.1_f3bbd4dd73ec9f0f5441e1ae63d85c8e: - resolution: {integrity: sha512-Sk45AuOF8EgmR28zcib5NquvOwTpBlyDA8Iku1MVdXUQ9giA/tBwfJw21HIf1r+TVepg+V0xAP5FhP+MX0p6QQ==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/wallet-adapter-wallets': ^0.11.0 - '@solana/web3.js': ^1.20.0 - react: ^17.0.2 + /@solana/wallet-adapter-react/0.15.0: + resolution: {integrity: sha512-Djh6FdKW8sSfFyQUgiCT2eRzoj489xskX81fNlOVNMCuMWljGa/IkbUe5nNKa+iIFeUFcvVJpD8Fyi4LeeZOgQ==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 - '@solana/wallet-adapter-wallets': 0.11.3_81a881bbe6f175c24647acd053eda3ac + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 - react: 18.0.0-rc.0 + react: 17.0.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-safepal/0.3.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-G/pCMxAeTWZlvJAKEyHRvLDZIyPkg4Zw/xfGQrTM9AG70cf3RFaiTK+8kqO1JL/xKGUsVfnJRFfPImR+hut6kw==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-safepal/0.5.0: + resolution: {integrity: sha512-GZ8hDJKQRZyX5G8nA/5yRyBMSEs+G6LGDdepAPudtyVu00mJn+SdUcW2lVUHlyUbl6rxbzwywETNk2rh7YG7LA==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-slope/0.3.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-2ghqUcL8qmCMMtQ2X5xQSZzEpreRW0dfR/o7zHcp3uU4XW5OXFJ2a0YnGUiLVAAEesUG2gmplKSerp72BnPZjA==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-slope/0.5.0: + resolution: {integrity: sha512-G2zctKjIbCGhjVU/4xSZbzEJKJGZOSb8z/KUTf4bgMrjAniTyLuf4XOG6anSMLXDW+ubFHlpKMPevENmhFhXBw==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 '@types/bs58': 4.0.1 bs58: 4.0.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-solflare/0.4.1_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-ZydQgOuaBac0+a/Z4ROO54NObFiF/S9MOwiOfICXagk4PrWEJNbG1RwkwZzjtxAeYHEbGCb52XN2Buzm5EanJw==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-solflare/0.6.0: + resolution: {integrity: sha512-9t42wFQ6TnknTt7yIJXdC9flFrwPYXUSBeQe0z/3BE7ubFKJeVbs3unSa5hffERRphQ3Fv3q6OLyrD93N0gR+Q==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-sollet/0.8.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-9Bxj2IFT9XPh7Nl9IQaTyNwS3uoowQahqE43Ei2DbFJCrlN8qC6wSnJwHGAUPMKnL85Gg0IEZmtZfmuVmyTGQg==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-sollet/0.10.0: + resolution: {integrity: sha512-iq+7Q6YwvbJN4hVEZC3HCMCuG0qPFW66pG3vJbek6hLyWuHuLLRJWsMiQmNE7/WZP4T1eS1GJqpdOIZXG3CVfw==} dependencies: '@project-serum/sol-wallet-adapter': 0.2.6_@solana+web3.js@1.31.0 - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-solong/0.7.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-y7pal0G/91Oxaco/AVnu9aDFgiaabaFchS1Z62WJzC89Srm7gecclckd4MrQ/TE1TaZQi+8dUWWFGHJxU1zVKg==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-solong/0.9.0: + resolution: {integrity: sha512-hzx+1JWuZwYskBzVhkeSJ40FFEUtm0VBfpQiGcop5HEHwAMp6Qvjtdygm5p6Iqmcirv5lKiB7GjmMxDCQxwbvA==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-tokenpocket/0.2.0_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-NmqWnq8N5+fIsP5xjQbZIPqTf+jy5VVJ4eMdXHtGVrOZUTeQPD1fnBzKhWp212nJ0ObjN+1ylSKw7XTSS3cPWA==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-tokenpocket/0.4.0: + resolution: {integrity: sha512-QMILNv/vrSubn9xhW/ctMbJ4dVpCQE3h9ZQP3jiR/He88lUNU5MMTdfueftik9uNqmJHVgivfXB42dSnhPiWiw==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-torus/0.8.1_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-C6iD0dcr56C3oNukjZEJgLiCNwbgmV4dx08oLmGC8dJnDBwS1A0DNpjbJ3V7k4Ywi2OgsFRInpsQqBBU8+7SOg==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - '@solana/web3.js': ^1.20.0 + /@solana/wallet-adapter-torus/0.11.0: + resolution: {integrity: sha512-qr4eQj/h3cpij5YY8O+YErdyRTjQoHbIzg1MWOlcptBRIUrquKNHcxBlpWJb9+MBIoWelzULG2sqf3nTeQlIbw==} dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 + '@solana/wallet-adapter-base': 0.9.0 '@solana/web3.js': 1.31.0 - '@toruslabs/openlogin': 1.3.2 - '@toruslabs/openlogin-ed25519': 1.3.0 + '@toruslabs/solana-embed': 0.0.7 '@types/keccak': 3.0.1 '@types/readable-stream': 2.3.12 transitivePeerDependencies: - '@babel/runtime' + - bufferutil + - utf-8-validate dev: false - /@solana/wallet-adapter-wallets/0.11.3_81a881bbe6f175c24647acd053eda3ac: - resolution: {integrity: sha512-SiPampUuHYlN9QJfeScH8wZSuCk7GrwuYpb1kzi0N7oqtRf/baxXmZDQFKgWIP/L49FqCEtFmCaAkck0vi8bFA==} - peerDependencies: - '@solana/wallet-adapter-base': ^0.7.0 - dependencies: - '@solana/wallet-adapter-base': 0.7.0_@solana+web3.js@1.31.0 - '@solana/wallet-adapter-bitkeep': 0.1.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-bitpie': 0.3.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-blocto': 0.3.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-clover': 0.2.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-coin98': 0.3.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-coinhub': 0.1.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-ledger': 0.7.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-mathwallet': 0.7.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-phantom': 0.7.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-safepal': 0.3.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-slope': 0.3.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-solflare': 0.4.1_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-sollet': 0.8.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-solong': 0.7.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-tokenpocket': 0.2.0_81a881bbe6f175c24647acd053eda3ac - '@solana/wallet-adapter-torus': 0.8.1_81a881bbe6f175c24647acd053eda3ac + /@solana/wallet-adapter-wallets/0.14.0: + resolution: {integrity: sha512-1uUwRhQesFSRuRzOtkeUlgbtMKiS6+lE6Ye5g0cPO8c+w/q+NQuNPvVwBTKq8khdPxuPYyP8hEz4fNrFD5pAZg==} + dependencies: + '@solana/wallet-adapter-base': 0.9.0 + '@solana/wallet-adapter-bitkeep': 0.3.0 + '@solana/wallet-adapter-bitpie': 0.5.0 + '@solana/wallet-adapter-blocto': 0.5.0 + '@solana/wallet-adapter-clover': 0.4.0 + '@solana/wallet-adapter-coin98': 0.5.0 + '@solana/wallet-adapter-coinhub': 0.3.0 + '@solana/wallet-adapter-ledger': 0.9.0 + '@solana/wallet-adapter-mathwallet': 0.9.0 + '@solana/wallet-adapter-phantom': 0.9.0 + '@solana/wallet-adapter-safepal': 0.5.0 + '@solana/wallet-adapter-slope': 0.5.0 + '@solana/wallet-adapter-solflare': 0.6.0 + '@solana/wallet-adapter-sollet': 0.10.0 + '@solana/wallet-adapter-solong': 0.9.0 + '@solana/wallet-adapter-tokenpocket': 0.4.0 + '@solana/wallet-adapter-torus': 0.11.0 transitivePeerDependencies: - '@babel/runtime' - - '@solana/web3.js' - bufferutil - debug - utf-8-validate @@ -7594,16 +7584,21 @@ packages: engines: {node: '>= 10'} dev: false - /@toruslabs/eccrypto/1.1.7: - resolution: {integrity: sha512-zU4GnrH21yDY179fgp5Ovi4YjLdHy3WXM3QHCHAomYNxa03eAw2lxNR2bZ7kb698yk40s4WMrbnauukgabXH4Q==} - requiresBuild: true + /@toruslabs/base-controllers/1.4.2: + resolution: {integrity: sha512-8nhgVdjM6oTZ/lALmObymmk/XLVzLWgbq04AQY7P5FFQZnpwdMQ7k7piKdX7waaeyfRzgb5b/Zrf7LFEgAGvqQ==} + peerDependencies: + '@babel/runtime': 7.x dependencies: - acorn: 8.6.0 - elliptic: 6.5.4 - es6-promise: 4.2.8 - nan: 2.15.0 - optionalDependencies: - secp256k1: 3.8.0 + '@toruslabs/http-helpers': 2.1.4 + '@toruslabs/openlogin-jrpc': 1.3.3 + async-mutex: 0.3.2 + bignumber.js: 9.0.2 + bowser: 2.11.0 + broadcast-channel: 4.9.0 + eth-rpc-errors: 4.0.3 + ethereumjs-util: 7.1.3 + lodash: 4.17.21 + loglevel: 1.8.0 dev: false /@toruslabs/http-helpers/1.4.0: @@ -7615,20 +7610,21 @@ packages: deepmerge: 4.2.2 dev: false - /@toruslabs/openlogin-ed25519/1.3.0: - resolution: {integrity: sha512-JYVN52FTL1kEp2cON1Up3qxI+X1bFj7wCuvq0V9KFpyOff0gacqRZUyHFxge4H15ysMdaEkuo/yZHsw/JvD6Sg==} + /@toruslabs/http-helpers/2.1.4: + resolution: {integrity: sha512-OXSHdjm5He+XRrnZoEyhw3JqFRIlyaRZA6j0gSrSnKaUyKnVqTAfYgMYBw2oQ2GZYTjK44nnEZ0y9aU0rn4oyQ==} + engines: {node: '>=14.17.0', npm: '>=6.x'} peerDependencies: '@babel/runtime': 7.x dependencies: - '@toruslabs/tweetnacl-js': 1.0.3 + lodash.merge: 4.6.2 dev: false - /@toruslabs/openlogin-jrpc/1.3.1: - resolution: {integrity: sha512-yLM5I3AVEhhWqTUbSAcOjLvgwR8ZaOmVq2cw3Lvn3Dte9S04PYF+yKJD9uEz7dG3eJsh47TWiXxciQEKwaHSHQ==} + /@toruslabs/openlogin-jrpc/1.3.3: + resolution: {integrity: sha512-N8UqTdc26K0jIXXuh8mlxGog5qgLmm7ts9qwItC9sfGVIEKYu/9XonnMjxYZ2fTzJP4H+bARO377gGuMJDnLzg==} peerDependencies: '@babel/runtime': 7.x dependencies: - '@toruslabs/openlogin-utils': 1.3.0 + '@toruslabs/openlogin-utils': 1.3.3 end-of-stream: 1.4.4 events: 3.3.0 fast-safe-stringify: 2.1.1 @@ -7637,8 +7633,8 @@ packages: readable-stream: 3.6.0 dev: false - /@toruslabs/openlogin-utils/1.3.0: - resolution: {integrity: sha512-ugyBWIhNaaGJuGm4EqhNGJ1pjnUNGVwsyvMc6CCtgTEi/C07NdFUUMM9QqKcTGmRG8prdtbIlsVeTricK7EnUQ==} + /@toruslabs/openlogin-utils/1.3.3: + resolution: {integrity: sha512-MsICB8CdyF4KU3FALAMnz9PvZT5dIvgOzyympDYhoSX2CdxTGwtPNE0wmxm5gyclEHDKnnXBJ45pfG33HSQg+Q==} peerDependencies: '@babel/runtime': 7.x dependencies: @@ -7647,21 +7643,26 @@ packages: randombytes: 2.1.0 dev: false - /@toruslabs/openlogin/1.3.2: - resolution: {integrity: sha512-vdLB8heVDRo7N7h4pqo/uPcWky+fc4165dpbDDlcQPnPov3hCJRcY8jtZ1PcmbLcCTqhhOMEr4ALAZvAs14D3g==} + /@toruslabs/solana-embed/0.0.7: + resolution: {integrity: sha512-2FYsvFsGx6CUTMLiJ3LLfqt7yq/VV029x8MkMsDQvX/s0IPQx8Kk5yawORa/aIkyezPdtLvH3FFJTwsM/r8KMg==} + engines: {node: '>=14.17.0', npm: '>=6.x'} peerDependencies: '@babel/runtime': 7.x dependencies: - '@toruslabs/eccrypto': 1.1.7 + '@solana/web3.js': 1.31.0 + '@toruslabs/base-controllers': 1.4.2 '@toruslabs/http-helpers': 1.4.0 - '@toruslabs/openlogin-jrpc': 1.3.1 - '@toruslabs/openlogin-utils': 1.3.0 - lodash.merge: 4.6.2 + '@toruslabs/openlogin-jrpc': 1.3.3 + '@types/bs58': 4.0.1 + eth-rpc-errors: 4.0.3 + fast-deep-equal: 3.1.3 + is-stream: 3.0.0 + lodash-es: 4.17.21 + loglevel: 1.8.0 pump: 3.0.0 - dev: false - - /@toruslabs/tweetnacl-js/1.0.3: - resolution: {integrity: sha512-WQJYMTR/bkqvpk3DWOqRt5e24RhwJp9PXUoSj4zSthd3+fDhKYCI56YVMPNDKah1fCffOe9F3m8iZ5SgDZ+Csw==} + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false /@tsconfig/node10/1.0.8: @@ -8165,7 +8166,7 @@ packages: /@types/keccak/3.0.1: resolution: {integrity: sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg==} dependencies: - '@types/node': 16.11.7 + '@types/node': 16.11.17 dev: false /@types/lodash-es/4.17.5: @@ -8387,7 +8388,7 @@ packages: /@types/readable-stream/2.3.12: resolution: {integrity: sha512-IVe0ietigIRWjRg0gv2sydr0rhyPzdXQsBMU/gda8fl82xQL+J9UWRBcD0asxoe4pb5wTOsPrOz0KYJZVCXZJQ==} dependencies: - '@types/node': 16.11.7 + '@types/node': 16.11.17 safe-buffer: 5.2.1 dev: false @@ -9235,12 +9236,6 @@ packages: hasBin: true dev: true - /acorn/8.6.0: - resolution: {integrity: sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - /acorn/8.7.0: resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} engines: {node: '>=0.4.0'} @@ -9820,6 +9815,12 @@ packages: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: false + /async-mutex/0.3.2: + resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} + dependencies: + tslib: 2.3.1 + dev: false + /async-settle/1.0.0: resolution: {integrity: sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=} engines: {node: '>= 0.10'} @@ -10793,13 +10794,6 @@ packages: randombytes: 2.1.0 dev: false - /bip66/1.1.5: - resolution: {integrity: sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=} - dependencies: - safe-buffer: 5.2.1 - dev: false - optional: true - /blakejs/1.1.1: resolution: {integrity: sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==} @@ -10882,6 +10876,10 @@ packages: text-encoding-utf-8: 1.0.2 dev: false + /bowser/2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /boxen/4.2.0: resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} engines: {node: '>=8'} @@ -10937,6 +10935,19 @@ packages: dependencies: fill-range: 7.0.1 + /broadcast-channel/4.9.0: + resolution: {integrity: sha512-xWzFb3wrOZGJF2kOSs2D3KvHXdLDMVb+WypEIoNvwblcHgUBydVy65pDJ9RS4WN9Kyvs0UVQuCCzfKme0G6Qjw==} + dependencies: + '@babel/runtime': 7.16.5 + detect-node: 2.1.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + p-queue: 6.6.2 + rimraf: 3.0.2 + unload: 2.3.1 + dev: false + /brorand/1.1.0: resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} @@ -12911,7 +12922,6 @@ packages: /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true /detect-port-alt/1.1.6: resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} @@ -13117,16 +13127,6 @@ packages: tslib: 2.3.1 dev: true - /drbg.js/1.0.1: - resolution: {integrity: sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=} - engines: {node: '>=0.10'} - dependencies: - browserify-aes: 1.2.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - dev: false - optional: true - /duplexer/0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -13955,7 +13955,7 @@ packages: /eth-rpc-errors/4.0.3: resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} dependencies: - fast-safe-stringify: 2.0.8 + fast-safe-stringify: 2.1.1 dev: false /eth-sig-util/1.4.2: @@ -14577,10 +14577,6 @@ packages: /fast-levenshtein/2.0.6: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} - /fast-safe-stringify/2.0.8: - resolution: {integrity: sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==} - dev: false - /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: false @@ -16778,6 +16774,11 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + /is-stream/3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -18314,6 +18315,11 @@ packages: wrap-ansi: 6.2.0 dev: true + /loglevel/1.8.0: + resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} + engines: {node: '>= 0.6.0'} + dev: false + /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false @@ -18678,6 +18684,10 @@ packages: picomatch: 2.3.0 dev: true + /microseconds/0.2.0: + resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} + dev: false + /miller-rabin/4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true @@ -18972,6 +18982,7 @@ packages: /nan/2.15.0: resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} requiresBuild: true + optional: true /nano-base32/1.0.1: resolution: {integrity: sha1-ulSMh578+5DaHE2eCX20pGySVe8=} @@ -18999,6 +19010,12 @@ packages: resolution: {integrity: sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=} dev: false + /nano-time/1.0.0: + resolution: {integrity: sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=} + dependencies: + big-integer: 1.6.36 + dev: false + /nanoid/3.1.30: resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -19389,6 +19406,10 @@ packages: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} dev: true + /oblivious-set/1.0.0: + resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} + dev: false + /oboe/2.1.5: resolution: {integrity: sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=} dependencies: @@ -19629,6 +19650,14 @@ packages: aggregate-error: 3.1.0 dev: true + /p-queue/6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: false + /p-retry/4.6.1: resolution: {integrity: sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==} engines: {node: '>=8'} @@ -19649,7 +19678,6 @@ packages: engines: {node: '>=8'} dependencies: p-finally: 1.0.0 - dev: true /p-try/1.0.0: resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} @@ -20942,6 +20970,14 @@ packages: react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 dev: false + /react/17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + /react/18.0.0-rc.0: resolution: {integrity: sha512-PawosMBgF8k5Nlc3++ibzjFqPvo1XKv80MNtVYqz3abHHB2w3IpU65sSdSmBd2ooCwVhcp9b1vkx/twqhakNtA==} engines: {node: '>=0.10.0'} @@ -21757,22 +21793,6 @@ packages: /scrypt-js/3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - /secp256k1/3.8.0: - resolution: {integrity: sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==} - engines: {node: '>=4.0.0'} - requiresBuild: true - dependencies: - bindings: 1.5.0 - bip66: 1.1.5 - bn.js: 4.12.0 - create-hash: 1.2.0 - drbg.js: 1.0.1 - elliptic: 6.5.4 - nan: 2.15.0 - safe-buffer: 5.2.1 - dev: false - optional: true - /secp256k1/4.0.2: resolution: {integrity: sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==} engines: {node: '>=10.0.0'} @@ -24049,6 +24069,13 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /unload/2.3.1: + resolution: {integrity: sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==} + dependencies: + '@babel/runtime': 7.16.5 + detect-node: 2.1.0 + dev: false + /unpipe/1.0.0: resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} engines: {node: '>= 0.8'} @@ -25463,7 +25490,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws/8.4.0: resolution: {integrity: sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==} From c103d04efec855922b4fdb65b3cc8510631f3390 Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 6 Jan 2022 10:54:17 +0800 Subject: [PATCH 07/19] fixup! wip: upgrade wallet-adapter --- .../src/UI/components/ProviderIconClickBait.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index 500b3ae78459..f285b4806f0b 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -1,6 +1,6 @@ -import { useCallback, cloneElement, isValidElement } from 'react' +import { useCallback, cloneElement, isValidElement, useMemo, useEffect } from 'react' import type { Web3Plugin } from '@masknet/plugin-infra' -import { WalletAdapterNetwork } from '@solana/wallet-adapter-base' +import { Adapter, WalletAdapterNetwork, WalletReadyState } from '@solana/wallet-adapter-base' import { SolletWalletAdapter } from '@solana/wallet-adapter-wallets' import { getStorage } from '../../storage' @@ -12,7 +12,13 @@ export function ProviderIconClickBait({ onSubmit, onClick, }: Web3Plugin.UI.ProviderIconClickBaitProps) { - const solletAdapter = new SolletWalletAdapter({ network: WalletAdapterNetwork.Mainnet }) + const solletAdapter = useMemo( + () => + new SolletWalletAdapter({ + network: WalletAdapterNetwork.Mainnet, + }), + [], + ) const onLogIn = useCallback(async () => { onClick?.(network, provider) await solletAdapter.connect() From b5374527bd3a0b0b446d02b38b473afda7d36c59 Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 6 Jan 2022 12:31:49 +0800 Subject: [PATCH 08/19] wip --- packages/dashboard/src/pages/routes.tsx | 5 ----- .../main/GlobalVariableBridge/index.ts | 4 ++++ packages/injected-script/main/communicate.ts | 6 +++++- packages/injected-script/sdk/bridgedSolana.ts | 5 +++++ packages/injected-script/sdk/index.ts | 3 ++- packages/injected-script/shared/index.ts | 2 ++ packages/plugins/Solana/package.json | 4 ++++ .../UI/components/ProviderIconClickBait.tsx | 21 +++++++------------ packages/plugins/Solana/src/constants.ts | 9 +++++++- packages/plugins/Solana/src/utils.ts | 7 +++++++ packages/plugins/Solana/tsconfig.json | 1 + .../src/UI/components/I18NextProviderHMR.tsx | 3 +-- pnpm-lock.yaml | 9 ++++++++ 13 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 packages/plugins/Solana/src/utils.ts diff --git a/packages/dashboard/src/pages/routes.tsx b/packages/dashboard/src/pages/routes.tsx index 1e63377cbf3f..fcafee0b151a 100644 --- a/packages/dashboard/src/pages/routes.tsx +++ b/packages/dashboard/src/pages/routes.tsx @@ -18,11 +18,6 @@ export function Pages() { return ( - } - redirectTo={DashboardRoutes.Personas} - /> } /> } /> } /> diff --git a/packages/injected-script/main/GlobalVariableBridge/index.ts b/packages/injected-script/main/GlobalVariableBridge/index.ts index d28425e49282..03894ebcb28c 100644 --- a/packages/injected-script/main/GlobalVariableBridge/index.ts +++ b/packages/injected-script/main/GlobalVariableBridge/index.ts @@ -27,6 +27,10 @@ export function callRequest(path: string, id: number, request: unknown) { handlePromise(id, () => read(path).request(request)) } +export function execute(path: string, id: number) { + handlePromise(id, () => read(path)()) +} + export function bindEvent(path: string, bridgeEvent: keyof InternalEvents, event: string) { if (hasListened[event]) return hasListened[event] = true diff --git a/packages/injected-script/main/communicate.ts b/packages/injected-script/main/communicate.ts index 2687aba3c159..1555fc588a62 100644 --- a/packages/injected-script/main/communicate.ts +++ b/packages/injected-script/main/communicate.ts @@ -4,7 +4,7 @@ import { getCustomEventDetail, apply, warn } from './intrinsic' import { dispatchInput } from './EventListenerPatch/dispatchInput' import { dispatchPaste } from './EventListenerPatch/dispatchPaste' import { dispatchPasteImage } from './EventListenerPatch/dispatchPasteImage' -import { callRequest, access, bindEvent, until } from './GlobalVariableBridge' +import { callRequest, access, bindEvent, execute, until } from './GlobalVariableBridge' import { hookInputUploadOnce } from './EventListenerPatch/hookInputUploadOnce' document.addEventListener(CustomEventId, (e) => { @@ -30,6 +30,10 @@ document.addEventListener(CustomEventId, (e) => { // solana case 'solanaBridgeRequestListen': return apply(bindEvent, null, ['solana', 'solanaBridgeOnEvent', ...r[1]]) + case 'solanaBridgeExecute': + const result = apply(execute, null, [...r[1]]) + console.log('solanaBridgeExecute', { result }) + return result case 'solanaBridgeSendRequest': return apply(callRequest, null, ['solana', ...r[1]]) case 'solanaBridgePrimitiveAccess': diff --git a/packages/injected-script/sdk/bridgedSolana.ts b/packages/injected-script/sdk/bridgedSolana.ts index 7443c7087fd6..3cbcd3400051 100644 --- a/packages/injected-script/sdk/bridgedSolana.ts +++ b/packages/injected-script/sdk/bridgedSolana.ts @@ -29,6 +29,9 @@ function send(payload: JsonRpcPayload, callback: (error: Error | null, result?: let isConnected = false /** Interact with the current solana provider */ export const bridgedSolanaProvider: BridgedSolanaProvider = { + connect() { + return createPromise((id) => sendEvent('solanaBridgeExecute', 'solana.connect', id)) + }, request, send, sendAsync: send, @@ -65,6 +68,8 @@ async function watchConnectStatus() { watchConnectStatus() export interface BridgedSolanaProvider { + // _bn: result of serialization + connect(): Promise<{ publicKey: { _bn: string } }> /** Wait for window.solana object appears. */ untilAvailable(): Promise /** Send JSON RPC to the solana provider. */ diff --git a/packages/injected-script/sdk/index.ts b/packages/injected-script/sdk/index.ts index 94cefc4d98c6..83a3e8a655d7 100644 --- a/packages/injected-script/sdk/index.ts +++ b/packages/injected-script/sdk/index.ts @@ -6,6 +6,7 @@ import { sendEvent, rejectPromise, resolvePromise } from './utils' export { bridgedEthereumProvider } from './bridgedEthereum' export { bridgedCoin98Provider } from './bridgedCoin98' +export { bridgedSolanaProvider } from './bridgedSolana' export function pasteText(text: string) { sendEvent('paste', text) @@ -39,7 +40,6 @@ document.addEventListener(CustomEventId, (e) => { return onCoin98Event(...r[1]) case 'solanaBridgeOnEvent': return onSolanaEvent(...r[1]) - case 'ethBridgeSendRequest': case 'ethBridgePrimitiveAccess': case 'ethBridgeRequestListen': @@ -49,6 +49,7 @@ document.addEventListener(CustomEventId, (e) => { case 'solanaBridgeSendRequest': case 'solanaBridgePrimitiveAccess': case 'solanaBridgeRequestListen': + case 'solanaBridgeExecute': case 'input': case 'paste': case 'pasteImage': diff --git a/packages/injected-script/shared/index.ts b/packages/injected-script/shared/index.ts index 70c5f45e5cd2..d48d4667caa5 100644 --- a/packages/injected-script/shared/index.ts +++ b/packages/injected-script/shared/index.ts @@ -46,6 +46,8 @@ export interface InternalEvents { //#endregion //#region Solana inpage provider bridge + /** Request the bridge to connect. */ + solanaBridgeExecute: [path: string, req_id: number] /** Request the bridge to listen on an event. */ solanaBridgeRequestListen: [eventName: string] /** When a event happened. */ diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json index c374651fc3ea..5f713c5a681d 100644 --- a/packages/plugins/Solana/package.json +++ b/packages/plugins/Solana/package.json @@ -5,6 +5,7 @@ "types": "./dist/index.d.ts", "dependencies": { "@masknet/icons": "workspace:*", + "@masknet/injected-script": "workspace:*", "@masknet/plugin-infra": "workspace:*", "@masknet/shared": "workspace:*", "@masknet/shared-base": "workspace:*", @@ -15,6 +16,9 @@ "@solana/wallet-adapter-wallets": "0.14.0", "@solana/web3.js": "^1.30.2", "bignumber.js": "^9.0.1", + "bn.js": "^4.12.0", + "bs58": "^4.0.1", + "buffer": "^6.0.3", "react-use": "^17.3.1" } } diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index f285b4806f0b..6b5912e680d1 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -1,9 +1,8 @@ -import { useCallback, cloneElement, isValidElement, useMemo, useEffect } from 'react' +import { bridgedSolanaProvider } from '@masknet/injected-script' import type { Web3Plugin } from '@masknet/plugin-infra' -import { Adapter, WalletAdapterNetwork, WalletReadyState } from '@solana/wallet-adapter-base' -import { SolletWalletAdapter } from '@solana/wallet-adapter-wallets' - +import { cloneElement, isValidElement, useCallback } from 'react' import { getStorage } from '../../storage' +import { hexToBase58 } from '../../utils' export function ProviderIconClickBait({ network, @@ -12,18 +11,12 @@ export function ProviderIconClickBait({ onSubmit, onClick, }: Web3Plugin.UI.ProviderIconClickBaitProps) { - const solletAdapter = useMemo( - () => - new SolletWalletAdapter({ - network: WalletAdapterNetwork.Mainnet, - }), - [], - ) const onLogIn = useCallback(async () => { onClick?.(network, provider) - await solletAdapter.connect() - if (solletAdapter?.publicKey) { - await getStorage().publicKey.setValue(solletAdapter.publicKey.toBase58()) + const rsp = await bridgedSolanaProvider.connect() + if (rsp?.publicKey) { + const base58Key = hexToBase58(rsp.publicKey._bn) + await getStorage().publicKey.setValue(base58Key) onSubmit?.(network, provider) } }, [provider, onClick, onSubmit]) diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index 9916fde42ca0..f5f5665f89aa 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -34,6 +34,13 @@ export const PLUGIN_PROVIDERS: Web3Plugin.ProviderDescriptor[] = [ providerAdaptorPluginID: PLUGIN_ID, type: ProviderType.Sollet, name: 'Sollet', - icon: new URL('./assets/Sollet.png', import.meta.url), + icon: new URL('./assets/sollet.png', import.meta.url), + }, + { + ID: `${PLUGIN_ID}_phantom`, + providerAdaptorPluginID: PLUGIN_ID, + type: ProviderType.Phantom, + name: 'Phantom', + icon: new URL('./assets/phantom.png', import.meta.url), }, ] diff --git a/packages/plugins/Solana/src/utils.ts b/packages/plugins/Solana/src/utils.ts new file mode 100644 index 000000000000..5f479850e303 --- /dev/null +++ b/packages/plugins/Solana/src/utils.ts @@ -0,0 +1,7 @@ +import { Buffer } from 'buffer' +import bs58 from 'bs58' + +export function hexToBase58(hex: string) { + const buffer = Buffer.from(hex, 'hex') + return bs58.encode(buffer) +} diff --git a/packages/plugins/Solana/tsconfig.json b/packages/plugins/Solana/tsconfig.json index 1c52138b65b9..18391f018146 100644 --- a/packages/plugins/Solana/tsconfig.json +++ b/packages/plugins/Solana/tsconfig.json @@ -9,6 +9,7 @@ "include": ["src", "src/**/*.json"], "references": [ { "path": "../../icons" }, + { "path": "../../injected-script" }, { "path": "../../plugin-infra" }, { "path": "../../shared" }, { "path": "../../shared-base" }, diff --git a/packages/shared/src/UI/components/I18NextProviderHMR.tsx b/packages/shared/src/UI/components/I18NextProviderHMR.tsx index 3539057ad94f..2e84b03122f1 100644 --- a/packages/shared/src/UI/components/I18NextProviderHMR.tsx +++ b/packages/shared/src/UI/components/I18NextProviderHMR.tsx @@ -1,8 +1,7 @@ import React, { useEffect, useState } from 'react' import { I18nextProvider, type I18nextProviderProps } from 'react-i18next' -export const I18NextProviderHMR = - process.env.NODE_ENV === 'development' +export const I18NextProviderHMR = false ? function I18NextProviderHMR({ i18n, defaultNS, children }: React.PropsWithChildren) { const [ns, setNS] = useState(defaultNS) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0abbc88dae7..9cef60848466 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -725,6 +725,7 @@ importers: packages/plugins/Solana: specifiers: '@masknet/icons': workspace:* + '@masknet/injected-script': workspace:* '@masknet/plugin-infra': workspace:* '@masknet/shared': workspace:* '@masknet/shared-base': workspace:* @@ -735,9 +736,13 @@ importers: '@solana/wallet-adapter-wallets': 0.14.0 '@solana/web3.js': ^1.30.2 bignumber.js: ^9.0.1 + bn.js: ^4.12.0 + bs58: ^4.0.1 + buffer: ^6.0.3 react-use: ^17.3.1 dependencies: '@masknet/icons': link:../../icons + '@masknet/injected-script': link:../../injected-script '@masknet/plugin-infra': link:../../plugin-infra '@masknet/shared': link:../../shared '@masknet/shared-base': link:../../shared-base @@ -748,6 +753,9 @@ importers: '@solana/wallet-adapter-wallets': 0.14.0 '@solana/web3.js': 1.31.0 bignumber.js: 9.0.1 + bn.js: 4.12.0 + bs58: 4.0.1 + buffer: 6.0.3 react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 packages/plugins/Wallet: @@ -3452,6 +3460,7 @@ packages: /@dimensiondev/eslint-plugin/0.0.1-20220104011158-0905fa1_eslint@8.5.0: resolution: {integrity: sha512-DyAzOQp2Dp9Nzll6dTbujqyBAXOLhlWXvDdmnfX3+cHixhvaupbMeoh4MmujkOY681N5ohVm2eKWJd/ApC4lrQ==, tarball: download/@dimensiondev/eslint-plugin/0.0.1-20220104011158-0905fa1/931c157d880a7f8a78e87326a2840ad7d4583b5c714f155e045f73a11969fc82} + engines: {node: '>= 14'} peerDependencies: eslint: '>= 8' dependencies: From 535b9ad24b31dc148bfd57eee880029f76d2ffe4 Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 6 Jan 2022 23:32:35 +0800 Subject: [PATCH 09/19] fix: [wip]list assets in dashboard --- .../Wallets/components/Balance/index.tsx | 2 +- .../components/FungibleTokenTable/index.tsx | 1 + packages/plugins/Solana/package.json | 2 + .../plugins/Solana/src/UI/Web3State/index.ts | 7 ++- .../Solana/src/apis/getFungibleAssets.ts | 54 ++++++++++++++++++ packages/plugins/Solana/src/assets/tUSD.png | Bin 0 -> 6642 bytes packages/plugins/Solana/src/constants.ts | 9 +-- packages/plugins/Solana/src/helpers/index.ts | 1 + packages/plugins/Solana/src/helpers/token.ts | 40 +++++++++++++ packages/plugins/Solana/tsconfig.json | 2 + packages/web3-constants/solana/token.json | 7 +++ .../web3-shared/solana/constants/index.ts | 7 ++- packages/web3-shared/solana/index.ts | 1 + packages/web3-shared/solana/pipes/index.ts | 4 +- packages/web3-shared/solana/types.ts | 2 +- pnpm-lock.yaml | 4 ++ 16 files changed, 128 insertions(+), 15 deletions(-) create mode 100644 packages/plugins/Solana/src/apis/getFungibleAssets.ts create mode 100644 packages/plugins/Solana/src/assets/tUSD.png create mode 100644 packages/plugins/Solana/src/helpers/token.ts create mode 100644 packages/web3-constants/solana/token.json diff --git a/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx b/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx index 60b1be7fc474..cc36adc14209 100644 --- a/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx @@ -108,7 +108,7 @@ export const Balance = memo( {Number.isNaN(balance) - ? '-' + ? '$0' : balance.toLocaleString('en', { style: 'currency', currency: 'USD', diff --git a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx index 05127d1792b5..ee98b7138958 100644 --- a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx @@ -70,6 +70,7 @@ interface TokenTableProps { export const FungibleTokenTable = memo(({ selectedChainId }) => { const navigate = useNavigate() const account = useAccount() + console.log('account', { account }) const { Asset } = useWeb3PluginState() const { portfolioProvider } = useWeb3State() const network = useNetworkDescriptor() diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json index 5f713c5a681d..b62cd5908c11 100644 --- a/packages/plugins/Solana/package.json +++ b/packages/plugins/Solana/package.json @@ -10,6 +10,8 @@ "@masknet/shared": "workspace:*", "@masknet/shared-base": "workspace:*", "@masknet/theme": "workspace:*", + "@masknet/web3-providers": "workspace:*", + "@masknet/web3-shared-base": "workspace:*", "@masknet/web3-shared-solana": "workspace:*", "@solana/wallet-adapter-base": "0.9.0", "@solana/wallet-adapter-react": "0.15.0", diff --git a/packages/plugins/Solana/src/UI/Web3State/index.ts b/packages/plugins/Solana/src/UI/Web3State/index.ts index b889b98c39b0..087164bd2d3f 100644 --- a/packages/plugins/Solana/src/UI/Web3State/index.ts +++ b/packages/plugins/Solana/src/UI/Web3State/index.ts @@ -9,6 +9,7 @@ import { resolveTransactionLinkOnExplorer, } from '@masknet/web3-shared-solana' import BigNumber from 'bignumber.js' +import { getFungibleAssets } from '../../apis' import { formatAddress } from '../../helpers' import { getStorage, StorageDefaultValue } from '../../storage' @@ -17,7 +18,7 @@ function createSubscriptionFromPublicKey(getter: (value: typeof StorageDefaul } export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilities.Capabilities { - const chainId = ChainId.MainnetBeta + const chainId = ChainId.Mainnet return { Shared: { @@ -42,7 +43,9 @@ export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilit return publicKey ? ProviderType.Sollet : undefined }), }, - Asset: {}, + Asset: { + getFungibleAssets, + }, Utils: { formatAddress, formatBalance: (value) => new BigNumber(value).toFixed(), diff --git a/packages/plugins/Solana/src/apis/getFungibleAssets.ts b/packages/plugins/Solana/src/apis/getFungibleAssets.ts new file mode 100644 index 000000000000..4c076baf8e06 --- /dev/null +++ b/packages/plugins/Solana/src/apis/getFungibleAssets.ts @@ -0,0 +1,54 @@ +import { Pagination, Web3Plugin, CurrencyType } from '@masknet/plugin-infra' +import { ChainId, getTokenConstants } from '@masknet/web3-shared-solana' +import { CoinGecko } from '@masknet/web3-providers' +import { createFungibleAsset, createFungibleToken } from '../helpers' + +async function getTokenBalance( + chainId: ChainId, + account: string, + decimals: number, + { + fungibleTokenAddress, + tokenAddress, + exportKey, + storageKey, + }: { + fungibleTokenAddress: string + tokenAddress: string + exportKey: string + storageKey: string + }, +) { + return '0' +} + +async function getAssetTether(chainId: ChainId, account: string) { + const { TETHER_ADDRESS = '' } = getTokenConstants(chainId) + const price = await CoinGecko.getTokenPrice('tether', CurrencyType.USD) + const balance = await getTokenBalance(chainId, account, 6, { + fungibleTokenAddress: FUNGIBLE_TOKEN_ADDRESS, + tokenAddress: TETHER_ADDRESS, + exportKey: 'TeleportedTetherToken', + storageKey: 'teleportedTetherTokenBalance', + }) + + return createFungibleAsset( + createFungibleToken(chainId, TETHER_ADDRESS, 'Tether USD', 'tUSD', 6), + balance, + new URL('../assets/tUSD.png', import.meta.url).toString(), + price, + ) +} + +export async function getFungibleAssets( + address: string, + provider: string, + network: Web3Plugin.NetworkDescriptor, + pagination?: Pagination, +): Promise[]> { + const allSettled = await Promise.allSettled([getAssetTether(network.chainId, address)]) + + return allSettled + .map((x) => (x.status === 'fulfilled' ? x.value : null)) + .filter(Boolean) as Web3Plugin.Asset[] +} diff --git a/packages/plugins/Solana/src/assets/tUSD.png b/packages/plugins/Solana/src/assets/tUSD.png new file mode 100644 index 0000000000000000000000000000000000000000..183dcb4fb5d372630a2313c32f77b7c44da3035c GIT binary patch literal 6642 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 literal 0 HcmV?d00001 diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index f5f5665f89aa..1746b3c329b8 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -10,7 +10,7 @@ export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ { ID: `${PLUGIN_ID}_solana`, networkSupporterPluginID: PLUGIN_ID, - chainId: ChainId.MainnetBeta, + chainId: ChainId.Mainnet, type: NetworkType.Solana, name: 'Solana', icon: new URL('./assets/solana.png', import.meta.url), @@ -29,13 +29,6 @@ export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ }, ] export const PLUGIN_PROVIDERS: Web3Plugin.ProviderDescriptor[] = [ - { - ID: `${PLUGIN_ID}_sollet`, - providerAdaptorPluginID: PLUGIN_ID, - type: ProviderType.Sollet, - name: 'Sollet', - icon: new URL('./assets/sollet.png', import.meta.url), - }, { ID: `${PLUGIN_ID}_phantom`, providerAdaptorPluginID: PLUGIN_ID, diff --git a/packages/plugins/Solana/src/helpers/index.ts b/packages/plugins/Solana/src/helpers/index.ts index 80c86669067a..cf2dcad8733b 100644 --- a/packages/plugins/Solana/src/helpers/index.ts +++ b/packages/plugins/Solana/src/helpers/index.ts @@ -1 +1,2 @@ export * from './formatter' +export * from './token' diff --git a/packages/plugins/Solana/src/helpers/token.ts b/packages/plugins/Solana/src/helpers/token.ts new file mode 100644 index 000000000000..bb1840a2778c --- /dev/null +++ b/packages/plugins/Solana/src/helpers/token.ts @@ -0,0 +1,40 @@ +import { CurrencyType, TokenType, Web3Plugin } from '@masknet/plugin-infra' +import { leftShift, multipliedBy } from '@masknet/web3-shared-base' +import type { ChainId } from '@masknet/web3-shared-solana' + +export function createFungibleToken( + chainId: ChainId, + address: string, + name: string, + symbol: string, + decimals: number, +): Web3Plugin.FungibleToken { + return { + id: address, + chainId, + type: TokenType.Fungible, + address, + name, + symbol, + decimals, + } +} + +export function createFungibleAsset( + token: Web3Plugin.FungibleToken, + balance: string, + logoURI?: string, + price?: { [key in CurrencyType]?: string }, +): Web3Plugin.Asset { + return { + id: token.address, + chainId: token.chainId, + balance: leftShift(balance, 6).toFixed(), + token, + logoURI, + value: { + [CurrencyType.USD]: multipliedBy(price?.usd ?? 0, leftShift(balance, 6)).toFixed(), + }, + price, + } +} diff --git a/packages/plugins/Solana/tsconfig.json b/packages/plugins/Solana/tsconfig.json index 18391f018146..ed75026f419a 100644 --- a/packages/plugins/Solana/tsconfig.json +++ b/packages/plugins/Solana/tsconfig.json @@ -14,6 +14,8 @@ { "path": "../../shared" }, { "path": "../../shared-base" }, { "path": "../../theme" }, + { "path": "../../web3-providers" }, + { "path": "../../web3-shared/base" }, { "path": "../../web3-shared/solana" } ] } diff --git a/packages/web3-constants/solana/token.json b/packages/web3-constants/solana/token.json new file mode 100644 index 000000000000..7fed7fb89558 --- /dev/null +++ b/packages/web3-constants/solana/token.json @@ -0,0 +1,7 @@ +{ + "TETHER_ADDRESS": { + "mainnet-beta": "", + "testnet": "", + "devnet": "" + } +} diff --git a/packages/web3-shared/solana/constants/index.ts b/packages/web3-shared/solana/constants/index.ts index 336ce12bb910..292cae20cbf9 100644 --- a/packages/web3-shared/solana/constants/index.ts +++ b/packages/web3-shared/solana/constants/index.ts @@ -1 +1,6 @@ -export {} +import Token from '@masknet/web3-constants/solana/token.json' +import { hookTransform, transform } from '@masknet/web3-kit' +import { ChainId } from '../types' + +export const getTokenConstants = transform(ChainId, Token) +export const useTokenConstants = hookTransform(getTokenConstants) diff --git a/packages/web3-shared/solana/index.ts b/packages/web3-shared/solana/index.ts index eb228c55b200..fc405ba933b2 100644 --- a/packages/web3-shared/solana/index.ts +++ b/packages/web3-shared/solana/index.ts @@ -2,3 +2,4 @@ export * from './sdk' export * from './types' export * from './pipes' export * from './hooks' +export * from './constants' diff --git a/packages/web3-shared/solana/pipes/index.ts b/packages/web3-shared/solana/pipes/index.ts index ff8f4f0e603c..2fb0ac4464ac 100644 --- a/packages/web3-shared/solana/pipes/index.ts +++ b/packages/web3-shared/solana/pipes/index.ts @@ -4,7 +4,7 @@ import { ChainId, ProviderType } from '../types' export const resolveChainName = createLookupTableResolver( { - [ChainId.MainnetBeta]: 'mainnet', + [ChainId.Mainnet]: 'mainnet', [ChainId.Testnet]: 'testnet', [ChainId.Devnet]: 'devnet', }, @@ -21,7 +21,7 @@ export const resolveProviderName = createLookupTableResolver( { - [ChainId.MainnetBeta]: 'https://explorer.solana.com/', + [ChainId.Mainnet]: 'https://explorer.solana.com/', [ChainId.Testnet]: 'https://explorer.solana.com/?cluster=testnet', [ChainId.Devnet]: 'https://explorer.solana.com/?cluster=devnet', }, diff --git a/packages/web3-shared/solana/types.ts b/packages/web3-shared/solana/types.ts index fbbd94400c3c..723b362b2a5a 100644 --- a/packages/web3-shared/solana/types.ts +++ b/packages/web3-shared/solana/types.ts @@ -1,5 +1,5 @@ export enum ChainId { - MainnetBeta = 1, + Mainnet = 1, Testnet = 2, Devnet = 3, } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9cef60848466..5cd6b37373e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -730,6 +730,8 @@ importers: '@masknet/shared': workspace:* '@masknet/shared-base': workspace:* '@masknet/theme': workspace:* + '@masknet/web3-providers': workspace:* + '@masknet/web3-shared-base': workspace:^undefined '@masknet/web3-shared-solana': workspace:* '@solana/wallet-adapter-base': 0.9.0 '@solana/wallet-adapter-react': 0.15.0 @@ -747,6 +749,8 @@ importers: '@masknet/shared': link:../../shared '@masknet/shared-base': link:../../shared-base '@masknet/theme': link:../../theme + '@masknet/web3-providers': link:../../web3-providers + '@masknet/web3-shared-base': link:../../web3-shared/base '@masknet/web3-shared-solana': link:../../web3-shared/solana '@solana/wallet-adapter-base': 0.9.0 '@solana/wallet-adapter-react': 0.15.0 From 7e16be1d1a0e2161b6edaad7ae2ec95bf5132744 Mon Sep 17 00:00:00 2001 From: unclebill Date: Fri, 7 Jan 2022 15:58:14 +0800 Subject: [PATCH 10/19] fix: assets in dashboard --- .../components/FungibleTokenTable/index.tsx | 1 - packages/dashboard/src/pages/routes.tsx | 5 + packages/injected-script/main/communicate.ts | 4 +- .../UI/components/ProviderIconClickBait.tsx | 4 +- .../Solana/src/apis/getFungibleAssets.ts | 141 ++++++++++++++---- packages/plugins/Solana/src/apis/index.ts | 6 +- packages/plugins/Solana/src/assets/usdc.png | Bin 0 -> 9276 bytes packages/plugins/Solana/src/constants.ts | 6 + packages/plugins/Solana/src/helpers/token.ts | 4 +- packages/plugins/Solana/src/storage/index.ts | 1 + packages/web3-constants/solana/token.json | 11 +- 11 files changed, 138 insertions(+), 45 deletions(-) create mode 100644 packages/plugins/Solana/src/assets/usdc.png diff --git a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx index ee98b7138958..05127d1792b5 100644 --- a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx @@ -70,7 +70,6 @@ interface TokenTableProps { export const FungibleTokenTable = memo(({ selectedChainId }) => { const navigate = useNavigate() const account = useAccount() - console.log('account', { account }) const { Asset } = useWeb3PluginState() const { portfolioProvider } = useWeb3State() const network = useNetworkDescriptor() diff --git a/packages/dashboard/src/pages/routes.tsx b/packages/dashboard/src/pages/routes.tsx index fcafee0b151a..1e63377cbf3f 100644 --- a/packages/dashboard/src/pages/routes.tsx +++ b/packages/dashboard/src/pages/routes.tsx @@ -18,6 +18,11 @@ export function Pages() { return ( + } + redirectTo={DashboardRoutes.Personas} + /> } /> } /> } /> diff --git a/packages/injected-script/main/communicate.ts b/packages/injected-script/main/communicate.ts index 1555fc588a62..44489e68e40a 100644 --- a/packages/injected-script/main/communicate.ts +++ b/packages/injected-script/main/communicate.ts @@ -31,9 +31,7 @@ document.addEventListener(CustomEventId, (e) => { case 'solanaBridgeRequestListen': return apply(bindEvent, null, ['solana', 'solanaBridgeOnEvent', ...r[1]]) case 'solanaBridgeExecute': - const result = apply(execute, null, [...r[1]]) - console.log('solanaBridgeExecute', { result }) - return result + return apply(execute, null, [...r[1]]) case 'solanaBridgeSendRequest': return apply(callRequest, null, ['solana', ...r[1]]) case 'solanaBridgePrimitiveAccess': diff --git a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx index 6b5912e680d1..99271de5b739 100644 --- a/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx +++ b/packages/plugins/Solana/src/UI/components/ProviderIconClickBait.tsx @@ -16,7 +16,9 @@ export function ProviderIconClickBait({ const rsp = await bridgedSolanaProvider.connect() if (rsp?.publicKey) { const base58Key = hexToBase58(rsp.publicKey._bn) - await getStorage().publicKey.setValue(base58Key) + const storage = getStorage() + await storage.publicKey.setValue(base58Key) + await storage.network.setValue(network.chainId) onSubmit?.(network, provider) } }, [provider, onClick, onSubmit]) diff --git a/packages/plugins/Solana/src/apis/getFungibleAssets.ts b/packages/plugins/Solana/src/apis/getFungibleAssets.ts index 4c076baf8e06..d31fb6a535f2 100644 --- a/packages/plugins/Solana/src/apis/getFungibleAssets.ts +++ b/packages/plugins/Solana/src/apis/getFungibleAssets.ts @@ -2,53 +2,134 @@ import { Pagination, Web3Plugin, CurrencyType } from '@masknet/plugin-infra' import { ChainId, getTokenConstants } from '@masknet/web3-shared-solana' import { CoinGecko } from '@masknet/web3-providers' import { createFungibleAsset, createFungibleToken } from '../helpers' +import { NETWORK_ENDPOINTS } from '../constants' -async function getTokenBalance( - chainId: ChainId, - account: string, - decimals: number, - { - fungibleTokenAddress, - tokenAddress, - exportKey, - storageKey, - }: { - fungibleTokenAddress: string - tokenAddress: string - exportKey: string - storageKey: string - }, -) { - return '0' -} - -async function getAssetTether(chainId: ChainId, account: string) { - const { TETHER_ADDRESS = '' } = getTokenConstants(chainId) - const price = await CoinGecko.getTokenPrice('tether', CurrencyType.USD) - const balance = await getTokenBalance(chainId, account, 6, { - fungibleTokenAddress: FUNGIBLE_TOKEN_ADDRESS, - tokenAddress: TETHER_ADDRESS, - exportKey: 'TeleportedTetherToken', - storageKey: 'teleportedTetherTokenBalance', +interface RpcOptions { + method: string + params?: any[] +} + +interface RpcResponse { + jsonrpc: '2.0' + result: T | null +} + +interface AccountInfo { + data: [string, string] | object + executable: boolean + lamports: number +} + +type GetAccountInfoResponse = RpcResponse<{ value: AccountInfo }> +interface ProgramAccount { + account: { + data: { + parsed: { + info: { + isNative: false + mint: string + owner: string + state: string + tokenAmount: { + amount: string + decimals: number + uiAmount: number + uiAmountString: string + } + } + } + program: 'spl-token' + space: number + } + executable: boolean + lamports: number + owner: string + rentEpoch: string + } +} + +type GetProgramAccountsResponse = RpcResponse> + +let id = 0 +async function requestRPC(chainId: ChainId, options: RpcOptions): Promise { + const endpoint = NETWORK_ENDPOINTS[chainId] + id += 1 + const res = await globalThis.fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + ...options, + jsonrpc: '2.0', + id, + }), }) + return res.json() +} +async function getSolanaBalance(chainId: ChainId, account: string) { + const { TETHER_ADDRESS = '' } = getTokenConstants(chainId) + const price = await CoinGecko.getTokenPrice('solana', CurrencyType.USD) + const data = await requestRPC(chainId, { + method: 'getAccountInfo', + params: [account], + }) + const balance = data.result?.value.lamports.toString() ?? '0' return createFungibleAsset( - createFungibleToken(chainId, TETHER_ADDRESS, 'Tether USD', 'tUSD', 6), + createFungibleToken(chainId, TETHER_ADDRESS, 'Solana', 'SOL', 9), balance, - new URL('../assets/tUSD.png', import.meta.url).toString(), + new URL('../assets/solana.png', import.meta.url).toString(), price, ) } +const SPL_TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + +async function getFungibleTokenLists(chainId: ChainId, account: string) { + const data = await requestRPC(chainId, { + method: 'getProgramAccounts', + params: [ + SPL_TOKEN_PROGRAM_ID, + { + encoding: 'jsonParsed', + filters: [ + { + dataSize: 165, + }, + { + memcmp: { + offset: 32, + bytes: account, + }, + }, + ], + }, + ], + }) + if (!data.result?.length) return [] + return data.result.map((programAccount) => { + const info = programAccount.account.data.parsed.info + return createFungibleAsset( + createFungibleToken(chainId, info.mint, info.mint, info.mint, info.tokenAmount.decimals), + info.tokenAmount.amount, + ) + }) +} + export async function getFungibleAssets( address: string, provider: string, network: Web3Plugin.NetworkDescriptor, pagination?: Pagination, ): Promise[]> { - const allSettled = await Promise.allSettled([getAssetTether(network.chainId, address)]) + const allSettled = await Promise.allSettled([ + getSolanaBalance(network.chainId, address).then((x) => [x]), + getFungibleTokenLists(network.chainId, address), + ]) return allSettled .map((x) => (x.status === 'fulfilled' ? x.value : null)) + .flat() .filter(Boolean) as Web3Plugin.Asset[] } diff --git a/packages/plugins/Solana/src/apis/index.ts b/packages/plugins/Solana/src/apis/index.ts index ef3cdccd9e28..9be04ef09ad9 100644 --- a/packages/plugins/Solana/src/apis/index.ts +++ b/packages/plugins/Solana/src/apis/index.ts @@ -1,5 +1 @@ -import type { Pagination } from '@masknet/plugin-infra' - -export function getFungibleAssets(address: string, providerType: string, networkType: string, pagination?: Pagination) { - return Promise.resolve([]) -} +export * from './getFungibleAssets' diff --git a/packages/plugins/Solana/src/assets/usdc.png b/packages/plugins/Solana/src/assets/usdc.png new file mode 100644 index 0000000000000000000000000000000000000000..eafbaac194aa756d5d046a4f3be24d03376495e3 GIT binary patch literal 9276 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 literal 0 HcmV?d00001 diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index 1746b3c329b8..fdb242eafa0c 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -37,3 +37,9 @@ export const PLUGIN_PROVIDERS: Web3Plugin.ProviderDescriptor[] = [ icon: new URL('./assets/phantom.png', import.meta.url), }, ] + +export const NETWORK_ENDPOINTS: Record = { + [ChainId.Mainnet]: 'https://solana-api.projectserum.com', + [ChainId.Testnet]: 'https://api.testnet.solana.com', + [ChainId.Devnet]: 'https://api.devnet.solana.com', +} diff --git a/packages/plugins/Solana/src/helpers/token.ts b/packages/plugins/Solana/src/helpers/token.ts index bb1840a2778c..b760927bfd52 100644 --- a/packages/plugins/Solana/src/helpers/token.ts +++ b/packages/plugins/Solana/src/helpers/token.ts @@ -29,11 +29,11 @@ export function createFungibleAsset( return { id: token.address, chainId: token.chainId, - balance: leftShift(balance, 6).toFixed(), + balance: leftShift(balance, token.decimals).toFixed(), token, logoURI, value: { - [CurrencyType.USD]: multipliedBy(price?.usd ?? 0, leftShift(balance, 6)).toFixed(), + [CurrencyType.USD]: multipliedBy(price?.usd ?? 0, leftShift(balance, token.decimals)).toFixed(), }, price, } diff --git a/packages/plugins/Solana/src/storage/index.ts b/packages/plugins/Solana/src/storage/index.ts index a93886378fe8..d8f0f8d8cee7 100644 --- a/packages/plugins/Solana/src/storage/index.ts +++ b/packages/plugins/Solana/src/storage/index.ts @@ -2,6 +2,7 @@ import type { ScopedStorage } from '@masknet/shared-base' export const StorageDefaultValue = { publicKey: null as null | string, + network: null as null | number, } let storage: ScopedStorage = null! diff --git a/packages/web3-constants/solana/token.json b/packages/web3-constants/solana/token.json index 7fed7fb89558..3c7bd0bba321 100644 --- a/packages/web3-constants/solana/token.json +++ b/packages/web3-constants/solana/token.json @@ -1,7 +1,12 @@ { "TETHER_ADDRESS": { - "mainnet-beta": "", - "testnet": "", - "devnet": "" + "Mainnet": "", + "Testnet": "", + "Devnet": "" + }, + "USDC_ADDRESS": { + "Mainnet": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", + "Testnet": "CpMah17kQEL2wqyMKt3mZBdTnZbkbfx4nqmQMFDP5vwp", + "Devnet": "" } } From 518f3bc450de13def248d5429a757976e20a898a Mon Sep 17 00:00:00 2001 From: unclebill Date: Fri, 7 Jan 2022 16:06:26 +0800 Subject: [PATCH 11/19] fix: revert unnecessary changes --- packages/mask/.webpack/config.ts | 12 +- packages/plugins/Solana/package.json | 3 - packages/plugins/Solana/src/hooks/index.ts | 2 +- .../plugins/Solana/src/hooks/useConnection.ts | 11 - pnpm-lock.yaml | 565 ++---------------- 5 files changed, 59 insertions(+), 534 deletions(-) delete mode 100644 packages/plugins/Solana/src/hooks/useConnection.ts diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index 374e925912f7..83a6c573aeaa 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -121,18 +121,10 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { { test: /(async-call|webextension).+\.js$/, enforce: 'pre', use: ['source-map-loader'] }, // TypeScript { - test: /\.(t|j)sx?$/, - resolve: { - fullySpecified: false, // disable the behaviour - extensions: ['.js', '.ts', '.tsx'], - }, + test: /\.tsx?$/, parser: { worker: ['OnDemandWorker', '...'] }, // Compile all ts files in the workspace - include: [ - join(__dirname, '../../'), - // https://github.com/solana-labs/wallet-adapter/issues/231 - /node_modules\/@solana\/wallet-adapter-\w+/, - ], + include: join(__dirname, '../../'), loader: require.resolve('swc-loader'), options: { // https://swc.rs/docs/configuring-swc/ diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json index b62cd5908c11..b7569d112b72 100644 --- a/packages/plugins/Solana/package.json +++ b/packages/plugins/Solana/package.json @@ -13,9 +13,6 @@ "@masknet/web3-providers": "workspace:*", "@masknet/web3-shared-base": "workspace:*", "@masknet/web3-shared-solana": "workspace:*", - "@solana/wallet-adapter-base": "0.9.0", - "@solana/wallet-adapter-react": "0.15.0", - "@solana/wallet-adapter-wallets": "0.14.0", "@solana/web3.js": "^1.30.2", "bignumber.js": "^9.0.1", "bn.js": "^4.12.0", diff --git a/packages/plugins/Solana/src/hooks/index.ts b/packages/plugins/Solana/src/hooks/index.ts index 747104f30893..336ce12bb910 100644 --- a/packages/plugins/Solana/src/hooks/index.ts +++ b/packages/plugins/Solana/src/hooks/index.ts @@ -1 +1 @@ -export * from './useConnection' +export {} diff --git a/packages/plugins/Solana/src/hooks/useConnection.ts b/packages/plugins/Solana/src/hooks/useConnection.ts deleted file mode 100644 index 2d1f966e243d..000000000000 --- a/packages/plugins/Solana/src/hooks/useConnection.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { useMemo } from 'react' -import type { WalletAdapterNetwork } from '@solana/wallet-adapter-base' - -export function useConnection(network: WalletAdapterNetwork) { - const connection = useMemo(() => { - const endpoint = clusterApiUrl(network) - return new Connection(endpoint) - }, [network]) - - return connection -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5cd6b37373e9..f9904ff5bff2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -731,11 +731,8 @@ importers: '@masknet/shared-base': workspace:* '@masknet/theme': workspace:* '@masknet/web3-providers': workspace:* - '@masknet/web3-shared-base': workspace:^undefined + '@masknet/web3-shared-base': workspace:* '@masknet/web3-shared-solana': workspace:* - '@solana/wallet-adapter-base': 0.9.0 - '@solana/wallet-adapter-react': 0.15.0 - '@solana/wallet-adapter-wallets': 0.14.0 '@solana/web3.js': ^1.30.2 bignumber.js: ^9.0.1 bn.js: ^4.12.0 @@ -752,15 +749,12 @@ importers: '@masknet/web3-providers': link:../../web3-providers '@masknet/web3-shared-base': link:../../web3-shared/base '@masknet/web3-shared-solana': link:../../web3-shared/solana - '@solana/wallet-adapter-base': 0.9.0 - '@solana/wallet-adapter-react': 0.15.0 - '@solana/wallet-adapter-wallets': 0.14.0 '@solana/web3.js': 1.31.0 bignumber.js: 9.0.1 bn.js: 4.12.0 bs58: 4.0.1 buffer: 6.0.3 - react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 + react-use: 17.3.1 packages/plugins/Wallet: specifiers: @@ -3017,20 +3011,6 @@ packages: - google-protobuf dev: false - /@blocto/sdk/0.2.21: - resolution: {integrity: sha512-yolSah+bYEZGzbBYr0GuQ2Pca1h95aF/btDJvcEyranosyR27kokvRKiPTX4Sost+giAD+Z6vrD8/hM6E+LnUw==} - dependencies: - '@solana/web3.js': 1.31.0 - bs58: 4.0.1 - buffer: 6.0.3 - eip1193-provider: 1.0.1 - js-sha3: 0.8.0 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - dev: false - /@cnakazawa/watch/1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} @@ -4596,19 +4576,6 @@ packages: chalk: 4.1.2 dev: true - /@json-rpc-tools/provider/1.7.6: - resolution: {integrity: sha512-z7D3xvJ33UfCGv77n40lbzOYjZKVM3k2+5cV7xS8G6SCvKTzMkhkUYuD/qzQUNT4cG/lv0e9mRToweEEVLVVmA==} - dependencies: - '@json-rpc-tools/utils': 1.7.6 - axios: 0.21.1 - safe-json-utils: 1.1.1 - ws: 7.5.6 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - dev: false - /@json-rpc-tools/types/1.7.6: resolution: {integrity: sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==} dependencies: @@ -4621,47 +4588,6 @@ packages: '@json-rpc-tools/types': 1.7.6 dev: false - /@json-rpc-tools/utils/1.7.6: - resolution: {integrity: sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw==} - dependencies: - '@json-rpc-tools/types': 1.7.6 - '@pedrouid/environment': 1.0.1 - dev: false - - /@ledgerhq/devices/6.11.2: - resolution: {integrity: sha512-j2SoG0Ifm7khsPKC2UFhJIoi1oCDCvJemmO+pz7Oc9jx8JRhIGtCfqEIUhL+ZIl0TrIYuApPLaSqJjiFi7VGCQ==} - dependencies: - '@ledgerhq/errors': 6.10.0 - '@ledgerhq/logs': 6.10.0 - rxjs: 6.6.7 - semver: 7.3.5 - dev: false - - /@ledgerhq/errors/6.10.0: - resolution: {integrity: sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg==} - dev: false - - /@ledgerhq/hw-transport-webhid/6.11.2: - resolution: {integrity: sha512-y/Cv2oRDXy0wsGQsSrNi6e8DziGRNbgTiW7dgXcenI/1RfsCN+2hPfNMr8a9s2zPJ8Tfv2Sm5VubbspWDhPUCQ==} - dependencies: - '@ledgerhq/devices': 6.11.2 - '@ledgerhq/errors': 6.10.0 - '@ledgerhq/hw-transport': 6.11.2 - '@ledgerhq/logs': 6.10.0 - dev: false - - /@ledgerhq/hw-transport/6.11.2: - resolution: {integrity: sha512-VZbGfyQ8iFl2W6TUkVmQ3rz8kyOXMbOdFiht3VNlglMe3KBGJWOjW9s/5LhOR348NJs797B1gl4V0Zqmn11kUg==} - dependencies: - '@ledgerhq/devices': 6.11.2 - '@ledgerhq/errors': 6.10.0 - events: 3.3.0 - dev: false - - /@ledgerhq/logs/6.10.0: - resolution: {integrity: sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw==} - dev: false - /@magic-works/i18n-codegen/0.0.6_typescript@4.6.0-dev.20211202: resolution: {integrity: sha512-vM8DzT7zcmCDk2KBoeyUgGzkW/4MaKIdDTTh67cJT0/VVXu7fQd2tjRglJwOunowTCwPxwIHWjoCD/DIN4iPXQ==} hasBin: true @@ -5256,17 +5182,6 @@ packages: - google-protobuf dev: false - /@project-serum/sol-wallet-adapter/0.2.6_@solana+web3.js@1.31.0: - resolution: {integrity: sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.5.0 - dependencies: - '@solana/web3.js': 1.31.0 - bs58: 4.0.1 - eventemitter3: 4.0.7 - dev: false - /@protobufjs/aspromise/1.1.2: resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} dev: false @@ -5427,228 +5342,6 @@ packages: buffer: 6.0.3 dev: false - /@solana/wallet-adapter-base/0.9.0: - resolution: {integrity: sha512-GScWm5xXUwyAJVPDnJSdPi9+pt6lqniphlf0ewB48Aeqxe4QkZcTbNgdS8MtBLdz97OAAuUTPR5bOHye2V5Erg==} - dependencies: - '@solana/web3.js': 1.31.0 - eventemitter3: 4.0.7 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-bitkeep/0.3.0: - resolution: {integrity: sha512-XQDjHpFJGZJayG5W06AgVl/siAmoVFsRRKdQPi1HxyqmDzrqZ7iy/T0peqoUPGDH/QTXQW75pTzy75FkTet1ow==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-bitpie/0.5.0: - resolution: {integrity: sha512-TPrfNAWo7v79mGdiuT58f0bZuBUZhYvkmRxsEqGV/sZXwRbV2f175KlHN4v0PXrqbU8iiPmUGpgiWJ7PihVZ/w==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-blocto/0.5.0: - resolution: {integrity: sha512-lsjwTea+7AfMfcArywsOz5PnPqUvqcpUOQTOGFBYUCvxskj3B+c4wTXLB4cFKx2WwqMIdfSEbxhtBLDeIGb+ow==} - dependencies: - '@blocto/sdk': 0.2.21 - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - dev: false - - /@solana/wallet-adapter-clover/0.4.0: - resolution: {integrity: sha512-Ih+3IZlh9OSJhdeeWM3B3qjwW2+Asqj0jVW0Nh9XaolfRCyf+fLdDs3EsdxI+UHpZT9ZMNIaxU4DvNdOhOt/3w==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-coin98/0.5.0: - resolution: {integrity: sha512-ykX+wJBaxNR/GW1e4PHAuSj9VR/zaWyW3j2B/nUPwmMKXwBqzb/H6omGl1ys2GnYB3OIGnlSVlB3hPftAPh/LQ==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - '@types/bs58': 4.0.1 - bs58: 4.0.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-coinhub/0.3.0: - resolution: {integrity: sha512-rqfwOuwGuXEWLzAKHkNwNF2Ofu18CWqafV4lGtKB0TO2z49ufXjoliG5EN3jQLScdVuTNcft3Xnl+1QiCo4xng==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-ledger/0.9.0: - resolution: {integrity: sha512-9TCwdmYdRE1QSxl3cJv0naya0jhgYW6XmoAaMWxvQXTpm2Gy8uvFHfDErTddBcC7DWCrQfAA0smUP8yYzIiShA==} - dependencies: - '@ledgerhq/hw-transport': 6.11.2 - '@ledgerhq/hw-transport-webhid': 6.11.2 - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - '@types/w3c-web-hid': 1.0.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-mathwallet/0.9.0: - resolution: {integrity: sha512-A08RD7vqBXSFIjDJT3aGJfKZk2b8dpjxpA09ECCzqXm/nMM8WIa4/wkzktMWQoWB2h9LnpHm3NB9jhVk20jfqA==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-phantom/0.9.0: - resolution: {integrity: sha512-A1ujox2G38LbGXZxf/rkkzb+T9KTIvzramu11oHRd02jLaHgrO2zGRWsCRkW1ZkwoZsrbRf7zbjoUyoZiUbpVg==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-react/0.15.0: - resolution: {integrity: sha512-Djh6FdKW8sSfFyQUgiCT2eRzoj489xskX81fNlOVNMCuMWljGa/IkbUe5nNKa+iIFeUFcvVJpD8Fyi4LeeZOgQ==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - react: 17.0.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-safepal/0.5.0: - resolution: {integrity: sha512-GZ8hDJKQRZyX5G8nA/5yRyBMSEs+G6LGDdepAPudtyVu00mJn+SdUcW2lVUHlyUbl6rxbzwywETNk2rh7YG7LA==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-slope/0.5.0: - resolution: {integrity: sha512-G2zctKjIbCGhjVU/4xSZbzEJKJGZOSb8z/KUTf4bgMrjAniTyLuf4XOG6anSMLXDW+ubFHlpKMPevENmhFhXBw==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - '@types/bs58': 4.0.1 - bs58: 4.0.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-solflare/0.6.0: - resolution: {integrity: sha512-9t42wFQ6TnknTt7yIJXdC9flFrwPYXUSBeQe0z/3BE7ubFKJeVbs3unSa5hffERRphQ3Fv3q6OLyrD93N0gR+Q==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-sollet/0.10.0: - resolution: {integrity: sha512-iq+7Q6YwvbJN4hVEZC3HCMCuG0qPFW66pG3vJbek6hLyWuHuLLRJWsMiQmNE7/WZP4T1eS1GJqpdOIZXG3CVfw==} - dependencies: - '@project-serum/sol-wallet-adapter': 0.2.6_@solana+web3.js@1.31.0 - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-solong/0.9.0: - resolution: {integrity: sha512-hzx+1JWuZwYskBzVhkeSJ40FFEUtm0VBfpQiGcop5HEHwAMp6Qvjtdygm5p6Iqmcirv5lKiB7GjmMxDCQxwbvA==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-tokenpocket/0.4.0: - resolution: {integrity: sha512-QMILNv/vrSubn9xhW/ctMbJ4dVpCQE3h9ZQP3jiR/He88lUNU5MMTdfueftik9uNqmJHVgivfXB42dSnhPiWiw==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-torus/0.11.0: - resolution: {integrity: sha512-qr4eQj/h3cpij5YY8O+YErdyRTjQoHbIzg1MWOlcptBRIUrquKNHcxBlpWJb9+MBIoWelzULG2sqf3nTeQlIbw==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/web3.js': 1.31.0 - '@toruslabs/solana-embed': 0.0.7 - '@types/keccak': 3.0.1 - '@types/readable-stream': 2.3.12 - transitivePeerDependencies: - - '@babel/runtime' - - bufferutil - - utf-8-validate - dev: false - - /@solana/wallet-adapter-wallets/0.14.0: - resolution: {integrity: sha512-1uUwRhQesFSRuRzOtkeUlgbtMKiS6+lE6Ye5g0cPO8c+w/q+NQuNPvVwBTKq8khdPxuPYyP8hEz4fNrFD5pAZg==} - dependencies: - '@solana/wallet-adapter-base': 0.9.0 - '@solana/wallet-adapter-bitkeep': 0.3.0 - '@solana/wallet-adapter-bitpie': 0.5.0 - '@solana/wallet-adapter-blocto': 0.5.0 - '@solana/wallet-adapter-clover': 0.4.0 - '@solana/wallet-adapter-coin98': 0.5.0 - '@solana/wallet-adapter-coinhub': 0.3.0 - '@solana/wallet-adapter-ledger': 0.9.0 - '@solana/wallet-adapter-mathwallet': 0.9.0 - '@solana/wallet-adapter-phantom': 0.9.0 - '@solana/wallet-adapter-safepal': 0.5.0 - '@solana/wallet-adapter-slope': 0.5.0 - '@solana/wallet-adapter-solflare': 0.6.0 - '@solana/wallet-adapter-sollet': 0.10.0 - '@solana/wallet-adapter-solong': 0.9.0 - '@solana/wallet-adapter-tokenpocket': 0.4.0 - '@solana/wallet-adapter-torus': 0.11.0 - transitivePeerDependencies: - - '@babel/runtime' - - bufferutil - - debug - - utf-8-validate - dev: false - /@solana/web3.js/1.31.0: resolution: {integrity: sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==} engines: {node: '>=12.20.0'} @@ -7663,87 +7356,6 @@ packages: engines: {node: '>= 10'} dev: false - /@toruslabs/base-controllers/1.4.2: - resolution: {integrity: sha512-8nhgVdjM6oTZ/lALmObymmk/XLVzLWgbq04AQY7P5FFQZnpwdMQ7k7piKdX7waaeyfRzgb5b/Zrf7LFEgAGvqQ==} - peerDependencies: - '@babel/runtime': 7.x - dependencies: - '@toruslabs/http-helpers': 2.1.4 - '@toruslabs/openlogin-jrpc': 1.3.3 - async-mutex: 0.3.2 - bignumber.js: 9.0.2 - bowser: 2.11.0 - broadcast-channel: 4.9.0 - eth-rpc-errors: 4.0.3 - ethereumjs-util: 7.1.3 - lodash: 4.17.21 - loglevel: 1.8.0 - dev: false - - /@toruslabs/http-helpers/1.4.0: - resolution: {integrity: sha512-lPRhTWeChQunds2CGV70xvaoFMMebZAqZLpTYZjUJfziumQjT12w9HWLIzlRfGFVKoYUsUiZLpGHl0JEwHCcqg==} - engines: {node: '>=14.17.0', npm: ~6.x} - peerDependencies: - '@babel/runtime': 7.x - dependencies: - deepmerge: 4.2.2 - dev: false - - /@toruslabs/http-helpers/2.1.4: - resolution: {integrity: sha512-OXSHdjm5He+XRrnZoEyhw3JqFRIlyaRZA6j0gSrSnKaUyKnVqTAfYgMYBw2oQ2GZYTjK44nnEZ0y9aU0rn4oyQ==} - engines: {node: '>=14.17.0', npm: '>=6.x'} - peerDependencies: - '@babel/runtime': 7.x - dependencies: - lodash.merge: 4.6.2 - dev: false - - /@toruslabs/openlogin-jrpc/1.3.3: - resolution: {integrity: sha512-N8UqTdc26K0jIXXuh8mlxGog5qgLmm7ts9qwItC9sfGVIEKYu/9XonnMjxYZ2fTzJP4H+bARO377gGuMJDnLzg==} - peerDependencies: - '@babel/runtime': 7.x - dependencies: - '@toruslabs/openlogin-utils': 1.3.3 - end-of-stream: 1.4.4 - events: 3.3.0 - fast-safe-stringify: 2.1.1 - once: 1.4.0 - pump: 3.0.0 - readable-stream: 3.6.0 - dev: false - - /@toruslabs/openlogin-utils/1.3.3: - resolution: {integrity: sha512-MsICB8CdyF4KU3FALAMnz9PvZT5dIvgOzyympDYhoSX2CdxTGwtPNE0wmxm5gyclEHDKnnXBJ45pfG33HSQg+Q==} - peerDependencies: - '@babel/runtime': 7.x - dependencies: - base64url: 3.0.1 - keccak: 3.0.2 - randombytes: 2.1.0 - dev: false - - /@toruslabs/solana-embed/0.0.7: - resolution: {integrity: sha512-2FYsvFsGx6CUTMLiJ3LLfqt7yq/VV029x8MkMsDQvX/s0IPQx8Kk5yawORa/aIkyezPdtLvH3FFJTwsM/r8KMg==} - engines: {node: '>=14.17.0', npm: '>=6.x'} - peerDependencies: - '@babel/runtime': 7.x - dependencies: - '@solana/web3.js': 1.31.0 - '@toruslabs/base-controllers': 1.4.2 - '@toruslabs/http-helpers': 1.4.0 - '@toruslabs/openlogin-jrpc': 1.3.3 - '@types/bs58': 4.0.1 - eth-rpc-errors: 4.0.3 - fast-deep-equal: 3.1.3 - is-stream: 3.0.0 - lodash-es: 4.17.21 - loglevel: 1.8.0 - pump: 3.0.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@tsconfig/node10/1.0.8: resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} dev: true @@ -7831,12 +7443,6 @@ packages: '@types/node': 16.11.17 dev: true - /@types/bs58/4.0.1: - resolution: {integrity: sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==} - dependencies: - base-x: 3.0.8 - dev: false - /@types/chrome/0.0.136: resolution: {integrity: sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA==} dependencies: @@ -8242,12 +7848,6 @@ packages: resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} dev: true - /@types/keccak/3.0.1: - resolution: {integrity: sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg==} - dependencies: - '@types/node': 16.11.17 - dev: false - /@types/lodash-es/4.17.5: resolution: {integrity: sha512-SHBoI8/0aoMQWAgUHMQ599VM6ZiSKg8sh/0cFqqlQQMyY9uEplc0ULU5yQNzcvdR4ZKa0ey8+vFmahuRbOCT1A==} dependencies: @@ -8464,13 +8064,6 @@ packages: csstype: 3.0.10 dev: false - /@types/readable-stream/2.3.12: - resolution: {integrity: sha512-IVe0ietigIRWjRg0gv2sydr0rhyPzdXQsBMU/gda8fl82xQL+J9UWRBcD0asxoe4pb5wTOsPrOz0KYJZVCXZJQ==} - dependencies: - '@types/node': 16.11.17 - safe-buffer: 5.2.1 - dev: false - /@types/remarkable/2.0.3: resolution: {integrity: sha512-QQUBeYApuHCNl9Br6ZoI3PlKmwZ69JHrlJktJXnjxobia9liZgsI70fm8PnCqVFAcefYK+9PGzR5L/hzCslNYQ==} dependencies: @@ -8590,10 +8183,6 @@ packages: '@types/node': 16.11.6 dev: true - /@types/w3c-web-hid/1.0.2: - resolution: {integrity: sha512-tNLnl6+/AkmASEnviwdLLE6kaXlY28cDVyQ3e+WwnEAm5DHyO7c71a5TtYX6ofrnzzdQSnNsjNMoggsbrtOYfQ==} - dev: false - /@types/web/0.0.48: resolution: {integrity: sha512-X5KKfR0MNm5ujo7421tVTF6n9MXh58DfWOuvPnuMAlr12vloTtyxJEC0rHVKIvcpqqoOJSrlkW2dMJjl9eK3Dg==} dev: false @@ -9894,12 +9483,6 @@ packages: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: false - /async-mutex/0.3.2: - resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} - dependencies: - tslib: 2.3.1 - dev: false - /async-settle/1.0.0: resolution: {integrity: sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=} engines: {node: '>= 0.10'} @@ -10791,11 +10374,6 @@ packages: resolution: {integrity: sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==} dev: false - /base64url/3.0.1: - resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} - engines: {node: '>=6.0.0'} - dev: false - /batch-processor/1.0.0: resolution: {integrity: sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=} dev: true @@ -10955,10 +10533,6 @@ packages: text-encoding-utf-8: 1.0.2 dev: false - /bowser/2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - dev: false - /boxen/4.2.0: resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} engines: {node: '>=8'} @@ -11014,19 +10588,6 @@ packages: dependencies: fill-range: 7.0.1 - /broadcast-channel/4.9.0: - resolution: {integrity: sha512-xWzFb3wrOZGJF2kOSs2D3KvHXdLDMVb+WypEIoNvwblcHgUBydVy65pDJ9RS4WN9Kyvs0UVQuCCzfKme0G6Qjw==} - dependencies: - '@babel/runtime': 7.16.5 - detect-node: 2.1.0 - microseconds: 0.2.0 - nano-time: 1.0.0 - oblivious-set: 1.0.0 - p-queue: 6.6.2 - rimraf: 3.0.2 - unload: 2.3.1 - dev: false - /brorand/1.1.0: resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} @@ -13000,6 +12561,7 @@ packages: /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: true /detect-port-alt/1.1.6: resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} @@ -13260,16 +12822,6 @@ packages: resolution: {integrity: sha512-Hj+GY0mf2NNBcgg0v6DsV0/EYI5xDLUICZ5BSLVC+8uFEzoWpWw2VR6e3eWKgGjL2YEybUdg89UXDEHaBmi03Q==} dev: false - /eip1193-provider/1.0.1: - resolution: {integrity: sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g==} - dependencies: - '@json-rpc-tools/provider': 1.7.6 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - dev: false - /electron-to-chromium/1.4.16: resolution: {integrity: sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==} dev: true @@ -16842,11 +16394,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - /is-stream/3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -18362,6 +17909,7 @@ packages: /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true /lodash.set/4.3.2: resolution: {integrity: sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=} @@ -18392,11 +17940,6 @@ packages: wrap-ansi: 6.2.0 dev: true - /loglevel/1.8.0: - resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} - engines: {node: '>= 0.6.0'} - dev: false - /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false @@ -18453,6 +17996,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: true /ltgt/2.2.1: resolution: {integrity: sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=} @@ -18761,10 +18305,6 @@ packages: picomatch: 2.3.0 dev: true - /microseconds/0.2.0: - resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} - dev: false - /miller-rabin/4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true @@ -19070,6 +18610,22 @@ packages: resolution: {integrity: sha1-ulSMh578+5DaHE2eCX20pGySVe8=} dev: false + /nano-css/5.3.1: + resolution: {integrity: sha512-ENPIyNzANQRyYVvb62ajDd7PAyIgS2LIUnT9ewih4yrXSZX4hKoUwssy8WjUH++kEOA5wUTMgNnV7ko5n34kUA==} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + css-tree: 1.1.3 + csstype: 3.0.8 + fastest-stable-stringify: 2.0.2 + inline-style-prefixer: 6.0.0 + rtl-css-js: 1.14.2 + sourcemap-codec: 1.4.8 + stacktrace-js: 2.0.2 + stylis: 4.0.10 + dev: false + /nano-css/5.3.1_757a802188413a36d4f24237d13b8e90: resolution: {integrity: sha512-ENPIyNzANQRyYVvb62ajDd7PAyIgS2LIUnT9ewih4yrXSZX4hKoUwssy8WjUH++kEOA5wUTMgNnV7ko5n34kUA==} peerDependencies: @@ -19092,12 +18648,6 @@ packages: resolution: {integrity: sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=} dev: false - /nano-time/1.0.0: - resolution: {integrity: sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=} - dependencies: - big-integer: 1.6.36 - dev: false - /nanoid/3.1.30: resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -19488,10 +19038,6 @@ packages: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} dev: true - /oblivious-set/1.0.0: - resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} - dev: false - /oboe/2.1.5: resolution: {integrity: sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=} dependencies: @@ -19732,14 +19278,6 @@ packages: aggregate-error: 3.1.0 dev: true - /p-queue/6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - dev: false - /p-retry/4.6.1: resolution: {integrity: sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==} engines: {node: '>=8'} @@ -19760,6 +19298,7 @@ packages: engines: {node: '>=8'} dependencies: p-finally: 1.0.0 + dev: true /p-try/1.0.0: resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} @@ -21004,6 +20543,37 @@ packages: tslib: 2.3.1 dev: false + /react-universal-interface/0.6.2_tslib@2.3.1: + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} + peerDependencies: + react: '*' + tslib: '*' + dependencies: + tslib: 2.3.1 + dev: false + + /react-use/17.3.1: + resolution: {integrity: sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@types/js-cookie': 2.2.7 + '@xobotyi/scrollbar-width': 1.9.5 + copy-to-clipboard: 3.3.1 + fast-deep-equal: 3.1.3 + fast-shallow-equal: 1.0.0 + js-cookie: 2.2.1 + nano-css: 5.3.1 + react-universal-interface: 0.6.2_tslib@2.3.1 + resize-observer-polyfill: 1.5.1 + screenfull: 5.1.0 + set-harmonic-interval: 1.0.1 + throttle-debounce: 3.0.1 + ts-easing: 0.2.0 + tslib: 2.3.1 + dev: false + /react-use/17.3.1_757a802188413a36d4f24237d13b8e90: resolution: {integrity: sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==} peerDependencies: @@ -21052,14 +20622,6 @@ packages: react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 dev: false - /react/17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - dev: false - /react/18.0.0-rc.0: resolution: {integrity: sha512-PawosMBgF8k5Nlc3++ibzjFqPvo1XKv80MNtVYqz3abHHB2w3IpU65sSdSmBd2ooCwVhcp9b1vkx/twqhakNtA==} engines: {node: '>=0.10.0'} @@ -21753,13 +21315,6 @@ packages: resolution: {integrity: sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=} dev: false - /rxjs/6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - dependencies: - tslib: 1.14.1 - dev: false - /rxjs/7.4.0: resolution: {integrity: sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==} dependencies: @@ -21791,10 +21346,6 @@ packages: resolution: {integrity: sha512-n0hJm6BgX8wk3G+AS8MOQnfcA8dfE6ZMUfwkHUNx69YxPlU3HDaZTHXWto35Z+C4mOjK1odlT95WutkGC+0Idw==} dev: false - /safe-json-utils/1.1.1: - resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} - dev: false - /safe-regex/1.1.0: resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=} dependencies: @@ -21957,6 +21508,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /send/0.17.1: resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} @@ -24169,13 +23721,6 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unload/2.3.1: - resolution: {integrity: sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==} - dependencies: - '@babel/runtime': 7.16.5 - detect-node: 2.1.0 - dev: false - /unpipe/1.0.0: resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} engines: {node: '>= 0.8'} @@ -25590,6 +25135,7 @@ packages: optional: true utf-8-validate: optional: true + dev: true /ws/8.4.0: resolution: {integrity: sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==} @@ -25688,6 +25234,7 @@ packages: /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} From 8bc715ecc5bb67c7cbd1378cfe8bdb19635dac06 Mon Sep 17 00:00:00 2001 From: unclebill Date: Fri, 7 Jan 2022 16:10:37 +0800 Subject: [PATCH 12/19] fixup! fix: revert unnecessary changes --- packages/injected-script/shared/index.ts | 2 +- packages/plugins/Solana/src/assets/tUSD.png | Bin 6642 -> 0 bytes .../src/UI/components/I18NextProviderHMR.tsx | 3 ++- packages/web3-constants/solana/token.json | 5 ----- 4 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 packages/plugins/Solana/src/assets/tUSD.png diff --git a/packages/injected-script/shared/index.ts b/packages/injected-script/shared/index.ts index d48d4667caa5..bc49b4ef10b4 100644 --- a/packages/injected-script/shared/index.ts +++ b/packages/injected-script/shared/index.ts @@ -46,7 +46,7 @@ export interface InternalEvents { //#endregion //#region Solana inpage provider bridge - /** Request the bridge to connect. */ + /** Request the bridge to call function. */ solanaBridgeExecute: [path: string, req_id: number] /** Request the bridge to listen on an event. */ solanaBridgeRequestListen: [eventName: string] diff --git a/packages/plugins/Solana/src/assets/tUSD.png b/packages/plugins/Solana/src/assets/tUSD.png deleted file mode 100644 index 183dcb4fb5d372630a2313c32f77b7c44da3035c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6642 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 diff --git a/packages/shared/src/UI/components/I18NextProviderHMR.tsx b/packages/shared/src/UI/components/I18NextProviderHMR.tsx index 2e84b03122f1..3539057ad94f 100644 --- a/packages/shared/src/UI/components/I18NextProviderHMR.tsx +++ b/packages/shared/src/UI/components/I18NextProviderHMR.tsx @@ -1,7 +1,8 @@ import React, { useEffect, useState } from 'react' import { I18nextProvider, type I18nextProviderProps } from 'react-i18next' -export const I18NextProviderHMR = false +export const I18NextProviderHMR = + process.env.NODE_ENV === 'development' ? function I18NextProviderHMR({ i18n, defaultNS, children }: React.PropsWithChildren) { const [ns, setNS] = useState(defaultNS) diff --git a/packages/web3-constants/solana/token.json b/packages/web3-constants/solana/token.json index 3c7bd0bba321..6040c91d1f81 100644 --- a/packages/web3-constants/solana/token.json +++ b/packages/web3-constants/solana/token.json @@ -1,9 +1,4 @@ { - "TETHER_ADDRESS": { - "Mainnet": "", - "Testnet": "", - "Devnet": "" - }, "USDC_ADDRESS": { "Mainnet": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "Testnet": "CpMah17kQEL2wqyMKt3mZBdTnZbkbfx4nqmQMFDP5vwp", From 460b28d0036ada496ec2a75ec0e160a59592054f Mon Sep 17 00:00:00 2001 From: unclebill Date: Fri, 7 Jan 2022 17:16:19 +0800 Subject: [PATCH 13/19] fix: resolve token details --- cspell.json | 3 +- packages/plugins/Solana/package.json | 1 + .../plugins/Solana/src/UI/Web3State/index.ts | 2 +- .../Solana/src/apis/getFungibleAssets.ts | 18 ++++-- packages/plugins/Solana/src/constants.ts | 4 +- packages/web3-constants/solana/token.json | 5 ++ packages/web3-shared/solana/types.ts | 6 +- pnpm-lock.yaml | 64 +++++-------------- 8 files changed, 43 insertions(+), 60 deletions(-) diff --git a/cspell.json b/cspell.json index 1f54e3cb5b0e..0fadf2a21e10 100644 --- a/cspell.json +++ b/cspell.json @@ -251,7 +251,8 @@ "contrib", "juicebox", "sollet", - "signup" + "signup", + "lamports" ], "ignoreWords": [ "cryptopunks", diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json index b7569d112b72..deb5cc4f37ca 100644 --- a/packages/plugins/Solana/package.json +++ b/packages/plugins/Solana/package.json @@ -13,6 +13,7 @@ "@masknet/web3-providers": "workspace:*", "@masknet/web3-shared-base": "workspace:*", "@masknet/web3-shared-solana": "workspace:*", + "@solana/spl-token-registry": "^0.2.1301", "@solana/web3.js": "^1.30.2", "bignumber.js": "^9.0.1", "bn.js": "^4.12.0", diff --git a/packages/plugins/Solana/src/UI/Web3State/index.ts b/packages/plugins/Solana/src/UI/Web3State/index.ts index 087164bd2d3f..c4ee65854099 100644 --- a/packages/plugins/Solana/src/UI/Web3State/index.ts +++ b/packages/plugins/Solana/src/UI/Web3State/index.ts @@ -40,7 +40,7 @@ export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilit chainId: createConstantSubscription(chainId), networkType: createConstantSubscription(NetworkType.Solana), providerType: createSubscriptionFromPublicKey((publicKey) => { - return publicKey ? ProviderType.Sollet : undefined + return publicKey ? ProviderType.Phantom : undefined }), }, Asset: { diff --git a/packages/plugins/Solana/src/apis/getFungibleAssets.ts b/packages/plugins/Solana/src/apis/getFungibleAssets.ts index d31fb6a535f2..0a04646b5d0a 100644 --- a/packages/plugins/Solana/src/apis/getFungibleAssets.ts +++ b/packages/plugins/Solana/src/apis/getFungibleAssets.ts @@ -3,6 +3,7 @@ import { ChainId, getTokenConstants } from '@masknet/web3-shared-solana' import { CoinGecko } from '@masknet/web3-providers' import { createFungibleAsset, createFungibleToken } from '../helpers' import { NETWORK_ENDPOINTS } from '../constants' +import { TokenListProvider, TokenInfo } from '@solana/spl-token-registry' interface RpcOptions { method: string @@ -69,7 +70,7 @@ async function requestRPC(chainId: ChainId, options: RpcOptions): P } async function getSolanaBalance(chainId: ChainId, account: string) { - const { TETHER_ADDRESS = '' } = getTokenConstants(chainId) + const { SOL_ADDRESS = '' } = getTokenConstants(chainId) const price = await CoinGecko.getTokenPrice('solana', CurrencyType.USD) const data = await requestRPC(chainId, { method: 'getAccountInfo', @@ -77,7 +78,7 @@ async function getSolanaBalance(chainId: ChainId, account: string) { }) const balance = data.result?.value.lamports.toString() ?? '0' return createFungibleAsset( - createFungibleToken(chainId, TETHER_ADDRESS, 'Solana', 'SOL', 9), + createFungibleToken(chainId, SOL_ADDRESS, 'Solana', 'SOL', 9), balance, new URL('../assets/solana.png', import.meta.url).toString(), price, @@ -86,7 +87,7 @@ async function getSolanaBalance(chainId: ChainId, account: string) { const SPL_TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' -async function getFungibleTokenLists(chainId: ChainId, account: string) { +async function getSplTokenList(chainId: ChainId, account: string) { const data = await requestRPC(chainId, { method: 'getProgramAccounts', params: [ @@ -108,11 +109,18 @@ async function getFungibleTokenLists(chainId: ChainId, account: string) { ], }) if (!data.result?.length) return [] + const tokenListProvider = new TokenListProvider() + const provider = await tokenListProvider.resolve() + const tokenList = provider.filterByChainId(chainId).getList() return data.result.map((programAccount) => { const info = programAccount.account.data.parsed.info + const token = tokenList.find((x) => x.address === info.mint) ?? ({} as TokenInfo) + const name = token.name || 'Unknown Token' + const symbol = token.symbol || 'Unknown Token' return createFungibleAsset( - createFungibleToken(chainId, info.mint, info.mint, info.mint, info.tokenAmount.decimals), + createFungibleToken(chainId, info.mint, name, symbol, info.tokenAmount.decimals), info.tokenAmount.amount, + token.logoURI, ) }) } @@ -125,7 +133,7 @@ export async function getFungibleAssets( ): Promise[]> { const allSettled = await Promise.allSettled([ getSolanaBalance(network.chainId, address).then((x) => [x]), - getFungibleTokenLists(network.chainId, address), + getSplTokenList(network.chainId, address), ]) return allSettled diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index fdb242eafa0c..3a77709d8cf9 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -39,7 +39,7 @@ export const PLUGIN_PROVIDERS: Web3Plugin.ProviderDescriptor[] = [ ] export const NETWORK_ENDPOINTS: Record = { - [ChainId.Mainnet]: 'https://solana-api.projectserum.com', + [ChainId.Devnet]: 'https://solana-api.projectserum.com', [ChainId.Testnet]: 'https://api.testnet.solana.com', - [ChainId.Devnet]: 'https://api.devnet.solana.com', + [ChainId.Mainnet]: 'https://api.devnet.solana.com', } diff --git a/packages/web3-constants/solana/token.json b/packages/web3-constants/solana/token.json index 6040c91d1f81..e879bbee7804 100644 --- a/packages/web3-constants/solana/token.json +++ b/packages/web3-constants/solana/token.json @@ -3,5 +3,10 @@ "Mainnet": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "Testnet": "CpMah17kQEL2wqyMKt3mZBdTnZbkbfx4nqmQMFDP5vwp", "Devnet": "" + }, + "SOL_ADDRESS": { + "Mainnet": "00000000000000000000000000000000000000000000", + "Testnet": "00000000000000000000000000000000000000000000", + "Devnet": "" } } diff --git a/packages/web3-shared/solana/types.ts b/packages/web3-shared/solana/types.ts index 723b362b2a5a..6ca4951f26c3 100644 --- a/packages/web3-shared/solana/types.ts +++ b/packages/web3-shared/solana/types.ts @@ -1,7 +1,7 @@ export enum ChainId { - Mainnet = 1, - Testnet = 2, - Devnet = 3, + Mainnet = 101, + Testnet = 102, + Devnet = 103, } export enum NetworkType { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9904ff5bff2..8f7ab1f8ccb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -733,6 +733,7 @@ importers: '@masknet/web3-providers': workspace:* '@masknet/web3-shared-base': workspace:* '@masknet/web3-shared-solana': workspace:* + '@solana/spl-token-registry': ^0.2.1301 '@solana/web3.js': ^1.30.2 bignumber.js: ^9.0.1 bn.js: ^4.12.0 @@ -749,12 +750,13 @@ importers: '@masknet/web3-providers': link:../../web3-providers '@masknet/web3-shared-base': link:../../web3-shared/base '@masknet/web3-shared-solana': link:../../web3-shared/solana + '@solana/spl-token-registry': 0.2.1301 '@solana/web3.js': 1.31.0 bignumber.js: 9.0.1 bn.js: 4.12.0 bs58: 4.0.1 buffer: 6.0.3 - react-use: 17.3.1 + react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 packages/plugins/Wallet: specifiers: @@ -5342,6 +5344,13 @@ packages: buffer: 6.0.3 dev: false + /@solana/spl-token-registry/0.2.1301: + resolution: {integrity: sha512-6T5AL18n9PxhGAA3useBON1DVxZg8QbrmkD9dNTzvPZQdrzSi8Hha2GmJst4kZSPAQ77l6GlcIw8ibQTAm3SZQ==} + engines: {node: '>=10'} + dependencies: + cross-fetch: 3.0.6 + dev: false + /@solana/web3.js/1.31.0: resolution: {integrity: sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==} engines: {node: '>=12.20.0'} @@ -11796,6 +11805,12 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-fetch/3.0.6: + resolution: {integrity: sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==} + dependencies: + node-fetch: 2.6.1 + dev: false + /cross-fetch/3.1.4: resolution: {integrity: sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==} dependencies: @@ -18610,22 +18625,6 @@ packages: resolution: {integrity: sha1-ulSMh578+5DaHE2eCX20pGySVe8=} dev: false - /nano-css/5.3.1: - resolution: {integrity: sha512-ENPIyNzANQRyYVvb62ajDd7PAyIgS2LIUnT9ewih4yrXSZX4hKoUwssy8WjUH++kEOA5wUTMgNnV7ko5n34kUA==} - peerDependencies: - react: '*' - react-dom: '*' - dependencies: - css-tree: 1.1.3 - csstype: 3.0.8 - fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 6.0.0 - rtl-css-js: 1.14.2 - sourcemap-codec: 1.4.8 - stacktrace-js: 2.0.2 - stylis: 4.0.10 - dev: false - /nano-css/5.3.1_757a802188413a36d4f24237d13b8e90: resolution: {integrity: sha512-ENPIyNzANQRyYVvb62ajDd7PAyIgS2LIUnT9ewih4yrXSZX4hKoUwssy8WjUH++kEOA5wUTMgNnV7ko5n34kUA==} peerDependencies: @@ -20543,37 +20542,6 @@ packages: tslib: 2.3.1 dev: false - /react-universal-interface/0.6.2_tslib@2.3.1: - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: '*' - tslib: '*' - dependencies: - tslib: 2.3.1 - dev: false - - /react-use/17.3.1: - resolution: {integrity: sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - dependencies: - '@types/js-cookie': 2.2.7 - '@xobotyi/scrollbar-width': 1.9.5 - copy-to-clipboard: 3.3.1 - fast-deep-equal: 3.1.3 - fast-shallow-equal: 1.0.0 - js-cookie: 2.2.1 - nano-css: 5.3.1 - react-universal-interface: 0.6.2_tslib@2.3.1 - resize-observer-polyfill: 1.5.1 - screenfull: 5.1.0 - set-harmonic-interval: 1.0.1 - throttle-debounce: 3.0.1 - ts-easing: 0.2.0 - tslib: 2.3.1 - dev: false - /react-use/17.3.1_757a802188413a36d4f24237d13b8e90: resolution: {integrity: sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==} peerDependencies: From e768db1f97ebd99eb3b04275d2532b69fdee680f Mon Sep 17 00:00:00 2001 From: unclebill Date: Sat, 8 Jan 2022 17:27:36 +0800 Subject: [PATCH 14/19] fix: list nft on dashboard --- cspell.json | 3 +- .../pages/Wallets/components/Assets/index.tsx | 4 +- .../components/CollectibleList/index.tsx | 9 +- .../src/web3/useNetworkDescriptor.ts | 5 +- packages/plugins/Solana/package.json | 3 + .../plugins/Solana/src/UI/Web3State/index.ts | 3 +- .../Solana/src/apis/getFungibleAssets.ts | 93 ++---------- .../Solana/src/apis/getNonFungibleAssets.ts | 102 +++++++++++++ packages/plugins/Solana/src/apis/index.ts | 1 + packages/plugins/Solana/src/apis/shared.ts | 75 ++++++++++ packages/web3-constants/compile-constants.ts | 2 +- packages/web3-constants/solana/token.json | 6 +- pnpm-lock.yaml | 135 +++++++++++++++++- 13 files changed, 347 insertions(+), 94 deletions(-) create mode 100644 packages/plugins/Solana/src/apis/getNonFungibleAssets.ts create mode 100644 packages/plugins/Solana/src/apis/shared.ts diff --git a/cspell.json b/cspell.json index 0fadf2a21e10..3a953b8ebd21 100644 --- a/cspell.json +++ b/cspell.json @@ -367,7 +367,8 @@ "treeshake", "xtest", "xdescribe", - "irss" + "irss", + "metaplex" ], "ignoreRegExpList": ["/@servie/"], "overrides": [ diff --git a/packages/dashboard/src/pages/Wallets/components/Assets/index.tsx b/packages/dashboard/src/pages/Wallets/components/Assets/index.tsx index d4f9c030c7bb..0bc01d6f38a7 100644 --- a/packages/dashboard/src/pages/Wallets/components/Assets/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/Assets/index.tsx @@ -66,6 +66,8 @@ export const Assets = memo(({ network }) => { setTab(AssetTab.Token) }, [pluginId]) + const showCollectibles = [NetworkPluginID.PLUGIN_EVM, NetworkPluginID.PLUGIN_SOLANA].includes(pluginId) + return ( <> @@ -73,7 +75,7 @@ export const Assets = memo(({ network }) => { {assetTabs - .filter((x) => pluginId === NetworkPluginID.PLUGIN_EVM || x === AssetTab.Token) + .filter((x) => showCollectibles || x === AssetTab.Token) .map((key) => ( ))} diff --git a/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx b/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx index fd5d87fce9bc..1defe456ec13 100644 --- a/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx @@ -1,6 +1,7 @@ import { Dispatch, memo, SetStateAction, useCallback, useEffect, useRef, useState } from 'react' import { Box, Stack, TablePagination } from '@mui/material' import { makeStyles } from '@masknet/theme' +import { EMPTY_LIST } from '@masknet/web3-shared-evm' import { LoadingPlaceholder } from '../../../../components/LoadingPlaceholder' import { EmptyPlaceholder } from '../EmptyPlaceholder' import { CollectibleCard } from '../CollectibleCard' @@ -49,20 +50,20 @@ export const CollectibleList = memo(({ selectedNetwork }) const [renderData, setRenderData] = useState([]) const { - value = { data: [], hasNextPage: false }, + value = { data: EMPTY_LIST, hasNextPage: false }, error: collectiblesError, retry, } = useAsyncRetry( async () => - Asset?.getNonFungibleAssets?.(account, { page: page, size: 20 }, undefined, selectedNetwork ?? undefined), - [account, Asset, network, selectedNetwork], + Asset?.getNonFungibleAssets?.(account, { page: page, size: 20 }, undefined, selectedNetwork || undefined), + [account, Asset?.getNonFungibleAssets, network, selectedNetwork], ) useEffect(() => { if (!loadingSize) return const render = value.data.slice(page * loadingSize, (page + 1) * loadingSize) setRenderData(render) - }, [value, loadingSize, page]) + }, [value.data, loadingSize, page]) const onSend = useCallback( (detail: Web3Plugin.NonFungibleToken) => diff --git a/packages/plugin-infra/src/web3/useNetworkDescriptor.ts b/packages/plugin-infra/src/web3/useNetworkDescriptor.ts index 327bfc8ce29d..5f906dc28ba2 100644 --- a/packages/plugin-infra/src/web3/useNetworkDescriptor.ts +++ b/packages/plugin-infra/src/web3/useNetworkDescriptor.ts @@ -8,9 +8,10 @@ export function useNetworkDescriptor( expectedPluginID?: NetworkPluginID, ) { const pluginID = usePluginIDContext() - const networkType = useNetworkType(expectedPluginID ?? pluginID) + const pid = expectedPluginID ?? pluginID + const networkType = useNetworkType(pid) - return getPluginDefine(expectedPluginID ?? pluginID)?.declareWeb3Networks?.find((x) => + return getPluginDefine(pid)?.declareWeb3Networks?.find((x) => [x.chainId, x.type, x.ID].includes(expectedChainIdOrNetworkTypeOrID ?? networkType ?? ''), ) } diff --git a/packages/plugins/Solana/package.json b/packages/plugins/Solana/package.json index deb5cc4f37ca..f9368df2ea69 100644 --- a/packages/plugins/Solana/package.json +++ b/packages/plugins/Solana/package.json @@ -13,6 +13,9 @@ "@masknet/web3-providers": "workspace:*", "@masknet/web3-shared-base": "workspace:*", "@masknet/web3-shared-solana": "workspace:*", + "@metaplex-foundation/mpl-token-metadata": "^0.0.2", + "@metaplex/js": "^4.11.2", + "@solana/spl-token": "^0.1.8", "@solana/spl-token-registry": "^0.2.1301", "@solana/web3.js": "^1.30.2", "bignumber.js": "^9.0.1", diff --git a/packages/plugins/Solana/src/UI/Web3State/index.ts b/packages/plugins/Solana/src/UI/Web3State/index.ts index c4ee65854099..92ea8098cbb0 100644 --- a/packages/plugins/Solana/src/UI/Web3State/index.ts +++ b/packages/plugins/Solana/src/UI/Web3State/index.ts @@ -9,7 +9,7 @@ import { resolveTransactionLinkOnExplorer, } from '@masknet/web3-shared-solana' import BigNumber from 'bignumber.js' -import { getFungibleAssets } from '../../apis' +import { getFungibleAssets, getNonFungibleAssets } from '../../apis' import { formatAddress } from '../../helpers' import { getStorage, StorageDefaultValue } from '../../storage' @@ -45,6 +45,7 @@ export function createWeb3State(signal: AbortSignal): Web3Plugin.ObjectCapabilit }, Asset: { getFungibleAssets, + getNonFungibleAssets, }, Utils: { formatAddress, diff --git a/packages/plugins/Solana/src/apis/getFungibleAssets.ts b/packages/plugins/Solana/src/apis/getFungibleAssets.ts index 0a04646b5d0a..f04b4e1c328c 100644 --- a/packages/plugins/Solana/src/apis/getFungibleAssets.ts +++ b/packages/plugins/Solana/src/apis/getFungibleAssets.ts @@ -2,72 +2,8 @@ import { Pagination, Web3Plugin, CurrencyType } from '@masknet/plugin-infra' import { ChainId, getTokenConstants } from '@masknet/web3-shared-solana' import { CoinGecko } from '@masknet/web3-providers' import { createFungibleAsset, createFungibleToken } from '../helpers' -import { NETWORK_ENDPOINTS } from '../constants' import { TokenListProvider, TokenInfo } from '@solana/spl-token-registry' - -interface RpcOptions { - method: string - params?: any[] -} - -interface RpcResponse { - jsonrpc: '2.0' - result: T | null -} - -interface AccountInfo { - data: [string, string] | object - executable: boolean - lamports: number -} - -type GetAccountInfoResponse = RpcResponse<{ value: AccountInfo }> -interface ProgramAccount { - account: { - data: { - parsed: { - info: { - isNative: false - mint: string - owner: string - state: string - tokenAmount: { - amount: string - decimals: number - uiAmount: number - uiAmountString: string - } - } - } - program: 'spl-token' - space: number - } - executable: boolean - lamports: number - owner: string - rentEpoch: string - } -} - -type GetProgramAccountsResponse = RpcResponse> - -let id = 0 -async function requestRPC(chainId: ChainId, options: RpcOptions): Promise { - const endpoint = NETWORK_ENDPOINTS[chainId] - id += 1 - const res = await globalThis.fetch(endpoint, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - ...options, - jsonrpc: '2.0', - id, - }), - }) - return res.json() -} +import { GetAccountInfoResponse, GetProgramAccountsResponse, requestRPC, SPL_TOKEN_PROGRAM_ID } from './shared' async function getSolanaBalance(chainId: ChainId, account: string) { const { SOL_ADDRESS = '' } = getTokenConstants(chainId) @@ -84,9 +20,6 @@ async function getSolanaBalance(chainId: ChainId, account: string) { price, ) } - -const SPL_TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' - async function getSplTokenList(chainId: ChainId, account: string) { const data = await requestRPC(chainId, { method: 'getProgramAccounts', @@ -112,17 +45,19 @@ async function getSplTokenList(chainId: ChainId, account: string) { const tokenListProvider = new TokenListProvider() const provider = await tokenListProvider.resolve() const tokenList = provider.filterByChainId(chainId).getList() - return data.result.map((programAccount) => { - const info = programAccount.account.data.parsed.info - const token = tokenList.find((x) => x.address === info.mint) ?? ({} as TokenInfo) - const name = token.name || 'Unknown Token' - const symbol = token.symbol || 'Unknown Token' - return createFungibleAsset( - createFungibleToken(chainId, info.mint, name, symbol, info.tokenAmount.decimals), - info.tokenAmount.amount, - token.logoURI, - ) - }) + return data.result + .filter((x) => x.account.data.parsed.info.tokenAmount.decimals !== 0) // Filter out non fun. + .map((x) => { + const info = x.account.data.parsed.info + const token = tokenList.find((y) => y.address === info.mint) ?? ({} as TokenInfo) + const name = token.name || 'Unknown Token' + const symbol = token.symbol || 'Unknown Token' + return createFungibleAsset( + createFungibleToken(chainId, info.mint, name, symbol, info.tokenAmount.decimals), + info.tokenAmount.amount, + token.logoURI, + ) + }) } export async function getFungibleAssets( diff --git a/packages/plugins/Solana/src/apis/getNonFungibleAssets.ts b/packages/plugins/Solana/src/apis/getNonFungibleAssets.ts new file mode 100644 index 000000000000..1b3e2861dff8 --- /dev/null +++ b/packages/plugins/Solana/src/apis/getNonFungibleAssets.ts @@ -0,0 +1,102 @@ +import { Connection } from '@metaplex/js' +import { ChainId } from '@masknet/web3-shared-solana' +import { Metadata } from '@metaplex-foundation/mpl-token-metadata' +import { Pageable, Pagination, TokenType, Web3Plugin } from '@masknet/plugin-infra' +import { fetchJSON, GetProgramAccountsResponse, requestRPC, SPL_TOKEN_PROGRAM_ID } from './shared' + +const ENDPOINT_KEY = 'devnet' + +interface ExternalMetadata { + name: string + symbol: string + description: string + image?: string + animation?: string + properties: { + files: Array<{ + uri: string + type: 'image/jpeg' | string + }> + category: string + creators: Array<{ + address: string + share: 100 + }> + } +} + +async function getNftList(chainId: ChainId, account: string) { + const data = await requestRPC(chainId, { + method: 'getProgramAccounts', + params: [ + SPL_TOKEN_PROGRAM_ID, + { + encoding: 'jsonParsed', + filters: [ + { + dataSize: 165, + }, + { + memcmp: { + offset: 32, + bytes: account, + }, + }, + ], + }, + ], + }) + if (!data.result?.length) return [] + const connection = new Connection(ENDPOINT_KEY) + const nftTokens = data.result.filter((x) => x.account.data.parsed.info.tokenAmount.decimals === 0) + const promises = nftTokens.map((x) => + Metadata.load(connection, x.pubkey).then(async (metadata) => { + if (!metadata) return null + const externalMeta = await fetchJSON(metadata.data.data.uri).catch(() => null) + const pubkey = metadata.pubkey.toBase58() + return { + id: pubkey, + tokenId: pubkey, + chainId: chainId, + type: TokenType.NonFungible, + name: metadata.data.data.name, + description: externalMeta?.description, + contract: { + name: metadata.data.data.name, + symbol: metadata.data.data.symbol, + chainId: ChainId.Mainnet, + address: pubkey, + tokenId: pubkey, + }, + metadata: { + name: metadata.data.data.name, + description: metadata.data.data.name, + mediaType: externalMeta?.properties?.category || 'Unknown', + iconURL: '', + assetURL: externalMeta?.animation ?? externalMeta?.image ?? '', + }, + } as Web3Plugin.NonFungibleToken + }), + ) + + const allSettled = await Promise.allSettled(promises) + const tokens = allSettled + .map((x) => (x.status === 'fulfilled' ? x.value : null)) + .filter(Boolean) as Web3Plugin.NonFungibleToken[] + return tokens +} + +export async function getNonFungibleAssets( + address: string, + pagination: Pagination, + providerType?: string, + network?: Web3Plugin.NetworkDescriptor, +): Promise> { + const tokens = await getNftList(ChainId.Mainnet, address) + + return { + currentPage: 1, + hasNextPage: false, + data: tokens, + } +} diff --git a/packages/plugins/Solana/src/apis/index.ts b/packages/plugins/Solana/src/apis/index.ts index 9be04ef09ad9..cd7781fd4a5f 100644 --- a/packages/plugins/Solana/src/apis/index.ts +++ b/packages/plugins/Solana/src/apis/index.ts @@ -1 +1,2 @@ export * from './getFungibleAssets' +export * from './getNonFungibleAssets' diff --git a/packages/plugins/Solana/src/apis/shared.ts b/packages/plugins/Solana/src/apis/shared.ts new file mode 100644 index 000000000000..e8dbe25e6364 --- /dev/null +++ b/packages/plugins/Solana/src/apis/shared.ts @@ -0,0 +1,75 @@ +import type { ChainId } from '@masknet/web3-shared-solana' +import { TOKEN_PROGRAM_ID } from '@solana/spl-token' +import { NETWORK_ENDPOINTS } from '../constants' + +export const SPL_TOKEN_PROGRAM_ID = TOKEN_PROGRAM_ID.toBase58() + +interface RpcOptions { + method: string + params?: any[] +} + +export interface RpcResponse { + jsonrpc: '2.0' + result: T | null +} + +export interface AccountInfo { + data: [string, string] | object + executable: boolean + lamports: number +} + +export type GetAccountInfoResponse = RpcResponse<{ value: AccountInfo }> +export interface ProgramAccount { + account: { + data: { + parsed: { + info: { + isNative: false + mint: string + owner: string + state: string + tokenAmount: { + amount: string + decimals: number + uiAmount: number + uiAmountString: string + } + } + } + program: 'spl-token' + space: number + } + executable: boolean + lamports: number + owner: string + rentEpoch: string + } + pubkey: string +} + +export type GetProgramAccountsResponse = RpcResponse> + +let id = 0 +export async function requestRPC(chainId: ChainId, options: RpcOptions): Promise { + const endpoint = NETWORK_ENDPOINTS[chainId] + id += 1 + const res = await globalThis.fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + ...options, + jsonrpc: '2.0', + id, + }), + }) + return res.json() +} + +export async function fetchJSON(url: string): Promise { + const res = await globalThis.fetch(url) + return res.json() +} diff --git a/packages/web3-constants/compile-constants.ts b/packages/web3-constants/compile-constants.ts index b8f7b4c5f707..fae7b7dffefd 100644 --- a/packages/web3-constants/compile-constants.ts +++ b/packages/web3-constants/compile-constants.ts @@ -57,6 +57,6 @@ compileConstants(path.join(__dirname, 'evm'), [ 'Fantom', ]) -compileConstants(path.join(__dirname, 'solana'), ['mainnet-beta', 'testnet', 'devnet']) +compileConstants(path.join(__dirname, 'solana'), ['Mainnet', 'Testnet', 'Devnet']) compileConstants(path.join(__dirname, 'flow'), ['Mainnet', 'Testnet']) diff --git a/packages/web3-constants/solana/token.json b/packages/web3-constants/solana/token.json index e879bbee7804..f99d39ec2a02 100644 --- a/packages/web3-constants/solana/token.json +++ b/packages/web3-constants/solana/token.json @@ -5,8 +5,8 @@ "Devnet": "" }, "SOL_ADDRESS": { - "Mainnet": "00000000000000000000000000000000000000000000", - "Testnet": "00000000000000000000000000000000000000000000", - "Devnet": "" + "Mainnet": "So11111111111111111111111111111111111111112", + "Testnet": "So11111111111111111111111111111111111111112", + "Devnet": "So11111111111111111111111111111111111111112" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8f7ab1f8ccb7..cbd915dec312 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -733,6 +733,9 @@ importers: '@masknet/web3-providers': workspace:* '@masknet/web3-shared-base': workspace:* '@masknet/web3-shared-solana': workspace:* + '@metaplex-foundation/mpl-token-metadata': ^0.0.2 + '@metaplex/js': ^4.11.2 + '@solana/spl-token': ^0.1.8 '@solana/spl-token-registry': ^0.2.1301 '@solana/web3.js': ^1.30.2 bignumber.js: ^9.0.1 @@ -750,6 +753,9 @@ importers: '@masknet/web3-providers': link:../../web3-providers '@masknet/web3-shared-base': link:../../web3-shared/base '@masknet/web3-shared-solana': link:../../web3-shared/solana + '@metaplex-foundation/mpl-token-metadata': 0.0.2 + '@metaplex/js': 4.11.2 + '@solana/spl-token': 0.1.8 '@solana/spl-token-registry': 0.2.1301 '@solana/web3.js': 1.31.0 bignumber.js: 9.0.1 @@ -4684,6 +4690,87 @@ packages: resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} dev: false + /@metaplex-foundation/mpl-auction/0.0.2: + resolution: {integrity: sha512-4UDDi8OiQr+D6KrCNTRrqf/iDD6vi5kzRtMRtuNpywTyhX9hnbr1Zkc6Ncncbh9GZhbhcn+/h5wHgzh+xA6TnQ==} + dependencies: + '@metaplex-foundation/mpl-core': 0.0.2 + '@solana/spl-token': 0.1.8 + '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@metaplex-foundation/mpl-core/0.0.2: + resolution: {integrity: sha512-UUJ4BlYiWdDegAWmjsNQiNehwYU3QfSFWs3sv4VX0J6/ZrQ28zqosGhQ+I2ZCTEy216finJ82sZWNjuwSWCYyQ==} + dependencies: + '@solana/web3.js': 1.31.0 + bs58: 4.0.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@metaplex-foundation/mpl-metaplex/0.0.5: + resolution: {integrity: sha512-VRt3fiO/7/jcHwN+gWvTtpp+7wYhIcEDzMG1lOeV3yYyhz9fAT0E3LqEl2moifNTAopGCE4zYa84JA/OW+1YvA==} + dependencies: + '@metaplex-foundation/mpl-auction': 0.0.2 + '@metaplex-foundation/mpl-core': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 0.0.2 + '@metaplex-foundation/mpl-token-vault': 0.0.2 + '@solana/spl-token': 0.1.8 + '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@metaplex-foundation/mpl-token-metadata/0.0.2: + resolution: {integrity: sha512-yKJPhFlX8MkNbSCi1iwHn4xKmguLK/xFhYa+RuYdL2seuT4CKXHj2CnR2AkcdQj46Za4/nR3jZcRFKq7QlnvBw==} + dependencies: + '@metaplex-foundation/mpl-core': 0.0.2 + '@solana/spl-token': 0.1.8 + '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@metaplex-foundation/mpl-token-vault/0.0.2: + resolution: {integrity: sha512-JiVcow8OzUGW0KTs/E1QrAdmYGqE9EGKE6cc2gxNNBYqDeVdjYlgEa64IiGvNF9rvbI2g2Z3jw0mYuA9LD9S/A==} + dependencies: + '@metaplex-foundation/mpl-core': 0.0.2 + '@solana/spl-token': 0.1.8 + '@solana/web3.js': 1.31.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@metaplex/js/4.11.2: + resolution: {integrity: sha512-BJvbYGz0l8e2iZSSFMeOr4n7cNvPMYhkrl/vuXeqZR0EoyhfCQgobE2QHUyEKPMwe6VxWu9VQ7Ra1oBlhC2xTg==} + dependencies: + '@metaplex-foundation/mpl-auction': 0.0.2 + '@metaplex-foundation/mpl-core': 0.0.2 + '@metaplex-foundation/mpl-metaplex': 0.0.5 + '@metaplex-foundation/mpl-token-metadata': 0.0.2 + '@metaplex-foundation/mpl-token-vault': 0.0.2 + '@solana/spl-token': 0.1.8 + '@solana/web3.js': 1.31.0 + '@types/bs58': 4.0.1 + axios: 0.21.4 + bn.js: 5.2.0 + borsh: 0.4.0 + bs58: 4.0.1 + buffer: 6.0.3 + crypto-hash: 1.3.0 + form-data: 4.0.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + /@mrmlnc/readdir-enhanced/2.2.1: resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} engines: {node: '>=4'} @@ -5351,6 +5438,21 @@ packages: cross-fetch: 3.0.6 dev: false + /@solana/spl-token/0.1.8: + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + dependencies: + '@babel/runtime': 7.16.5 + '@solana/web3.js': 1.31.0 + bn.js: 5.2.0 + buffer: 6.0.3 + buffer-layout: 1.2.2 + dotenv: 10.0.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@solana/web3.js/1.31.0: resolution: {integrity: sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==} engines: {node: '>=12.20.0'} @@ -7452,6 +7554,12 @@ packages: '@types/node': 16.11.17 dev: true + /@types/bs58/4.0.1: + resolution: {integrity: sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==} + dependencies: + base-x: 3.0.8 + dev: false + /@types/chrome/0.0.136: resolution: {integrity: sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA==} dependencies: @@ -9585,6 +9693,14 @@ packages: - debug dev: false + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.14.5 + transitivePeerDependencies: + - debug + dev: false + /babel-code-frame/6.26.0: resolution: {integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=} dependencies: @@ -10743,6 +10859,11 @@ packages: resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} dev: true + /buffer-layout/1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + dev: false + /buffer-to-arraybuffer/0.0.5: resolution: {integrity: sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=} @@ -11872,6 +11993,11 @@ packages: randombytes: 2.1.0 randomfill: 1.0.4 + /crypto-hash/1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + dev: false + /crypto-js/3.3.0: resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} dev: false @@ -12757,6 +12883,11 @@ packages: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dev: true + /dotenv/10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: false + /dotenv/8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -21223,7 +21354,7 @@ packages: /rpc-websockets/7.4.16: resolution: {integrity: sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ==} dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 circular-json: 0.5.9 eventemitter3: 4.0.7 uuid: 8.3.2 @@ -21260,7 +21391,7 @@ packages: /rtl-css-js/1.14.2: resolution: {integrity: sha512-t6Wc/wpqm8s3kuXAV6tL/T7VS6n0XszzX58CgCsLj3O2xi9ITSLfzYhtl+GKyxCi/3QEqVctOJQwCiDzb2vteQ==} dependencies: - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 dev: false /run-parallel/1.2.0: From b22c4b1efba026ac4ee3dc3c86b57123bade9afd Mon Sep 17 00:00:00 2001 From: unclebill Date: Mon, 10 Jan 2022 12:09:21 +0800 Subject: [PATCH 15/19] fix: walkaround react-router@6.1 --- packages/dashboard/package.json | 4 ++-- pnpm-lock.yaml | 41 +++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json index 2a8a955e116f..7a66c76765f8 100644 --- a/packages/dashboard/package.json +++ b/packages/dashboard/package.json @@ -38,8 +38,8 @@ "json-stable-stringify": "^1.0.1", "react-avatar-editor": "^12.0.0", "react-hook-form": "^7.22.5", - "react-router": "^6.0.0-beta.0", - "react-router-dom": "^6.0.0-beta.0", + "react-router": "6.0.0-beta.0", + "react-router-dom": "6.0.0-beta.0", "react-use": "^17.3.1", "unstated-next": "^1.1.0", "urlcat": "^2.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbd915dec312..33366716e690 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,8 +164,8 @@ importers: path-browserify: ^1.0.1 react-avatar-editor: ^12.0.0 react-hook-form: ^7.22.5 - react-router: ^6.0.0-beta.0 - react-router-dom: ^6.0.0-beta.0 + react-router: 6.0.0-beta.0 + react-router-dom: 6.0.0-beta.0 react-use: ^17.3.1 stream-browserify: ^3.0.0 unstated-next: ^1.1.0 @@ -206,8 +206,8 @@ importers: json-stable-stringify: 1.0.1 react-avatar-editor: 12.0.0_2a5ce53653c2861b1c74a6612fe40887 react-hook-form: 7.22.5_react@18.0.0-rc.0 - react-router: 6.1.1_react@18.0.0-rc.0 - react-router-dom: 6.1.1_757a802188413a36d4f24237d13b8e90 + react-router: 6.0.0-beta.0_history@5.2.0+react@18.0.0-rc.0 + react-router-dom: 6.0.0-beta.0_154c53788755629e2430b224cbac559e react-use: 17.3.1_757a802188413a36d4f24237d13b8e90 unstated-next: 1.1.0 urlcat: 2.0.4 @@ -20576,6 +20576,20 @@ packages: tiny-warning: 1.0.3 dev: false + /react-router-dom/6.0.0-beta.0_154c53788755629e2430b224cbac559e: + resolution: {integrity: sha512-36yNNGMT8RB9FRPL9nKJi6HKDkgOakU+o/2hHpSzR6e37gN70MpOU6QQlmif4oAWWBwjyGc3ZNOMFCsFuHUY5w==} + peerDependencies: + history: '>=5' + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + history: 5.2.0 + prop-types: 15.8.0 + react: 18.0.0-rc.0 + react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 + react-router: 6.0.0-beta.0_history@5.2.0+react@18.0.0-rc.0 + dev: false + /react-router-dom/6.1.1_757a802188413a36d4f24237d13b8e90: resolution: {integrity: sha512-O3UH89DI4o+swd2q6lF4dSmpuNCxwkUXcj0zAFcVc1H+YoPE6T7uwoFMX0ws1pUvCY8lYDucFpOqCCdal6VFzg==} peerDependencies: @@ -20586,6 +20600,7 @@ packages: react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 react-router: 6.1.1_react@18.0.0-rc.0 + dev: true /react-router/5.2.1_react@18.0.0-rc.0: resolution: {integrity: sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==} @@ -20605,6 +20620,17 @@ packages: tiny-warning: 1.0.3 dev: false + /react-router/6.0.0-beta.0_history@5.2.0+react@18.0.0-rc.0: + resolution: {integrity: sha512-VgMdfpVcmFQki/LZuLh8E/MNACekDetz4xqft+a6fBZvvJnVqKbLqebF7hyoawGrV1HcO5tVaUang2Og4W2j1Q==} + peerDependencies: + history: '>=5' + react: '>=16.8' + dependencies: + history: 5.2.0 + prop-types: 15.8.0 + react: 18.0.0-rc.0 + dev: false + /react-router/6.1.1_react@18.0.0-rc.0: resolution: {integrity: sha512-55o96RiDZmC0uD17DPqVmzzfdNd2Dc+EjkYvMAmHl43du/GItaTdFr5WwjTryNWPXZ+OOVQxQhwAX25UwxpHtw==} peerDependencies: @@ -20612,6 +20638,7 @@ packages: dependencies: history: 5.2.0 react: 18.0.0-rc.0 + dev: true /react-sizeme/3.0.2: resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} @@ -25562,8 +25589,8 @@ packages: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} dev: true - github.com/ProjectOpenSea/wyvern-js/1634ad0e2f9961accca62edbf4ac624effa18552: - resolution: {tarball: https://codeload.github.com/ProjectOpenSea/wyvern-js/tar.gz/1634ad0e2f9961accca62edbf4ac624effa18552} + github.com/ProjectOpenSea/wyvern-js/1e69699e8ba39edcb177b503caeaaefbf0c31385: + resolution: {tarball: https://codeload.github.com/ProjectOpenSea/wyvern-js/tar.gz/1e69699e8ba39edcb177b503caeaaefbf0c31385} name: wyvern-js version: 3.2.0 dependencies: @@ -25624,7 +25651,7 @@ packages: bignumber.js: 6.0.0 typed-promisify: 0.4.0 web3-provider-engine: 13.8.0 - wyvern-js: github.com/ProjectOpenSea/wyvern-js/1634ad0e2f9961accca62edbf4ac624effa18552 + wyvern-js: github.com/ProjectOpenSea/wyvern-js/1e69699e8ba39edcb177b503caeaaefbf0c31385 transitivePeerDependencies: - debug dev: false From 1bc260dbcdc51d689f957ab00a15f1448746b861 Mon Sep 17 00:00:00 2001 From: unclebill Date: Tue, 11 Jan 2022 11:14:24 +0800 Subject: [PATCH 16/19] fix: network endpoint --- packages/plugins/Solana/src/constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index 3a77709d8cf9..fdb242eafa0c 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -39,7 +39,7 @@ export const PLUGIN_PROVIDERS: Web3Plugin.ProviderDescriptor[] = [ ] export const NETWORK_ENDPOINTS: Record = { - [ChainId.Devnet]: 'https://solana-api.projectserum.com', + [ChainId.Mainnet]: 'https://solana-api.projectserum.com', [ChainId.Testnet]: 'https://api.testnet.solana.com', - [ChainId.Mainnet]: 'https://api.devnet.solana.com', + [ChainId.Devnet]: 'https://api.devnet.solana.com', } From e03f1833879c6ac865891459d69b971ee9e2e863 Mon Sep 17 00:00:00 2001 From: unclebill Date: Tue, 11 Jan 2022 12:18:43 +0800 Subject: [PATCH 17/19] fix: some issues --- .../components/CollectibleList/index.tsx | 58 ++++++++---------- .../plugins/EVM/UI/Web3State/getAssetsFn.ts | 2 +- packages/plugins/Solana/src/assets/solana.png | Bin 33009 -> 31910 bytes .../plugins/Solana/src/helpers/formatter.ts | 2 +- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx b/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx index 1defe456ec13..0441a890108a 100644 --- a/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/CollectibleList/index.tsx @@ -45,13 +45,13 @@ export const CollectibleList = memo(({ selectedNetwork }) const account = useAccount() const { Asset } = useWeb3PluginState() const network = useNetworkDescriptor() - const [loadingSize, setLoadingSize] = useState() - const [loadingCollectible, setLoadingCollectible] = useState(true) + const [loadingSize, setLoadingSize] = useState(0) const [renderData, setRenderData] = useState([]) const { value = { data: EMPTY_LIST, hasNextPage: false }, error: collectiblesError, + loading: isQuerying, retry, } = useAsyncRetry( async () => @@ -82,22 +82,20 @@ export const CollectibleList = memo(({ selectedNetwork }) if (!info.done) { retry() } - setLoadingCollectible(false) }) }, [retry]) - const hasNextPage = (page + 1) * (loadingSize ?? 0) < value.data.length + const hasNextPage = (page + 1) * loadingSize < value.data.length + const isLoading = renderData.length === 0 && isQuerying return ( ( return ( - <> - {isLoading ? ( - - ) : isEmpty ? ( - - ) : ( - -
- {dataSource.map((x) => ( -
- onSend(x as unknown as any)} - /> -
- ))} -
-
- )} - + {isLoading ? ( + + ) : isEmpty ? ( + + ) : ( + +
+ {dataSource.map((x) => ( +
+ onSend(x as unknown as any)} + /> +
+ ))} +
+
+ )} {showPagination ? ( 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ŬS^_c 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 8) return address + if (size === 0 || size >= 22) return address return `${address.substr(0, 2 + size)}...${address.substr(-size)}` } From e3f9bea7957713c78c4bee838b621851a9733bac Mon Sep 17 00:00:00 2001 From: unclebill Date: Tue, 11 Jan 2022 13:10:55 +0800 Subject: [PATCH 18/19] fix: missing logo of token --- .../pages/Wallets/components/FungibleTokenTableRow/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTableRow/index.tsx b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTableRow/index.tsx index 6f4b8406a407..10bff9face7c 100644 --- a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTableRow/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTableRow/index.tsx @@ -90,7 +90,7 @@ export const FungibleTokenTableRow = memo(({ asset, onSend, address={asset.token.address} name={asset.token.name} chainId={asset.token.chainId} - logoURI={asset.token.logoURI} + logoURI={asset.logoURI || asset.token.logoURI} AvatarProps={{ sx: { width: 36, height: 36 } }} /> From aa54373135ad9aac96a3fe36f28fc39a48ced797 Mon Sep 17 00:00:00 2001 From: unclebill Date: Thu, 13 Jan 2022 15:02:22 +0800 Subject: [PATCH 19/19] fix: color --- packages/plugins/Solana/src/constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugins/Solana/src/constants.ts b/packages/plugins/Solana/src/constants.ts index fdb242eafa0c..e91744765cc5 100644 --- a/packages/plugins/Solana/src/constants.ts +++ b/packages/plugins/Solana/src/constants.ts @@ -14,7 +14,7 @@ export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ type: NetworkType.Solana, name: 'Solana', icon: new URL('./assets/solana.png', import.meta.url), - iconColor: 'rgb(54 173 104)', + iconColor: '#5d6fc0', isMainnet: true, }, { @@ -24,7 +24,7 @@ export const PLUGIN_NETWORKS: Web3Plugin.NetworkDescriptor[] = [ type: NetworkType.Solana, name: 'Solana Testnet', icon: new URL('./assets/solana.png', import.meta.url), - iconColor: 'rgb(54 173 104)', + iconColor: '#5d6fc0', isMainnet: false, }, ]