diff --git a/android/app/build.gradle b/android/app/build.gradle
index 4f0bd7f8d..c32fc9a93 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -98,8 +98,8 @@ android {
applicationId "io.hexawallet.keeper"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 588
- versionName "2.5.9"
+ versionCode 590
+ versionName "2.5.10"
missingDimensionStrategy 'react-native-camera', 'general'
missingDimensionStrategy 'store', 'play'
multiDexEnabled true
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 9beecd85b..c6b71c65f 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1332,8 +1332,27 @@ PODS:
- React-Core
- react-native-document-picker (8.2.2):
- React-Core
- - react-native-get-random-values (1.8.0):
+ - react-native-get-random-values (2.0.0):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.11.18.00)
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
- react-native-hce (0.2.0):
- React
- react-native-html-to-pdf (0.12.0):
@@ -1712,7 +1731,7 @@ PODS:
- Yoga
- RNLocalize (2.2.2):
- React-Core
- - RNQrGenerator (1.4.4):
+ - RNQrGenerator (1.4.5):
- React
- ZXingObjC
- RNReanimated (3.17.0):
@@ -1891,11 +1910,11 @@ PODS:
- SDWebImage/Core (~> 5.10)
- Sentry/HybridSDK (8.41.0)
- SocketRocket (0.7.1)
- - VisionCamera (4.7.2):
- - VisionCamera/Core (= 4.7.2)
- - VisionCamera/React (= 4.7.2)
- - VisionCamera/Core (4.7.2)
- - VisionCamera/React (4.7.2):
+ - VisionCamera (4.7.3):
+ - VisionCamera/Core (= 4.7.3)
+ - VisionCamera/React (= 4.7.3)
+ - VisionCamera/Core (4.7.3)
+ - VisionCamera/React (4.7.3):
- React-Core
- Yoga (0.0.0)
- ZXingObjC (3.6.9):
@@ -2319,7 +2338,7 @@ SPEC CHECKSUMS:
react-native-config: 8e425892a531627c52db765be3088185cb871e19
react-native-contacts: f551920b74ebfc5f7f6df307495f085e504a4369
react-native-document-picker: a338165804b1a14c8e408448115dc0edfd7b73ca
- react-native-get-random-values: 0fd2b6a3129988d701d10e30f0622d5f039531bc
+ react-native-get-random-values: f59032ad9c14f378130e6570dc86ce168959fe96
react-native-hce: 164e785abe2648edac12934203f55dc785bb1c0b
react-native-html-to-pdf: 7a49e6c58ac5221bcc093027b195f4b214f27a9d
react-native-image-picker: 1f5318beec2ebed6695454ffb9bea8c4152f1598
@@ -2371,7 +2390,7 @@ SPEC CHECKSUMS:
RNIap: 66eb29da8e992696071182f91b89e5bffa85b4a2
RNKeychain: 8024819eb861575c8e1bdcfc6e02c2b947ed16f7
RNLocalize: 19917c3f32cf6386f7d2957a638a4281669cae57
- RNQrGenerator: 95feb09b4b2ed65f3a4afe795a20beed4b134ab5
+ RNQrGenerator: b467624cdcb0e88108a8b4ca74c94b0978efa265
RNReanimated: 6e7f7b3e9bf83adb6cf60e713e2d1d9438cb5437
RNScreens: 96fe858d87d26c3f46f0696f9e8824ce33a05aa7
RNSentry: cccb4a5cbe42c46f119b102475abe5dc74712833
@@ -2381,10 +2400,10 @@ SPEC CHECKSUMS:
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
Sentry: 54d0fe6c0df448497c8ed4cce66ccf7027e1823e
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
- VisionCamera: 30b358b807324c692064f78385e9a732ce1bebfe
+ VisionCamera: 7187b3dac1ff3071234ead959ce311875748e14f
Yoga: 92f3bb322c40a86b7233b815854730442e01b8c4
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
PODFILE CHECKSUM: e1bd49dc88eaef529a830a07581f7b6b3479d3ac
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/ios/hexa_keeper.xcodeproj/project.pbxproj b/ios/hexa_keeper.xcodeproj/project.pbxproj
index 731ef0a77..cb6fdd711 100644
--- a/ios/hexa_keeper.xcodeproj/project.pbxproj
+++ b/ios/hexa_keeper.xcodeproj/project.pbxproj
@@ -749,7 +749,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 588;
+ CURRENT_PROJECT_VERSION = 590;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = Y5TCB759QL;
ENABLE_BITCODE = NO;
@@ -851,7 +851,7 @@
"$(inherited)",
"\"$(SRCROOT)\"",
);
- MARKETING_VERSION = 2.5.9;
+ MARKETING_VERSION = 2.5.10;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -879,7 +879,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 588;
+ CURRENT_PROJECT_VERSION = 590;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = Y5TCB759QL;
HEADER_SEARCH_PATHS = (
@@ -980,7 +980,7 @@
"$(inherited)",
"\"$(SRCROOT)\"",
);
- MARKETING_VERSION = 2.5.9;
+ MARKETING_VERSION = 2.5.10;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -1150,7 +1150,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 588;
+ CURRENT_PROJECT_VERSION = 590;
DEVELOPMENT_TEAM = Y5TCB759QL;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = Y5TCB759QL;
ENABLE_BITCODE = NO;
@@ -1253,7 +1253,7 @@
"$(PROJECT_DIR)",
"\"$(SRCROOT)\"",
);
- MARKETING_VERSION = 2.5.9;
+ MARKETING_VERSION = 2.5.10;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -1281,7 +1281,7 @@
CODE_SIGN_ENTITLEMENTS = hexa_keeper_dev.entitlements;
CODE_SIGN_IDENTITY = "Apple Distribution";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
- CURRENT_PROJECT_VERSION = 588;
+ CURRENT_PROJECT_VERSION = 590;
DEVELOPMENT_TEAM = Y5TCB759QL;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = Y5TCB759QL;
HEADER_SEARCH_PATHS = (
@@ -1383,7 +1383,7 @@
"$(PROJECT_DIR)",
"\"$(SRCROOT)\"",
);
- MARKETING_VERSION = 2.5.9;
+ MARKETING_VERSION = 2.5.10;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
diff --git a/ios/hexa_keeper/Info.plist b/ios/hexa_keeper/Info.plist
index 7f52bd8d4..86c03c42f 100644
--- a/ios/hexa_keeper/Info.plist
+++ b/ios/hexa_keeper/Info.plist
@@ -36,7 +36,7 @@
CFBundleVersion
- 588
+ 590
LSApplicationQueriesSchemes
itms-apps
diff --git a/ios/hexa_keeperTests/Info.plist b/ios/hexa_keeperTests/Info.plist
index 9cf660f42..67af1df88 100644
--- a/ios/hexa_keeperTests/Info.plist
+++ b/ios/hexa_keeperTests/Info.plist
@@ -19,6 +19,6 @@
CFBundleSignature
????
CFBundleVersion
- 588
+ 590
diff --git a/ios/hexa_keeper_dev-Info.plist b/ios/hexa_keeper_dev-Info.plist
index d97e1821a..3413ca61a 100644
--- a/ios/hexa_keeper_dev-Info.plist
+++ b/ios/hexa_keeper_dev-Info.plist
@@ -36,7 +36,7 @@
CFBundleVersion
- 588
+ 590
LSApplicationQueriesSchemes
itms-apps
diff --git a/package.json b/package.json
index 14b4067f1..35db7552d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "hexa_keeper",
- "version": "2.5.9",
+ "version": "2.5.10",
"private": true,
"scripts": {
"ios": "npx react-native run-ios --scheme=hexa_keeper_dev --simulator 'iPhone 16' ",
@@ -118,7 +118,7 @@
"redux-persist": "6.0.0",
"redux-saga": "1.1.3",
"rn-qr-generator": "^1.4.4",
- "satochip-react-native": "git+https://github.com/Toporin/satochip-react-native.git#7ce6606613ab8d244e3d0ace56d57d11c141e480",
+ "satochip-react-native": "git+https://github.com/Toporin/satochip-react-native.git#1076e7c097571d561b5b903f31c6337455def19e",
"semver": "7.3.8",
"socket.io-client": "4.5.4",
"stream": "0.0.2",
@@ -194,4 +194,4 @@
"engines": {
"node": ">=18"
}
-}
+}
\ No newline at end of file
diff --git a/src/hardware/satochip/index.ts b/src/hardware/satochip/index.ts
index 4b76a8681..5d44b5a77 100644
--- a/src/hardware/satochip/index.ts
+++ b/src/hardware/satochip/index.ts
@@ -81,7 +81,7 @@ export const getCardInfo = async (card: SatochipCard, pin: string = null) => {
return {
setupDone: false,
isSeeded: false,
- isAuthentic: false,
+ isAuthentic: null,
authenticityMsg: 'Card setup required!',
};
}
diff --git a/src/screens/SigningDevices/ImportSatochipSeed.tsx b/src/screens/SigningDevices/ImportSatochipSeed.tsx
index 556b17cae..04303560a 100644
--- a/src/screens/SigningDevices/ImportSatochipSeed.tsx
+++ b/src/screens/SigningDevices/ImportSatochipSeed.tsx
@@ -1,7 +1,7 @@
import React, { useContext } from 'react';
import { Box, useColorMode } from 'native-base';
import { StyleSheet } from 'react-native';
-import { CommonActions } from '@react-navigation/native';
+import { CommonActions, StackActions } from '@react-navigation/native';
import ScreenWrapper from 'src/components/ScreenWrapper';
import Buttons from 'src/components/Buttons';
@@ -26,25 +26,21 @@ function ImportSatochipSeed({ route, navigation }) {
const handleContinue = () => {
navigation.dispatch(
- CommonActions.navigate({
- name: 'EnterSeedScreen',
- params: {
- mode: InteracationMode.VAULT_IMPORT_SEED,
- isImport: true,
- isUSDTWallet: false,
- importSeedCta: async (mnemonic: string) => {
- // Navigate to NFC processing screen with the mnemonic
- navigation.dispatch(
- CommonActions.navigate({
- name: 'SatochipSeedImportModal',
- params: {
- pin,
- mnemonic,
- setupSatochipParams,
- },
- })
- );
- },
+ StackActions.push('EnterSeedScreen', {
+ mode: InteracationMode.VAULT_IMPORT_SEED,
+ isImport: true,
+ isUSDTWallet: false,
+ importSeedCta: async (mnemonic: string) => {
+ navigation.dispatch(
+ CommonActions.navigate({
+ name: 'SatochipSeedImportModal',
+ params: {
+ pin,
+ mnemonic,
+ setupSatochipParams,
+ },
+ })
+ );
},
})
);
diff --git a/src/screens/SigningDevices/SatochipSeedImportModal.tsx b/src/screens/SigningDevices/SatochipSeedImportModal.tsx
index 9720970a9..5ef56ce98 100644
--- a/src/screens/SigningDevices/SatochipSeedImportModal.tsx
+++ b/src/screens/SigningDevices/SatochipSeedImportModal.tsx
@@ -28,7 +28,7 @@ function SatochipSeedImportModal({ route, navigation }) {
common,
} = translations;
- const { pin, mnemonic } = route.params || {};
+ const { pin, mnemonic, setupSatochipParams } = route.params || {};
const card = useRef(new SatochipCard()).current;
const { withModal, nfcVisible, closeNfc } = useSatochipModal(card);
const [showResultModal, setShowResultModal] = useState(false);
@@ -72,9 +72,7 @@ function SatochipSeedImportModal({ route, navigation }) {
navigation.dispatch(
CommonActions.navigate({
name: 'SatochipAction',
- params: {
- mode: InteracationMode.VAULT_ADDITION,
- },
+ params: setupSatochipParams ?? { mode: InteracationMode.VAULT_ADDITION },
})
);
diff --git a/src/screens/Vault/AddSigningDevice.tsx b/src/screens/Vault/AddSigningDevice.tsx
index 8c5a95daa..80ab060b6 100644
--- a/src/screens/Vault/AddSigningDevice.tsx
+++ b/src/screens/Vault/AddSigningDevice.tsx
@@ -135,17 +135,23 @@ const onSignerSelect = (
scheme.n !== 1 ||
vaultType === VaultType.MINISCRIPT
) {
- const scriptKey = WalletUtilities.getKeyForScheme(
- isMultisig,
- signer,
- msXpub,
- ssXpub,
- amfXpub
- );
- vaultKeys.push(scriptKey);
- setVaultKeys(vaultKeys);
- setHotWalletSelected(false);
- setHotWalletInstanceNum(null);
+ try {
+ const scriptKey = WalletUtilities.getKeyForScheme(
+ isMultisig,
+ signer,
+ msXpub,
+ ssXpub,
+ amfXpub
+ );
+ vaultKeys.push(scriptKey);
+ setVaultKeys(vaultKeys);
+ setHotWalletSelected(false);
+ setHotWalletInstanceNum(null);
+ }
+ catch (error){
+ showToast(`This key is invalid. You may need to remove and reimport it. Error: ${error.message}`, );
+ return;
+ }
} else {
setHotWalletSelected(true);
setHotWalletInstanceNum(signer.extraData.instanceNumber - 1);
diff --git a/src/screens/Vault/SigningDeviceDetails.tsx b/src/screens/Vault/SigningDeviceDetails.tsx
index 8705285c6..ceb208274 100644
--- a/src/screens/Vault/SigningDeviceDetails.tsx
+++ b/src/screens/Vault/SigningDeviceDetails.tsx
@@ -653,6 +653,15 @@ function SigningDeviceDetails({ route }) {
text: signerTranslations.magicLinkCTA,
Icon: () => } />,
onPress: () => {
+ if (signer.type === SignerType.SATOCHIP) {
+ // Fix for Satochip keys created with buggy v2.5.8 that have zpub/Zpub instead of xpub
+ const xpub = signer.signerXpubs[XpubTypes.P2WPKH][0].xpub;
+ const prefix= xpub.substring(0, 4);
+ if (prefix === 'zpub' || prefix === 'Zpub') {
+ showToast(`This key has an invalid xpub. Please remove and reimport it`, );
+ return;
+ }
+ }
setShareKeyModal(true);
},
},
diff --git a/yarn.lock b/yarn.lock
index f053b8cc7..262e69876 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10657,9 +10657,9 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-"satochip-react-native@git+https://github.com/Toporin/satochip-react-native.git#7ce6606613ab8d244e3d0ace56d57d11c141e480":
- version "0.1.3"
- resolved "git+https://github.com/Toporin/satochip-react-native.git#7ce6606613ab8d244e3d0ace56d57d11c141e480"
+"satochip-react-native@git+https://github.com/Toporin/satochip-react-native.git#1076e7c097571d561b5b903f31c6337455def19e":
+ version "0.1.4"
+ resolved "git+https://github.com/Toporin/satochip-react-native.git#1076e7c097571d561b5b903f31c6337455def19e"
dependencies:
asn1js "^3.0.6"
bech32 "2.0.0"