From 24e142e73983e8cf5e40cdf7dd94544a6da579b5 Mon Sep 17 00:00:00 2001 From: wabicai Date: Mon, 8 Jun 2026 17:43:51 +0800 Subject: [PATCH 1/7] feat: integrate OneKey BLE hardware wallet --- android/app/src/main/AndroidManifest.xml | 6 + ios/Podfile.lock | 72 ++- ios/hexa_keeper.xcodeproj/project.pbxproj | 40 +- ios/hexa_keeper/Info.plist | 4 + ios/hexa_keeper_dev-Info.plist | 4 + metro.config.js | 2 + package.json | 6 + src/assets/images/flag-hongkong.svg | 12 + src/assets/images/flag-japan.svg | 5 + .../images/onekey-devices/classic-pure.png | Bin 0 -> 1957 bytes src/assets/images/onekey-devices/classic.png | Bin 0 -> 1766 bytes .../images/onekey-devices/pro-black.png | Bin 0 -> 3902 bytes src/assets/images/onekey-devices/touch.png | Bin 0 -> 3213 bytes src/assets/images/onekey-green-dark.svg | 5 + src/assets/images/onekey-green-light.svg | 5 + src/assets/images/onekey-shop-device.png | Bin 0 -> 355961 bytes src/assets/images/onekey_icon.svg | 5 + src/assets/images/onekey_icon_light.svg | 5 + src/assets/images/onekey_illustration.svg | 15 + src/assets/images/onekey_logo.svg | 8 + src/assets/images/onekey_logo_white.svg | 8 + src/components/OneKeyBleModal.tsx | 545 ++++++++++++++++++ src/components/ThemedSvg.tsx/ThemedIcons.js | 7 + src/constants/HardwareReferralLinks.ts | 5 + src/hardware/index.ts | 6 + src/navigation/Navigator.tsx | 5 + src/navigation/types.ts | 2 + .../Hardware/components/DeviceCard.tsx | 4 +- .../Hardware/components/HardwareDevices.tsx | 17 + .../Home/components/Keys/SignerContent.tsx | 1 + src/screens/OneKey/SignMessageOneKeyBle.tsx | 158 +++++ src/screens/Recieve/ReceiveScreen.tsx | 27 + .../SignTransaction/SignTransactionScreen.tsx | 6 + .../SignTransaction/SignWithOneKeyBle.tsx | 195 +++++++ src/screens/SignTransaction/SignerModals.tsx | 49 ++ src/screens/Vault/HardwareModalMap.tsx | 38 +- src/screens/Vault/SignerCategoryList.tsx | 1 + src/screens/Vault/SigningDeviceIcons.tsx | 17 + src/screens/Vault/SigningDeviceList.tsx | 1 + .../WalletDetails/SignMessageScreen.tsx | 65 ++- src/services/onekeyBle/deviceConstants.ts | 37 ++ src/services/onekeyBle/index.ts | 423 ++++++++++++++ src/services/wallets/enums/index.ts | 1 + src/services/wallets/interfaces/vault.ts | 1 + yarn.lock | 183 +++++- 45 files changed, 1947 insertions(+), 49 deletions(-) create mode 100644 src/assets/images/flag-hongkong.svg create mode 100644 src/assets/images/flag-japan.svg create mode 100644 src/assets/images/onekey-devices/classic-pure.png create mode 100644 src/assets/images/onekey-devices/classic.png create mode 100644 src/assets/images/onekey-devices/pro-black.png create mode 100644 src/assets/images/onekey-devices/touch.png create mode 100644 src/assets/images/onekey-green-dark.svg create mode 100644 src/assets/images/onekey-green-light.svg create mode 100644 src/assets/images/onekey-shop-device.png create mode 100644 src/assets/images/onekey_icon.svg create mode 100644 src/assets/images/onekey_icon_light.svg create mode 100644 src/assets/images/onekey_illustration.svg create mode 100644 src/assets/images/onekey_logo.svg create mode 100644 src/assets/images/onekey_logo_white.svg create mode 100644 src/components/OneKeyBleModal.tsx create mode 100644 src/screens/OneKey/SignMessageOneKeyBle.tsx create mode 100644 src/screens/SignTransaction/SignWithOneKeyBle.tsx create mode 100644 src/services/onekeyBle/deviceConstants.ts create mode 100644 src/services/onekeyBle/index.ts diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index de838aa93e..2c9f9bb646 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -25,6 +25,12 @@ + + + + + + RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n"; @@ -596,14 +582,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-hexa_keeper/Pods-hexa_keeper-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-hexa_keeper/Pods-hexa_keeper-resources-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-hexa_keeper/Pods-hexa_keeper-resources.sh\"\n"; @@ -618,8 +600,6 @@ "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", ); name = "[CP-User] [RNFB] Core Configuration"; - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"note: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"note: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"note: -> RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n"; diff --git a/ios/hexa_keeper/Info.plist b/ios/hexa_keeper/Info.plist index d8f154be92..0478c7bade 100644 --- a/ios/hexa_keeper/Info.plist +++ b/ios/hexa_keeper/Info.plist @@ -79,6 +79,10 @@ NSAllowsLocalNetworking + NSBluetoothAlwaysUsageDescription + Allow Keeper to scan and connect to your OneKey hardware wallet over Bluetooth + NSBluetoothPeripheralUsageDescription + Allow Keeper to scan and connect to your OneKey hardware wallet over Bluetooth NSCameraUsageDescription Please allow camera access for QR scanner NSContactsUsageDescription diff --git a/ios/hexa_keeper_dev-Info.plist b/ios/hexa_keeper_dev-Info.plist index f375929769..2e54d75f1f 100644 --- a/ios/hexa_keeper_dev-Info.plist +++ b/ios/hexa_keeper_dev-Info.plist @@ -46,6 +46,10 @@ NFCReaderUsageDescription Allow $(PRODUCT_NAME) to interact with nearby NFC devices + NSBluetoothAlwaysUsageDescription + Allow $(PRODUCT_NAME) to scan and connect to your OneKey hardware wallet over Bluetooth + NSBluetoothPeripheralUsageDescription + Allow $(PRODUCT_NAME) to scan and connect to your OneKey hardware wallet over Bluetooth NSAppTransportSecurity diff --git a/metro.config.js b/metro.config.js index 1748c03ea2..1e11c8b303 100644 --- a/metro.config.js +++ b/metro.config.js @@ -16,6 +16,8 @@ const config = { resolver: { assetExts: assetExts.filter((ext) => ext !== 'svg'), sourceExts: [...sourceExts, 'svg'], + // OneKey hd-core uses package.json "exports" field + unstable_enablePackageExports: true, }, }; diff --git a/package.json b/package.json index daf1e47ea7..04551c5500 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,11 @@ "@bitcoinerlab/miniscript": "1.4.0", "@gluestack-ui/themed-native-base": "0.1.108", "@ngraveio/bc-ur": "1.1.6", + "@noble/hashes": "^1.3.3", "@noble/secp256k1": "1.6.3", + "@onekeyfe/hd-ble-sdk": "1.1.16", + "@onekeyfe/hd-core": "1.1.16", + "@onekeyfe/react-native-ble-utils": "^0.1.4", "@react-native-clipboard/clipboard": "1.16.2", "@react-native-community/netinfo": "11.4.1", "@react-native-firebase/app": "24.0.0", @@ -75,6 +79,7 @@ "react-localization": "1.0.19", "react-native": "0.83.9", "react-native-background-timer": "2.4.1", + "react-native-ble-plx": "3.5.0", "react-native-biometrics": "2.2.0", "react-native-blob-util": "0.24.7", "react-native-change-icon": "5.0.0", @@ -122,6 +127,7 @@ "redux-persist": "6.0.0", "redux-saga": "1.1.3", "rn-qr-generator": "^1.4.4", + "ripple-keypairs": "^1.3.1", "satochip-react-native": "git+https://github.com/Toporin/satochip-react-native.git#1076e7c097571d561b5b903f31c6337455def19e", "semver": "7.3.8", "socket.io-client": "4.5.4", diff --git a/src/assets/images/flag-hongkong.svg b/src/assets/images/flag-hongkong.svg new file mode 100644 index 0000000000..65a0fd69ba --- /dev/null +++ b/src/assets/images/flag-hongkong.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/flag-japan.svg b/src/assets/images/flag-japan.svg new file mode 100644 index 0000000000..3c980d2058 --- /dev/null +++ b/src/assets/images/flag-japan.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/images/onekey-devices/classic-pure.png b/src/assets/images/onekey-devices/classic-pure.png new file mode 100644 index 0000000000000000000000000000000000000000..de31d59dc50df2527d70f5c7609ec70054074d7a GIT binary patch literal 1957 zcmV;W2U_@vP))znu@$>Zh{QcwQ z=hoTV7#SMb+}-#2`rzZ_+uq<#PEP9V?HnE-?eFmP_V@Gk_u%2-xVpRL=IGkp-x3oP z>Fev&*xKvu?%?9&_4oMh@bOkySrrx+*xcTRh>6+U-cwdrhKY*b;p5lY-Qwfr-QVHd z-Q7h+MKLik3kwT4I5^YR*;7?k6ciLcKR?IG$|)%+mYJG(dV7sOcHRI001R|ePE!EC zzrVk5<*^_R3Pm>^+&1SXOZ7MMjhhtec`;z7P- z$V8E}|0G@!@XN=&funhlg+`Gu0(f>`>&q8Or=z3g%lkcncgFcVD2Oq1ts9m&nja%V z($(nb)ys#yfsfh7(6uYNZG2l@&ZbsEbH}Dq=`FW4q8(}=ZM%B#q`}yhb zfF+Cp+`;(t@W7rfdN3AvwWa!Hb8hj6XS_3BU+dMZm$!(Y0;Lq-#&aeq2I~L2YYab8x|hq@e?cch?ND>qHv!J+bocdJ&2|sPle6};EwGc zM$!H){t>V^fP`E7JnpWRc4&h<7)y8dH28Se8tBeuP>c;WnW{a;z~C{U>*kcM#F2|t zZSuuBY|UwV6YS{*<8g3FH>6vJ&Z%sJtz|qfr>|Gxx>PLdayput+$e^f=+P*tLIyTx zYV#$$S< zD)m~cig;5`RjlW^QIS#wfk*rr8DWzK^q4y70Q0y!QE9vjl4TiW9y`@e0%VAW0h((R z0)l*u2PzHL-1V!l_K$$&rB7*~Vy~!!ec@h1sk)s`3 zLDiz{WPBR}6Qh9VLzs^j5qmX>!xErSJye3vxKd!_#U;<5>K0=>-h43^1(4FLn!3}f8UYeb zg9Y1rSwgL6w2M7z>NJPa^mMwcIhF)mVJ1(LUnfwQey z*U>agjOiq)G6CeL23-5|I$nvFsmM;+PfXi3PMqL9jE#+Q1up;-^8gs5^bsYAt2HH{ zyV3+UUt|FU8f-wpyPGi`@o>c+@LFt~9m;wz=fZPc9PP~GA(I4RHSoaOgJbx?mN3Xp z2pQUE+(j9T1p&l#=ov=F*!DzASA$g`zJ^g~;{?qBSXzN#?p%$O9c8xA#;oencOtF5 zc;Pc<8_UYu%asHZ_5v3y+=|0k`2Dz1HE=+3e>TfZ*Q%{qJBjLQ05^=G?tsO#LryWq zUM*5Jdo@%H=IN{ko+T)|P#y1$akV`I@Qg>jOfk$7 z23F+82X=B6x56aBHm>%sGS)7zXMJDQavN_i2|ZP7&j%QIIYg3h=v-B`n9r{8#b|3;Eq;sK~#W00000NkvXXu0mjfX3Ni~ literal 0 HcmV?d00001 diff --git a/src/assets/images/onekey-devices/classic.png b/src/assets/images/onekey-devices/classic.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf787a4f0ef11decf2dd1ab1d5cb1148342b9dd GIT binary patch literal 1766 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 M07*qoM6N<$f;-_bCjbBd literal 0 HcmV?d00001 diff --git a/src/assets/images/onekey-devices/touch.png b/src/assets/images/onekey-devices/touch.png new file mode 100644 index 0000000000000000000000000000000000000000..fb85963c15980f209da26104981aeacd83a7b725 GIT binary patch literal 3213 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/onekey-green-dark.svg b/src/assets/images/onekey-green-dark.svg new file mode 100644 index 0000000000..7eb3c742a1 --- /dev/null +++ b/src/assets/images/onekey-green-dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/onekey-green-light.svg b/src/assets/images/onekey-green-light.svg new file mode 100644 index 0000000000..a9166d0064 --- /dev/null +++ b/src/assets/images/onekey-green-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/onekey-shop-device.png b/src/assets/images/onekey-shop-device.png new file mode 100644 index 0000000000000000000000000000000000000000..e57d06cfab09d1192daa6e2bda93976970b1bf9e GIT binary patch literal 355961 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 y4r($%MczR^B>iwEr8*YQw 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

h1A5P;b}JyTyfE~VmBdwD4CN~L>X-w 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/onekey_icon.svg b/src/assets/images/onekey_icon.svg new file mode 100644 index 0000000000..afa35e0aac --- /dev/null +++ b/src/assets/images/onekey_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/onekey_icon_light.svg b/src/assets/images/onekey_icon_light.svg new file mode 100644 index 0000000000..afa35e0aac --- /dev/null +++ b/src/assets/images/onekey_icon_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/onekey_illustration.svg b/src/assets/images/onekey_illustration.svg new file mode 100644 index 0000000000..1b36bb43f3 --- /dev/null +++ b/src/assets/images/onekey_illustration.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/onekey_logo.svg b/src/assets/images/onekey_logo.svg new file mode 100644 index 0000000000..51b2596ff4 --- /dev/null +++ b/src/assets/images/onekey_logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/onekey_logo_white.svg b/src/assets/images/onekey_logo_white.svg new file mode 100644 index 0000000000..4d3d1cd7db --- /dev/null +++ b/src/assets/images/onekey_logo_white.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/OneKeyBleModal.tsx b/src/components/OneKeyBleModal.tsx new file mode 100644 index 0000000000..21a4c13dbe --- /dev/null +++ b/src/components/OneKeyBleModal.tsx @@ -0,0 +1,545 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { ActivityIndicator, FlatList, Image, StyleSheet, TouchableOpacity } from 'react-native'; +import { Box, useColorMode } from '@gluestack-ui/themed-native-base'; +import { useDispatch } from 'react-redux'; +import KeeperModal from 'src/components/KeeperModal'; +import Text from 'src/components/KeeperText'; +import useToastMessage from 'src/hooks/useToastMessage'; +import ToastErrorIcon from 'src/assets/images/toast_error.svg'; +import TickIcon from 'src/assets/images/icon_tick.svg'; +import { useAppSelector } from 'src/store/hooks'; +import { NetworkType, SignerType } from 'src/services/wallets/enums'; +import { UI_REQUEST } from '@onekeyfe/hd-core'; +import { + ensureOneKeyBLEReady, + fetchOneKeySignerData, + getOneKeyDeviceInfo, + onekeyUIEmitter, + ONEKEY_UI_EVENT, + searchOneKeyDevices, + verifyAddressOnOneKey, + type OneKeyUIEvent, +} from 'src/services/onekeyBle'; +import { + getDeviceImage, + getDeviceDisplayName, + getDeviceTypeName, +} from 'src/services/onekeyBle/deviceConstants'; +import { setupUSBSigner } from 'src/hardware/signerSetup'; +import { addSigningDevice, updateKeyDetails } from 'src/store/sagaActions/vaults'; +import { healthCheckStatusUpdate } from 'src/store/sagaActions/bhr'; +import { hcStatusType } from 'src/models/interfaces/HeathCheckTypes'; +import type { VaultSigner } from 'src/services/wallets/interfaces/vault'; +import { captureError } from 'src/services/sentry'; +import { LocalizationContext } from 'src/context/Localization/LocContext'; +import type { Signer } from 'src/services/wallets/interfaces/vault'; +import type { SearchDevice } from '@onekeyfe/hd-core'; + +// ─── SDK UI event descriptions ────────────────────────────────────────────── + +const UI_PROMPTS: Record = { + [UI_REQUEST.REQUEST_PIN]: 'Please enter PIN on your OneKey device', + [UI_REQUEST.REQUEST_BUTTON]: 'Please confirm on your OneKey device', + [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', + idle: '', +}; + +// ─── Types ────────────────────────────────────────────────────────────────── + +type ModalMode = 'setup' | 'health-check' | 'verify-address'; +type ModalPhase = 'scan' | 'connecting' | 'sdk-prompt' | 'done'; + +const BLE_OPERATION_TIMEOUT_MS = 30_000; + +type Props = { + visible: boolean; + close: () => void; + mode: ModalMode; + signer?: Signer; + isMultisig?: boolean; + addSignerFlow?: boolean; + accountNumber?: number; + onSignerAdded?: (signer: Signer) => void; + // verify-address mode props + vaultKey?: VaultSigner; + vaultId?: string; + receiveAddressIndex?: number; + receivingAddress?: string; +}; + +// ─── Component ────────────────────────────────────────────────────────────── + +function OneKeyBleModal({ + visible, + close, + mode, + signer, + isMultisig = true, + addSignerFlow = false, + accountNumber = 0, + onSignerAdded, + vaultKey, + vaultId, + receiveAddressIndex, + receivingAddress, +}: Props) { + const { colorMode } = useColorMode(); + const dispatch = useDispatch(); + const { showToast } = useToastMessage(); + const { translations } = useContext(LocalizationContext); + const { common } = translations; + + const { bitcoinNetworkType } = useAppSelector((state) => state.settings); + const networkType = + bitcoinNetworkType === NetworkType.TESTNET ? NetworkType.TESTNET : NetworkType.MAINNET; + + const [phase, setPhase] = useState('scan'); + const [devices, setDevices] = useState([]); + const [scanning, setScanning] = useState(false); + const [statusMessage, setStatusMessage] = useState(''); + const [sdkPrompt, setSdkPrompt] = useState('idle'); + + // Listen to SDK UI events + useEffect(() => { + const handler = (event: OneKeyUIEvent) => { + if (event === 'idle') { + setSdkPrompt('idle'); + if (phase === 'sdk-prompt') setPhase('connecting'); + } else { + setSdkPrompt(event); + setPhase('sdk-prompt'); + } + }; + const subscription = onekeyUIEmitter.addListener(ONEKEY_UI_EVENT, handler); + return () => { subscription.remove(); }; + }, [phase]); + + // Reset state when modal opens + useEffect(() => { + if (visible) { + setDevices([]); + setScanning(false); + setStatusMessage(''); + setSdkPrompt('idle'); + + if (mode === 'health-check' || mode === 'verify-address') { + // Direct connect modes: skip scan + setPhase('connecting'); + setTimeout(() => mode === 'verify-address' ? runVerifyAddress() : runHealthCheck(), 300); + } else { + // Setup: show scan UI + setPhase('scan'); + setTimeout(() => scanDevices(), 300); + } + } + }, [visible]); + + // ─── Scan ────────────────────────────────────────────────────────────────── + + const scanDevices = async () => { + if (scanning) return; + try { + setScanning(true); + setDevices([]); + const bleReady = await ensureOneKeyBLEReady(); + if (!bleReady.ready) { + showToast( + bleReady.reason === 'MISSING_PERMISSION' + ? 'Please grant Bluetooth permissions' + : 'Please turn on Bluetooth and try again', + + ); + return; + } + const found = await searchOneKeyDevices(); + setDevices(found || []); + } catch (error) { + captureError(error); + showToast(error?.message || common.somethingWrong, ); + } finally { + setScanning(false); + } + }; + + // ─── Setup: tap device → connect → import keys ───────────────────────────── + + const handleSetupTap = async (device: SearchDevice) => { + if (!device?.connectId) return; + try { + setPhase('connecting'); + setStatusMessage('Connecting to device...'); + + const deviceInfo = await getOneKeyDeviceInfo(device.connectId); + + // Clear any SDK prompt after device info is fetched + setPhase('connecting'); + setStatusMessage('Importing keys...'); + const signerData = await fetchOneKeySignerData({ + connectId: device.connectId, + deviceId: deviceInfo.deviceId, + networkType, + accountNumber, + }); + + // Clear any SDK prompt after keys imported + setPhase('connecting'); + setStatusMessage('Finalizing...'); + + const { signer: newSigner } = setupUSBSigner(SignerType.ONEKEY, signerData, isMultisig); + + // Title: "OneKey Pro" / "OneKey Classic", Subtitle: BLE name (e.g. "Pro 04DD") + newSigner.signerName = getDeviceTypeName(device); + const bleName = device?.name; + if (bleName && bleName !== 'Unknown') { + newSigner.signerDescription = bleName; + } + newSigner.extraData = { ...newSigner.extraData, bleConnectId: deviceInfo.connectId }; + + dispatch(addSigningDevice([newSigner])); + setPhase('done'); + showToast('OneKey added successfully', ); + onSignerAdded?.(newSigner); + close(); + } catch (error) { + captureError(error); + showToast(error?.message || common.somethingWrong, ); + setPhase('scan'); // Back to scan so user can retry + } + }; + + // ─── Health Check: direct connect via stored connectId ───────────────────── + + const runHealthCheck = async () => { + if (!signer) return; + try { + setPhase('connecting'); + + const bleReady = await ensureOneKeyBLEReady(); + if (!bleReady.ready) { + showToast('Please turn on Bluetooth and try again', ); + close(); + return; + } + + const storedConnectId = signer?.extraData?.bleConnectId; + if (!storedConnectId) { + showToast('No stored connection info. Please re-add this device.', ); + close(); + return; + } + + // BLE needs a brief scan to discover peripherals before connecting + setStatusMessage('Connecting to device...'); + await searchOneKeyDevices(); + + setStatusMessage('Verifying device...'); + const deviceInfo = await Promise.race([ + getOneKeyDeviceInfo(storedConnectId), + new Promise((_, reject) => + setTimeout(() => reject(new Error('Operation timed out. Device not found.')), BLE_OPERATION_TIMEOUT_MS) + ), + ]); + + // Clear any SDK prompt after verification + setPhase('connecting'); + setStatusMessage('Checking result...'); + + if (signer.masterFingerprint === deviceInfo.masterFingerprint) { + dispatch( + healthCheckStatusUpdate([ + { signerId: signer.masterFingerprint, status: hcStatusType.HEALTH_CHECK_SUCCESSFULL }, + ]) + ); + setPhase('done'); + showToast('OneKey verification successful', ); + close(); + } else { + showToast('Fingerprint mismatch. Wrong device connected.', ); + close(); + } + } catch (error) { + captureError(error); + showToast(error?.message || common.somethingWrong, ); + close(); + } + }; + + // ─── Verify Address: direct connect → show address on device ───────────── + + const runVerifyAddress = async () => { + if (!signer || !vaultKey || !receivingAddress) return; + try { + setPhase('connecting'); + + const bleReady = await ensureOneKeyBLEReady(); + if (!bleReady.ready) { + showToast('Please turn on Bluetooth and try again', ); + close(); + return; + } + + const storedConnectId = signer?.extraData?.bleConnectId; + if (!storedConnectId) { + showToast('No stored connection info. Please re-add this device.', ); + close(); + return; + } + + setStatusMessage('Connecting to device...'); + await searchOneKeyDevices(); + + const withTimeout = (promise: Promise, ms = BLE_OPERATION_TIMEOUT_MS): Promise => + Promise.race([ + promise, + new Promise((_, reject) => + setTimeout(() => reject(new Error('Operation timed out. Device not found.')), ms) + ), + ]); + + setStatusMessage('Reading device info...'); + const deviceInfo = await withTimeout(getOneKeyDeviceInfo(storedConnectId)); + + setPhase('connecting'); + setStatusMessage('Verifying address on device...'); + const addressPath = `${vaultKey.derivationPath}/0/${receiveAddressIndex}`; + const deviceAddress = await withTimeout(verifyAddressOnOneKey({ + connectId: storedConnectId, + deviceId: deviceInfo.deviceId, + path: addressPath, + networkType, + })); + + setPhase('connecting'); + + if (deviceAddress === receivingAddress) { + dispatch(updateKeyDetails(vaultKey, 'registered', { registered: true, vaultId })); + dispatch( + healthCheckStatusUpdate([ + { signerId: signer.masterFingerprint, status: hcStatusType.HEALTH_CHECK_VERIFICATION }, + ]) + ); + showToast('Address verified successfully on OneKey', ); + } else { + showToast('Address mismatch! The address on device does not match.', ); + } + close(); + } catch (error) { + captureError(error); + showToast(error?.message || common.somethingWrong, ); + close(); + } + }; + + const handleDeviceTap = handleSetupTap; + + // ─── Render helpers ──────────────────────────────────────────────────────── + + const renderDevice = ({ item: device }: { item: SearchDevice }) => { + const img = getDeviceImage(device?.deviceType); + return ( + handleDeviceTap(device)} + activeOpacity={0.7} + > + + {img ? ( + + ) : ( + + OK + + )} + + + {getDeviceDisplayName(device)} + + + + + + ); + }; + + const ModalContent = () => { + // SDK prompt phase — show device interaction prompt + if (phase === 'sdk-prompt' && sdkPrompt !== 'idle') { + return ( + + + + {UI_PROMPTS[sdkPrompt]} + + + ); + } + + // Connecting phase + if (phase === 'connecting') { + return ( + + + + {statusMessage || 'Connecting...'} + + + ); + } + + // Scan phase — show device list or loading + if (scanning && devices.length === 0) { + return ( + + + + Looking for devices... + + + ); + } + + if (!scanning && devices.length === 0) { + return ( + + + No devices found. Make sure your OneKey is unlocked and nearby. + + + + Rescan + + + + ); + } + + // Devices found + return ( + + + + Select your device + + + + Rescan + + + + `${d?.uuid || ''}-${d?.connectId || ''}`} + contentContainerStyle={styles.listContent} + showsVerticalScrollIndicator={false} + style={styles.list} + /> + + ); + }; + + if (!visible) return null; + + const title = + mode === 'setup' ? 'Setting up OneKey' + : mode === 'verify-address' ? 'Verify Address' + : 'Verify OneKey'; + const subTitle = + mode === 'setup' ? 'Connect OneKey hardware wallet via Bluetooth' + : mode === 'verify-address' ? 'Confirm the address matches on your OneKey device' + : 'Verify your OneKey device is accessible'; + + return ( + + ); +} + +const styles = StyleSheet.create({ + centerContent: { + alignItems: 'center', + justifyContent: 'center', + paddingVertical: 40, + gap: 16, + }, + promptText: { + fontSize: 16, + fontWeight: '600', + textAlign: 'center', + paddingHorizontal: 20, + }, + statusText: { + fontSize: 14, + textAlign: 'center', + paddingHorizontal: 20, + }, + rescanText: { + fontSize: 14, + fontWeight: '600', + }, + listHeader: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: 12, + }, + listHeaderText: { + fontSize: 13, + }, + list: { + maxHeight: 300, + }, + listContent: { + gap: 8, + }, + deviceItem: { + borderWidth: 1, + borderRadius: 10, + paddingHorizontal: 16, + paddingVertical: 12, + }, + deviceRow: { + flexDirection: 'row', + alignItems: 'center', + }, + deviceImage: { + width: 40, + height: 40, + borderRadius: 8, + marginRight: 12, + }, + fallbackIcon: { + width: 40, + height: 40, + borderRadius: 8, + backgroundColor: '#44D62C', + alignItems: 'center', + justifyContent: 'center', + marginRight: 12, + }, + fallbackText: { + fontSize: 14, + fontWeight: '700', + color: '#000', + }, + deviceName: { + fontSize: 15, + fontWeight: '500', + }, + arrow: { + fontSize: 22, + fontWeight: '300', + marginLeft: 8, + }, +}); + +export default OneKeyBleModal; diff --git a/src/components/ThemedSvg.tsx/ThemedIcons.js b/src/components/ThemedSvg.tsx/ThemedIcons.js index c5ac8bedeb..69a9c37b3c 100644 --- a/src/components/ThemedSvg.tsx/ThemedIcons.js +++ b/src/components/ThemedSvg.tsx/ThemedIcons.js @@ -150,6 +150,7 @@ import SatochipSetupSVG from 'src/assets/images/SatochipSetup.svg'; import PrivateSatochipIllustration from 'src/assets/privateImages/satochip-illustration.svg'; import PortalIllustration from 'src/assets/images/portal_illustration.svg'; import PrivatePortalIllustration from 'src/assets/privateImages/portal-illustration.svg'; +import OneKeyIllustration from 'src/assets/images/onekey_illustration.svg'; import WalletRecoveryIcon from 'src/assets/images/walletRecoveryIcon.svg'; import PrivateWalletRecovery from 'src/assets/privateImages/wallet-recovery-illlustration.svg'; import OrganizationIcon from 'src/assets/images/organizationIcon.svg'; @@ -767,6 +768,12 @@ const themeIcons = { PRIVATE: PrivatePortalIllustration, PRIVATE_LIGHT: PrivatePortalIllustration, }, + onekey_illustration: { + DARK: OneKeyIllustration, + LIGHT: OneKeyIllustration, + PRIVATE: OneKeyIllustration, + PRIVATE_LIGHT: OneKeyIllustration, + }, wallet_Recovery_icon: { DARK: WalletRecoveryIcon, diff --git a/src/constants/HardwareReferralLinks.ts b/src/constants/HardwareReferralLinks.ts index d402333bee..32a2576b1e 100644 --- a/src/constants/HardwareReferralLinks.ts +++ b/src/constants/HardwareReferralLinks.ts @@ -39,6 +39,11 @@ export const sellers = [ link: 'https://affil.trezor.io/aff_c?offer_id=134&aff_id=35017', id: '67befce7bb95d55d985d844a', }, + { + identifier: 'onekey', + link: 'https://onekey.so/zh_CN/products/onekey-pro/', + id: 'onekey_pro', + }, ]; export const resellers = [ { diff --git a/src/hardware/index.ts b/src/hardware/index.ts index 8ad7b62a09..fd204faf45 100644 --- a/src/hardware/index.ts +++ b/src/hardware/index.ts @@ -183,6 +183,9 @@ export const getSignerNameFromType = (type: SignerType, isMock = false, isAmf = case SignerType.LEDGER: name = 'Ledger'; break; + case SignerType.ONEKEY: + name = 'OneKey'; + break; case SignerType.MOBILE_KEY: name = 'Recovery Key'; break; @@ -476,6 +479,9 @@ export const getSDMessage = ({ type }: { type: SignerType }) => { case SignerType.TREZOR: { return 'Trusted signers from SatoshiLabs'; } + case SignerType.ONEKEY: { + return 'OneKey hardware wallet over Bluetooth'; + } case SignerType.OTHER_SD: { return 'Varies with different signer'; } diff --git a/src/navigation/Navigator.tsx b/src/navigation/Navigator.tsx index 2f27ed9086..0db624a847 100644 --- a/src/navigation/Navigator.tsx +++ b/src/navigation/Navigator.tsx @@ -46,8 +46,10 @@ import WalletSettings from 'src/screens/WalletDetails/WalletSettings'; import Colors from 'src/theme/Colors'; import NodeSettings from 'src/screens/AppSettings/Node/NodeSettings'; import ConnectChannel from 'src/screens/Channel/ConnectChannel'; +import SignMessageOneKeyBle from 'src/screens/OneKey/SignMessageOneKeyBle'; import RegisterWithChannel from 'src/screens/QRScreens/RegisterWithChannel'; import SignWithChannel from 'src/screens/QRScreens/SignWithChannel'; +import SignWithOneKeyBle from 'src/screens/SignTransaction/SignWithOneKeyBle'; import UTXOLabeling from 'src/screens/UTXOManagement/UTXOLabeling'; import UTXOManagement from 'src/screens/UTXOManagement/UTXOManagement'; import ImportWalletDetailsScreen from 'src/screens/ImportWalletDetailsScreen/ImportWalletDetailsScreen'; @@ -210,6 +212,7 @@ function LoginStack() { {/* Channel Based SDs */} + {/* Mobile Key, Seed Key */} @@ -321,9 +324,11 @@ function AppStack() { + + diff --git a/src/navigation/types.ts b/src/navigation/types.ts index d29b4d6f13..8143751a40 100644 --- a/src/navigation/types.ts +++ b/src/navigation/types.ts @@ -96,9 +96,11 @@ export type AppStackParams = { ScanNode: undefined; PrivacyAndDisplay: undefined; ConnectChannel: undefined; + SignMessageOneKeyBle: undefined; RegisterWithChannel: undefined; SetupOtherSDScreen: undefined; SignWithChannel: undefined; + SignWithOneKeyBle: undefined; CosignerDetails: { signer: Signer }; AdditionalDetails: { signer: Signer }; KeyHistory: undefined; diff --git a/src/screens/Hardware/components/DeviceCard.tsx b/src/screens/Hardware/components/DeviceCard.tsx index 3fb788a889..c2124ee94a 100644 --- a/src/screens/Hardware/components/DeviceCard.tsx +++ b/src/screens/Hardware/components/DeviceCard.tsx @@ -146,7 +146,9 @@ const styles = StyleSheet.create({ flagContainer: { flexDirection: 'row', alignItems: 'center', - gap: wp(8), + gap: wp(4), + flexWrap: 'wrap', + flex: 1, }, subText: { marginTop: hp(10), diff --git a/src/screens/Hardware/components/HardwareDevices.tsx b/src/screens/Hardware/components/HardwareDevices.tsx index e2ac11dafe..ab6bf91f75 100644 --- a/src/screens/Hardware/components/HardwareDevices.tsx +++ b/src/screens/Hardware/components/HardwareDevices.tsx @@ -8,6 +8,13 @@ import ColdCard from 'src/assets/images/coinkite-image.svg'; import Passport from 'src/assets/images/foundation-passport-icon.svg'; import Legder from 'src/assets/images/Ledger-icon.svg'; import Trezor from 'src/assets/images/TREZOR-icon.svg'; +import { Image, ImageStyle } from 'react-native'; + +const OnekeyDevice = ({ width, height }: { width: number; height: number }) => ( + +); +import FlagHongKong from 'src/assets/images/flag-hongkong.svg'; +import FlagJapan from 'src/assets/images/flag-japan.svg'; import FlagCanada from 'src/assets/images/flag-canada.svg'; import FlagUSA from 'src/assets/images/flag-usa.svg'; import FlagSwizerland from 'src/assets/images/flag-swizerland.svg'; @@ -83,6 +90,16 @@ const HardwareDevices = ({ sellers }) => { subscribeText: '', unSubscribeText: '', }, + { + id: 6, + title: 'OneKey', + image: , + flagIcon: <>, + country: 'HK & Japan', + link: getSellerLink('onekey'), + subscribeText: '', + unSubscribeText: '', + }, ]; return ( diff --git a/src/screens/Home/components/Keys/SignerContent.tsx b/src/screens/Home/components/Keys/SignerContent.tsx index 25f6b8124a..4e3d3c7810 100644 --- a/src/screens/Home/components/Keys/SignerContent.tsx +++ b/src/screens/Home/components/Keys/SignerContent.tsx @@ -44,6 +44,7 @@ const SignerContent = ({ navigation, handleModalClose }) => { background: 'headerWhite', isTrue: false, }, + { type: SignerType.ONEKEY, background: 'pantoneGreen', isTrue: true }, ]; const hardwareSnippet = hardwareSigners.map(({ type, background, isTrue }) => ({ diff --git a/src/screens/OneKey/SignMessageOneKeyBle.tsx b/src/screens/OneKey/SignMessageOneKeyBle.tsx new file mode 100644 index 0000000000..e557d0500a --- /dev/null +++ b/src/screens/OneKey/SignMessageOneKeyBle.tsx @@ -0,0 +1,158 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { ActivityIndicator, StyleSheet } from 'react-native'; +import { Box, useColorMode } from '@gluestack-ui/themed-native-base'; +import { CommonActions, useNavigation, useRoute } from '@react-navigation/native'; +import ScreenWrapper from 'src/components/ScreenWrapper'; +import WalletHeader from 'src/components/WalletHeader'; +import Text from 'src/components/KeeperText'; +import useToastMessage from 'src/hooks/useToastMessage'; +import ToastErrorIcon from 'src/assets/images/toast_error.svg'; +import TickIcon from 'src/assets/images/icon_tick.svg'; +import { useAppSelector } from 'src/store/hooks'; +import { NetworkType } from 'src/services/wallets/enums'; +import { + ensureOneKeyBLEReady, + getOneKeyDeviceInfo, + searchOneKeyDevices, + signMessageWithOneKey, + onekeyUIEmitter, + ONEKEY_UI_EVENT, + type OneKeyUIEvent, +} from 'src/services/onekeyBle'; +import { UI_REQUEST } from '@onekeyfe/hd-core'; +import { captureError } from 'src/services/sentry'; +import { LocalizationContext } from 'src/context/Localization/LocContext'; +import type { Signer } from 'src/services/wallets/interfaces/vault'; + +const UI_PROMPTS: Record = { + [UI_REQUEST.REQUEST_PIN]: 'Please enter PIN on your OneKey device', + [UI_REQUEST.REQUEST_BUTTON]: 'Please confirm on your OneKey device', + [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', +}; + +const BLE_TIMEOUT_MS = 30_000; + +type Params = { + message: string; + address: string; + derivationPath: string; + signer: Signer; + onSignatureReceived: (signature: string, address: string) => void; +}; + +function SignMessageOneKeyBle() { + const { colorMode } = useColorMode(); + const { params } = useRoute(); + const navigation = useNavigation(); + const { showToast } = useToastMessage(); + const { translations } = useContext(LocalizationContext); + const { common } = translations; + + const { message, address, derivationPath, signer, onSignatureReceived } = params as Params; + + const { bitcoinNetworkType } = useAppSelector((state) => state.settings); + const networkType = + bitcoinNetworkType === NetworkType.TESTNET ? NetworkType.TESTNET : NetworkType.MAINNET; + + const [statusMessage, setStatusMessage] = useState('Preparing...'); + const [sdkPrompt, setSdkPrompt] = useState(''); + + // Listen to SDK UI events + useEffect(() => { + const sub = onekeyUIEmitter.addListener(ONEKEY_UI_EVENT, (event: OneKeyUIEvent) => { + if (UI_PROMPTS[event]) { + setSdkPrompt(UI_PROMPTS[event]); + } + }); + return () => sub.remove(); + }, []); + + // Auto-run on mount + useEffect(() => { + const timer = setTimeout(() => runSignMessage(), 300); + return () => clearTimeout(timer); + }, []); + + const withTimeout = (promise: Promise): Promise => + Promise.race([ + promise, + new Promise((_, reject) => + setTimeout(() => reject(new Error('Operation timed out. Device not found.')), BLE_TIMEOUT_MS) + ), + ]); + + const runSignMessage = async () => { + try { + const bleReady = await ensureOneKeyBLEReady(); + if (!bleReady.ready) { + showToast('Please turn on Bluetooth and try again', ); + navigation.dispatch(CommonActions.goBack()); + return; + } + + const storedConnectId = signer?.extraData?.bleConnectId; + if (!storedConnectId) { + showToast('No stored connection info. Please re-add this device.', ); + navigation.dispatch(CommonActions.goBack()); + return; + } + + // BLE needs a brief scan to discover peripherals + setStatusMessage('Connecting to device...'); + await searchOneKeyDevices(); + + setStatusMessage('Reading device info...'); + setSdkPrompt(''); + const deviceInfo = await withTimeout(getOneKeyDeviceInfo(storedConnectId)); + + setStatusMessage('Signing message...'); + setSdkPrompt(''); + const result = await withTimeout(signMessageWithOneKey({ + connectId: storedConnectId, + deviceId: deviceInfo.deviceId, + path: derivationPath, + message, + networkType, + })); + + setSdkPrompt(''); + showToast('Message signed successfully', ); + onSignatureReceived?.(result.signature, result.address); + navigation.dispatch(CommonActions.goBack()); + } catch (error) { + captureError(error); + showToast(error?.message || common.somethingWrong, ); + navigation.dispatch(CommonActions.goBack()); + } + }; + + const displayText = sdkPrompt || statusMessage; + + return ( + + + + + + {displayText} + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + gap: 16, + paddingHorizontal: 20, + }, + statusText: { + fontSize: 15, + textAlign: 'center', + }, +}); + +export default SignMessageOneKeyBle; diff --git a/src/screens/Recieve/ReceiveScreen.tsx b/src/screens/Recieve/ReceiveScreen.tsx index 6befa1e08d..231962cddb 100644 --- a/src/screens/Recieve/ReceiveScreen.tsx +++ b/src/screens/Recieve/ReceiveScreen.tsx @@ -44,6 +44,7 @@ import useExchangeRates from 'src/hooks/useExchangeRates'; import useCurrencyCode from 'src/store/hooks/state-selectors/useCurrencyCode'; import { SATOSHIS_IN_BTC } from 'src/constants/Bitcoin'; import { InteracationMode } from '../Vault/HardwareModalMap'; +import OneKeyBleModal from 'src/components/OneKeyBleModal'; import { Vault } from 'src/services/wallets/interfaces/vault'; import KeyPadView from 'src/components/AppNumPad/KeyPadView'; import AmountDetailsInput from '../Send/AmountDetailsInput'; @@ -57,6 +58,7 @@ const AddressVerifiableSigners = [ SignerType.COLDCARD, SignerType.JADE, SignerType.PORTAL, + SignerType.ONEKEY, ]; const SignerTypesNeedingRegistration = [ @@ -80,6 +82,7 @@ function ReceiveScreen({ route }: { route }) { // const amount = route?.params?.amount; const [receivingAddress, setReceivingAddress] = useState(null); const [paymentURI, setPaymentURI] = useState(null); + const [onekeyVerifyState, setOnekeyVerifyState] = useState({ visible: false }); const { translations } = useContext(LocalizationContext); const { common, home, wallet: walletTranslation, vault: vaultTranslations } = translations; @@ -281,6 +284,18 @@ function ReceiveScreen({ route }: { route }) { receiveAddressIndex: currentAddressIdx - 1, }) ); + } else if (signer.type === SignerType.ONEKEY) { + const vKey = vaultSigners?.find( + (vs) => vs.signer?.masterFingerprint === signer.masterFingerprint + )?.vaultSigner; + setOnekeyVerifyState({ + visible: true, + signer, + vaultKey: vKey, + vaultId: wallet.id, + receiveAddressIndex: currentAddressIdx - 1, + receivingAddress, + }); } else { navigation.dispatch( CommonActions.navigate('ConnectChannel', { @@ -348,6 +363,7 @@ function ReceiveScreen({ route }: { route }) { }; return ( + <> )} + setOnekeyVerifyState({ visible: false })} + mode="verify-address" + signer={onekeyVerifyState.signer} + vaultKey={onekeyVerifyState.vaultKey} + vaultId={onekeyVerifyState.vaultId} + receiveAddressIndex={onekeyVerifyState.receiveAddressIndex} + receivingAddress={onekeyVerifyState.receivingAddress} + /> + ); } diff --git a/src/screens/SignTransaction/SignTransactionScreen.tsx b/src/screens/SignTransaction/SignTransactionScreen.tsx index eae120b884..520d99f49f 100644 --- a/src/screens/SignTransaction/SignTransactionScreen.tsx +++ b/src/screens/SignTransaction/SignTransactionScreen.tsx @@ -144,6 +144,7 @@ function SignTransactionScreen() { const [trezorModal, setTrezorModal] = useState(false); const [bitbox02Modal, setBitbox02Modal] = useState(false); const [otherSDModal, setOtherSDModal] = useState(false); + const [oneKeyModal, setOneKeyModal] = useState(false); const [otpModal, showOTPModal] = useState(false); const [passwordModal, setPasswordModal] = useState(false); const [confirmPassVisible, setConfirmPassVisible] = useState(false); @@ -674,6 +675,9 @@ function SignTransactionScreen() { case SignerType.KRUX: setKruxModal(true); break; + case SignerType.ONEKEY: + setOneKeyModal(true); + break; default: showToast(`action not set for ${signer.type}`); break; @@ -838,10 +842,12 @@ function SignTransactionScreen() { trezorModal={trezorModal} bitbox02Modal={bitbox02Modal} otherSDModal={otherSDModal} + oneKeyModal={oneKeyModal} specterModal={specterModal} kruxModal={kruxModal} setSpecterModal={setSpecterModal} setOtherSDModal={setOtherSDModal} + setOneKeyModal={setOneKeyModal} setTrezorModal={setTrezorModal} setBitbox02Modal={setBitbox02Modal} setJadeModal={setJadeModal} diff --git a/src/screens/SignTransaction/SignWithOneKeyBle.tsx b/src/screens/SignTransaction/SignWithOneKeyBle.tsx new file mode 100644 index 0000000000..25b38e7adc --- /dev/null +++ b/src/screens/SignTransaction/SignWithOneKeyBle.tsx @@ -0,0 +1,195 @@ +import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { ActivityIndicator, StyleSheet } from 'react-native'; +import { Box, useColorMode } from '@gluestack-ui/themed-native-base'; +import { CommonActions, useNavigation, useRoute } from '@react-navigation/native'; +import ScreenWrapper from 'src/components/ScreenWrapper'; +import WalletHeader from 'src/components/WalletHeader'; +import Text from 'src/components/KeeperText'; +import { VaultSigner } from 'src/services/wallets/interfaces/vault'; +import { useDispatch } from 'react-redux'; +import { useAppSelector } from 'src/store/hooks'; +import { SerializedPSBTEnvelop } from 'src/services/wallets/interfaces'; +import { updatePSBTEnvelops } from 'src/store/reducers/send_and_receive'; +import { captureError } from 'src/services/sentry'; +import { LocalizationContext } from 'src/context/Localization/LocContext'; +import useToastMessage from 'src/hooks/useToastMessage'; +import ToastErrorIcon from 'src/assets/images/toast_error.svg'; +import { + ensureOneKeyBLEReady, + getOneKeyDeviceInfo, + searchOneKeyDevices, + signPsbtWithOneKey, + onekeyUIEmitter, + ONEKEY_UI_EVENT, + type OneKeyUIEvent, +} from 'src/services/onekeyBle'; +import { UI_REQUEST } from '@onekeyfe/hd-core'; +import useSignerFromKey from 'src/hooks/useSignerFromKey'; +import { healthCheckStatusUpdate } from 'src/store/sagaActions/bhr'; +import { hcStatusType } from 'src/models/interfaces/HeathCheckTypes'; +import { validatePSBT } from 'src/utils/utilities'; +import { NetworkType } from 'src/services/wallets/enums'; + +const UI_PROMPTS: Record = { + [UI_REQUEST.REQUEST_PIN]: 'Please enter PIN on your OneKey device', + [UI_REQUEST.REQUEST_BUTTON]: 'Please confirm on your OneKey device', + [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', +}; + +const BLE_TIMEOUT_MS = 30_000; + +type SignWithOneKeyBleParams = { + vaultKey: VaultSigner; + isRemoteKey?: boolean; + serializedPSBTEnvelopFromProps?: SerializedPSBTEnvelop; + signTransaction: (args: { signedSerializedPSBT: string }) => void; +}; + +function SignWithOneKeyBle() { + const { colorMode } = useColorMode(); + const { params } = useRoute(); + const navigation = useNavigation(); + const dispatch = useDispatch(); + const { showToast } = useToastMessage(); + const { translations } = useContext(LocalizationContext); + const { common, error: errorText, signer: signerText } = translations; + + const { + vaultKey, + isRemoteKey = false, + serializedPSBTEnvelopFromProps, + signTransaction, + } = params as SignWithOneKeyBleParams; + + const { signer } = useSignerFromKey(vaultKey); + const { bitcoinNetworkType } = useAppSelector((state) => state.settings); + const serializedPSBTEnvelops: SerializedPSBTEnvelop[] = useAppSelector( + (state) => state.sendAndReceive.sendPhaseTwo.serializedPSBTEnvelops + ); + + const serializedPSBTEnvelop = useMemo(() => { + if (isRemoteKey) return serializedPSBTEnvelopFromProps; + return serializedPSBTEnvelops?.find((envelop) => envelop.xfp === vaultKey.xfp); + }, [isRemoteKey, serializedPSBTEnvelopFromProps, serializedPSBTEnvelops, vaultKey.xfp]); + + const networkType = + bitcoinNetworkType === NetworkType.TESTNET ? NetworkType.TESTNET : NetworkType.MAINNET; + + const [statusMessage, setStatusMessage] = useState('Preparing...'); + const [sdkPrompt, setSdkPrompt] = useState(''); + + // Listen to SDK UI events + useEffect(() => { + const sub = onekeyUIEmitter.addListener(ONEKEY_UI_EVENT, (event: OneKeyUIEvent) => { + if (UI_PROMPTS[event]) { + setSdkPrompt(UI_PROMPTS[event]); + } + }); + return () => sub.remove(); + }, []); + + // Auto-run on mount + useEffect(() => { + const timer = setTimeout(() => runAutoSign(), 300); + return () => clearTimeout(timer); + }, []); + + const withTimeout = (promise: Promise): Promise => + Promise.race([ + promise, + new Promise((_, reject) => + setTimeout(() => reject(new Error('Operation timed out. Device not found.')), BLE_TIMEOUT_MS) + ), + ]); + + const runAutoSign = async () => { + if (!serializedPSBTEnvelop?.serializedPSBT) { + showToast('No PSBT found to sign', ); + return; + } + + try { + setStatusMessage('Checking Bluetooth...'); + const bleReady = await ensureOneKeyBLEReady(); + if (!bleReady.ready) { + showToast('Please turn on Bluetooth and try again', ); + return; + } + + // Use stored connectId for direct connection + const storedConnectId = signer?.extraData?.bleConnectId; + if (!storedConnectId) { + showToast('No stored connection info. Please re-add this device.', ); + return; + } + + // BLE needs a brief scan to discover peripherals + setStatusMessage('Connecting to device...'); + await searchOneKeyDevices(); + + setSdkPrompt(''); + setStatusMessage('Reading device info...'); + const deviceInfo = await withTimeout(getOneKeyDeviceInfo(storedConnectId)); + + setSdkPrompt(''); + setStatusMessage('Signing transaction on device...'); + const signedSerializedPSBT = await withTimeout(signPsbtWithOneKey({ + connectId: storedConnectId, + deviceId: deviceInfo.deviceId, + networkType, + serializedPSBT: serializedPSBTEnvelop.serializedPSBT, + })); + + setSdkPrompt(''); + validatePSBT(serializedPSBTEnvelop.serializedPSBT, signedSerializedPSBT, signer, errorText); + + dispatch( + healthCheckStatusUpdate([ + { signerId: signer.masterFingerprint, status: hcStatusType.HEALTH_CHECK_SIGNING }, + ]) + ); + + if (isRemoteKey) { + signTransaction({ signedSerializedPSBT }); + navigation.dispatch(CommonActions.goBack()); + return; + } + + dispatch(updatePSBTEnvelops({ signedSerializedPSBT, xfp: vaultKey.xfp })); + navigation.dispatch(CommonActions.navigate({ name: 'SignTransactionScreen', merge: true })); + } catch (error) { + captureError(error); + showToast(error?.message || common.somethingWrong, ); + } + }; + + const displayText = sdkPrompt || statusMessage; + + return ( + + + + + + {displayText} + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + gap: 16, + paddingHorizontal: 20, + }, + statusText: { + fontSize: 15, + textAlign: 'center', + }, +}); + +export default SignWithOneKeyBle; diff --git a/src/screens/SignTransaction/SignerModals.tsx b/src/screens/SignTransaction/SignerModals.tsx index 0a3bf2e548..cbeb3c4860 100644 --- a/src/screens/SignTransaction/SignerModals.tsx +++ b/src/screens/SignTransaction/SignerModals.tsx @@ -593,6 +593,22 @@ const getSupportedSigningOptions = (signerType: SignerType, colorMode) => { }, ], }; + case SignerType.ONEKEY: + return { + supportedSigningOptions: [ + { + title: 'Bluetooth', + icon: ( + } + backgroundColor={`${colorMode}.pantoneGreen`} + width={35} + /> + ), + name: SigningMode.USB, + }, + ], + }; default: return { supportedSigningOptions: [], @@ -618,8 +634,10 @@ function SignerModals({ bitbox02Modal, portalModal, otherSDModal, + oneKeyModal, kruxModal, setOtherSDModal, + setOneKeyModal, setTrezorModal, setBitbox02Modal, setJadeModal, @@ -665,8 +683,10 @@ function SignerModals({ bitbox02Modal: boolean; portalModal: boolean; otherSDModal: boolean; + oneKeyModal: boolean; kruxModal: boolean; setOtherSDModal: any; + setOneKeyModal: any; setTrezorModal: any; setBitbox02Modal: any; setJadeModal: any; @@ -780,6 +800,18 @@ function SignerModals({ }) ); }; + + const navigateToOneKeySigning = (vaultKey: VaultSigner) => { + setOneKeyModal(false); + navigation.dispatch( + CommonActions.navigate('SignWithOneKeyBle', { + signTransaction, + vaultKey, + isRemoteKey, + serializedPSBTEnvelopFromProps, + }) + ); + }; const [registeredSigner, setRegisteredSigner] = useState(null); const [registeredVaultKey, setRegisteredVaultKey] = useState(null); const [registerActiveVault, setRegisterActiveVault] = useState(null); @@ -1688,6 +1720,23 @@ function SignerModals({ ); } + if (signer.type === SignerType.ONEKEY) { + return ( + setOneKeyModal(false)} + title="Connect OneKey" + subTitle="Connect your OneKey via Bluetooth to sign the transaction" + modalBackground={`${colorMode}.modalWhiteBackground`} + textColor={`${colorMode}.textGreen`} + subTitleColor={`${colorMode}.modalSubtitleBlack`} + buttonText={common.proceed} + buttonCallback={() => navigateToOneKeySigning(vaultKey)} + Content={() => null} + /> + ); + } return null; })} diff --git a/src/screens/Vault/HardwareModalMap.tsx b/src/screens/Vault/HardwareModalMap.tsx index 919e75bd36..fb325296b9 100644 --- a/src/screens/Vault/HardwareModalMap.tsx +++ b/src/screens/Vault/HardwareModalMap.tsx @@ -29,6 +29,7 @@ import CVVInputsView from 'src/components/HealthCheck/CVVInputsView'; import DeleteIcon from 'src/assets/images/deleteBlack.svg'; import RecoverImage from 'src/assets/images/recover_white.svg'; import KeeperModal from 'src/components/KeeperModal'; +import OneKeyBleModal from 'src/components/OneKeyBleModal'; import KeyPadView from 'src/components/AppNumPad/KeyPadView'; import { LocalizationContext } from 'src/context/Localization/LocContext'; import { Signer, VaultSigner } from 'src/services/wallets/interfaces/vault'; @@ -542,6 +543,18 @@ const getSignerContent = ( subTitle: ledger.SetupDescription, options: [], }; + case SignerType.ONEKEY: + return { + type: SignerType.ONEKEY, + Illustration: , + Instructions: [ + 'Unlock your OneKey device and enable Bluetooth.', + 'Keep the device nearby and tap Proceed to connect.', + ], + title: isHealthcheck ? `${common.verify} OneKey` : `${signerText.settingUp} OneKey`, + subTitle: 'Connect OneKey hardware wallet via Bluetooth', + options: [], + }; case SignerType.SEED_WORDS: return { type: SignerType.SEED_WORDS, @@ -1052,6 +1065,7 @@ function HardwareModalMap({ const data = useQuery(RealmSchema.BackupHistory); const [backupModalVisible, setBackupModalVisible] = useState(false); const [openSetup, setOpenSetup] = useState(false); + const [onekeyBleModalVisible, setOnekeyBleModalVisible] = useState(false); const getNfcSupport = async () => { const isSupported = await NFC.isNFCSupported(); @@ -1333,6 +1347,7 @@ function HardwareModalMap({ ); }; + const importSeedWordsBasedKey = (mnemonic, remember = false) => { try { const { signer, key } = setupSeedWordsBasedKey(mnemonic, isMultisig, remember); @@ -2021,7 +2036,8 @@ function HardwareModalMap({ signerType === SignerType.PASSPORT || signerType === SignerType.SEED_WORDS || signerType === SignerType.KEEPER || - signerType === SignerType.KRUX + signerType === SignerType.KRUX || + signerType === SignerType.ONEKEY ) { return ( @@ -2165,6 +2181,10 @@ function HardwareModalMap({ return navigateToSetupWithOtherSD(); case SignerType.PORTAL: return navigateToPortalSetup(); + case SignerType.ONEKEY: + close(); + setOnekeyBleModalVisible(true); + return; default: return null; } @@ -2447,6 +2467,22 @@ function HardwareModalMap({ /> {inProgress && } + setOnekeyBleModalVisible(false)} + mode={isHealthcheck ? 'health-check' : 'setup'} + signer={signer} + isMultisig={isMultisig} + addSignerFlow={addSignerFlow} + accountNumber={accountNumber} + onSignerAdded={(addedSigner) => { + setOnekeyBleModalVisible(false); + const navigationState = addSignerFlow + ? { name: 'Home', params: { selectedOption: 'Keys', addedSigner } } + : { name: 'AddSigningDevice', merge: true, params: { addedSigner } }; + navigation.dispatch(CommonActions.navigate(navigationState)); + }} + /> ); } diff --git a/src/screens/Vault/SignerCategoryList.tsx b/src/screens/Vault/SignerCategoryList.tsx index 427a1fc370..d7e506be58 100644 --- a/src/screens/Vault/SignerCategoryList.tsx +++ b/src/screens/Vault/SignerCategoryList.tsx @@ -61,6 +61,7 @@ function SignerCategoryList() { { type: SignerType.SPECTER, background: 'pantoneGreen', isTrue: false }, { type: SignerType.KEYSTONE, background: 'brownBackground', isTrue: false }, { type: SignerType.LEDGER, background: 'headerWhite', isTrue: false }, + { type: SignerType.ONEKEY, background: 'headerWhite', isTrue: false }, { type: SignerType.PORTAL, background: 'pantoneGreen', isTrue: false }, { type: SignerType.TREZOR, background: 'brownBackground', isTrue: false }, { type: SignerType.BITBOX02, background: 'headerWhite', isTrue: false }, diff --git a/src/screens/Vault/SigningDeviceIcons.tsx b/src/screens/Vault/SigningDeviceIcons.tsx index 064be46936..141ede94b5 100644 --- a/src/screens/Vault/SigningDeviceIcons.tsx +++ b/src/screens/Vault/SigningDeviceIcons.tsx @@ -1,6 +1,10 @@ import React from 'react'; import { SignerStorage, SignerType } from 'src/services/wallets/enums'; +import ONEKEYICON from 'src/assets/images/onekey_icon.svg'; +import ONEKEYICONLIGHT from 'src/assets/images/onekey_icon_light.svg'; +import ONEKEYLOGO from 'src/assets/images/onekey_logo.svg'; +import ONEKEYLOGOWHITE from 'src/assets/images/onekey_logo_white.svg'; import COLDCARDICON from 'src/assets/images/coldcard_icon.svg'; import COLDCARDICONLIGHT from 'src/assets/images/coldcard_light.svg'; import COLDCARDLOGO from 'src/assets/images/coldcard_logo.svg'; @@ -84,6 +88,8 @@ import BITBOXGREENLIGHT from 'src/assets/images/bitbox-green-light.svg'; import BITBOXGREENDARK from 'src/assets/images/bitbox-green-dark.svg'; import TREZORGREENLIGHT from 'src/assets/images/trezor-green-light.svg'; import TREZORGREENDARK from 'src/assets/images/trezor-green-dark.svg'; +import ONEKEYGREENLIGHT from 'src/assets/images/onekey-green-light.svg'; +import ONEKEYGREENDARK from 'src/assets/images/onekey-green-dark.svg'; import PortalLogo from 'src/assets/images/portalLogo.svg'; import PortalLogoLight from 'src/assets/images/PortalLogoLight.svg'; import PortalIcon from 'src/assets/images/portalIcon.svg'; @@ -156,6 +162,12 @@ export const SDIcons = ({ type, light = true, width = 20, height = 20 }: SDIconO Logo: colorMode === 'dark' ? : , type: SignerStorage.COLD, }; + case SignerType.ONEKEY: + return { + Icon: getColouredIcon(, , light, width, height), + Logo: colorMode === 'dark' ? : , + type: SignerStorage.COLD, + }; case SignerType.MOBILE_KEY: return { Icon: getColouredIcon(, , light, width, height), @@ -312,6 +324,11 @@ export const SDColoredIcons = (type: SignerType, light = true, width = 20, heigh Icon: getColouredIcon(, , light, width, height), type: SignerStorage.COLD, }; + case SignerType.ONEKEY: + return { + Icon: getColouredIcon(, , light, width, height), + type: SignerStorage.COLD, + }; case SignerType.MOBILE_KEY: return { Icon: getColouredIcon( diff --git a/src/screens/Vault/SigningDeviceList.tsx b/src/screens/Vault/SigningDeviceList.tsx index 6b895d9a1c..01fe546e03 100644 --- a/src/screens/Vault/SigningDeviceList.tsx +++ b/src/screens/Vault/SigningDeviceList.tsx @@ -88,6 +88,7 @@ const SigningDeviceList = () => { SignerType.KEYSTONE, SignerType.KRUX, SignerType.LEDGER, + SignerType.ONEKEY, SignerType.PASSPORT, SignerType.PORTAL, SignerType.SATOCHIP, diff --git a/src/screens/WalletDetails/SignMessageScreen.tsx b/src/screens/WalletDetails/SignMessageScreen.tsx index b634f63d9d..ce057ced2f 100644 --- a/src/screens/WalletDetails/SignMessageScreen.tsx +++ b/src/screens/WalletDetails/SignMessageScreen.tsx @@ -18,10 +18,12 @@ import useWallets from 'src/hooks/useWallets'; import { useDispatch } from 'react-redux'; import { refreshWallets } from 'src/store/sagaActions/wallets'; import useVault from 'src/hooks/useVault'; -import { EntityKind, KeyGenerationMode } from 'src/services/wallets/enums'; +import useSigners from 'src/hooks/useSigners'; +import { EntityKind, KeyGenerationMode, SignerType } from 'src/services/wallets/enums'; import ShowXPub from 'src/components/XPub/ShowXPub'; -import { CommonActions } from '@react-navigation/native'; +import { CommonActions, useNavigation } from '@react-navigation/native'; import { InteracationMode } from '../Vault/HardwareModalMap'; +import BLEIcon from 'src/assets/images/usb_white.svg'; import CircleIconWrapper from 'src/components/CircleIconWrapper'; import QRComms from 'src/assets/images/qr_comms.svg'; import ImportIcon from 'src/assets/images/import.svg'; @@ -38,7 +40,8 @@ export const SignMessageScreen = ({ route, navigation }) => { const { walletId = null, vaultId = null, type } = route.params; const wallet = useWallets({ walletIds: [walletId] }).wallets[0]; const { activeVault } = useVault({ vaultId: vaultId ?? '' }); - const { xpriv, addresses } = wallet.specs; + const { vaultSigners } = useSigners(vaultId ?? ''); + const { xpriv, addresses } = wallet?.specs ?? {}; const receiveAddressCache = addresses?.external; const { colorMode } = useColorMode(); const [message, setMessage] = useState(''); @@ -114,8 +117,45 @@ export const SignMessageScreen = ({ route, navigation }) => { navigation.pop(); }; + const hasOneKeySigner = + activeVault?.signers?.some((s) => { + const signerInfo = vaultSigners?.find( + (vs) => vs.masterFingerprint === s.masterFingerprint + ); + return signerInfo?.type === SignerType.ONEKEY; + }) ?? false; + const onSigningMediumSelection = (medium) => { setMediumModal(false); + + // OneKey BLE direct signing + if (medium === 'BLE') { + const onekeyVaultKey = activeVault?.signers?.find((s) => { + const signerInfo = vaultSigners?.find( + (vs) => vs.masterFingerprint === s.masterFingerprint + ); + return signerInfo?.type === SignerType.ONEKEY; + }); + const oneKeySigner = vaultSigners?.find( + (vs) => vs.type === SignerType.ONEKEY + ); + if (onekeyVaultKey && oneKeySigner) { + navigation.dispatch( + CommonActions.navigate('SignMessageOneKeyBle', { + message: message.trim(), + address, + derivationPath: `${onekeyVaultKey.derivationPath}/0/0`, + signer: oneKeySigner, + onSignatureReceived: (sig: string, addr: string) => { + setSignature(sig); + if (addr) setAddress(addr); + }, + }) + ); + } + return; + } + if (mediumMode == MEDIUM_MODES.EXPORT) { if (medium === KeyGenerationMode.QR) { const qrData = WalletOperations.createSignMessageString( @@ -321,7 +361,7 @@ export const SignMessageScreen = ({ route, navigation }) => { modalBackground={`${colorMode}.modalWhiteBackground`} textColor={`${colorMode}.textGreen`} subTitleColor={`${colorMode}.modalSubtitleBlack`} - Content={() => mediumSelectionContent(onSigningMediumSelection)} + Content={() => mediumSelectionContent(onSigningMediumSelection, hasOneKeySigner && mediumMode === MEDIUM_MODES.EXPORT)} /> ); @@ -374,7 +414,7 @@ const styles = StyleSheet.create({ }, }); -const mediumSelectionContent = (onSigningMediumSelection) => { +const mediumSelectionContent = (onSigningMediumSelection, showBleOption = false) => { const { colorMode } = useColorMode(); const options = [ @@ -400,6 +440,21 @@ const mediumSelectionContent = (onSigningMediumSelection) => { ), name: KeyGenerationMode.FILE, }, + ...(showBleOption + ? [ + { + title: 'OneKey (BLE)', + icon: ( + } + backgroundColor={`${colorMode}.pantoneGreen`} + width={35} + /> + ), + name: 'BLE', + }, + ] + : []), ]; return ( diff --git a/src/services/onekeyBle/deviceConstants.ts b/src/services/onekeyBle/deviceConstants.ts new file mode 100644 index 0000000000..9211be8bef --- /dev/null +++ b/src/services/onekeyBle/deviceConstants.ts @@ -0,0 +1,37 @@ +import { ImageSourcePropType } from 'react-native'; +import type { SearchDevice } from '@onekeyfe/hd-core'; + +// ─── Device images ─────────────────────────────────────────────────────────── + +export const DEVICE_IMAGES: Record = { + classic: require('src/assets/images/onekey-devices/classic.png'), + classic1s: require('src/assets/images/onekey-devices/classic.png'), + classicpure: require('src/assets/images/onekey-devices/classic-pure.png'), + touch: require('src/assets/images/onekey-devices/touch.png'), + pro: require('src/assets/images/onekey-devices/pro-black.png'), +}; + +// ─── Device type names ─────────────────────────────────────────────────────── + +export const DEVICE_TYPE_NAMES: Record = { + classic: 'OneKey Classic', + classic1s: 'OneKey Classic 1S', + classicpure: 'OneKey Classic 1S Pure', + touch: 'OneKey Touch', + pro: 'OneKey Pro', +}; + +// ─── Helper functions ──────────────────────────────────────────────────────── + +export const getDeviceImage = (deviceOrType?: SearchDevice | string): ImageSourcePropType | null => { + const dt = typeof deviceOrType === 'string' ? deviceOrType : deviceOrType?.deviceType; + return dt ? DEVICE_IMAGES[dt] || null : null; +}; + +export const getDeviceDisplayName = (device: SearchDevice): string => { + if (device?.name && device.name !== 'Unknown') return device.name; + return DEVICE_TYPE_NAMES[device?.deviceType] || 'OneKey Device'; +}; + +export const getDeviceTypeName = (device: SearchDevice): string => + DEVICE_TYPE_NAMES[device?.deviceType] || 'OneKey'; diff --git a/src/services/onekeyBle/index.ts b/src/services/onekeyBle/index.ts new file mode 100644 index 0000000000..eaffc6a51d --- /dev/null +++ b/src/services/onekeyBle/index.ts @@ -0,0 +1,423 @@ +import HardwareBLESDK from '@onekeyfe/hd-ble-sdk'; +import { + type CoreApi, + type Features, + type SearchDevice, + UI_EVENT, + UI_REQUEST, + UI_RESPONSE, +} from '@onekeyfe/hd-core'; +import { BleManager } from 'react-native-ble-plx'; +import { PermissionsAndroid, Platform } from 'react-native'; +import { DeviceEventEmitter } from 'react-native'; +import { NetworkType } from 'src/services/wallets/enums'; + +// ─── UI Event Emitter ──────────────────────────────────────────────────────── +// Components can listen to these events to show appropriate UI prompts. + +export const onekeyUIEmitter = DeviceEventEmitter; +export const ONEKEY_UI_EVENT = 'onekey-ui-event'; + +// Use SDK's own constants as event values +export type OneKeyUIEvent = typeof UI_REQUEST.REQUEST_PIN | typeof UI_REQUEST.REQUEST_BUTTON | typeof UI_REQUEST.REQUEST_PASSPHRASE | 'idle'; + +// ─── Types ──────────────────────────────────────────────────────────────────── + +type SDKResult = { + success: boolean; + payload: T & { error?: string; message?: string }; +}; + +export type OneKeySignerData = { + multiSigPath: string; + multiSigXpub: string; + singleSigPath: string; + singleSigXpub: string; + taprootPath: string; + taprootXpub: string; + mfp: string; +}; + +export type OneKeyDeviceInfo = { + connectId: string; + deviceId: string; + masterFingerprint: string; + deviceLabel: string; // Device name shown on device (e.g. "My OneKey") + serialNo: string; // Hardware serial number (e.g. "PRA471B") +}; + +// ─── Singleton state ────────────────────────────────────────────────────────── + +let sdkInstance: CoreApi | null = null; +let sdkInitPromise: Promise | null = null; +let bleManager: BleManager | null = null; +let uiListenerBound = false; + +const SCAN_TIMEOUT_MS = 15_000; + +// ─── SDK core ───────────────────────────────────────────────────────────────── + +const getCoreSdk = () => HardwareBLESDK as unknown as CoreApi; + +const handleUIEvent = (message: any) => { + if (!sdkInstance) return; + + if (message?.type === UI_REQUEST.REQUEST_PIN) { + onekeyUIEmitter.emit(ONEKEY_UI_EVENT, UI_REQUEST.REQUEST_PIN); + sdkInstance.uiResponse({ + type: UI_RESPONSE.RECEIVE_PIN, + payload: '@@ONEKEY_INPUT_PIN_IN_DEVICE', + }); + return; + } + + if (message?.type === UI_REQUEST.REQUEST_BUTTON) { + onekeyUIEmitter.emit(ONEKEY_UI_EVENT, UI_REQUEST.REQUEST_BUTTON); + return; + } + + if (message?.type === UI_REQUEST.REQUEST_PASSPHRASE) { + onekeyUIEmitter.emit(ONEKEY_UI_EVENT, UI_REQUEST.REQUEST_PASSPHRASE); + sdkInstance.uiResponse({ + type: UI_RESPONSE.RECEIVE_PASSPHRASE, + payload: { + value: '', + passphraseOnDevice: true, + save: false, + }, + }); + } +}; + +const bindUIListener = (sdk: CoreApi) => { + if (uiListenerBound) return; + sdk.on(UI_EVENT, handleUIEvent); + uiListenerBound = true; +}; + +const getErrorMessage = (result: any): string => { + const code = result?.payload?.code; + const error = result?.payload?.error || result?.payload?.message || ''; + + // Friendly messages for known error codes + if (code === 801 || error.includes('Pin invalid')) { + return 'PIN is incorrect. Please try again on your device.'; + } + if (code === 802 || error.includes('Pin cancelled')) { + return 'PIN entry was cancelled.'; + } + if (error.includes('Failure_ActionCancelled')) { + return 'Action was cancelled on the device.'; + } + + return error || 'OneKey operation failed'; +}; + +export const getOneKeySdk = async (): Promise => { + if (sdkInstance) return sdkInstance; + if (sdkInitPromise) return sdkInitPromise; + + sdkInitPromise = (async () => { + const sdk = getCoreSdk(); + await sdk.init({ debug: false, fetchConfig: true }); + sdkInstance = sdk; + bindUIListener(sdk); + return sdk; + })(); + + try { + return await sdkInitPromise; + } catch (e) { + // Only clear on failure so successful init is cached + sdkInitPromise = null; + throw e; + } +}; + +// ─── BLE readiness ──────────────────────────────────────────────────────────── + +const ensureAndroidBLEPermissions = async (): Promise => { + if (Platform.OS !== 'android') return true; + + const permissions: string[] = []; + if (Number(Platform.Version) >= 31) { + permissions.push( + PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN, + PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT + ); + } + permissions.push( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION + ); + + const result = await PermissionsAndroid.requestMultiple(permissions); + return Object.values(result).every((v) => v === PermissionsAndroid.RESULTS.GRANTED); +}; + +/** + * Wait for BLE adapter to reach a definitive state (PoweredOn / PoweredOff / Unauthorized). + * BleManager may report 'Unknown' or 'Resetting' transiently after construction; we listen + * for the settled state via onStateChange (with emitCurrentState=true) and resolve as soon + * as we get something actionable, or after a 3 s timeout. + */ +const waitForBleState = (mgr: BleManager): Promise => + new Promise((resolve) => { + const sub = mgr.onStateChange((state) => { + if (state !== 'Unknown' && state !== 'Resetting') { + sub.remove(); + resolve(state); + } + }, true); // emitCurrentState = true + setTimeout(() => { + sub.remove(); + mgr.state().then(resolve); + }, 3000); + }); + +export const ensureOneKeyBLEReady = async () => { + const hasPermission = await ensureAndroidBLEPermissions(); + if (!hasPermission) { + return { ready: false as const, reason: 'MISSING_PERMISSION' as const }; + } + + if (!bleManager) bleManager = new BleManager(); + + const bleState = await waitForBleState(bleManager); + if (bleState !== 'PoweredOn') { + return { ready: false as const, reason: 'BLE_OFF' as const }; + } + + return { ready: true as const, reason: null }; +}; + +// ─── Device discovery ───────────────────────────────────────────────────────── + +export const searchOneKeyDevices = async (): Promise => { + const sdk = await getOneKeySdk(); + + const result = await Promise.race([ + sdk.searchDevices() as Promise>, + new Promise((_, reject) => + setTimeout(() => reject(new Error('BLE scan timed out')), SCAN_TIMEOUT_MS) + ), + ]); + + if (!result?.success) throw new Error(getErrorMessage(result)); + return result.payload || []; +}; + +/** + * Resolve device_id and master fingerprint from a connected device. + * Returns both so callers can verify device identity. + */ +export const getOneKeyDeviceInfo = async (connectId: string): Promise => { + const sdk = await getOneKeySdk(); + const result = (await sdk.getFeatures(connectId)) as SDKResult; + if (!result?.success) throw new Error(getErrorMessage(result)); + + const deviceId = result?.payload?.device_id; + if (!deviceId) throw new Error('Failed to get OneKey device_id'); + + const serialNo = + (result.payload as any)?.onekey_serial_no || + (result.payload as any)?.onekey_serial || + (result.payload as any)?.serial_no || + ''; + const deviceLabel = + result?.payload?.label || result?.payload?.ble_name || `OneKey ${deviceId.slice(-4)}`; + + // Fetch root fingerprint via a lightweight key derivation + const fpResult = (await sdk.btcGetPublicKey(connectId, deviceId, { + path: "m/84'/0'/0'", + showOnOneKey: false, + useEmptyPassphrase: true, + })) as SDKResult; + + if (!fpResult?.success) throw new Error(getErrorMessage(fpResult)); + + const mfp = toMasterFingerprint(fpResult?.payload?.root_fingerprint); + return { connectId, deviceId, masterFingerprint: mfp, deviceLabel, serialNo }; +}; + +// ─── Helpers ────────────────────────────────────────────────────────────────── + +const getCoinTypeByNetwork = (networkType: NetworkType) => + networkType === NetworkType.TESTNET ? 1 : 0; + +const getCoinNameByNetwork = (networkType: NetworkType) => + networkType === NetworkType.TESTNET ? 'TEST' : 'Bitcoin'; + +const toMasterFingerprint = (rootFingerprint?: number): string => { + if (rootFingerprint === undefined || rootFingerprint === null) { + throw new Error('Missing OneKey root_fingerprint'); + } + const fp = rootFingerprint >>> 0; // Force unsigned 32-bit + return fp.toString(16).padStart(8, '0').toUpperCase(); +}; + +const extractXpub = (payload: any): string => { + if (!payload?.xpub) throw new Error('Invalid xpub from OneKey'); + return payload.xpub; +}; + +// ─── Signer data (xpub fetch) ───────────────────────────────────────────────── + +export const fetchOneKeySignerData = async ({ + connectId, + deviceId, + networkType, + accountNumber = 0, +}: { + connectId: string; + deviceId: string; + networkType: NetworkType; + accountNumber?: number; +}): Promise => { + const sdk = await getOneKeySdk(); + const coinType = getCoinTypeByNetwork(networkType); + + const singleSigPath = `m/84'/${coinType}'/${accountNumber}'`; + const multiSigPath = `m/48'/${coinType}'/${accountNumber}'/2'`; + const taprootPath = `m/86'/${coinType}'/${accountNumber}'`; + + const singleSigResult = (await sdk.btcGetPublicKey(connectId, deviceId, { + path: singleSigPath, + showOnOneKey: false, + useEmptyPassphrase: true, + })) as SDKResult; + if (!singleSigResult?.success) throw new Error(getErrorMessage(singleSigResult)); + + const multiSigResult = (await sdk.btcGetPublicKey(connectId, deviceId, { + path: multiSigPath, + showOnOneKey: false, + useEmptyPassphrase: true, + })) as SDKResult; + if (!multiSigResult?.success) throw new Error(getErrorMessage(multiSigResult)); + + const taprootResult = (await sdk.btcGetPublicKey(connectId, deviceId, { + path: taprootPath, + showOnOneKey: false, + useEmptyPassphrase: true, + })) as SDKResult; + if (!taprootResult?.success) throw new Error(getErrorMessage(taprootResult)); + + const mfp = toMasterFingerprint( + singleSigResult?.payload?.root_fingerprint ?? + multiSigResult?.payload?.root_fingerprint ?? + taprootResult?.payload?.root_fingerprint + ); + + return { + multiSigPath, + multiSigXpub: extractXpub(multiSigResult.payload), + singleSigPath, + singleSigXpub: extractXpub(singleSigResult.payload), + taprootPath, + taprootXpub: extractXpub(taprootResult.payload), + mfp, + }; +}; + +// ─── PSBT signing ───────────────────────────────────────────────────────────── + +const convertSignedPsbtToBase64 = (psbt: string): string => { + const sanitized = psbt?.startsWith('0x') ? psbt.slice(2) : psbt; + if (sanitized && /^[a-fA-F0-9]+$/.test(sanitized)) { + return Buffer.from(sanitized, 'hex').toString('base64'); + } + return psbt; +}; + +export const signPsbtWithOneKey = async ({ + connectId, + deviceId, + networkType, + serializedPSBT, +}: { + connectId: string; + deviceId: string; + networkType: NetworkType; + serializedPSBT: string; +}): Promise => { + const sdk = await getOneKeySdk(); + const psbtHex = Buffer.from(serializedPSBT, 'base64').toString('hex'); + const coin = getCoinNameByNetwork(networkType); + + const result = (await sdk.btcSignPsbt(connectId, deviceId, { + psbt: psbtHex, + coin, + useEmptyPassphrase: true, + })) as SDKResult<{ psbt: string }>; + + if (!result?.success) throw new Error(getErrorMessage(result)); + + const signedPsbt = result?.payload?.psbt; + if (!signedPsbt) throw new Error('OneKey returned empty signed PSBT'); + + return convertSignedPsbtToBase64(signedPsbt); +}; + +// ─── Address verification ───────────────────────────────────────────────────── + +export const verifyAddressOnOneKey = async ({ + connectId, + deviceId, + path, + networkType, +}: { + connectId: string; + deviceId: string; + path: string; + networkType: NetworkType; +}): Promise => { + const sdk = await getOneKeySdk(); + const coin = getCoinNameByNetwork(networkType); + + const result = (await sdk.btcGetAddress(connectId, deviceId, { + path, + coin, + showOnOneKey: true, + useEmptyPassphrase: true, + })) as SDKResult<{ address: string }>; + + if (!result?.success) throw new Error(getErrorMessage(result)); + if (!result?.payload?.address) throw new Error('OneKey returned empty address'); + + return result.payload.address; +}; + +// ─── Message signing ────────────────────────────────────────────────────────── + +export const signMessageWithOneKey = async ({ + connectId, + deviceId, + path, + message, + networkType, +}: { + connectId: string; + deviceId: string; + path: string; + message: string; + networkType: NetworkType; +}): Promise<{ address: string; signature: string }> => { + const sdk = await getOneKeySdk(); + const coin = getCoinNameByNetwork(networkType); + const messageHex = Buffer.from(message, 'utf8').toString('hex'); + + const result = (await sdk.btcSignMessage(connectId, deviceId, { + path, + messageHex, + coin, + useEmptyPassphrase: true, + })) as SDKResult<{ address: string; signature: string }>; + + if (!result?.success) throw new Error(getErrorMessage(result)); + if (!result?.payload?.signature) throw new Error('OneKey returned empty signature'); + + return { + address: result.payload.address, + signature: result.payload.signature, + }; +}; diff --git a/src/services/wallets/enums/index.ts b/src/services/wallets/enums/index.ts index ba2d2ae832..e79ab8e63f 100644 --- a/src/services/wallets/enums/index.ts +++ b/src/services/wallets/enums/index.ts @@ -95,6 +95,7 @@ export enum SignerType { MY_KEEPER = 'MY_KEEPER', TREZOR = 'TREZOR', LEDGER = 'LEDGER', + ONEKEY = 'ONEKEY', COLDCARD = 'COLDCARD', PASSPORT = 'PASSPORT', JADE = 'JADE', diff --git a/src/services/wallets/interfaces/vault.ts b/src/services/wallets/interfaces/vault.ts index 85f2a136b8..19eeda073c 100644 --- a/src/services/wallets/interfaces/vault.ts +++ b/src/services/wallets/interfaces/vault.ts @@ -84,6 +84,7 @@ export type SignerExtraData = { familyName?: string; recordID?: string; thumbnailPath?: string; + bleConnectId?: string; // OneKey BLE connectId for direct reconnection }; export interface HealthCheckDetails { diff --git a/yarn.lock b/yarn.lock index 14fa3730db..cd32dcf9d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2753,9 +2753,9 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@noble/hashes@^1.2.0": +"@noble/hashes@^1.2.0", "@noble/hashes@^1.3.3": version "1.8.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== "@noble/secp256k1@1.6.3": @@ -2789,6 +2789,58 @@ resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== +"@onekeyfe/hd-ble-sdk@1.1.16": + version "1.1.16" + resolved "https://registry.npmjs.org/@onekeyfe/hd-ble-sdk/-/hd-ble-sdk-1.1.16.tgz#124c5cb9bb3c0d16b6ca2ea615e1867cbf55ba18" + integrity sha512-8t5mhPS7QQkcQXAqJJ0VVr+7EX5vT327U32cUYwxdf5N/opvNRkNc3k1io8N8YO6XprGk5+vAqWLT95/C30/Bw== + dependencies: + "@onekeyfe/hd-core" "1.1.16" + "@onekeyfe/hd-shared" "1.1.16" + "@onekeyfe/hd-transport-react-native" "1.1.16" + +"@onekeyfe/hd-core@1.1.16": + version "1.1.16" + resolved "https://registry.npmjs.org/@onekeyfe/hd-core/-/hd-core-1.1.16.tgz#31df132b7cc7e31275b39fdd0a08f001a7afa9a1" + integrity sha512-ViTzwUySTXWB81kVHvZuxaHScfcQUZ1+Tgk9We7UXz8zKwLRsU5GfIbqpS1qSZA65/OCCB/fJoMA0zto84FH0Q== + dependencies: + "@onekeyfe/hd-shared" "1.1.16" + "@onekeyfe/hd-transport" "1.1.16" + axios "1.12.2" + bignumber.js "^9.0.2" + bytebuffer "^5.0.1" + jszip "^3.10.1" + parse-uri "^1.0.7" + semver "^7.3.7" + +"@onekeyfe/hd-shared@1.1.16": + version "1.1.16" + resolved "https://registry.npmjs.org/@onekeyfe/hd-shared/-/hd-shared-1.1.16.tgz#7fa2b8f1e52348c924a8fc0be18f7d2f0f1b9043" + integrity sha512-PLIK9yZyT8TpbfN+4EaBKzY4mFXSVNBvOLNKmIxH/GnIy5hDBdGyybbhtCTEXjGr55aFLwR0GBy1I+nYXQmoEw== + +"@onekeyfe/hd-transport-react-native@1.1.16": + version "1.1.16" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-react-native/-/hd-transport-react-native-1.1.16.tgz#381e7117e08767bc28c28ab23218a32540a7ea66" + integrity sha512-CDlmOWYKgJ2pxelEC4w8dSG44Iz6bSJ1LY65lbFdutZ4ZO84GtUmceZ//K+i88dbULKe4qogcyqKG7P6EZcTqA== + dependencies: + "@onekeyfe/hd-shared" "1.1.16" + "@onekeyfe/hd-transport" "1.1.16" + "@onekeyfe/react-native-ble-utils" "^0.1.4" + react-native-ble-plx "3.5.0" + +"@onekeyfe/hd-transport@1.1.16": + version "1.1.16" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport/-/hd-transport-1.1.16.tgz#3ec4ee1f786df1a630e79113dc561b33c5d57bd9" + integrity sha512-z+HKqYkGz+Ub1GV+REFqJqTG+tpZt7296O3qIlwmsURWdWXX4TcpXmCQDcXMt7vru8m9A4MUMkpGr+23MFBluw== + dependencies: + bytebuffer "^5.0.1" + long "^4.0.0" + protobufjs "^6.11.2" + +"@onekeyfe/react-native-ble-utils@^0.1.4": + version "0.1.4" + resolved "https://registry.npmjs.org/@onekeyfe/react-native-ble-utils/-/react-native-ble-utils-0.1.4.tgz#4a262d30cd226e94f1c697c08a3a85a44310690c" + integrity sha512-DTKjjFKdkGktx/qqdu7STFAjpD6ZI3Rdfcyvv/a1Ho4GBs9F/nOJyxEhqiUNbY4XZoVHSwYy2cxYrdX4zGY6eA== + "@otplib/core@^12.0.1": version "12.0.1" resolved "https://registry.yarnpkg.com/@otplib/core/-/core-12.0.1.tgz#73720a8cedce211fe5b3f683cd5a9c098eaf0f8d" @@ -4354,6 +4406,11 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.24.tgz#4ae334fc62c0e915ca8ed8e35dcc6d4eeb29215f" integrity sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ== +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": version "25.6.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-25.6.0.tgz#4e09bad9b469871f2d0f68140198cbd714f4edca" @@ -5183,6 +5240,15 @@ axe-core@^4.10.0: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.11.3.tgz#d23cf404edaa5f97bdfd9afed6eea8405e5326e7" integrity sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg== +axios@1.12.2: + version "1.12.2" + resolved "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" + integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + axios@1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979" @@ -5376,7 +5442,7 @@ base-x@^1.1.0: resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac" integrity sha512-c0WLeG3K5OlL4Skz2/LVdS+MjggByKhowxQpG+JpCLA48s/bGwIDyzA1naFjywtNvp/37fLK0p0FpjTNNLLUXQ== -base-x@^3.0.2: +base-x@^3.0.2, base-x@^3.0.9: version "3.0.11" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== @@ -5437,7 +5503,7 @@ bignumber.js@9.1.2: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== -bignumber.js@^9.0.1: +bignumber.js@^9.0.1, bignumber.js@^9.0.2: version "9.3.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== @@ -5539,7 +5605,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.8, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.3.tgz#2cc2c679188eb35b006f2d0d4710bed8437a769e" integrity sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g== -bn.js@^5.2.1, bn.js@^5.2.2: +bn.js@^5.1.1, bn.js@^5.2.1, bn.js@^5.2.2: version "5.2.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e" integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w== @@ -5585,7 +5651,7 @@ braces@^3.0.2, braces@^3.0.3: dependencies: fill-range "^7.1.1" -brorand@^1.0.1, brorand@^1.1.0: +brorand@^1.0.1, brorand@^1.0.5, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== @@ -5788,6 +5854,13 @@ buffer@^5.1.0, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +bytebuffer@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ== + dependencies: + long "~3" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -7709,9 +7782,9 @@ for-each@^0.3.3, for-each@^0.3.5: dependencies: is-callable "^1.2.7" -form-data@^4.0.0: +form-data@^4.0.0, form-data@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" @@ -8213,6 +8286,11 @@ image-size@^1.0.2: dependencies: queue "6.0.2" +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + immer@^9.0.7: version "9.0.21" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" @@ -9187,6 +9265,16 @@ jsonfile@^4.0.0: object.assign "^4.1.4" object.values "^1.1.6" +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -9240,6 +9328,13 @@ levn@^0.4.1: version "0.3.0" resolved "git+https://github.com/bithyve/libportal-react-native.git#2ff681b0b725009768acadb35b2731fb1a402fa3" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lighthouse-logger@^1.0.0: version "1.4.2" resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" @@ -9413,11 +9508,21 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" +long@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + long@^5.0.0: version "5.3.2" resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== +long@~3: + version "3.2.0" + resolved "https://registry.npmjs.org/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg== + loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -10494,6 +10599,11 @@ pako@2.1.0: resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -10522,6 +10632,11 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-uri@^1.0.7: + version "1.0.16" + resolved "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.16.tgz#9e730ccc7358d080f90a29e0334c80c8c845e544" + integrity sha512-WMX9ygt2zzbtd3UlChi8S2Uj/dZa0N9QaotTkyRD7v06c50dor4qEWrM5ZvHiiaZYpXal4otRS9hynwwX0DVoA== + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -10813,6 +10928,25 @@ prop-types@*, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.0, prop-t object-assign "^4.1.1" react-is "^16.13.1" +protobufjs@^6.11.2: + version "6.11.6" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.6.tgz#f02b04ef842469a2bf89da18be8fd5c41dc820ca" + integrity sha512-k8BHqgPBOtrlougZZqF2uUk5Z7bN8f0wj+3e8M3hvtSv0NBAz4VBy5f6R5Nxq/l+i7mRFTgNZb2trxqTpHNY/A== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + protobufjs@^7.2.5: version "7.5.5" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.5.tgz#b7089ca4410374c75150baf277353ef76db69f96" @@ -11042,6 +11176,11 @@ react-native-biometrics@2.2.0: resolved "https://registry.yarnpkg.com/react-native-biometrics/-/react-native-biometrics-2.2.0.tgz#6fc3e801b83389ae1f6c9c41f7b37b50e7014c4e" integrity sha512-V2O0s2ic7PxVP76CguCfBXvVEyazbjtWv7r20T7D+ZQqBB1XSZ1WzK/Gnr12CVRxHLUZ3/tKHOsz7mzIaXyNoA== +react-native-ble-plx@3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/react-native-ble-plx/-/react-native-ble-plx-3.5.0.tgz#6cfa33c007bf5cc8b573dfcca8915de57cec60be" + integrity sha512-PeSnRswHLwLRVMQkOfDaRICtrGmo94WGKhlSC09XmHlqX2EuYgH+vNJpGcLkd8lyiYpEJyf8wlFAdj9Akliwmw== + react-native-blob-util@0.24.7: version "0.24.7" resolved "https://registry.yarnpkg.com/react-native-blob-util/-/react-native-blob-util-0.24.7.tgz#889e3626e3b20f9b10bb265ea91d9ae44ce65ecf" @@ -11481,9 +11620,9 @@ readable-stream@^1.0.27-1: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.8: +readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -11790,6 +11929,25 @@ ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.3: hash-base "^3.1.2" inherits "^2.0.4" +ripple-address-codec@^4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz#68fbaf646bb8567f70743af7f1ce4479f73efbf6" + integrity sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ== + dependencies: + base-x "^3.0.9" + create-hash "^1.1.2" + +ripple-keypairs@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz#7fa531df36b138134afb53555a87d7f5eb465b2e" + integrity sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ== + dependencies: + bn.js "^5.1.1" + brorand "^1.0.5" + elliptic "^6.5.4" + hash.js "^1.0.3" + ripple-address-codec "^4.3.1" + "rn-nodeify@github:tradle/rn-nodeify#338d8d6ba8438403093e9409e9a9d88ad884926f": version "10.3.0" resolved "https://codeload.github.com/tradle/rn-nodeify/tar.gz/338d8d6ba8438403093e9409e9a9d88ad884926f" @@ -12024,6 +12182,11 @@ set-proto@^1.0.0: es-errors "^1.3.0" es-object-atoms "^1.0.0" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" From c77952bca33fce56398da1d0ad6f6d7891592062 Mon Sep 17 00:00:00 2001 From: wabicai Date: Tue, 9 Jun 2026 16:56:29 +0800 Subject: [PATCH 2/7] fix: support OneKey multisig address verification --- src/components/OneKeyBleModal.tsx | 59 ++++++---- src/screens/OneKey/SignMessageOneKeyBle.tsx | 16 +-- src/screens/Recieve/ReceiveScreen.tsx | 12 ++- .../SignTransaction/SignWithOneKeyBle.tsx | 16 +-- src/services/onekeyBle/index.ts | 102 +++++++++++++++++- 5 files changed, 150 insertions(+), 55 deletions(-) diff --git a/src/components/OneKeyBleModal.tsx b/src/components/OneKeyBleModal.tsx index 21a4c13dbe..1ba605b390 100644 --- a/src/components/OneKeyBleModal.tsx +++ b/src/components/OneKeyBleModal.tsx @@ -8,7 +8,7 @@ import useToastMessage from 'src/hooks/useToastMessage'; import ToastErrorIcon from 'src/assets/images/toast_error.svg'; import TickIcon from 'src/assets/images/icon_tick.svg'; import { useAppSelector } from 'src/store/hooks'; -import { NetworkType, SignerType } from 'src/services/wallets/enums'; +import { MultisigScriptType, NetworkType, SignerType } from 'src/services/wallets/enums'; import { UI_REQUEST } from '@onekeyfe/hd-core'; import { ensureOneKeyBLEReady, @@ -26,14 +26,16 @@ import { getDeviceTypeName, } from 'src/services/onekeyBle/deviceConstants'; import { setupUSBSigner } from 'src/hardware/signerSetup'; -import { addSigningDevice, updateKeyDetails } from 'src/store/sagaActions/vaults'; +import { addSigningDevice } from 'src/store/sagaActions/vaults'; +import { updateKeyDetails } from 'src/store/sagaActions/wallets'; import { healthCheckStatusUpdate } from 'src/store/sagaActions/bhr'; import { hcStatusType } from 'src/models/interfaces/HeathCheckTypes'; -import type { VaultSigner } from 'src/services/wallets/interfaces/vault'; +import type { Vault, VaultSigner } from 'src/services/wallets/interfaces/vault'; import { captureError } from 'src/services/sentry'; import { LocalizationContext } from 'src/context/Localization/LocContext'; import type { Signer } from 'src/services/wallets/interfaces/vault'; import type { SearchDevice } from '@onekeyfe/hd-core'; +import WalletUtilities from 'src/services/wallets/operations/utils'; // ─── SDK UI event descriptions ────────────────────────────────────────────── @@ -49,8 +51,6 @@ const UI_PROMPTS: Record = { type ModalMode = 'setup' | 'health-check' | 'verify-address'; type ModalPhase = 'scan' | 'connecting' | 'sdk-prompt' | 'done'; -const BLE_OPERATION_TIMEOUT_MS = 30_000; - type Props = { visible: boolean; close: () => void; @@ -62,6 +62,7 @@ type Props = { onSignerAdded?: (signer: Signer) => void; // verify-address mode props vaultKey?: VaultSigner; + vault?: Vault; vaultId?: string; receiveAddressIndex?: number; receivingAddress?: string; @@ -79,6 +80,7 @@ function OneKeyBleModal({ accountNumber = 0, onSignerAdded, vaultKey, + vault, vaultId, receiveAddressIndex, receivingAddress, @@ -233,12 +235,7 @@ function OneKeyBleModal({ await searchOneKeyDevices(); setStatusMessage('Verifying device...'); - const deviceInfo = await Promise.race([ - getOneKeyDeviceInfo(storedConnectId), - new Promise((_, reject) => - setTimeout(() => reject(new Error('Operation timed out. Device not found.')), BLE_OPERATION_TIMEOUT_MS) - ), - ]); + const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); // Clear any SDK prompt after verification setPhase('connecting'); @@ -267,7 +264,11 @@ function OneKeyBleModal({ // ─── Verify Address: direct connect → show address on device ───────────── const runVerifyAddress = async () => { - if (!signer || !vaultKey || !receivingAddress) return; + if (!signer || !vaultKey || !receivingAddress || receiveAddressIndex === undefined) { + showToast('Missing address verification details. Please try again.', ); + close(); + return; + } try { setPhase('connecting'); @@ -288,26 +289,38 @@ function OneKeyBleModal({ setStatusMessage('Connecting to device...'); await searchOneKeyDevices(); - const withTimeout = (promise: Promise, ms = BLE_OPERATION_TIMEOUT_MS): Promise => - Promise.race([ - promise, - new Promise((_, reject) => - setTimeout(() => reject(new Error('Operation timed out. Device not found.')), ms) - ), - ]); - setStatusMessage('Reading device info...'); - const deviceInfo = await withTimeout(getOneKeyDeviceInfo(storedConnectId)); + const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); setPhase('connecting'); setStatusMessage('Verifying address on device...'); const addressPath = `${vaultKey.derivationPath}/0/${receiveAddressIndex}`; - const deviceAddress = await withTimeout(verifyAddressOnOneKey({ + let multisigConfig; + if (vault?.isMultiSig) { + const multisigScriptType = + vault.scheme.multisigScriptType || MultisigScriptType.DEFAULT_MULTISIG; + if (multisigScriptType !== MultisigScriptType.DEFAULT_MULTISIG) { + throw new Error('OneKey address verification supports standard multisig vaults only.'); + } + const multisigAddress = WalletUtilities.createMultiSig(vault, receiveAddressIndex, false); + const sortedXpubs = [...vault.specs.xpubs].sort((a, b) => { + const pubA = multisigAddress.signerPubkeyMap.get(a)?.toString('hex') || ''; + const pubB = multisigAddress.signerPubkeyMap.get(b)?.toString('hex') || ''; + return pubA.localeCompare(pubB); + }); + multisigConfig = { + m: vault.scheme.m, + xpubs: sortedXpubs, + addressIndex: receiveAddressIndex, + }; + } + const deviceAddress = await verifyAddressOnOneKey({ connectId: storedConnectId, deviceId: deviceInfo.deviceId, path: addressPath, networkType, - })); + multisigConfig, + }); setPhase('connecting'); diff --git a/src/screens/OneKey/SignMessageOneKeyBle.tsx b/src/screens/OneKey/SignMessageOneKeyBle.tsx index e557d0500a..c9c83ad48c 100644 --- a/src/screens/OneKey/SignMessageOneKeyBle.tsx +++ b/src/screens/OneKey/SignMessageOneKeyBle.tsx @@ -30,8 +30,6 @@ const UI_PROMPTS: Record = { [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', }; -const BLE_TIMEOUT_MS = 30_000; - type Params = { message: string; address: string; @@ -73,14 +71,6 @@ function SignMessageOneKeyBle() { return () => clearTimeout(timer); }, []); - const withTimeout = (promise: Promise): Promise => - Promise.race([ - promise, - new Promise((_, reject) => - setTimeout(() => reject(new Error('Operation timed out. Device not found.')), BLE_TIMEOUT_MS) - ), - ]); - const runSignMessage = async () => { try { const bleReady = await ensureOneKeyBLEReady(); @@ -103,17 +93,17 @@ function SignMessageOneKeyBle() { setStatusMessage('Reading device info...'); setSdkPrompt(''); - const deviceInfo = await withTimeout(getOneKeyDeviceInfo(storedConnectId)); + const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); setStatusMessage('Signing message...'); setSdkPrompt(''); - const result = await withTimeout(signMessageWithOneKey({ + const result = await signMessageWithOneKey({ connectId: storedConnectId, deviceId: deviceInfo.deviceId, path: derivationPath, message, networkType, - })); + }); setSdkPrompt(''); showToast('Message signed successfully', ); diff --git a/src/screens/Recieve/ReceiveScreen.tsx b/src/screens/Recieve/ReceiveScreen.tsx index 231962cddb..6f47a14594 100644 --- a/src/screens/Recieve/ReceiveScreen.tsx +++ b/src/screens/Recieve/ReceiveScreen.tsx @@ -48,7 +48,7 @@ import OneKeyBleModal from 'src/components/OneKeyBleModal'; import { Vault } from 'src/services/wallets/interfaces/vault'; import KeyPadView from 'src/components/AppNumPad/KeyPadView'; import AmountDetailsInput from '../Send/AmountDetailsInput'; -import { getAccountFromSigner } from 'src/utils/utilities'; +import { getAccountFromSigner, getKeyUID } from 'src/utils/utilities'; import WalletHeader from 'src/components/WalletHeader'; const AddressVerifiableSigners = [ @@ -88,7 +88,7 @@ function ReceiveScreen({ route }: { route }) { const { common, home, wallet: walletTranslation, vault: vaultTranslations } = translations; const navigation = useNavigation(); - const { vaultSigners } = useSigners(wallet.id); + const { vaultSigners } = useSigners(wallet?.id ?? ''); const [addVerifiableSigners, setAddVerifiableSigners] = useState([]); const [signersNeedRegistration, setSignersNeedRegistration] = useState([]); @@ -285,13 +285,14 @@ function ReceiveScreen({ route }: { route }) { }) ); } else if (signer.type === SignerType.ONEKEY) { - const vKey = vaultSigners?.find( - (vs) => vs.signer?.masterFingerprint === signer.masterFingerprint - )?.vaultSigner; + const vKey = (wallet as Vault).signers?.find( + (vaultSigner) => getKeyUID(vaultSigner) === getKeyUID(signer) + ); setOnekeyVerifyState({ visible: true, signer, vaultKey: vKey, + vault: wallet, vaultId: wallet.id, receiveAddressIndex: currentAddressIdx - 1, receivingAddress, @@ -604,6 +605,7 @@ function ReceiveScreen({ route }: { route }) { mode="verify-address" signer={onekeyVerifyState.signer} vaultKey={onekeyVerifyState.vaultKey} + vault={onekeyVerifyState.vault} vaultId={onekeyVerifyState.vaultId} receiveAddressIndex={onekeyVerifyState.receiveAddressIndex} receivingAddress={onekeyVerifyState.receivingAddress} diff --git a/src/screens/SignTransaction/SignWithOneKeyBle.tsx b/src/screens/SignTransaction/SignWithOneKeyBle.tsx index 25b38e7adc..dc90c27a2c 100644 --- a/src/screens/SignTransaction/SignWithOneKeyBle.tsx +++ b/src/screens/SignTransaction/SignWithOneKeyBle.tsx @@ -36,8 +36,6 @@ const UI_PROMPTS: Record = { [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', }; -const BLE_TIMEOUT_MS = 30_000; - type SignWithOneKeyBleParams = { vaultKey: VaultSigner; isRemoteKey?: boolean; @@ -94,14 +92,6 @@ function SignWithOneKeyBle() { return () => clearTimeout(timer); }, []); - const withTimeout = (promise: Promise): Promise => - Promise.race([ - promise, - new Promise((_, reject) => - setTimeout(() => reject(new Error('Operation timed out. Device not found.')), BLE_TIMEOUT_MS) - ), - ]); - const runAutoSign = async () => { if (!serializedPSBTEnvelop?.serializedPSBT) { showToast('No PSBT found to sign', ); @@ -129,16 +119,16 @@ function SignWithOneKeyBle() { setSdkPrompt(''); setStatusMessage('Reading device info...'); - const deviceInfo = await withTimeout(getOneKeyDeviceInfo(storedConnectId)); + const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); setSdkPrompt(''); setStatusMessage('Signing transaction on device...'); - const signedSerializedPSBT = await withTimeout(signPsbtWithOneKey({ + const signedSerializedPSBT = await signPsbtWithOneKey({ connectId: storedConnectId, deviceId: deviceInfo.deviceId, networkType, serializedPSBT: serializedPSBTEnvelop.serializedPSBT, - })); + }); setSdkPrompt(''); validatePSBT(serializedPSBTEnvelop.serializedPSBT, signedSerializedPSBT, signer, errorText); diff --git a/src/services/onekeyBle/index.ts b/src/services/onekeyBle/index.ts index eaffc6a51d..1580f71466 100644 --- a/src/services/onekeyBle/index.ts +++ b/src/services/onekeyBle/index.ts @@ -2,15 +2,21 @@ import HardwareBLESDK from '@onekeyfe/hd-ble-sdk'; import { type CoreApi, type Features, + type HDNodeType, + type MultisigRedeemScriptType, type SearchDevice, UI_EVENT, UI_REQUEST, UI_RESPONSE, } from '@onekeyfe/hd-core'; +import type { InputScriptType } from '@onekeyfe/hd-transport'; +import BIP32Factory from 'bip32'; import { BleManager } from 'react-native-ble-plx'; import { PermissionsAndroid, Platform } from 'react-native'; import { DeviceEventEmitter } from 'react-native'; import { NetworkType } from 'src/services/wallets/enums'; +import WalletUtilities from 'src/services/wallets/operations/utils'; +import ecc from 'src/services/wallets/operations/taproot-utils/noble_ecc'; // ─── UI Event Emitter ──────────────────────────────────────────────────────── // Components can listen to these events to show appropriate UI prompts. @@ -46,6 +52,13 @@ export type OneKeyDeviceInfo = { serialNo: string; // Hardware serial number (e.g. "PRA471B") }; +type OneKeyMultisigAddressConfig = { + m: number; + xpubs: string[]; + addressIndex: number; + isInternal?: boolean; +}; + // ─── Singleton state ────────────────────────────────────────────────────────── let sdkInstance: CoreApi | null = null; @@ -54,6 +67,8 @@ let bleManager: BleManager | null = null; let uiListenerBound = false; const SCAN_TIMEOUT_MS = 15_000; +const bip32 = BIP32Factory(ecc); +const HD_HARDENED = 0x80000000; // ─── SDK core ───────────────────────────────────────────────────────────────── @@ -261,6 +276,58 @@ const extractXpub = (payload: any): string => { return payload.xpub; }; +const getHDPathArray = (path: string): number[] => + path + .split('/') + .filter((part) => part && part !== 'm') + .map((part) => { + const hardened = part.slice(part.length - 1) === "'"; + const index = Number(part.replace("'", '')); + if (isNaN(index) || index < 0) throw new Error(`Invalid derivation path: ${path}`); + return hardened ? (index | HD_HARDENED) >>> 0 : index; + }); + +const toHex = (value: Buffer | Uint8Array): string => Buffer.from(value).toString('hex'); + +const buildMultisigRedeemScript = ({ + m, + xpubs, + addressIndex, + networkType, + isInternal = false, +}: OneKeyMultisigAddressConfig & { networkType: NetworkType }): MultisigRedeemScriptType => { + const network = WalletUtilities.getNetworkByType(networkType); + const toHDNode = (xpub: string): HDNodeType => { + const node = bip32.fromBase58(xpub, network); + return { + depth: node.depth, + fingerprint: node.parentFingerprint, + child_num: node.index, + chain_code: toHex(node.chainCode), + public_key: toHex(node.publicKey), + }; + }; + + return { + pubkeys: xpubs.map((xpub) => ({ + node: toHDNode(xpub), + address_n: [isInternal ? 1 : 0, addressIndex], + })), + signatures: xpubs.map(() => ''), + m, + }; +}; + +const getMultisigAddressScriptType = (path: string): InputScriptType => { + const segments = getHDPathArray(path); + const bip48ScriptType = (segments[3] ?? 0) & ~HD_HARDENED; + + if (bip48ScriptType === 2) return 'SPENDWITNESS'; + if (bip48ScriptType === 1) return 'SPENDP2SHWITNESS'; + + return 'SPENDMULTISIG'; +}; + // ─── Signer data (xpub fetch) ───────────────────────────────────────────────── export const fetchOneKeySignerData = async ({ @@ -365,19 +432,26 @@ export const verifyAddressOnOneKey = async ({ deviceId, path, networkType, + multisigConfig, }: { connectId: string; deviceId: string; path: string; networkType: NetworkType; + multisigConfig?: OneKeyMultisigAddressConfig; }): Promise => { const sdk = await getOneKeySdk(); const coin = getCoinNameByNetwork(networkType); + const multisig = multisigConfig + ? buildMultisigRedeemScript({ ...multisigConfig, networkType }) + : undefined; const result = (await sdk.btcGetAddress(connectId, deviceId, { - path, + path: multisig ? getHDPathArray(path) : path, coin, showOnOneKey: true, + multisig, + scriptType: multisig ? getMultisigAddressScriptType(path) : undefined, useEmptyPassphrase: true, })) as SDKResult<{ address: string }>; @@ -387,6 +461,32 @@ export const verifyAddressOnOneKey = async ({ return result.payload.address; }; +export const verifyEvmAddressOnOneKey = async ({ + connectId, + deviceId, + path, + chainId = 1, +}: { + connectId: string; + deviceId: string; + path: string; + chainId?: number; +}): Promise => { + const sdk = await getOneKeySdk(); + + const result = (await sdk.evmGetAddress(connectId, deviceId, { + path, + chainId, + showOnOneKey: true, + useEmptyPassphrase: true, + })) as SDKResult<{ address: string }>; + + if (!result?.success) throw new Error(getErrorMessage(result)); + if (!result?.payload?.address) throw new Error('OneKey returned empty EVM address'); + + return result.payload.address; +}; + // ─── Message signing ────────────────────────────────────────────────────────── export const signMessageWithOneKey = async ({ From ea8dd1163582d6af072a44c1c1cdbc397ad8b5b6 Mon Sep 17 00:00:00 2001 From: wabicai Date: Tue, 9 Jun 2026 17:01:50 +0800 Subject: [PATCH 3/7] chore: remove unused OneKey EVM address verification --- src/services/onekeyBle/index.ts | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/services/onekeyBle/index.ts b/src/services/onekeyBle/index.ts index 1580f71466..313d4836ad 100644 --- a/src/services/onekeyBle/index.ts +++ b/src/services/onekeyBle/index.ts @@ -461,32 +461,6 @@ export const verifyAddressOnOneKey = async ({ return result.payload.address; }; -export const verifyEvmAddressOnOneKey = async ({ - connectId, - deviceId, - path, - chainId = 1, -}: { - connectId: string; - deviceId: string; - path: string; - chainId?: number; -}): Promise => { - const sdk = await getOneKeySdk(); - - const result = (await sdk.evmGetAddress(connectId, deviceId, { - path, - chainId, - showOnOneKey: true, - useEmptyPassphrase: true, - })) as SDKResult<{ address: string }>; - - if (!result?.success) throw new Error(getErrorMessage(result)); - if (!result?.payload?.address) throw new Error('OneKey returned empty EVM address'); - - return result.payload.address; -}; - // ─── Message signing ────────────────────────────────────────────────────────── export const signMessageWithOneKey = async ({ From c5884f304f2c4b432a07c7318570051ea1ba577d Mon Sep 17 00:00:00 2001 From: wabicai Date: Tue, 23 Jun 2026 15:35:02 +0800 Subject: [PATCH 4/7] fix: verify OneKey when assigning device type --- src/components/OneKeyBleModal.tsx | 88 ++++++++++++++++--- src/screens/Vault/AssignSignerType.tsx | 3 +- src/screens/Vault/ImportedWalletSetup.tsx | 7 +- src/screens/Vault/SignerAdvanceSettings.tsx | 8 ++ src/screens/Vault/SigningDeviceDetails.tsx | 8 ++ .../Vault/components/AssignSignerTypeCard.tsx | 65 +++++++++++--- .../Vault/components/IdentifySignerModal.tsx | 1 + 7 files changed, 156 insertions(+), 24 deletions(-) diff --git a/src/components/OneKeyBleModal.tsx b/src/components/OneKeyBleModal.tsx index 1ba605b390..df1e314bc9 100644 --- a/src/components/OneKeyBleModal.tsx +++ b/src/components/OneKeyBleModal.tsx @@ -18,6 +18,7 @@ import { ONEKEY_UI_EVENT, searchOneKeyDevices, verifyAddressOnOneKey, + type OneKeyDeviceInfo, type OneKeyUIEvent, } from 'src/services/onekeyBle'; import { @@ -48,7 +49,7 @@ const UI_PROMPTS: Record = { // ─── Types ────────────────────────────────────────────────────────────────── -type ModalMode = 'setup' | 'health-check' | 'verify-address'; +type ModalMode = 'setup' | 'identify' | 'health-check' | 'verify-address'; type ModalPhase = 'scan' | 'connecting' | 'sdk-prompt' | 'done'; type Props = { @@ -60,6 +61,7 @@ type Props = { addSignerFlow?: boolean; accountNumber?: number; onSignerAdded?: (signer: Signer) => void; + onDeviceIdentified?: (result: { device: SearchDevice; deviceInfo: OneKeyDeviceInfo }) => void; // verify-address mode props vaultKey?: VaultSigner; vault?: Vault; @@ -76,9 +78,9 @@ function OneKeyBleModal({ mode, signer, isMultisig = true, - addSignerFlow = false, accountNumber = 0, onSignerAdded, + onDeviceIdentified, vaultKey, vault, vaultId, @@ -99,6 +101,7 @@ function OneKeyBleModal({ const [devices, setDevices] = useState([]); const [scanning, setScanning] = useState(false); const [statusMessage, setStatusMessage] = useState(''); + const [errorMessage, setErrorMessage] = useState(''); const [sdkPrompt, setSdkPrompt] = useState('idle'); // Listen to SDK UI events @@ -122,6 +125,7 @@ function OneKeyBleModal({ setDevices([]); setScanning(false); setStatusMessage(''); + setErrorMessage(''); setSdkPrompt('idle'); if (mode === 'health-check' || mode === 'verify-address') { @@ -129,7 +133,7 @@ function OneKeyBleModal({ setPhase('connecting'); setTimeout(() => mode === 'verify-address' ? runVerifyAddress() : runHealthCheck(), 300); } else { - // Setup: show scan UI + // Setup and identify: show scan UI so the user can choose among nearby devices. setPhase('scan'); setTimeout(() => scanDevices(), 300); } @@ -142,22 +146,25 @@ function OneKeyBleModal({ if (scanning) return; try { setScanning(true); + setErrorMessage(''); setDevices([]); const bleReady = await ensureOneKeyBLEReady(); if (!bleReady.ready) { - showToast( + const message = bleReady.reason === 'MISSING_PERMISSION' ? 'Please grant Bluetooth permissions' - : 'Please turn on Bluetooth and try again', - - ); + : 'Please turn on Bluetooth and try again'; + setErrorMessage(message); + showToast(message, ); return; } const found = await searchOneKeyDevices(); setDevices(found || []); } catch (error) { captureError(error); - showToast(error?.message || common.somethingWrong, ); + const message = error?.message || common.somethingWrong; + setErrorMessage(message); + showToast(message, ); } finally { setScanning(false); } @@ -168,6 +175,7 @@ function OneKeyBleModal({ const handleSetupTap = async (device: SearchDevice) => { if (!device?.connectId) return; try { + setErrorMessage(''); setPhase('connecting'); setStatusMessage('Connecting to device...'); @@ -204,11 +212,47 @@ function OneKeyBleModal({ close(); } catch (error) { captureError(error); - showToast(error?.message || common.somethingWrong, ); + const message = error?.message || common.somethingWrong; + setErrorMessage(message); + showToast(message, ); setPhase('scan'); // Back to scan so user can retry } }; + // ─── Identify: tap device → connect → match fingerprint ─────────────────── + + const handleIdentifyTap = async (device: SearchDevice) => { + if (!device?.connectId || !signer) return; + try { + setErrorMessage(''); + setPhase('connecting'); + setStatusMessage('Connecting to device...'); + + const deviceInfo = await getOneKeyDeviceInfo(device.connectId); + const expectedFingerprint = signer.masterFingerprint?.toUpperCase(); + const actualFingerprint = deviceInfo.masterFingerprint?.toUpperCase(); + + if (expectedFingerprint !== actualFingerprint) { + const message = 'Fingerprint mismatch. Please select the correct OneKey device.'; + setErrorMessage(message); + showToast(message, ); + setPhase('scan'); + return; + } + + setPhase('done'); + showToast('OneKey verified successfully', ); + onDeviceIdentified?.({ device, deviceInfo }); + close(); + } catch (error) { + captureError(error); + const message = error?.message || common.somethingWrong; + setErrorMessage(message); + showToast(message, ); + setPhase('scan'); + } + }; + // ─── Health Check: direct connect via stored connectId ───────────────────── const runHealthCheck = async () => { @@ -343,7 +387,7 @@ function OneKeyBleModal({ } }; - const handleDeviceTap = handleSetupTap; + const handleDeviceTap = mode === 'identify' ? handleIdentifyTap : handleSetupTap; // ─── Render helpers ──────────────────────────────────────────────────────── @@ -375,6 +419,13 @@ function OneKeyBleModal({ }; const ModalContent = () => { + const ErrorMessage = () => + errorMessage ? ( + + {errorMessage} + + ) : null; + // SDK prompt phase — show device interaction prompt if (phase === 'sdk-prompt' && sdkPrompt !== 'idle') { return ( @@ -414,6 +465,7 @@ function OneKeyBleModal({ if (!scanning && devices.length === 0) { return ( + No devices found. Make sure your OneKey is unlocked and nearby. @@ -439,6 +491,7 @@ function OneKeyBleModal({ + void; + onTypeSelection?: (type: SignerType, signerUpdates?: Partial) => void; }; }; }; @@ -81,6 +81,7 @@ function AssignSignerType({ route }: IProps) { SignerType.KEYSTONE, SignerType.KRUX, SignerType.LEDGER, + SignerType.ONEKEY, SignerType.PASSPORT, SignerType.PORTAL, SignerType.SATOCHIP, diff --git a/src/screens/Vault/ImportedWalletSetup.tsx b/src/screens/Vault/ImportedWalletSetup.tsx index 9102fdab4e..24bae95f27 100644 --- a/src/screens/Vault/ImportedWalletSetup.tsx +++ b/src/screens/Vault/ImportedWalletSetup.tsx @@ -18,6 +18,7 @@ import { useDispatch } from 'react-redux'; import { resetSignersUpdateState } from 'src/store/reducers/bhr'; import useSignerMap from 'src/hooks/useSignerMap'; import { SignerType } from 'src/services/wallets/enums'; +import { Signer } from 'src/services/wallets/interfaces/vault'; export const ImportedWalletSetup = ({ navigation, route }) => { const { vaultConfig } = route?.params; @@ -54,11 +55,13 @@ export const ImportedWalletSetup = ({ navigation, route }) => { parentNavigation: navigation, signer: selectedSigner, isImportFlow: true, - onTypeSelection: (type) => { + onTypeSelection: (type, signerUpdates: Partial = {}) => { const updatedSigners = signers.map((signer) => { if (signer.id === selectedSigner.id) { + Object.assign(signer, signerUpdates); signer.type = type; - signer.signerName = getSignerNameFromType(type, signer.isMock); + signer.signerName = + signerUpdates.signerName || getSignerNameFromType(type, signer.isMock); } return signer; }); diff --git a/src/screens/Vault/SignerAdvanceSettings.tsx b/src/screens/Vault/SignerAdvanceSettings.tsx index 39fc20d0d5..cea1a02cdb 100644 --- a/src/screens/Vault/SignerAdvanceSettings.tsx +++ b/src/screens/Vault/SignerAdvanceSettings.tsx @@ -932,6 +932,14 @@ function SignerAdvanceSettings({ route }: any) { description: signerTranslation.kruxDesc, FAQ: 'https://selfcustody.github.io/krux/faq/', }; + case SignerType.ONEKEY: + return { + title: 'OneKey', + subTitle: 'Connect OneKey hardware wallet via Bluetooth', + assert: , + description: 'OneKey hardware wallet over Bluetooth', + FAQ: 'https://help.onekey.so', + }; default: return { title: '', diff --git a/src/screens/Vault/SigningDeviceDetails.tsx b/src/screens/Vault/SigningDeviceDetails.tsx index 8f31fcc280..72f7ef59c5 100644 --- a/src/screens/Vault/SigningDeviceDetails.tsx +++ b/src/screens/Vault/SigningDeviceDetails.tsx @@ -231,6 +231,14 @@ const getSignerContent = (type: SignerType) => { description: signerTranslations.kruxDesc, FAQ: 'https://selfcustody.github.io/krux/faq/', }; + case SignerType.ONEKEY: + return { + title: 'OneKey', + subTitle: 'Connect OneKey hardware wallet via Bluetooth', + assert: , + description: 'OneKey hardware wallet over Bluetooth', + FAQ: 'https://help.onekey.so', + }; default: return { title: '', diff --git a/src/screens/Vault/components/AssignSignerTypeCard.tsx b/src/screens/Vault/components/AssignSignerTypeCard.tsx index 3048e50850..b4ff019f67 100644 --- a/src/screens/Vault/components/AssignSignerTypeCard.tsx +++ b/src/screens/Vault/components/AssignSignerTypeCard.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useState } from 'react'; import { StyleSheet, TouchableOpacity } from 'react-native'; -import { Box, Toast, useColorMode } from '@gluestack-ui/themed-native-base'; +import { Box, useColorMode } from '@gluestack-ui/themed-native-base'; import { SignerType, XpubTypes } from 'src/services/wallets/enums'; import { Signer, Vault } from 'src/services/wallets/interfaces/vault'; import { hp, windowHeight, windowWidth, wp } from 'src/constants/responsive'; @@ -26,6 +26,10 @@ import WalletUtilities from 'src/services/wallets/operations/utils'; import ToastErrorIcon from 'src/assets/images/toast_error.svg'; import TickIcon from 'src/assets/images/icon_tick.svg'; import ThemedSvg from 'src/components/ThemedSvg.tsx/ThemedSvg'; +import OneKeyBleModal from 'src/components/OneKeyBleModal'; +import { getDeviceTypeName } from 'src/services/onekeyBle/deviceConstants'; +import type { SearchDevice } from '@onekeyfe/hd-core'; +import type { OneKeyDeviceInfo } from 'src/services/onekeyBle'; type AssignSignerTypeCardProps = { type: SignerType; @@ -36,7 +40,7 @@ type AssignSignerTypeCardProps = { primaryMnemonic: string; signer?: Signer; isImportFlow?: boolean; - onTypeSelection?: (type: SignerType) => void; + onTypeSelection?: (type: SignerType, signerUpdates?: Partial) => void; }; function AssignSignerTypeCard({ @@ -51,6 +55,7 @@ function AssignSignerTypeCard({ }: AssignSignerTypeCardProps) { const [showConfirm, setShowConfirm] = useState(false); const [validationModal, showValidationModal] = useState(false); + const [oneKeyIdentifyVisible, setOneKeyIdentifyVisible] = useState(false); const [otp, setOtp] = useState(''); const { colorMode } = useColorMode(); const isDarkMode = colorMode === 'dark'; @@ -59,21 +64,51 @@ function AssignSignerTypeCard({ const { common, vault: vaultText, error: errorText } = translations; const navigation = useNavigation(); + const persistSignerType = (signerType: SignerType, signerUpdates: Partial = {}) => { + const signerName = + signerUpdates.signerName || getSignerNameFromType(signerType, signer?.isMock); + + if (isImportFlow) { + navigation.goBack(); + onTypeSelection(signerType, { ...signerUpdates, signerName }); + } else { + dispatch(updateSignerDetails(signer, 'type', signerType)); + dispatch(updateSignerDetails(signer, 'signerName', signerName)); + Object.entries(signerUpdates).forEach(([key, value]) => { + if (key !== 'signerName') dispatch(updateSignerDetails(signer, key, value)); + }); + } + }; + const changeSignerType = () => { setShowConfirm(false); if (type === SignerType.POLICY_SERVER) { showValidationModal(true); + } else if (type === SignerType.ONEKEY) { + setOneKeyIdentifyVisible(true); } else { - if (isImportFlow) { - navigation.goBack(); - onTypeSelection(type); - } else { - dispatch(updateSignerDetails(signer, 'type', type)); - dispatch( - updateSignerDetails(signer, 'signerName', getSignerNameFromType(type, signer.isMock)) - ); - } + persistSignerType(type); + } + }; + + const onOneKeyIdentified = ({ + device, + deviceInfo, + }: { + device: SearchDevice; + deviceInfo: OneKeyDeviceInfo; + }) => { + const bleName = device?.name; + const signerUpdates: Partial = { + signerName: getDeviceTypeName(device), + extraData: { ...signer?.extraData, bleConnectId: deviceInfo.connectId }, + }; + + if (bleName && bleName !== 'Unknown') { + signerUpdates.signerDescription = bleName; } + + persistSignerType(SignerType.ONEKEY, signerUpdates); }; const validateServerKey = async () => { @@ -276,6 +311,14 @@ function AssignSignerTypeCard({ subTitleColor={`${colorMode}.modalSubtitleBlack`} Content={otpContent} /> + + setOneKeyIdentifyVisible(false)} + mode="identify" + signer={signer} + onDeviceIdentified={onOneKeyIdentified} + /> ); } diff --git a/src/screens/Vault/components/IdentifySignerModal.tsx b/src/screens/Vault/components/IdentifySignerModal.tsx index 3bbae55f94..0d660ac878 100644 --- a/src/screens/Vault/components/IdentifySignerModal.tsx +++ b/src/screens/Vault/components/IdentifySignerModal.tsx @@ -34,6 +34,7 @@ function IdentifySignerModal({ visible, close, signer, secondaryCallback, vaultI name: 'AssignSignerType', params: { vault: activeVault, + signer, }, }) ); From 164e48c55ca52be91d3ea4efe7994090df4b756b Mon Sep 17 00:00:00 2001 From: wabicai Date: Tue, 23 Jun 2026 15:48:41 +0800 Subject: [PATCH 5/7] fix: support OneKey recovery flow --- src/components/OneKeyBleModal.tsx | 15 +++++++++++---- src/screens/Vault/HardwareModalMap.tsx | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/components/OneKeyBleModal.tsx b/src/components/OneKeyBleModal.tsx index df1e314bc9..ce610449ff 100644 --- a/src/components/OneKeyBleModal.tsx +++ b/src/components/OneKeyBleModal.tsx @@ -49,7 +49,7 @@ const UI_PROMPTS: Record = { // ─── Types ────────────────────────────────────────────────────────────────── -type ModalMode = 'setup' | 'identify' | 'health-check' | 'verify-address'; +type ModalMode = 'setup' | 'identify' | 'recovery' | 'health-check' | 'verify-address'; type ModalPhase = 'scan' | 'connecting' | 'sdk-prompt' | 'done'; type Props = { @@ -133,7 +133,7 @@ function OneKeyBleModal({ setPhase('connecting'); setTimeout(() => mode === 'verify-address' ? runVerifyAddress() : runHealthCheck(), 300); } else { - // Setup and identify: show scan UI so the user can choose among nearby devices. + // Setup, identify, and recovery show scan UI so the user can choose among nearby devices. setPhase('scan'); setTimeout(() => scanDevices(), 300); } @@ -205,9 +205,14 @@ function OneKeyBleModal({ } newSigner.extraData = { ...newSigner.extraData, bleConnectId: deviceInfo.connectId }; - dispatch(addSigningDevice([newSigner])); + if (mode === 'setup') { + dispatch(addSigningDevice([newSigner])); + } setPhase('done'); - showToast('OneKey added successfully', ); + showToast( + mode === 'recovery' ? 'OneKey connected successfully' : 'OneKey added successfully', + + ); onSignerAdded?.(newSigner); close(); } catch (error) { @@ -509,11 +514,13 @@ function OneKeyBleModal({ const title = mode === 'setup' ? 'Setting up OneKey' : mode === 'identify' ? 'Identify OneKey' + : mode === 'recovery' ? 'Recover with OneKey' : mode === 'verify-address' ? 'Verify Address' : 'Verify OneKey'; const subTitle = mode === 'setup' ? 'Connect OneKey hardware wallet via Bluetooth' : mode === 'identify' ? 'Select your OneKey and confirm it matches this key' + : mode === 'recovery' ? 'Select your OneKey to continue wallet recovery' : mode === 'verify-address' ? 'Confirm the address matches on your OneKey device' : 'Verify your OneKey device is accessible'; diff --git a/src/screens/Vault/HardwareModalMap.tsx b/src/screens/Vault/HardwareModalMap.tsx index fb325296b9..cdbadbaafc 100644 --- a/src/screens/Vault/HardwareModalMap.tsx +++ b/src/screens/Vault/HardwareModalMap.tsx @@ -2470,13 +2470,26 @@ function HardwareModalMap({ setOnekeyBleModalVisible(false)} - mode={isHealthcheck ? 'health-check' : 'setup'} + mode={ + isHealthcheck + ? 'health-check' + : mode === InteracationMode.RECOVERY + ? 'recovery' + : 'setup' + } signer={signer} isMultisig={isMultisig} addSignerFlow={addSignerFlow} accountNumber={accountNumber} onSignerAdded={(addedSigner) => { setOnekeyBleModalVisible(false); + if (mode === InteracationMode.RECOVERY) { + dispatch(setSigningDevices(addedSigner)); + navigation.dispatch( + CommonActions.navigate('LoginStack', { screen: 'VaultRecoveryAddSigner' }) + ); + return; + } const navigationState = addSignerFlow ? { name: 'Home', params: { selectedOption: 'Keys', addedSigner } } : { name: 'AddSigningDevice', merge: true, params: { addedSigner } }; From 452b7e97385413826ae9d690d0ff0a0aba74a9ea Mon Sep 17 00:00:00 2001 From: wabicai Date: Wed, 24 Jun 2026 14:35:13 +0800 Subject: [PATCH 6/7] fix: support imported wallet with onekey recovery --- src/screens/Vault/ImportedWalletSetup.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/screens/Vault/ImportedWalletSetup.tsx b/src/screens/Vault/ImportedWalletSetup.tsx index 24bae95f27..31fd64dc1a 100644 --- a/src/screens/Vault/ImportedWalletSetup.tsx +++ b/src/screens/Vault/ImportedWalletSetup.tsx @@ -19,18 +19,22 @@ import { resetSignersUpdateState } from 'src/store/reducers/bhr'; import useSignerMap from 'src/hooks/useSignerMap'; import { SignerType } from 'src/services/wallets/enums'; import { Signer } from 'src/services/wallets/interfaces/vault'; +import useToastMessage from 'src/hooks/useToastMessage'; +import ToastErrorIcon from 'src/assets/images/toast_error.svg'; export const ImportedWalletSetup = ({ navigation, route }) => { const { vaultConfig } = route?.params; const { colorMode } = useColorMode(); const { createVault } = useConfigRecovery(); - const { common, wallet: walletText, importWallet } = useContext(LocalizationContext).translations; + const { common, wallet: walletText, importWallet, error: errorText } = + useContext(LocalizationContext).translations; const [vaultDetails, setVaultDetails] = useState(null); const [vaultName, setVaultName] = useState('Imported wallet'); const [vaultDesc, setVaultDesc] = useState('Secure your sats'); const isSmallDevice = useIsSmallDevices(); const [signers, setSigners] = useState([]); const { signerMap } = useSignerMap(); + const { showToast } = useToastMessage(); const dispatch = useDispatch(); @@ -46,7 +50,13 @@ export const ImportedWalletSetup = ({ navigation, route }) => { }, []); const updateSignerType = (selectedSigner) => { - if (!selectedSigner.isTemp) return; + if (!selectedSigner?.isTemp) { + showToast( + (errorText as any).keyAlreadyAdded || 'This key has already been added', + + ); + return; + } dispatch(resetSignersUpdateState()); navigation.dispatch( CommonActions.navigate({ @@ -128,8 +138,7 @@ export const ImportedWalletSetup = ({ navigation, route }) => { isFullText colorVarient="green" colorMode={colorMode} - onCardSelect={(signer) => updateSignerType(signer)} - isSelected={signer} + onCardSelect={() => updateSignerType(signer)} /> ); })} From 6b7345660ae3d393a8428bfefbe4e4504f30ce95 Mon Sep 17 00:00:00 2001 From: wabicai Date: Wed, 24 Jun 2026 16:52:31 +0800 Subject: [PATCH 7/7] fix: harden onekey ble signing flows --- android/app/src/main/AndroidManifest.xml | 4 +- src/components/OneKeyBleModal.tsx | 31 +++++------ src/screens/OneKey/SignMessageOneKeyBle.tsx | 15 +++++- .../SignTransaction/SignWithOneKeyBle.tsx | 15 +++++- .../WalletDetails/SignMessageScreen.tsx | 45 +++++++++++++--- src/services/onekeyBle/index.ts | 51 ++++++++++++------- 6 files changed, 115 insertions(+), 46 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2c9f9bb646..7d8cc224b4 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -29,8 +29,8 @@ - - + + = { [UI_REQUEST.REQUEST_PIN]: 'Please enter PIN on your OneKey device', [UI_REQUEST.REQUEST_BUTTON]: 'Please confirm on your OneKey device', - [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', idle: '', }; @@ -234,10 +234,10 @@ function OneKeyBleModal({ setStatusMessage('Connecting to device...'); const deviceInfo = await getOneKeyDeviceInfo(device.connectId); - const expectedFingerprint = signer.masterFingerprint?.toUpperCase(); - const actualFingerprint = deviceInfo.masterFingerprint?.toUpperCase(); - if (expectedFingerprint !== actualFingerprint) { + try { + assertOneKeyFingerprint(deviceInfo, signer); + } catch (_) { const message = 'Fingerprint mismatch. Please select the correct OneKey device.'; setErrorMessage(message); showToast(message, ); @@ -285,24 +285,20 @@ function OneKeyBleModal({ setStatusMessage('Verifying device...'); const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); + assertOneKeyFingerprint(deviceInfo, signer); // Clear any SDK prompt after verification setPhase('connecting'); setStatusMessage('Checking result...'); - if (signer.masterFingerprint === deviceInfo.masterFingerprint) { - dispatch( - healthCheckStatusUpdate([ - { signerId: signer.masterFingerprint, status: hcStatusType.HEALTH_CHECK_SUCCESSFULL }, - ]) - ); - setPhase('done'); - showToast('OneKey verification successful', ); - close(); - } else { - showToast('Fingerprint mismatch. Wrong device connected.', ); - close(); - } + dispatch( + healthCheckStatusUpdate([ + { signerId: signer.masterFingerprint, status: hcStatusType.HEALTH_CHECK_SUCCESSFULL }, + ]) + ); + setPhase('done'); + showToast('OneKey verification successful', ); + close(); } catch (error) { captureError(error); showToast(error?.message || common.somethingWrong, ); @@ -340,6 +336,7 @@ function OneKeyBleModal({ setStatusMessage('Reading device info...'); const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); + assertOneKeyFingerprint(deviceInfo, signer); setPhase('connecting'); setStatusMessage('Verifying address on device...'); diff --git a/src/screens/OneKey/SignMessageOneKeyBle.tsx b/src/screens/OneKey/SignMessageOneKeyBle.tsx index c9c83ad48c..9bfae00df9 100644 --- a/src/screens/OneKey/SignMessageOneKeyBle.tsx +++ b/src/screens/OneKey/SignMessageOneKeyBle.tsx @@ -11,6 +11,7 @@ import TickIcon from 'src/assets/images/icon_tick.svg'; import { useAppSelector } from 'src/store/hooks'; import { NetworkType } from 'src/services/wallets/enums'; import { + assertOneKeyFingerprint, ensureOneKeyBLEReady, getOneKeyDeviceInfo, searchOneKeyDevices, @@ -27,7 +28,6 @@ import type { Signer } from 'src/services/wallets/interfaces/vault'; const UI_PROMPTS: Record = { [UI_REQUEST.REQUEST_PIN]: 'Please enter PIN on your OneKey device', [UI_REQUEST.REQUEST_BUTTON]: 'Please confirm on your OneKey device', - [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', }; type Params = { @@ -73,6 +73,12 @@ function SignMessageOneKeyBle() { const runSignMessage = async () => { try { + if (!signer || !derivationPath) { + showToast('Signer not found. Please try again.', ); + navigation.dispatch(CommonActions.goBack()); + return; + } + const bleReady = await ensureOneKeyBLEReady(); if (!bleReady.ready) { showToast('Please turn on Bluetooth and try again', ); @@ -94,6 +100,7 @@ function SignMessageOneKeyBle() { setStatusMessage('Reading device info...'); setSdkPrompt(''); const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); + assertOneKeyFingerprint(deviceInfo, signer); setStatusMessage('Signing message...'); setSdkPrompt(''); @@ -106,6 +113,12 @@ function SignMessageOneKeyBle() { }); setSdkPrompt(''); + if (address && result.address !== address) { + showToast('Address mismatch! The signed address does not match.', ); + navigation.dispatch(CommonActions.goBack()); + return; + } + showToast('Message signed successfully', ); onSignatureReceived?.(result.signature, result.address); navigation.dispatch(CommonActions.goBack()); diff --git a/src/screens/SignTransaction/SignWithOneKeyBle.tsx b/src/screens/SignTransaction/SignWithOneKeyBle.tsx index dc90c27a2c..d18aed2554 100644 --- a/src/screens/SignTransaction/SignWithOneKeyBle.tsx +++ b/src/screens/SignTransaction/SignWithOneKeyBle.tsx @@ -15,6 +15,7 @@ import { LocalizationContext } from 'src/context/Localization/LocContext'; import useToastMessage from 'src/hooks/useToastMessage'; import ToastErrorIcon from 'src/assets/images/toast_error.svg'; import { + assertOneKeyFingerprint, ensureOneKeyBLEReady, getOneKeyDeviceInfo, searchOneKeyDevices, @@ -33,7 +34,6 @@ import { NetworkType } from 'src/services/wallets/enums'; const UI_PROMPTS: Record = { [UI_REQUEST.REQUEST_PIN]: 'Please enter PIN on your OneKey device', [UI_REQUEST.REQUEST_BUTTON]: 'Please confirm on your OneKey device', - [UI_REQUEST.REQUEST_PASSPHRASE]: 'Please enter passphrase on your OneKey device', }; type SignWithOneKeyBleParams = { @@ -50,7 +50,7 @@ function SignWithOneKeyBle() { const dispatch = useDispatch(); const { showToast } = useToastMessage(); const { translations } = useContext(LocalizationContext); - const { common, error: errorText, signer: signerText } = translations; + const { common, error: errorText } = translations; const { vaultKey, @@ -95,6 +95,13 @@ function SignWithOneKeyBle() { const runAutoSign = async () => { if (!serializedPSBTEnvelop?.serializedPSBT) { showToast('No PSBT found to sign', ); + navigation.dispatch(CommonActions.goBack()); + return; + } + + if (!signer) { + showToast('Signer not found. Please try again.', ); + navigation.dispatch(CommonActions.goBack()); return; } @@ -103,6 +110,7 @@ function SignWithOneKeyBle() { const bleReady = await ensureOneKeyBLEReady(); if (!bleReady.ready) { showToast('Please turn on Bluetooth and try again', ); + navigation.dispatch(CommonActions.goBack()); return; } @@ -110,6 +118,7 @@ function SignWithOneKeyBle() { const storedConnectId = signer?.extraData?.bleConnectId; if (!storedConnectId) { showToast('No stored connection info. Please re-add this device.', ); + navigation.dispatch(CommonActions.goBack()); return; } @@ -120,6 +129,7 @@ function SignWithOneKeyBle() { setSdkPrompt(''); setStatusMessage('Reading device info...'); const deviceInfo = await getOneKeyDeviceInfo(storedConnectId); + assertOneKeyFingerprint(deviceInfo, signer); setSdkPrompt(''); setStatusMessage('Signing transaction on device...'); @@ -150,6 +160,7 @@ function SignWithOneKeyBle() { } catch (error) { captureError(error); showToast(error?.message || common.somethingWrong, ); + navigation.dispatch(CommonActions.goBack()); } }; diff --git a/src/screens/WalletDetails/SignMessageScreen.tsx b/src/screens/WalletDetails/SignMessageScreen.tsx index ce057ced2f..22b8520919 100644 --- a/src/screens/WalletDetails/SignMessageScreen.tsx +++ b/src/screens/WalletDetails/SignMessageScreen.tsx @@ -14,6 +14,7 @@ import KeeperModal from 'src/components/KeeperModal'; import ToastErrorIcon from 'src/assets/images/toast_error.svg'; import { useAppSelector } from 'src/store/hooks'; import WalletOperations from 'src/services/wallets/operations'; +import WalletUtilities from 'src/services/wallets/operations/utils'; import useWallets from 'src/hooks/useWallets'; import { useDispatch } from 'react-redux'; import { refreshWallets } from 'src/store/sagaActions/wallets'; @@ -21,7 +22,7 @@ import useVault from 'src/hooks/useVault'; import useSigners from 'src/hooks/useSigners'; import { EntityKind, KeyGenerationMode, SignerType } from 'src/services/wallets/enums'; import ShowXPub from 'src/components/XPub/ShowXPub'; -import { CommonActions, useNavigation } from '@react-navigation/native'; +import { CommonActions } from '@react-navigation/native'; import { InteracationMode } from '../Vault/HardwareModalMap'; import BLEIcon from 'src/assets/images/usb_white.svg'; import CircleIconWrapper from 'src/components/CircleIconWrapper'; @@ -36,6 +37,14 @@ const MEDIUM_MODES = { IMPORT: 'IMPORT', }; +const getVaultExternalAddressIndex = (vault, targetAddress: string) => { + const externalAddresses = vault?.specs?.addresses?.external || {}; + for (const key in externalAddresses) { + if (externalAddresses[key] === targetAddress) return Number(key); + } + return null; +}; + export const SignMessageScreen = ({ route, navigation }) => { const { walletId = null, vaultId = null, type } = route.params; const wallet = useWallets({ walletIds: [walletId] }).wallets[0]; @@ -130,21 +139,41 @@ export const SignMessageScreen = ({ route, navigation }) => { // OneKey BLE direct signing if (medium === 'BLE') { - const onekeyVaultKey = activeVault?.signers?.find((s) => { + const messageAddress = address || activeVault?.specs?.addresses?.external?.[0]; + if (!messageAddress) { + showToast('Please enter the address', ); + return; + } + + const validAddress = WalletUtilities.isValidAddress(messageAddress, bitcoinNetwork); + if (!validAddress) { + showToast('Please enter a valid address', ); + return; + } + + const addressIndex = getVaultExternalAddressIndex(activeVault, messageAddress); + if (addressIndex == null) { + showToast('Please enter a valid address from the select wallet', ); + return; + } + + const oneKeyVaultKey = activeVault?.signers?.find((s) => { const signerInfo = vaultSigners?.find( (vs) => vs.masterFingerprint === s.masterFingerprint ); return signerInfo?.type === SignerType.ONEKEY; }); const oneKeySigner = vaultSigners?.find( - (vs) => vs.type === SignerType.ONEKEY + (vs) => + vs.type === SignerType.ONEKEY && + vs.masterFingerprint === oneKeyVaultKey?.masterFingerprint ); - if (onekeyVaultKey && oneKeySigner) { + if (oneKeyVaultKey && oneKeySigner) { navigation.dispatch( CommonActions.navigate('SignMessageOneKeyBle', { message: message.trim(), - address, - derivationPath: `${onekeyVaultKey.derivationPath}/0/0`, + address: messageAddress, + derivationPath: `${oneKeyVaultKey.derivationPath}/0/${addressIndex}`, signer: oneKeySigner, onSignatureReceived: (sig: string, addr: string) => { setSignature(sig); @@ -152,6 +181,8 @@ export const SignMessageScreen = ({ route, navigation }) => { }, }) ); + } else { + showToast('OneKey signer not found. Please try again.', ); } return; } @@ -465,7 +496,7 @@ const mediumSelectionContent = (onSigningMediumSelection, showBleOption = false) key={option.name} name={option.title} icon={option.icon} - onSelect={onSigningMediumSelection} + onSelect={() => onSigningMediumSelection(option.name)} /> ))} diff --git a/src/services/onekeyBle/index.ts b/src/services/onekeyBle/index.ts index 313d4836ad..5f429158d9 100644 --- a/src/services/onekeyBle/index.ts +++ b/src/services/onekeyBle/index.ts @@ -2,14 +2,16 @@ import HardwareBLESDK from '@onekeyfe/hd-ble-sdk'; import { type CoreApi, type Features, - type HDNodeType, - type MultisigRedeemScriptType, type SearchDevice, UI_EVENT, UI_REQUEST, UI_RESPONSE, } from '@onekeyfe/hd-core'; -import type { InputScriptType } from '@onekeyfe/hd-transport'; +import type { + HDNodeType, + InputScriptType, + MultisigRedeemScriptType, +} from '@onekeyfe/hd-transport'; import BIP32Factory from 'bip32'; import { BleManager } from 'react-native-ble-plx'; import { PermissionsAndroid, Platform } from 'react-native'; @@ -25,7 +27,7 @@ export const onekeyUIEmitter = DeviceEventEmitter; export const ONEKEY_UI_EVENT = 'onekey-ui-event'; // Use SDK's own constants as event values -export type OneKeyUIEvent = typeof UI_REQUEST.REQUEST_PIN | typeof UI_REQUEST.REQUEST_BUTTON | typeof UI_REQUEST.REQUEST_PASSPHRASE | 'idle'; +export type OneKeyUIEvent = typeof UI_REQUEST.REQUEST_PIN | typeof UI_REQUEST.REQUEST_BUTTON | 'idle'; // ─── Types ──────────────────────────────────────────────────────────────────── @@ -92,12 +94,13 @@ const handleUIEvent = (message: any) => { } if (message?.type === UI_REQUEST.REQUEST_PASSPHRASE) { - onekeyUIEmitter.emit(ONEKEY_UI_EVENT, UI_REQUEST.REQUEST_PASSPHRASE); + // Keeper does not support OneKey hidden-wallet passphrases. Keep all + // operations on the main wallet even if a call accidentally asks. sdkInstance.uiResponse({ type: UI_RESPONSE.RECEIVE_PASSPHRASE, payload: { value: '', - passphraseOnDevice: true, + passphraseOnDevice: false, save: false, }, }); @@ -154,17 +157,13 @@ export const getOneKeySdk = async (): Promise => { const ensureAndroidBLEPermissions = async (): Promise => { if (Platform.OS !== 'android') return true; - const permissions: string[] = []; - if (Number(Platform.Version) >= 31) { - permissions.push( - PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN, - PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT - ); - } - permissions.push( - PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, - PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION - ); + const permissions: Parameters[0] = + Number(Platform.Version) >= 31 + ? [ + PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN, + PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT, + ] + : [PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION]; const result = await PermissionsAndroid.requestMultiple(permissions); return Object.values(result).every((v) => v === PermissionsAndroid.RESULTS.GRANTED); @@ -271,6 +270,24 @@ const toMasterFingerprint = (rootFingerprint?: number): string => { return fp.toString(16).padStart(8, '0').toUpperCase(); }; +export const normalizeOneKeyFingerprint = (fingerprint?: string | null): string => + (fingerprint || '').toUpperCase(); + +export const assertOneKeyFingerprint = ( + deviceInfo: Pick, + signer?: { masterFingerprint?: string } +) => { + const expectedFingerprint = normalizeOneKeyFingerprint(signer?.masterFingerprint); + const actualFingerprint = normalizeOneKeyFingerprint(deviceInfo?.masterFingerprint); + + if (!expectedFingerprint || !actualFingerprint) { + throw new Error('Missing OneKey fingerprint. Please re-add this device.'); + } + if (expectedFingerprint !== actualFingerprint) { + throw new Error('Fingerprint mismatch. Wrong OneKey device connected.'); + } +}; + const extractXpub = (payload: any): string => { if (!payload?.xpub) throw new Error('Invalid xpub from OneKey'); return payload.xpub;

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