mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-22 23:08:07 +01:00
Merge branch 'master' of github.com:BlueWallet/BlueWallet into fix-bip38
This commit is contained in:
commit
20ff1c8871
14 changed files with 438 additions and 311 deletions
|
@ -51,7 +51,7 @@ install:
|
|||
- echo y | sdkmanager --no_https "system-images;android-$API;$EMU_FLAVOR;$ABI" >/dev/null # install our emulator
|
||||
|
||||
# Set up KVM on linux for hardware acceleration. Manually here so it only happens for emulator tests, takes ~30s
|
||||
- sudo -E apt-get -yq --no-install-suggests --no-install-recommends install bridge-utils libpulse0 libvirt-bin qemu-kvm virtinst ubuntu-vm-builder
|
||||
- sudo -E apt-get -yq --no-install-suggests --no-install-recommends install bridge-utils libpulse0 libvirt-bin libxcursor1 qemu-kvm virtinst ubuntu-vm-builder
|
||||
- sudo adduser $USER libvirt
|
||||
- sudo adduser $USER kvm
|
||||
|
||||
|
@ -99,4 +99,4 @@ cache:
|
|||
directories:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/
|
||||
- node_modules/
|
||||
- node_modules/
|
||||
|
|
13
RELEASE.md
13
RELEASE.md
|
@ -2,12 +2,12 @@
|
|||
|
||||
## Apple
|
||||
|
||||
* test the build on real device. its imperative that you run selftest and it gives you OK
|
||||
* test the build on a real device. It is imperative that you run selftest and it gives you OK
|
||||
* if necessary, up version number in all relevant files (you can use `./edit-version-number.sh`)
|
||||
* run `./release-notes.sh` - it prints changelog between latest tag and now, put this output under
|
||||
new version in file `ios/fastlane/metadata/en-US/release_notes.txt` (on top); if file got too big
|
||||
delete the oldest version from the bottom of the file
|
||||
* now is a good time to commit ver bump and release notes changes
|
||||
* now is a good time to commit a ver bump and release notes changes
|
||||
* create this release version in App Store Connect (iTunes) and attach appropriate build. note
|
||||
last 4 digits of the build and announce it - this is now a RC. no need to fill release notes yet
|
||||
* `cd ios/` and then run `DELIVER_USERNAME="my_itunes_email@example.com" DELIVER_PASSWORD="my_itunes_password" fastlane deliver --force --skip_binary_upload --skip_screenshots --ignore_language_directory_validation -a io.bluewallet.bluewallet --app_version "6.6.6"`
|
||||
|
@ -20,8 +20,9 @@ where `76ed479` is a latest commit in this version. replace the version as well.
|
|||
## Android
|
||||
|
||||
* do android after ios usually
|
||||
* test the build on real device. its imperative that you run selftest and it gives you OK. note which build you are testing
|
||||
* test the build on a real device. We hace accounts with browserstack where you can do so.
|
||||
* its imperative that you run selftest and it gives you OK. note which build you are testing
|
||||
* go to appcenter.ms, find this exact build under `master` builds, and press `Distribute` -> `Store` -> `Production`.
|
||||
in `Release notes` write `Bug fixes and performance improvements`, this field is to small to include actual changelog
|
||||
* wait till appcenter displays message that it is succesfully distributed
|
||||
* noice!
|
||||
in `Release notes` write the release, this field is to smaller than iOS, so you need to keep it bellow 500 characters.
|
||||
* now just wait till appcenter displays a message that it is succesfully distributed
|
||||
* noice!
|
||||
|
|
|
@ -140,7 +140,7 @@ android {
|
|||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 1
|
||||
versionName "5.2.2"
|
||||
versionName "5.3.1"
|
||||
multiDexEnabled true
|
||||
missingDimensionStrategy 'react-native-camera', 'general'
|
||||
testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type
|
||||
|
|
|
@ -302,8 +302,15 @@ export class AppStorage {
|
|||
await this.saveToDisk();
|
||||
};
|
||||
await WatchConnectivity.shared.sendWalletsToWatch();
|
||||
DeviceQuickActions.setWallets(this.wallets);
|
||||
DeviceQuickActions.setQuickActions();
|
||||
|
||||
const isStorageEncrypted = await this.storageIsEncrypted();
|
||||
if (isStorageEncrypted) {
|
||||
DeviceQuickActions.clearShortcutItems();
|
||||
DeviceQuickActions.removeAllWallets();
|
||||
} else {
|
||||
DeviceQuickActions.setWallets(this.wallets);
|
||||
DeviceQuickActions.setQuickActions();
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false; // failed loading data or loading/decryptin data
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.2.2</string>
|
||||
<string>5.3.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.2.2</string>
|
||||
<string>5.3.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>239</string>
|
||||
<key>CLKComplicationPrincipalClass</key>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.2.2</string>
|
||||
<string>5.3.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>239</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
|
|
|
@ -194,13 +194,13 @@ PODS:
|
|||
- React
|
||||
- react-native-blur (0.8.0):
|
||||
- React
|
||||
- react-native-camera (3.17.0):
|
||||
- react-native-camera (3.19.1):
|
||||
- React
|
||||
- react-native-camera/RCT (= 3.17.0)
|
||||
- react-native-camera/RN (= 3.17.0)
|
||||
- react-native-camera/RCT (3.17.0):
|
||||
- react-native-camera/RCT (= 3.19.1)
|
||||
- react-native-camera/RN (= 3.19.1)
|
||||
- react-native-camera/RCT (3.19.1):
|
||||
- React
|
||||
- react-native-camera/RN (3.17.0):
|
||||
- react-native-camera/RN (3.19.1):
|
||||
- React
|
||||
- react-native-document-picker (3.2.0):
|
||||
- React
|
||||
|
@ -497,7 +497,7 @@ SPEC CHECKSUMS:
|
|||
React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0
|
||||
react-native-biometrics: c892904948a32295b128f633bcc11eda020645c5
|
||||
react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c
|
||||
react-native-camera: 4ead7a30a89f275f531d80aa720cc69363c38135
|
||||
react-native-camera: 2eb144a4572d9342bddc946f4c0c3bc2b50e374e
|
||||
react-native-document-picker: e3516aff0dcf65ee0785d9bcf190eb10e2261154
|
||||
react-native-image-picker: 3637d63fef7e32a230141ab4660d3ceb773c824f
|
||||
react-native-randombytes: 991545e6eaaf700b4ee384c291ef3d572e0b2ca8
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.2.2</string>
|
||||
<string>5.3.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
v5.3.0
|
||||
======
|
||||
|
||||
* ADD: Open clipboard modal if address is detected at launch
|
||||
* ADD: Copy from clipboard on actionsheet
|
||||
* ADD: support for Electrum Personal Server and Electrs (disable protocol batching)
|
||||
* ADD: avatars in HodlHodl offers list
|
||||
* ADD: Long Press on Send. More optins to come
|
||||
* FIX: Remove quick actions if storage is encrypted (improves plausible deniability)
|
||||
* FIX: allow copy to clipboard on watch-only wallets
|
||||
* FIX: electrum connection status now updates realtime
|
||||
* FIX: import single-address bech32 wallet from WIF (closes #911)
|
||||
* FIX: duplicate input detected error (closes #912)
|
||||
* FIX: Error in back button - Marketplace #922
|
||||
* FIX: Don't display clipboard modal if content is from a lightning wallet
|
||||
* REF: some love to the about section
|
||||
|
||||
|
||||
v5.2.0
|
||||
======
|
||||
|
||||
|
@ -47,23 +65,3 @@ v4.9.4
|
|||
* FIX: Handle both chains
|
||||
* FIX: deeplinking (safello etc)
|
||||
* DEL: Remove alerts from main list
|
||||
|
||||
v4.9.2
|
||||
======
|
||||
|
||||
* ADD: Swipe to Scan
|
||||
* ADD: Handle clipboard content with both bitcoin: and lightning:
|
||||
* ADD: Ask user if they have backed up their seed phrase
|
||||
* ADD: Export screen allows copying to clipboard if its a LNDHub wallet
|
||||
* ADD: Show LNDHub backup when creating lnd wallet
|
||||
* ADD: CLP Fiat
|
||||
* FIX: TX Time visual glitch
|
||||
* FIX: Show an alert when theres a fetch transactions error
|
||||
* FIX: TX list uses whole canvas area
|
||||
* FIX: Don't allow empty wallet labels
|
||||
* FIX: Wallet type selecion clipping on advanced mode
|
||||
* FIX: Receive address was not being rendered
|
||||
* FIX: Don't show wallet export warning if wallet was imported
|
||||
* REF: Reworked Import wallet flow
|
||||
* REF: BIP49 to use electrum
|
||||
* REF: Custom receive
|
239
package-lock.json
generated
239
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "bluewallet",
|
||||
"version": "5.2.2",
|
||||
"version": "5.3.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
@ -18,11 +18,11 @@
|
|||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
"version": "7.8.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz",
|
||||
"integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==",
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz",
|
||||
"integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==",
|
||||
"requires": {
|
||||
"browserslist": "^4.8.5",
|
||||
"browserslist": "^4.9.1",
|
||||
"invariant": "^2.2.4",
|
||||
"semver": "^5.5.0"
|
||||
}
|
||||
|
@ -267,6 +267,11 @@
|
|||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
|
||||
"integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g=="
|
||||
},
|
||||
"@babel/helper-wrap-function": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
|
||||
|
@ -641,13 +646,39 @@
|
|||
}
|
||||
},
|
||||
"@babel/plugin-transform-modules-amd": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz",
|
||||
"integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==",
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz",
|
||||
"integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==",
|
||||
"requires": {
|
||||
"@babel/helper-module-transforms": "^7.8.3",
|
||||
"@babel/helper-module-transforms": "^7.9.0",
|
||||
"@babel/helper-plugin-utils": "^7.8.3",
|
||||
"babel-plugin-dynamic-import-node": "^2.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/helper-module-transforms": {
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
|
||||
"integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
|
||||
"requires": {
|
||||
"@babel/helper-module-imports": "^7.8.3",
|
||||
"@babel/helper-replace-supers": "^7.8.6",
|
||||
"@babel/helper-simple-access": "^7.8.3",
|
||||
"@babel/helper-split-export-declaration": "^7.8.3",
|
||||
"@babel/template": "^7.8.6",
|
||||
"@babel/types": "^7.9.0",
|
||||
"lodash": "^4.17.13"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
|
||||
"integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.9.5",
|
||||
"lodash": "^4.17.13",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-modules-commonjs": {
|
||||
|
@ -662,23 +693,75 @@
|
|||
}
|
||||
},
|
||||
"@babel/plugin-transform-modules-systemjs": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz",
|
||||
"integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==",
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz",
|
||||
"integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==",
|
||||
"requires": {
|
||||
"@babel/helper-hoist-variables": "^7.8.3",
|
||||
"@babel/helper-module-transforms": "^7.8.3",
|
||||
"@babel/helper-module-transforms": "^7.9.0",
|
||||
"@babel/helper-plugin-utils": "^7.8.3",
|
||||
"babel-plugin-dynamic-import-node": "^2.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/helper-module-transforms": {
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
|
||||
"integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
|
||||
"requires": {
|
||||
"@babel/helper-module-imports": "^7.8.3",
|
||||
"@babel/helper-replace-supers": "^7.8.6",
|
||||
"@babel/helper-simple-access": "^7.8.3",
|
||||
"@babel/helper-split-export-declaration": "^7.8.3",
|
||||
"@babel/template": "^7.8.6",
|
||||
"@babel/types": "^7.9.0",
|
||||
"lodash": "^4.17.13"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
|
||||
"integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.9.5",
|
||||
"lodash": "^4.17.13",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-modules-umd": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz",
|
||||
"integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==",
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz",
|
||||
"integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==",
|
||||
"requires": {
|
||||
"@babel/helper-module-transforms": "^7.8.3",
|
||||
"@babel/helper-module-transforms": "^7.9.0",
|
||||
"@babel/helper-plugin-utils": "^7.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/helper-module-transforms": {
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
|
||||
"integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
|
||||
"requires": {
|
||||
"@babel/helper-module-imports": "^7.8.3",
|
||||
"@babel/helper-replace-supers": "^7.8.6",
|
||||
"@babel/helper-simple-access": "^7.8.3",
|
||||
"@babel/helper-split-export-declaration": "^7.8.3",
|
||||
"@babel/template": "^7.8.6",
|
||||
"@babel/types": "^7.9.0",
|
||||
"lodash": "^4.17.13"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
|
||||
"integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.9.5",
|
||||
"lodash": "^4.17.13",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": {
|
||||
|
@ -848,12 +931,12 @@
|
|||
}
|
||||
},
|
||||
"@babel/preset-env": {
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz",
|
||||
"integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==",
|
||||
"version": "7.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz",
|
||||
"integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.8.4",
|
||||
"@babel/helper-compilation-targets": "^7.8.4",
|
||||
"@babel/compat-data": "^7.8.6",
|
||||
"@babel/helper-compilation-targets": "^7.8.7",
|
||||
"@babel/helper-module-imports": "^7.8.3",
|
||||
"@babel/helper-plugin-utils": "^7.8.3",
|
||||
"@babel/plugin-proposal-async-generator-functions": "^7.8.3",
|
||||
|
@ -876,13 +959,13 @@
|
|||
"@babel/plugin-transform-async-to-generator": "^7.8.3",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.8.3",
|
||||
"@babel/plugin-transform-block-scoping": "^7.8.3",
|
||||
"@babel/plugin-transform-classes": "^7.8.3",
|
||||
"@babel/plugin-transform-classes": "^7.8.6",
|
||||
"@babel/plugin-transform-computed-properties": "^7.8.3",
|
||||
"@babel/plugin-transform-destructuring": "^7.8.3",
|
||||
"@babel/plugin-transform-dotall-regex": "^7.8.3",
|
||||
"@babel/plugin-transform-duplicate-keys": "^7.8.3",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.8.3",
|
||||
"@babel/plugin-transform-for-of": "^7.8.4",
|
||||
"@babel/plugin-transform-for-of": "^7.8.6",
|
||||
"@babel/plugin-transform-function-name": "^7.8.3",
|
||||
"@babel/plugin-transform-literals": "^7.8.3",
|
||||
"@babel/plugin-transform-member-expression-literals": "^7.8.3",
|
||||
|
@ -893,9 +976,9 @@
|
|||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
|
||||
"@babel/plugin-transform-new-target": "^7.8.3",
|
||||
"@babel/plugin-transform-object-super": "^7.8.3",
|
||||
"@babel/plugin-transform-parameters": "^7.8.4",
|
||||
"@babel/plugin-transform-parameters": "^7.8.7",
|
||||
"@babel/plugin-transform-property-literals": "^7.8.3",
|
||||
"@babel/plugin-transform-regenerator": "^7.8.3",
|
||||
"@babel/plugin-transform-regenerator": "^7.8.7",
|
||||
"@babel/plugin-transform-reserved-words": "^7.8.3",
|
||||
"@babel/plugin-transform-shorthand-properties": "^7.8.3",
|
||||
"@babel/plugin-transform-spread": "^7.8.3",
|
||||
|
@ -903,7 +986,7 @@
|
|||
"@babel/plugin-transform-template-literals": "^7.8.3",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.8.4",
|
||||
"@babel/plugin-transform-unicode-regex": "^7.8.3",
|
||||
"@babel/types": "^7.8.3",
|
||||
"@babel/types": "^7.8.7",
|
||||
"browserslist": "^4.8.5",
|
||||
"core-js-compat": "^3.6.2",
|
||||
"invariant": "^2.2.2",
|
||||
|
@ -3066,14 +3149,14 @@
|
|||
}
|
||||
},
|
||||
"browserslist": {
|
||||
"version": "4.10.0",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz",
|
||||
"integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==",
|
||||
"version": "4.11.1",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz",
|
||||
"integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==",
|
||||
"requires": {
|
||||
"caniuse-lite": "^1.0.30001035",
|
||||
"electron-to-chromium": "^1.3.378",
|
||||
"node-releases": "^1.1.52",
|
||||
"pkg-up": "^3.1.0"
|
||||
"caniuse-lite": "^1.0.30001038",
|
||||
"electron-to-chromium": "^1.3.390",
|
||||
"node-releases": "^1.1.53",
|
||||
"pkg-up": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"bs58": {
|
||||
|
@ -3233,9 +3316,9 @@
|
|||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001035",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz",
|
||||
"integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ=="
|
||||
"version": "1.0.30001040",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001040.tgz",
|
||||
"integrity": "sha512-Ep0tEPeI5wCvmJNrXjE3etgfI+lkl1fTDU6Y3ZH1mhrjkPlVI9W4pcKbMo+BQLpEWKVYYp2EmYaRsqpPC3k7lQ=="
|
||||
},
|
||||
"capture-exit": {
|
||||
"version": "2.0.0",
|
||||
|
@ -3938,9 +4021,9 @@
|
|||
}
|
||||
},
|
||||
"dayjs": {
|
||||
"version": "1.8.20",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.20.tgz",
|
||||
"integrity": "sha512-mH0MCDxw6UCGJYxVN78h8ugWycZAO8thkj3bW6vApL5tS0hQplIDdAQcmbvl7n35H0AKdCJQaArTrIQw2xt4Qg=="
|
||||
"version": "1.8.23",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.23.tgz",
|
||||
"integrity": "sha512-NmYHMFONftoZbeOhVz6jfiXI4zSiPN6NoVWJgC0aZQfYVwzy/ZpESPHuCcI0B8BUMpSJQ08zenHDbofOLKq8hQ=="
|
||||
},
|
||||
"debounce": {
|
||||
"version": "1.2.0",
|
||||
|
@ -4102,9 +4185,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"detox": {
|
||||
"version": "16.0.0",
|
||||
"resolved": "https://registry.npmjs.org/detox/-/detox-16.0.0.tgz",
|
||||
"integrity": "sha512-arlcCWFhl3A+SNx6ehlVpGMrBH1FPHu38QdJGnVgnMSol84Vt85aPC4m+CkcLtfApXeow1uXadhjOrzPS0AuJQ==",
|
||||
"version": "16.1.1",
|
||||
"resolved": "https://registry.npmjs.org/detox/-/detox-16.1.1.tgz",
|
||||
"integrity": "sha512-0f0PFOcx/w4Gcm0KQHgJTnrLvrB+4DBu95VdBgd/z/6SyGPmU8+tgCIdshHvePStUfi7i2EBj4zpYMGE30sLFw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/core": "^7.4.5",
|
||||
|
@ -4369,9 +4452,9 @@
|
|||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.3.379",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz",
|
||||
"integrity": "sha512-NK9DBBYEBb5f9D7zXI0hiE941gq3wkBeQmXs1ingigA/jnTg5mhwY2Z5egwA+ZI8OLGKCx0h1Cl8/xeuIBuLlg=="
|
||||
"version": "1.3.402",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.402.tgz",
|
||||
"integrity": "sha512-gaCDfX7IUH0s3JmBiHCDPrvVcdnTTP1r4WLJc2dHkYYbLmXZ2XHiJCcGQ9Balf91aKTvuCKCyu2JjJYRykoI1w=="
|
||||
},
|
||||
"electrum-client": {
|
||||
"version": "git+https://github.com/BlueWallet/rn-electrum-client.git#2a5bb11dd9a8d89f328049d9ed59bce49d88a15d",
|
||||
|
@ -9438,19 +9521,9 @@
|
|||
}
|
||||
},
|
||||
"node-releases": {
|
||||
"version": "1.1.52",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz",
|
||||
"integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==",
|
||||
"requires": {
|
||||
"semver": "^6.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
}
|
||||
}
|
||||
"version": "1.1.53",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
|
||||
"integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ=="
|
||||
},
|
||||
"node-version": {
|
||||
"version": "1.2.0",
|
||||
|
@ -10127,11 +10200,51 @@
|
|||
}
|
||||
},
|
||||
"pkg-up": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
|
||||
"integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
|
||||
"integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
|
||||
"requires": {
|
||||
"find-up": "^3.0.0"
|
||||
"find-up": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"find-up": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
|
||||
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
|
||||
"requires": {
|
||||
"locate-path": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
|
||||
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
|
||||
"requires": {
|
||||
"p-locate": "^2.0.0",
|
||||
"path-exists": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"p-limit": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
|
||||
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
|
||||
"requires": {
|
||||
"p-try": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"p-locate": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
|
||||
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
|
||||
"requires": {
|
||||
"p-limit": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"p-try": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
|
||||
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
|
||||
}
|
||||
}
|
||||
},
|
||||
"plist": {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "bluewallet",
|
||||
"version": "5.2.2",
|
||||
"version": "5.3.1",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.6.2",
|
||||
|
@ -10,7 +10,7 @@
|
|||
"babel-eslint": "^10.0.2",
|
||||
"babel-jest": "^24.9.0",
|
||||
"babel-preset-flow": "^6.23.0",
|
||||
"detox": "16.0.0",
|
||||
"detox": "16.1.1",
|
||||
"eslint": "^6.5.1",
|
||||
"eslint-plugin-babel": "^5.3.0",
|
||||
"eslint-plugin-import": "^2.18.0",
|
||||
|
@ -57,7 +57,7 @@
|
|||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/preset-env": "7.8.4",
|
||||
"@babel/preset-env": "7.8.7",
|
||||
"@react-native-community/async-storage": "1.7.1",
|
||||
"@react-native-community/blur": "3.4.1",
|
||||
"@react-native-community/slider": "2.0.8",
|
||||
|
@ -76,7 +76,7 @@
|
|||
"buffer-reverse": "1.0.1",
|
||||
"coinselect": "3.1.11",
|
||||
"crypto-js": "3.1.9-1",
|
||||
"dayjs": "1.8.20",
|
||||
"dayjs": "1.8.23",
|
||||
"ecurve": "1.0.6",
|
||||
"electrum-client": "git+https://github.com/BlueWallet/rn-electrum-client.git#2a5bb11dd9a8d89f328049d9ed59bce49d88a15d",
|
||||
"eslint-config-prettier": "6.10.0",
|
||||
|
|
|
@ -1,15 +1,6 @@
|
|||
/* global alert */
|
||||
import React from 'react';
|
||||
import {
|
||||
Text,
|
||||
ActivityIndicator,
|
||||
Platform,
|
||||
KeyboardAvoidingView,
|
||||
View,
|
||||
TouchableWithoutFeedback,
|
||||
TouchableOpacity,
|
||||
Keyboard,
|
||||
} from 'react-native';
|
||||
import { Text, ActivityIndicator, KeyboardAvoidingView, View, TouchableOpacity, Keyboard, ScrollView } from 'react-native';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
BlueButton,
|
||||
|
@ -222,7 +213,7 @@ export default class ScanLndInvoice extends React.Component {
|
|||
renderWalletSelectionButton = () => {
|
||||
if (this.state.renderWalletSelectionButtonHidden) return;
|
||||
return (
|
||||
<View style={{ marginBottom: 16, alignItems: 'center', justifyContent: 'center' }}>
|
||||
<View style={{ marginBottom: 16, alignItems: 'center', justifyContent: 'flex-end' }}>
|
||||
{!this.state.isLoading && (
|
||||
<TouchableOpacity
|
||||
style={{ flexDirection: 'row', alignItems: 'center' }}
|
||||
|
@ -242,7 +233,7 @@ export default class ScanLndInvoice extends React.Component {
|
|||
}
|
||||
>
|
||||
<Text style={{ color: '#0c2550', fontSize: 14 }}>{this.state.fromWallet.getLabel()}</Text>
|
||||
<Text style={{ color: '#0c2550', fontSize: 14, fontWeight: '600', marginLeft: 8, marginRight: 4 }}>
|
||||
<Text style={{ color: '#0c2550', fontSize: 14, fontWeight: '600', marginLeft: 4, marginRight: 4 }}>
|
||||
{loc.formatBalanceWithoutSuffix(this.state.fromWallet.getBalance(), BitcoinUnit.SATS, false)}
|
||||
</Text>
|
||||
<Text style={{ color: '#0c2550', fontSize: 11, fontWeight: '600', textAlignVertical: 'bottom', marginTop: 2 }}>
|
||||
|
@ -265,10 +256,10 @@ export default class ScanLndInvoice extends React.Component {
|
|||
return <BlueLoading />;
|
||||
}
|
||||
return (
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={{ flex: 1 }}>
|
||||
<View style={{ flex: 1, justifyContent: 'space-between' }}>
|
||||
<KeyboardAvoidingView enabled behavior={Platform.OS === 'ios' ? 'position' : null} keyboardVerticalOffset={20}>
|
||||
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={{ flex: 1 }}>
|
||||
<View style={{ flex: 1 }}>
|
||||
<ScrollView contentContainerStyle={{ flex: 1, justifyContent: 'space-between' }}>
|
||||
<KeyboardAvoidingView enabled behavior="position" keyboardVerticalOffset={20}>
|
||||
<View style={{ marginTop: 60 }}>
|
||||
<BlueBitcoinAmount
|
||||
pointerEvents={this.state.isAmountInitiallyEmpty ? 'auto' : 'none'}
|
||||
|
@ -335,12 +326,11 @@ export default class ScanLndInvoice extends React.Component {
|
|||
</BlueCard>
|
||||
</BlueCard>
|
||||
</KeyboardAvoidingView>
|
||||
|
||||
{this.renderWalletSelectionButton()}
|
||||
</View>
|
||||
<BlueDismissKeyboardInputAccessory />
|
||||
</SafeBlueArea>
|
||||
</TouchableWithoutFeedback>
|
||||
</ScrollView>
|
||||
</View>
|
||||
<BlueDismissKeyboardInputAccessory />
|
||||
</SafeBlueArea>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -361,4 +351,4 @@ ScanLndInvoice.propTypes = {
|
|||
}),
|
||||
}),
|
||||
}),
|
||||
};
|
||||
};
|
|
@ -20,11 +20,9 @@ import {
|
|||
BlueFormLabel,
|
||||
BlueButton,
|
||||
SafeBlueArea,
|
||||
BlueFormInput,
|
||||
BlueNavigationStyle,
|
||||
BlueButtonLink,
|
||||
BlueSpacing20,
|
||||
BlueSpacing10,
|
||||
} from '../../BlueComponents';
|
||||
import { RadioGroup, RadioButton } from 'react-native-flexi-radio-button';
|
||||
import PropTypes from 'prop-types';
|
||||
|
@ -94,10 +92,10 @@ export default class WalletsAdd extends Component {
|
|||
}
|
||||
|
||||
return (
|
||||
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={{ flex: 1, paddingTop: 40 }}>
|
||||
<ScrollView>
|
||||
<BlueFormLabel>{loc.wallets.add.wallet_name}</BlueFormLabel>
|
||||
<KeyboardAvoidingView enabled behavior={Platform.OS === 'ios' ? 'position' : null} keyboardVerticalOffset={20}>
|
||||
<SafeBlueArea>
|
||||
<KeyboardAvoidingView enabled behavior={Platform.OS === 'ios' ? 'padding' : null} keyboardVerticalOffset={62}>
|
||||
<ScrollView>
|
||||
<BlueFormLabel>{loc.wallets.add.wallet_name}</BlueFormLabel>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'row',
|
||||
|
@ -127,199 +125,219 @@ export default class WalletsAdd extends Component {
|
|||
underlineColorAndroid="transparent"
|
||||
/>
|
||||
</View>
|
||||
</KeyboardAvoidingView>
|
||||
<BlueFormLabel>{loc.wallets.add.wallet_type}</BlueFormLabel>
|
||||
<BlueFormLabel>{loc.wallets.add.wallet_type}</BlueFormLabel>
|
||||
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
paddingTop: 10,
|
||||
marginHorizontal: 20,
|
||||
borderWidth: 0,
|
||||
minHeight: 100,
|
||||
}}
|
||||
>
|
||||
<BitcoinButton
|
||||
testID="ActivateBitcoinButton"
|
||||
active={this.state.activeBitcoin}
|
||||
onPress={() => {
|
||||
Keyboard.dismiss();
|
||||
this.setState({
|
||||
activeBitcoin: true,
|
||||
activeLightning: false,
|
||||
});
|
||||
}}
|
||||
style={{
|
||||
width: '45%',
|
||||
height: 88,
|
||||
}}
|
||||
/>
|
||||
<View style={{ borderWidth: 0, justifyContent: 'center', marginHorizontal: 8, alignSelf: 'center' }}>
|
||||
<BlueTextCentered style={{ color: '#0c2550' }}>{loc.wallets.add.or}</BlueTextCentered>
|
||||
</View>
|
||||
<LightningButton
|
||||
active={this.state.activeLightning}
|
||||
onPress={() => {
|
||||
Keyboard.dismiss();
|
||||
this.setState({
|
||||
activeBitcoin: false,
|
||||
activeLightning: true,
|
||||
});
|
||||
}}
|
||||
style={{
|
||||
width: '45%',
|
||||
height: 88,
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<View style={{ marginHorizontal: 20 }}>
|
||||
{(() => {
|
||||
if (this.state.activeBitcoin && this.state.isAdvancedOptionsEnabled) {
|
||||
return (
|
||||
<View>
|
||||
<BlueSpacing20 />
|
||||
<Text style={{ color: '#0c2550', fontWeight: '500' }}>{loc.settings.advanced_options}</Text>
|
||||
<RadioGroup onSelect={(index, value) => this.onSelect(index, value)} selectedIndex={0}>
|
||||
<RadioButton value={HDSegwitBech32Wallet.type}>
|
||||
<BlueText>{HDSegwitBech32Wallet.typeReadable} - Multiple addresses</BlueText>
|
||||
</RadioButton>
|
||||
<RadioButton value={SegwitP2SHWallet.type}>
|
||||
<BlueText>{SegwitP2SHWallet.typeReadable} - Single address</BlueText>
|
||||
</RadioButton>
|
||||
<RadioButton value={HDSegwitP2SHWallet.type}>
|
||||
<BlueText>{HDSegwitP2SHWallet.typeReadable} - Multiple addresses</BlueText>
|
||||
</RadioButton>
|
||||
</RadioGroup>
|
||||
</View>
|
||||
);
|
||||
} else if (this.state.activeLightning && this.state.isAdvancedOptionsEnabled) {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<BlueSpacing20 />
|
||||
<Text style={{ color: '#0c2550', fontWeight: '500' }}>{loc.settings.advanced_options}</Text>
|
||||
<BlueSpacing20 />
|
||||
<BlueText>Connect to your LNDHub</BlueText>
|
||||
<BlueFormInput
|
||||
value={this.state.walletBaseURI}
|
||||
onChangeText={text => {
|
||||
this.setState({ walletBaseURI: text });
|
||||
}}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="your node address"
|
||||
clearButtonMode="while-editing"
|
||||
autoCapitalize="none"
|
||||
/>
|
||||
</React.Fragment>
|
||||
);
|
||||
} else if (this.state.activeBitcoin === undefined && this.state.isAdvancedOptionsEnabled) {
|
||||
return <View />;
|
||||
}
|
||||
})()}
|
||||
<View
|
||||
style={{
|
||||
alignItems: 'center',
|
||||
flex: 1,
|
||||
marginVertical: 32,
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
paddingTop: 10,
|
||||
marginHorizontal: 20,
|
||||
borderWidth: 0,
|
||||
minHeight: 100,
|
||||
}}
|
||||
>
|
||||
{!this.state.isLoading ? (
|
||||
<BlueButton
|
||||
testID="Create"
|
||||
title={loc.wallets.add.create}
|
||||
disabled={this.state.activeBitcoin === undefined}
|
||||
onPress={() => {
|
||||
this.setState({ isLoading: true }, async () => {
|
||||
let w;
|
||||
<BitcoinButton
|
||||
testID="ActivateBitcoinButton"
|
||||
active={this.state.activeBitcoin}
|
||||
onPress={() => {
|
||||
Keyboard.dismiss();
|
||||
this.setState({
|
||||
activeBitcoin: true,
|
||||
activeLightning: false,
|
||||
});
|
||||
}}
|
||||
style={{
|
||||
width: '45%',
|
||||
height: 88,
|
||||
}}
|
||||
/>
|
||||
<View style={{ borderWidth: 0, justifyContent: 'center', marginHorizontal: 8, alignSelf: 'center' }}>
|
||||
<BlueTextCentered style={{ color: '#0c2550' }}>{loc.wallets.add.or}</BlueTextCentered>
|
||||
</View>
|
||||
<LightningButton
|
||||
active={this.state.activeLightning}
|
||||
onPress={() => {
|
||||
Keyboard.dismiss();
|
||||
this.setState({
|
||||
activeBitcoin: false,
|
||||
activeLightning: true,
|
||||
});
|
||||
}}
|
||||
style={{
|
||||
width: '45%',
|
||||
height: 88,
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
|
||||
if (this.state.activeLightning) {
|
||||
// eslint-disable-next-line
|
||||
<View style={{ marginHorizontal: 20 }}>
|
||||
{(() => {
|
||||
if (this.state.activeBitcoin && this.state.isAdvancedOptionsEnabled) {
|
||||
return (
|
||||
<View>
|
||||
<BlueSpacing20 />
|
||||
<Text style={{ color: '#0c2550', fontWeight: '500' }}>{loc.settings.advanced_options}</Text>
|
||||
<RadioGroup onSelect={(index, value) => this.onSelect(index, value)} selectedIndex={0}>
|
||||
<RadioButton value={HDSegwitBech32Wallet.type}>
|
||||
<BlueText>{HDSegwitBech32Wallet.typeReadable} - Multiple addresses</BlueText>
|
||||
</RadioButton>
|
||||
<RadioButton value={SegwitP2SHWallet.type}>
|
||||
<BlueText>{SegwitP2SHWallet.typeReadable} - Single address</BlueText>
|
||||
</RadioButton>
|
||||
<RadioButton value={HDSegwitP2SHWallet.type}>
|
||||
<BlueText>{HDSegwitP2SHWallet.typeReadable} - Multiple addresses</BlueText>
|
||||
</RadioButton>
|
||||
</RadioGroup>
|
||||
</View>
|
||||
);
|
||||
} else if (this.state.activeLightning && this.state.isAdvancedOptionsEnabled) {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<BlueSpacing20 />
|
||||
<Text style={{ color: '#0c2550', fontWeight: '500' }}>{loc.settings.advanced_options}</Text>
|
||||
<BlueSpacing20 />
|
||||
<BlueText>Connect to your LNDHub</BlueText>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'row',
|
||||
borderColor: '#d2d2d2',
|
||||
borderBottomColor: '#d2d2d2',
|
||||
borderWidth: 1.0,
|
||||
borderBottomWidth: 0.5,
|
||||
backgroundColor: '#f5f5f5',
|
||||
minHeight: 44,
|
||||
height: 44,
|
||||
alignItems: 'center',
|
||||
marginVertical: 16,
|
||||
borderRadius: 4,
|
||||
}}
|
||||
>
|
||||
<TextInput
|
||||
value={this.state.walletBaseURI}
|
||||
onChangeText={text => {
|
||||
this.setState({ walletBaseURI: text });
|
||||
}}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="your node address"
|
||||
clearButtonMode="while-editing"
|
||||
autoCapitalize="none"
|
||||
placeholderTextColor="#81868e"
|
||||
style={{ flex: 1, marginHorizontal: 8, color: '#81868e' }}
|
||||
editable={!this.state.isLoading}
|
||||
underlineColorAndroid="transparent"
|
||||
/>
|
||||
</View>
|
||||
</React.Fragment>
|
||||
);
|
||||
} else if (this.state.activeBitcoin === undefined && this.state.isAdvancedOptionsEnabled) {
|
||||
return <View />;
|
||||
}
|
||||
})()}
|
||||
<View
|
||||
style={{
|
||||
alignItems: 'center',
|
||||
flex: 1,
|
||||
marginTop: 32,
|
||||
}}
|
||||
>
|
||||
{!this.state.isLoading ? (
|
||||
<BlueButton
|
||||
testID="Create"
|
||||
title={loc.wallets.add.create}
|
||||
disabled={this.state.activeBitcoin === undefined}
|
||||
onPress={() => {
|
||||
this.setState({ isLoading: true }, async () => {
|
||||
let w;
|
||||
|
||||
this.createLightningWallet = async () => {
|
||||
w = new LightningCustodianWallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
if (this.state.activeLightning) {
|
||||
// eslint-disable-next-line
|
||||
|
||||
try {
|
||||
let lndhub =
|
||||
this.state.walletBaseURI.trim().length > 0
|
||||
? this.state.walletBaseURI
|
||||
: LightningCustodianWallet.defaultBaseUri;
|
||||
if (lndhub) {
|
||||
const isValidNodeAddress = await LightningCustodianWallet.isValidNodeAddress(lndhub);
|
||||
if (isValidNodeAddress) {
|
||||
w.setBaseURI(lndhub);
|
||||
w.init();
|
||||
} else {
|
||||
throw new Error('The provided node address is not valid LNDHub node.');
|
||||
this.createLightningWallet = async () => {
|
||||
w = new LightningCustodianWallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
|
||||
try {
|
||||
let lndhub =
|
||||
this.state.walletBaseURI.trim().length > 0
|
||||
? this.state.walletBaseURI
|
||||
: LightningCustodianWallet.defaultBaseUri;
|
||||
if (lndhub) {
|
||||
const isValidNodeAddress = await LightningCustodianWallet.isValidNodeAddress(lndhub);
|
||||
if (isValidNodeAddress) {
|
||||
w.setBaseURI(lndhub);
|
||||
w.init();
|
||||
} else {
|
||||
throw new Error('The provided node address is not valid LNDHub node.');
|
||||
}
|
||||
}
|
||||
await w.createAccount();
|
||||
await w.authorize();
|
||||
} catch (Err) {
|
||||
this.setState({ isLoading: false });
|
||||
console.warn('lnd create failure', Err);
|
||||
return alert(Err);
|
||||
// giving app, not adding anything
|
||||
}
|
||||
await w.createAccount();
|
||||
await w.authorize();
|
||||
} catch (Err) {
|
||||
this.setState({ isLoading: false });
|
||||
console.warn('lnd create failure', Err);
|
||||
return alert(Err);
|
||||
// giving app, not adding anything
|
||||
}
|
||||
A(A.ENUM.CREATED_LIGHTNING_WALLET);
|
||||
A(A.ENUM.CREATED_LIGHTNING_WALLET);
|
||||
await w.generate();
|
||||
BlueApp.wallets.push(w);
|
||||
await BlueApp.saveToDisk();
|
||||
EV(EV.enum.WALLETS_COUNT_CHANGED);
|
||||
A(A.ENUM.CREATED_WALLET);
|
||||
ReactNativeHapticFeedback.trigger('notificationSuccess', { ignoreAndroidSystemSettings: false });
|
||||
this.props.navigation.navigate('PleaseBackupLNDHub', {
|
||||
wallet: w,
|
||||
});
|
||||
};
|
||||
this.createLightningWallet();
|
||||
} else if (this.state.selectedIndex === 2) {
|
||||
// zero index radio - HD segwit
|
||||
w = new HDSegwitP2SHWallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
} else if (this.state.selectedIndex === 1) {
|
||||
// btc was selected
|
||||
// index 1 radio - segwit single address
|
||||
w = new SegwitP2SHWallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
} else {
|
||||
// btc was selected
|
||||
// index 2 radio - hd bip84
|
||||
w = new HDSegwitBech32Wallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
}
|
||||
if (this.state.activeBitcoin) {
|
||||
await w.generate();
|
||||
BlueApp.wallets.push(w);
|
||||
await BlueApp.saveToDisk();
|
||||
EV(EV.enum.WALLETS_COUNT_CHANGED);
|
||||
A(A.ENUM.CREATED_WALLET);
|
||||
ReactNativeHapticFeedback.trigger('notificationSuccess', { ignoreAndroidSystemSettings: false });
|
||||
this.props.navigation.navigate('PleaseBackupLNDHub', {
|
||||
wallet: w,
|
||||
});
|
||||
};
|
||||
this.createLightningWallet();
|
||||
} else if (this.state.selectedIndex === 2) {
|
||||
// zero index radio - HD segwit
|
||||
w = new HDSegwitP2SHWallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
} else if (this.state.selectedIndex === 1) {
|
||||
// btc was selected
|
||||
// index 1 radio - segwit single address
|
||||
w = new SegwitP2SHWallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
} else {
|
||||
// btc was selected
|
||||
// index 2 radio - hd bip84
|
||||
w = new HDSegwitBech32Wallet();
|
||||
w.setLabel(this.state.label || loc.wallets.details.title);
|
||||
}
|
||||
if (this.state.activeBitcoin) {
|
||||
await w.generate();
|
||||
BlueApp.wallets.push(w);
|
||||
await BlueApp.saveToDisk();
|
||||
EV(EV.enum.WALLETS_COUNT_CHANGED);
|
||||
A(A.ENUM.CREATED_WALLET);
|
||||
ReactNativeHapticFeedback.trigger('notificationSuccess', { ignoreAndroidSystemSettings: false });
|
||||
if (w.type === HDSegwitP2SHWallet.type || w.type === HDSegwitBech32Wallet.type) {
|
||||
this.props.navigation.navigate('PleaseBackup', {
|
||||
secret: w.getSecret(),
|
||||
});
|
||||
} else {
|
||||
this.props.navigation.dismiss();
|
||||
if (w.type === HDSegwitP2SHWallet.type || w.type === HDSegwitBech32Wallet.type) {
|
||||
this.props.navigation.navigate('PleaseBackup', {
|
||||
secret: w.getSecret(),
|
||||
});
|
||||
} else {
|
||||
this.props.navigation.dismiss();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
<ActivityIndicator />
|
||||
)}
|
||||
});
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
<ActivityIndicator />
|
||||
)}
|
||||
</View>
|
||||
<BlueButtonLink
|
||||
style={{ marginBottom: 0, marginTop: 24 }}
|
||||
title={loc.wallets.add.import_wallet}
|
||||
onPress={() => {
|
||||
this.props.navigation.navigate('ImportWallet');
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
<BlueSpacing10 />
|
||||
<BlueButtonLink
|
||||
title={loc.wallets.add.import_wallet}
|
||||
onPress={() => {
|
||||
this.props.navigation.navigate('ImportWallet');
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
</ScrollView>
|
||||
</ScrollView>
|
||||
</KeyboardAvoidingView>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue