diff --git a/package.json b/package.json
index 52dc402b..2b3bc8b5 100644
--- a/package.json
+++ b/package.json
@@ -38,8 +38,8 @@
"@ledgerhq/hw-app-xrp": "^4.13.0",
"@ledgerhq/hw-transport": "^4.13.0",
"@ledgerhq/hw-transport-node-hid": "4.22.0",
- "@ledgerhq/ledger-core": "2.0.0-rc.6",
- "@ledgerhq/live-common": "^3.4.0",
+ "@ledgerhq/ledger-core": "2.0.0-rc.7",
+ "@ledgerhq/live-common": "^3.5.1",
"animated": "^0.2.2",
"async": "^2.6.1",
"axios": "^0.18.0",
diff --git a/src/components/EnsureDeviceApp.js b/src/components/EnsureDeviceApp.js
index 6bb0e89c..c453af7d 100644
--- a/src/components/EnsureDeviceApp.js
+++ b/src/components/EnsureDeviceApp.js
@@ -20,7 +20,7 @@ import IconUsb from 'icons/Usb'
import type { Device } from 'types/common'
-import { WrongDeviceForAccount, CantOpenDevice, BtcUnmatchedApp } from 'config/errors'
+import { WrongDeviceForAccount, CantOpenDevice, UpdateYourApp } from 'config/errors'
import { getCurrentDevice } from 'reducers/devices'
const usbIcon =
@@ -61,10 +61,10 @@ class EnsureDeviceApp extends Component<{
},
{
shouldThrow: (err: Error) => {
- const isWrongApp = err instanceof BtcUnmatchedApp
const isWrongDevice = err instanceof WrongDeviceForAccount
const isCantOpenDevice = err instanceof CantOpenDevice
- return isWrongApp || isWrongDevice || isCantOpenDevice
+ const isUpdateYourApp = err instanceof UpdateYourApp
+ return isWrongDevice || isCantOpenDevice || isUpdateYourApp
},
},
)
diff --git a/src/config/errors.js b/src/config/errors.js
index 227e0530..f6e4a81c 100644
--- a/src/config/errors.js
+++ b/src/config/errors.js
@@ -33,6 +33,7 @@ export const NotEnoughBalance = createCustomErrorClass('NotEnoughBalance')
export const PasswordsDontMatchError = createCustomErrorClass('PasswordsDontMatch')
export const PasswordIncorrectError = createCustomErrorClass('PasswordIncorrect')
export const TimeoutTagged = createCustomErrorClass('TimeoutTagged')
+export const UpdateYourApp = createCustomErrorClass('UpdateYourApp')
export const UserRefusedAddress = createCustomErrorClass('UserRefusedAddress')
export const UserRefusedFirmwareUpdate = createCustomErrorClass('UserRefusedFirmwareUpdate')
export const UserRefusedOnDevice = createCustomErrorClass('UserRefusedOnDevice') // TODO rename because it's just for transaction refusal
diff --git a/src/helpers/errors.js b/src/helpers/errors.js
index 5b6221ab..22436e4b 100644
--- a/src/helpers/errors.js
+++ b/src/helpers/errors.js
@@ -6,10 +6,10 @@ const errorClasses = {}
export const createCustomErrorClass = (name: string): Class => {
const C = function CustomError(message?: string, fields?: Object) {
+ Object.assign(this, fields)
this.name = name
this.message = message || name
this.stack = new Error().stack
- Object.assign(this, fields)
}
// $FlowFixMe
C.prototype = new Error()
diff --git a/src/helpers/getAddressForCurrency/btc.js b/src/helpers/getAddressForCurrency/btc.js
index 8155a25d..69524069 100644
--- a/src/helpers/getAddressForCurrency/btc.js
+++ b/src/helpers/getAddressForCurrency/btc.js
@@ -3,9 +3,13 @@
import type { CryptoCurrency } from '@ledgerhq/live-common/lib/types'
import Btc from '@ledgerhq/hw-app-btc'
import type Transport from '@ledgerhq/hw-transport'
-import { BtcUnmatchedApp } from 'config/errors'
+import { BtcUnmatchedApp, UpdateYourApp } from 'config/errors'
import getBitcoinLikeInfo from '../devices/getBitcoinLikeInfo'
+const oldP2SH = {
+ digibyte: 5,
+}
+
export default async (
transport: Transport<*>,
currency: CryptoCurrency,
@@ -25,6 +29,13 @@ export default async (
if (bitcoinLikeInfo) {
const { P2SH, P2PKH } = await getBitcoinLikeInfo(transport)
if (P2SH !== bitcoinLikeInfo.P2SH || P2PKH !== bitcoinLikeInfo.P2PKH) {
+ if (
+ currency.id in oldP2SH &&
+ P2SH === oldP2SH[currency.id] &&
+ P2PKH === bitcoinLikeInfo.P2PKH
+ ) {
+ throw new UpdateYourApp(`UpdateYourApp ${currency.id}`, currency)
+ }
throw new BtcUnmatchedApp(`BtcUnmatchedApp ${currency.id}`, currency)
}
}
diff --git a/static/i18n/en/errors.json b/static/i18n/en/errors.json
index 2034612e..043c7038 100644
--- a/static/i18n/en/errors.json
+++ b/static/i18n/en/errors.json
@@ -139,6 +139,10 @@
"title": "Receive address rejected",
"description": "Please try again or contact Ledger Support"
},
+ "UpdateYourApp": {
+ "title": "App update required. Uninstall and reinstall the {{managerAppName}} app in the Manager",
+ "description": null
+ },
"WebsocketConnectionError": {
"title": "Sorry, try again (websocket error).",
"description": null
diff --git a/yarn.lock b/yarn.lock
index 295b54d4..71c73832 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1536,9 +1536,9 @@
dependencies:
events "^2.0.0"
-"@ledgerhq/ledger-core@2.0.0-rc.6":
- version "2.0.0-rc.6"
- resolved "https://registry.yarnpkg.com/@ledgerhq/ledger-core/-/ledger-core-2.0.0-rc.6.tgz#a08c84bd91c680cd731e1030ce081a9b568a2c47"
+"@ledgerhq/ledger-core@2.0.0-rc.7":
+ version "2.0.0-rc.7"
+ resolved "https://registry.yarnpkg.com/@ledgerhq/ledger-core/-/ledger-core-2.0.0-rc.7.tgz#36a2573f01a1e19c51c6e39692e6b0f8be6c3a77"
dependencies:
"@ledgerhq/hw-app-btc" "^4.7.3"
"@ledgerhq/hw-transport-node-hid" "^4.7.6"
@@ -1549,9 +1549,9 @@
npm "^5.7.1"
prebuild-install "^2.2.2"
-"@ledgerhq/live-common@^3.4.0":
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/live-common/-/live-common-3.4.0.tgz#49a9f8865d2e3ea898cfba15d69bdaf32c949f80"
+"@ledgerhq/live-common@^3.5.1":
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/@ledgerhq/live-common/-/live-common-3.5.1.tgz#dab3eb061f361999a9e04ef564808831faac61ea"
dependencies:
axios "^0.18.0"
bignumber.js "^7.2.1"