diff --git a/packages/apps/public/locales/en/app-accounts.json b/packages/apps/public/locales/en/app-accounts.json index 9aabff7216e5..ce7860332327 100644 --- a/packages/apps/public/locales/en/app-accounts.json +++ b/packages/apps/public/locales/en/app-accounts.json @@ -32,6 +32,7 @@ "Change this account's password": "Change this account's password", "Claim tokens...": "Claim tokens...", "Clear expired democracy locks": "Clear expired democracy locks", + "Connect Metamask": "Connect Metamask", "Council": "Council", "Create": "Create", "Create a backup file for this account": "Create a backup file for this account", @@ -287,4 +288,4 @@ "website": "website", "your current password": "your current password", "your new password": "your new password" -} \ No newline at end of file +} diff --git a/packages/apps/public/locales/en/translation.json b/packages/apps/public/locales/en/translation.json index 48c77433dfaf..c600c3991a7b 100644 --- a/packages/apps/public/locales/en/translation.json +++ b/packages/apps/public/locales/en/translation.json @@ -110,6 +110,7 @@ "Confirm claim": "", "Confirm code removal": "", "Confirm contract removal": "", + "Connect Metamask": "", "Constants": "", "Continue": "", "Conviction locks do overlap and is additive, meaning that funds locked during a previous vote can be locked again.": "", diff --git a/packages/page-accounts/package.json b/packages/page-accounts/package.json index dcaaf17dd0e9..5389eded940c 100644 --- a/packages/page-accounts/package.json +++ b/packages/page-accounts/package.json @@ -12,6 +12,7 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.10.5", + "@nodefactory/metamask-polkadot-adapter": "^0.4.0", "@polkadot/react-components": "0.51.0-beta.3", "@polkadot/vanitygen": "^0.17.1", "detect-browser": "^5.1.1", diff --git a/packages/page-accounts/src/Accounts/index.tsx b/packages/page-accounts/src/Accounts/index.tsx index e5fca68d9bc2..670068fca45f 100644 --- a/packages/page-accounts/src/Accounts/index.tsx +++ b/packages/page-accounts/src/Accounts/index.tsx @@ -5,7 +5,7 @@ import { ActionStatus } from '@polkadot/react-components/Status/types'; import { Voting } from '@polkadot/types/interfaces'; import { Delegation, SortedAccount } from '../types'; - +import { BN_ZERO } from '@polkadot/util'; import BN from 'bn.js'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; @@ -14,8 +14,6 @@ import { getLedger, isLedger } from '@polkadot/react-api'; import { useApi, useAccounts, useCall, useFavorites, useIpfs, useToggle } from '@polkadot/react-hooks'; import { FormatBalance } from '@polkadot/react-query'; import { Button, Input, Table } from '@polkadot/react-components'; -import { BN_ZERO } from '@polkadot/util'; - import { useTranslation } from '../translate'; import CreateModal from './modals/Create'; import ImportModal from './modals/Import'; @@ -26,6 +24,10 @@ import Account from './Account'; import BannerClaims from './BannerClaims'; import BannerExtension from './BannerExtension'; import { sortAccounts } from '../util'; +import { web3Enable, web3FromSource } from '@polkadot/extension-dapp'; +import { injectMetamaskPolkadotSnapProvider } from '@nodefactory/metamask-polkadot-adapter'; +import { Keyring } from '@polkadot/keyring'; +import settings from '@polkadot/ui-settings'; interface Balances { accounts: Record; @@ -57,6 +59,23 @@ async function queryLedger (): Promise { } } +async function queryMetamask (): Promise { + await web3Enable('polkadot-js/apps'); + const metamaskExtension = await web3FromSource('metamask-polkadot-snap'); + + if (metamaskExtension) { + (await metamaskExtension.accounts.get()).forEach((account) => { + const accountKeyring = new Keyring(); + const keyringPair = accountKeyring.addFromAddress(account.address, { + isInjected: true, source: 'metamask-polkadot-snap', tags: ['metamask'] + }); + + keyring.saveAccount(keyringPair); + } + ); + } +} + function Overview ({ className = '', onStatusChange }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); @@ -134,15 +153,15 @@ function Overview ({ className = '', onStatusChange }: Props): React.ReactElemen const footer = useMemo(() => ( - - - - + + + + - {balanceTotal && } + {balanceTotal && } - - + + ), [balanceTotal]); @@ -158,10 +177,15 @@ function Overview ({ className = '', onStatusChange }: Props): React.ReactElemen ), [filterOn, t]); + const connectMetamaskAccount = async (): Promise => { + injectMetamaskPolkadotSnapProvider(settings.apiUrl.includes('kusama') ? 'kusama' : 'westend'); + await queryMetamask(); + }; + return (
- - + + {isCreateOpen && ( ('Proxied')} onClick={toggleProxy} /> +