Browse Source

Merge branch 'develop' of github.com:LedgerHQ/ledger-live-desktop into LL-1063

develop
Juan Cortes Ross 6 years ago
parent
commit
df9cac9ef6
No known key found for this signature in database GPG Key ID: 34A99C03E9455EB8
  1. 2
      .circleci/config.yml
  2. 3
      .flowconfig
  3. 13
      package.json
  4. 3
      src/analytics/segment.js
  5. 2
      src/commands/index.js
  6. 7
      src/commands/killInternalProcess.js
  7. 14
      src/commands/libcoreReset.js
  8. 2
      src/components/DashboardPage/index.js
  9. 5
      src/components/EnsureDeviceApp.js
  10. 126
      src/components/ExchangePage/index.js
  11. 16
      src/components/ExchangePage/logos/bigmama.js
  12. 67
      src/components/ExchangePage/logos/btcdirect.js
  13. 26
      src/components/ExchangePage/logos/changelly.js
  14. 116
      src/components/ExchangePage/logos/coinberry.js
  15. 58
      src/components/ExchangePage/logos/coinhouse.js
  16. 46
      src/components/ExchangePage/logos/paybis.js
  17. 27
      src/components/ExchangePage/logos/simplex.js
  18. 12
      src/components/GenuineCheck.js
  19. 2
      src/components/MainSideBar/index.js
  20. 7
      src/components/ManagerPage/DeviceInfos.js
  21. 25
      src/components/ManagerPage/FirmwareUpdate.js
  22. 2
      src/components/ManagerPage/ManagerGenuineCheck.js
  23. 6
      src/components/Onboarding/index.js
  24. 6
      src/components/Onboarding/steps/Analytics.js
  25. 7
      src/components/Onboarding/steps/Finish.js
  26. 23
      src/components/Onboarding/steps/GenuineCheck/GenuineCheckErrorPage.js
  27. 7
      src/components/Onboarding/steps/GenuineCheck/GenuineCheckUnavailable.js
  28. 7
      src/components/Onboarding/steps/GenuineCheck/index.js
  29. 41
      src/components/Onboarding/steps/SelectDevice.js
  30. 82
      src/components/Onboarding/steps/SelectPIN/SelectPINRestoreNanoX.js
  31. 81
      src/components/Onboarding/steps/SelectPIN/SelectPINnanoX.js
  32. 24
      src/components/Onboarding/steps/SelectPIN/index.js
  33. 4
      src/components/Onboarding/steps/SetPassword.js
  34. 2
      src/components/Onboarding/steps/WriteSeed/WriteSeedRestore.js
  35. 8
      src/components/Onboarding/steps/WriteSeed/index.js
  36. 17
      src/components/PartnersPage/PartnerCard.js
  37. 33
      src/components/PartnersPage/index.js
  38. 5
      src/components/SettingsPage/CleanButton.js
  39. 5
      src/components/SettingsPage/ResetButton.js
  40. 3
      src/components/base/Modal/ConfirmModal.js
  41. 4
      src/components/layout/Default.js
  42. 2
      src/config/urls.js
  43. 24
      src/helpers/reset.js
  44. 34
      src/icons/device/NanoX.js
  45. 30
      src/icons/device/NanoXBanner.js
  46. 1
      src/icons/device/index.js
  47. 12
      src/reducers/onboarding.js
  48. 4
      src/reducers/settings.js
  49. 11
      src/renderer/events.js
  50. 5
      src/types/common.js
  51. 53
      static/i18n/en/app.json
  52. 0
      static/images/ledger-nano-s-onb.svg
  53. 8
      static/images/ledger-nano-x-onb.svg
  54. BIN
      static/images/logos/connectDevice.png
  55. BIN
      static/images/logos/exchanges/change-now.png
  56. 6
      static/images/logos/exchanges/genesis.svg
  57. BIN
      static/images/logos/exchanges/kyber-swap.png
  58. 14
      static/images/logos/exchanges/luno.svg
  59. 93
      static/images/logos/exchanges/shapeshift.svg
  60. BIN
      static/images/logos/exchanges/thor-swap.png
  61. 33
      static/images/nano-x-error-onb.svg
  62. 24
      static/images/select-pin-nano-x-onb.svg
  63. 90
      yarn.lock

2
.circleci/config.yml

@ -10,7 +10,7 @@ jobs:
<<: *defaults
steps:
- run: sudo apt-get update
- run: sudo apt-get install -y libudev-dev
- run: sudo apt-get install -y libudev-dev libusb-1.0-0-dev
- run:
name: Install latest yarn
command: |

3
.flowconfig

@ -6,6 +6,8 @@
[untyped]
.*/node_modules/react-select
<PROJECT_ROOT>/node_modules/qrloop/lib/Buffer.js*
<PROJECT_ROOT>/node_modules/@ledgerhq/live-common/lib/partners/icons/react/*
<PROJECT_ROOT>/node_modules/@ledgerhq/live-common/lib/partners/react.jsarn
[include]
@ -18,5 +20,6 @@ flow-defs
[options]
module.system.node.resolve_dirname=node_modules
module.system.node.resolve_dirname=./src
munge_underscores=true
[strict]

13
package.json

@ -35,13 +35,14 @@
}
},
"dependencies": {
"@ledgerhq/devices": "^4.39.0",
"@ledgerhq/errors": "^4.39.0",
"@ledgerhq/hw-app-btc": "^4.35.0",
"@ledgerhq/hw-app-eth": "^4.35.0",
"@ledgerhq/hw-app-xrp": "^4.35.0",
"@ledgerhq/hw-transport": "^4.35.0",
"@ledgerhq/hw-transport-node-hid": "^4.35.0",
"@ledgerhq/ledger-core": "2.0.0-rc.16",
"@ledgerhq/hw-app-btc": "^4.39.0",
"@ledgerhq/hw-app-eth": "^4.39.0",
"@ledgerhq/hw-app-xrp": "^4.39.0",
"@ledgerhq/hw-transport": "^4.39.0",
"@ledgerhq/hw-transport-node-hid": "^4.40.0",
"@ledgerhq/ledger-core": "2.0.0-rc.21",
"@ledgerhq/live-common": "4.20.0",
"animated": "^0.2.2",
"async": "^2.6.1",

3
src/analytics/segment.js

@ -3,6 +3,7 @@
import uuid from 'uuid/v4'
import logger from 'logger'
import invariant from 'invariant'
import { getDeviceModel } from '@ledgerhq/devices'
import { getSystemLocale } from 'helpers/systemLocale'
import { langAndRegionSelector, shareAnalyticsSelector } from 'reducers/settings'
import { getCurrentDevice } from 'reducers/devices'
@ -34,7 +35,7 @@ const extraProperties = store => {
const systemLocale = getSystemLocale()
const device = getCurrentDevice(state)
const deviceInfo = device && {
productId: device.productId,
productId: getDeviceModel(device.modelId).usbProductId,
}
return {
appVersion: __APP_VERSION__,

2
src/commands/index.js

@ -16,6 +16,7 @@ import installApp from 'commands/installApp'
import killInternalProcess from 'commands/killInternalProcess'
import libcoreGetFees from 'commands/libcoreGetFees'
import libcoreGetVersion from 'commands/libcoreGetVersion'
import libcoreReset from 'commands/libcoreReset'
import libcoreScanAccounts from 'commands/libcoreScanAccounts'
import libcoreScanFromXPUB from 'commands/libcoreScanFromXPUB'
import libcoreSignAndBroadcast from 'commands/libcoreSignAndBroadcast'
@ -44,6 +45,7 @@ const all: Array<Command<any, any>> = [
killInternalProcess,
libcoreGetFees,
libcoreGetVersion,
libcoreReset,
libcoreScanAccounts,
libcoreScanFromXPUB,
libcoreSignAndBroadcast,

7
src/commands/killInternalProcess.js

@ -1,10 +1,10 @@
// @flow
import { createCommand, Command } from 'helpers/ipc'
import { of } from 'rxjs'
import { never } from 'rxjs'
type Input = void
type Result = boolean
type Result = void
const cmd: Command<Input, Result> = createCommand('killInternalProcess', () => {
setTimeout(() => {
@ -12,7 +12,8 @@ const cmd: Command<Input, Result> = createCommand('killInternalProcess', () => {
// special exit code for better identification
process.exit(42)
})
return of(true)
// The command shouldn't finish now because process.exit will make it end!
return never()
})
export default cmd

14
src/commands/libcoreReset.js

@ -0,0 +1,14 @@
// @flow
import { createCommand, Command } from 'helpers/ipc'
import { from } from 'rxjs'
import withLibcore from 'helpers/withLibcore'
type Input = void
type Result = boolean
const cmd: Command<Input, Result> = createCommand('libcoreReset', () =>
from(withLibcore(core => core.getPoolInstance().freshResetAll())),
)
export default cmd

2
src/components/DashboardPage/index.js

@ -3,7 +3,7 @@
import React, { PureComponent, Fragment } from 'react'
import uniq from 'lodash/uniq'
import { compose } from 'redux'
import IconNanoX from 'icons/device/NanoX'
import IconNanoX from 'icons/device/NanoXBanner'
import { translate } from 'react-i18next'
import { connect } from 'react-redux'
import { push } from 'react-router-redux'

5
src/components/EnsureDeviceApp.js

@ -98,8 +98,11 @@ class EnsureDeviceApp extends Component<{
id: 'device',
title: (
<Trans i18nKey="deviceConnect.step1" parent="div">
{'Connect and unlock your '}
{'Connect your'}
<Bold>{'Ledger device'}</Bold>
{'to your computer and enter your'}
<Bold>{'PIN code'}</Bold>
{' on your device'}
</Trans>
),
icon: usbIcon,

126
src/components/ExchangePage/index.js

@ -1,126 +0,0 @@
// @flow
import React, { PureComponent } from 'react'
import { translate } from 'react-i18next'
import shuffle from 'lodash/shuffle'
import type { T } from 'types/common'
import { urls } from 'config/urls'
import { i } from 'helpers/staticPath'
import TrackPage from 'analytics/TrackPage'
import Box from 'components/base/Box'
import ExchangeCard from './ExchangeCard'
import CoinhouseLogo from './logos/coinhouse'
import ChangellyLogo from './logos/changelly'
import CoinmamaLogo from './logos/bigmama'
import SimplexLogo from './logos/simplex'
import PaybisLogo from './logos/paybis'
import Coinberry from './logos/coinberry'
import BtcDirect from './logos/btcdirect'
type Props = {
t: T,
}
const cards = shuffle([
{
key: 'coinhouse',
id: 'coinhouse',
url: urls.coinhouse,
logo: <CoinhouseLogo width={150} />,
},
{
key: 'changelly',
id: 'changelly',
url: urls.changelly,
logo: <ChangellyLogo width={150} />,
},
{
key: 'coinmama',
id: 'coinmama',
url: urls.coinmama,
logo: <CoinmamaLogo width={150} />,
},
{
key: 'simplex',
id: 'simplex',
url: urls.simplex,
logo: <SimplexLogo width={160} height={57} />,
},
{
key: 'paybis',
id: 'paybis',
url: urls.paybis,
logo: <PaybisLogo width={150} height={57} />,
},
{
key: 'luno',
id: 'luno',
url: urls.luno,
logo: <img src={i('logos/exchanges/luno.svg')} alt="Luno" width={150} />,
},
{
key: 'shapeshift',
id: 'shapeshift',
url: urls.shapeshift,
logo: <img src={i('logos/exchanges/shapeshift.svg')} alt="Shapeshift" width={150} />,
},
{
key: 'genesis',
id: 'genesis',
url: urls.genesis,
logo: <img src={i('logos/exchanges/genesis.svg')} alt="Genesis" width={150} />,
},
{
key: 'kyberSwap',
id: 'kyberSwap',
url: urls.kyberSwap,
logo: <img src={i('logos/exchanges/kyber-swap.png')} alt="KyberSwap" width={150} />,
},
{
key: 'changeNow',
id: 'changeNow',
url: urls.changeNow,
logo: <img src={i('logos/exchanges/change-now.png')} alt="ChangeNow" width={150} />,
},
{
key: 'thorSwap',
id: 'thorSwap',
url: urls.thorSwap,
logo: <img src={i('logos/exchanges/thor-swap.png')} alt="ThorSwap" width={150} />,
},
{
key: 'coinberry',
id: 'coinberry',
url: urls.coinberry,
logo: <Coinberry width={150} />,
},
{
key: 'btcDirect',
id: 'btcDirect',
url: urls.btcDirect,
logo: <BtcDirect width={150} />,
},
])
class ExchangePage extends PureComponent<Props> {
render() {
const { t } = this.props
return (
<Box pb={6} selectable>
<TrackPage category="Exchange" />
<Box ff="Museo Sans|Regular" fontSize={7} color="dark">
{t('exchange.title')}
</Box>
<Box ff="Museo Sans|Light" fontSize={5} mb={5}>
{t('exchange.desc')}
</Box>
<Box flow={3}>{cards.map(card => <ExchangeCard key={card.key} t={t} card={card} />)}</Box>
</Box>
)
}
}
export default translate()(ExchangePage)

16
src/components/ExchangePage/logos/bigmama.js

File diff suppressed because one or more lines are too long

67
src/components/ExchangePage/logos/btcdirect.js

@ -1,67 +0,0 @@
// @flow
import React from 'react'
const styles = {
fill: '#0086fb',
}
const inner = (
<>
<path
style={styles}
d="M528.34,146.17,561.36,24H465.6l-19.81,76c-17.61-6.61-36.32-11-55-14.31L407.27,24H311.51L296.1,83.44C213.56,94.44,137.61,137.37,87,204.51-18.68,342.09,7.73,540.21,145.32,645.87L112.3,768H207l19.81-75.94c17.61,6.6,36.33,11,55,14.31L265.29,768h94.65l16.51-59.43C459,697.6,535,654.68,585.58,587.54,692.34,448.85,665.92,251.84,528.34,146.17ZM336.83,469.77a74.85,74.85,0,1,1,74.84-74.85C411.67,436.75,378.65,469.77,336.83,469.77Z"
/>
<path
style={styles}
d="M590,713c0-9.91-6.61-15.41-17.61-15.41H553.66v42.93h11V728.42h8.81l6.6,12.11h12.11l-9.91-13.21C587.78,725.12,591.08,719.61,590,713Zm-9.91,0c0,4.4-2.2,7.7-6.6,7.7h-8.81v-14.3h7.71c3.3-1.1,6.6,2.2,7.7,5.5Z"
/>
<path
style={styles}
d="M571.27,675.59a46.23,46.23,0,1,0,46.22,46.23C616.39,696.5,596.58,675.59,571.27,675.59Zm0,81.45a35.23,35.23,0,1,1,35.22-35.22A34.77,34.77,0,0,1,571.27,757Z"
/>
<path
style={styles}
d="M1072.06,392.72c35.22-7.7,58.34-34.12,58.34-75.94,0-50.63-37.42-83.65-95.76-83.65H888.26V558.92H1039c59.44,0,96.86-35.22,96.86-90.25C1135.9,425.74,1109.49,397.12,1072.06,392.72Zm-95.75-96.86h35.22A32,32,0,0,1,1041.25,330v4.41c-1.1,17.61-16.51,30.81-35.22,29.71H976.31ZM1044.55,461c-1.1,17.61-17.61,31.92-36.32,29.72H977.41V420.24h36.32a33.24,33.24,0,0,1,30.82,35.22Z"
/>
<polygon
style={styles}
points="1152.41 315.68 1230.56 316.77 1230.56 558.92 1320.81 558.92 1320.81 316.77 1397.86 316.77 1397.86 233.13 1152.41 233.13 1152.41 315.68"
/>
<path
style={styles}
d="M1575.47,310c36.7,0,59.37,19.61,65.85,49h92.85c-6.48-85-66.94-134-158.7-134-97.16,0-164.1,70.8-164.1,171,0,99.12,65.86,171,164.1,171,91.76,0,151.14-49,158.7-134h-92.85c-5.4,29.41-29.15,49-65.85,49-45.34,0-72.33-32.67-72.33-86.05S1530.13,310,1575.47,310Z"
/>
<path
style={styles}
d="M1871.75,233.13h-90.26V558.92h90.26c100.16,0,154.09-79.25,154.09-162.9S1971.91,233.13,1871.75,233.13Zm-2.2,296.07h-59.44V261.74h59.44c83.65,0,126.57,66,126.57,134.28C1996.12,463.16,1953.2,529.2,1869.55,529.2Z"
/>
<path
style={styles}
d="M2087.85,248.54c-14.31,1.1-25.32,13.2-24.22,27.51v3.3c1.1,14.31,13.21,25.32,27.52,24.22s25.31-13.21,24.21-27.52v-3.3C2114.26,258.44,2102.16,247.43,2087.85,248.54Z"
/>
<rect style={styles} x="2075.19" y="346.49" width="28.62" height="212.43" />
<path
style={styles}
d="M2199.74,402.63V346.49h-27.51V557.82h27.51V466.46c0-46.22,17.61-95.75,62.74-95.75,6.6,0,12.11,0,18.71,1.1V344.29a96.38,96.38,0,0,0-17.61-2.2C2235,342.09,2208.55,360.8,2199.74,402.63Z"
/>
<path
style={styles}
d="M2403.36,341c-57.23,0-95.75,42.93-95.75,111.17s37.42,112.26,96.85,112.26c44,0,79.25-27.51,86.95-66H2463.9c-8.81,24.22-33,40.73-59.44,38.53-40.72,0-68.24-29.72-68.24-77h158.5c0-6.6,1.1-13.21,0-19.81C2494.72,382.81,2458.39,341,2403.36,341Zm-67.14,94.66c2.2-41.83,27.52-70.45,67.14-70.45s63.84,28.62,64.94,70.45Z"
/>
<path
style={styles}
d="M2627.89,369.61c35.23,0,57.24,16.51,62.74,49.53h27.52c-5.51-47.33-39.63-77.05-90.26-77.05-60.53,0-97.95,44-97.95,110.07s37.42,111.16,97.95,112.26c51.74,0,85.86-29.71,90.26-75.94h-27.52c-5.5,31.92-28.61,48.43-62.74,48.43-42.92,0-69.34-33-69.34-83.65S2585,369.61,2627.89,369.61Z"
/>
<path
style={styles}
d="M2843.62,534.71c-18.71,0-34.12-6.61-34.12-50.64V372.91h53.93V346.49H2809.5V276.05H2782v70.44h-37.43v26.42H2782V489.58c0,66,31.91,71.54,56.13,71.54,11,1.1,22-1.1,31.92-3.3V530.3C2861.23,532.5,2852.43,533.6,2843.62,534.71Z"
/>
</>
)
export default ({ width }: { width: number }) => (
<svg width={width} viewBox="0 0 2892.16 792.05">
{inner}
</svg>
)

26
src/components/ExchangePage/logos/changelly.js

@ -1,26 +0,0 @@
// @flow
import React from 'react'
const inner = (
<g fill="none" fillRule="evenodd">
<path
fill="#2D2E2C"
d="M42.48 17.066c0-3.537 2.813-6.542 6.538-6.542 2.417 0 3.922.994 5.106 2.23l-1.208 1.26c-1.012-1.043-2.196-1.842-3.923-1.842-2.59 0-4.564 2.156-4.564 4.894 0 2.714 2.023 4.87 4.687 4.87 1.629 0 2.838-.823 3.849-1.89l1.258 1.14c-1.283 1.405-2.812 2.422-5.205 2.422-3.725 0-6.537-2.98-6.537-6.542M56.355 6.549l1.9-.92v7.342c.838-1.356 2.17-2.447 4.366-2.447 3.083 0 4.884 2.036 4.884 5.016v7.778h-1.9V16c0-2.326-1.282-3.78-3.527-3.78-2.195 0-3.824 1.575-3.824 3.926v7.172h-1.899V6.548M79.105 18.714v-1.163a13.322 13.322 0 0 0-3.725-.533c-2.368 0-3.725 1.018-3.725 2.568 0 1.575 1.48 2.496 3.207 2.496 2.343 0 4.243-1.381 4.243-3.368zm-9.374.92c0-2.689 2.22-4.094 5.452-4.094 1.628 0 2.762.218 3.897.533v-.388c0-2.23-1.381-3.392-3.774-3.392-1.505 0-2.689.363-3.873.896l-.567-1.526c1.406-.63 2.763-1.066 4.637-1.066 1.801 0 3.207.484 4.12 1.38.888.873 1.332 2.085 1.332 3.684v7.657H79.08v-1.866c-.888 1.114-2.343 2.132-4.588 2.132-2.393 0-4.761-1.332-4.761-3.95zM84.165 10.79h1.9v2.181c.839-1.356 2.17-2.447 4.366-2.447 3.084 0 4.885 2.036 4.885 5.016v7.778h-1.9V16c0-2.326-1.283-3.78-3.527-3.78-2.196 0-3.824 1.575-3.824 3.926v7.172h-1.9V10.79M108.748 16.412c0-2.568-2.27-4.24-4.687-4.24-2.417 0-4.416 1.648-4.416 4.264 0 2.52 2.048 4.265 4.416 4.265 2.418 0 4.687-1.72 4.687-4.29zm-10.46 9.086l.864-1.453c1.455 1.042 3.084 1.599 4.909 1.599 2.812 0 4.638-1.527 4.638-4.459v-1.478c-1.11 1.454-2.665 2.642-5.008 2.642-3.059 0-5.994-2.254-5.994-5.913 0-3.658 2.96-5.912 5.994-5.912 2.393 0 3.947 1.163 4.983 2.52v-2.253h1.9v10.346c0 1.939-.593 3.416-1.629 4.434-1.134 1.115-2.836 1.672-4.86 1.672-2.121 0-4.095-.582-5.796-1.745zM123.323 16.315c-.222-2.278-1.554-4.216-4.07-4.216-2.196 0-3.873 1.793-4.145 4.216h8.215zm-3.725 5.67c1.751 0 2.985-.703 4.02-1.769l1.185 1.042c-1.283 1.405-2.837 2.35-5.254 2.35-3.504 0-6.365-2.64-6.365-6.542 0-3.634 2.59-6.542 6.118-6.542 3.774 0 5.945 2.956 5.945 6.64 0 .169 0 .362-.025.653h-10.114c.272 2.641 2.245 4.168 4.49 4.168zM127.897 7.356l1.9-.919v16.88h-1.9V7.358M133.27 6.549l1.9-.92v17.689h-1.9V6.548M137.688 26.637l.642-1.478c.616.315 1.184.46 1.997.46 1.135 0 1.85-.58 2.616-2.35l-5.798-12.478h2.097l4.638 10.443 4.095-10.443h2.023l-5.353 12.938c-1.086 2.593-2.319 3.538-4.243 3.538-1.061 0-1.85-.218-2.714-.63"
/>
<path
fill="#46B06E"
d="M29.688 18.399c-5.523 4.77-7.827 5.228-10.113 4.182l2.495-3.095c.368-.453.636-.991.773-1.555l1.007-4.128-4.204.988a4.103 4.103 0 0 0-1.58.758L14.912 18c-1.064-2.245-.599-4.508 4.259-9.933 4.589-5.125 14.3-6.302 17.178-6.543-.245 2.827-1.443 12.366-6.661 16.874zm-3.677 7.394a.893.893 0 0 1-.38.563c-.581.393-1.478.938-2.273 1.41l.04-.146c.386-1.491.382-2.64-.01-3.424 1.046-.312 2.177-.886 3.458-1.745-.31 1.155-.669 2.533-.835 3.342zm-8.736-2.676c-.329.408-.841.636-1.37.61l-.02-.002-1.256.002 4.354-5.144-5.238 4.276.003-1.213-.002-.04a1.603 1.603 0 0 1 .62-1.346l4.612-3.585a2.619 2.619 0 0 1 1.01-.484l1.88-.443-.45 1.848a2.54 2.54 0 0 1-.495.994l-3.648 4.527zm-7.493-8.87l-.15.038a52.609 52.609 0 0 1 1.437-2.233.912.912 0 0 1 .573-.372c.823-.163 2.226-.515 3.402-.82-.875 1.258-1.458 2.369-1.776 3.397-.797-.386-1.967-.39-3.486-.01zM37.11.03C36.57.053 23.883.627 18.07 7.118a53.482 53.482 0 0 0-1.609 1.876c-.842.227-3.8 1.016-5.109 1.275a2.37 2.37 0 0 0-1.49.968c-.89 1.273-2.445 3.888-2.51 3.999l-1.127 1.898 2.052-.876c1.344-.574 3.6-1.164 4.405-.678.132.08.27.211.293.583h.003c.016.935.277 1.832.758 2.752l-.279.216a3.035 3.035 0 0 0-1.175 2.53l-.007 3.51 3.574-.007a3.124 3.124 0 0 0 2.575-1.154l.22-.274c.937.473 1.85.727 2.803.742v.007c.378.022.512.157.593.287.495.79-.106 3.006-.69 4.327l-.896 2.018 1.936-1.11c.113-.064 2.776-1.59 4.071-2.465.513-.346.863-.866.986-1.464.264-1.285 1.067-4.19 1.298-5.018.603-.475 1.238-1 1.91-1.58 6.608-5.71 7.193-18.173 7.215-18.7l.032-.78-.793.031z"
/>
<path
fill="#46B06E"
d="M26.865 7.512a2.412 2.412 0 0 1 1.695-.688c.613 0 1.227.23 1.694.688a2.327 2.327 0 0 1 0 3.329 2.43 2.43 0 0 1-3.389 0 2.318 2.318 0 0 1-.702-1.665c0-.628.25-1.22.702-1.664zm1.695 5.455c.988 0 1.977-.37 2.73-1.109a3.75 3.75 0 0 0 0-5.364 3.915 3.915 0 0 0-5.46 0 3.735 3.735 0 0 0-1.132 2.682c0 1.014.402 1.966 1.131 2.682a3.885 3.885 0 0 0 2.73 1.11zM17.91 28.672a9.974 9.974 0 0 1-.899.742 13.68 13.68 0 0 1-1.966 1.216c-.685.35-1.395.645-2.12.891a17.22 17.22 0 0 1-2.22.598c-.373.084-.754.138-1.13.205l-.572.073-.285.037-.287.026-.574.054-.576.03c-.384.03-.77.028-1.155.038a32.09 32.09 0 0 1-3.384-.152c.132-.181.261-.365.386-.553.361-.55.685-1.126.97-1.715.562-1.184.97-2.402 1.318-3.618A36.241 36.241 0 0 1 6.6 23.02a32.838 32.838 0 0 1 1.574-3.41c-.422.476-.8.99-1.158 1.514-.361.525-.695 1.067-1.01 1.622a25.011 25.011 0 0 0-1.609 3.466c-.449 1.162-.913 2.305-1.488 3.365-.567 1.064-1.27 2.032-2.071 2.966l-.836.975 1.297.182c1.602.224 3.228.342 4.858.284.407-.02.814-.027 1.221-.07l.61-.057.608-.081c.405-.045.806-.135 1.208-.205.4-.095.801-.17 1.194-.29.395-.103.783-.235 1.171-.363.384-.144.766-.289 1.139-.458a14.047 14.047 0 0 0 2.138-1.177 11.66 11.66 0 0 0 1.863-1.544c.553-.58 1.063-1.208 1.412-1.916a7.616 7.616 0 0 1-.811.848"
/>
</g>
)
export default ({ width }: { width: number }) => (
<svg width={width} viewBox="0 0 150 34">
{inner}
</svg>
)

116
src/components/ExchangePage/logos/coinberry.js

@ -1,116 +0,0 @@
// @flow
import React from 'react'
const styles = {
blue: {
fill: '#334F93',
},
pink: {
fill: '#EC2D6E',
},
}
const inner = (
<>
<path
style={styles.blue}
d="M146.3,101.8c5.2,0,9.4-4,9.4-9.4c0-5.2-4.1-9.5-9.4-9.5c-5.5,0-9.5,4.4-9.5,9.5
C136.8,97.7,140.7,101.8,146.3,101.8"
/>
<path
style={styles.blue}
d="M102.3,164.7c8.4,0,9.4-10.3,9.4-25.7c0-18.7-2-25.8-9.5-25.8c-8.9,0-9.6,12.1-9.6,25.8
C92.6,152.1,92.6,164.7,102.3,164.7 M102.2,109.4c15.9,0,27.3,12.7,27.3,29.6c0,16.1-10.8,29.5-27.3,29.5
c-16.9,0-27.4-13.7-27.4-29.5C74.8,123.4,85.4,109.4,102.2,109.4"
/>
<path
style={styles.blue}
d="M246.2,155c0,3.4,1.6,9.6,8.3,9.6c7.3,0,11.5-6.1,11.5-25.2c0-7.1-0.8-23.3-11.3-23.3c-5.6,0-7.4,4.5-8.5,7.1
V155z M222.6,84.9h23.6v31.4c2-2.2,6.5-6.8,14.7-6.8c14,0,22.8,12.3,22.8,28.1c0,15.4-8.3,30.9-28.3,30.9c-2.8,0-6.8-0.9-11-3.5
c-2.8-1.8-6.3-1.8-9,0.1l-4.7,3.3h-1.4V94.8c0-5.7-2.3-6.1-6.7-7V84.9z"
/>
<path
style={styles.blue}
d="M77.8,137.3H76c-0.2,6.7-2.4,12.8-5.9,16.9c-0.6,0.8-2.6,2.6-3.5,3.4c-2,1.7-4.8,2.8-8.8,2.8
c-9.5,0-16.9-9.8-16.9-26.8c0-5.5,0.9-20.3,10.3-20.3c1.8,0,4.9,1.1,4.9,4.7c0,6.6,0,12.5,6.8,12.5c1,0,8.3,0,8.3-7.7
c0-8.7-10.2-13.2-18.8-13.2c-11.4,0-28.6,7.4-28.6,31.3c0,15,10.4,27.8,25.9,27.8c7.6,0,14.3-3,19.5-8.3
C70.2,159.2,77.8,152.3,77.8,137.3"
/>
<path
style={styles.blue}
d="M370.1,166.7h-32.3v-2.9c3.9-0.8,6.6-1.2,6.6-7.3V121c0-6-2.9-6.7-6.6-7.1v-3h22.9l0.1,4.4c0,1.6,2,2.4,3.2,1.1
c3-3.4,7.3-7,12.8-7c8.3,0,10.1,6.6,10.1,9.5c0,3.1-1.7,8.1-7.7,8.1c-7,0-6.9-7.1-10.8-7.1c-1.8,0-7.1,2.7-7.1,11.5v22.9
c0,7.4,1.5,9.3,8.8,9.6v2.9H370.1z"
/>
<path
style={styles.blue}
d="M218.1,157v-30.4c0-13.3-9.6-17.1-16.2-17.1c-6.6,0-11.9,4.2-14.8,7.2c-1,1-2.6,0.3-2.6-1.1v-4.6h-23.1v2.9
c4.8,0.8,6.5,1.7,6.5,7.1v35.6v0.3v1.8c0,2.8-2.3,5.1-5.1,5.1H160c-2.8,0-5.1-2.3-5.1-5.1v-24.9v-22.9h-23.2v2.9
c4.6,0.9,6.5,1.7,6.5,7.1v35.6c0,5.8-2,6.1-6.5,7.3v2.9h27.4h3.6h28v-2.9c-5.6-0.6-5.9-4.1-5.9-6.9v-32.4c0-1.1,5.2-7,10.1-7
c6.6,0,6.7,6.7,6.7,10.1v29.4c0,4.5-1.7,6.6-5.7,6.9v2.9h28.5V164C218.1,163.6,218.1,159.9,218.1,157"
/>
<path
style={styles.blue}
d="M475.2,110.9v2.9c3,0.1,6.7,0.1,6.7,4c0,1.8-0.6,3.4-1.3,5.5l-8.3,23.2l-8.7-22.4c-1.1-2.7-2.5-5.8-2.5-7
c0-2.9,3.2-3,6.5-3.2v-3H446c-3,0-5,3.1-3.8,5.8l7.2,15.9l14.5,35.7l-2.2,6.5c-0.9,2.7-3.9,9.9-8,9.9c-1.5,0-2-1.5-2-2
c0-0.5,0.3-1.1,0.3-2.2c0-2.2-1.3-6.1-6.8-6.1c-7.3,0-8,6.1-8,7.9c0,3.9,3.2,9.5,11.2,9.5c11.4,0,14-6.9,20-23l18.1-48.1
c2.3-6,4.4-6.3,7-6.7v-3H475.2z"
/>
<path
style={styles.blue}
d="M420.9,166.7h-32.3v-2.9c3.9-0.8,6.6-1.2,6.6-7.3V121c0-6-2.9-6.7-6.6-7.1v-3h22.9l0.1,4.4c0,1.6,2,2.4,3.2,1.1
c3-3.4,7.3-7,12.8-7c8.3,0,10.1,6.6,10.1,9.5c0,3.1-1.7,8.1-7.7,8.1c-7,0-6.9-7.1-10.8-7.1c-1.8,0-7.1,2.7-7.1,11.5v22.9
c0,7.4,1.5,9.3,8.8,9.6v2.9H420.9z"
/>
<path
style={styles.blue}
d="M487.5,159.5h0.9c1,0,1.4-0.8,1.4-1.8c0-1.2-0.6-1.5-1.4-1.5h-0.9V159.5z M485.2,155.8h3.5
c1.2,0,2.4,0.5,2.4,1.8c0,1.1-0.6,1.8-1.6,2.2l1.2,1.6c0.5,0.8,1.2,1.4,1.5,1.7v0.2h-1.3c-0.6,0-1.2-1.4-2.5-3.2h-1v2
c0,0.9,0,0.9,1,1v0.3h-3.2v-0.3c1-0.1,1-0.1,1-1v-4.8c0-0.9,0-0.9-1-1V155.8z M488.6,153.4c-3.3,0-5.8,2.9-5.8,6.1s2.6,6.1,5.8,6.1
c3.2,0,5.8-2.9,5.8-6.1C494.3,156.3,491.8,153.4,488.6,153.4 M488.6,166.5c-3.9,0-7-3.1-7-7c0-3.9,3-7,7-7c3.9,0,6.9,3.1,6.9,7
C495.5,163.4,492.4,166.5,488.6,166.5"
/>
<path
style={styles.blue}
d="M321.8,132.6c-0.1-3.8-0.1-10.1-1.1-13.7c-0.8-2.7-2.3-5.7-6.6-5.7c-4.5,0-8.6,2.7-8.6,19.4H321.8z
M337.3,153.3c-7.4,11.3-14.3,15.2-24,15.2c-12.3,0-24.6-8.9-24.6-29.7c0-18,11.1-29.4,25-29.4c21.1,0,22.7,21.1,23,27.7h-30.6
c0.3,10.3,3,22.7,14.5,22.7c7.1,0,11.4-5.4,13.7-8.1L337.3,153.3z"
/>
<path
style={styles.blue}
d="M579,43c-7.2,0-9.7,6.1-18.8,3.3c-0.8-0.3-1.5,0.7-0.8,1.3c5.5,4.6,14.1,11.2,24,10.6
C591.3,57.6,590.7,43,579,43"
/>
<path
style={styles.pink}
d="M588.3,63.8c-0.5,2.5-1.3,5.5-2,7.4c-0.2,0.4-0.7,0.6-1.1,0.4c-18.2-8.8-38.9,11.7-60.7,5.1
c-17.7-5.3-18.7-40,3.9-40.5c18.3-0.4,32.8,30.4,59,26.6C587.9,62.7,588.4,63,588.3,63.8"
/>
<path
style={styles.pink}
d="M533,94.4c9.5,1.2,22.8,8.9,30.8,9.3c0.7,0,0.9,0.9,0.4,1.4c-4.7,3.9-9.5,6.3-13.8,6.3c-6.8,0-15-6.1-22.3-15.2
C526.9,94.5,531,94.2,533,94.4"
/>
<path
style={styles.pink}
d="M525.2,90.4c5.4-3.4,16.5,0.4,27.6,4.9c10.6,4.3,16.1,4.5,20.3,0.3c4.8-4.8,14.5-18.8,7.5-20.6
c-16.1-4.1-38.2,15.1-60.6,5.3c-0.7-0.3-1.3,0.3-1,1c0.4,1.1,2.8,6.1,4.9,8.9C524.3,90.6,524.6,90.8,525.2,90.4"
/>
<path
style={styles.pink}
d="M541.8,15.1c6,0,6.8,8.1,13.1,15.4l0,0c0.5,0.7-0.1,1.3-0.5,1.3C534.4,31,533.4,15.1,541.8,15.1"
/>
<path
style={styles.pink}
d="M560.4,28.9c-1.1-0.7-2.3-1.8-3.2-3.2c-0.2-0.2-0.2-0.5,0-0.8c1.8-2.9,3.4-6.7,5.8-8.3
c3.7-2.8,10.6,0.6,7.8,6.2c-1.1,2.2-3.6,4.5-6.2,6.1C562.8,30,561.2,29.5,560.4,28.9"
/>
</>
)
export default ({ width }: { width: number }) => (
<svg width={width} viewBox="0 0 612 205.1">
{inner}
</svg>
)

58
src/components/ExchangePage/logos/coinhouse.js

@ -1,58 +0,0 @@
// @flow
import React, { Fragment } from 'react'
const inner = (
<Fragment>
<path
d="m0 6.498c1.691-0.99 3.379-1.987 5.074-2.97 1.916-1.11 3.841-2.205 5.76-3.31 1.051-0.604 2.388 0.116 2.396 1.315 0.013 2.517 0 5.033 7e-3 7.55 2e-3 0.585-0.21 1-0.768 1.24-0.648 0.278-1.27 0.619-1.923 0.88-0.74 0.297-1.369-0.115-1.405-0.912-0.031-0.682-8e-3 -1.366-8e-3 -2.05 0-0.186 0.01-0.373 0-0.559-0.048-0.883-0.66-1.287-1.466-0.944-0.365 0.156-0.708 0.367-1.056 0.562-0.51 0.285-1.006 0.598-1.527 0.862-0.436 0.22-0.638 0.528-0.636 1.026 0.013 2.516 0.012 5.033 0 7.55-1e-3 0.46 0.193 0.75 0.584 0.966 1.852 1.018 1.45 0.786 1.494 2.663 0.012 0.497 0.02 0.995-3e-3 1.491-0.041 0.879-0.785 1.317-1.564 0.882-1.477-0.824-2.932-1.689-4.39-2.546-0.206-0.122-0.38-0.298-0.568-0.449v-13.247z"
fill="#222246"
/>
<path
d="m10.261 25.901c-0.197-0.127-0.39-0.258-0.59-0.379-0.46-0.276-0.7-0.674-0.7-1.214 0-2.485 4e-3 -4.97-3e-3 -7.456-1e-3 -0.63 0.327-1.066 0.835-1.34 0.613-0.33 1.265-0.594 1.908-0.867 0.653-0.277 1.322 0.148 1.347 0.876 0.027 0.807 0.022 1.615 1e-3 2.422-0.012 0.456 0.033 0.931 0.435 1.144 0.436 0.23 0.924 0.187 1.394-0.116 0.665-0.429 1.365-0.81 2.076-1.157 0.662-0.324 0.939-0.81 0.933-1.538-0.017-2.237-0.02-4.474 2e-3 -6.71 7e-3 -0.736-0.28-1.315-0.931-1.551-1.097-0.397-1.427-1.13-1.298-2.218 0.062-0.52-1e-3 -1.055 0.013-1.583 0.03-1.141 0.835-1.576 1.808-0.993 1.282 0.77 2.554 1.56 3.86 2.287 0.608 0.339 0.88 0.74 0.873 1.463-0.032 3.79-0.036 7.58 3e-3 11.37 7e-3 0.751-0.267 1.214-0.879 1.563-2.171 1.24-4.343 2.48-6.507 3.732-1.285 0.743-2.556 1.51-3.834 2.265z"
fill="#267bbf"
/>
<path
d="m136.61 11.511h10.823c-0.276-1.334-0.91-2.378-1.885-3.215-1.067-0.917-2.317-1.213-3.72-1.29-2.624-0.142-5.156 2.426-5.218 4.505zm12.644 1.89h-12.624c-0.201 0.572 0.11 1.02 0.31 1.472 0.473 1.072 1.237 1.884 2.264 2.462 1.195 0.673 2.428 0.87 3.797 0.622 1.357-0.245 2.334-1.011 3.273-2.012l0.544 0.524c0.784 0.756 0.85 0.73 0.01 1.495-1.057 0.964-2.285 1.549-3.723 1.815-1.327 0.245-2.54 0.019-3.76-0.407-1.566-0.548-2.694-1.625-3.615-2.973-1.115-1.632-1.248-3.48-0.98-5.314 0.262-1.779 1.275-3.237 2.687-4.372a6.974 6.974 0 0 1 3.397-1.47c1.272-0.181 2.565-0.092 3.8 0.44 1.635 0.705 2.967 1.744 3.798 3.33 0.29 0.554 0.612 1.128 0.638 1.793 2e-3 0.059 0.12 0.113 0.183 0.17v2.425z"
fill="#2f7dc1"
/>
<path
d="m80.397 19.889h-1.814v-18.718c0.542-0.176 1.125-0.026 1.786-0.085 0.075 2.063-0.015 4.098 0.05 6.178 0.907-0.742 1.8-1.36 2.923-1.577 2.043-0.397 3.903-0.068 5.503 1.328 1.499 1.31 2.189 2.986 2.19 4.96 3e-3 2.61 1e-3 5.22 1e-3 7.879-0.585 0.152-1.165 0.017-1.794 0.097-0.02-0.293-0.048-0.53-0.048-0.767-4e-3 -2.518-0.073-5.039 0.02-7.553 0.072-1.948-1.885-3.96-3.652-4.259-1.52-0.258-2.742 0.192-3.786 1.106-0.854 0.746-1.392 1.77-1.383 2.997 0.016 2.486 4e-3 4.974 4e-3 7.46z"
fill="#347fc2"
/>
<path
d="m45.305 12.696c-0.11 2.786 2.212 5.532 5.499 5.538 3.421 7e-3 5.574-2.801 5.556-5.588-0.021-3.129-2.676-5.493-5.563-5.485-3.15 0.01-5.663 2.794-5.492 5.535m-1.829-0.053c-0.07-3.877 3.29-7.324 7.386-7.303 3.941 0.02 7.36 3.291 7.322 7.364-0.037 4.03-3.147 7.327-7.349 7.353-4.1 0.025-7.443-3.33-7.359-7.414"
fill="#262449"
/>
<path
d="m105.62 12.869c0.145-3.072-2.434-5.624-5.555-5.59-3.355 0.035-5.456 2.757-5.496 5.491-0.042 2.83 2.165 5.665 5.631 5.64 3.018-0.02 5.535-2.538 5.42-5.541m-5.535 7.26c-4.005 0.113-7.352-3.27-7.335-7.336 0.017-3.973 3.386-7.285 7.434-7.276 3.83 9e-3 7.34 3.314 7.287 7.422-0.05 3.875-3.389 7.404-7.386 7.19"
fill="#2d7dc0"
/>
<path
d="m41.34 16.109 1.267 1.258c-3.372 3.729-8.247 3.393-11.11 0.452-2.782-2.86-2.793-7.855 0.41-10.67 3.067-2.695 7.602-2.62 10.596 0.749l-1.313 1.318c-1.127-1.149-2.473-2.025-4.271-2.028-1.497-3e-3 -2.82 0.45-3.862 1.482-2.195 2.178-2.36 5.321-0.345 7.668 1.638 1.91 5.136 3.09 8.628-0.229"
fill="#262449"
/>
<path
d="m132.8 9.654h-1.698c-0.047-0.076-0.104-0.125-0.107-0.177-0.084-1.495-1.169-2.54-2.66-2.61-0.771-0.037-1.455 0.21-2.086 0.584a2.06 2.06 0 0 0-1.026 1.852c0.02 0.77 0.486 1.337 1.229 1.688 0.781 0.369 1.618 0.512 2.437 0.726 0.883 0.23 1.755 0.456 2.568 0.907 0.825 0.457 1.347 1.087 1.609 1.993 0.35 1.211 0.175 2.33-0.58 3.307-1.014 1.31-2.379 2-4.057 2.01-0.768 5e-3 -1.502-0.065-2.256-0.326-1.455-0.504-2.385-1.474-2.918-2.855-0.16-0.414-0.128-0.904-0.188-1.384 0.588-0.208 1.132-0.063 1.65-0.114 0.1 0.288 0.216 0.507 0.254 0.74 0.22 1.341 1.132 1.942 2.342 2.273 1.475 0.404 2.649-0.093 3.61-1.183 0.836-0.948 0.574-2.489-0.518-3.122-0.877-0.509-1.865-0.71-2.84-0.941-1.1-0.26-2.18-0.563-3.091-1.289-0.524-0.417-0.807-0.944-0.983-1.589-0.328-1.204-0.025-2.25 0.754-3.143 0.854-0.977 1.935-1.595 3.278-1.628 0.921-0.023 1.822-0.015 2.715 0.353 1.597 0.66 2.644 2.158 2.562 3.928"
fill="#2c7dc0"
/>
<path
d="m74.61 19.922c0-2.731 3e-3 -5.34 0-7.95-2e-3 -1.078-0.269-2.092-0.949-2.933-1.165-1.44-2.681-2.029-4.512-1.61-1.728 0.394-2.773 1.556-3.257 3.201-0.18 0.609-0.173 1.285-0.178 1.93-0.018 2.42-7e-3 4.84-7e-3 7.312h-1.733v-0.55c0-2.455 0.032-4.91-0.011-7.364-0.032-1.768 0.535-3.289 1.74-4.544 1.004-1.046 2.243-1.703 3.72-1.855 1.744-0.18 3.322 0.23 4.674 1.346 1.26 1.042 2.045 2.383 2.213 4.03 0.287 2.816 0.064 5.64 0.127 8.46 0.01 0.455-0.076 0.513-0.548 0.525-0.398 0.01-0.796 2e-3 -1.279 2e-3"
fill="#232247"
/>
<path
d="m109.15 5.422h1.624c0.02 0.226 0.058 0.46 0.059 0.695 4e-3 2.33-0.015 4.662 0.015 6.993 8e-3 0.602 0.114 1.216 0.265 1.802 0.396 1.53 1.468 2.454 2.901 2.955 1.947 0.68 4.055-0.266 5.074-1.966 0.486-0.81 0.695-1.677 0.687-2.622-0.019-2.33-6e-3 -4.661-6e-3 -6.992v-0.853h1.698v0.738c0 2.549-0.048 5.098 0.013 7.645 0.068 2.84-2.426 5.666-5.412 5.966-2.012 0.202-3.68-0.41-5.085-1.716-1.046-0.97-1.773-2.25-1.81-3.707-0.078-2.949-0.024-5.9-0.024-8.939"
fill="#2a7cc0"
/>
<path
d="m61.74 19.887h-1.658v-14.089h1.587c0.154 0.726 0.214 11.88 0.071 14.089"
fill="#202045"
/>
</Fragment>
)
export default ({ width }: { width: number }) => (
<svg width={width} viewBox="0 0 149.25 25.901">
{inner}
</svg>
)

46
src/components/ExchangePage/logos/paybis.js

@ -1,46 +0,0 @@
// @flow
import React, { Fragment } from 'react'
const inner = (
<Fragment>
<g fill="none" fillRule="evenodd">
<path d="M18.615 13.763h24.359V38.91h-24.36z" />
<path
fill="#424644"
d="M27.15 26.634h2.682c1.626 0 2.927-.297 3.902-.946 1.003-.595 1.599-1.46 1.843-2.596.243-1.298.054-2.19-.596-2.731-.65-.54-1.897-.784-3.74-.784H28.56l-1.41 7.057zm-1.572-12.87h3.577l-.623 3h3.062l.596-3h3.55l-.597 3h1.3c2.493 0 4.255.542 5.339 1.623 1.056 1.055 1.381 2.65.975 4.705-.406 2.028-1.355 3.596-2.9 4.705-1.517 1.109-3.522 1.65-5.933 1.65H26.58l-.271 1.297-1.517 7.599v.027l-.136.513h-5.771c.054-.162.081-.351.135-.54l3.306-16.603c.19-.892.135-1.514-.136-1.812-.298-.297-.948-.46-1.95-.46h-1.626l.515-2.703h5.852l.596-3.002z"
/>
<path d="M.813-.027H127.35v56.621H.813z" />
<path
fill="#3BB0DF"
d="M35.441 33.502c0 .081-.027.163-.027.244-.27 1.298-.84 2.19-1.707 2.73-.84.542-2.195.812-4.037.812h-.57c-3.711 0-9.537.081-13.276.081l-1.328 2.704h5.826l-.542 2.731h3.55l.541-2.73h3.062l-.542 2.73h3.55l.542-2.73h2.628c2.439 0 4.417-.542 5.934-1.596 1.49-1.082 2.438-2.65 2.872-4.732.406-2.028.054-3.57-1.03-4.678l-.054-.054 1.68-1.38h-7.451l-1.49 7.41 1.87-1.542zm8.02 17.008a26.402 26.402 0 0 1-14.333 4.219c-14.632 0-26.473-11.817-26.473-26.445 0-14.629 11.841-26.445 26.473-26.445 10.025 0 19.13 5.624 23.654 14.547h2.06C50.208 6.408 40.182 0 29.128 0 13.494 0 .813 12.655.813 28.284s12.68 28.283 28.315 28.283a28.4 28.4 0 0 0 17.53-6.057h-3.197zm82.182-16.845c.65-2.894-1.572-3.678-3.116-4.273-.949-.351-1.653-.676-1.463-1.541.135-.649.84-1.109 1.842-1.109.867 0 2.005.433 2.52.758l1.897-2.84c-.976-.595-2.385-1-4.282-1-3.414 0-5.744 1.622-6.34 4.218-.623 2.84 1.572 3.678 3.089 4.272.921.352 1.626.703 1.436 1.488-.162.703-.867 1.162-1.842 1.162-.867 0-2.222-.378-2.873-.757l-.84 3.624c.895.27 1.951.432 3.09.432 3.928 0 6.286-1.703 6.882-4.434zm-12.6 4.137l3.116-13.845h-4.227l-3.116 13.845h4.227zm4.281-17.928c.271-1.217-.596-2.217-1.87-2.217-1.3 0-2.573 1-2.844 2.217-.271 1.217.569 2.19 1.842 2.19 1.3 0 2.601-.973 2.872-2.19zm-12.49 10.924c-.57 2.57-1.925 4.03-3.686 4.03-.488 0-.948-.082-1.192-.19l1.653-7.382c.38-.162.921-.297 1.409-.297 1.707 0 2.357 1.406 1.815 3.84zm4.335-.378c.948-4.218-.976-6.652-4.58-6.652-.731 0-1.68.19-2.276.433l1.463-6.571H99.55l-4.39 19.469c1.03.54 2.9 1 4.959 1 4.714 0 7.884-2.488 9.05-7.68z"
/>
<path d="M69.853 24.2H97.03v17.334H69.853z" />
<path
fill="#424644"
d="M96.975 24.471H92.45l-3.522 7.571a24.423 24.423 0 0 0-.894 2.217h-.027s.081-1.19 0-2.217l-.57-7.57h-4.524l2.384 13.167-2.222 3.867h4.227l9.673-17.035zM80.61 36.963l1.544-7.922c.677-3.488-.867-4.84-4.444-4.84-1.03 0-2.113.108-3.034.297-.271 1.298-.813 2.38-1.653 3.218 1.002-.352 2.466-.703 3.658-.703 1.355 0 1.978.487 1.788 1.541l-.108.514c-4.038.216-7.75 1.027-8.427 4.515-.515 2.786 1.22 4.354 5.338 4.354 2.14 0 4.254-.433 5.338-.974zm-3.387-2.028c-.271.109-.976.19-1.518.19-1.436 0-2.222-.568-2.032-1.65.325-1.54 2.005-1.784 4.2-1.892l-.65 3.352z"
/>
<path d="M53.704 19.144H73.51v18.522H53.704z" />
<path
fill="#424644"
d="M60.749 27.364h1.87c1.354 0 2.438-.27 3.25-.757.813-.514 1.328-1.244 1.518-2.19.217-1.082.054-1.839-.488-2.271-.542-.46-1.571-.676-3.089-.676h-1.896l-1.165 5.894zm7.37-8.22c2.059 0 3.522.433 4.389 1.325.894.92 1.165 2.217.84 3.948-.352 1.676-1.138 3.001-2.412 3.894-1.273.946-2.899 1.406-4.93 1.406h-5.718l-.217 1.081-1.246 6.355-.027.027-.082.432H53.92c.055-.135.082-.297.109-.46l2.764-13.844c.135-.784.108-1.27-.136-1.54-.217-.244-.759-.38-1.626-.38h-1.327l.433-2.244H68.12z"
/>
<path d="M50.344 42.94h75.895v6.813H50.344z" />
<path
fill="#424644"
d="M53.27 48.023l1.3-5.084h-1.11l-.434 1.677a1.544 1.544 0 0 0-.433-.081c-1.111 0-1.897.73-2.168 1.892-.298 1.19.163 1.866 1.382 1.866.569 0 1.138-.108 1.463-.27zm-.948-.622c-.054.027-.217.027-.325.027-.461 0-.624-.352-.461-1.028.163-.622.488-1.027.975-1.027.109 0 .271.027.326.054l-.515 1.974zm4.01-3.894c.081-.324-.136-.568-.488-.568-.325 0-.677.244-.758.568-.082.325.135.568.487.568.325 0 .678-.243.759-.568zm-1.274 4.705l.922-3.623h-1.084l-.948 3.623h1.11zm3.902-.081l.867-3.38c-.27-.135-.731-.243-1.273-.243-1.22 0-2.087.622-2.412 1.838-.27 1.082.19 1.73 1.111 1.73.217 0 .488-.053.65-.107l-.027.162c-.108.433-.379.649-.84.649-.433 0-.785-.081-1.002-.19l-.515.839c.298.162.759.297 1.382.297 1.002 0 1.788-.54 2.06-1.595zm-.84-.946c-.108.027-.27.08-.406.08-.407 0-.596-.324-.434-.973.163-.649.515-.946.949-.946.135 0 .27 0 .352.027l-.46 1.812zm3.93-3.678c.08-.324-.136-.568-.489-.568-.325 0-.677.244-.758.568-.082.325.135.568.487.568.326 0 .678-.243.76-.568zm-1.274 4.705l.92-3.623h-1.083l-.948 3.623h1.11zm2.71-.054l.243-.92a.976.976 0 0 1-.298.055c-.217 0-.325-.081-.271-.325l.406-1.568h.624l.216-.811h-.65l.271-1.082-1.138.298-.217.784h-.406l-.217.81h.434l-.434 1.65c-.19.812 0 1.217.759 1.217.27 0 .542-.054.677-.108zm3.603-.135l.569-2.19c.244-.974-.163-1.325-1.138-1.325a4.81 4.81 0 0 0-1.517.243l.08.73c.299-.108.76-.216 1.085-.216.379 0 .569.135.487.432l-.054.136c-1.11.054-2.14.297-2.384 1.27-.19.785.27 1.19 1.409 1.19.569 0 1.165-.108 1.463-.27zm-.894-.541a1.471 1.471 0 0 1-.407.054c-.406 0-.596-.162-.542-.46.109-.432.597-.486 1.193-.513l-.244.919zm2.71.73l1.327-5.273h-1.11l-1.329 5.273h1.111zm11.217-.162l-.136-.811a1.04 1.04 0 0 1-.514.135c-.38 0-.596-.379-.434-.974.163-.649.515-1 .948-1 .19 0 .353.027.434.135l.542-.784c-.19-.162-.46-.243-.921-.243-.895 0-1.816.594-2.14 1.892-.326 1.271.27 1.893 1.164 1.893.46 0 .786-.081 1.057-.243zm3.522-3.515c-.135-.027-.298-.027-.514-.027-.65 0-1.193.08-1.653.243l-.867 3.461h1.11l.705-2.785c.108-.054.244-.054.38-.054.162 0 .297.027.406.054l.433-.892zm4.038.054h-1.247l-1.084 2.082c-.162.297-.298.622-.298.622s.027-.325.027-.622l-.027-2.082h-1.246l.433 3.623-.894 1.433h1.138l3.198-5.056zm3.251 1.811c.298-1.243-.162-1.892-1.382-1.892-.569 0-1.138.108-1.49.243l-1.246 4.894h1.11l.407-1.46c.081.027.27.054.433.054 1.111 0 1.87-.73 2.168-1.839zm-1.11 0c-.163.595-.516 1.028-.976 1.028a.886.886 0 0 1-.325-.054l.514-1.974a.886.886 0 0 1 .326-.054c.46 0 .623.351.46 1.054zm3.17 1.758l.243-.92a.976.976 0 0 1-.298.055c-.217 0-.325-.081-.27-.325l.406-1.568h.623l.217-.811h-.65l.297-1.082-1.165.298-.216.784h-.407l-.217.81h.434l-.434 1.65c-.19.812 0 1.217.759 1.217.27 0 .542-.054.677-.108zm4.253-1.758c.271-1.108-.135-1.892-1.219-1.892s-1.897.784-2.168 1.892c-.298 1.082.136 1.893 1.193 1.893 1.083 0 1.923-.811 2.194-1.893zm-1.11 0c-.163.65-.461 1-.84 1-.407 0-.515-.35-.326-1 .163-.703.461-1.054.84-1.054.38 0 .515.351.325 1.054zm5.419 1.65l-.136-.811a1.04 1.04 0 0 1-.515.135c-.379 0-.596-.379-.433-.974.162-.649.515-1 .921-1 .19 0 .352.027.46.135l.543-.784c-.217-.162-.461-.243-.949-.243-.867 0-1.815.594-2.14 1.892-.325 1.271.298 1.893 1.192 1.893.46 0 .759-.081 1.057-.243zm3.63-.027l.895-3.434h-1.111l-.705 2.758a1.701 1.701 0 0 1-.433.054c-.325 0-.434-.135-.38-.46l.624-2.352h-1.111l-.597 2.325c-.243.974.19 1.38 1.247 1.38.569 0 1.192-.109 1.571-.271zm3.713-3.488c-.109-.027-.299-.027-.515-.027-.623 0-1.192.08-1.626.243l-.894 3.461h1.11l.705-2.785c.109-.054.244-.054.407-.054.135 0 .298.027.379.054l.434-.892zm2.6 0c-.135-.027-.324-.027-.514-.027-.65 0-1.22.08-1.653.243l-.867 3.461h1.11l.705-2.785c.109-.054.244-.054.38-.054.162 0 .298.027.406.054l.434-.892zm3.144 1.65c.244-.974-.136-1.677-1.192-1.677-1.084 0-1.951.757-2.222 1.892-.271 1.082.135 1.893 1.382 1.893.542 0 1.138-.108 1.49-.27l-.108-.811a2.732 2.732 0 0 1-1.057.216c-.46 0-.759-.19-.732-.568l2.33-.297c.028-.136.055-.27.109-.379zm-1.03-.217l-1.3.162c.135-.595.514-.865.894-.865s.515.243.406.703zm4.254 2.244l.623-2.488c.217-.784-.162-1.216-1.3-1.216-.65 0-1.138.08-1.599.243l-.867 3.461h1.111l.705-2.785a1.89 1.89 0 0 1 .433-.054c.325 0 .46.162.38.46l-.597 2.379h1.111zm3.306-.162l-.136-.811a1.04 1.04 0 0 1-.514.135c-.38 0-.597-.379-.434-.974.163-.649.515-1 .921-1 .19 0 .353.027.46.135l.543-.784c-.217-.162-.46-.243-.948-.243-.868 0-1.816.594-2.141 1.892-.298 1.271.298 1.893 1.192 1.893.46 0 .759-.081 1.057-.243zm5.013-3.461h-1.247l-1.11 2.082c-.136.297-.272.622-.272.622s.027-.325.027-.622l-.027-2.082h-1.246l.433 3.623-.92 1.433h1.164l3.198-5.056zM76.03 45.67l.082-.838-1.897.325c-.19.027-.325.027-.433.027-.38 0-.57-.19-.488-.514.081-.298.352-.487.786-.487.27 0 .542.081.704.19l.542-.866c-.244-.135-.65-.243-1.165-.243-1.057 0-1.761.622-1.951 1.325-.108.432.027.838.434 1.027-.515.19-1.03.595-1.193 1.271-.216.92.38 1.406 1.626 1.406.677 0 1.274-.108 1.626-.27l.569-2.245.758-.108zm-2.22 1.73a2.435 2.435 0 0 1-.488.055c-.57 0-.813-.216-.705-.649.109-.406.434-.676.922-.757l.623-.081-.352 1.433z"
/>
<path d="M50.317 49.78h29.399v6.814h-29.4z" />
<path
fill="#424644"
d="M53.812 53.025c.244-.973-.135-1.676-1.192-1.676-1.084 0-1.924.757-2.222 1.892-.244 1.082.135 1.893 1.409 1.893.542 0 1.11-.108 1.49-.27l-.108-.811a2.766 2.766 0 0 1-1.084.216c-.434 0-.732-.19-.732-.568l2.33-.297c.055-.135.082-.27.109-.379zm-1.003-.216l-1.327.162c.162-.595.542-.865.921-.865.352 0 .515.243.406.703zm4.471 2.244l-.758-1.866 1.571-1.757h-1.246l-.813 1.027h-.027l-.271-1.027h-1.274l.705 1.757-1.707 1.866h1.246l.949-1.136.352 1.136h1.273zm2.791-.162l-.135-.811a1.04 1.04 0 0 1-.515.135c-.407 0-.596-.379-.434-.974.163-.648.515-1 .922-1 .19 0 .352.027.46.135l.542-.784c-.217-.162-.488-.243-.948-.243-.867 0-1.816.595-2.14 1.892-.326 1.271.297 1.893 1.191 1.893.461 0 .76-.08 1.057-.243zm3.63.162l.624-2.46c.19-.812-.162-1.244-1.03-1.244-.243 0-.514.08-.731.162l.433-1.73h-1.11l-1.355 5.272h1.11l.705-2.758a1.23 1.23 0 0 1 .434-.081c.352 0 .487.162.406.487l-.596 2.352h1.11zm3.74-.19l.57-2.19c.243-.973-.163-1.324-1.166-1.324-.542 0-1.138.108-1.49.243l.081.73c.298-.108.732-.216 1.084-.216.38 0 .542.135.46.432l-.027.136c-1.11.054-2.167.297-2.411 1.27-.19.758.244 1.19 1.436 1.19.569 0 1.165-.108 1.463-.27zm-.894-.54a1.643 1.643 0 0 1-.406.054c-.407 0-.624-.162-.542-.46.108-.432.569-.486 1.192-.513l-.244.92zm4.715.73l.65-2.488c.19-.784-.19-1.216-1.328-1.216-.65 0-1.138.08-1.571.243l-.894 3.461h1.11l.705-2.785a1.89 1.89 0 0 1 .433-.054c.326 0 .461.162.38.46l-.596 2.38h1.11zm3.901-.081l.84-3.38c-.27-.135-.704-.243-1.273-.243-1.192 0-2.086.622-2.385 1.838-.27 1.082.19 1.73 1.111 1.73.217 0 .461-.053.65-.107l-.054.162c-.108.433-.379.649-.84.649-.406 0-.758-.081-.975-.19l-.542.839c.325.162.759.297 1.41.297 1.002 0 1.787-.54 2.058-1.595zm-.867-.946a1.324 1.324 0 0 1-.379.08c-.434 0-.623-.324-.46-.973.162-.649.541-.946.948-.946.162 0 .27 0 .352.027l-.46 1.812zm5.311-1c.244-.974-.135-1.677-1.192-1.677-1.084 0-1.924.757-2.222 1.892-.27 1.082.136 1.893 1.409 1.893.542 0 1.111-.108 1.49-.27l-.108-.811a2.87 2.87 0 0 1-1.084.216c-.46 0-.731-.19-.731-.568l2.33-.297c.054-.135.081-.27.108-.379zm-1.002-.217l-1.328.162c.162-.595.515-.865.921-.865.352 0 .515.243.407.703z"
/>
</g>
</Fragment>
)
export default ({ width, height }: { width: number, height: number }) => (
<svg width={width} height={height}>
{inner}
</svg>
)

27
src/components/ExchangePage/logos/simplex.js

@ -1,27 +0,0 @@
// @flow
import React, { Fragment } from 'react'
const inner = (
<Fragment>
<path
fill="#75787B"
d="M58.227 22.684c.971.451 1.969.558 3.587.584 4.234.08 5.771 1.087 5.771 3.528a3.62 3.62 0 0 1-.377 1.644c-.243.477-.756.981-1.484 1.485-.728.504-1.995.743-3.802.743-2.562 0-4.45-.61-5.718-1.857a.89.89 0 0 1-.242-.53c.027-.451.242-.664.647-.664.216 0 .378.054.512.187.944 1.034 2.644 1.617 4.72 1.617 2.805 0 4.369-.955 4.369-2.652.027-.77-.216-1.273-.728-1.538-.998-.53-2.077-.664-3.803-.69-4.1-.08-5.501-.981-5.501-3.236 0-2.387 2.184-3.899 5.555-3.899 2.077 0 3.776.583 5.043 1.671a.69.69 0 0 1 .216.53c-.027.398-.243.637-.62.664-.216 0-.405-.053-.54-.186-.97-.928-2.4-1.406-4.018-1.406-.647 0-1.24.053-1.753.186a6.21 6.21 0 0 0-1.645.716c-.566.345-.836.902-.863 1.724-.027.69.216 1.14.674 1.38m39.721.397v6.684c0 .478-.216.716-.674.743-.459-.027-.702-.265-.702-.743v-6.551c0-2.97-1.267-4.536-3.721-4.536-2.481 0-4.073 1.936-4.073 5.04v6.047c0 .478-.215.716-.674.743-.458-.027-.701-.265-.701-.743v-6.551c0-2.97-1.267-4.536-3.721-4.536-2.508 0-4.073 1.936-4.073 5.04v6.047c0 .478-.242.716-.7.743-.432-.027-.648-.265-.675-.743V18.334c.027-.504.243-.742.674-.769.459.027.701.265.701.77v1.379h.054c.863-1.486 2.347-2.308 4.261-2.308 2.158 0 3.614.955 4.342 2.732h.054c.863-1.698 2.427-2.732 4.72-2.732 3.263 0 4.908 1.99 4.908 5.676m17.036.955c0-3.183-2.13-5.358-5.312-5.358-3.156 0-5.367 2.175-5.367 5.358s2.211 5.358 5.367 5.358c3.182 0 5.312-2.175 5.312-5.358m-10.68-5.702v1.83h.055c.27-.451.593-.823.944-1.167.377-.345.917-.69 1.618-1.035.7-.371 1.672-.557 2.94-.557 1.941 0 3.56.663 4.719 1.83 1.726 1.91 1.726 3.448 1.807 4.801 0 .982-.135 1.777-.594 3.024-.701 1.83-3.074 3.713-5.933 3.607-1.267 0-2.238-.186-2.94-.53-1.402-.743-2.022-1.353-2.561-2.228h-.054v6.79c0 .477-.216.716-.675.742-.458-.026-.7-.265-.7-.742V18.335c0-.504.242-.743.7-.77.46.027.675.266.675.77m17.605-5.968v17.399c0 .477-.242.716-.7.743-.432-.027-.648-.266-.675-.743v-17.4c.027-.477.243-.715.674-.742.46.027.702.265.702.743m5.464 10.901h10.598c-.35-2.758-2.373-4.589-5.286-4.589-2.966 0-4.962 1.83-5.312 4.589m11.084 1.247h-11.111c.215 2.917 2.265 4.88 5.475 4.88 1.914 0 3.397-.77 4.368-1.963a.62.62 0 0 1 .513-.265c.458.026.7.265.7.716a.612.612 0 0 1-.188.45c-1.24 1.433-3.047 2.335-5.393 2.335-2.077 0-3.803-.664-5.017-1.83-1.78-1.91-1.834-3.448-1.887-4.8 0-.982.107-1.805.62-2.998.755-1.857 3.155-3.767 6.148-3.634 3.857 0 6.608 2.626 6.608 6.313-.027.503-.324.769-.836.796m15.116 4.747a.773.773 0 0 1 .243.584c-.027.424-.27.636-.728.663-.216 0-.405-.106-.567-.292l-4.88-5.358-4.936 5.384a.633.633 0 0 1-.54.266c-.43-.027-.647-.266-.674-.69a.63.63 0 0 1 .19-.477l5.015-5.358-4.827-5.172c-.162-.186-.243-.372-.243-.584.027-.424.27-.636.728-.663.216 0 .405.107.567.292l4.746 5.252 4.773-5.279a.706.706 0 0 1 .54-.265c.431.027.647.265.674.69a.634.634 0 0 1-.189.477l-4.854 5.226 4.962 5.304z"
/>
<path
fill="#43B02A"
d="M21.135 8.867l5.553-4.355-12.48 2.8 6.927 1.555zm4.32.971l2.097-4.281L22.84 9.25l2.613.587zm3.325.747l.001-4.438-1.958 3.998 1.957.44zm3.978.893l-2.609-5.326v4.74l2.609.586zm-15.084.103l2.092-1.64-5.862-1.318 3.77 2.958zm23.72 1.838l-10.016-7.86 3.086 6.303 6.93 1.557zm-26.387.254l1.57-1.231-3.527-2.767 1.957 3.998zm7.67 1.834l2.168-4.426-3.373-.757-2.7 2.118 3.906 3.065zm13.708.28l4.705-1.056-5.867-1.318 1.162 2.373zm-24.568.388l2.092-1.641-2.091-4.274-.001 5.915zm18.33 1.01l4.87-1.092-1.5-3.063-3.369-.757v4.912zm-4.144.93l2.776-.623v-5.526l-2.565-.577-2.44 4.978 2.23 1.748zm11.863.694l3.529-2.766-4.4.987.87 1.78zm-15.328.083l1.759-.394-1.131-.888-.628 1.282zm-4.485 1.006l2.779-.623 1.237-2.525-4.395-3.448-2.058 1.615 2.437 4.981zm10.725.394v-1.42l-1.407.316 1.407 1.104zm-16.962 1.005l4.869-1.092-2.167-4.427-2.702 2.118v3.401zm-6.925.31l5.557-4.36.001-6.988-5.558 11.347zm14.398.817l.783-1.599-1.41.317.627 1.282zm20.347.001l2.611-5.33-3.772 2.958 1.16 2.372zm-33.893.234l4.704-1.055V18.97l-4.704 3.69zm26.632.455l4.394-3.444-1.143-2.333-5.48 1.229v2.8l2.23 1.748zm-2.23 1.748l1.133-.887-1.132-.889v1.776zm-19.699.097l.001-1.975-4.399.987 4.398.988zm6.848 1.538l1.235-2.522-1.236-2.526-5.477 1.229-.001 2.588 5.479 1.23zm20.083.54l1.5-3.062-1.5-3.061-3.904 3.061 3.904 3.062zm-17.308.083l-.78-1.594-.627 1.278 1.407.316zm5.594 1.257l3.114-2.441v-3.923l-3.112-2.442-3.887.872-1.73 3.532 1.727 3.529 3.888.873zm-15.217.597V26.34l-4.704-1.057 4.704 3.691zm18.33.102v-1.419L27.37 28.76l1.406.316zm14.702 1.195l.002-12.592-3.085 6.297 3.083 6.295zm-20.316.067l1.133-.888-1.761-.396.628 1.284zm12.462.276l1.144-2.333-4.393-3.446-2.23 1.75v2.798l5.48 1.231zm6.623.244l-2.611-5.332-1.162 2.372 3.773 2.96zm-.853 1.052l-3.53-2.769-.871 1.78 4.4.99zm-26.878.258l2.168-4.427-4.87-1.094v3.4l2.702 2.121zm20.704 2.37l5.87-1.316-4.707-1.057-1.163 2.374zm-17.55.106l4.394-3.445-1.237-2.528-2.774-.623-2.44 4.981 2.057 1.615zm12.473 1.034l3.371-.756 1.5-3.064-4.87-1.094-.001 4.914zm-3.936.883l2.567-.576.002-5.528L26 29.833l-2.23 1.749 2.436 4.979zm-4.739 1.063l3.37-.756-2.165-4.426-3.906 3.063 2.701 2.119zm-11.023.061v-6.989l-5.555-4.36 5.555 11.35zm1.368 0l2.094-4.273-2.093-1.643-.001 5.917zm1.232.585l3.528-2.766-1.57-1.231-1.958 3.997zm.854 1.052l5.863-1.315-2.092-1.642-3.771 2.957zm14.874 2.483l.001-4.44-1.958.44 1.957 4zm1.369 0l2.612-5.333-2.611.586-.001 4.748zm-2.602.583l-2.093-4.276-2.61.585 4.703 3.691zm3.834.001l10.02-7.855-6.933 1.555-3.087 6.3zm-4.691 1.049L21.13 39.08l-6.928 1.554 12.48 2.804zm2.775 4.238a2.98 2.98 0 0 1-2.325-1.101 2.896 2.896 0 0 1-.646-1.801L13.788 41.92a2.97 2.97 0 0 1-2.662 1.63c-.91 0-1.757-.4-2.324-1.1a2.888 2.888 0 0 1 .454-4.092L3.608 26.82a3.02 3.02 0 0 1-.639.068c-.91 0-1.757-.4-2.322-1.098a2.893 2.893 0 0 1 .47-4.106 2.964 2.964 0 0 1 1.846-.635c.218 0 .435.023.648.07l5.653-11.54a2.867 2.867 0 0 1-1.082-2.595 2.89 2.89 0 0 1 1.1-1.958 2.97 2.97 0 0 1 1.85-.637c.91 0 1.758.4 2.325 1.1.13.16.244.34.34.534l12.697-2.848A2.88 2.88 0 0 1 27.61.913a2.97 2.97 0 0 1 1.85-.638c.91 0 1.758.401 2.325 1.101.705.87.843 2.063.363 3.066l10.185 7.992a2.97 2.97 0 0 1 1.831-.623c.911 0 1.758.401 2.325 1.1a2.893 2.893 0 0 1-.47 4.107 2.956 2.956 0 0 1-1.17.557l-.003 12.804c.647.15 1.227.51 1.64 1.022a2.891 2.891 0 0 1-.471 4.106 2.968 2.968 0 0 1-1.849.637 3.01 3.01 0 0 1-1.837-.623l-10.185 7.986a2.897 2.897 0 0 1-.835 3.531 2.97 2.97 0 0 1-1.85.638z"
mask="url(#b)"
/>
<path
fill="#43B02A"
d="M75.563 14.695c0-1.565-1.29-2.833-2.881-2.833-1.591 0-2.88 1.268-2.88 2.833 0 1.33.934 2.444 2.192 2.748v12.323c.027.477.243.716.675.743.458-.027.7-.266.7-.743V17.443c1.259-.304 2.194-1.417 2.194-2.748"
/>
</Fragment>
)
export default ({ width, height }: { width: number, height: number }) => (
<svg width={width} height={height}>
{inner}
</svg>
)

12
src/components/GenuineCheck.js

@ -146,7 +146,7 @@ class GenuineCheck extends PureComponent<Props> {
id: 'device',
title: (
<Trans i18nKey="deviceConnect.step1" parent="div">
{'Connect and unlock your '}
{'Connect and unlock your'}
<Bold>{'Ledger device'}</Bold>
</Trans>
),
@ -157,9 +157,9 @@ class GenuineCheck extends PureComponent<Props> {
id: 'deviceInfo',
title: (
<Trans i18nKey="deviceConnect.dashboard" parent="div">
{'Navigate to the '}
<Bold>{'dashboard'}</Bold>
{' on your device'}
{'Navigate to the'}
<Bold>{'Dashboard'}</Bold>
{'on your device'}
</Trans>
),
icon: homeIcon,
@ -169,9 +169,9 @@ class GenuineCheck extends PureComponent<Props> {
id: 'isGenuine',
title: (
<Trans i18nKey="deviceConnect.step3" parent="div">
{'Allow '}
{'Allow'}
<Bold>{'Ledger Manager'}</Bold>
{' on your device'}
{'on your device'}
</Trans>
),
icon: genuineCheckIcon,

2
src/components/MainSideBar/index.js

@ -88,7 +88,7 @@ class MainSideBar extends PureComponent<Props> {
handleOpenSendModal = () => this.props.openModal(MODAL_SEND)
handleOpenReceiveModal = () => this.props.openModal(MODAL_RECEIVE)
handleClickManager = () => this.push('/manager')
handleClickExchange = () => this.push('/exchange')
handleClickExchange = () => this.push('/partners')
handleClickDev = () => this.push('/dev')
handleOpenImportModal = () => this.props.openModal(MODAL_ADD_ACCOUNTS)

7
src/components/ManagerPage/DeviceInfos.js

@ -5,7 +5,7 @@ import React, { PureComponent } from 'react'
import Text from 'components/base/Text'
import Box, { Card } from 'components/base/Box'
import Button from 'components/base/Button'
import { getDeviceModel } from '@ledgerhq/devices'
import type { Device, MemoryInfos } from 'types/common'
import MemInfos from './MemInfos'
@ -43,10 +43,11 @@ class DeviceInfos extends PureComponent<Props, State> {
return <Box py={5}>{'You dont have any device connected'}</Box>
}
const deviceInfos = getDeviceModel(device.modelId)
const title = (
<Text>
{device.manufacturer}
<Text ff="Museo Sans|Bold">{` ${device.product}`}</Text>
<Text ff="Museo Sans|Bold">{`${deviceInfos.productName}`}</Text>
</Text>
)
return (

25
src/components/ManagerPage/FirmwareUpdate.js

@ -3,10 +3,10 @@
import React, { PureComponent, Fragment } from 'react'
import { translate } from 'react-i18next'
import { getDeviceModel } from '@ledgerhq/devices'
import type { DeviceInfo, FirmwareUpdateContext } from '@ledgerhq/live-common/lib/types/manager'
import type { Device, T } from 'types/common'
import type { DeviceInfo, FirmwareUpdateContext } from '@ledgerhq/live-common/lib/types/manager'
import type { StepId } from 'components/modals/UpdateFirmware'
import getLatestFirmwareForDevice from 'commands/getLatestFirmwareForDevice'
@ -18,6 +18,7 @@ import Box, { Card } from 'components/base/Box'
import Text from 'components/base/Text'
import NanoS from 'icons/device/NanoS'
import NanoX from 'icons/device/NanoX'
import Blue from 'icons/device/Blue'
import CheckFull from 'icons/CheckFull'
@ -26,6 +27,17 @@ import UpdateFirmwareButton from './UpdateFirmwareButton'
export const getCleanVersion = (input: string): string =>
input.endsWith('-osu') ? input.replace('-osu', '') : input
const Icon = ({ type }: { type: string }) => {
switch (type) {
case 'blue':
return <Blue size={30} />
case 'nanoX':
return <NanoX size={30} />
default:
return <NanoS size={30} />
}
}
export type ModalStatus = 'closed' | 'disclaimer' | 'install' | 'error' | 'success'
type Props = {
@ -81,18 +93,19 @@ class FirmwareUpdate extends PureComponent<Props, State> {
render() {
const { deviceInfo, t, device } = this.props
const { firmware, modal, stepId, ready } = this.state
const deviceSpecs = getDeviceModel(device.modelId)
return (
<Card p={4}>
<Box horizontal align="center" flow={2}>
<Box color="dark">
{device.product === 'Blue' ? <Blue size={30} /> : <NanoS size={30} />}
<Icon type={deviceSpecs.id} />
</Box>
<Box>
<Box horizontal align="center">
<Text ff="Open Sans|SemiBold" fontSize={4} color="dark">
{device.product === 'Blue'
? t('manager.firmware.titleBlue')
: t('manager.firmware.titleNano')}
{deviceSpecs.productName}
</Text>
<Box color="wallet" ml={2}>
<Tooltip render={() => t('manager.yourDeviceIsGenuine')}>

2
src/components/ManagerPage/ManagerGenuineCheck.js

@ -28,7 +28,7 @@ class ManagerGenuineCheck extends PureComponent<Props> {
<img
src={i('logos/connectDevice.png')}
alt="connect your device"
style={{ marginBottom: 30, maxWidth: 362, width: '100%' }}
style={{ marginBottom: 30, maxWidth: 25, width: '100%' }}
/>
<Text ff="Museo Sans|Regular" fontSize={7} color="dark" style={{ marginBottom: 10 }}>
{t('manager.device.title')}

6
src/components/Onboarding/index.js

@ -19,7 +19,7 @@ import {
prevStep,
jumpStep,
updateGenuineCheck,
isLedgerNano,
deviceModelId,
flowType,
relaunchOnboarding,
onboardingRelaunchedSelector,
@ -102,7 +102,7 @@ export type StepProps = {
getDeviceInfo: Function,
updateGenuineCheck: Function,
openModal: Function,
isLedgerNano: Function,
deviceModelId: Function,
flowType: Function,
}
@ -171,7 +171,7 @@ class Onboarding extends PureComponent<Props> {
settings,
updateGenuineCheck,
openModal,
isLedgerNano,
deviceModelId,
flowType,
prevStep,
nextStep,

6
src/components/Onboarding/steps/Analytics.js

@ -3,6 +3,8 @@
import React, { PureComponent } from 'react'
import styled from 'styled-components'
import { connect } from 'react-redux'
import { getDeviceModel } from '@ledgerhq/devices'
import { saveSettings } from 'actions/settings'
import Box from 'components/base/Box'
import Switch from 'components/base/Switch'
@ -67,13 +69,15 @@ class Analytics extends PureComponent<StepProps, State> {
const { nextStep, t, onboarding } = this.props
const { analyticsToggle, sentryLogsToggle } = this.state
const model = getDeviceModel(onboarding.deviceModelId)
return (
<FixedTopContainer>
<TrackPage
category="Onboarding"
name="Analytics"
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={model.productName}
/>
<StepContainerInner>
<Title data-e2e="onboarding_title">{t('onboarding.analytics.title')}</Title>

7
src/components/Onboarding/steps/Finish.js

@ -3,6 +3,8 @@
import React, { Component } from 'react'
import { openURL } from 'helpers/linking'
import styled from 'styled-components'
import { getDeviceModel } from '@ledgerhq/devices'
import { i } from 'helpers/staticPath'
import { urls } from 'config/urls'
@ -66,13 +68,16 @@ export default class Finish extends Component<StepProps, *> {
render() {
const { finish, t, onboarding } = this.props
const { emit } = this.state
const model = getDeviceModel(onboarding.deviceModelId)
return (
<Box sticky justifyContent="center">
<TrackPage
category="Onboarding"
name="Finish"
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={model.productName}
/>
<ConfettiLayer>
<ConfettiParty emit={emit} />

23
src/components/Onboarding/steps/GenuineCheck/GenuineCheckErrorPage.js

@ -11,9 +11,21 @@ import Box from 'components/base/Box'
import Button from 'components/base/Button'
import ExternalLinkButton from 'components/base/ExternalLinkButton'
import TrackPage from 'analytics/TrackPage'
import { getDeviceModel } from '@ledgerhq/devices'
import { Title, Description, OnboardingFooterWrapper } from '../../helperComponents'
const Img = ({ type }: { type: string }) => {
switch (type) {
case 'blue':
return <img alt="" src={i('blue-error-onb.svg')} />
case 'nanoX':
return <img alt="" src={i('nano-x-error-onb.svg')} />
default:
return <img alt="" src={i('nano-error-onb.svg')} />
}
}
type Props = {
t: T,
redoGenuineCheck: () => void,
@ -23,12 +35,15 @@ type Props = {
class GenuineCheckErrorPage extends PureComponent<Props, *> {
trackErrorPage = (page: string) => {
const { onboarding } = this.props
const model = getDeviceModel(onboarding.deviceModelId)
return (
<TrackPage
category="Onboarding"
name={`Genuine Check Error Page - ${page}`}
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={model.productName}
/>
)
}
@ -59,11 +74,7 @@ class GenuineCheckErrorPage extends PureComponent<Props, *> {
</Fragment>
)}
<Box mt={5} mr={7}>
{onboarding.isLedgerNano ? (
<img alt="" src={i('nano-error-onb.svg')} />
) : (
<img alt="" src={i('blue-error-onb.svg')} />
)}
<Img type={onboarding.deviceModelId} />
</Box>
</Fragment>
)

7
src/components/Onboarding/steps/GenuineCheck/GenuineCheckUnavailable.js

@ -1,8 +1,9 @@
// @flow
import React from 'react'
import { colors } from 'styles/theme'
import { getDeviceModel } from '@ledgerhq/devices'
import { colors } from 'styles/theme'
import type { T } from 'types/common'
import type { OnboardingState } from 'reducers/onboarding'
@ -54,6 +55,8 @@ export function GenuineCheckUnavailableMessage({
t: T,
onboarding: OnboardingState,
}) {
const model = getDeviceModel(onboarding.deviceModelId)
return (
<Box
horizontal
@ -76,7 +79,7 @@ export function GenuineCheckUnavailableMessage({
handleOpenGenuineCheckModal()
track('Genuine Check Retry', {
flowType: onboarding.flowType,
deviceType: onboarding.isLedgerNano ? 'Nano S' : 'Blue',
deviceType: model.productName,
})
}}
>

7
src/components/Onboarding/steps/GenuineCheck/index.js

@ -3,8 +3,9 @@
import React, { PureComponent } from 'react'
import { connect } from 'react-redux'
import styled from 'styled-components'
import { colors } from 'styles/theme'
import { getDeviceModel } from '@ledgerhq/devices'
import { colors } from 'styles/theme'
import { updateGenuineCheck } from 'reducers/onboarding'
import Box from 'components/base/Box'
@ -165,13 +166,15 @@ class GenuineCheck extends PureComponent<StepProps, State> {
return this.renderGenuineFail()
}
const model = getDeviceModel(onboarding.deviceModelId)
return (
<FixedTopContainer>
<TrackPage
category="Onboarding"
name="Genuine Check"
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={model.productName}
/>
<StepContainerInner>
<Title>{t('onboarding.genuineCheck.title')}</Title>

41
src/components/Onboarding/steps/SelectDevice.js

@ -3,11 +3,14 @@
import React, { PureComponent } from 'react'
import styled from 'styled-components'
import { connect } from 'react-redux'
import { getDeviceModel } from '@ledgerhq/devices'
import { i } from 'helpers/staticPath'
import { rgba } from 'styles/helpers'
import { isLedgerNano } from 'reducers/onboarding'
import { deviceModelId } from 'reducers/onboarding'
import type { DeviceModelId } from 'reducers/onboarding'
import Box from 'components/base/Box'
import TrackPage from 'analytics/TrackPage'
@ -19,11 +22,11 @@ import OnboardingFooter from '../OnboardingFooter'
import type { StepProps } from '..'
const mapDispatchToProps = { isLedgerNano }
const mapDispatchToProps = { deviceModelId }
class SelectDevice extends PureComponent<StepProps, {}> {
handleIsLedgerNano = (isLedgerNano: boolean) => {
this.props.isLedgerNano(isLedgerNano)
handleDeviceModelId = (deviceModelId: DeviceModelId) => {
this.props.deviceModelId(deviceModelId)
}
handleContinue = () => {
@ -46,24 +49,34 @@ class SelectDevice extends PureComponent<StepProps, {}> {
<Box pt={4}>
<Inner>
<DeviceContainer
isActive={onboarding.isLedgerNano}
onClick={() => this.handleIsLedgerNano(true)}
isActive={onboarding.deviceModelId === 'nanoX'}
onClick={() => this.handleDeviceModelId('nanoX')}
>
{onboarding.deviceModelId === 'nanoX' && <DeviceSelected />}
<DeviceIcon>
<img alt="" src={i('ledger-nano-x-onb.svg')} />
</DeviceIcon>
<BlockTitle>{getDeviceModel('nanoX').productName}</BlockTitle>
</DeviceContainer>
<DeviceContainer
isActive={onboarding.deviceModelId === 'nanoS'}
onClick={() => this.handleDeviceModelId('nanoS')}
>
{onboarding.isLedgerNano && <DeviceSelected />}
{onboarding.deviceModelId === 'nanoS' && <DeviceSelected />}
<DeviceIcon>
<img alt="" src={i('ledger-nano-onb.svg')} />
<img alt="" src={i('ledger-nano-s-onb.svg')} />
</DeviceIcon>
<BlockTitle>{t('onboarding.selectDevice.ledgerNanoCard.title')}</BlockTitle>
<BlockTitle>{getDeviceModel('nanoS').productName}</BlockTitle>
</DeviceContainer>
<DeviceContainer
isActive={!onboarding.isLedgerNano && onboarding.isLedgerNano !== null}
onClick={() => this.handleIsLedgerNano(false)}
isActive={onboarding.deviceModelId === 'blue'}
onClick={() => this.handleDeviceModelId('blue')}
>
{!onboarding.isLedgerNano && onboarding.isLedgerNano !== null && <DeviceSelected />}
{onboarding.deviceModelId === 'blue' && <DeviceSelected />}
<DeviceIcon>
<img alt="" src={i('ledger-blue-onb.svg')} />
</DeviceIcon>
<BlockTitle>{t('onboarding.selectDevice.ledgerBlueCard.title')}</BlockTitle>
<BlockTitle>{getDeviceModel('blue').productName}</BlockTitle>
</DeviceContainer>
</Inner>
</Box>
@ -73,7 +86,7 @@ class SelectDevice extends PureComponent<StepProps, {}> {
t={t}
nextStep={this.handleContinue}
prevStep={() => jumpStep('init')}
isContinueDisabled={onboarding.isLedgerNano === null}
isContinueDisabled={onboarding.deviceModelId === ''}
/>
</FixedTopContainer>
)

82
src/components/Onboarding/steps/SelectPIN/SelectPINRestoreNanoX.js

@ -0,0 +1,82 @@
// @flow
import React, { PureComponent } from 'react'
import { translate } from 'react-i18next'
import { colors } from 'styles/theme'
import { i } from 'helpers/staticPath'
import Box from 'components/base/Box'
import type { T } from 'types/common'
import IconChevronRight from 'icons/ChevronRight'
import { IconOptionRow, DisclaimerBox, OptionRow, Inner } from '../../helperComponents'
type Props = {
t: T,
}
class SelectPINrestoreNanoX extends PureComponent<Props, *> {
render() {
const { t } = this.props
const stepsLedgerNano = [
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.restore.instructions.nanoX.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.restore.instructions.nanoX.step2'),
},
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.restore.instructions.nanoX.step3'),
},
{
key: 'step4',
icon: <IconOptionRow>{'4.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.restore.instructions.nanoX.step4'),
},
{
key: 'step5',
icon: <IconOptionRow>{'5.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.restore.instructions.nanoX.step5'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding.selectPIN.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding.selectPIN.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding.selectPIN.disclaimer.note3'),
},
]
return (
<Box align="center" mt={3}>
<Inner style={{ width: 700 }}>
<img alt="" src={i('select-pin-nano-x-onb.svg')} />
<Box shrink grow flow={4} style={{ marginLeft: 40 }}>
{stepsLedgerNano.map(step => <OptionRow key={step.key} step={step} />)}
</Box>
</Inner>
<DisclaimerBox mt={6} disclaimerNotes={disclaimerNotes} />
</Box>
)
}
}
export default translate()(SelectPINrestoreNanoX)

81
src/components/Onboarding/steps/SelectPIN/SelectPINnanoX.js

@ -0,0 +1,81 @@
// @flow
import React, { PureComponent } from 'react'
import { translate, Trans } from 'react-i18next'
import { colors } from 'styles/theme'
import { i } from 'helpers/staticPath'
import Box from 'components/base/Box'
import type { T } from 'types/common'
import IconChevronRight from 'icons/ChevronRight'
import { IconOptionRow, DisclaimerBox, OptionRow, Inner } from '../../helperComponents'
type Props = {
t: T,
}
class SelectPINnanoX extends PureComponent<Props, *> {
render() {
const { t } = this.props
const stepsLedgerNano = [
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.initialize.instructions.nanoX.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding.selectPIN.initialize.instructions.nanoX.step2" />
</Box>
),
},
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.initialize.instructions.nanoX.step3'),
},
{
key: 'step4',
icon: <IconOptionRow>{'4.'}</IconOptionRow>,
desc: t('onboarding.selectPIN.initialize.instructions.nanoX.step4'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding.selectPIN.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding.selectPIN.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding.selectPIN.disclaimer.note3'),
},
]
return (
<Box align="center" mt={3}>
<Inner style={{ width: 700 }}>
<img alt="" src={i('select-pin-nano-x-onb.svg')} />
<Box shrink grow flow={4} style={{ marginLeft: 40 }}>
{stepsLedgerNano.map(step => <OptionRow key={step.key} step={step} />)}
</Box>
</Inner>
<DisclaimerBox mt={6} disclaimerNotes={disclaimerNotes} />
</Box>
)
}
}
export default translate()(SelectPINnanoX)

24
src/components/Onboarding/steps/SelectPIN/index.js

@ -1,23 +1,39 @@
// @flow
import React from 'react'
import { getDeviceModel } from '@ledgerhq/devices'
import Box from 'components/base/Box'
import TrackPage from 'analytics/TrackPage'
import type { DeviceModelId } from 'reducers/onboarding'
import GrowScroll from 'components/base/GrowScroll'
import { Title, FixedTopContainer } from '../../helperComponents'
import OnboardingFooter from '../../OnboardingFooter'
import SelectPINnano from './SelectPINnano'
import SelectPINblue from './SelectPINblue'
import SelectPINnanoX from './SelectPINnanoX'
import SelectPINrestoreNano from './SelectPINrestoreNano'
import SelectPINRestoreNanoX from './SelectPINRestoreNanoX'
import SelectPINrestoreBlue from './SelectPINrestoreBlue'
import type { StepProps } from '../..'
const SelectPin = ({ modelId, restore = false }: { modelId: DeviceModelId, restore?: boolean }) => {
switch (modelId) {
case 'nanoX':
return restore ? <SelectPINRestoreNanoX /> : <SelectPINnanoX />
case 'blue':
return restore ? <SelectPINrestoreBlue /> : <SelectPINblue />
default:
return restore ? <SelectPINrestoreNano /> : <SelectPINnano />
}
}
export default (props: StepProps) => {
const { nextStep, prevStep, t, onboarding } = props
const model = getDeviceModel(onboarding.deviceModelId)
return (
<FixedTopContainer>
<GrowScroll pb={7}>
@ -25,20 +41,20 @@ export default (props: StepProps) => {
category="Onboarding"
name="Choose PIN"
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={model.productName}
/>
{onboarding.flowType === 'restoreDevice' ? (
<Box grow alignItems="center">
<Title>{t('onboarding.selectPIN.restore.title')}</Title>
<Box align="center" mt={7}>
{onboarding.isLedgerNano ? <SelectPINrestoreNano /> : <SelectPINrestoreBlue />}
<SelectPin modelId={onboarding.deviceModelId} restore />
</Box>
</Box>
) : (
<Box grow alignItems="center">
<Title>{t('onboarding.selectPIN.initialize.title')}</Title>
<Box align="center" mt={7}>
{onboarding.isLedgerNano ? <SelectPINnano /> : <SelectPINblue />}
<SelectPin modelId={onboarding.deviceModelId} />
</Box>
</Box>
)}

4
src/components/Onboarding/steps/SetPassword.js

@ -2,6 +2,8 @@
import React, { PureComponent, Fragment } from 'react'
import { connect } from 'react-redux'
import { getDeviceModel } from '@ledgerhq/devices'
import { colors } from 'styles/theme'
import db from 'helpers/db'
@ -105,7 +107,7 @@ class SetPassword extends PureComponent<Props, State> {
category="Onboarding"
name="Set Password"
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={getDeviceModel(onboarding.deviceModelId).productName}
/>
<StepContainerInner>
<Fragment>

2
src/components/Onboarding/steps/WriteSeed/WriteSeedRestore.js

@ -123,7 +123,7 @@ class WriteSeedRestore extends PureComponent<Props, *> {
<Box style={{ width: 260, justifyContent: 'center', alignItems: 'center' }}>
<img alt="" src={i('write-seed-onb.svg')} />
</Box>
{onboarding.isLedgerNano ? (
{onboarding.deviceModelId === 'nanoS' ? (
<Box shrink flow={2} m={0}>
{stepsNano.map(step => <OptionRow key={step.key} step={step} />)}
</Box>

8
src/components/Onboarding/steps/WriteSeed/index.js

@ -1,7 +1,7 @@
// @flow
import React from 'react'
import { getDeviceModel } from '@ledgerhq/devices'
import Box from 'components/base/Box'
import TrackPage from 'analytics/TrackPage'
@ -17,6 +17,8 @@ import type { StepProps } from '../..'
export default (props: StepProps) => {
const { nextStep, prevStep, t, onboarding } = props
const model = getDeviceModel(onboarding.deviceModelId)
return (
<FixedTopContainer>
<GrowScroll pb={7}>
@ -24,12 +26,12 @@ export default (props: StepProps) => {
category="Onboarding"
name="Recovery Phase"
flowType={onboarding.flowType}
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
deviceType={model.productName}
/>
<Box grow alignItems="center">
{onboarding.flowType === 'restoreDevice' ? (
<WriteSeedRestore onboarding={onboarding} />
) : onboarding.isLedgerNano ? (
) : onboarding.deviceModelId === 'nanoS' ? (
<WriteSeedNano />
) : (
<WriteSeedBlue />

17
src/components/ExchangePage/ExchangeCard.js → src/components/PartnersPage/PartnerCard.js

@ -11,29 +11,30 @@ import { FakeLink } from 'components/base/Link'
type CardType = {
id: string,
logo: any,
Logo: any,
url: string,
}
export default class ExchangeCard extends PureComponent<{ t: T, card: CardType }> {
export default class PartnerCard extends PureComponent<{ t: T, card: CardType }> {
onClick = () => {
const { card } = this.props
openURL(card.url, 'VisitExchange', { id: card.id })
openURL(card.url, 'VisitPartner', { id: card.id })
}
render() {
const {
card: { logo, id },
card: { Logo, id },
t,
} = this.props
return (
<Card horizontal py={5} px={6}>
<Box justify="center" style={{ width: 200 }}>
{logo}
<Box justify="center" style={{ width: 180, marginRight: 64 }}>
<Logo />
</Box>
<Box shrink ff="Open Sans|Regular" fontSize={4} flow={3}>
<Box>{t(`exchange.${id}`)}</Box>
<Box>{t(`partners.${id}`)}</Box>
<Box horizontal align="center" color="wallet" flow={1}>
<FakeLink onClick={this.onClick}>{t('exchange.visitWebsite')}</FakeLink>
<FakeLink onClick={this.onClick}>{t('partners.visitWebsite')}</FakeLink>
<ExternalLinkIcon size={14} />
</Box>
</Box>

33
src/components/PartnersPage/index.js

@ -0,0 +1,33 @@
// @flow
import React, { PureComponent } from 'react'
import { T, translate } from 'react-i18next'
import partners from '@ledgerhq/live-common/lib/partners/react'
import TrackPage from 'analytics/TrackPage'
import Box from 'components/base/Box'
import PartnerCard from './PartnerCard'
type Props = {
t: T,
}
class PartnersPage extends PureComponent<Props> {
render() {
const { t } = this.props
return (
<Box pb={6} selectable>
<TrackPage category="Exchange" />
<Box ff="Museo Sans|Regular" fontSize={7} color="dark">
{t('partners.title')}
</Box>
<Box ff="Museo Sans|Light" fontSize={5} mb={5}>
{t('partners.desc')}
</Box>
<Box flow={3}>{partners.map(card => <PartnerCard key={card.id} t={t} card={card} />)}</Box>
</Box>
)
}
}
export default translate()(PartnersPage)

5
src/components/SettingsPage/CleanButton.js

@ -6,6 +6,7 @@ import { translate } from 'react-i18next'
import logger from 'logger'
import type { T } from 'types/common'
import { cleanAccountsCache } from 'actions/accounts'
import SyncSkipUnderPriority from 'components/SyncSkipUnderPriority'
import Button from 'components/base/Button'
import ConfirmModal from 'components/base/Modal/ConfirmModal'
import { softReset } from 'helpers/reset'
@ -69,7 +70,9 @@ class CleanButton extends PureComponent<Props, State> {
title={t('settings.softResetModal.title')}
subTitle={t('common.areYouSure')}
desc={t('settings.softResetModal.desc')}
/>
>
<SyncSkipUnderPriority priority={999} />
</ConfirmModal>
<ResetFallbackModal isOpened={fallbackOpened} onClose={this.closeFallback} />
</Fragment>

5
src/components/SettingsPage/ResetButton.js

@ -7,6 +7,7 @@ import { translate } from 'react-i18next'
import logger from 'logger'
import type { T } from 'types/common'
import { hardReset } from 'helpers/reset'
import SyncSkipUnderPriority from 'components/SyncSkipUnderPriority'
import Box from 'components/base/Box'
import Button from 'components/base/Button'
import ConfirmModal from 'components/base/Modal/ConfirmModal'
@ -73,7 +74,9 @@ class ResetButton extends PureComponent<Props, State> {
<IconTriangleWarning width={23} height={21} />
</IconWrapperCircle>
)}
/>
>
<SyncSkipUnderPriority priority={999} />
</ConfirmModal>
<ResetFallbackModal isOpened={fallbackOpened} onClose={this.closeFallback} />
</Fragment>

3
src/components/base/Modal/ConfirmModal.js

@ -29,6 +29,7 @@ type Props = {
analyticsName: string,
cancellable?: boolean,
centered?: boolean,
children?: *,
}
class ConfirmModal extends PureComponent<Props> {
@ -50,6 +51,7 @@ class ConfirmModal extends PureComponent<Props> {
t,
analyticsName,
centered,
children,
...props
} = this.props
@ -91,6 +93,7 @@ class ConfirmModal extends PureComponent<Props> {
<Box ff="Open Sans" color="smoke" fontSize={4} textAlign="center">
{desc}
</Box>
{children}
</Box>
)}
/>

4
src/components/layout/Default.js

@ -19,7 +19,7 @@ import Idler from 'components/Idler'
import AccountPage from 'components/AccountPage'
import DashboardPage from 'components/DashboardPage'
import ManagerPage from 'components/ManagerPage'
import ExchangePage from 'components/ExchangePage'
import PartnersPage from 'components/PartnersPage'
import DevToolsPage from 'components/DevToolsPage'
import SettingsPage from 'components/SettingsPage'
import KeyboardContent from 'components/KeyboardContent'
@ -117,7 +117,7 @@ class Default extends Component<Props> {
<Route path="/" exact component={DashboardPage} />
<Route path="/settings" component={SettingsPage} />
<Route path="/manager" component={ManagerPage} />
<Route path="/exchange" component={ExchangePage} />
<Route path="/partners" component={PartnersPage} />
<Route path="/account/:id" component={AccountPage} />
<Route path="/dev" component={DevToolsPage} />
</Main>

2
src/config/urls.js

@ -4,7 +4,7 @@ export const urls = {
liveHome: 'https://www.ledger.com/pages/ledger-live',
// Social
twitter: 'https://twitter.com/LedgerHQ',
twitter: 'https://twitter.com/Ledger',
github: 'https://github.com/LedgerHQ/ledger-live-desktop',
reddit: 'https://www.reddit.com/r/ledgerwallet/',

24
src/helpers/reset.js

@ -1,23 +1,21 @@
// @flow
import fs from 'fs'
import { shell, remote } from 'electron'
import path from 'path'
import rimraf from 'rimraf'
import resolveUserDataDirectory from 'helpers/resolveUserDataDirectory'
import { disable as disableDBMiddleware } from 'middlewares/db'
import db from 'helpers/db'
import { delay } from 'helpers/promise'
import killInternalProcess from 'commands/killInternalProcess'
import { DBNotReset } from '@ledgerhq/errors'
import libcoreReset from 'commands/libcoreReset'
async function resetLibcoreDatabase() {
await killInternalProcess.send().toPromise()
const dbpath = path.resolve(resolveUserDataDirectory(), 'sqlite/')
rimraf.sync(dbpath, { glob: false })
if (fs.existsSync(dbpath)) {
throw new DBNotReset()
}
async function resetLibcore() {
// we need to stop everything that is happening right now, like syncs
await killInternalProcess
.send()
.toPromise()
.catch(() => {}) // this is a normal error due to the crash of the process, we ignore it
// we can now ask libcore to reset itself
await libcoreReset.send().toPromise()
}
function reload() {
@ -30,7 +28,7 @@ export async function hardReset() {
disableDBMiddleware()
db.resetAll()
await delay(500)
await resetLibcoreDatabase()
await resetLibcore()
reload()
}
@ -38,7 +36,7 @@ export async function softReset({ cleanAccountsCache }: *) {
cleanAccountsCache()
await delay(500)
await db.cleanCache()
await resetLibcoreDatabase()
await resetLibcore()
reload()
}

34
src/icons/device/NanoX.js

@ -2,29 +2,15 @@
import React from 'react'
export default ({ size = 30, ...p }: { size: number }) => (
<svg viewBox="0 0 6 16" height={size} width={size} {...p}>
<defs>
<path
id="a"
d="M5.75 6.835a3.509 3.509 0 0 0-1.5-1.105V1.75h-2.5v3.98a3.509 3.509 0 0 0-1.5 1.105V1.666C.25.884.884.25 1.666.25h2.668c.782 0 1.416.634 1.416 1.416v5.169zm-1.5 7.415V9.5a1.25 1.25 0 1 0-2.5 0v4.75h2.5zM3 6.75A2.75 2.75 0 0 1 5.75 9.5v4.834c0 .782-.634 1.416-1.416 1.416H1.666A1.416 1.416 0 0 1 .25 14.334V9.5A2.75 2.75 0 0 1 3 6.75z"
/>
</defs>
<g fill="none" fillRule="evenodd">
<path
fill="#000"
fillRule="nonzero"
d="M5.75 6.835a3.509 3.509 0 0 0-1.5-1.105V1.75h-2.5v3.98a3.509 3.509 0 0 0-1.5 1.105V1.666C.25.884.884.25 1.666.25h2.668c.782 0 1.416.634 1.416 1.416v5.169zm-1.5 7.415V9.5a1.25 1.25 0 1 0-2.5 0v4.75h2.5zM3 6.75A2.75 2.75 0 0 1 5.75 9.5v4.834c0 .782-.634 1.416-1.416 1.416H1.666A1.416 1.416 0 0 1 .25 14.334V9.5A2.75 2.75 0 0 1 3 6.75z"
/>
<g>
<mask id="b" fill="#fff">
<use xlinkHref="#a" />
</mask>
<use fill="#FFF" xlinkHref="#a" />
<g fill="#FFF" mask="url(#b)">
<path d="M-5 0h16v16H-5z" />
</g>
</g>
</g>
const path = (
<path
fill="currentColor"
d="M6.667 14.543A4.181 4.181 0 0 0 5 13.223V1.667H1.667v11.556A4.181 4.181 0 0 0 0 14.543V1.2A1.2 1.2 0 0 1 1.2 0h4.267a1.2 1.2 0 0 1 1.2 1.2v13.343zm-3.334 4.403a.833.833 0 1 1 0-1.666.833.833 0 0 1 0 1.666zm0-14a.833.833 0 1 1 0-1.666.833.833 0 0 1 0 1.666zm-1.666 21.72H5v-9.623a1.667 1.667 0 1 0-3.333 0v9.624zM3.333 13.71a3.333 3.333 0 0 1 3.334 3.333v10.302a.988.988 0 0 1-.989.988H.988A.988.988 0 0 1 0 27.345V17.043a3.333 3.333 0 0 1 3.333-3.333z"
/>
)
export default ({ size, ...p }: { size: number }) => (
<svg viewBox="0 0 8 30" height={size} width={size} {...p}>
{path}
</svg>
)

30
src/icons/device/NanoXBanner.js

@ -0,0 +1,30 @@
// @flow
import React from 'react'
export default ({ size = 30, ...p }: { size: number }) => (
<svg viewBox="0 0 6 16" height={size} width={size} {...p}>
<defs>
<path
id="a"
d="M5.75 6.835a3.509 3.509 0 0 0-1.5-1.105V1.75h-2.5v3.98a3.509 3.509 0 0 0-1.5 1.105V1.666C.25.884.884.25 1.666.25h2.668c.782 0 1.416.634 1.416 1.416v5.169zm-1.5 7.415V9.5a1.25 1.25 0 1 0-2.5 0v4.75h2.5zM3 6.75A2.75 2.75 0 0 1 5.75 9.5v4.834c0 .782-.634 1.416-1.416 1.416H1.666A1.416 1.416 0 0 1 .25 14.334V9.5A2.75 2.75 0 0 1 3 6.75z"
/>
</defs>
<g fill="none" fillRule="evenodd">
<path
fill="#000"
fillRule="nonzero"
d="M5.75 6.835a3.509 3.509 0 0 0-1.5-1.105V1.75h-2.5v3.98a3.509 3.509 0 0 0-1.5 1.105V1.666C.25.884.884.25 1.666.25h2.668c.782 0 1.416.634 1.416 1.416v5.169zm-1.5 7.415V9.5a1.25 1.25 0 1 0-2.5 0v4.75h2.5zM3 6.75A2.75 2.75 0 0 1 5.75 9.5v4.834c0 .782-.634 1.416-1.416 1.416H1.666A1.416 1.416 0 0 1 .25 14.334V9.5A2.75 2.75 0 0 1 3 6.75z"
/>
<g>
<mask id="b" fill="#fff">
<use xlinkHref="#a" />
</mask>
<use fill="#FFF" xlinkHref="#a" />
<g fill="#FFF" mask="url(#b)">
<path d="M-5 0h16v16H-5z" />
</g>
</g>
</g>
</svg>
)

1
src/icons/device/index.js

@ -1,3 +1,4 @@
export Blue from './Blue'
export NanoS from './NanoS'
export NanoX from './NanoX'
export NanoXBanner from './NanoXBanner'

12
src/reducers/onboarding.js

@ -15,6 +15,8 @@ type Step = {
},
}
export type DeviceModelId = 'nanoX' | 'nanoS' | 'blue' | ''
export type OnboardingState = {
stepIndex: number,
stepName: string, // TODO: specify that the string comes from Steps type
@ -27,7 +29,7 @@ export type OnboardingState = {
genuineCheckUnavailable: ?Error,
displayErrorScreen: boolean,
},
isLedgerNano: boolean | null,
deviceModelId: DeviceModelId,
flowType: string,
onboardingRelaunched?: boolean,
}
@ -43,7 +45,7 @@ const initialState: OnboardingState = {
genuineCheckUnavailable: null,
displayErrorScreen: false,
},
isLedgerNano: null,
deviceModelId: '',
flowType: '',
onboardingRelaunched: false,
steps: [
@ -167,9 +169,9 @@ const handlers = {
...state,
flowType,
}),
ONBOARDING_SET_DEVICE_TYPE: (state: OnboardingState, { payload: isLedgerNano }) => ({
ONBOARDING_SET_DEVICE_TYPE: (state: OnboardingState, { payload: deviceModelId }) => ({
...state,
isLedgerNano,
deviceModelId,
}),
ONBOARDING_RELAUNCH: (state: OnboardingState, { payload: onboardingRelaunched }) => ({
...initialState,
@ -187,5 +189,5 @@ export const nextStep = createAction('ONBOARDING_NEXT_STEP')
export const prevStep = createAction('ONBOARDING_PREV_STEP')
export const jumpStep = createAction('ONBOARDING_JUMP_STEP')
export const updateGenuineCheck = createAction('UPDATE_GENUINE_CHECK')
export const isLedgerNano = createAction('ONBOARDING_SET_DEVICE_TYPE')
export const deviceModelId = createAction('ONBOARDING_SET_DEVICE_TYPE')
export const flowType = createAction('ONBOARDING_SET_FLOW_TYPE')

4
src/reducers/settings.js

@ -244,10 +244,12 @@ export const exportSettingsSelector = createSelector(
counterValueCurrencySelector,
counterValueExchangeSelector,
state => state.settings.currenciesSettings,
(counterValueCurrency, counterValueExchange, currenciesSettings) => ({
developerModeSelector,
(counterValueCurrency, counterValueExchange, currenciesSettings, developerModeEnabled) => ({
counterValue: counterValueCurrency.ticker,
counterValueExchange,
currenciesSettings,
developerModeEnabled,
}),
)

11
src/renderer/events.js

@ -51,14 +51,19 @@ export default ({ store }: { store: Object }) => {
function syncDevices() {
syncDeviceSub = listenDevices.send().subscribe(
({ device, type }) => {
({ device, deviceModel, type }) => {
if (device) {
const stateDevice = {
path: device.path,
modelId: deviceModel ? deviceModel.id : 'nanoS',
type: 'hid',
}
if (type === 'add') {
d.device('Device - add')
store.dispatch(addDevice(device))
store.dispatch(addDevice(stateDevice))
} else if (type === 'remove') {
d.device('Device - remove')
store.dispatch(removeDevice(device))
store.dispatch(removeDevice(stateDevice))
}
}
},

5
src/types/common.js

@ -1,11 +1,8 @@
// @flow
export type Device = {
manufacturer: string,
path: string,
product: string,
productId: string,
vendorId: string,
modelId: string,
}
// -------------------- Settings

53
static/i18n/en/app.json

@ -146,10 +146,10 @@
"messageIfSkipped": "Your {{currencyName}} address has not been confirmed on your Ledger device. Please verify it for optimal security."
},
"deviceConnect": {
"dashboard": "Navigate to the <1><0>{{managerAppName}}</0></1> on your device",
"dashboard": "Navigate to the <1>Dashboard</1> on your device",
"step1": "Connect and unlock your <1>Ledger device</1>",
"step2": "Navigate to the <1><0>{{managerAppName}}</0></1> app on your device",
"step3": "Allow <1><0>Ledger Manager</0></1> on your device"
"step3": "Allow <1>Ledger Manager</1> on your device"
},
"emptyState": {
"sidebar": {
@ -164,23 +164,27 @@
}
}
},
"exchange": {
"partners": {
"title": "Buy crypto",
"desc": "Try a few services we've selected",
"visitWebsite": "Visit website",
"coinhouse": "Coinhouse is a trusted platform for individuals and institutional investors looking to analyze, acquire, sell and securely store crypto assets.",
"btcdirect": "Buy and sell with the greatest of ease at Europe's leading cryptocurrency broker. Sign up for free and receive your coins within minutes! Our users rate us with an 8,7 on Trustpilot",
"changelly": "Changelly is a popular instant crypto asset exchange with 100+ coins and tokens listed.",
"changenow": "ChangeNOW is one of the leading custody-free instant exchange services",
"coinberry": "Coinberry is the most trusted crypto platform in Canada with better-than-bank security, best-in-class user interface and No Fee funding & withdraw. Pre-register to get early access to our platform if you are not a Canadian citizen.",
"coinhouse": "Coinhouse is a trusted platform for individuals and institutional investors looking to analyze, acquire, sell and securely store crypto assets.",
"coinmama": "Coinmama is a financial service that makes it fast, safe and fun to buy digital assets, anywhere in the world.",
"simplex": "Simplex is a EU licensed financial institution, providing a fraudless credit card payment solution.",
"paybis": "it is safe and easy to Buy Bitcoin with credit card from PayBis. Service operates in US, Canada, Germany, Russia and Saudi Arabia.",
"genesis": "Genesis is an institutional trading firm offering liquidity and borrow for digital currencies, including bitcoin, bitcoin cash, ethereum, ethereum classic, litecoin, and XRP.",
"kyberswap": "Fast, simple and secure token swap platform. Powered by Kyber Network's on-chain liquidity protocol.",
"luno": "Luno makes it safe and easy to buy, store and learn about cryptocurrencies like Bitcoin and Ethereum",
"paybis": "it is safe and easy to Buy Bitcoin with credit card from PayBis. Service operates in US, Canada, Germany, Russia and Saudi Arabia.",
"shapeshift": "ShapeShift is an online marketplace where users can buy and sell digital assets. It is a fast and secure way for the world to buy and sell digital assets, with no lengthy signup process, no counterparty risk, and no friction.",
"genesis": "Genesis is an institutional trading firm offering liquidity and borrow for digital currencies, including bitcoin, bitcoin cash, ethereum, ethereum classic, litecoin, and XRP.",
"kyberSwap": "Fast, simple and secure token swap platform. Powered by Kyber Network's on-chain liquidity protocol.",
"thorSwap": "ThorSwap is an instant, safe and fair crypto asset market powered by decentralized atomic swap technologies. It is the most convenient way to start trading, no registration or KYC for small amount transactions.",
"changeNow": "ChangeNOW is one of the leading custody-free instant exchange services",
"coinberry": "Coinberry is the most trusted crypto platform in Canada with better-than-bank security, best-in-class user interface and No Fee funding & withdraw. Pre-register to get early access to our platform if you are not a Canadian citizen.",
"btcDirect": "Buy and sell with the greatest of ease at Europe's leading cryptocurrency broker. Sign up for free and receive your coins within minutes! Our users rate us with an 8,7 on Trustpilot"
"simplex": "Simplex is a EU licensed financial institution, providing a fraudless credit card payment solution.",
"taxtoken": "Automated cryptocurrency tax and cost basis software for US citizens.",
"thorswap": "ThorSwap is an instant, safe and fair crypto asset market powered by decentralized atomic swap technologies. It is the most convenient way to start trading, no registration or KYC for small amount transactions.",
"bitpanda": "Bitpanda is Europe’s leading retail broker for buying and selling Bitcoin, Ethereum, IOTA and many more. Deposit money using your credit card, SOFORT-Transfer, NETELLER, and other options.",
"exmo": "Founded in 2013 and based in London, Kiev, Barcelona, and Moscow, EXMO is #1 exchange in Eastern Europe, and one of the world's largest global exchanges in volume and liquidity."
},
"genuinecheck": {
"modal": {
@ -255,8 +259,6 @@
},
"firmware": {
"installed": "Firmware version {{version}}",
"titleNano": "Ledger Nano S",
"titleBlue": "Ledger Blue",
"update": "Update",
"latest": "Firmware version {{version}} is available",
"disclaimerTitle": "You are about to install <1><0>firmware version {{version}}</0></1>.",
@ -566,13 +568,7 @@
}
},
"selectDevice": {
"title": "Select your device",
"ledgerNanoCard": {
"title": "Ledger Nano S"
},
"ledgerBlueCard": {
"title": "Ledger Blue"
}
"title": "Select your device"
},
"selectPIN": {
"disclaimer": {
@ -589,6 +585,12 @@
"step3": "Press the left or right button to select a digit. Press both buttons to validate.",
"step4": "Select ✓ to confirm your PIN code. Select ⬅ to erase a digit."
},
"nanoX": {
"step1": "Connect the Ledger Nano X to your computer.",
"step2": "Press both buttons to choose Set up as new device.",
"step3": "Press the left or right button to select a digit.",
"step4": "Select ✓ to confirm your PIN code. Select ⬅ to erase a digit."
},
"blue": {
"step1": "Connect the Ledger Blue to your computer.",
"step2": "Tap on <1><0>Configure as new device</0></1>.",
@ -605,6 +607,13 @@
"step3": "Press the left or right button to select a digit. Press both buttons to validate.",
"step4": "Select ✓ to confirm your PIN code. Select ⬅ to erase a digit."
},
"nanoX": {
"step1": "Connect your Ledger Nano X to your computer.",
"step2": "Press both buttons as instructed on your Ledger Nano X screen.",
"step3": "Press the left button to cancel Configure as new device.",
"step4": "Press the right button to select Restore configuration.",
"step5": "Choose a PIN code between 4 and 8 digits long."
},
"blue": {
"step1": "Connect the Ledger Blue to your computer.",
"step2": "Tap on <1><0>Restore configuration</0></1>.",
@ -934,4 +943,4 @@
"description": "Please contact Ledger Support"
}
}
}
}

0
static/images/ledger-nano-onb.svg → static/images/ledger-nano-s-onb.svg

Before

Width:  |  Height:  |  Size: 931 B

After

Width:  |  Height:  |  Size: 931 B

8
static/images/ledger-nano-x-onb.svg

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="76" viewBox="0 0 14 76">
<g fill="none" fill-rule="evenodd">
<path fill="#6490F1" fill-opacity=".1" stroke="#1D2028" stroke-width="1.5" d="M1.6.75a.85.85 0 0 0-.85.85v72.8c0 .47.38.85.85.85h10.8c.47 0 .85-.38.85-.85V1.6a.85.85 0 0 0-.85-.85H1.6z"/>
<path fill="#FFF" stroke="#1D2028" stroke-width="1.5" d="M7 33.321a6.25 6.25 0 0 0-6.25 6.25V74.4c0 .47.38.85.85.85h10.8c.47 0 .85-.38.85-.85V39.571A6.25 6.25 0 0 0 7 33.321z"/>
<ellipse cx="6.995" cy="39.835" fill="#FFF" stroke="#6490F1" stroke-width=".5" rx="3.295" ry="3.256"/>
<ellipse cx="6.993" cy="7.004" stroke="#6490F1" stroke-width=".5" rx="3.293" ry="3.254"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 731 B

BIN
static/images/logos/connectDevice.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
static/images/logos/exchanges/change-now.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

6
static/images/logos/exchanges/genesis.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
static/images/logos/exchanges/kyber-swap.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

14
static/images/logos/exchanges/luno.svg

@ -1,14 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="31" viewBox="0 0 128 31">
<defs>
<path id="a" d="M75.99.016v.003c-3.515.06-6.677 1.208-8.933 3.246-2.518 2.276-3.85 5.544-3.85 9.453v14.987c0 1.12.927 2.065 2.025 2.065 1.137 0 2.064-.927 2.064-2.52V12.465c.046-4.741 3.766-8.372 9.045-8.372h.024c5.3 0 9.02 3.63 9.067 8.83v14.782c0 1.138.926 2.065 2.065 2.065 1.097 0 2.023-.946 2.023-2.065V12.718c0-3.863-1.302-7.104-3.766-9.375-2.196-2.024-5.28-3.194-8.716-3.314l-.002-.007-.348-.004-.243-.002h-.454zm26.044 5.112c-2.69 2.804-4.17 6.54-4.17 10.52v.081c0 3.981 1.466 7.703 4.129 10.48 2.77 2.887 6.624 4.478 10.856 4.478 4.231 0 8.101-1.605 10.896-4.518 2.69-2.804 4.17-6.54 4.17-10.52v-.081c0-3.981-1.466-7.703-4.13-10.48C121.018 2.2 117.163.61 112.93.61c-4.231 0-8.101 1.605-10.896 4.518zm3.154 18.434c-1.973-2.082-3.059-4.892-3.059-7.914v-.08c0-6.333 4.609-11.108 10.72-11.108 2.991 0 5.74 1.163 7.742 3.275 1.972 2.082 3.059 4.892 3.059 7.913v.081c0 6.333-4.609 11.108-10.72 11.108-2.991 0-5.741-1.163-7.742-3.275zM.007 2.837v14.987c0 3.908 1.33 7.177 3.849 9.452 2.256 2.039 5.418 3.186 8.934 3.247v.003h.454l.243-.002.055-.001v.003h5.922a2.067 2.067 0 0 0 2.064-2.066c0-1.098-.945-2.026-2.064-2.026l-6.358.014c-5.26-.015-8.965-3.641-9.011-8.826V2.837A2.067 2.067 0 0 0 2.03.771C.933.772.007 1.718.007 2.837zm50.561.301V17.92c-.047 5.199-3.766 8.83-9.067 8.83h-.024c-5.28 0-8.999-3.631-9.046-8.826V3.138a2.067 2.067 0 0 0-2.064-2.066c-1.097 0-2.024.946-2.024 2.066v14.987c0 3.908 1.332 7.177 3.85 9.452 2.255 2.039 5.418 3.186 8.933 3.247v.003h.454l.244-.002.347-.004.002-.008c3.436-.12 6.52-1.29 8.717-3.313 2.464-2.271 3.766-5.513 3.766-9.375V3.138c0-1.12-.927-2.066-2.024-2.066a2.067 2.067 0 0 0-2.064 2.066z"/>
</defs>
<g fill="none" fill-rule="evenodd">
<path fill="#12326B" d="M19.464 26.592c1.119 0 2.064.927 2.064 2.025a2.067 2.067 0 0 1-2.064 2.066h-5.921v-.003l-.056.001-.243.002h-.454v-.003c-3.516-.06-6.678-1.208-8.934-3.246C1.338 25.158.006 21.89.006 17.98V2.994C.007 1.874.934.93 2.032.93c1.138 0 2.064.926 2.064 2.065V17.78c.046 5.184 3.75 8.81 9.011 8.826l6.358-.014zM52.632 1.23c1.097 0 2.024.946 2.024 2.065v14.987c0 3.863-1.302 7.104-3.766 9.375-2.196 2.024-5.28 3.194-8.717 3.314l-.001.007-.348.004-.244.002h-.454v-.003c-3.515-.06-6.678-1.208-8.934-3.246-2.518-2.276-3.849-5.544-3.849-9.453V3.295c0-1.12.927-2.065 2.024-2.065 1.138 0 2.064.927 2.064 2.065v14.786c.047 5.195 3.767 8.826 9.046 8.826h.024c5.3 0 9.02-3.63 9.067-8.83V3.295c0-1.138.926-2.065 2.064-2.065zm34.865 28.698a2.067 2.067 0 0 1-2.065-2.066V13.08c-.046-5.199-3.766-8.83-9.067-8.83h-.024c-5.279 0-8.999 3.631-9.046 8.372v14.785c0 1.594-.925 2.52-2.064 2.52-1.097 0-2.023-.945-2.023-2.065V12.875c0-3.908 1.33-7.177 3.849-9.452C69.313 1.384 72.475.237 75.99.176V.173h.454l.243.002.348.004.002.008c3.436.12 6.52 1.29 8.716 3.313 2.464 2.271 3.767 5.513 3.767 9.375v14.987c0 1.12-.927 2.066-2.024 2.066zm25.351.916c-4.23 0-8.086-1.59-10.855-4.478-2.663-2.777-4.13-6.499-4.13-10.48v-.08c0-3.981 1.481-7.717 4.17-10.52C104.83 2.372 108.7.768 112.93.768c4.232 0 8.087 1.59 10.856 4.477 2.663 2.777 4.13 6.5 4.13 10.48v.08c0 3.981-1.482 7.718-4.171 10.52-2.795 2.914-6.665 4.52-10.897 4.52zm0-26.227c-6.11 0-10.719 4.776-10.719 11.108v.08c0 3.022 1.086 5.833 3.059 7.914 2 2.112 4.75 3.276 7.742 3.276 6.111 0 10.72-4.776 10.72-11.109v-.08c0-3.021-1.087-5.832-3.059-7.914-2.001-2.112-4.75-3.275-7.743-3.275z"/>
<g transform="translate(0 .157)">
<mask id="b" fill="#fff">
<use xlink:href="#a"/>
</mask>
<path fill="#12326B" d="M-2.663 33.5h133.248V-2.657H-2.663z" mask="url(#b)"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

93
static/images/logos/exchanges/shapeshift.svg

@ -1,93 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="154" height="52" viewBox="0 0 154 52">
<defs>
<linearGradient id="a" x1="0%" y1="50%" y2="50%">
<stop offset="27%" stop-color="#5C769B"/>
<stop offset="100%" stop-color="#495F7D"/>
</linearGradient>
<linearGradient id="b" x1="100.08%" x2="44.136%" y1="-45.282%" y2="89.845%">
<stop offset="13%" stop-color="#314259"/>
<stop offset="38%" stop-color="#425774"/>
<stop offset="69%" stop-color="#5C769B"/>
<stop offset="79%" stop-color="#5A7498"/>
<stop offset="86%" stop-color="#546C8F"/>
<stop offset="93%" stop-color="#4A607F"/>
<stop offset="98%" stop-color="#3C4F69"/>
<stop offset="100%" stop-color="#374961"/>
</linearGradient>
<linearGradient id="c" x1="99.809%" x2="-4.606%" y1="63.342%" y2="7.408%">
<stop offset="0%" stop-color="#5C769B"/>
<stop offset="48%" stop-color="#5B7499"/>
<stop offset="69%" stop-color="#566F92"/>
<stop offset="85%" stop-color="#4F6685"/>
<stop offset="91%" stop-color="#4A607E"/>
</linearGradient>
<linearGradient id="d" x1="728.331%" x2="-348.488%" y1="50%" y2="50%">
<stop offset="25%" stop-color="#25344A"/>
<stop offset="41%" stop-color="#2C3D55"/>
<stop offset="68%" stop-color="#3F5471"/>
<stop offset="100%" stop-color="#5C769B"/>
</linearGradient>
<linearGradient id="e" x1="-653.906%" x2="455.58%" y1="49.996%" y2="49.996%">
<stop offset="25%" stop-color="#5C769B"/>
<stop offset="41%" stop-color="#556D90"/>
<stop offset="69%" stop-color="#425774"/>
<stop offset="100%" stop-color="#28384E"/>
</linearGradient>
<linearGradient id="f" x1="50.987%" x2="48.896%" y1="-209.612%" y2="236.046%">
<stop offset="1%" stop-color="#5C769B"/>
<stop offset="20%" stop-color="#587195"/>
<stop offset="45%" stop-color="#4D6485"/>
<stop offset="74%" stop-color="#3B4E6A"/>
<stop offset="100%" stop-color="#26354B"/>
</linearGradient>
<linearGradient id="g" x1="183.934%" x2="-71.265%" y1="-95.776%" y2="173.207%">
<stop offset="25%" stop-color="#5C769B"/>
<stop offset="41%" stop-color="#556E90"/>
<stop offset="69%" stop-color="#425774"/>
<stop offset="100%" stop-color="#27374C"/>
</linearGradient>
<linearGradient id="h" x1="-60.786%" x2="153.26%" y1="-60.281%" y2="146.989%">
<stop offset="25%" stop-color="#5C769B"/>
<stop offset="41%" stop-color="#556E90"/>
<stop offset="69%" stop-color="#425774"/>
<stop offset="100%" stop-color="#27374C"/>
</linearGradient>
<linearGradient id="i" x1="-19.379%" x2="154.799%" y1="31.605%" y2="103.778%">
<stop offset="27%" stop-color="#5C769B"/>
<stop offset="100%" stop-color="#495F7D"/>
</linearGradient>
<linearGradient id="j" x1="-71.29%" x2="149.246%" y1="-81.38%" y2="102.791%">
<stop offset="46%" stop-color="#5C769B" stop-opacity="0"/>
<stop offset="59%" stop-color="#597296" stop-opacity=".06"/>
<stop offset="71%" stop-color="#4E6586" stop-opacity=".23"/>
<stop offset="83%" stop-color="#3C506D" stop-opacity=".53"/>
<stop offset="95%" stop-color="#243349" stop-opacity=".94"/>
<stop offset="97%" stop-color="#202E43"/>
</linearGradient>
<linearGradient id="k" x1="50.156%" x2="50.156%" y1="296.046%" y2="-124.719%">
<stop offset="25%" stop-color="#5C769B"/>
<stop offset="41%" stop-color="#556E90"/>
<stop offset="69%" stop-color="#425774"/>
<stop offset="100%" stop-color="#27374C"/>
</linearGradient>
</defs>
<g fill="none" fill-rule="nonzero">
<path fill="#3B4E68" d="M41.192 29.674c-2.238 0-4.626.892-4.626 3.06 0 1.93 2.187 2.497 4.777 2.93 3.516.562 6.988 1.275 6.988 5.303-.025 4.001-3.797 5.301-7.164 5.301-3.118 0-6.084-1.147-7.442-4.129l1.81-1.07c1.132 2.115 3.494 3.134 5.657 3.134 2.136 0 4.982-.688 4.982-3.313.025-2.218-2.44-2.854-5.079-3.269-3.394-.535-6.686-1.325-6.686-4.944-.051-3.714 3.694-4.997 6.74-4.997 2.616 0 5.104.537 6.663 3.238l-1.66 1.04c-.965-1.544-3-2.257-4.96-2.284zM51.92 28.095v7.316c1.057-1.659 2.716-2.219 4.3-2.244 3.494 0 5.203 2.345 5.203 5.81v6.932h-2.036v-6.905c0-2.473-1.257-3.874-3.516-3.874-2.26 0-3.921 1.81-3.921 4.103v6.676h-2.065v-17.84h2.035v.026zM74.014 45.962l-.052-2.294c-.98 1.734-2.864 2.55-4.574 2.55-3.57 0-6.36-2.5-6.36-6.603 0-4.078 2.84-6.525 6.385-6.5 1.86 0 3.695.868 4.6 2.5l.026-2.295h2.009V45.91h-1.984l-.05.053zm-4.525-10.858c-2.465 0-4.45 1.783-4.45 4.588s1.985 4.606 4.45 4.606c5.983 0 5.983-9.228.025-9.228l-.025.034zM77.699 33.37h1.96l.1 2.422c.982-1.681 2.816-2.65 4.777-2.65 3.57.076 6.185 2.625 6.185 6.498 0 3.978-2.59 6.55-6.311 6.55-1.758 0-3.72-.763-4.7-2.547v8.208h-2.011v-18.48zm10.96 6.322c0-2.83-1.836-4.512-4.374-4.512-2.589 0-4.349 1.932-4.349 4.512 0 2.581 1.835 4.511 4.35 4.538 2.487 0 4.373-1.709 4.373-4.538zM104.021 43.897c-1.257 1.505-3.418 2.243-5.356 2.243-3.844 0-6.535-2.574-6.535-6.575 0-3.798 2.69-6.526 6.436-6.526 3.795 0 6.686 2.377 6.208 7.392H94.217c.226 2.319 2.111 3.772 4.5 3.772 1.408 0 3.116-.56 3.946-1.58l1.383 1.274h-.025zm-1.207-5.2c-.1-2.447-1.759-3.772-4.198-3.772-2.162 0-4.047 1.325-4.396 3.745h8.597l-.003.027z"/>
<path fill="#5C769B" d="M113.17 29.674c-2.237 0-4.626.892-4.626 3.06 0 1.93 2.188 2.497 4.777 2.93 3.517.562 6.988 1.275 6.988 5.303-.025 4.001-3.795 5.301-7.164 5.301-3.116 0-6.083-1.147-7.44-4.129l1.81-1.07c1.13 2.115 3.494 3.134 5.655 3.134 2.137 0 4.982-.688 4.982-3.313.025-2.218-2.438-2.854-5.078-3.269-3.398-.529-6.695-1.32-6.695-4.935-.05-3.715 3.695-4.997 6.74-4.997 2.614 0 5.103.537 6.661 3.238l-1.659 1.04c-.954-1.553-2.99-2.266-4.95-2.293zM123.9 28.095v7.316c1.055-1.659 2.716-2.219 4.3-2.244 3.493 0 5.203 2.345 5.203 5.81v6.932h-2.037v-6.905c0-2.473-1.257-3.874-3.517-3.874s-3.92 1.81-3.92 4.103v6.676h-2.065v-17.84h2.036v.026zM135.079 45.909h2.062v-12.41h-2.062v12.41zm1.056-14.31l-1.632-1.812 1.632-1.811 1.631 1.811-1.63 1.811zM140.99 45.936v-.024h-.025zM143.027 32.48c0-1.888.854-2.729 2.186-2.729h.077l.465-1.796a4.608 4.608 0 0 0-.586-.041c-2.614 0-4.173 1.681-4.173 4.562v.994h-2.444v1.835h2.438v10.604h2.037V35.308h2.466v-1.835h-2.466v-.994zM153.499 44.161c-.158.027-.318.041-.478.042-1.483 0-1.96-.942-1.96-2.42v-6.491h2.637V33.48h-2.62v-3.832l-2.06.23v3.602h-2.49v1.81h2.49v6.492c0 2.777 1.257 4.357 3.921 4.308.323-.01.644-.048.96-.116l-.4-1.814z"/>
<path fill="url(#a)" d="M.006 28.135L0 34.723l8.904 14.074 9.548 3.07 6.988-4.498z"/>
<path fill="url(#b)" d="M14.344 15.031L.02 27.781l19.965 11.654.074-24.02z"/>
<path fill="#4C6382" d="M12.304 22.916l7.698 20.844.055-19.68z"/>
<path fill="#3B4E68" d="M27.702 22.991l-7.7 20.77.055-19.68z"/>
<path fill="url(#c)" d="M33.827.012L26.186 4.08l-6.118 1.36L13.9 4.08 6.279 0l2.625 12.297-2.5 6.906 8.747 5.504 4.869 5.348v.05l.022-.025.023.025v-.05l4.87-5.348 8.762-5.5-2.487-6.9z"/>
<path fill="url(#d)" d="M33.827.012l-2.123 12.32 1.993 6.875-2.487-6.9z"/>
<path fill="url(#e)" d="M6.279 0l2.138 12.323-2.012 6.88 2.5-6.906z"/>
<path fill="url(#f)" d="M6.279 0l8.895 3.77h9.762L33.827.011 26.186 4.08l-6.118 1.36L13.9 4.08z"/>
<path fill="url(#g)" d="M8.904 12.297l-.442 1.23 9.23-8.617z"/>
<path fill="url(#h)" d="M31.21 12.308L22.461 4.91l9.17 8.562z"/>
<path fill="url(#i)" d="M.02 27.781l21.456 12.006 2.719 6.885-5.75 2.226-8.949-.945-9.481-13.23z"/>
<path fill="#FFF" d="M17.775 37.728L9.52 47.923l-.024.03 8.937 3.046.012.003 6.98-3.626.015-.007v-5.378z"/>
<path fill="url(#j)" d="M31.21 12.308L33.827.012 26.186 4.08l-3.725.83z"/>
<path fill="#FFF" d="M20.06 30.105l-2.431-2.698 2.43-2.698 2.431 2.698z"/>
<path fill="url(#k)" d="M19.822 5.386l.246.055.223-.05-.238 15.7z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

BIN
static/images/logos/exchanges/thor-swap.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

33
static/images/nano-x-error-onb.svg

@ -0,0 +1,33 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="379" height="42" viewBox="0 0 379 42">
<defs>
<linearGradient id="a" x1="50%" x2="50%" y1="0%" y2="100%">
<stop offset="0%"/>
<stop offset="100%" stop-color="#FFF"/>
</linearGradient>
<rect id="b" width="41.711" height="238.384" rx="4"/>
<path id="c" d="M5.773 5l2.541-2.541a.235.235 0 0 0 0-.332l-.441-.441a.235.235 0 0 0-.332 0L5 4.226l-2.541-2.54a.235.235 0 0 0-.332 0l-.441.441a.235.235 0 0 0 0 .332L4.226 5l-2.54 2.541a.235.235 0 0 0 0 .332l.441.441c.092.092.24.092.332 0L5 5.774l2.541 2.54c.092.092.24.092.332 0l.441-.441a.235.235 0 0 0 0-.332L5.774 5z"/>
</defs>
<g fill="none" fill-rule="evenodd">
<path stroke="#1D2027" stroke-width="2" d="M127.356 29a1 1 0 0 1-1 1H100.13a5 5 0 0 1-5-5v-8.486a5 5 0 0 1 5-5h26.225a1 1 0 0 1 1 1V29z"/>
<path stroke="#142533" stroke-width="2" d="M94.747 23.792H83.818v-6.436h10.93v6.436z"/>
<path stroke="#1D2027" stroke-width="2" d="M127.423 26.287V15.032l6.977.082a1 1 0 0 1 .988 1V25.381a1 1 0 0 1-1.012.988l-6.953-.082z"/>
<path fill="url(#a)" d="M6.836 53.925h1.616v82.65H6.836v-82.65zm5.657 0h1.616v82.65h-1.616v-82.65z" transform="matrix(0 -1 -1 0 137 31)"/>
<g transform="rotate(-90 84.5 -42.5)">
<use fill="#FFF" xlink:href="#b"/>
<rect width="39.711" height="236.384" x="1" y="1" fill="#FCE0E4" stroke="#142533" stroke-linejoin="square" stroke-width="2" rx="4"/>
<path fill="#FFF" stroke="#EA2E49" d="M10.6 44.5a1.1 1.1 0 0 0-1.1 1.1v50.8a1.1 1.1 0 0 0 1.1 1.1h20.8a1.1 1.1 0 0 0 1.1-1.1V45.6a1.1 1.1 0 0 0-1.1-1.1H10.6z"/>
<path fill="#FFF" stroke="#142533" stroke-width="2" d="M20.856 108.966C9.89 108.966 1 117.856 1 128.822v118.562a3 3 0 0 0 3 3h33.711a3 3 0 0 0 3-3V128.822c0-10.966-8.89-19.856-19.855-19.856z"/>
<ellipse cx="21.016" cy="129.123" stroke="#EA2E49" rx="10.57" ry="10.644"/>
<ellipse cx="21.016" cy="21.123" stroke="#EA2E49" rx="10.57" ry="10.644"/>
<g transform="translate(16 66)">
<mask id="d" fill="#fff">
<use xlink:href="#c"/>
</mask>
<use fill="#000" fill-rule="nonzero" xlink:href="#c"/>
<g fill="#EA2E49" mask="url(#d)">
<path d="M0 0h10v10H0z"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

24
static/images/select-pin-nano-x-onb.svg

@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="264" height="128" viewBox="0 0 264 128">
<defs>
<linearGradient id="a" x1="50%" x2="50%" y1="0%" y2="100%">
<stop offset="0%"/>
<stop offset="100%" stop-color="#FFF"/>
</linearGradient>
<path id="b" d="M91 0h34a4 4 0 0 1 4 4v118.144c0 11.519-9.337 20.856-20.856 20.856h-.288C96.337 143 87 133.663 87 122.144V4a4 4 0 0 1 4-4z"/>
</defs>
<g fill="none" fill-rule="evenodd">
<path stroke="#1D2027" stroke-width="2" d="M127.856 30.44a1 1 0 0 1-1 1H100.63a5 5 0 0 1-5-5v-8.486a5 5 0 0 1 5-5h26.225a1 1 0 0 1 1 1v16.485z"/>
<path stroke="#142533" stroke-width="2" d="M95.247 25.231H84.318v-6.435h10.93v6.435z"/>
<path stroke="#1D2027" stroke-width="2" d="M127.923 27.726V16.471l6.977.083a1 1 0 0 1 .988 1V26.82a1 1 0 0 1-1.012.988l-6.953-.083z"/>
<path fill="url(#a)" d="M6.836 53.925h1.616v82.65H6.836v-82.65zm5.657 0h1.616v82.65h-1.616v-82.65z" transform="matrix(0 -1 -1 0 137.5 32.44)"/>
<g transform="rotate(-90 125.09 4.475)">
<use fill="#FFF" xlink:href="#b"/>
<path fill="#6490F1" fill-opacity=".15" stroke="#142533" stroke-linejoin="square" stroke-width="2" d="M91 1a3 3 0 0 0-3 3v118.144C88 133.11 96.89 142 107.856 142h.288C119.11 142 128 133.11 128 122.144V4a3 3 0 0 0-3-3H91z"/>
<path fill="#FFF" stroke="#6490F1" d="M97.6 41.5a1.1 1.1 0 0 0-1.1 1.1v52.8a1.1 1.1 0 0 0 1.1 1.1h20.8a1.1 1.1 0 0 0 1.1-1.1V42.6a1.1 1.1 0 0 0-1.1-1.1H97.6z"/>
<path fill="#6490F1" d="M105.5 51h5a.5.5 0 0 1 .5.5v34a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1-.5-.5v-34a.5.5 0 0 1 .5-.5zm1.238 3.042l.774.512v.013l-.774.505.341.466.722-.577h.013l.243.899.551-.177-.328-.88.932.053v-.597l-.932.046.328-.873-.551-.17-.243.892h-.013l-.722-.584-.34.472zm0 3.908l.774.512v.013l-.774.505.341.466.722-.578h.013l.243.9.551-.178-.328-.88.932.053v-.597l-.932.046.328-.872-.551-.17-.243.891h-.013l-.722-.584-.34.473zm0 3.907l.774.512v.013l-.774.505.341.466.722-.577h.013l.243.899.551-.178-.328-.879.932.053v-.597l-.932.046.328-.873-.551-.17-.243.892h-.013l-.722-.584-.34.472zm0 3.908l.774.511v.014l-.774.505.341.466.722-.578h.013l.243.899.551-.177-.328-.88.932.053v-.597l-.932.046.328-.872-.551-.171-.243.892h-.013l-.722-.584-.34.473zm0 3.907l.774.512v.013l-.774.505.341.466.722-.577h.013l.243.898.551-.177-.328-.879.932.053v-.597l-.932.046.328-.873-.551-.17-.243.892h-.013l-.722-.584-.34.472zm0 3.908l.774.511v.013l-.774.506.341.465.722-.577h.013l.243.899.551-.177-.328-.88.932.053v-.597l-.932.046.328-.873-.551-.17-.243.892h-.013l-.722-.584-.34.473zm0 3.907l.774.512v.013l-.774.505.341.466.722-.578h.013l.243.9.551-.178-.328-.879.932.052v-.597l-.932.046.328-.872-.551-.17-.243.891h-.013l-.722-.583-.34.472zm0 3.907l.774.512v.013l-.774.505.341.466.722-.577h.013l.243.899.551-.177-.328-.88.932.053v-.597l-.932.046.328-.873-.551-.17-.243.892h-.013l-.722-.584-.34.472z"/>
<path fill="#FFF" stroke="#142533" stroke-width="2" d="M123.166 135.105c7.049-8.4 5.953-20.925-2.447-27.974l-90.824-76.21a3 3 0 0 0-4.227.37L4 57.115a3 3 0 0 0 .37 4.227l90.824 76.21c8.4 7.049 20.924 5.953 27.973-2.447z"/>
<ellipse cx="108.016" cy="122.123" stroke="#6490F1" rx="10.57" ry="10.644"/>
<ellipse cx="108.016" cy="22.123" stroke="#6490F1" rx="10.57" ry="10.644"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

90
yarn.lock

@ -1689,7 +1689,7 @@
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.39.0.tgz#10b9889f78df94ce36a4b34d9a3a45aac77be0e9"
integrity sha512-kBr2rnoYDACRCxTLtEufE4oCvYj6vx2oFWVVjwskBxYsF5LC9R8Mbg5C4GgvDweiWW4Io8HA9p9jCsOfdCDygg==
"@ledgerhq/hw-app-btc@^4.35.0", "@ledgerhq/hw-app-btc@^4.39.0":
"@ledgerhq/hw-app-btc@^4.39.0":
version "4.39.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.39.0.tgz#5b564e683a43a50002579834ec54aa790fde35f1"
integrity sha512-xPOtoIgsErycMFTKHb0yHLqlKn0C+9msLBsA1zRPNsWMdxEEBO5pzFVmn5ha1j3q/73yeICHlcB4KZcTb7CShA==
@ -1697,14 +1697,14 @@
"@ledgerhq/hw-transport" "^4.39.0"
create-hash "^1.1.3"
"@ledgerhq/hw-app-eth@^4.35.0", "@ledgerhq/hw-app-eth@^4.39.0":
"@ledgerhq/hw-app-eth@^4.39.0":
version "4.39.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.39.0.tgz#3cbba1f1650665c4c29c7b9fa246cb2360495867"
integrity sha512-IKPcLTcGohh/S6Z1LaAfn2pGyxfT6xu958/xV+5H4a3Ej0CWKaxcno4FkhaxH4OiViF0F5SEFzxtH+UntH2jdg==
dependencies:
"@ledgerhq/hw-transport" "^4.39.0"
"@ledgerhq/hw-app-xrp@^4.35.0", "@ledgerhq/hw-app-xrp@^4.39.0":
"@ledgerhq/hw-app-xrp@^4.39.0":
version "4.39.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-xrp/-/hw-app-xrp-4.39.0.tgz#cc399649f17873778e34bcde16f488faef3117e5"
integrity sha512-lbrG7AhQdJzt/zhu0G5yfC2t4zlytWuzbNLrPp/VQKJJPUKsC98H81pmfMzn1lFBdm8frmBVUW6reN5p7wDS2Q==
@ -1712,17 +1712,19 @@
"@ledgerhq/hw-transport" "^4.39.0"
bip32-path "0.4.2"
"@ledgerhq/hw-transport-node-hid@^4.35.0":
version "4.35.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.35.0.tgz#0eba08e5edd14a8c779ebaf73ec21976ee5f112e"
integrity sha512-Otnymk9B7qCEfjych/SvTvJsMM+DqyoB0saEwL80ukjuGFqMunecrG5w8nC4aCc169IVz70Spkg2uU90TBUCuw==
"@ledgerhq/hw-transport-node-hid@^4.40.0":
version "4.40.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.40.0.tgz#7f35194f94e20374e1bd6a04e5299032c5e81b6c"
integrity sha512-Nxp2Ys5lxgWTUG/A+W7O3nemkIBigW0LSJI6QrCDdLDg7deU+Zp6QA/CDS95BLijqi5m0AqKE2U4IyQh4OFnhQ==
dependencies:
"@ledgerhq/hw-transport" "^4.35.0"
"@ledgerhq/devices" "^4.39.0"
"@ledgerhq/errors" "^4.39.0"
"@ledgerhq/hw-transport" "^4.39.0"
lodash "^4.17.11"
node-hid "^0.7.2"
usb "^1.3.3"
node-hid "^0.7.6"
usb "^1.5.0"
"@ledgerhq/hw-transport@^4.21.0", "@ledgerhq/hw-transport@^4.35.0", "@ledgerhq/hw-transport@^4.39.0":
"@ledgerhq/hw-transport@^4.21.0", "@ledgerhq/hw-transport@^4.39.0":
version "4.39.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.39.0.tgz#602c6ea3fef56d1df205274ea742b4cf85613f6c"
integrity sha512-XkVAy2SFRDdE3qQGGVxB7RQdsdIx1fcoRNReU7NQXK59fYqxue+ZoiGtynEoHq9RKMg8EBG2kBXSVEh1iPdOlA==
@ -1731,10 +1733,10 @@
"@ledgerhq/errors" "^4.39.0"
events "^3.0.0"
"@ledgerhq/ledger-core@2.0.0-rc.16":
version "2.0.0-rc.16"
resolved "https://registry.yarnpkg.com/@ledgerhq/ledger-core/-/ledger-core-2.0.0-rc.16.tgz#51f141c0143edb020e38855bf2e2619e3446e74f"
integrity sha512-gmbeXRBg4NSqzH6+EajYTzaQlwN5ugaN1nH0SI6BvRqMfcorxNRE8byfh3F2u+7TNchBW72vOZnKPDShaR9/pQ==
"@ledgerhq/ledger-core@2.0.0-rc.21":
version "2.0.0-rc.21"
resolved "https://registry.yarnpkg.com/@ledgerhq/ledger-core/-/ledger-core-2.0.0-rc.21.tgz#f9e48cf162150ef3d5089ac19e9effcef4626697"
integrity sha512-DqBY1D95wz3a56k8bx7e8YhTsVake/4ZBxH5RgUnXl4OQYRQNKyrtqt94yKvYi+JkRqtU2z60XgB5mo58jaq+w==
dependencies:
bindings "^1.3.0"
nan "^2.6.2"
@ -4186,6 +4188,13 @@ bindings@^1.3.0:
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz#21fc7c6d67c18516ec5aaa2815b145ff77b26ea5"
integrity sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==
bindings@^1.3.1:
version "1.4.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.4.0.tgz#909efa49f2ebe07ecd3cb136778f665052040127"
integrity sha512-7znEVX22Djn+nYjxCWKDne0RRloa9XfYa84yk3s+HkE3LpDYZmhArYr9O9huBoHY3/oXispx5LorIX7Sl2CgSQ==
dependencies:
file-uri-to-path "1.0.0"
bip32-path@0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/bip32-path/-/bip32-path-0.4.2.tgz#5db0416ad6822712f077836e2557b8697c0c7c99"
@ -7866,6 +7875,11 @@ file-loader@^1.1.11:
loader-utils "^1.0.2"
schema-utils "^0.4.5"
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
filename-regex@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
@ -11352,16 +11366,21 @@ mute-stream@0.0.7:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
nan@^2.10.0, nan@^2.8.0:
version "2.12.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.0.tgz#9d443fdb5e13a20770cc5e602eee59760a685885"
integrity sha512-zT5nC0JhbljmyEf+Z456nvm7iO7XgRV2hYxoBtPpnyp+0Q4aCoP6uWNn76v/I6k2kCYNLWqWbwBWQcjsNI/bjw==
nan@^2.12.1:
version "2.12.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
nan@^2.2.1, nan@^2.6.2, nan@^2.9.2:
version "2.10.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==
nan@^2.8.0:
version "2.12.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.0.tgz#9d443fdb5e13a20770cc5e602eee59760a685885"
integrity sha512-zT5nC0JhbljmyEf+Z456nvm7iO7XgRV2hYxoBtPpnyp+0Q4aCoP6uWNn76v/I6k2kCYNLWqWbwBWQcjsNI/bjw==
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@ -11439,6 +11458,13 @@ node-abi@^2.2.0:
dependencies:
semver "^5.4.1"
node-abi@^2.7.0:
version "2.7.1"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.7.1.tgz#a8997ae91176a5fbaa455b194976e32683cda643"
integrity sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw==
dependencies:
semver "^5.4.1"
node-dir@0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d"
@ -11487,14 +11513,14 @@ node-gyp@^3.6.0:
tar "^2.0.0"
which "1"
node-hid@^0.7.2:
version "0.7.4"
resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.4.tgz#2db109acee654b56bf518ffb3fd92cf9cd0647c1"
integrity sha512-gvgNDPoszObn7avIDYMUvVv1T0xQB4/CZFJWckra/LXAc0qHYho4M1LCnCKlLIocL2R5/3qGv0J4AjRMdwgjxg==
node-hid@^0.7.6:
version "0.7.6"
resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.6.tgz#61523694f1111d209fca55bb704732dad029f3bc"
integrity sha512-cjbjL1CmOpImKQrqkvQKZUWuzvofwECZQ50zoih5vtPRowIZ4TFJDTN3tJYfVhbQYM9PGqDFXLcTILjx9EPvzw==
dependencies:
bindings "^1.3.0"
nan "^2.10.0"
prebuild-install "^5.2.1"
bindings "^1.3.1"
nan "^2.12.1"
prebuild-install "^5.2.2"
node-int64@^0.4.0:
version "0.4.0"
@ -12791,10 +12817,10 @@ prebuild-install@^2.0.0:
tunnel-agent "^0.6.0"
which-pm-runs "^1.0.0"
prebuild-install@^5.2.1:
version "5.2.2"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.2.tgz#237888f21bfda441d0ee5f5612484390bccd4046"
integrity sha512-4e8VJnP3zJdZv/uP0eNWmr2r9urp4NECw7Mt1OSAi3rcLrbBRxGiAkfUFtre2MhQ5wfREAjRV+K1gubvs/GPsA==
prebuild-install@^5.2.2:
version "5.2.4"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.4.tgz#8cc41a217ef778a31d3a876fe6668d05406db750"
integrity sha512-CG3JnpTZXdmr92GW4zbcba4jkDha6uHraJ7hW4Fn8j0mExxwOKK20hqho8ZuBDCKYCHYIkFM1P2jhtG+KpP4fg==
dependencies:
detect-libc "^1.0.3"
expand-template "^2.0.3"
@ -12802,7 +12828,7 @@ prebuild-install@^5.2.1:
minimist "^1.2.0"
mkdirp "^0.5.1"
napi-build-utils "^1.0.1"
node-abi "^2.2.0"
node-abi "^2.7.0"
noop-logger "^0.1.1"
npmlog "^4.0.1"
os-homedir "^1.0.1"
@ -16226,7 +16252,7 @@ url@^0.11.0, url@~0.11.0:
punycode "1.3.2"
querystring "0.2.0"
usb@^1.3.3:
usb@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/usb/-/usb-1.5.0.tgz#3e07b23c6dacf06a7c8801ae913926702a818218"
integrity sha512-/0stiQEmweuO2BKv2avzQQ8ypDUjo4Osz5sSEi+d0F4Rc+ddX1xED3uf4Tkelc1eADlfn0JQZYHP0bI7CNDA0Q==

Loading…
Cancel
Save