From 8aeaa09661932fb80ba9dc2959528a9b770025a5 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 16 Jun 2021 15:38:09 +0300 Subject: [PATCH 1/3] Use leder info from defined genesisHashes --- packages/extension-chains/package.json | 3 +- packages/extension-ui/src/hooks/useLedger.ts | 39 ++++++++++--------- packages/extension-ui/src/util/legerChains.ts | 6 --- yarn.lock | 1 - 4 files changed, 22 insertions(+), 27 deletions(-) delete mode 100644 packages/extension-ui/src/util/legerChains.ts diff --git a/packages/extension-chains/package.json b/packages/extension-chains/package.json index d1124ce0026..a3caa8640a6 100644 --- a/packages/extension-chains/package.json +++ b/packages/extension-chains/package.json @@ -8,8 +8,7 @@ "main": "index.js", "sideEffects": false, "dependencies": { - "@babel/runtime": "^7.14.5", - "@polkadot/networks": "^6.8.1" + "@babel/runtime": "^7.14.5" }, "peerDependencies": { "@polkadot/api": "*" diff --git a/packages/extension-ui/src/hooks/useLedger.ts b/packages/extension-ui/src/hooks/useLedger.ts index f0a44bf54e6..e922a485384 100644 --- a/packages/extension-ui/src/hooks/useLedger.ts +++ b/packages/extension-ui/src/hooks/useLedger.ts @@ -4,11 +4,10 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { Ledger } from '@polkadot/hw-ledger'; -import { Network } from '@polkadot/networks/types'; +import { knownGenesis, knownLedger } from '@polkadot/networks/defaults'; import uiSettings from '@polkadot/ui-settings'; import { assert } from '@polkadot/util'; -import ledgerChains from '../util/legerChains'; import useTranslation from './useTranslation'; interface StateBase { @@ -28,35 +27,39 @@ interface State extends StateBase { warning: string | null; } -function getNetwork (genesis: string): Network | undefined { - return ledgerChains.find(({ genesisHash }) => genesisHash[0] === genesis); +function getState (): StateBase { + const isLedgerCapable = !!(window as unknown as { USB?: unknown }).USB; + + return { + isLedgerCapable, + isLedgerEnabled: isLedgerCapable && uiSettings.ledgerConn !== 'none' + }; +} + +function getNetwork (genesisHash: string): string | null { + const network = Object.keys(knownGenesis).find((n) => knownGenesis[n].includes(genesisHash)); + + return network && knownLedger[network] + ? network + : null; } -function retrieveLedger (genesis: string): Ledger { +function retrieveLedger (genesisHash: string): Ledger { let ledger: Ledger | null = null; const { isLedgerCapable } = getState(); assert(isLedgerCapable, 'Incompatible browser, only Chrome is supported'); - const def = getNetwork(genesis); + const network = getNetwork(genesisHash); - assert(def, `Unable to find supported chain for ${genesis}`); + assert(network, `Unable to find Ledger config for genesisHash ${genesisHash}`); - ledger = new Ledger('webusb', def.network); + ledger = new Ledger('webusb', network); return ledger; } -function getState (): StateBase { - const isLedgerCapable = !!(window as unknown as { USB?: unknown }).USB; - - return { - isLedgerCapable, - isLedgerEnabled: isLedgerCapable && uiSettings.ledgerConn !== 'none' - }; -} - export function useLedger (genesis?: string | null, accountIndex = 0, addressOffset = 0): State { const [isLoading, setIsLoading] = useState(false); const [isLocked, setIsLocked] = useState(false); @@ -100,7 +103,7 @@ export function useLedger (genesis?: string | null, accountIndex = 0, addressOff setAddress(res.address); }).catch((e: Error) => { setIsLoading(false); - const { network } = getNetwork(genesis) || { network: 'unknown network' }; + const network = getNetwork(genesis) || 'unknown network'; const warningMessage = e.message.includes('Code: 26628') ? t('Is your ledger locked?') diff --git a/packages/extension-ui/src/util/legerChains.ts b/packages/extension-ui/src/util/legerChains.ts deleted file mode 100644 index d15dd878e81..00000000000 --- a/packages/extension-ui/src/util/legerChains.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2019-2021 @polkadot/extension-ui authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import networks from '@polkadot/networks'; - -export default networks.filter((network) => network.hasLedgerSupport); diff --git a/yarn.lock b/yarn.lock index 195688e5614..cf0927a4087 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2166,7 +2166,6 @@ __metadata: resolution: "@polkadot/extension-chains@workspace:packages/extension-chains" dependencies: "@babel/runtime": ^7.14.5 - "@polkadot/networks": ^6.8.1 peerDependencies: "@polkadot/api": "*" languageName: unknown From 4395192e8dfe7428441ef0af0301e7b42a28d50b Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 16 Jun 2021 15:40:52 +0300 Subject: [PATCH 2/3] Adjust lookup --- packages/extension-ui/src/hooks/useLedger.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/extension-ui/src/hooks/useLedger.ts b/packages/extension-ui/src/hooks/useLedger.ts index e922a485384..98bb1953c00 100644 --- a/packages/extension-ui/src/hooks/useLedger.ts +++ b/packages/extension-ui/src/hooks/useLedger.ts @@ -36,12 +36,8 @@ function getState (): StateBase { }; } -function getNetwork (genesisHash: string): string | null { - const network = Object.keys(knownGenesis).find((n) => knownGenesis[n].includes(genesisHash)); - - return network && knownLedger[network] - ? network - : null; +function getNetwork (genesisHash: string): string | undefined { + return Object.keys(knownGenesis).find((n) => knownGenesis[n].includes(genesisHash)); } function retrieveLedger (genesisHash: string): Ledger { @@ -53,7 +49,7 @@ function retrieveLedger (genesisHash: string): Ledger { const network = getNetwork(genesisHash); - assert(network, `Unable to find Ledger config for genesisHash ${genesisHash}`); + assert(network && knownLedger[network], `Unable to find Ledger config for genesisHash ${genesisHash}`); ledger = new Ledger('webusb', network); From 3b708ec70574911377146b0da103c8b537aef8a0 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 16 Jun 2021 15:47:06 +0300 Subject: [PATCH 3/3] Fix imports --- .../extension-ui/src/Popup/ImportLedger.tsx | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/extension-ui/src/Popup/ImportLedger.tsx b/packages/extension-ui/src/Popup/ImportLedger.tsx index d50cc909e39..bd1221fbeef 100644 --- a/packages/extension-ui/src/Popup/ImportLedger.tsx +++ b/packages/extension-ui/src/Popup/ImportLedger.tsx @@ -6,6 +6,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import React, { useCallback, useContext, useEffect, useRef, useState } from 'react'; import styled from 'styled-components'; +import networks from '@polkadot/networks'; import settings from '@polkadot/ui-settings'; import { ActionContext, Address, Button, ButtonArea, Dropdown, VerticalSpace, Warning } from '../components'; @@ -14,7 +15,6 @@ import useTranslation from '../hooks/useTranslation'; import { createAccountHardware } from '../messaging'; import { Header, Name } from '../partials'; import { ThemeProps } from '../types'; -import ledgerChains from '../util/legerChains'; interface AccOption { text: string; @@ -59,16 +59,20 @@ function ImportLedger ({ className }: Props): React.ReactElement { value }))); - const networkOps = useRef( - [{ + const networkOps = useRef([ + { text: t('Select network'), value: '' }, - ...ledgerChains.map(({ displayName, genesisHash }): NetworkOption => ({ - text: displayName, - value: genesisHash[0] - }))] - ); + ...( + networks + .filter((n) => n.hasLedgerSupport) + .map(({ displayName, genesisHash }): NetworkOption => ({ + text: displayName, + value: genesisHash[0] + })) + ) + ]); const _onSave = useCallback( () => {