mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-21 22:42:21 +01:00
Merge branch 'master' into renovate/ruby-on-rails-packages
This commit is contained in:
commit
8511893d98
123 changed files with 5573 additions and 32323 deletions
|
@ -11,18 +11,18 @@ jobs:
|
|||
- checkout
|
||||
|
||||
- restore_cache:
|
||||
key: node_modules-{{ checksum "yarn.lock" }}
|
||||
key: node_modules-{{ checksum "package-lock.json" }}
|
||||
|
||||
- run: test -d node_modules || yarn
|
||||
- run: test -d node_modules || npm i
|
||||
|
||||
- save_cache:
|
||||
key: node_modules-{{ checksum "yarn.lock" }}
|
||||
key: node_modules-{{ checksum "package-lock.json" }}
|
||||
paths:
|
||||
- node_modules
|
||||
|
||||
# run tests!
|
||||
- run:
|
||||
command: yarn tslint && yarn lint
|
||||
command: npm run tslint && npm run lint
|
||||
|
||||
unit:
|
||||
docker:
|
||||
|
@ -34,18 +34,18 @@ jobs:
|
|||
- checkout
|
||||
|
||||
- restore_cache:
|
||||
key: node_modules-{{ checksum "yarn.lock" }}
|
||||
key: node_modules-{{ checksum "package-lock.json" }}
|
||||
|
||||
- run: test -d node_modules || yarn
|
||||
- run: test -d node_modules || npm i
|
||||
|
||||
- save_cache:
|
||||
key: node_modules-{{ checksum "yarn.lock" }}
|
||||
key: node_modules-{{ checksum "package-lock.json" }}
|
||||
paths:
|
||||
- node_modules
|
||||
|
||||
# run tests!
|
||||
- run:
|
||||
command: yarn unit
|
||||
command: npm run unit
|
||||
|
||||
|
||||
integration:
|
||||
|
@ -63,18 +63,18 @@ jobs:
|
|||
- checkout
|
||||
|
||||
- restore_cache:
|
||||
key: node_modules-{{ checksum "yarn.lock" }}
|
||||
key: node_modules-{{ checksum "package-lock.json" }}
|
||||
|
||||
- run: test -d node_modules || yarn
|
||||
- run: test -d node_modules || npm i
|
||||
|
||||
- save_cache:
|
||||
key: node_modules-{{ checksum "yarn.lock" }}
|
||||
key: node_modules-{{ checksum "package-lock.json" }}
|
||||
paths:
|
||||
- node_modules
|
||||
|
||||
# run tests!
|
||||
- run:
|
||||
command: yarn jest || yarn jest || yarn jest || yarn jest
|
||||
command: npm run jest || npm run jest || npm run jest || npm run jest
|
||||
|
||||
# Orchestrate our job run sequence
|
||||
workflows:
|
||||
|
|
|
@ -40,7 +40,7 @@ jobs:
|
|||
- name: Install dependencies with Bundler
|
||||
run: bundle install
|
||||
- name: Install node_modules
|
||||
run: yarn install
|
||||
run: npm install
|
||||
- name: Install CocoaPods Dependencies
|
||||
run: |
|
||||
gem install cocoapods
|
||||
|
@ -171,4 +171,4 @@ jobs:
|
|||
...repo,
|
||||
issue_number: prNumber,
|
||||
body: message,
|
||||
});
|
||||
});
|
10
.github/workflows/build-release-apk.yml
vendored
10
.github/workflows/build-release-apk.yml
vendored
|
@ -22,13 +22,13 @@ jobs:
|
|||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Use yarn caches
|
||||
- name: Use npm caches
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.yarn/berry/cache
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
${{ runner.os }}-npm-
|
||||
|
||||
- name: Use specific Java version for sdkmanager to work
|
||||
uses: actions/setup-java@v3
|
||||
|
@ -38,7 +38,7 @@ jobs:
|
|||
cache: 'gradle'
|
||||
|
||||
- name: Install node_modules
|
||||
run: yarn install
|
||||
run: npm install --production
|
||||
|
||||
- name: Extract Version Name
|
||||
id: version_name
|
||||
|
|
38
.github/workflows/ci.yml
vendored
38
.github/workflows/ci.yml
vendored
|
@ -22,27 +22,27 @@ jobs:
|
|||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Use yarn caches
|
||||
- name: Use npm caches
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.yarn/berry/cache
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
${{ runner.os }}-npm-
|
||||
|
||||
- name: Use node_modules caches
|
||||
id: cache-nm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-nm-${{ hashFiles('yarn.lock') }}
|
||||
key: ${{ runner.os }}-nm-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
- name: Install node_modules
|
||||
if: steps.cache-nm.outputs.cache-hit != 'true'
|
||||
run: yarn
|
||||
run: npm install
|
||||
|
||||
- name: Run tests
|
||||
run: yarn test || yarn test || yarn test || yarn test
|
||||
run: npm test || npm test || npm test || npm test
|
||||
env:
|
||||
BIP47_HD_MNEMONIC: ${{ secrets.BIP47_HD_MNEMONIC}}
|
||||
HD_MNEMONIC: ${{ secrets.HD_MNEMONIC }}
|
||||
|
@ -74,15 +74,15 @@ jobs:
|
|||
docker-images: true
|
||||
swap-storage: true
|
||||
|
||||
- name: yarn and gradle caches in /mnt
|
||||
- name: npm and gradle caches in /mnt
|
||||
run: |
|
||||
rm -rf ~/.yarn
|
||||
rm -rf ~/.npm
|
||||
rm -rf ~/.gradle
|
||||
sudo mkdir -p /mnt/.yarn
|
||||
sudo mkdir -p /mnt/.npm
|
||||
sudo mkdir -p /mnt/.gradle
|
||||
sudo chown -R runner /mnt/.yarn
|
||||
sudo chown -R runner /mnt/.npm
|
||||
sudo chown -R runner /mnt/.gradle
|
||||
ln -s /mnt/.yarn /home/runner/
|
||||
ln -s /mnt/.npm /home/runner/
|
||||
ln -s /mnt/.gradle /home/runner/
|
||||
|
||||
- name: Create artifacts directory on /mnt
|
||||
|
@ -105,16 +105,16 @@ jobs:
|
|||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
- name: Use yarn caches
|
||||
- name: Use npm caches
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.yarn/berry/cache
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
${{ runner.os }}-npm-
|
||||
|
||||
- name: Install node_modules
|
||||
run: yarn || yarn
|
||||
run: npm install || npm install
|
||||
|
||||
- name: Use specific Java version for sdkmanager to work
|
||||
uses: actions/setup-java@v4
|
||||
|
@ -129,7 +129,7 @@ jobs:
|
|||
sudo udevadm trigger --name-match=kvm
|
||||
|
||||
- name: Build
|
||||
run: yarn e2e:release-build
|
||||
run: npm run e2e:release-build
|
||||
|
||||
- name: Run tests
|
||||
uses: reactivecircus/android-emulator-runner@v2
|
||||
|
@ -139,7 +139,7 @@ jobs:
|
|||
force-avd-creation: false
|
||||
emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -camera-back none -camera-front none -partition-size 2047
|
||||
arch: x86_64
|
||||
script: yarn e2e:release-test --record-videos all --record-logs all --take-screenshots all --headless -d 200000 -R 5 --artifacts-location /mnt/artifacts
|
||||
script: npm run e2e:release-test -- --record-videos all --record-logs all --take-screenshots all --headless -d 200000 -R 5 --artifacts-location /mnt/artifacts
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
|
|
11
.gitignore
vendored
11
.gitignore
vendored
|
@ -89,11 +89,6 @@ android/app/.project
|
|||
android/app/.classpath
|
||||
android/.settings/org.eclipse.buildship.core.prefs
|
||||
android/.project
|
||||
|
||||
# Yarn
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
android/.settings/org.eclipse.buildship.core.prefs
|
||||
android/app/.classpath
|
||||
android/app/.project
|
||||
|
|
1
.npmrc
Normal file
1
.npmrc
Normal file
|
@ -0,0 +1 @@
|
|||
legacy-peer-deps=true
|
874
.yarn/releases/yarn-3.6.4.cjs
vendored
874
.yarn/releases/yarn-3.6.4.cjs
vendored
File diff suppressed because one or more lines are too long
|
@ -1,5 +0,0 @@
|
|||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.6.4.cjs
|
||||
|
||||
# checksumBehavior: 'update'
|
2
Gemfile
2
Gemfile
|
@ -2,7 +2,7 @@ source "https://rubygems.org"
|
|||
|
||||
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
|
||||
ruby "3.1.6"
|
||||
gem 'rubyzip', '2.3.0'
|
||||
gem 'rubyzip', '2.3.2'
|
||||
gem "cocoapods", "1.15.2"
|
||||
gem "activesupport", ">= 6.1.7.3", "< 7.1.4"
|
||||
gem "fastlane"
|
20
Gemfile.lock
20
Gemfile.lock
|
@ -23,8 +23,8 @@ GEM
|
|||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.950.0)
|
||||
aws-sdk-core (3.201.0)
|
||||
aws-partitions (1.961.0)
|
||||
aws-sdk-core (3.201.3)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
|
@ -32,11 +32,11 @@ GEM
|
|||
aws-sdk-kms (1.88.0)
|
||||
aws-sdk-core (~> 3, >= 3.201.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.156.0)
|
||||
aws-sdk-s3 (1.157.0)
|
||||
aws-sdk-core (~> 3, >= 3.201.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.8.0)
|
||||
aws-sigv4 (1.9.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
|
@ -95,7 +95,7 @@ GEM
|
|||
escape (0.0.4)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
excon (0.110.0)
|
||||
excon (0.111.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
|
@ -117,7 +117,7 @@ GEM
|
|||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.0.4)
|
||||
multipart-post (~> 2)
|
||||
faraday-net_http (1.0.1)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
|
@ -125,7 +125,7 @@ GEM
|
|||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.3.1)
|
||||
fastlane (2.221.1)
|
||||
fastlane (2.222.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
|
@ -216,7 +216,7 @@ GEM
|
|||
json (2.7.2)
|
||||
jwt (2.8.2)
|
||||
base64
|
||||
mini_magick (4.13.1)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
minitest (5.24.1)
|
||||
molinillo (0.8.0)
|
||||
|
@ -243,7 +243,7 @@ GEM
|
|||
rouge (2.0.7)
|
||||
ruby-macho (2.5.1)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.0)
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.5)
|
||||
signet (0.19.0)
|
||||
addressable (~> 2.8)
|
||||
|
@ -288,7 +288,7 @@ DEPENDENCIES
|
|||
activesupport (>= 6.1.7.3, < 7.1.4)
|
||||
cocoapods (= 1.15.2)
|
||||
fastlane
|
||||
rubyzip (= 2.3.0)
|
||||
rubyzip (= 2.3.2)
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.1.6p260
|
||||
|
|
18
README.md
18
README.md
|
@ -27,12 +27,12 @@ Community: [telegram group](https://t.me/bluewallet)
|
|||
|
||||
## BUILD & RUN IT
|
||||
|
||||
Please refer to the engines field in package.json file for the minimum required versions of Node and yarn. It is preferred that you use an even-numbered version of Node as these are LTS versions.
|
||||
Please refer to the engines field in package.json file for the minimum required versions of Node and npm. It is preferred that you use an even-numbered version of Node as these are LTS versions.
|
||||
|
||||
To view the version of Node and yarn in your environment, run the following in your console:
|
||||
To view the version of Node and npm in your environment, run the following in your console:
|
||||
|
||||
```
|
||||
node --version && yarn --version
|
||||
node --version && npm --version
|
||||
```
|
||||
|
||||
* In your console:
|
||||
|
@ -40,10 +40,10 @@ node --version && yarn --version
|
|||
```
|
||||
git clone https://github.com/BlueWallet/BlueWallet.git
|
||||
cd BlueWallet
|
||||
yarn
|
||||
npm install
|
||||
```
|
||||
|
||||
Please make sure that your console is running the most stable versions of node (even-numbered versions).
|
||||
Please make sure that your console is running the most stable versions of npm and node (even-numbered versions).
|
||||
|
||||
* To run on Android:
|
||||
|
||||
|
@ -69,7 +69,7 @@ The above command will build the app and install it. Once you launch the app it
|
|||
|
||||
```
|
||||
npx pod-install
|
||||
yarn start
|
||||
npm start
|
||||
```
|
||||
|
||||
In another terminal window within the BlueWallet folder:
|
||||
|
@ -83,15 +83,15 @@ npx react-native run-ios
|
|||
|
||||
```
|
||||
npx pod-install
|
||||
yarn start
|
||||
npm start
|
||||
```
|
||||
|
||||
Open ios/BlueWallet.xcworkspace. Once the project loads, select the scheme/target BlueWallet-NoLDK. Click Run.
|
||||
Open ios/BlueWallet.xcworkspace. Once the project loads, select the scheme/target BlueWallet. Click Run.
|
||||
|
||||
## TESTS
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
npm run test
|
||||
```
|
||||
|
||||
|
||||
|
|
23
RELEASE.md
23
RELEASE.md
|
@ -2,27 +2,8 @@
|
|||
|
||||
## Apple
|
||||
|
||||
* 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 `./scripts/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 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"`
|
||||
but replace `6.6.6` with your version number - this will upload release notes to all locales in itunes
|
||||
* go back to App Store Connect and press `Submit for Review`. choose Yes, we use identifiers - for installs tracking
|
||||
* once its approved and released it is safe to cut a release tag: run `git tag -m "REL v6.6.6: 76ed479" v6.6.6 -s`
|
||||
where `76ed479` is a latest commit in this version. replace the version as well. then run `git push origin --tags`; alternative way to tag: `git tag -a v6.0.0 2e1a00609d5a0dbc91bcda2421df0f61bdfc6b10 -m "v6.0.0" -s`
|
||||
* you are awesome!
|
||||
* TBD
|
||||
|
||||
## Android
|
||||
|
||||
* do android after ios usually
|
||||
* test the build on a real device. We have 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 the release, this field is smaller than iOS, so you need to keep it bellow 500 characters.
|
||||
* now just wait till appcenter displays a message that it is successfully distributed
|
||||
* noice!
|
||||
* TBD
|
||||
|
|
|
@ -117,7 +117,6 @@ preBuild.dependsOn(copyFiatUnits)
|
|||
dependencies {
|
||||
// The version of react-native is set by the React Native Gradle Plugin
|
||||
implementation("com.facebook.react:react-android")
|
||||
implementation files("../../node_modules/rn-ldk/android/libs/LDK-release.aar")
|
||||
implementation 'androidx.core:core-ktx'
|
||||
implementation 'androidx.work:work-runtime-ktx:2.7.1'
|
||||
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo Uploading to Appetize and publishing link to Github...
|
||||
echo "Branch "
|
||||
BRANCH=`git ls-remote --heads origin | grep $(git rev-parse HEAD) | cut -d / -f 3`
|
||||
echo $BRANCH
|
||||
echo "Branch 2 "
|
||||
git log -n 1 --pretty=%d HEAD | awk '{print $2}' | sed 's/origin\///' | sed 's/)//'
|
||||
|
||||
FILENAME="$APPCENTER_OUTPUT_DIRECTORY/app-release.apk"
|
||||
|
||||
if [ -f $FILENAME ]; then
|
||||
APTZ=`curl "https://$APPETIZE@api.appetize.io/v1/apps" -F "file=@$FILENAME" -F "platform=android"`
|
||||
echo Apptezize response:
|
||||
echo $APTZ
|
||||
APPURL=`node -e "let e = JSON.parse('$APTZ'); console.log(e.publicURL + '?device=pixel4');"`
|
||||
echo App url: $APPURL
|
||||
PR=`node scripts/appcenter-post-build-get-pr-number.js`
|
||||
echo PR: $PR
|
||||
|
||||
DLOAD_APK="https://lambda-download-android-build.herokuapp.com/download/$BUILD_BUILDID"
|
||||
|
||||
curl -X POST --data "{\"body\":\"♫ This was a triumph. I'm making a note here: HUGE SUCCESS ♫\n\n [android in browser] $APPURL\n\n[download apk]($DLOAD_APK) \"}" -H "Authorization: Bearer $GITHUB" "https://api.github.com/repos/BlueWallet/BlueWallet/issues/$PR/comments"
|
||||
fi
|
|
@ -88,7 +88,7 @@ const storageKey = 'ELECTRUM_PEERS';
|
|||
const defaultPeer = { host: 'electrum1.bluewallet.io', ssl: '443' };
|
||||
export const hardcodedPeers: Peer[] = [
|
||||
{ host: 'mainnet.foundationdevices.com', ssl: '50002' },
|
||||
{ host: 'bitcoin.lukechilds.co', ssl: '50002' },
|
||||
// { host: 'bitcoin.lukechilds.co', ssl: '50002' },
|
||||
// { host: 'electrum.jochen-hoenicke.de', ssl: '50006' },
|
||||
{ host: 'electrum1.bluewallet.io', ssl: '443' },
|
||||
{ host: 'electrum.acinq.co', ssl: '50002' },
|
||||
|
|
|
@ -20,6 +20,8 @@ export interface TinySecp256k1InterfaceExtended {
|
|||
isXOnlyPoint(p: Uint8Array): boolean;
|
||||
|
||||
xOnlyPointAddTweak(p: Uint8Array, tweak: Uint8Array): XOnlyPointAddTweakResult | null;
|
||||
|
||||
privateNegate(d: Uint8Array): Uint8Array;
|
||||
}
|
||||
|
||||
necc.utils.sha256Sync = (...messages: Uint8Array[]): Uint8Array => {
|
||||
|
@ -119,7 +121,7 @@ const ecc: TinySecp256k1InterfaceExtended & TinySecp256k1Interface & TinySecp256
|
|||
return ret;
|
||||
}),
|
||||
|
||||
// privateNegate: (d: Uint8Array): Uint8Array => necc.utils.privateNegate(d),
|
||||
privateNegate: (d: Uint8Array): Uint8Array => necc.utils.privateNegate(d),
|
||||
|
||||
sign: (h: Uint8Array, d: Uint8Array, e?: Uint8Array): Uint8Array => {
|
||||
return necc.signSync(h, d, { der: false, extraEntropy: e });
|
||||
|
|
|
@ -18,7 +18,6 @@ import { HDSegwitElectrumSeedP2WPKHWallet } from './wallets/hd-segwit-electrum-s
|
|||
import { HDSegwitP2SHWallet } from './wallets/hd-segwit-p2sh-wallet';
|
||||
import { LegacyWallet } from './wallets/legacy-wallet';
|
||||
import { LightningCustodianWallet } from './wallets/lightning-custodian-wallet';
|
||||
import { LightningLdkWallet } from './wallets/lightning-ldk-wallet';
|
||||
import { MultisigHDWallet } from './wallets/multisig-hd-wallet';
|
||||
import { SegwitBech32Wallet } from './wallets/segwit-bech32-wallet';
|
||||
import { SegwitP2SHWallet } from './wallets/segwit-p2sh-wallet';
|
||||
|
@ -425,9 +424,6 @@ export class BlueApp {
|
|||
unserializedWallet.passphrase = passphrase;
|
||||
}
|
||||
|
||||
break;
|
||||
case LightningLdkWallet.type:
|
||||
unserializedWallet = LightningLdkWallet.fromJson(key) as unknown as LightningLdkWallet;
|
||||
break;
|
||||
case SLIP39SegwitP2SHWallet.type:
|
||||
unserializedWallet = SLIP39SegwitP2SHWallet.fromJson(key) as unknown as SLIP39SegwitP2SHWallet;
|
||||
|
@ -496,11 +492,6 @@ export class BlueApp {
|
|||
const ID = wallet.getID();
|
||||
const tempWallets = [];
|
||||
|
||||
if (wallet.type === LightningLdkWallet.type) {
|
||||
const ldkwallet = wallet;
|
||||
ldkwallet.stop().then(ldkwallet.purgeLocalStorage).catch(alert);
|
||||
}
|
||||
|
||||
for (const value of this.wallets) {
|
||||
if (value.getID() === ID) {
|
||||
// the one we should delete
|
||||
|
|
|
@ -12,7 +12,6 @@ export * from './wallets/hd-segwit-electrum-seed-p2wpkh-wallet';
|
|||
export * from './wallets/hd-segwit-p2sh-wallet';
|
||||
export * from './wallets/legacy-wallet';
|
||||
export * from './wallets/lightning-custodian-wallet';
|
||||
export * from './wallets/lightning-ldk-wallet';
|
||||
export * from './wallets/multisig-hd-wallet';
|
||||
export * from './wallets/segwit-bech32-wallet';
|
||||
export * from './wallets/segwit-p2sh-wallet';
|
||||
|
|
|
@ -8,7 +8,6 @@ import { HDSegwitElectrumSeedP2WPKHWallet } from './wallets/hd-segwit-electrum-s
|
|||
import { HDSegwitP2SHWallet } from './wallets/hd-segwit-p2sh-wallet';
|
||||
import { LegacyWallet } from './wallets/legacy-wallet';
|
||||
import { LightningCustodianWallet } from './wallets/lightning-custodian-wallet'; // Missing import
|
||||
import { LightningLdkWallet } from './wallets/lightning-ldk-wallet';
|
||||
import { MultisigHDWallet } from './wallets/multisig-hd-wallet';
|
||||
import { SegwitBech32Wallet } from './wallets/segwit-bech32-wallet';
|
||||
import { SLIP39LegacyP2PKHWallet, SLIP39SegwitBech32Wallet, SLIP39SegwitP2SHWallet } from './wallets/slip39-wallets';
|
||||
|
@ -26,7 +25,6 @@ export default class WalletGradient {
|
|||
static defaultGradients: string[] = ['#B770F6', '#9013FE'];
|
||||
static lightningCustodianWallet: string[] = ['#F1AA07', '#FD7E37']; // Corrected property with missing colors
|
||||
static aezeedWallet: string[] = ['#8584FF', '#5351FB'];
|
||||
static ldkWallet: string[] = ['#8584FF', '#5351FB'];
|
||||
|
||||
static createWallet = () => {
|
||||
const { colors } = useTheme();
|
||||
|
@ -68,9 +66,6 @@ export default class WalletGradient {
|
|||
case HDAezeedWallet.type:
|
||||
gradient = WalletGradient.aezeedWallet;
|
||||
break;
|
||||
case LightningLdkWallet.type:
|
||||
gradient = WalletGradient.ldkWallet;
|
||||
break;
|
||||
case LightningCustodianWallet.type:
|
||||
gradient = WalletGradient.lightningCustodianWallet;
|
||||
break;
|
||||
|
@ -131,9 +126,6 @@ export default class WalletGradient {
|
|||
case HDAezeedWallet.type:
|
||||
gradient = WalletGradient.aezeedWallet;
|
||||
break;
|
||||
case LightningLdkWallet.type:
|
||||
gradient = WalletGradient.ldkWallet;
|
||||
break;
|
||||
case LightningCustodianWallet.type:
|
||||
gradient = WalletGradient.lightningCustodianWallet;
|
||||
break;
|
||||
|
|
|
@ -12,7 +12,6 @@ import {
|
|||
HDSegwitP2SHWallet,
|
||||
LegacyWallet,
|
||||
LightningCustodianWallet,
|
||||
LightningLdkWallet,
|
||||
MultisigHDWallet,
|
||||
SegwitBech32Wallet,
|
||||
SegwitP2SHWallet,
|
||||
|
@ -183,17 +182,6 @@ const startImport = (
|
|||
yield { wallet: lnd };
|
||||
}
|
||||
|
||||
// is it LDK?
|
||||
yield { progress: 'lightning' };
|
||||
if (text.startsWith('ldk://')) {
|
||||
const ldk = new LightningLdkWallet();
|
||||
ldk.setSecret(text);
|
||||
if (ldk.valid()) {
|
||||
await ldk.init();
|
||||
yield { wallet: ldk };
|
||||
}
|
||||
}
|
||||
|
||||
// check bip39 wallets
|
||||
yield { progress: 'bip39' };
|
||||
const hd2 = new HDSegwitBech32Wallet();
|
||||
|
|
|
@ -1,698 +0,0 @@
|
|||
import * as bip39 from 'bip39';
|
||||
import * as bitcoin from 'bitcoinjs-lib';
|
||||
import bolt11 from 'bolt11';
|
||||
import RNFS from 'react-native-fs';
|
||||
import RnLdk from 'rn-ldk/src/index';
|
||||
|
||||
import presentAlert from '../../components/Alert';
|
||||
import { BitcoinUnit, Chain } from '../../models/bitcoinUnits';
|
||||
import { randomBytes } from '../rng';
|
||||
import SyncedAsyncStorage from '../synced-async-storage';
|
||||
import { HDSegwitBech32Wallet } from './hd-segwit-bech32-wallet';
|
||||
import { LightningCustodianWallet } from './lightning-custodian-wallet';
|
||||
import { SegwitBech32Wallet } from './segwit-bech32-wallet';
|
||||
|
||||
export class LightningLdkWallet extends LightningCustodianWallet {
|
||||
static readonly type = 'lightningLdk';
|
||||
static readonly typeReadable = 'Lightning LDK';
|
||||
// @ts-ignore: override
|
||||
public readonly type = LightningLdkWallet.type;
|
||||
// @ts-ignore: override
|
||||
public readonly typeReadable = LightningLdkWallet.typeReadable;
|
||||
|
||||
private _listChannels: any[] = [];
|
||||
private _listPayments: any[] = [];
|
||||
private _listInvoices: any[] = [];
|
||||
private _nodeConnectionDetailsCache: any = {}; // pubkey -> {pubkey, host, port, ts}
|
||||
private _refundAddressScriptHex: string = '';
|
||||
private _lastTimeBlockchainCheckedTs: number = 0;
|
||||
private _unwrapFirstExternalAddressFromMnemonicsCache: string = '';
|
||||
private static _predefinedNodes: Record<string, string> = {
|
||||
Bitrefill: '03d607f3e69fd032524a867b288216bfab263b6eaee4e07783799a6fe69bb84fac@3.237.23.179:9735',
|
||||
'OpenNode.com': '03abf6f44c355dec0d5aa155bdbdd6e0c8fefe318eff402de65c6eb2e1be55dc3e@3.132.230.42:9735',
|
||||
Fold: '02816caed43171d3c9854e3b0ab2cf0c42be086ff1bd4005acc2a5f7db70d83774@35.238.153.25:9735',
|
||||
'Moon (paywithmoon.com)': '025f1456582e70c4c06b61d5c8ed3ce229e6d0db538be337a2dc6d163b0ebc05a5@52.86.210.65:9735',
|
||||
'coingate.com': '0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3@3.124.63.44:9735',
|
||||
'Blockstream Store': '02df5ffe895c778e10f7742a6c5b8a0cefbe9465df58b92fadeb883752c8107c8f@35.232.170.67:9735',
|
||||
ACINQ: '03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f@3.33.236.230:9735',
|
||||
};
|
||||
|
||||
static getPredefinedNodes() {
|
||||
return LightningLdkWallet._predefinedNodes;
|
||||
}
|
||||
|
||||
static pubkeyToAlias(pubkeyHex: string) {
|
||||
for (const key of Object.keys(LightningLdkWallet._predefinedNodes)) {
|
||||
const val = LightningLdkWallet._predefinedNodes[key];
|
||||
if (val.startsWith(pubkeyHex)) return key;
|
||||
}
|
||||
|
||||
return pubkeyHex;
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.preferredBalanceUnit = BitcoinUnit.SATS;
|
||||
this.chain = Chain.OFFCHAIN;
|
||||
this.user_invoices_raw = []; // compatibility with other lightning wallet class
|
||||
}
|
||||
|
||||
valid() {
|
||||
try {
|
||||
const entropy = bip39.mnemonicToEntropy(this.secret.replace('ldk://', ''));
|
||||
return entropy.length === 64 || entropy.length === 32;
|
||||
} catch (_) {}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async stop() {
|
||||
return RnLdk.stop();
|
||||
}
|
||||
|
||||
async wipeLndDir() {}
|
||||
|
||||
async listPeers() {
|
||||
return RnLdk.listPeers();
|
||||
}
|
||||
|
||||
async listChannels() {
|
||||
try {
|
||||
// exception might be in case of incompletely-started LDK. then just ignore and return cached version
|
||||
this._listChannels = await RnLdk.listChannels();
|
||||
} catch (_) {}
|
||||
|
||||
return this._listChannels;
|
||||
}
|
||||
|
||||
async getLndTransactions() {
|
||||
return [];
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
const identityPubkey = await RnLdk.getNodeId();
|
||||
return {
|
||||
identityPubkey,
|
||||
};
|
||||
}
|
||||
|
||||
allowSend() {
|
||||
return true;
|
||||
}
|
||||
|
||||
timeToCheckBlockchain() {
|
||||
return +new Date() - this._lastTimeBlockchainCheckedTs > 5 * 60 * 1000; // 5 min, half of block time
|
||||
}
|
||||
|
||||
async fundingStateStepFinalize(txhex: string) {
|
||||
return RnLdk.openChannelStep2(txhex);
|
||||
}
|
||||
|
||||
async getMaturingBalance(): Promise<number> {
|
||||
return RnLdk.getMaturingBalance();
|
||||
}
|
||||
|
||||
async getMaturingHeight(): Promise<number> {
|
||||
return RnLdk.getMaturingHeight();
|
||||
}
|
||||
|
||||
/**
|
||||
* Probes getNodeId() call. if its available - LDK has started
|
||||
*
|
||||
* @return {Promise<boolean>}
|
||||
*/
|
||||
async isStarted() {
|
||||
let rez;
|
||||
try {
|
||||
rez = await Promise.race([new Promise(resolve => setTimeout(() => resolve('timeout'), 1000)), RnLdk.getNodeId()]);
|
||||
} catch (_) {}
|
||||
|
||||
if (rez === 'timeout' || !rez) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Waiter till getNodeId() starts to respond. Returns true if it eventually does,
|
||||
* false in case of timeout.
|
||||
*
|
||||
* @return {Promise<boolean>}
|
||||
*/
|
||||
async waitTillStarted() {
|
||||
for (let c = 0; c < 30; c++) {
|
||||
if (await this.isStarted()) return true;
|
||||
await new Promise(resolve => setTimeout(resolve, 500)); // sleep
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async openChannel(pubkeyHex: string, host: string, amountSats: number, privateChannel: boolean) {
|
||||
let triedToConnect = false;
|
||||
let port = 9735;
|
||||
|
||||
if (host.includes(':')) {
|
||||
const splitted = host.split(':');
|
||||
host = splitted[0];
|
||||
port = +splitted[1];
|
||||
}
|
||||
|
||||
for (let c = 0; c < 20; c++) {
|
||||
const peers = await this.listPeers();
|
||||
if (peers.includes(pubkeyHex)) {
|
||||
// all good, connected, lets open channel
|
||||
return await RnLdk.openChannelStep1(pubkeyHex, +amountSats);
|
||||
}
|
||||
|
||||
if (!triedToConnect) {
|
||||
triedToConnect = true;
|
||||
await RnLdk.connectPeer(pubkeyHex, host, +port);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 500)); // sleep
|
||||
}
|
||||
|
||||
throw new Error('timeout waiting for peer connection');
|
||||
}
|
||||
|
||||
async connectPeer(pubkeyHex: string, host: string, port: number) {
|
||||
return RnLdk.connectPeer(pubkeyHex, host, +port);
|
||||
}
|
||||
|
||||
async lookupNodeConnectionDetailsByPubkey(pubkey: string) {
|
||||
// first, trying cache:
|
||||
if (this._nodeConnectionDetailsCache[pubkey] && +new Date() - this._nodeConnectionDetailsCache[pubkey].ts < 4 * 7 * 24 * 3600 * 1000) {
|
||||
// cache hit
|
||||
return this._nodeConnectionDetailsCache[pubkey];
|
||||
}
|
||||
|
||||
// doing actual fetch and filling cache:
|
||||
const response = await fetch(`https://1ml.com/node/${pubkey}/json`);
|
||||
const json = await response.json();
|
||||
if (json && json.addresses && Array.isArray(json.addresses)) {
|
||||
for (const address of json.addresses) {
|
||||
if (address.network === 'tcp') {
|
||||
const ret = {
|
||||
pubkey,
|
||||
host: address.addr.split(':')[0],
|
||||
port: parseInt(address.addr.split(':')[1], 10),
|
||||
};
|
||||
|
||||
this._nodeConnectionDetailsCache[pubkey] = Object.assign({}, ret, { ts: +new Date() });
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getAddress(): string | false {
|
||||
return false;
|
||||
}
|
||||
|
||||
getSecret() {
|
||||
return this.secret;
|
||||
}
|
||||
|
||||
timeToRefreshBalance() {
|
||||
return (+new Date() - this._lastBalanceFetch) / 1000 > 300; // 5 min
|
||||
}
|
||||
|
||||
timeToRefreshTransaction() {
|
||||
return (+new Date() - this._lastTxFetch) / 1000 > 300; // 5 min
|
||||
}
|
||||
|
||||
async generate() {
|
||||
const buf = await randomBytes(16);
|
||||
this.secret = 'ldk://' + bip39.entropyToMnemonic(buf.toString('hex'));
|
||||
}
|
||||
|
||||
getEntropyHex() {
|
||||
let ret = bip39.mnemonicToEntropy(this.secret.replace('ldk://', ''));
|
||||
while (ret.length < 64) ret = '0' + ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
getStorageNamespace() {
|
||||
return RnLdk.getStorage().namespace;
|
||||
}
|
||||
|
||||
static async _decodeInvoice(invoice: string) {
|
||||
return bolt11.decode(invoice);
|
||||
}
|
||||
|
||||
static async _script2address(scriptHex: string) {
|
||||
return bitcoin.address.fromOutputScript(Buffer.from(scriptHex, 'hex'));
|
||||
}
|
||||
|
||||
async selftest() {
|
||||
await RnLdk.getStorage().selftest();
|
||||
await RnLdk.selftest();
|
||||
}
|
||||
|
||||
async init() {
|
||||
if (!this.getSecret()) return;
|
||||
console.warn('starting ldk');
|
||||
|
||||
try {
|
||||
// providing simple functions that RnLdk would otherwise rely on 3rd party APIs
|
||||
RnLdk.provideDecodeInvoiceFunc(LightningLdkWallet._decodeInvoice);
|
||||
RnLdk.provideScript2addressFunc(LightningLdkWallet._script2address);
|
||||
const syncedStorage = new SyncedAsyncStorage(this.getEntropyHex());
|
||||
// await syncedStorage.selftest();
|
||||
// await RnLdk.selftest();
|
||||
// console.warn('selftest passed');
|
||||
await syncedStorage.synchronize();
|
||||
|
||||
RnLdk.setStorage(syncedStorage);
|
||||
if (this._refundAddressScriptHex) {
|
||||
await RnLdk.setRefundAddressScript(this._refundAddressScriptHex);
|
||||
} else {
|
||||
// fallback, unwrapping address from bip39 mnemonic we have
|
||||
const address = this.unwrapFirstExternalAddressFromMnemonics();
|
||||
await this.setRefundAddress(address);
|
||||
}
|
||||
await RnLdk.start(this.getEntropyHex(), RNFS.DocumentDirectoryPath);
|
||||
|
||||
this._execInBackground(this.reestablishChannels);
|
||||
if (this.timeToCheckBlockchain()) this._execInBackground(this.checkBlockchain);
|
||||
} catch (error: any) {
|
||||
presentAlert({ message: 'LDK init error: ' + error.message });
|
||||
}
|
||||
}
|
||||
|
||||
unwrapFirstExternalAddressFromMnemonics() {
|
||||
if (this._unwrapFirstExternalAddressFromMnemonicsCache) return this._unwrapFirstExternalAddressFromMnemonicsCache; // cache hit
|
||||
const hd = new HDSegwitBech32Wallet();
|
||||
hd.setSecret(this.getSecret().replace('ldk://', ''));
|
||||
const address = hd._getExternalAddressByIndex(0);
|
||||
this._unwrapFirstExternalAddressFromMnemonicsCache = address;
|
||||
return address;
|
||||
}
|
||||
|
||||
unwrapFirstExternalWIFFromMnemonics() {
|
||||
const hd = new HDSegwitBech32Wallet();
|
||||
hd.setSecret(this.getSecret().replace('ldk://', ''));
|
||||
return hd._getExternalWIFByIndex(0);
|
||||
}
|
||||
|
||||
async checkBlockchain() {
|
||||
this._lastTimeBlockchainCheckedTs = +new Date();
|
||||
return RnLdk.checkBlockchain();
|
||||
}
|
||||
|
||||
async payInvoice(invoice: string, freeAmount = 0) {
|
||||
const decoded = this.decodeInvoice(invoice);
|
||||
|
||||
// if its NOT zero amount invoice, we forcefully reset passed amount argument so underlying LDK code
|
||||
// would extract amount from bolt11
|
||||
if (decoded.num_satoshis && parseInt(decoded.num_satoshis, 10) > 0) freeAmount = 0;
|
||||
|
||||
if (await this.channelsNeedReestablish()) {
|
||||
await this.reestablishChannels();
|
||||
await this.waitForAtLeastOneChannelBecomeActive();
|
||||
}
|
||||
|
||||
const result = await RnLdk.payInvoice(invoice, freeAmount);
|
||||
if (!result) throw new Error('Failed');
|
||||
|
||||
// ok, it was sent. now, waiting for an event that it was _actually_ paid:
|
||||
for (let c = 0; c < 60; c++) {
|
||||
await new Promise(resolve => setTimeout(resolve, 500)); // sleep
|
||||
|
||||
for (const sentPayment of RnLdk.sentPayments || []) {
|
||||
const paidHash = LightningLdkWallet.preimage2hash(sentPayment.payment_preimage);
|
||||
if (paidHash === decoded.payment_hash) {
|
||||
this._listPayments = this._listPayments || [];
|
||||
this._listPayments.push(
|
||||
Object.assign({}, sentPayment, {
|
||||
memo: decoded.description || 'Lightning payment',
|
||||
value: (freeAmount || decoded.num_satoshis) * -1,
|
||||
received: +new Date(),
|
||||
payment_preimage: sentPayment.payment_preimage,
|
||||
payment_hash: decoded.payment_hash,
|
||||
}),
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (const failedPayment of RnLdk.failedPayments || []) {
|
||||
if (failedPayment.payment_hash === decoded.payment_hash) throw new Error(JSON.stringify(failedPayment));
|
||||
}
|
||||
}
|
||||
|
||||
// no? lets just throw timeout error
|
||||
throw new Error('Payment timeout');
|
||||
}
|
||||
|
||||
/**
|
||||
* In case user initiated channel opening, and then lost peer connection (i.e. app went in background for an
|
||||
* extended period of time), when user gets back to the app the channel might already have enough confirmations,
|
||||
* but will never be acknowledged as 'established' by LDK until peer reconnects so that ldk & peer can negotiate and
|
||||
* agree that channel is now established
|
||||
*/
|
||||
async reconnectPeersWithPendingChannels() {
|
||||
const peers = await RnLdk.listPeers();
|
||||
const peers2reconnect: Record<string, boolean> = {};
|
||||
if (this._listChannels) {
|
||||
for (const channel of this._listChannels) {
|
||||
if (!channel.is_funding_locked) {
|
||||
// pending channel
|
||||
if (!peers.includes(channel.remote_node_id)) peers2reconnect[channel.remote_node_id] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const pubkey of Object.keys(peers2reconnect)) {
|
||||
const { host, port } = await this.lookupNodeConnectionDetailsByPubkey(pubkey);
|
||||
await this.connectPeer(pubkey, host, port);
|
||||
}
|
||||
}
|
||||
|
||||
async getUserInvoices(limit: number | false = false) {
|
||||
const newInvoices: any[] = [];
|
||||
let found = false;
|
||||
|
||||
// okay, so the idea is that `this._listInvoices` is a persistent storage of invoices, while
|
||||
// `RnLdk.receivedPayments` is only a temp storage of emitted events
|
||||
|
||||
// we iterate through all stored invoices
|
||||
for (const invoice of this._listInvoices) {
|
||||
const newInvoice = Object.assign({}, invoice);
|
||||
|
||||
// iterate through events of received payments
|
||||
for (const receivedPayment of RnLdk.receivedPayments || []) {
|
||||
if (receivedPayment.payment_hash === invoice.payment_hash) {
|
||||
// match! this particular payment was paid
|
||||
newInvoice.ispaid = true;
|
||||
newInvoice.value = Math.floor(parseInt(receivedPayment.amt, 10) / 1000);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
newInvoices.push(newInvoice);
|
||||
}
|
||||
|
||||
// overwrite stored array if flag was set
|
||||
if (found) this._listInvoices = newInvoices;
|
||||
|
||||
return this._listInvoices;
|
||||
}
|
||||
|
||||
isInvoiceGeneratedByWallet(paymentRequest: string) {
|
||||
return Boolean(this?._listInvoices?.some(invoice => invoice.payment_request === paymentRequest));
|
||||
}
|
||||
|
||||
weOwnAddress(address: string) {
|
||||
return false;
|
||||
}
|
||||
|
||||
async addInvoice(amtSat: number, memo: string) {
|
||||
if (await this.channelsNeedReestablish()) {
|
||||
await this.reestablishChannels();
|
||||
await this.waitForAtLeastOneChannelBecomeActive();
|
||||
}
|
||||
|
||||
if (this.getReceivableBalance() < amtSat) throw new Error('You dont have enough inbound capacity');
|
||||
|
||||
const paymentRequest = await RnLdk.addInvoice(amtSat * 1000, memo);
|
||||
if (!paymentRequest) return false;
|
||||
|
||||
const decoded = this.decodeInvoice(paymentRequest);
|
||||
|
||||
this._listInvoices = this._listInvoices || [];
|
||||
const tx = {
|
||||
payment_request: paymentRequest,
|
||||
ispaid: false,
|
||||
timestamp: +new Date(),
|
||||
expire_time: 3600 * 1000,
|
||||
amt: amtSat,
|
||||
type: 'user_invoice',
|
||||
payment_hash: decoded.payment_hash,
|
||||
description: memo || '',
|
||||
};
|
||||
this._listInvoices.push(tx);
|
||||
|
||||
return paymentRequest;
|
||||
}
|
||||
|
||||
async getAddressAsync(): Promise<string> {
|
||||
throw new Error('getAddressAsync: Not implemented');
|
||||
}
|
||||
|
||||
async allowOnchainAddress(): Promise<boolean> {
|
||||
throw new Error('allowOnchainAddress: Not implemented');
|
||||
}
|
||||
|
||||
getTransactions() {
|
||||
const ret = [];
|
||||
|
||||
for (const payment of this?._listPayments || []) {
|
||||
const newTx = Object.assign({}, payment, {
|
||||
type: 'paid_invoice',
|
||||
walletID: this.getID(),
|
||||
});
|
||||
ret.push(newTx);
|
||||
}
|
||||
|
||||
// ############################################
|
||||
|
||||
for (const invoice of this?._listInvoices || []) {
|
||||
const tx = {
|
||||
payment_request: invoice.payment_request,
|
||||
ispaid: invoice.ispaid,
|
||||
received: invoice.timestamp,
|
||||
type: invoice.type,
|
||||
value: invoice.value || invoice.amt,
|
||||
memo: invoice.description,
|
||||
timestamp: invoice.timestamp, // important
|
||||
expire_time: invoice.expire_time, // important
|
||||
walletID: this.getID(),
|
||||
};
|
||||
|
||||
if (tx.ispaid || invoice.timestamp + invoice.expire_time > +new Date()) {
|
||||
// expired non-paid invoices are not shown
|
||||
ret.push(tx);
|
||||
}
|
||||
}
|
||||
|
||||
ret.sort(function (a, b) {
|
||||
return b.received - a.received;
|
||||
});
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
async fetchTransactions() {
|
||||
if (this.timeToCheckBlockchain()) {
|
||||
try {
|
||||
// exception might be in case of incompletely-started LDK
|
||||
this._listChannels = await RnLdk.listChannels();
|
||||
await this.checkBlockchain();
|
||||
// ^^^ will be executed if above didnt throw exceptions, which means ldk fully started.
|
||||
// we need this for a case when app returns from background if it was in bg for a really long time.
|
||||
// ldk needs to update it's blockchain data, and this is practically the only place where it can
|
||||
// do that (except on cold start)
|
||||
} catch (_) {}
|
||||
}
|
||||
|
||||
try {
|
||||
await this.reconnectPeersWithPendingChannels();
|
||||
} catch (error: any) {
|
||||
console.log('fetchTransactions failed');
|
||||
console.log(error.message);
|
||||
}
|
||||
|
||||
await this.getUserInvoices(); // it internally updates paid user invoices
|
||||
}
|
||||
|
||||
getBalance() {
|
||||
let sum = 0;
|
||||
if (this._listChannels) {
|
||||
for (const channel of this._listChannels) {
|
||||
if (!channel.is_funding_locked) continue; // pending channel
|
||||
sum += Math.floor(parseInt(channel.outbound_capacity_msat, 10) / 1000);
|
||||
}
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
getReceivableBalance() {
|
||||
let sum = 0;
|
||||
if (this._listChannels) {
|
||||
for (const channel of this._listChannels) {
|
||||
if (!channel.is_funding_locked) continue; // pending channel
|
||||
sum += Math.floor(parseInt(channel.inbound_capacity_msat, 10) / 1000);
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks if there is balance on first unwapped address we have.
|
||||
* This address is a fallback in case user has _no_ other wallets to withdraw onchain coins to, so closed-channel
|
||||
* funds land on this address. Ofcourse, if user provided us a withdraw address, it should be stored in
|
||||
* `this._refundAddressScriptHex` and its balance frankly is not our concern.
|
||||
*
|
||||
* @return {Promise<{confirmedBalance: number}>}
|
||||
*/
|
||||
async walletBalance() {
|
||||
let confirmedSat = 0;
|
||||
if (this._unwrapFirstExternalAddressFromMnemonicsCache) {
|
||||
const response = await fetch('https://blockstream.info/api/address/' + this._unwrapFirstExternalAddressFromMnemonicsCache + '/utxo');
|
||||
const json = await response.json();
|
||||
if (json && Array.isArray(json)) {
|
||||
for (const utxo of json) {
|
||||
if (utxo?.status?.confirmed) {
|
||||
confirmedSat += parseInt(utxo.value, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { confirmedBalance: confirmedSat };
|
||||
}
|
||||
|
||||
async fetchBalance() {
|
||||
await this.listChannels(); // updates channels
|
||||
}
|
||||
|
||||
async claimCoins(address: string) {
|
||||
console.log('unwrapping wif...');
|
||||
const wif = this.unwrapFirstExternalWIFFromMnemonics();
|
||||
const wallet = new SegwitBech32Wallet();
|
||||
wallet.setSecret(String(wif));
|
||||
console.log('fetching balance...');
|
||||
await wallet.fetchUtxo();
|
||||
console.log(wallet.getBalance(), wallet.getUtxo());
|
||||
console.log('creating transaction...');
|
||||
// @ts-ignore wtf wallet.getUtxo() and first arg of createTransaction are not compatible
|
||||
const { tx } = wallet.createTransaction(wallet.getUtxo(), [{ address }], 2, address, 0, false, 0);
|
||||
if (!tx) throw new Error('claimCoins: could not create transaction');
|
||||
console.log('broadcasting...');
|
||||
return await wallet.broadcastTx(tx.toHex());
|
||||
}
|
||||
|
||||
async fetchInfo() {
|
||||
throw new Error('fetchInfo: Not implemented');
|
||||
}
|
||||
|
||||
allowReceive() {
|
||||
return true;
|
||||
}
|
||||
|
||||
async closeChannel(fundingTxidHex: string, force = false) {
|
||||
return force ? await RnLdk.closeChannelForce(fundingTxidHex) : await RnLdk.closeChannelCooperatively(fundingTxidHex);
|
||||
}
|
||||
|
||||
getLatestTransactionTime(): string | 0 {
|
||||
if (this.getTransactions().length === 0) {
|
||||
return 0;
|
||||
}
|
||||
let max = -1;
|
||||
for (const tx of this.getTransactions()) {
|
||||
if (tx.received) max = Math.max(tx.received, max);
|
||||
}
|
||||
return new Date(max).toString();
|
||||
}
|
||||
|
||||
async getLogs() {
|
||||
return RnLdk.getLogs()
|
||||
.map(log => log.line)
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
async getLogsWithTs() {
|
||||
return RnLdk.getLogs()
|
||||
.map(log => log.ts + ' ' + log.line)
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
async fetchPendingTransactions() {}
|
||||
|
||||
async fetchUserInvoices() {
|
||||
await this.getUserInvoices();
|
||||
}
|
||||
|
||||
static preimage2hash(preimageHex: string): string {
|
||||
const hash = bitcoin.crypto.sha256(Buffer.from(preimageHex, 'hex'));
|
||||
return hash.toString('hex');
|
||||
}
|
||||
|
||||
async reestablishChannels() {
|
||||
const connectedInThisRun: any = {};
|
||||
for (const channel of await this.listChannels()) {
|
||||
if (channel.is_usable) continue; // already connected..?
|
||||
if (connectedInThisRun[channel.remote_node_id]) continue; // already tried to reconnect (in case there are several channels with the same node)
|
||||
const { pubkey, host, port } = await this.lookupNodeConnectionDetailsByPubkey(channel.remote_node_id);
|
||||
await this.connectPeer(pubkey, host, port);
|
||||
connectedInThisRun[pubkey] = true;
|
||||
}
|
||||
}
|
||||
|
||||
async channelsNeedReestablish() {
|
||||
const freshListChannels = await this.listChannels();
|
||||
const active = freshListChannels.filter(chan => !!chan.is_usable && chan.is_funding_locked).length;
|
||||
return freshListChannels.length !== +active;
|
||||
}
|
||||
|
||||
async waitForAtLeastOneChannelBecomeActive() {
|
||||
const active = (await this.listChannels()).filter(chan => !!chan.is_usable).length;
|
||||
|
||||
for (let c = 0; c < 10; c++) {
|
||||
await new Promise(resolve => setTimeout(resolve, 500)); // sleep
|
||||
const freshListChannels = await this.listChannels();
|
||||
const active2 = freshListChannels.filter(chan => !!chan.is_usable).length;
|
||||
if (freshListChannels.length === +active2) return true; // all active kek
|
||||
|
||||
if (freshListChannels.length === 0) return true; // no channels at all
|
||||
if (+active2 > +active) return true; // something became active, lets ret
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async setRefundAddress(address: string) {
|
||||
const script = bitcoin.address.toOutputScript(address);
|
||||
this._refundAddressScriptHex = script.toString('hex');
|
||||
await RnLdk.setRefundAddressScript(this._refundAddressScriptHex);
|
||||
}
|
||||
|
||||
static async getVersion() {
|
||||
return RnLdk.getVersion();
|
||||
}
|
||||
|
||||
static getPackageVersion() {
|
||||
return RnLdk.getPackageVersion();
|
||||
}
|
||||
|
||||
getChannelsClosedEvents() {
|
||||
return RnLdk.channelsClosed;
|
||||
}
|
||||
|
||||
async purgeLocalStorage() {
|
||||
return RnLdk.getStorage().purgeLocalStorage();
|
||||
}
|
||||
|
||||
/**
|
||||
* executes async function in background, so calling code can return immediately, while catching all thrown exceptions
|
||||
* and showing them in alert() instead of propagating them up
|
||||
*
|
||||
* @param func {function} Async functino to execute
|
||||
* @private
|
||||
*/
|
||||
_execInBackground(func: () => void) {
|
||||
const that = this;
|
||||
(async () => {
|
||||
try {
|
||||
await func.call(that);
|
||||
} catch (error: any) {
|
||||
presentAlert({ message: '_execInBackground error:' + error.message });
|
||||
}
|
||||
})();
|
||||
}
|
||||
}
|
|
@ -11,7 +11,6 @@ import { HDSegwitElectrumSeedP2WPKHWallet } from './hd-segwit-electrum-seed-p2wp
|
|||
import { HDSegwitP2SHWallet } from './hd-segwit-p2sh-wallet';
|
||||
import { LegacyWallet } from './legacy-wallet';
|
||||
import { LightningCustodianWallet } from './lightning-custodian-wallet';
|
||||
import { LightningLdkWallet } from './lightning-ldk-wallet';
|
||||
import { MultisigHDWallet } from './multisig-hd-wallet';
|
||||
import { SegwitBech32Wallet } from './segwit-bech32-wallet';
|
||||
import { SegwitP2SHWallet } from './segwit-p2sh-wallet';
|
||||
|
@ -133,7 +132,6 @@ export type TWallet =
|
|||
| HDSegwitP2SHWallet
|
||||
| LegacyWallet
|
||||
| LightningCustodianWallet
|
||||
| LightningLdkWallet
|
||||
| MultisigHDWallet
|
||||
| SLIP39LegacyP2PKHWallet
|
||||
| SLIP39SegwitBech32Wallet
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
import React from 'react';
|
||||
import { StyleSheet, Text, View } from 'react-native';
|
||||
|
||||
import loc, { formatBalanceWithoutSuffix } from '../loc';
|
||||
import { BitcoinUnit } from '../models/bitcoinUnits';
|
||||
import { useTheme } from './themes';
|
||||
|
||||
interface LNNodeBarProps {
|
||||
canReceive: number;
|
||||
canSend: number;
|
||||
nodeAlias?: string;
|
||||
disabled?: boolean;
|
||||
itemPriceUnit?: BitcoinUnit;
|
||||
}
|
||||
|
||||
export const LNNodeBar: React.FC<LNNodeBarProps> = ({
|
||||
canReceive = 0,
|
||||
canSend = 0,
|
||||
nodeAlias = '',
|
||||
disabled = false,
|
||||
itemPriceUnit = BitcoinUnit.SATS,
|
||||
}) => {
|
||||
const { colors } = useTheme();
|
||||
const opacity = { opacity: disabled ? 0.5 : 1.0 };
|
||||
const canSendBarFlex = {
|
||||
flex: canReceive > 0 && canSend > 0 ? Math.abs(canSend / (canReceive + canSend)) * 1.0 : 1.0,
|
||||
};
|
||||
const stylesHook = StyleSheet.create({
|
||||
nodeAlias: {
|
||||
color: colors.alternativeTextColor2,
|
||||
},
|
||||
});
|
||||
return (
|
||||
<View style={[styles.root, opacity]}>
|
||||
{nodeAlias.trim().length > 0 && <Text style={[styles.nodeAlias, stylesHook.nodeAlias]}>{nodeAlias}</Text>}
|
||||
<View style={styles.canReceiveBar}>
|
||||
<View style={styles.fullFlexDirectionRow}>
|
||||
<View style={[styles.canSendBar, canSendBarFlex]} />
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View style={styles.containerBottomText}>
|
||||
<View style={styles.containerBottomRightText}>
|
||||
<Text style={styles.titleText}>{loc.lnd.can_send.toUpperCase()}</Text>
|
||||
<Text style={styles.canSend}>{formatBalanceWithoutSuffix(canSend, itemPriceUnit, true).toString()}</Text>
|
||||
</View>
|
||||
<View style={styles.containerBottomLeftText}>
|
||||
<Text style={styles.titleText}>{loc.lnd.can_receive.toUpperCase()}</Text>
|
||||
<Text style={styles.canReceive}>{formatBalanceWithoutSuffix(canReceive, itemPriceUnit, true).toString()}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default LNNodeBar;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
root: {
|
||||
flex: 1,
|
||||
},
|
||||
containerBottomText: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
marginTop: 16,
|
||||
},
|
||||
nodeAlias: {
|
||||
marginVertical: 16,
|
||||
},
|
||||
canSendBar: {
|
||||
height: 14,
|
||||
maxHeight: 14,
|
||||
backgroundColor: '#4E6CF5',
|
||||
borderRadius: 6,
|
||||
},
|
||||
canReceiveBar: { backgroundColor: '#57B996', borderRadius: 6, height: 14, maxHeight: 14 },
|
||||
fullFlexDirectionRow: {
|
||||
flexDirection: 'row',
|
||||
flex: 1,
|
||||
},
|
||||
containerBottomLeftText: {},
|
||||
containerBottomRightText: {},
|
||||
titleText: {
|
||||
color: '#9AA0AA',
|
||||
},
|
||||
canReceive: {
|
||||
color: '#57B996',
|
||||
textAlign: 'right',
|
||||
},
|
||||
canSend: {
|
||||
color: '#4E6CF5',
|
||||
textAlign: 'left',
|
||||
},
|
||||
});
|
|
@ -1,79 +0,0 @@
|
|||
import React from 'react';
|
||||
import { DimensionValue, Image, StyleSheet, TouchableOpacity, View } from 'react-native';
|
||||
import { Text } from '@rneui/themed';
|
||||
|
||||
import { useTheme } from './themes';
|
||||
|
||||
interface LdkButtonProps {
|
||||
text: string;
|
||||
subtext: string;
|
||||
active: boolean;
|
||||
style: {
|
||||
width: DimensionValue;
|
||||
height: DimensionValue;
|
||||
};
|
||||
onPress: () => void;
|
||||
}
|
||||
|
||||
export const LdkButton: React.FC<LdkButtonProps> = ({ text, subtext, active, style, onPress }) => {
|
||||
const { colors } = useTheme();
|
||||
const stylesHook = StyleSheet.create({
|
||||
container: {
|
||||
borderColor: (active && colors.lnborderColor) || colors.buttonDisabledBackgroundColor,
|
||||
backgroundColor: colors.buttonDisabledBackgroundColor,
|
||||
minWidth: style.width,
|
||||
minHeight: style.height,
|
||||
height: style.height,
|
||||
},
|
||||
text: {
|
||||
color: colors.lnborderColor,
|
||||
},
|
||||
subtext: {
|
||||
color: colors.alternativeTextColor,
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<TouchableOpacity accessibilityRole="button" onPress={onPress}>
|
||||
<View style={[stylesHook.container, styles.container]}>
|
||||
<View style={styles.contentContainer}>
|
||||
<View>
|
||||
<Image style={styles.image} source={require('../img/addWallet/lightning.png')} />
|
||||
</View>
|
||||
<View>
|
||||
<Text style={[stylesHook.text, styles.text]}>{text}</Text>
|
||||
<Text style={[stylesHook.subtext, styles.subtext]}>{subtext}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
borderWidth: 1.5,
|
||||
borderRadius: 8,
|
||||
flex: 1,
|
||||
marginBottom: 8,
|
||||
},
|
||||
contentContainer: {
|
||||
marginHorizontal: 16,
|
||||
marginVertical: 10,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
},
|
||||
image: {
|
||||
width: 34,
|
||||
height: 34,
|
||||
marginRight: 8,
|
||||
},
|
||||
text: {
|
||||
fontWeight: 'bold',
|
||||
fontSize: 18,
|
||||
},
|
||||
subtext: {
|
||||
fontSize: 13,
|
||||
fontWeight: '500',
|
||||
},
|
||||
});
|
|
@ -21,7 +21,7 @@ interface ListItemProps {
|
|||
switch?: object; // Define more specific type if needed
|
||||
leftIcon?: any; // Define more specific type if needed
|
||||
title: string;
|
||||
subtitle?: string;
|
||||
subtitle?: string | React.ReactNode;
|
||||
subtitleNumberOfLines?: number;
|
||||
rightTitle?: string;
|
||||
rightTitleStyle?: object;
|
||||
|
|
386
components/SelectFeeModal.tsx
Normal file
386
components/SelectFeeModal.tsx
Normal file
|
@ -0,0 +1,386 @@
|
|||
import React, { useState, useRef, forwardRef, useImperativeHandle } from 'react';
|
||||
import { View, Text, TouchableOpacity, TextInput, StyleSheet, Platform } from 'react-native';
|
||||
import BottomModal, { BottomModalHandle } from './BottomModal';
|
||||
import { useTheme } from './themes';
|
||||
import loc from '../loc';
|
||||
import { SecondButton } from './SecondButton';
|
||||
|
||||
interface NetworkTransactionFees {
|
||||
fastestFee: number;
|
||||
mediumFee: number;
|
||||
slowFee: number;
|
||||
}
|
||||
|
||||
interface FeePrecalc {
|
||||
fastestFee: number | null;
|
||||
mediumFee: number | null;
|
||||
slowFee: number | null;
|
||||
current: number | null;
|
||||
}
|
||||
|
||||
interface Option {
|
||||
label: string;
|
||||
time: string;
|
||||
fee: number | null;
|
||||
rate: number;
|
||||
active: boolean;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
interface SelectFeeModalProps {
|
||||
networkTransactionFees: NetworkTransactionFees;
|
||||
feePrecalc: FeePrecalc;
|
||||
feeRate: number | string;
|
||||
setCustomFee: (fee: string) => void;
|
||||
setFeePrecalc: (fn: (fp: FeePrecalc) => FeePrecalc) => void;
|
||||
}
|
||||
|
||||
const SelectFeeModal = forwardRef<BottomModalHandle, SelectFeeModalProps>(
|
||||
({ networkTransactionFees, feePrecalc, feeRate, setCustomFee, setFeePrecalc }, ref) => {
|
||||
const [customFee, setCustomFeeState] = useState('');
|
||||
const feeModalRef = useRef<BottomModalHandle>(null);
|
||||
const customModalRef = useRef<BottomModalHandle>(null);
|
||||
const nf = networkTransactionFees;
|
||||
|
||||
const { colors } = useTheme();
|
||||
|
||||
const stylesHook = StyleSheet.create({
|
||||
loading: {
|
||||
backgroundColor: colors.background,
|
||||
},
|
||||
root: {
|
||||
backgroundColor: colors.elevated,
|
||||
},
|
||||
feeModalItemActive: {
|
||||
backgroundColor: colors.feeActive,
|
||||
},
|
||||
feeModalLabel: {
|
||||
color: colors.successColor,
|
||||
},
|
||||
feeModalTime: {
|
||||
backgroundColor: colors.successColor,
|
||||
},
|
||||
feeModalTimeText: {
|
||||
color: colors.background,
|
||||
},
|
||||
feeModalValue: {
|
||||
color: colors.successColor,
|
||||
},
|
||||
feeModalCustomText: {
|
||||
color: colors.buttonAlternativeTextColor,
|
||||
},
|
||||
selectLabel: {
|
||||
color: colors.buttonTextColor,
|
||||
},
|
||||
of: {
|
||||
color: colors.feeText,
|
||||
},
|
||||
memo: {
|
||||
borderColor: colors.formBorder,
|
||||
borderBottomColor: colors.formBorder,
|
||||
backgroundColor: colors.inputBackgroundColor,
|
||||
},
|
||||
feeLabel: {
|
||||
color: colors.feeText,
|
||||
},
|
||||
feeModalItemDisabled: {
|
||||
backgroundColor: colors.buttonDisabledBackgroundColor,
|
||||
},
|
||||
feeModalItemTextDisabled: {
|
||||
color: colors.buttonDisabledTextColor,
|
||||
},
|
||||
feeRow: {
|
||||
backgroundColor: colors.feeLabel,
|
||||
},
|
||||
feeValue: {
|
||||
color: colors.feeValue,
|
||||
},
|
||||
});
|
||||
|
||||
useImperativeHandle(ref, () => ({
|
||||
present: async () => feeModalRef.current?.present(),
|
||||
dismiss: async () => feeModalRef.current?.dismiss(),
|
||||
}));
|
||||
|
||||
const options: Option[] = [
|
||||
{
|
||||
label: loc.send.fee_fast,
|
||||
time: loc.send.fee_10m,
|
||||
fee: feePrecalc.fastestFee,
|
||||
rate: nf.fastestFee,
|
||||
active: Number(feeRate) === nf.fastestFee,
|
||||
},
|
||||
{
|
||||
label: loc.send.fee_medium,
|
||||
time: loc.send.fee_3h,
|
||||
fee: feePrecalc.mediumFee,
|
||||
rate: nf.mediumFee,
|
||||
active: Number(feeRate) === nf.mediumFee,
|
||||
disabled: nf.mediumFee === nf.fastestFee,
|
||||
},
|
||||
{
|
||||
label: loc.send.fee_slow,
|
||||
time: loc.send.fee_1d,
|
||||
fee: feePrecalc.slowFee,
|
||||
rate: nf.slowFee,
|
||||
active: Number(feeRate) === nf.slowFee,
|
||||
disabled: nf.slowFee === nf.mediumFee || nf.slowFee === nf.fastestFee,
|
||||
},
|
||||
];
|
||||
|
||||
const formatFee = (fee: number | null): string => {
|
||||
return fee ? `${fee} sat/vB` : '';
|
||||
};
|
||||
|
||||
const handleCustomFeeSubmit = async () => {
|
||||
if (!/^\d+$/.test(customFee) || Number(customFee) <= 0) {
|
||||
// Handle error if necessary
|
||||
return;
|
||||
}
|
||||
const fee = Number(customFee) < 1 ? '1' : customFee;
|
||||
setCustomFee(fee);
|
||||
await customModalRef.current?.dismiss();
|
||||
await feeModalRef.current?.dismiss();
|
||||
};
|
||||
|
||||
const handleCancel = async () => {
|
||||
setCustomFeeState('');
|
||||
await customModalRef.current?.dismiss();
|
||||
};
|
||||
|
||||
const handlePressCustom = async () => {
|
||||
await customModalRef.current?.present();
|
||||
};
|
||||
|
||||
const handleSelectOption = async (fee: number | null, rate: number) => {
|
||||
setFeePrecalc(fp => ({ ...fp, current: fee }));
|
||||
await feeModalRef.current?.dismiss();
|
||||
setCustomFee(rate.toString());
|
||||
};
|
||||
|
||||
return (
|
||||
<BottomModal
|
||||
ref={feeModalRef}
|
||||
backgroundColor={colors.modal}
|
||||
contentContainerStyle={[styles.modalContent, styles.modalContentMinHeight]}
|
||||
footerDefaultMargins
|
||||
footer={
|
||||
<View style={styles.feeModalFooter}>
|
||||
<TouchableOpacity testID="feeCustom" accessibilityRole="button" onPress={handlePressCustom}>
|
||||
<Text style={[styles.feeModalCustomText, stylesHook.feeModalCustomText]}>{loc.send.fee_custom}</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
}
|
||||
>
|
||||
<View style={styles.paddingTop66}>
|
||||
{options.map(({ label, time, fee, rate, active, disabled }) => (
|
||||
<TouchableOpacity
|
||||
accessibilityRole="button"
|
||||
key={label}
|
||||
disabled={disabled}
|
||||
onPress={() => handleSelectOption(fee, rate)}
|
||||
style={[styles.feeModalItem, active && styles.feeModalItemActive, active && !disabled && stylesHook.feeModalItemActive]}
|
||||
>
|
||||
<View style={styles.feeModalRow}>
|
||||
<Text style={[styles.feeModalLabel, disabled ? stylesHook.feeModalItemTextDisabled : stylesHook.feeModalLabel]}>
|
||||
{label}
|
||||
</Text>
|
||||
<View style={[styles.feeModalTime, disabled ? stylesHook.feeModalItemDisabled : stylesHook.feeModalTime]}>
|
||||
<Text style={stylesHook.feeModalTimeText}>~{time}</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View style={styles.feeModalRow}>
|
||||
<Text style={disabled ? stylesHook.feeModalItemTextDisabled : stylesHook.feeModalValue}>{fee && formatFee(fee)}</Text>
|
||||
<Text style={disabled ? stylesHook.feeModalItemTextDisabled : stylesHook.feeModalValue}>
|
||||
{rate} {loc.units.sat_vbyte}
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
))}
|
||||
</View>
|
||||
|
||||
<BottomModal
|
||||
ref={customModalRef}
|
||||
backgroundColor={colors.modal}
|
||||
showCloseButton={false}
|
||||
contentContainerStyle={[styles.modalContent, styles.modalContentMinHeight]}
|
||||
footer={
|
||||
<View style={[styles.feeModalFooter, styles.feeModalFooterSpacing]}>
|
||||
<SecondButton title={loc._.cancel} onPress={handleCancel} />
|
||||
<View style={styles.feeModalFooterSpacing} />
|
||||
<SecondButton title={loc._.ok} onPress={handleCustomFeeSubmit} disabled={!customFee || Number(customFee) <= 0} />
|
||||
</View>
|
||||
}
|
||||
footerDefaultMargins
|
||||
>
|
||||
<View style={styles.paddingTop30}>
|
||||
<Text style={[styles.feeModalLabel, stylesHook.feeModalLabel]}>{loc.send.insert_custom_fee}</Text>
|
||||
<View style={styles.optionsContent} />
|
||||
<TextInput
|
||||
style={[styles.feeModalLabel, stylesHook.feeModalLabel, styles.customFeeTextInput]}
|
||||
keyboardType="numeric"
|
||||
placeholder={loc.send.create_fee}
|
||||
value={customFee}
|
||||
onChangeText={setCustomFeeState}
|
||||
autoFocus
|
||||
/>
|
||||
</View>
|
||||
</BottomModal>
|
||||
</BottomModal>
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
export default SelectFeeModal;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
loading: {
|
||||
flex: 1,
|
||||
paddingTop: 20,
|
||||
},
|
||||
root: {
|
||||
flex: 1,
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
scrollViewContent: {
|
||||
flexDirection: 'row',
|
||||
},
|
||||
scrollViewIndicator: {
|
||||
top: 0,
|
||||
left: 8,
|
||||
bottom: 0,
|
||||
right: 8,
|
||||
},
|
||||
modalContent: {
|
||||
margin: 22,
|
||||
},
|
||||
modalContentMinHeight: Platform.OS === 'android' ? { minHeight: 400 } : {},
|
||||
paddingTop66: { paddingVertical: 66 },
|
||||
paddingTop30: { paddingBottom: 60, paddingTop: 30 },
|
||||
optionsContent: {
|
||||
padding: 22,
|
||||
},
|
||||
feeModalItem: {
|
||||
paddingHorizontal: 16,
|
||||
paddingVertical: 8,
|
||||
marginBottom: 10,
|
||||
},
|
||||
feeModalItemActive: {
|
||||
borderRadius: 8,
|
||||
},
|
||||
feeModalRow: {
|
||||
justifyContent: 'space-between',
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
},
|
||||
feeModalLabel: {
|
||||
fontSize: 22,
|
||||
fontWeight: '600',
|
||||
},
|
||||
customFeeTextInput: {
|
||||
backgroundColor: '#FFFFFF',
|
||||
borderColor: '#9aa0aa',
|
||||
borderWidth: 1,
|
||||
borderRadius: 4,
|
||||
padding: 8,
|
||||
marginVertical: 8,
|
||||
fontSize: 16,
|
||||
},
|
||||
feeModalTime: {
|
||||
borderRadius: 5,
|
||||
paddingHorizontal: 6,
|
||||
paddingVertical: 3,
|
||||
},
|
||||
feeModalCustomText: {
|
||||
fontSize: 15,
|
||||
fontWeight: '600',
|
||||
},
|
||||
createButton: {
|
||||
marginVertical: 16,
|
||||
marginHorizontal: 16,
|
||||
alignContent: 'center',
|
||||
minHeight: 44,
|
||||
},
|
||||
select: {
|
||||
marginBottom: 24,
|
||||
marginHorizontal: 24,
|
||||
alignItems: 'center',
|
||||
},
|
||||
selectTouch: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
},
|
||||
selectText: {
|
||||
color: '#9aa0aa',
|
||||
fontSize: 14,
|
||||
marginRight: 8,
|
||||
},
|
||||
selectWrap: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
marginVertical: 4,
|
||||
},
|
||||
selectLabel: {
|
||||
fontSize: 14,
|
||||
},
|
||||
of: {
|
||||
alignSelf: 'flex-end',
|
||||
marginRight: 18,
|
||||
marginVertical: 8,
|
||||
},
|
||||
feeModalFooter: {
|
||||
paddingBottom: 36,
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
feeModalFooterSpacing: {
|
||||
paddingHorizontal: 24,
|
||||
},
|
||||
memo: {
|
||||
flexDirection: 'row',
|
||||
borderWidth: 1,
|
||||
borderBottomWidth: 0.5,
|
||||
minHeight: 44,
|
||||
height: 44,
|
||||
marginHorizontal: 20,
|
||||
alignItems: 'center',
|
||||
marginVertical: 8,
|
||||
borderRadius: 4,
|
||||
},
|
||||
memoText: {
|
||||
flex: 1,
|
||||
marginHorizontal: 8,
|
||||
minHeight: 33,
|
||||
color: '#81868e',
|
||||
},
|
||||
fee: {
|
||||
flexDirection: 'row',
|
||||
marginHorizontal: 20,
|
||||
justifyContent: 'space-between',
|
||||
alignItems: 'center',
|
||||
},
|
||||
feeLabel: {
|
||||
fontSize: 14,
|
||||
},
|
||||
feeRow: {
|
||||
minWidth: 40,
|
||||
height: 25,
|
||||
borderRadius: 4,
|
||||
justifyContent: 'space-between',
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
paddingHorizontal: 10,
|
||||
},
|
||||
advancedOptions: {
|
||||
minWidth: 40,
|
||||
height: 40,
|
||||
justifyContent: 'center',
|
||||
},
|
||||
feeModalCloseButton: {
|
||||
paddingHorizontal: 10,
|
||||
paddingVertical: 8,
|
||||
},
|
||||
feeModalCloseButtonText: {
|
||||
color: '#007AFF',
|
||||
},
|
||||
});
|
|
@ -1,7 +1,7 @@
|
|||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import Clipboard from '@react-native-clipboard/clipboard';
|
||||
import { Linking, View } from 'react-native';
|
||||
import { Linking, View, ViewStyle } from 'react-native';
|
||||
import Lnurl from '../class/lnurl';
|
||||
import { LightningTransaction, Transaction } from '../class/wallets/types';
|
||||
import TransactionExpiredIcon from '../components/icons/TransactionExpiredIcon';
|
||||
|
@ -23,312 +23,321 @@ import { DetailViewStackParamList } from '../navigation/DetailViewStackParamList
|
|||
import { useStorage } from '../hooks/context/useStorage';
|
||||
import ToolTipMenu from './TooltipMenu';
|
||||
import { CommonToolTipActions } from '../typings/CommonToolTipActions';
|
||||
import { pop } from '../NavigationService';
|
||||
|
||||
interface TransactionListItemProps {
|
||||
itemPriceUnit: BitcoinUnit;
|
||||
walletID: string;
|
||||
item: Transaction & LightningTransaction; // using type intersection to have less issues with ts
|
||||
searchQuery?: string;
|
||||
style?: ViewStyle;
|
||||
renderHighlightedText?: (text: string, query: string) => JSX.Element;
|
||||
}
|
||||
|
||||
type NavigationProps = NativeStackNavigationProp<DetailViewStackParamList>;
|
||||
|
||||
export const TransactionListItem: React.FC<TransactionListItemProps> = React.memo(({ item, itemPriceUnit = BitcoinUnit.BTC, walletID }) => {
|
||||
const [subtitleNumberOfLines, setSubtitleNumberOfLines] = useState(1);
|
||||
const { colors } = useTheme();
|
||||
const { navigate } = useExtendedNavigation<NavigationProps>();
|
||||
const menuRef = useRef<ToolTipMenuProps>();
|
||||
const { txMetadata, counterpartyMetadata, wallets } = useStorage();
|
||||
const { language } = useSettings();
|
||||
const containerStyle = useMemo(
|
||||
() => ({
|
||||
backgroundColor: 'transparent',
|
||||
borderBottomColor: colors.lightBorder,
|
||||
}),
|
||||
[colors.lightBorder],
|
||||
);
|
||||
export const TransactionListItem: React.FC<TransactionListItemProps> = React.memo(
|
||||
({ item, itemPriceUnit = BitcoinUnit.BTC, walletID, searchQuery, style, renderHighlightedText }) => {
|
||||
const [subtitleNumberOfLines, setSubtitleNumberOfLines] = useState(1);
|
||||
const { colors } = useTheme();
|
||||
const { navigate } = useExtendedNavigation<NavigationProps>();
|
||||
const menuRef = useRef<ToolTipMenuProps>();
|
||||
const { txMetadata, counterpartyMetadata, wallets } = useStorage();
|
||||
const { language } = useSettings();
|
||||
const containerStyle = useMemo(
|
||||
() => ({
|
||||
backgroundColor: 'transparent',
|
||||
borderBottomColor: colors.lightBorder,
|
||||
}),
|
||||
[colors.lightBorder],
|
||||
);
|
||||
|
||||
const shortenContactName = (name: string): string => {
|
||||
if (name.length < 16) return name;
|
||||
return name.substr(0, 7) + '...' + name.substr(name.length - 7, 7);
|
||||
};
|
||||
const combinedStyle = useMemo(() => [containerStyle, style], [containerStyle, style]);
|
||||
|
||||
const title = useMemo(() => {
|
||||
if (item.confirmations === 0) {
|
||||
return loc.transactions.pending;
|
||||
} else {
|
||||
return transactionTimeToReadable(item.received!);
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [item.confirmations, item.received, language]);
|
||||
const shortenContactName = (name: string): string => {
|
||||
if (name.length < 16) return name;
|
||||
return name.substr(0, 7) + '...' + name.substr(name.length - 7, 7);
|
||||
};
|
||||
|
||||
let counterparty;
|
||||
if (item.counterparty) {
|
||||
counterparty = counterpartyMetadata?.[item.counterparty]?.label ?? item.counterparty;
|
||||
}
|
||||
const txMemo = (counterparty ? `[${shortenContactName(counterparty)}] ` : '') + (txMetadata[item.hash]?.memo ?? '');
|
||||
const subtitle = useMemo(() => {
|
||||
let sub = Number(item.confirmations) < 7 ? loc.formatString(loc.transactions.list_conf, { number: item.confirmations }) : '';
|
||||
if (sub !== '') sub += ' ';
|
||||
sub += txMemo;
|
||||
if (item.memo) sub += item.memo;
|
||||
return sub || undefined;
|
||||
}, [txMemo, item.confirmations, item.memo]);
|
||||
|
||||
const rowTitle = useMemo(() => {
|
||||
if (item.type === 'user_invoice' || item.type === 'payment_request') {
|
||||
if (isNaN(Number(item.value))) {
|
||||
item.value = 0;
|
||||
}
|
||||
const currentDate = new Date();
|
||||
const now = (currentDate.getTime() / 1000) | 0; // eslint-disable-line no-bitwise
|
||||
const invoiceExpiration = item.timestamp! + item.expire_time!;
|
||||
|
||||
if (invoiceExpiration > now) {
|
||||
return formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
const title = useMemo(() => {
|
||||
if (item.confirmations === 0) {
|
||||
return loc.transactions.pending;
|
||||
} else {
|
||||
if (item.ispaid) {
|
||||
return transactionTimeToReadable(item.received!);
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [item.confirmations, item.received, language]);
|
||||
|
||||
let counterparty;
|
||||
if (item.counterparty) {
|
||||
counterparty = counterpartyMetadata?.[item.counterparty]?.label ?? item.counterparty;
|
||||
}
|
||||
const txMemo = (counterparty ? `[${shortenContactName(counterparty)}] ` : '') + (txMetadata[item.hash]?.memo ?? '');
|
||||
const subtitle = useMemo(() => {
|
||||
let sub = Number(item.confirmations) < 7 ? loc.formatString(loc.transactions.list_conf, { number: item.confirmations }) : '';
|
||||
if (sub !== '') sub += ' ';
|
||||
sub += txMemo;
|
||||
if (item.memo) sub += item.memo;
|
||||
return sub || undefined;
|
||||
}, [txMemo, item.confirmations, item.memo]);
|
||||
|
||||
const rowTitle = useMemo(() => {
|
||||
if (item.type === 'user_invoice' || item.type === 'payment_request') {
|
||||
if (isNaN(Number(item.value))) {
|
||||
item.value = 0;
|
||||
}
|
||||
const currentDate = new Date();
|
||||
const now = (currentDate.getTime() / 1000) | 0; // eslint-disable-line no-bitwise
|
||||
const invoiceExpiration = item.timestamp! + item.expire_time!;
|
||||
|
||||
if (invoiceExpiration > now) {
|
||||
return formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
} else {
|
||||
return loc.lnd.expired;
|
||||
if (item.ispaid) {
|
||||
return formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
} else {
|
||||
return loc.lnd.expired;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
}
|
||||
} else {
|
||||
return formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
}
|
||||
}, [item, itemPriceUnit]);
|
||||
}, [item, itemPriceUnit]);
|
||||
|
||||
const rowTitleStyle = useMemo(() => {
|
||||
let color = colors.successColor;
|
||||
const rowTitleStyle = useMemo(() => {
|
||||
let color = colors.successColor;
|
||||
|
||||
if (item.type === 'user_invoice' || item.type === 'payment_request') {
|
||||
const currentDate = new Date();
|
||||
const now = (currentDate.getTime() / 1000) | 0; // eslint-disable-line no-bitwise
|
||||
const invoiceExpiration = item.timestamp! + item.expire_time!;
|
||||
if (item.type === 'user_invoice' || item.type === 'payment_request') {
|
||||
const currentDate = new Date();
|
||||
const now = (currentDate.getTime() / 1000) | 0; // eslint-disable-line no-bitwise
|
||||
const invoiceExpiration = item.timestamp! + item.expire_time!;
|
||||
|
||||
if (invoiceExpiration > now) {
|
||||
color = colors.successColor;
|
||||
} else if (invoiceExpiration < now) {
|
||||
if (item.ispaid) {
|
||||
if (invoiceExpiration > now) {
|
||||
color = colors.successColor;
|
||||
} else if (invoiceExpiration < now) {
|
||||
if (item.ispaid) {
|
||||
color = colors.successColor;
|
||||
} else {
|
||||
color = '#9AA0AA';
|
||||
}
|
||||
}
|
||||
} else if (item.value! / 100000000 < 0) {
|
||||
color = colors.foregroundColor;
|
||||
}
|
||||
|
||||
return {
|
||||
color,
|
||||
fontSize: 14,
|
||||
fontWeight: '600',
|
||||
textAlign: 'right',
|
||||
};
|
||||
}, [item, colors.foregroundColor, colors.successColor]);
|
||||
|
||||
const determineTransactionTypeAndAvatar = () => {
|
||||
if (item.category === 'receive' && item.confirmations! < 3) {
|
||||
return {
|
||||
label: loc.transactions.pending_transaction,
|
||||
icon: <TransactionPendingIcon />,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type && item.type === 'bitcoind_tx') {
|
||||
return {
|
||||
label: loc.transactions.onchain,
|
||||
icon: <TransactionOnchainIcon />,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type === 'paid_invoice') {
|
||||
return {
|
||||
label: loc.transactions.offchain,
|
||||
icon: <TransactionOffchainIcon />,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type === 'user_invoice' || item.type === 'payment_request') {
|
||||
const currentDate = new Date();
|
||||
const now = (currentDate.getTime() / 1000) | 0; // eslint-disable-line no-bitwise
|
||||
const invoiceExpiration = item.timestamp! + item.expire_time!;
|
||||
if (!item.ispaid && invoiceExpiration < now) {
|
||||
return {
|
||||
label: loc.transactions.expired_transaction,
|
||||
icon: <TransactionExpiredIcon />,
|
||||
};
|
||||
} else {
|
||||
color = '#9AA0AA';
|
||||
return {
|
||||
label: loc.transactions.incoming_transaction,
|
||||
icon: <TransactionOffchainIncomingIcon />,
|
||||
};
|
||||
}
|
||||
}
|
||||
} else if (item.value! / 100000000 < 0) {
|
||||
color = colors.foregroundColor;
|
||||
}
|
||||
|
||||
return {
|
||||
color,
|
||||
fontSize: 14,
|
||||
fontWeight: '600',
|
||||
textAlign: 'right',
|
||||
};
|
||||
}, [item, colors.foregroundColor, colors.successColor]);
|
||||
|
||||
const determineTransactionTypeAndAvatar = () => {
|
||||
if (item.category === 'receive' && item.confirmations! < 3) {
|
||||
return {
|
||||
label: loc.transactions.pending_transaction,
|
||||
icon: <TransactionPendingIcon />,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type && item.type === 'bitcoind_tx') {
|
||||
return {
|
||||
label: loc.transactions.onchain,
|
||||
icon: <TransactionOnchainIcon />,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type === 'paid_invoice') {
|
||||
return {
|
||||
label: loc.transactions.offchain,
|
||||
icon: <TransactionOffchainIcon />,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type === 'user_invoice' || item.type === 'payment_request') {
|
||||
const currentDate = new Date();
|
||||
const now = (currentDate.getTime() / 1000) | 0; // eslint-disable-line no-bitwise
|
||||
const invoiceExpiration = item.timestamp! + item.expire_time!;
|
||||
if (!item.ispaid && invoiceExpiration < now) {
|
||||
if (!item.confirmations) {
|
||||
return {
|
||||
label: loc.transactions.expired_transaction,
|
||||
icon: <TransactionExpiredIcon />,
|
||||
label: loc.transactions.pending_transaction,
|
||||
icon: <TransactionPendingIcon />,
|
||||
};
|
||||
} else if (item.value! < 0) {
|
||||
return {
|
||||
label: loc.transactions.outgoing_transaction,
|
||||
icon: <TransactionOutgoingIcon />,
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
label: loc.transactions.incoming_transaction,
|
||||
icon: <TransactionOffchainIncomingIcon />,
|
||||
icon: <TransactionIncomingIcon />,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (!item.confirmations) {
|
||||
return {
|
||||
label: loc.transactions.pending_transaction,
|
||||
icon: <TransactionPendingIcon />,
|
||||
};
|
||||
} else if (item.value! < 0) {
|
||||
return {
|
||||
label: loc.transactions.outgoing_transaction,
|
||||
icon: <TransactionOutgoingIcon />,
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
label: loc.transactions.incoming_transaction,
|
||||
icon: <TransactionIncomingIcon />,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
const { label: transactionTypeLabel, icon: avatar } = determineTransactionTypeAndAvatar();
|
||||
|
||||
const amountWithUnit = useMemo(() => {
|
||||
const amount = formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
const unit = itemPriceUnit === BitcoinUnit.BTC || itemPriceUnit === BitcoinUnit.SATS ? ` ${itemPriceUnit}` : ' ';
|
||||
return `${amount}${unit}`;
|
||||
}, [item.value, itemPriceUnit]);
|
||||
|
||||
useEffect(() => {
|
||||
setSubtitleNumberOfLines(1);
|
||||
}, [subtitle]);
|
||||
|
||||
const onPress = useCallback(async () => {
|
||||
menuRef?.current?.dismissMenu?.();
|
||||
if (item.hash) {
|
||||
navigate('TransactionStatus', { hash: item.hash, walletID });
|
||||
} else if (item.type === 'user_invoice' || item.type === 'payment_request' || item.type === 'paid_invoice') {
|
||||
const lightningWallet = wallets.filter(wallet => wallet?.getID() === item.walletID);
|
||||
if (lightningWallet.length === 1) {
|
||||
try {
|
||||
// is it a successful lnurl-pay?
|
||||
const LN = new Lnurl(false, AsyncStorage);
|
||||
let paymentHash = item.payment_hash!;
|
||||
if (typeof paymentHash === 'object') {
|
||||
paymentHash = Buffer.from(paymentHash.data).toString('hex');
|
||||
}
|
||||
const loaded = await LN.loadSuccessfulPayment(paymentHash);
|
||||
if (loaded) {
|
||||
navigate('ScanLndInvoiceRoot', {
|
||||
screen: 'LnurlPaySuccess',
|
||||
params: {
|
||||
paymentHash,
|
||||
justPaid: false,
|
||||
fromWalletID: lightningWallet[0].getID(),
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
navigate('LNDViewInvoice', {
|
||||
invoice: item,
|
||||
walletID: lightningWallet[0].getID(),
|
||||
});
|
||||
}
|
||||
}
|
||||
}, [item, wallets, navigate, walletID]);
|
||||
|
||||
const handleOnExpandNote = useCallback(() => {
|
||||
setSubtitleNumberOfLines(0);
|
||||
}, []);
|
||||
|
||||
const subtitleProps = useMemo(() => ({ numberOfLines: subtitleNumberOfLines }), [subtitleNumberOfLines]);
|
||||
|
||||
const handleOnCopyAmountTap = useCallback(() => Clipboard.setString(rowTitle.replace(/[\s\\-]/g, '')), [rowTitle]);
|
||||
const handleOnCopyTransactionID = useCallback(() => Clipboard.setString(item.hash), [item.hash]);
|
||||
const handleOnCopyNote = useCallback(() => Clipboard.setString(subtitle ?? ''), [subtitle]);
|
||||
const handleOnViewOnBlockExplorer = useCallback(() => {
|
||||
const url = `https://mempool.space/tx/${item.hash}`;
|
||||
Linking.canOpenURL(url).then(supported => {
|
||||
if (supported) {
|
||||
Linking.openURL(url);
|
||||
}
|
||||
});
|
||||
}, [item.hash]);
|
||||
const handleCopyOpenInBlockExplorerPress = useCallback(() => {
|
||||
Clipboard.setString(`https://mempool.space/tx/${item.hash}`);
|
||||
}, [item.hash]);
|
||||
|
||||
const onToolTipPress = useCallback(
|
||||
(id: any) => {
|
||||
if (id === CommonToolTipActions.CopyAmount.id) {
|
||||
handleOnCopyAmountTap();
|
||||
} else if (id === CommonToolTipActions.CopyNote.id) {
|
||||
handleOnCopyNote();
|
||||
} else if (id === CommonToolTipActions.OpenInBlockExplorer.id) {
|
||||
handleOnViewOnBlockExplorer();
|
||||
} else if (id === CommonToolTipActions.ExpandNote.id) {
|
||||
handleOnExpandNote();
|
||||
} else if (id === CommonToolTipActions.CopyBlockExplorerLink.id) {
|
||||
handleCopyOpenInBlockExplorerPress();
|
||||
} else if (id === CommonToolTipActions.CopyTXID.id) {
|
||||
handleOnCopyTransactionID();
|
||||
}
|
||||
},
|
||||
[
|
||||
handleCopyOpenInBlockExplorerPress,
|
||||
handleOnCopyAmountTap,
|
||||
handleOnCopyNote,
|
||||
handleOnCopyTransactionID,
|
||||
handleOnExpandNote,
|
||||
handleOnViewOnBlockExplorer,
|
||||
],
|
||||
);
|
||||
const toolTipActions = useMemo((): Action[] | Action[][] => {
|
||||
const actions: (Action | Action[])[] = [];
|
||||
|
||||
if (rowTitle !== loc.lnd.expired) {
|
||||
actions.push(CommonToolTipActions.CopyAmount);
|
||||
}
|
||||
|
||||
if (subtitle) {
|
||||
actions.push(CommonToolTipActions.CopyNote);
|
||||
}
|
||||
|
||||
if (item.hash) {
|
||||
actions.push(CommonToolTipActions.CopyTXID, CommonToolTipActions.CopyBlockExplorerLink, [CommonToolTipActions.OpenInBlockExplorer]);
|
||||
}
|
||||
|
||||
if (subtitle && subtitleNumberOfLines === 1) {
|
||||
actions.push([CommonToolTipActions.ExpandNote]);
|
||||
}
|
||||
|
||||
return actions as Action[] | Action[][];
|
||||
}, [item.hash, subtitle, rowTitle, subtitleNumberOfLines]);
|
||||
|
||||
const accessibilityState = useMemo(() => {
|
||||
return {
|
||||
expanded: subtitleNumberOfLines === 0,
|
||||
};
|
||||
}, [subtitleNumberOfLines]);
|
||||
|
||||
return (
|
||||
<ToolTipMenu
|
||||
isButton
|
||||
actions={toolTipActions}
|
||||
onPressMenuItem={onToolTipPress}
|
||||
onPress={onPress}
|
||||
accessibilityLabel={`${transactionTypeLabel}, ${amountWithUnit}, ${subtitle ?? title}`}
|
||||
accessibilityRole="button"
|
||||
accessibilityState={accessibilityState}
|
||||
>
|
||||
<ListItem
|
||||
leftAvatar={avatar}
|
||||
title={title}
|
||||
subtitleNumberOfLines={subtitleNumberOfLines}
|
||||
subtitle={subtitle}
|
||||
Component={View}
|
||||
subtitleProps={subtitleProps}
|
||||
chevron={false}
|
||||
rightTitle={rowTitle}
|
||||
rightTitleStyle={rowTitleStyle}
|
||||
containerStyle={containerStyle}
|
||||
/>
|
||||
</ToolTipMenu>
|
||||
);
|
||||
});
|
||||
const { label: transactionTypeLabel, icon: avatar } = determineTransactionTypeAndAvatar();
|
||||
|
||||
const amountWithUnit = useMemo(() => {
|
||||
const amount = formatBalanceWithoutSuffix(item.value && item.value, itemPriceUnit, true).toString();
|
||||
const unit = itemPriceUnit === BitcoinUnit.BTC || itemPriceUnit === BitcoinUnit.SATS ? ` ${itemPriceUnit}` : ' ';
|
||||
return `${amount}${unit}`;
|
||||
}, [item.value, itemPriceUnit]);
|
||||
|
||||
useEffect(() => {
|
||||
setSubtitleNumberOfLines(1);
|
||||
}, [subtitle]);
|
||||
|
||||
const onPress = useCallback(async () => {
|
||||
menuRef?.current?.dismissMenu?.();
|
||||
if (item.hash) {
|
||||
pop();
|
||||
navigate('TransactionStatus', { hash: item.hash, walletID });
|
||||
} else if (item.type === 'user_invoice' || item.type === 'payment_request' || item.type === 'paid_invoice') {
|
||||
const lightningWallet = wallets.filter(wallet => wallet?.getID() === item.walletID);
|
||||
if (lightningWallet.length === 1) {
|
||||
try {
|
||||
// is it a successful lnurl-pay?
|
||||
const LN = new Lnurl(false, AsyncStorage);
|
||||
let paymentHash = item.payment_hash!;
|
||||
if (typeof paymentHash === 'object') {
|
||||
paymentHash = Buffer.from(paymentHash.data).toString('hex');
|
||||
}
|
||||
const loaded = await LN.loadSuccessfulPayment(paymentHash);
|
||||
if (loaded) {
|
||||
navigate('ScanLndInvoiceRoot', {
|
||||
screen: 'LnurlPaySuccess',
|
||||
params: {
|
||||
paymentHash,
|
||||
justPaid: false,
|
||||
fromWalletID: lightningWallet[0].getID(),
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
console.debug(e);
|
||||
}
|
||||
|
||||
navigate('LNDViewInvoice', {
|
||||
invoice: item,
|
||||
walletID: lightningWallet[0].getID(),
|
||||
});
|
||||
}
|
||||
}
|
||||
}, [item, wallets, navigate, walletID]);
|
||||
|
||||
const handleOnExpandNote = useCallback(() => {
|
||||
setSubtitleNumberOfLines(0);
|
||||
}, []);
|
||||
|
||||
const subtitleProps = useMemo(() => ({ numberOfLines: subtitleNumberOfLines }), [subtitleNumberOfLines]);
|
||||
|
||||
const handleOnCopyAmountTap = useCallback(() => Clipboard.setString(rowTitle.replace(/[\s\\-]/g, '')), [rowTitle]);
|
||||
const handleOnCopyTransactionID = useCallback(() => Clipboard.setString(item.hash), [item.hash]);
|
||||
const handleOnCopyNote = useCallback(() => Clipboard.setString(subtitle ?? ''), [subtitle]);
|
||||
const handleOnViewOnBlockExplorer = useCallback(() => {
|
||||
const url = `https://mempool.space/tx/${item.hash}`;
|
||||
Linking.canOpenURL(url).then(supported => {
|
||||
if (supported) {
|
||||
Linking.openURL(url);
|
||||
}
|
||||
});
|
||||
}, [item.hash]);
|
||||
const handleCopyOpenInBlockExplorerPress = useCallback(() => {
|
||||
Clipboard.setString(`https://mempool.space/tx/${item.hash}`);
|
||||
}, [item.hash]);
|
||||
|
||||
const onToolTipPress = useCallback(
|
||||
(id: any) => {
|
||||
if (id === CommonToolTipActions.CopyAmount.id) {
|
||||
handleOnCopyAmountTap();
|
||||
} else if (id === CommonToolTipActions.CopyNote.id) {
|
||||
handleOnCopyNote();
|
||||
} else if (id === CommonToolTipActions.OpenInBlockExplorer.id) {
|
||||
handleOnViewOnBlockExplorer();
|
||||
} else if (id === CommonToolTipActions.ExpandNote.id) {
|
||||
handleOnExpandNote();
|
||||
} else if (id === CommonToolTipActions.CopyBlockExplorerLink.id) {
|
||||
handleCopyOpenInBlockExplorerPress();
|
||||
} else if (id === CommonToolTipActions.CopyTXID.id) {
|
||||
handleOnCopyTransactionID();
|
||||
}
|
||||
},
|
||||
[
|
||||
handleCopyOpenInBlockExplorerPress,
|
||||
handleOnCopyAmountTap,
|
||||
handleOnCopyNote,
|
||||
handleOnCopyTransactionID,
|
||||
handleOnExpandNote,
|
||||
handleOnViewOnBlockExplorer,
|
||||
],
|
||||
);
|
||||
const toolTipActions = useMemo((): Action[] | Action[][] => {
|
||||
const actions: (Action | Action[])[] = [];
|
||||
|
||||
if (rowTitle !== loc.lnd.expired) {
|
||||
actions.push(CommonToolTipActions.CopyAmount);
|
||||
}
|
||||
|
||||
if (subtitle) {
|
||||
actions.push(CommonToolTipActions.CopyNote);
|
||||
}
|
||||
|
||||
if (item.hash) {
|
||||
actions.push(CommonToolTipActions.CopyTXID, CommonToolTipActions.CopyBlockExplorerLink, [CommonToolTipActions.OpenInBlockExplorer]);
|
||||
}
|
||||
|
||||
if (subtitle && subtitleNumberOfLines === 1) {
|
||||
actions.push([CommonToolTipActions.ExpandNote]);
|
||||
}
|
||||
|
||||
return actions as Action[] | Action[][];
|
||||
}, [item.hash, subtitle, rowTitle, subtitleNumberOfLines]);
|
||||
|
||||
const accessibilityState = useMemo(() => {
|
||||
return {
|
||||
expanded: subtitleNumberOfLines === 0,
|
||||
};
|
||||
}, [subtitleNumberOfLines]);
|
||||
|
||||
return (
|
||||
<ToolTipMenu
|
||||
isButton
|
||||
actions={toolTipActions}
|
||||
onPressMenuItem={onToolTipPress}
|
||||
onPress={onPress}
|
||||
accessibilityLabel={`${transactionTypeLabel}, ${amountWithUnit}, ${subtitle ?? title}`}
|
||||
accessibilityRole="button"
|
||||
accessibilityState={accessibilityState}
|
||||
>
|
||||
<ListItem
|
||||
leftAvatar={avatar}
|
||||
title={title}
|
||||
subtitleNumberOfLines={subtitleNumberOfLines}
|
||||
subtitle={subtitle ? (renderHighlightedText ? renderHighlightedText(subtitle, searchQuery ?? '') : subtitle) : undefined}
|
||||
Component={View}
|
||||
subtitleProps={subtitleProps}
|
||||
chevron={false}
|
||||
rightTitle={rowTitle}
|
||||
rightTitleStyle={rowTitleStyle}
|
||||
containerStyle={combinedStyle}
|
||||
/>
|
||||
</ToolTipMenu>
|
||||
);
|
||||
},
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|||
import Clipboard from '@react-native-clipboard/clipboard';
|
||||
import { I18nManager, Image, LayoutAnimation, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
||||
import LinearGradient from 'react-native-linear-gradient';
|
||||
import { LightningCustodianWallet, LightningLdkWallet, MultisigHDWallet } from '../class';
|
||||
import { LightningCustodianWallet, MultisigHDWallet } from '../class';
|
||||
import WalletGradient from '../class/wallet-gradient';
|
||||
import { TWallet } from '../class/wallets/types';
|
||||
import loc, { formatBalance, formatBalanceWithoutSuffix } from '../loc';
|
||||
|
@ -184,7 +184,6 @@ const TransactionsNavigationHeader: React.FC<TransactionsNavigationHeaderProps>
|
|||
<Image
|
||||
source={(() => {
|
||||
switch (wallet.type) {
|
||||
case LightningLdkWallet.type:
|
||||
case LightningCustodianWallet.type:
|
||||
return I18nManager.isRTL ? require('../img/lnd-shape-rtl.png') : require('../img/lnd-shape.png');
|
||||
case MultisigHDWallet.type:
|
||||
|
@ -231,7 +230,7 @@ const TransactionsNavigationHeader: React.FC<TransactionsNavigationHeaderProps>
|
|||
<TouchableOpacity style={styles.walletPreferredUnitView} onPress={changeWalletBalanceUnit}>
|
||||
<Text style={styles.walletPreferredUnitText}>
|
||||
{wallet.getPreferredBalanceUnit() === BitcoinUnit.LOCAL_CURRENCY
|
||||
? (preferredFiatCurrency?.endPointKey ?? FiatUnit.USD)
|
||||
? preferredFiatCurrency?.endPointKey ?? FiatUnit.USD
|
||||
: wallet.getPreferredBalanceUnit()}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
|
@ -247,16 +246,6 @@ const TransactionsNavigationHeader: React.FC<TransactionsNavigationHeaderProps>
|
|||
<Text style={styles.manageFundsButtonText}>{loc.lnd.title}</Text>
|
||||
</ToolTipMenu>
|
||||
)}
|
||||
{wallet.type === LightningLdkWallet.type && (
|
||||
<TouchableOpacity
|
||||
style={styles.manageFundsButton}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={loc.lnd.title}
|
||||
onPress={() => handleManageFundsPressed()}
|
||||
>
|
||||
<Text style={styles.manageFundsButtonText}>{loc.lnd.title}</Text>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
{wallet.type === MultisigHDWallet.type && (
|
||||
<TouchableOpacity style={styles.manageFundsButton} accessibilityRole="button" onPress={() => handleManageFundsPressed()}>
|
||||
<Text style={styles.manageFundsButtonText}>{loc.multisig.manage_keys}</Text>
|
||||
|
|
|
@ -8,7 +8,6 @@ import {
|
|||
Pressable,
|
||||
StyleSheet,
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
useWindowDimensions,
|
||||
View,
|
||||
FlatListProps,
|
||||
|
@ -17,7 +16,7 @@ import {
|
|||
} from 'react-native';
|
||||
import LinearGradient from 'react-native-linear-gradient';
|
||||
import { BlueSpacing10 } from '../BlueComponents';
|
||||
import { LightningCustodianWallet, LightningLdkWallet, MultisigHDWallet } from '../class';
|
||||
import { LightningCustodianWallet, MultisigHDWallet } from '../class';
|
||||
import WalletGradient from '../class/wallet-gradient';
|
||||
import { useIsLargeScreen } from '../hooks/useIsLargeScreen';
|
||||
import loc, { formatBalance, transactionTimeToReadable } from '../loc';
|
||||
|
@ -73,12 +72,7 @@ const NewWalletPanel: React.FC<NewWalletPanelProps> = ({ onPress }) => {
|
|||
});
|
||||
|
||||
return (
|
||||
<TouchableOpacity
|
||||
accessibilityRole="button"
|
||||
testID="CreateAWallet"
|
||||
onPress={onPress}
|
||||
style={isLargeScreen ? {} : { width: itemWidth * 1.2 }}
|
||||
>
|
||||
<Pressable accessibilityRole="button" testID="CreateAWallet" onPress={onPress} style={isLargeScreen ? {} : { width: itemWidth * 1.2 }}>
|
||||
<View
|
||||
style={[
|
||||
nStyles.container,
|
||||
|
@ -93,7 +87,7 @@ const NewWalletPanel: React.FC<NewWalletPanelProps> = ({ onPress }) => {
|
|||
<Text style={[nStyles.buttonText, { color: colors.brandingColor }]}>{loc.wallets.list_create_a_button}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Pressable>
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -105,7 +99,8 @@ interface WalletCarouselItemProps {
|
|||
customStyle?: ViewStyle;
|
||||
horizontal?: boolean;
|
||||
isActive?: boolean;
|
||||
allowOnPressAnimation?: boolean;
|
||||
searchQuery?: string;
|
||||
renderHighlightedText?: (text: string, query: string) => JSX.Element;
|
||||
}
|
||||
|
||||
const iStyles = StyleSheet.create({
|
||||
|
@ -168,7 +163,7 @@ const iStyles = StyleSheet.create({
|
|||
});
|
||||
|
||||
export const WalletCarouselItem: React.FC<WalletCarouselItemProps> = React.memo(
|
||||
({ item, onPress, handleLongPress, isSelectedWallet, customStyle, horizontal, allowOnPressAnimation = true }) => {
|
||||
({ item, onPress, handleLongPress, isSelectedWallet, customStyle, horizontal, searchQuery, renderHighlightedText }) => {
|
||||
const scaleValue = useRef(new Animated.Value(1.0)).current;
|
||||
const { colors } = useTheme();
|
||||
const { walletTransactionUpdateStatus } = useStorage();
|
||||
|
@ -202,7 +197,6 @@ export const WalletCarouselItem: React.FC<WalletCarouselItemProps> = React.memo(
|
|||
const opacity = isSelectedWallet === false ? 0.5 : 1.0;
|
||||
let image;
|
||||
switch (item.type) {
|
||||
case LightningLdkWallet.type:
|
||||
case LightningCustodianWallet.type:
|
||||
image = I18nManager.isRTL ? require('../img/lnd-shape-rtl.png') : require('../img/lnd-shape.png');
|
||||
break;
|
||||
|
@ -227,15 +221,15 @@ export const WalletCarouselItem: React.FC<WalletCarouselItemProps> = React.memo(
|
|||
return (
|
||||
<Animated.View
|
||||
style={[
|
||||
isLargeScreen || !horizontal ? [iStyles.rootLargeDevice, customStyle] : (customStyle ?? { ...iStyles.root, width: itemWidth }),
|
||||
isLargeScreen || !horizontal ? [iStyles.rootLargeDevice, customStyle] : customStyle ?? { ...iStyles.root, width: itemWidth },
|
||||
{ opacity, transform: [{ scale: scaleValue }] },
|
||||
]}
|
||||
>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
testID={item.getLabel()}
|
||||
onPressIn={allowOnPressAnimation ? onPressedIn : undefined}
|
||||
onPressOut={allowOnPressAnimation ? onPressedOut : undefined}
|
||||
onPressIn={onPressedIn}
|
||||
onPressOut={onPressedOut}
|
||||
onLongPress={() => {
|
||||
if (handleLongPress) handleLongPress();
|
||||
}}
|
||||
|
@ -246,7 +240,7 @@ export const WalletCarouselItem: React.FC<WalletCarouselItemProps> = React.memo(
|
|||
<Image source={image} style={iStyles.image} />
|
||||
<Text style={iStyles.br} />
|
||||
<Text numberOfLines={1} style={[iStyles.label, { color: colors.inverseForegroundColor }]}>
|
||||
{item.getLabel()}
|
||||
{renderHighlightedText && searchQuery ? renderHighlightedText(item.getLabel(), searchQuery) : item.getLabel()}
|
||||
</Text>
|
||||
<View style={iStyles.balanceContainer}>
|
||||
{item.hideBalance ? (
|
||||
|
@ -288,6 +282,8 @@ interface WalletsCarouselProps extends Partial<FlatListProps<any>> {
|
|||
handleLongPress?: () => void;
|
||||
data: TWallet[];
|
||||
scrollEnabled?: boolean;
|
||||
searchQuery?: string;
|
||||
renderHighlightedText?: (text: string, query: string) => JSX.Element;
|
||||
}
|
||||
|
||||
type FlatListRefType = FlatList<any> & {
|
||||
|
@ -316,7 +312,17 @@ const cStyles = StyleSheet.create({
|
|||
const ListHeaderComponent: React.FC = () => <View style={cStyles.separatorStyle} />;
|
||||
|
||||
const WalletsCarousel = forwardRef<FlatListRefType, WalletsCarouselProps>((props, ref) => {
|
||||
const { horizontal, data, handleLongPress, onPress, selectedWallet, scrollEnabled, onNewWalletPress } = props;
|
||||
const {
|
||||
horizontal,
|
||||
data,
|
||||
handleLongPress,
|
||||
onPress,
|
||||
selectedWallet,
|
||||
scrollEnabled,
|
||||
onNewWalletPress,
|
||||
searchQuery,
|
||||
renderHighlightedText,
|
||||
} = props;
|
||||
const renderItem = useCallback(
|
||||
({ item, index }: ListRenderItemInfo<TWallet>) =>
|
||||
item ? (
|
||||
|
@ -326,34 +332,40 @@ const WalletsCarousel = forwardRef<FlatListRefType, WalletsCarouselProps>((props
|
|||
handleLongPress={handleLongPress}
|
||||
onPress={onPress}
|
||||
horizontal={horizontal}
|
||||
searchQuery={searchQuery}
|
||||
renderHighlightedText={renderHighlightedText}
|
||||
/>
|
||||
) : null,
|
||||
[horizontal, selectedWallet, handleLongPress, onPress],
|
||||
[horizontal, selectedWallet, handleLongPress, onPress, searchQuery, renderHighlightedText],
|
||||
);
|
||||
|
||||
const flatListRef = useRef<FlatList<any>>(null);
|
||||
|
||||
useImperativeHandle(ref, (): any => {
|
||||
return {
|
||||
scrollToEnd: (params: { animated?: boolean | null | undefined } | undefined) => flatListRef.current?.scrollToEnd(params),
|
||||
scrollToIndex: (params: {
|
||||
animated?: boolean | null | undefined;
|
||||
index: number;
|
||||
viewOffset?: number | undefined;
|
||||
viewPosition?: number | undefined;
|
||||
}) => flatListRef.current?.scrollToIndex(params),
|
||||
scrollToItem: (params: {
|
||||
animated?: boolean | null | undefined;
|
||||
item: any;
|
||||
viewOffset?: number | undefined;
|
||||
viewPosition?: number | undefined;
|
||||
}) => flatListRef.current?.scrollToItem(params),
|
||||
scrollToOffset: (params: { animated?: boolean | null | undefined; offset: number }) => flatListRef.current?.scrollToOffset(params),
|
||||
recordInteraction: () => flatListRef.current?.recordInteraction(),
|
||||
flashScrollIndicators: () => flatListRef.current?.flashScrollIndicators(),
|
||||
getNativeScrollRef: () => flatListRef.current?.getNativeScrollRef(),
|
||||
};
|
||||
}, []);
|
||||
useImperativeHandle(
|
||||
ref,
|
||||
(): any => {
|
||||
return {
|
||||
scrollToEnd: (params: { animated?: boolean | null | undefined } | undefined) => flatListRef.current?.scrollToEnd(params),
|
||||
scrollToIndex: (params: {
|
||||
animated?: boolean | null | undefined;
|
||||
index: number;
|
||||
viewOffset?: number | undefined;
|
||||
viewPosition?: number | undefined;
|
||||
}) => flatListRef.current?.scrollToIndex(params),
|
||||
scrollToItem: (params: {
|
||||
animated?: boolean | null | undefined;
|
||||
item: any;
|
||||
viewOffset?: number | undefined;
|
||||
viewPosition?: number | undefined;
|
||||
}) => flatListRef.current?.scrollToItem(params),
|
||||
scrollToOffset: (params: { animated?: boolean | null | undefined; offset: number }) => flatListRef.current?.scrollToOffset(params),
|
||||
recordInteraction: () => flatListRef.current?.recordInteraction(),
|
||||
flashScrollIndicators: () => flatListRef.current?.flashScrollIndicators(),
|
||||
getNativeScrollRef: () => flatListRef.current?.getNativeScrollRef(),
|
||||
};
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
const onScrollToIndexFailed = (error: { averageItemLength: number; index: number }): void => {
|
||||
console.debug('onScrollToIndexFailed');
|
||||
|
@ -402,6 +414,8 @@ const WalletsCarousel = forwardRef<FlatListRefType, WalletsCarouselProps>((props
|
|||
handleLongPress={handleLongPress}
|
||||
onPress={onPress}
|
||||
key={index}
|
||||
searchQuery={props.searchQuery}
|
||||
renderHighlightedText={props.renderHighlightedText}
|
||||
/>
|
||||
) : null,
|
||||
)}
|
||||
|
|
26
hooks/useBounceAnimation.ts
Normal file
26
hooks/useBounceAnimation.ts
Normal file
|
@ -0,0 +1,26 @@
|
|||
import { useEffect, useRef } from 'react';
|
||||
import { Animated } from 'react-native';
|
||||
|
||||
const useBounceAnimation = (query: string) => {
|
||||
const bounceAnim = useRef(new Animated.Value(1.0)).current;
|
||||
|
||||
useEffect(() => {
|
||||
if (query) {
|
||||
Animated.timing(bounceAnim, {
|
||||
toValue: 1.2,
|
||||
duration: 150,
|
||||
useNativeDriver: true,
|
||||
}).start(() => {
|
||||
Animated.timing(bounceAnim, {
|
||||
toValue: 1.0,
|
||||
duration: 150,
|
||||
useNativeDriver: true,
|
||||
}).start();
|
||||
});
|
||||
}
|
||||
}, [bounceAnim, query]);
|
||||
|
||||
return bounceAnim;
|
||||
};
|
||||
|
||||
export default useBounceAnimation;
|
|
@ -1,386 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>11</string>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>io.bluewallet.bluewallet.fetchTxsForWallet</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>BlueWallet</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>PSBT</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>io.bluewallet.psbt</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>TXN</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>io.bluewallet.psbt.txn</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>ELECTRUMBACKUP</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>io.bluewallet.backup</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>JSON File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>public.json</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>BW COSIGNER</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>io.bluewallet.bwcosigner</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>bitcoin</string>
|
||||
<string>lightning</string>
|
||||
<string>bluewallet</string>
|
||||
<string>lapp</string>
|
||||
<string>blue</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.finance</string>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>onion</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>tailscale.net</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>ts.net</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>In order to quickly scan the recipient's address, we need your permission to use the camera to scan their QR Code.</string>
|
||||
<key>NSFaceIDUsageDescription</key>
|
||||
<string>In order to use FaceID please confirm your permission.</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Your authorization is required to save this image.</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>In order to import an image for scanning, we need your permission to access your photo library.</string>
|
||||
<key>NSUserActivityTypes</key>
|
||||
<array>
|
||||
<string>io.bluewallet.bluewallet.receiveonchain</string>
|
||||
<string>io.bluewallet.bluewallet.xpub</string>
|
||||
</array>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>Entypo.ttf</string>
|
||||
<string>FontAwesome.ttf</string>
|
||||
<string>FontAwesome5_Brands.ttf</string>
|
||||
<string>FontAwesome5_Regular.ttf</string>
|
||||
<string>FontAwesome5_Solid.ttf</string>
|
||||
<string>Ionicons.ttf</string>
|
||||
<string>MaterialIcons.ttf</string>
|
||||
<string>Octicons.ttf</string>
|
||||
</array>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>fetch</string>
|
||||
<string>processing</string>
|
||||
<string>remote-notification</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<true/>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Partially Signed Bitcoin Transaction</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.psbt</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>psbt</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.json</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>BW COSIGNER</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.bwcosigner</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>bwcosigner</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Bitcoin Transaction</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.psbt.txn</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>txn</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.text</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>JSON File</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>public.json</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>json</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<array>
|
||||
<string>application/json</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Partially Signed Bitcoin Transaction</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.psbt</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>psbt</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Bitcoin Transaction</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.psbt.txn</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>txn</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Electrum Backup</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.backup</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>backup</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.json</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>BW COSIGNER</string>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.bluewallet.bwcosigner</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>bwcosigner</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>bugsnag</key>
|
||||
<dict>
|
||||
<key>apiKey</key>
|
||||
<string>17ba9059f676f1cc4f45d98182388b01</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -9,7 +9,6 @@
|
|||
/* Begin PBXBuildFile section */
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
2B2B129397ACA4E7FCCB4F6F /* libPods-BlueWallet-NoLDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 52FA0F1447D69747BD547E1E /* libPods-BlueWallet-NoLDK.a */; };
|
||||
32B5A32A2334450100F8D608 /* Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B5A3292334450100F8D608 /* Bridge.swift */; };
|
||||
32F0A29A2311DBB20095C559 /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F0A2992311DBB20095C559 /* ComplicationController.swift */; };
|
||||
6D2A6464258BA92D0092292B /* Stickers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6D2A6463258BA92D0092292B /* Stickers.xcassets */; };
|
||||
|
@ -59,13 +58,11 @@
|
|||
B40D4E632258425500428FCC /* ReceiveInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40D4E5B2258425500428FCC /* ReceiveInterfaceController.swift */; };
|
||||
B40D4E642258425500428FCC /* WalletDetailsInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40D4E5C2258425500428FCC /* WalletDetailsInterfaceController.swift */; };
|
||||
B40FC3FA29CCD1D00007EBAC /* SwiftTCPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40FC3F829CCD1AC0007EBAC /* SwiftTCPClient.swift */; };
|
||||
B411DA832C2F1D3700115221 /* SwiftTCPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40FC3F829CCD1AC0007EBAC /* SwiftTCPClient.swift */; };
|
||||
B41B76852B66B2FF002C48D5 /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = B41B76842B66B2FF002C48D5 /* Bugsnag */; };
|
||||
B41B76872B66B2FF002C48D5 /* BugsnagNetworkRequestPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = B41B76862B66B2FF002C48D5 /* BugsnagNetworkRequestPlugin */; };
|
||||
B41C2E562BB3DCB8000FE097 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B41C2E552BB3DCB8000FE097 /* PrivacyInfo.xcprivacy */; };
|
||||
B41C2E572BB3DCB8000FE097 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B41C2E552BB3DCB8000FE097 /* PrivacyInfo.xcprivacy */; };
|
||||
B41C2E582BB3DCB8000FE097 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B41C2E552BB3DCB8000FE097 /* PrivacyInfo.xcprivacy */; };
|
||||
B41C2E592BB3DCB8000FE097 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B41C2E552BB3DCB8000FE097 /* PrivacyInfo.xcprivacy */; };
|
||||
B43D0378225847C500FBAA95 /* WalletGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B43D0372225847C500FBAA95 /* WalletGradient.swift */; };
|
||||
B43D0379225847C500FBAA95 /* WatchDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = B43D0373225847C500FBAA95 /* WatchDataSource.swift */; };
|
||||
B43D037A225847C500FBAA95 /* Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B43D0374225847C500FBAA95 /* Transaction.swift */; };
|
||||
|
@ -75,112 +72,65 @@
|
|||
B44033BF2BCC32F800162242 /* BitcoinUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033BE2BCC32F800162242 /* BitcoinUnit.swift */; };
|
||||
B44033C02BCC32F800162242 /* BitcoinUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033BE2BCC32F800162242 /* BitcoinUnit.swift */; };
|
||||
B44033C12BCC32F800162242 /* BitcoinUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033BE2BCC32F800162242 /* BitcoinUnit.swift */; };
|
||||
B44033C22BCC32F800162242 /* BitcoinUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033BE2BCC32F800162242 /* BitcoinUnit.swift */; };
|
||||
B44033C42BCC332400162242 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C32BCC332400162242 /* Balance.swift */; };
|
||||
B44033C52BCC332400162242 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C32BCC332400162242 /* Balance.swift */; };
|
||||
B44033C62BCC332400162242 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C32BCC332400162242 /* Balance.swift */; };
|
||||
B44033C72BCC332400162242 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C32BCC332400162242 /* Balance.swift */; };
|
||||
B44033CA2BCC350A00162242 /* Currency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C92BCC350A00162242 /* Currency.swift */; };
|
||||
B44033CB2BCC350A00162242 /* Currency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C92BCC350A00162242 /* Currency.swift */; };
|
||||
B44033CC2BCC350A00162242 /* Currency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C92BCC350A00162242 /* Currency.swift */; };
|
||||
B44033CD2BCC350A00162242 /* Currency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C92BCC350A00162242 /* Currency.swift */; };
|
||||
B44033CE2BCC352900162242 /* UserDefaultsGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7047D254E24D5005FE5E2 /* UserDefaultsGroup.swift */; };
|
||||
B44033CF2BCC352C00162242 /* UserDefaultsGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7047D254E24D5005FE5E2 /* UserDefaultsGroup.swift */; };
|
||||
B44033D02BCC352F00162242 /* UserDefaultsGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7047D254E24D5005FE5E2 /* UserDefaultsGroup.swift */; };
|
||||
B44033D32BCC368800162242 /* UserDefaultsGroupKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033D22BCC368800162242 /* UserDefaultsGroupKey.swift */; };
|
||||
B44033D42BCC368800162242 /* UserDefaultsGroupKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033D22BCC368800162242 /* UserDefaultsGroupKey.swift */; };
|
||||
B44033D52BCC368800162242 /* UserDefaultsGroupKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033D22BCC368800162242 /* UserDefaultsGroupKey.swift */; };
|
||||
B44033D62BCC368800162242 /* UserDefaultsGroupKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033D22BCC368800162242 /* UserDefaultsGroupKey.swift */; };
|
||||
B44033D72BCC369400162242 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
|
||||
B44033D82BCC369500162242 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
|
||||
B44033D92BCC369900162242 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4C3A254FBF4800E9F9AA /* Colors.swift */; };
|
||||
B44033DA2BCC369A00162242 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4C3A254FBF4800E9F9AA /* Colors.swift */; };
|
||||
B44033DB2BCC369B00162242 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4C3A254FBF4800E9F9AA /* Colors.swift */; };
|
||||
B44033DD2BCC36C300162242 /* LatestTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033DC2BCC36C300162242 /* LatestTransaction.swift */; };
|
||||
B44033DE2BCC36C300162242 /* LatestTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033DC2BCC36C300162242 /* LatestTransaction.swift */; };
|
||||
B44033DF2BCC36C300162242 /* LatestTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033DC2BCC36C300162242 /* LatestTransaction.swift */; };
|
||||
B44033E02BCC36C300162242 /* LatestTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033DC2BCC36C300162242 /* LatestTransaction.swift */; };
|
||||
B44033E12BCC36CA00162242 /* Placeholders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4BFA254FBA0E00E9F9AA /* Placeholders.swift */; };
|
||||
B44033E22BCC36CB00162242 /* Placeholders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4BFA254FBA0E00E9F9AA /* Placeholders.swift */; };
|
||||
B44033E42BCC36FF00162242 /* WalletData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E32BCC36FF00162242 /* WalletData.swift */; };
|
||||
B44033E52BCC36FF00162242 /* WalletData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E32BCC36FF00162242 /* WalletData.swift */; };
|
||||
B44033E62BCC36FF00162242 /* WalletData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E32BCC36FF00162242 /* WalletData.swift */; };
|
||||
B44033E72BCC36FF00162242 /* WalletData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E32BCC36FF00162242 /* WalletData.swift */; };
|
||||
B44033E92BCC371A00162242 /* MarketData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E82BCC371A00162242 /* MarketData.swift */; };
|
||||
B44033EA2BCC371A00162242 /* MarketData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E82BCC371A00162242 /* MarketData.swift */; };
|
||||
B44033EB2BCC371A00162242 /* MarketData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E82BCC371A00162242 /* MarketData.swift */; };
|
||||
B44033EC2BCC371A00162242 /* MarketData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E82BCC371A00162242 /* MarketData.swift */; };
|
||||
B44033EE2BCC374500162242 /* Numeric+abbreviated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033ED2BCC374500162242 /* Numeric+abbreviated.swift */; };
|
||||
B44033EF2BCC374500162242 /* Numeric+abbreviated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033ED2BCC374500162242 /* Numeric+abbreviated.swift */; };
|
||||
B44033F02BCC374500162242 /* Numeric+abbreviated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033ED2BCC374500162242 /* Numeric+abbreviated.swift */; };
|
||||
B44033F12BCC374500162242 /* Numeric+abbreviated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033ED2BCC374500162242 /* Numeric+abbreviated.swift */; };
|
||||
B44033F42BCC377F00162242 /* WidgetData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F32BCC377F00162242 /* WidgetData.swift */; };
|
||||
B44033F52BCC377F00162242 /* WidgetData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F32BCC377F00162242 /* WidgetData.swift */; };
|
||||
B44033F62BCC377F00162242 /* WidgetData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F32BCC377F00162242 /* WidgetData.swift */; };
|
||||
B44033F72BCC377F00162242 /* WidgetData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F32BCC377F00162242 /* WidgetData.swift */; };
|
||||
B44033F92BCC379200162242 /* WidgetDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F82BCC379200162242 /* WidgetDataStore.swift */; };
|
||||
B44033FA2BCC379200162242 /* WidgetDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F82BCC379200162242 /* WidgetDataStore.swift */; };
|
||||
B44033FB2BCC379200162242 /* WidgetDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F82BCC379200162242 /* WidgetDataStore.swift */; };
|
||||
B44033FC2BCC379200162242 /* WidgetDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033F82BCC379200162242 /* WidgetDataStore.swift */; };
|
||||
B44033FD2BCC37D600162242 /* MarketAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A2E6A254BAB1B007B5B82 /* MarketAPI.swift */; };
|
||||
B44033FE2BCC37D700162242 /* MarketAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A2E6A254BAB1B007B5B82 /* MarketAPI.swift */; };
|
||||
B44034002BCC37F800162242 /* Bundle+decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033FF2BCC37F800162242 /* Bundle+decode.swift */; };
|
||||
B44034012BCC37F800162242 /* Bundle+decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033FF2BCC37F800162242 /* Bundle+decode.swift */; };
|
||||
B44034022BCC37F800162242 /* Bundle+decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033FF2BCC37F800162242 /* Bundle+decode.swift */; };
|
||||
B44034032BCC37F800162242 /* Bundle+decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033FF2BCC37F800162242 /* Bundle+decode.swift */; };
|
||||
B44034042BCC389100162242 /* XMLParserDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */; };
|
||||
B44034052BCC389200162242 /* XMLParserDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */; };
|
||||
B44034062BCC389F00162242 /* FiatUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2AA8072568B8F40090B089 /* FiatUnit.swift */; };
|
||||
B44034072BCC38A000162242 /* FiatUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2AA8072568B8F40090B089 /* FiatUnit.swift */; };
|
||||
B440340F2BCC40A400162242 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = B440340E2BCC40A400162242 /* fiatUnits.json */; };
|
||||
B44034102BCC40A400162242 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = B440340E2BCC40A400162242 /* fiatUnits.json */; };
|
||||
B44034112BCC40A400162242 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = B440340E2BCC40A400162242 /* fiatUnits.json */; };
|
||||
B44034122BCC40A400162242 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = B440340E2BCC40A400162242 /* fiatUnits.json */; };
|
||||
B45010982C0FCB7700619044 /* MarketAPI+Electrum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6CA5142558EBA3009312A5 /* MarketAPI+Electrum.swift */; };
|
||||
B450109C2C0FCD8A00619044 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B450109B2C0FCD8A00619044 /* Utilities.swift */; };
|
||||
B450109D2C0FCD9F00619044 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B450109B2C0FCD8A00619044 /* Utilities.swift */; };
|
||||
B450109E2C0FCDA000619044 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B450109B2C0FCD8A00619044 /* Utilities.swift */; };
|
||||
B450109F2C0FCDA500619044 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B450109B2C0FCD8A00619044 /* Utilities.swift */; };
|
||||
B45010A62C1507DE00619044 /* CustomSegmentedControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B45010A52C1507DE00619044 /* CustomSegmentedControlManager.m */; };
|
||||
B4549F362B82B10D002E3153 /* ci_post_clone.sh in Resources */ = {isa = PBXBuildFile; fileRef = B4549F352B82B10D002E3153 /* ci_post_clone.sh */; };
|
||||
B461B852299599F800E431AA /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = B461B851299599F800E431AA /* AppDelegate.mm */; };
|
||||
B47462D02C1538D800100825 /* CustomSegmentedControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B45010A52C1507DE00619044 /* CustomSegmentedControlManager.m */; };
|
||||
B47B21EC2B2128B8001F6690 /* BlueWalletUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B47B21EB2B2128B8001F6690 /* BlueWalletUITests.swift */; };
|
||||
B48A6A292C1DF01000030AB9 /* KeychainSwift in Frameworks */ = {isa = PBXBuildFile; productRef = B48A6A282C1DF01000030AB9 /* KeychainSwift */; };
|
||||
B49038D92B8FBAD300A8164A /* BlueWalletUITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B49038D82B8FBAD300A8164A /* BlueWalletUITest.swift */; };
|
||||
B4A29A2C2B55C990002A67DF /* EventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D32C5C52596CE3A008C077C /* EventEmitter.m */; };
|
||||
B4A29A2D2B55C990002A67DF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
B4A29A2E2B55C990002A67DF /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = B461B851299599F800E431AA /* AppDelegate.mm */; };
|
||||
B4A29A2F2B55C990002A67DF /* Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B5A3292334450100F8D608 /* Bridge.swift */; };
|
||||
B4A29A312B55C990002A67DF /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B9D9B3A7B2CB4255876B67AF /* libz.tbd */; };
|
||||
B4A29A322B55C990002A67DF /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B468CC34D5B41F3950078EF /* libsqlite3.0.tbd */; };
|
||||
B4A29A352B55C990002A67DF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6DF25A9E249DB97E001D06F5 /* LaunchScreen.storyboard */; };
|
||||
B4A29A372B55C990002A67DF /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
B4A29A3A2B55C990002A67DF /* BlueWalletWatch.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = B40D4E30225841EC00428FCC /* BlueWalletWatch.app */; platformFilter = ios; };
|
||||
B4A29A3C2B55C990002A67DF /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6D2A6461258BA92C0092292B /* Stickers.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
B4A29A3D2B55C990002A67DF /* WidgetsExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6DD4109C266CADF10087DE03 /* WidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
B4AB225D2B02AD12001F4328 /* XMLParserDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */; };
|
||||
B4AB225E2B02AD12001F4328 /* XMLParserDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */; };
|
||||
B4B1A4622BFA73110072E3BB /* WidgetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B1A4612BFA73110072E3BB /* WidgetHelper.swift */; };
|
||||
B4B1A4642BFA73110072E3BB /* WidgetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B1A4612BFA73110072E3BB /* WidgetHelper.swift */; };
|
||||
B4B1A4652BFA73110072E3BB /* WidgetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B1A4612BFA73110072E3BB /* WidgetHelper.swift */; };
|
||||
B4D0B2622C1DEA11006B6B1B /* ReceivePageInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D0B2612C1DEA11006B6B1B /* ReceivePageInterfaceController.swift */; };
|
||||
B4D0B2642C1DEA99006B6B1B /* ReceiveType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D0B2632C1DEA99006B6B1B /* ReceiveType.swift */; };
|
||||
B4D0B2662C1DEB7F006B6B1B /* ReceiveInterfaceMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D0B2652C1DEB7F006B6B1B /* ReceiveInterfaceMode.swift */; };
|
||||
B4D0B2682C1DED67006B6B1B /* ReceiveMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D0B2672C1DED67006B6B1B /* ReceiveMethod.swift */; };
|
||||
B4EE583C226703320003363C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B40D4E35225841ED00428FCC /* Assets.xcassets */; };
|
||||
B4EFF73B2C3F6C5E0095D655 /* MockData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4EFF73A2C3F6C5E0095D655 /* MockData.swift */; };
|
||||
B4EFF73C2C3F6C5E0095D655 /* MockData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4EFF73A2C3F6C5E0095D655 /* MockData.swift */; };
|
||||
B4EFF73D2C3F6C6C0095D655 /* MarketData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E82BCC371A00162242 /* MarketData.swift */; };
|
||||
B4EFF7412C3F6C960095D655 /* PriceWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6CA4BC255872E3009312A5 /* PriceWidget.swift */; };
|
||||
B4EFF7422C3F6C990095D655 /* PriceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6CA5272558EC52009312A5 /* PriceView.swift */; };
|
||||
B4EFF7432C3F6F650095D655 /* Currency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033C92BCC350A00162242 /* Currency.swift */; };
|
||||
B4EFF7442C3F6F6A0095D655 /* FiatUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2AA8072568B8F40090B089 /* FiatUnit.swift */; };
|
||||
B4EFF7452C3F6FF30095D655 /* Placeholders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4BFA254FBA0E00E9F9AA /* Placeholders.swift */; };
|
||||
B4EFF7462C3F6FF90095D655 /* WalletData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033E32BCC36FF00162242 /* WalletData.swift */; };
|
||||
B4EFF7472C3F70010095D655 /* LatestTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033DC2BCC36C300162242 /* LatestTransaction.swift */; };
|
||||
B4EFF7482C3F70090095D655 /* BitcoinUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44033BE2BCC32F800162242 /* BitcoinUnit.swift */; };
|
||||
C59F90CE0D04D3E4BB39BC5D /* libPods-BlueWalletUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F02C2F7CA3591E4E0B06EBA /* libPods-BlueWalletUITests.a */; };
|
||||
C978A716948AB7DEC5B6F677 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
|
@ -220,41 +170,6 @@
|
|||
remoteGlobalIDString = B40D4E2F225841EC00428FCC;
|
||||
remoteInfo = BlueWalletWatch;
|
||||
};
|
||||
B47B21EF2B2128B8001F6690 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
|
||||
remoteInfo = BlueWallet;
|
||||
};
|
||||
B49038D62B8FBA2500A8164A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = B4A29A212B55C990002A67DF;
|
||||
remoteInfo = "BlueWallet-NoLDK";
|
||||
};
|
||||
B4A29A252B55C990002A67DF /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 6D99465D2555A660000E52E8;
|
||||
remoteInfo = MarketWidgetExtension;
|
||||
};
|
||||
B4A29A272B55C990002A67DF /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 6D2A6460258BA92C0092292B;
|
||||
remoteInfo = Stickers;
|
||||
};
|
||||
B4A29A292B55C990002A67DF /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 6DD4109B266CADF10087DE03;
|
||||
remoteInfo = WidgetsExtension;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
|
@ -292,29 +207,6 @@
|
|||
name = "Embed App Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B4A29A392B55C990002A67DF /* Embed Watch Content */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
|
||||
dstSubfolderSpec = 16;
|
||||
files = (
|
||||
B4A29A3A2B55C990002A67DF /* BlueWalletWatch.app in Embed Watch Content */,
|
||||
);
|
||||
name = "Embed Watch Content";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B4A29A3B2B55C990002A67DF /* Embed App Extensions */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
B4A29A3C2B55C990002A67DF /* Stickers.appex in Embed App Extensions */,
|
||||
B4A29A3D2B55C990002A67DF /* WidgetsExtension.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
|
@ -341,7 +233,6 @@
|
|||
44BC9E3EE0E9476A830CCCB9 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
|
||||
47564776A7A3427DB36C087D /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; };
|
||||
4F12F501B686459183E0BE0D /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
|
||||
52FA0F1447D69747BD547E1E /* libPods-BlueWallet-NoLDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BlueWallet-NoLDK.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5A8F67CF29564E41882ECEF8 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
|
||||
6A65D81712444D37BA152B06 /* libRNRandomBytes.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRandomBytes.a; sourceTree = "<group>"; };
|
||||
6D203C2025D4ED2500493AD1 /* BlueWalletWatch.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = BlueWalletWatch.entitlements; sourceTree = "<group>"; };
|
||||
|
@ -408,14 +299,12 @@
|
|||
849047C92702A32A008EE567 /* Handoff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Handoff.swift; sourceTree = "<group>"; };
|
||||
84E05A832721191B001A0D3A /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
||||
8637D4B5E14D443A9031DA95 /* libRNFS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFS.a; sourceTree = "<group>"; };
|
||||
8B160AC12BDAD72BB70BC175 /* Pods-BlueWallet-NoLDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BlueWallet-NoLDK.release.xcconfig"; path = "Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK.release.xcconfig"; sourceTree = "<group>"; };
|
||||
90F86BC5194548CA87D729A9 /* libToolTipMenu.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libToolTipMenu.a; sourceTree = "<group>"; };
|
||||
94565BFC6A0C4235B3EC7B01 /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSVG.a; sourceTree = "<group>"; };
|
||||
95208B2A05884A76B5BB99C0 /* libRCTGoogleAnalyticsBridge.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTGoogleAnalyticsBridge.a; sourceTree = "<group>"; };
|
||||
95304AD151F1F531985AA341 /* libPods-BlueWallet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BlueWallet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9DF4E6C040764E4BA1ACC1EB /* libTcpSockets.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libTcpSockets.a; sourceTree = "<group>"; };
|
||||
9F1F51A83D044F3BB26A35FC /* libRNSVG-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNSVG-tvOS.a"; sourceTree = "<group>"; };
|
||||
A16A0CF8A3E6F577B90BF8A4 /* Pods-BlueWallet-NoLDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BlueWallet-NoLDK.debug.xcconfig"; path = "Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
A7C4B1FDAD264618BAF8C335 /* libRNCWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCWebView.a; sourceTree = "<group>"; };
|
||||
AB2325650CE04F018697ACFE /* libRNReactNativeHapticFeedback.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeHapticFeedback.a; sourceTree = "<group>"; };
|
||||
B40D4E30225841EC00428FCC /* BlueWalletWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BlueWalletWatch.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
@ -460,11 +349,8 @@
|
|||
B4549F352B82B10D002E3153 /* ci_post_clone.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ci_post_clone.sh; sourceTree = "<group>"; };
|
||||
B461B850299599F800E431AA /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = BlueWallet/AppDelegate.h; sourceTree = "<group>"; };
|
||||
B461B851299599F800E431AA /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = BlueWallet/AppDelegate.mm; sourceTree = "<group>"; };
|
||||
B47B21E92B2128B8001F6690 /* BlueWalletUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlueWalletUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B47B21EB2B2128B8001F6690 /* BlueWalletUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlueWalletUITests.swift; sourceTree = "<group>"; };
|
||||
B49038D82B8FBAD300A8164A /* BlueWalletUITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlueWalletUITest.swift; sourceTree = "<group>"; };
|
||||
B4A29A452B55C990002A67DF /* BlueWallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BlueWallet.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B4A29A462B55C990002A67DF /* BlueWallet-NoLDK.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlueWallet-NoLDK.plist"; sourceTree = "<absolute>"; };
|
||||
B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLParserDelegate.swift; sourceTree = "<group>"; };
|
||||
B4B1A4612BFA73110072E3BB /* WidgetHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetHelper.swift; sourceTree = "<group>"; };
|
||||
B4D0B2612C1DEA11006B6B1B /* ReceivePageInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceivePageInterfaceController.swift; sourceTree = "<group>"; };
|
||||
|
@ -536,24 +422,6 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B47B21E62B2128B8001F6690 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C59F90CE0D04D3E4BB39BC5D /* libPods-BlueWalletUITests.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B4A29A302B55C990002A67DF /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B4A29A312B55C990002A67DF /* libz.tbd in Frameworks */,
|
||||
B4A29A322B55C990002A67DF /* libsqlite3.0.tbd in Frameworks */,
|
||||
2B2B129397ACA4E7FCCB4F6F /* libPods-BlueWallet-NoLDK.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
|
@ -585,7 +453,6 @@
|
|||
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
||||
13B07FB61A68108700A75B9A /* Info.plist */,
|
||||
B4A29A462B55C990002A67DF /* BlueWallet-NoLDK.plist */,
|
||||
13B07FB71A68108700A75B9A /* main.m */,
|
||||
32B5A3292334450100F8D608 /* Bridge.swift */,
|
||||
32B5A3282334450100F8D608 /* BlueWallet-Bridging-Header.h */,
|
||||
|
@ -612,7 +479,6 @@
|
|||
3271B0AA236E2E0700DA766F /* NotificationCenter.framework */,
|
||||
6D333B3A252FE1A3004D72DF /* WidgetKit.framework */,
|
||||
6D333B3C252FE1A3004D72DF /* SwiftUI.framework */,
|
||||
52FA0F1447D69747BD547E1E /* libPods-BlueWallet-NoLDK.a */,
|
||||
95304AD151F1F531985AA341 /* libPods-BlueWallet.a */,
|
||||
6F02C2F7CA3591E4E0B06EBA /* libPods-BlueWalletUITests.a */,
|
||||
);
|
||||
|
@ -756,8 +622,6 @@
|
|||
B40D4E3C225841ED00428FCC /* BlueWalletWatch Extension.appex */,
|
||||
6D2A6461258BA92C0092292B /* Stickers.appex */,
|
||||
6DD4109C266CADF10087DE03 /* WidgetsExtension.appex */,
|
||||
B47B21E92B2128B8001F6690 /* BlueWalletUITests.xctest */,
|
||||
B4A29A452B55C990002A67DF /* BlueWallet.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -915,8 +779,6 @@
|
|||
children = (
|
||||
B68F8552DD4428F64B11DCFB /* Pods-BlueWallet.debug.xcconfig */,
|
||||
77ED97C3CA4284744868B15D /* Pods-BlueWallet.release.xcconfig */,
|
||||
A16A0CF8A3E6F577B90BF8A4 /* Pods-BlueWallet-NoLDK.debug.xcconfig */,
|
||||
8B160AC12BDAD72BB70BC175 /* Pods-BlueWallet-NoLDK.release.xcconfig */,
|
||||
6E8A234AFCA1624321AE54F5 /* Pods-BlueWalletUITests.debug.xcconfig */,
|
||||
0C3D27CE367C0DD11F4B8772 /* Pods-BlueWalletUITests.release.xcconfig */,
|
||||
);
|
||||
|
@ -1030,56 +892,6 @@
|
|||
productReference = B40D4E3C225841ED00428FCC /* BlueWalletWatch Extension.appex */;
|
||||
productType = "com.apple.product-type.watchkit2-extension";
|
||||
};
|
||||
B47B21E82B2128B8001F6690 /* BlueWalletUITests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = B47B21F32B2128B8001F6690 /* Build configuration list for PBXNativeTarget "BlueWalletUITests" */;
|
||||
buildPhases = (
|
||||
6A7B5D072DAE0808347B48AA /* [CP] Check Pods Manifest.lock */,
|
||||
B47B21E52B2128B8001F6690 /* Sources */,
|
||||
B47B21E62B2128B8001F6690 /* Frameworks */,
|
||||
B47B21E72B2128B8001F6690 /* Resources */,
|
||||
5BF4F7E206022ECCBEE8C01A /* [CP] Embed Pods Frameworks */,
|
||||
22A7683E080229A2C227229E /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
B47B21F02B2128B8001F6690 /* PBXTargetDependency */,
|
||||
B49038D72B8FBA2500A8164A /* PBXTargetDependency */,
|
||||
);
|
||||
name = BlueWalletUITests;
|
||||
productName = BlueWalletUITests;
|
||||
productReference = B47B21E92B2128B8001F6690 /* BlueWalletUITests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.ui-testing";
|
||||
};
|
||||
B4A29A212B55C990002A67DF /* BlueWallet-NoLDK */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = B4A29A422B55C990002A67DF /* Build configuration list for PBXNativeTarget "BlueWallet-NoLDK" */;
|
||||
buildPhases = (
|
||||
B4A29A2A2B55C990002A67DF /* [CP] Check Pods Manifest.lock */,
|
||||
B4A29A2B2B55C990002A67DF /* Sources */,
|
||||
B4A29A302B55C990002A67DF /* Frameworks */,
|
||||
B4A29A342B55C990002A67DF /* Resources */,
|
||||
B4A29A382B55C990002A67DF /* Bundle React Native code and images */,
|
||||
B4A29A392B55C990002A67DF /* Embed Watch Content */,
|
||||
B4A29A3B2B55C990002A67DF /* Embed App Extensions */,
|
||||
B4A29A3E2B55C990002A67DF /* Upload source maps to Bugsnag */,
|
||||
B4A29A3F2B55C990002A67DF /* Upload Bugsnag dSYM */,
|
||||
B4A29A402B55C990002A67DF /* [CP] Embed Pods Frameworks */,
|
||||
B4A29A412B55C990002A67DF /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
B4A29A242B55C990002A67DF /* PBXTargetDependency */,
|
||||
B4A29A262B55C990002A67DF /* PBXTargetDependency */,
|
||||
B4A29A282B55C990002A67DF /* PBXTargetDependency */,
|
||||
);
|
||||
name = "BlueWallet-NoLDK";
|
||||
productName = "Hello World";
|
||||
productReference = B4A29A452B55C990002A67DF /* BlueWallet.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
|
@ -1117,10 +929,6 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
B47B21E82B2128B8001F6690 = {
|
||||
CreatedOnToolsVersion = 15.0.1;
|
||||
TestTargetID = B4A29A212B55C990002A67DF;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BlueWallet" */;
|
||||
|
@ -1169,8 +977,6 @@
|
|||
B40D4E3B225841ED00428FCC /* BlueWalletWatch Extension */,
|
||||
6D2A6460258BA92C0092292B /* Stickers */,
|
||||
6DD4109B266CADF10087DE03 /* WidgetsExtension */,
|
||||
B47B21E82B2128B8001F6690 /* BlueWalletUITests */,
|
||||
B4A29A212B55C990002A67DF /* BlueWallet-NoLDK */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -1226,24 +1032,6 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B47B21E72B2128B8001F6690 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B4A29A342B55C990002A67DF /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B41C2E592BB3DCB8000FE097 /* PrivacyInfo.xcprivacy in Resources */,
|
||||
B44034122BCC40A400162242 /* fiatUnits.json in Resources */,
|
||||
B4A29A352B55C990002A67DF /* LaunchScreen.storyboard in Resources */,
|
||||
B4A29A372B55C990002A67DF /* Images.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
|
@ -1278,23 +1066,6 @@
|
|||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWallet/Pods-BlueWallet-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
22A7683E080229A2C227229E /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWalletUITests/Pods-BlueWalletUITests-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWalletUITests/Pods-BlueWalletUITests-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWalletUITests/Pods-BlueWalletUITests-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
3018134BCE2C10C2242F4CA3 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1355,45 +1126,6 @@
|
|||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWallet/Pods-BlueWallet-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
5BF4F7E206022ECCBEE8C01A /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWalletUITests/Pods-BlueWalletUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWalletUITests/Pods-BlueWalletUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWalletUITests/Pods-BlueWalletUITests-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
6A7B5D072DAE0808347B48AA /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-BlueWalletUITests-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
A8D9893AE3CD454A9094B651 /* Upload source maps to Bugsnag */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1408,111 +1140,6 @@
|
|||
shellPath = /bin/sh;
|
||||
shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n";
|
||||
};
|
||||
B4A29A2A2B55C990002A67DF /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-BlueWallet-NoLDK-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
B4A29A382B55C990002A67DF /* Bundle React Native code and images */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Bundle React Native code and images";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
|
||||
};
|
||||
B4A29A3E2B55C990002A67DF /* Upload source maps to Bugsnag */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Upload source maps to Bugsnag";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n";
|
||||
};
|
||||
B4A29A3F2B55C990002A67DF /* Upload Bugsnag dSYM */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}",
|
||||
"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
|
||||
);
|
||||
name = "Upload Bugsnag dSYM";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = "/usr/bin/env ruby";
|
||||
shellScript = "api_key = nil # Insert your key here to use it directly from this script\n\n# Attempt to get the API key from an environment variable\nunless api_key\n api_key = ENV[\"BUGSNAG_API_KEY\"]\n\n # If not present, attempt to lookup the value from the Info.plist\n unless api_key\n info_plist_path = \"#{ENV[\"BUILT_PRODUCTS_DIR\"]}/#{ENV[\"INFOPLIST_PATH\"]}\"\n plist_buddy_response = `/usr/libexec/PlistBuddy -c \"print :bugsnag:apiKey\" \"#{info_plist_path}\"`\n plist_buddy_response = `/usr/libexec/PlistBuddy -c \"print :BugsnagAPIKey\" \"#{info_plist_path}\"` if !$?.success?\n api_key = plist_buddy_response if $?.success?\n end\nend\n\nfail(\"No Bugsnag API key detected - add your key to your Info.plist, BUGSNAG_API_KEY environment variable or this Run Script phase\") unless api_key\n\nfork do\n Process.setsid\n STDIN.reopen(\"/dev/null\")\n STDOUT.reopen(\"/dev/null\", \"a\")\n STDERR.reopen(\"/dev/null\", \"a\")\n\n require 'shellwords'\n\n Dir[\"#{ENV[\"DWARF_DSYM_FOLDER_PATH\"]}/*/Contents/Resources/DWARF/*\"].each do |dsym|\n curl_command = \"curl --http1.1 -F dsym=@#{Shellwords.escape(dsym)} -F projectRoot=#{Shellwords.escape(ENV[\"PROJECT_DIR\"])} \"\n curl_command += \"-F apiKey=#{Shellwords.escape(api_key)} \"\n curl_command += \"https://upload.bugsnag.com/\"\n system(curl_command)\n end\nend\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
B4A29A402B55C990002A67DF /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
B4A29A412B55C990002A67DF /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWallet-NoLDK/Pods-BlueWallet-NoLDK-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
CF0725821442A3000F20E874 /* Upload Bugsnag dSYM */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1654,59 +1281,6 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B47B21E52B2128B8001F6690 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B49038D92B8FBAD300A8164A /* BlueWalletUITest.swift in Sources */,
|
||||
B4EFF7472C3F70010095D655 /* LatestTransaction.swift in Sources */,
|
||||
B4EFF7422C3F6C990095D655 /* PriceView.swift in Sources */,
|
||||
B4EFF7482C3F70090095D655 /* BitcoinUnit.swift in Sources */,
|
||||
B4EFF73D2C3F6C6C0095D655 /* MarketData.swift in Sources */,
|
||||
B4EFF73C2C3F6C5E0095D655 /* MockData.swift in Sources */,
|
||||
B4EFF7432C3F6F650095D655 /* Currency.swift in Sources */,
|
||||
B4EFF7412C3F6C960095D655 /* PriceWidget.swift in Sources */,
|
||||
B4EFF7462C3F6FF90095D655 /* WalletData.swift in Sources */,
|
||||
B4EFF7452C3F6FF30095D655 /* Placeholders.swift in Sources */,
|
||||
B4EFF7442C3F6F6A0095D655 /* FiatUnit.swift in Sources */,
|
||||
B47B21EC2B2128B8001F6690 /* BlueWalletUITests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B4A29A2B2B55C990002A67DF /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B44033D72BCC369400162242 /* UserDefaultsExtension.swift in Sources */,
|
||||
B44033F72BCC377F00162242 /* WidgetData.swift in Sources */,
|
||||
B44033E12BCC36CA00162242 /* Placeholders.swift in Sources */,
|
||||
B47462D02C1538D800100825 /* CustomSegmentedControlManager.m in Sources */,
|
||||
B44033E72BCC36FF00162242 /* WalletData.swift in Sources */,
|
||||
B44033E02BCC36C300162242 /* LatestTransaction.swift in Sources */,
|
||||
B44033D92BCC369900162242 /* Colors.swift in Sources */,
|
||||
B4A29A2C2B55C990002A67DF /* EventEmitter.m in Sources */,
|
||||
B44033D62BCC368800162242 /* UserDefaultsGroupKey.swift in Sources */,
|
||||
B44033FD2BCC37D600162242 /* MarketAPI.swift in Sources */,
|
||||
B4A29A2D2B55C990002A67DF /* main.m in Sources */,
|
||||
B45010982C0FCB7700619044 /* MarketAPI+Electrum.swift in Sources */,
|
||||
B4A29A2E2B55C990002A67DF /* AppDelegate.mm in Sources */,
|
||||
B44033C72BCC332400162242 /* Balance.swift in Sources */,
|
||||
B44033FC2BCC379200162242 /* WidgetDataStore.swift in Sources */,
|
||||
B411DA832C2F1D3700115221 /* SwiftTCPClient.swift in Sources */,
|
||||
B44033C22BCC32F800162242 /* BitcoinUnit.swift in Sources */,
|
||||
B4B1A4652BFA73110072E3BB /* WidgetHelper.swift in Sources */,
|
||||
B44033F12BCC374500162242 /* Numeric+abbreviated.swift in Sources */,
|
||||
B44034032BCC37F800162242 /* Bundle+decode.swift in Sources */,
|
||||
B44033CD2BCC350A00162242 /* Currency.swift in Sources */,
|
||||
B44034062BCC389F00162242 /* FiatUnit.swift in Sources */,
|
||||
B44033CF2BCC352C00162242 /* UserDefaultsGroup.swift in Sources */,
|
||||
B4A29A2F2B55C990002A67DF /* Bridge.swift in Sources */,
|
||||
B44034042BCC389100162242 /* XMLParserDelegate.swift in Sources */,
|
||||
B450109E2C0FCDA000619044 /* Utilities.swift in Sources */,
|
||||
B44033EC2BCC371A00162242 /* MarketData.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
|
@ -1736,31 +1310,6 @@
|
|||
target = B40D4E2F225841EC00428FCC /* BlueWalletWatch */;
|
||||
targetProxy = B40D4E4B225841ED00428FCC /* PBXContainerItemProxy */;
|
||||
};
|
||||
B47B21F02B2128B8001F6690 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 13B07F861A680F5B00A75B9A /* BlueWallet */;
|
||||
targetProxy = B47B21EF2B2128B8001F6690 /* PBXContainerItemProxy */;
|
||||
};
|
||||
B49038D72B8FBA2500A8164A /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = B4A29A212B55C990002A67DF /* BlueWallet-NoLDK */;
|
||||
targetProxy = B49038D62B8FBA2500A8164A /* PBXContainerItemProxy */;
|
||||
};
|
||||
B4A29A242B55C990002A67DF /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
targetProxy = B4A29A252B55C990002A67DF /* PBXContainerItemProxy */;
|
||||
};
|
||||
B4A29A262B55C990002A67DF /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
platformFilter = ios;
|
||||
target = 6D2A6460258BA92C0092292B /* Stickers */;
|
||||
targetProxy = B4A29A272B55C990002A67DF /* PBXContainerItemProxy */;
|
||||
};
|
||||
B4A29A282B55C990002A67DF /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 6DD4109B266CADF10087DE03 /* WidgetsExtension */;
|
||||
targetProxy = B4A29A292B55C990002A67DF /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
|
@ -1846,13 +1395,13 @@
|
|||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development io.bluewallet.bluewallet";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore io.bluewallet.bluewallet catalyst";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "BlueWallet-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TARGETED_DEVICE_FAMILY = "1,2,6";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -1901,12 +1450,12 @@
|
|||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore io.bluewallet.bluewallet";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore io.bluewallet.bluewallet catalyst";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "BlueWallet-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TARGETED_DEVICE_FAMILY = "1,2,6";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
|
@ -2009,7 +1558,7 @@
|
|||
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 1703136680;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
|
@ -2038,7 +1587,7 @@
|
|||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development io.bluewallet.bluewallet.MarketWidget";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match Development io.bluewallet.bluewallet.MarketWidget macos";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore io.bluewallet.bluewallet.MarketWidget catalyst";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
@ -2064,7 +1613,7 @@
|
|||
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1703136680;
|
||||
|
@ -2093,7 +1642,7 @@
|
|||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore io.bluewallet.bluewallet.MarketWidget";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match Development io.bluewallet.bluewallet.MarketWidget macos";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore io.bluewallet.bluewallet.MarketWidget catalyst";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
@ -2417,202 +1966,6 @@
|
|||
};
|
||||
name = Release;
|
||||
};
|
||||
B47B21F12B2128B8001F6690 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 6E8A234AFCA1624321AE54F5 /* Pods-BlueWalletUITests.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1703136680;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = A7W54YZ4WU;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/usr/lib/swift",
|
||||
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
|
||||
"$(inherited)",
|
||||
);
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.BlueWalletUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
||||
SWIFT_EMIT_LOC_STRINGS = NO;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = "BlueWallet-NoLDK";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B47B21F22B2128B8001F6690 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 0C3D27CE367C0DD11F4B8772 /* Pods-BlueWalletUITests.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1703136680;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = A7W54YZ4WU;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/usr/lib/swift",
|
||||
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
|
||||
"$(inherited)",
|
||||
);
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.BlueWalletUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_EMIT_LOC_STRINGS = NO;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = "BlueWallet-NoLDK";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
B4A29A432B55C990002A67DF /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = A16A0CF8A3E6F577B90BF8A4 /* Pods-BlueWallet-NoLDK.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = BlueWallet/BlueWallet.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1703136680;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = A7W54YZ4WU;
|
||||
ENABLE_BITCODE = NO;
|
||||
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
"COCOAPODS=1",
|
||||
"FB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = "BlueWallet-NoLDK.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = BlueWallet;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/usr/lib/swift",
|
||||
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
|
||||
"$(inherited)",
|
||||
);
|
||||
MARKETING_VERSION = 6.6.9;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-lc++",
|
||||
);
|
||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet;
|
||||
PRODUCT_NAME = BlueWallet;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "BlueWallet-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2,6";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B4A29A442B55C990002A67DF /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 8B160AC12BDAD72BB70BC175 /* Pods-BlueWallet-NoLDK.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = BlueWallet/BlueWalletRelease.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1703136680;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = A7W54YZ4WU;
|
||||
ENABLE_BITCODE = NO;
|
||||
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
|
||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = "BlueWallet-NoLDK.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = BlueWallet;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/usr/lib/swift",
|
||||
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
|
||||
"$(inherited)",
|
||||
);
|
||||
MARKETING_VERSION = 6.6.9;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-lc++",
|
||||
);
|
||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet;
|
||||
PRODUCT_NAME = BlueWallet;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "BlueWallet-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2,6";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
|
@ -2670,24 +2023,6 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
B47B21F32B2128B8001F6690 /* Build configuration list for PBXNativeTarget "BlueWalletUITests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B47B21F12B2128B8001F6690 /* Debug */,
|
||||
B47B21F22B2128B8001F6690 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
B4A29A422B55C990002A67DF /* Build configuration list for PBXNativeTarget "BlueWallet-NoLDK" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B4A29A432B55C990002A67DF /* Debug */,
|
||||
B4A29A442B55C990002A67DF /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCRemoteSwiftPackageReference section */
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1520"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<PreActions>
|
||||
<ExecutionAction
|
||||
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||
<ActionContent
|
||||
title = "Run Script"
|
||||
scriptText = "cd ${SRCROOT} cd .. cp scripts/maccatalystpatches/lightning-ldk-wallet.ts class/wallets/lightning-ldk-wallet.ts ">
|
||||
<EnvironmentBuildable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B4A29A212B55C990002A67DF"
|
||||
BuildableName = "BlueWallet.app"
|
||||
BlueprintName = "BlueWallet-NoLDK"
|
||||
ReferencedContainer = "container:BlueWallet.xcodeproj">
|
||||
</BuildableReference>
|
||||
</EnvironmentBuildable>
|
||||
</ActionContent>
|
||||
</ExecutionAction>
|
||||
</PreActions>
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B4A29A212B55C990002A67DF"
|
||||
BuildableName = "BlueWallet.app"
|
||||
BlueprintName = "BlueWallet-NoLDK"
|
||||
ReferencedContainer = "container:BlueWallet.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B4A29A212B55C990002A67DF"
|
||||
BuildableName = "BlueWallet.app"
|
||||
BlueprintName = "BlueWallet-NoLDK"
|
||||
ReferencedContainer = "container:BlueWallet.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B4A29A212B55C990002A67DF"
|
||||
BuildableName = "BlueWallet.app"
|
||||
BlueprintName = "BlueWallet-NoLDK"
|
||||
ReferencedContainer = "container:BlueWallet.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1500"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<PreActions>
|
||||
<ExecutionAction
|
||||
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||
<ActionContent
|
||||
title = "Run Script"
|
||||
scriptText = "cd ${SRCROOT} cd .. cp scripts/maccatalystpatches/lightning-ldk-wallet.ts class/wallets/lightning-ldk-wallet.ts ">
|
||||
<EnvironmentBuildable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B47B21E82B2128B8001F6690"
|
||||
BuildableName = "BlueWalletUITests.xctest"
|
||||
BlueprintName = "BlueWalletUITests"
|
||||
ReferencedContainer = "container:BlueWallet.xcodeproj">
|
||||
</BuildableReference>
|
||||
</EnvironmentBuildable>
|
||||
</ActionContent>
|
||||
</ExecutionAction>
|
||||
</PreActions>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO"
|
||||
parallelizable = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B47B21E82B2128B8001F6690"
|
||||
BuildableName = "BlueWalletUITests.xctest"
|
||||
BlueprintName = "BlueWalletUITests"
|
||||
ReferencedContainer = "container:BlueWallet.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
|
@ -19,25 +19,15 @@
|
|||
<key>orderHint</key>
|
||||
<integer>71</integer>
|
||||
</dict>
|
||||
<key>BlueWallet-NoLDK.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>136</integer>
|
||||
</dict>
|
||||
<key>BlueWallet.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>BlueWalletUITests.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>97</integer>
|
||||
</dict>
|
||||
<key>BlueWalletWatch (Complication).xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>123</integer>
|
||||
<integer>9</integer>
|
||||
</dict>
|
||||
<key>BlueWalletWatch (Glance).xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
|
@ -107,6 +97,11 @@
|
|||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B4A29A212B55C990002A67DF</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"originHash" : "52530e6b1e3a85c8854952ef703a6d1bbe1acd82713be2b3166476b9b277db23",
|
||||
"pins" : [
|
||||
{
|
||||
"identity" : "bugsnag-cocoa",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/bugsnag/bugsnag-cocoa",
|
||||
"state" : {
|
||||
"revision" : "16b9145fc66e5296f16e733f6feb5d0e450574e8",
|
||||
"version" : "6.28.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "efqrcode",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/EFPrefix/EFQRCode.git",
|
||||
"state" : {
|
||||
"revision" : "2991c2f318ad9529d93b2a73a382a3f9c72c64ce",
|
||||
"version" : "6.2.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "keychain-swift",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/evgenyneu/keychain-swift.git",
|
||||
"state" : {
|
||||
"revision" : "5e1b02b6a9dac2a759a1d5dbc175c86bd192a608",
|
||||
"version" : "24.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift_qrcodejs",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/ApolloZhu/swift_qrcodejs.git",
|
||||
"state" : {
|
||||
"revision" : "374dc7f7b9e76c6aeb393f6a84590c6d387e1ecb",
|
||||
"version" : "2.2.2"
|
||||
}
|
||||
}
|
||||
],
|
||||
"version" : 3
|
||||
}
|
|
@ -12,7 +12,6 @@ enum WalletGradient: String {
|
|||
case SegwitHD = "HDsegwitP2SH"
|
||||
case Segwit = "segwitP2SH"
|
||||
case LightningCustodial = "lightningCustodianWallet"
|
||||
case LightningLDK = "lightningLdk"
|
||||
case SegwitNative = "HDsegwitBech32"
|
||||
case WatchOnly = "watchOnly"
|
||||
case MultiSig = "HDmultisig"
|
||||
|
@ -27,7 +26,7 @@ enum WalletGradient: String {
|
|||
return "walletHD"
|
||||
case .WatchOnly:
|
||||
return "walletWatchOnly"
|
||||
case .LightningCustodial, .LightningLDK:
|
||||
case .LightningCustodial:
|
||||
return "walletLightningCustodial"
|
||||
case .MultiSig:
|
||||
return "watchMultisig"
|
||||
|
|
|
@ -43,7 +43,7 @@ class ReceiveInterfaceController: WKInterfaceController {
|
|||
}
|
||||
|
||||
private func setupView() {
|
||||
if receiveMethod == .CreateInvoice && (wallet?.type == WalletGradient.LightningCustodial.rawValue || wallet?.type == WalletGradient.LightningLDK.rawValue) {
|
||||
if receiveMethod == .CreateInvoice && (wallet?.type == WalletGradient.LightningCustodial.rawValue) {
|
||||
presentController(withName: SpecifyInterfaceController.identifier, context: wallet?.identifier)
|
||||
} else {
|
||||
setupQRCode()
|
||||
|
@ -92,7 +92,7 @@ class ReceiveInterfaceController: WKInterfaceController {
|
|||
}
|
||||
|
||||
private func isCreatingInvoice() -> Bool {
|
||||
return receiveMethod == .CreateInvoice && (wallet?.type == WalletGradient.LightningCustodial.rawValue || wallet?.type == WalletGradient.LightningLDK.rawValue)
|
||||
return receiveMethod == .CreateInvoice && (wallet?.type == WalletGradient.LightningCustodial.rawValue)
|
||||
}
|
||||
|
||||
override func didDeactivate() {
|
||||
|
|
|
@ -40,7 +40,7 @@ class SpecifyInterfaceController: WKInterfaceController {
|
|||
let wallet = WatchDataSource.shared.wallets[identifier]
|
||||
self.wallet = wallet
|
||||
self.createButton.setAlpha(0.5)
|
||||
self.specifiedQRContent.bitcoinUnit = (wallet.type == WalletGradient.LightningCustodial.rawValue || wallet.type == WalletGradient.LightningLDK.rawValue) ? .SATS : .BTC
|
||||
self.specifiedQRContent.bitcoinUnit = (wallet.type == WalletGradient.LightningCustodial.rawValue) ? .SATS : .BTC
|
||||
NotificationCenter.default.addObserver(forName: NumericKeypadInterfaceController.NotificationName.keypadDataChanged, object: nil, queue: nil) { [weak self] (notification) in
|
||||
guard let amountObject = notification.object as? [String], !amountObject.isEmpty else { return }
|
||||
if amountObject.count == 1 && (amountObject.first == "." || amountObject.first == "0") {
|
||||
|
@ -60,7 +60,7 @@ class SpecifyInterfaceController: WKInterfaceController {
|
|||
|
||||
var isShouldCreateButtonBeEnabled = amountDouble > 0 && !title.isEmpty
|
||||
|
||||
if (wallet.type == WalletGradient.LightningCustodial.rawValue || wallet.type == WalletGradient.LightningLDK.rawValue) && !WCSession.default.isReachable {
|
||||
if (wallet.type == WalletGradient.LightningCustodial.rawValue) && !WCSession.default.isReachable {
|
||||
isShouldCreateButtonBeEnabled = false
|
||||
}
|
||||
|
||||
|
|
|
@ -41,14 +41,14 @@ class WalletDetailsInterfaceController: WKInterfaceController {
|
|||
walletNameLabel.setText(wallet.label)
|
||||
walletBasicsGroup.setBackgroundImageNamed(WalletGradient(rawValue: wallet.type)?.imageString)
|
||||
|
||||
let isLightningWallet = wallet.type == WalletGradient.LightningCustodial.rawValue || wallet.type == WalletGradient.LightningLDK.rawValue
|
||||
let isLightningWallet = wallet.type == WalletGradient.LightningCustodial.rawValue
|
||||
createInvoiceButton.setHidden(!isLightningWallet)
|
||||
receiveButton.setHidden(wallet.receiveAddress.isEmpty)
|
||||
viewXPubButton.setHidden(!isXPubAvailable(wallet: wallet))
|
||||
}
|
||||
|
||||
private func isXPubAvailable(wallet: Wallet) -> Bool {
|
||||
return (wallet.type != WalletGradient.LightningCustodial.rawValue && wallet.type != WalletGradient.LightningLDK.rawValue) && !(wallet.xpub ?? "").isEmpty
|
||||
return (wallet.type != WalletGradient.LightningCustodial.rawValue) && !(wallet.xpub ?? "").isEmpty
|
||||
}
|
||||
|
||||
private func updateTransactionsTable(forWallet wallet: Wallet) {
|
||||
|
|
12
ios/Podfile
12
ios/Podfile
|
@ -60,16 +60,6 @@ end
|
|||
|
||||
target 'BlueWallet' do
|
||||
configure_target()
|
||||
# Manually add rn-ldk pod for this target
|
||||
pod 'rn-ldk', :path => '../node_modules/rn-ldk'
|
||||
end
|
||||
|
||||
target 'BlueWallet-NoLDK' do
|
||||
configure_target()
|
||||
end
|
||||
|
||||
target 'BlueWalletUITests' do
|
||||
configure_target()
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
|
@ -88,4 +78,4 @@ post_install do |installer|
|
|||
end
|
||||
__apply_Xcode_12_5_M1_post_install_workaround(installer)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -466,8 +466,6 @@ PODS:
|
|||
- React-Core
|
||||
- RealmJS (12.12.1):
|
||||
- React
|
||||
- rn-ldk (0.8.4):
|
||||
- React-Core
|
||||
- RNCAsyncStorage (1.24.0):
|
||||
- React-Core
|
||||
- RNCClipboard (1.14.1):
|
||||
|
@ -480,14 +478,14 @@ PODS:
|
|||
- React-Core
|
||||
- RNFS (2.20.0):
|
||||
- React-Core
|
||||
- RNGestureHandler (2.17.1):
|
||||
- RNGestureHandler (2.18.1):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core
|
||||
- RNHandoff (0.0.3):
|
||||
- React
|
||||
- RNKeychain (8.2.0):
|
||||
- React-Core
|
||||
- RNLocalize (3.2.0):
|
||||
- RNLocalize (3.2.1):
|
||||
- React-Core
|
||||
- RNPermissions (4.1.5):
|
||||
- React-Core
|
||||
|
@ -497,13 +495,14 @@ PODS:
|
|||
- React
|
||||
- RNRate (1.2.12):
|
||||
- React-Core
|
||||
- RNReactNativeHapticFeedback (2.2.0):
|
||||
- RNReactNativeHapticFeedback (2.3.0):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core
|
||||
- RNReanimated (3.14.0):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- RNScreens (3.32.0):
|
||||
- RNScreens (3.33.0):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
|
@ -581,7 +580,6 @@ DEPENDENCIES:
|
|||
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
|
||||
- ReactNativeCameraKit (from `../node_modules/react-native-camera-kit`)
|
||||
- RealmJS (from `../node_modules/realm`)
|
||||
- rn-ldk (from `../node_modules/rn-ldk`)
|
||||
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
|
||||
- "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)"
|
||||
- "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)"
|
||||
|
@ -727,8 +725,6 @@ EXTERNAL SOURCES:
|
|||
:path: "../node_modules/react-native-camera-kit"
|
||||
RealmJS:
|
||||
:path: "../node_modules/realm"
|
||||
rn-ldk:
|
||||
:path: "../node_modules/rn-ldk"
|
||||
RNCAsyncStorage:
|
||||
:path: "../node_modules/@react-native-async-storage/async-storage"
|
||||
RNCClipboard:
|
||||
|
@ -837,24 +833,23 @@ SPEC CHECKSUMS:
|
|||
ReactCommon: ff94462e007c568d8cdebc32e3c97af86ec93bb5
|
||||
ReactNativeCameraKit: 9d46a5d7dd544ca64aa9c03c150d2348faf437eb
|
||||
RealmJS: f4f6d27b325b1c1b402eb0aa5ee79e9d5f603293
|
||||
rn-ldk: 0d8749d98cc5ce67302a32831818c116b67f7643
|
||||
RNCAsyncStorage: ec53e44dc3e75b44aa2a9f37618a49c3bc080a7a
|
||||
RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37
|
||||
RNCPushNotificationIOS: 64218f3c776c03d7408284a819b2abfda1834bc8
|
||||
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
||||
RNDeviceInfo: b899ce37a403a4dea52b7cb85e16e49c04a5b88e
|
||||
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
|
||||
RNGestureHandler: 53f1b8fcdf62b349da820ef4616abeed04cde85c
|
||||
RNGestureHandler: 9e0d0a46b7af6d21fbe3343912502afa8baf755e
|
||||
RNHandoff: d3b0754cca3a6bcd9b25f544f733f7f033ccf5fa
|
||||
RNKeychain: bfe3d12bf4620fe488771c414530bf16e88f3678
|
||||
RNLocalize: b77875884750cb6a58cd6865863fe2ba2729b72b
|
||||
RNLocalize: 4f22418187ecd5ca693231093ff1d912d1b3c9bc
|
||||
RNPermissions: 9fa74223844f437bc309e112994859dc47194829
|
||||
RNPrivacySnapshot: 71919dde3c6a29dd332115409c2aec564afee8f4
|
||||
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
|
||||
RNRate: ef3bcff84f39bb1d1e41c5593d3eea4aab2bd73a
|
||||
RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9
|
||||
RNReactNativeHapticFeedback: 5eee8b6c8f2b1595f4441e884d4c353c18eb7003
|
||||
RNReanimated: e71a1d6bb6427f45ea57c5e23f99030129b6db62
|
||||
RNScreens: ad1c105ac9107cf1a613bf80889485458eb20bd7
|
||||
RNScreens: 01092d6104b707ddd6258dadefc9997a9f523c35
|
||||
RNShare: 0fad69ae2d71de9d1f7b9a43acf876886a6cb99c
|
||||
RNSVG: af3907ac5d4fa26a862b75a16d8f15bc74f2ceda
|
||||
RNVectorIcons: 32462e7c7e58fe457474fc79c4d7de3f0ef08d70
|
||||
|
@ -863,6 +858,6 @@ SPEC CHECKSUMS:
|
|||
TrueSheet: 3ba036b4f20ea78a2953fcf7949e8a60dd63d3f6
|
||||
Yoga: c32e0be1a17f8f1f0e633a3122f7666441f52c82
|
||||
|
||||
PODFILE CHECKSUM: f19eea438501edfe85fb2fa51d40ba1b57540758
|
||||
PODFILE CHECKSUM: f6f6fbdfa280f2c07d8569ee5cb4ca320636ebf4
|
||||
|
||||
COCOAPODS: 1.15.2
|
||||
|
|
|
@ -6,25 +6,25 @@ brew install cocoapods
|
|||
echo "CocoaPods installation complete."
|
||||
|
||||
echo "===== Installing Node.js ====="
|
||||
brew install node@18
|
||||
brew install node@20
|
||||
echo "Node.js installation complete."
|
||||
|
||||
# Configure environment to use node@18
|
||||
echo "Configuring environment to use node@18..."
|
||||
echo 'export PATH="/usr/local/opt/node@18/bin:$PATH"' >> ~/.zshrc
|
||||
export PATH="/usr/local/opt/node@18/bin:$PATH"
|
||||
# Configure environment to use node@20
|
||||
echo "Configuring environment to use node@20..."
|
||||
echo 'export PATH="/usr/local/opt/node@20/bin:$PATH"' >> ~/.zshrc
|
||||
export PATH="/usr/local/opt/node@20/bin:$PATH"
|
||||
|
||||
echo 'export LDFLAGS="-L/usr/local/opt/node@18/lib"' >> ~/.zshrc
|
||||
export LDFLAGS="-L/usr/local/opt/node@18/lib"
|
||||
echo 'export LDFLAGS="-L/usr/local/opt/node@20/lib"' >> ~/.zshrc
|
||||
export LDFLAGS="-L/usr/local/opt/node@20/lib"
|
||||
|
||||
echo 'export CPPFLAGS="-I/usr/local/opt/node@18/include"' >> ~/.zshrc
|
||||
export CPPFLAGS="-I/usr/local/opt/node@18/include"
|
||||
echo 'export CPPFLAGS="-I/usr/local/opt/node@20/include"' >> ~/.zshrc
|
||||
export CPPFLAGS="-I/usr/local/opt/node@20/include"
|
||||
echo "Configuration complete."
|
||||
|
||||
# Install dependencies using yarn
|
||||
echo "===== Running yarn install ====="
|
||||
yarn install | tee yarn-install-log.txt
|
||||
echo "yarn install complete. Full log output in yarn-install-log.txt"
|
||||
# Install dependencies using npm
|
||||
echo "===== Running npm install ====="
|
||||
npm install -y | tee npm-install-log.txt
|
||||
echo "npm install complete. Full log output in npm-install-log.txt"
|
||||
|
||||
echo "===== Running pod install ====="
|
||||
cd ios
|
||||
|
|
|
@ -102,13 +102,13 @@ lane :fetch_appstore_profiles_catalyst do
|
|||
end
|
||||
|
||||
|
||||
desc "Clear derived data"
|
||||
desc "Clear derived data"
|
||||
lane :clear_derived_data_lane do
|
||||
UI.message("Clearing derived data...")
|
||||
clear_derived_data
|
||||
end
|
||||
end
|
||||
|
||||
desc "Increment build number"
|
||||
desc "Increment build number"
|
||||
lane :increment_build_number_lane do
|
||||
UI.message("Incrementing build number to current timestamp...")
|
||||
|
||||
|
@ -134,7 +134,7 @@ end
|
|||
scheme: "BlueWallet",
|
||||
workspace: "BlueWallet.xcworkspace",
|
||||
export_method: "app-store",
|
||||
include_bitcode: true,
|
||||
include_bitcode: false,
|
||||
configuration: "Release",
|
||||
skip_profile_detection: true,
|
||||
include_symbols: true,
|
||||
|
@ -211,37 +211,6 @@ end
|
|||
last_commit = last_git_commit
|
||||
already_built_flag = ".already_built_#{last_commit[:sha]}"
|
||||
File.write(already_built_flag, Time.now.to_s)
|
||||
end
|
||||
|
||||
desc "Build and distribute the Mac Catalyst app for BlueWallet-NoLDK (Universal)"
|
||||
lane :build_and_distribute_catalyst_universal do |options|
|
||||
# Conditionally fetch the right provisioning profiles
|
||||
if options[:type] == "development"
|
||||
fetch_dev_profiles_catalyst
|
||||
else
|
||||
fetch_appstore_profiles_catalyst
|
||||
end
|
||||
|
||||
# Build the Mac Catalyst app (Universal Build for Apple Silicon and Intel)
|
||||
build_app(
|
||||
scheme: "BlueWallet-NoLDK",
|
||||
configuration: "Release",
|
||||
catalyst_platform: "macos",
|
||||
export_method: options[:type] || "app-store", # Default to app-store if not specified
|
||||
xcargs: "ARCHS='arm64 x86_64' VALID_ARCHS='arm64 x86_64'",
|
||||
export_options: {
|
||||
provisioningProfiles: {
|
||||
"io.bluewallet.bluewallet" => "Provisioning Profile Name for Catalyst",
|
||||
# Include other identifiers as necessary
|
||||
},
|
||||
signingStyle: "manual",
|
||||
}
|
||||
)
|
||||
|
||||
# Optionally, upload the build to TestFlight or App Store Connect for app-store type
|
||||
if options[:type] != "development"
|
||||
upload_to_testflight(skip_waiting_for_build_processing: true)
|
||||
end
|
||||
end
|
||||
|
||||
desc "Update 'What's New' section in App Store Connect for all localizations"
|
||||
|
|
20
loc/ar.json
20
loc/ar.json
|
@ -48,34 +48,17 @@
|
|||
"network": "خطأ في الشبكة"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "نشط",
|
||||
"inactive": "غير نشط",
|
||||
"channels": "القنوات",
|
||||
"no_channels": "لا يوجد قنوات",
|
||||
"claim_balance": "المطالبة برصيد {balance}",
|
||||
"close_channel": "اغلق القناة",
|
||||
"new_channel": "قناة جديدة",
|
||||
"force_close_channel": "هل تود فرض اغلاق القناة؟",
|
||||
"expired": "منتهية الصلاحية",
|
||||
"node_alias": "اسم النود",
|
||||
"expiresIn": "تنتهي بعد {time} دقيقة",
|
||||
"payButton": "دفع",
|
||||
"placeholder": "عنوان أو برقية",
|
||||
"open_channel": "فتح قناة",
|
||||
"opening_channnel_for_from": "جارِ فتح قناة للمحفظة {forWalletLabel} بتمويل من {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "هل أنت متأكد أنك تريد فتح هذه القناة؟",
|
||||
"potentialFee": "الرسوم المحتملة: {fee}",
|
||||
"remote_host": "المضيف البعيد",
|
||||
"refill": "إعادة التعبئة",
|
||||
"reconnect_peer": "إعادة الاتصال بالأقران",
|
||||
"refill_create": "للمتابعة، يُرجى إنشاء محفظة بتكوين لإعادة التعبئة باستخدامها.",
|
||||
"refill_external": "إعادة التعبئة باستخدام محفظة خارجية",
|
||||
"refill_lnd_balance": "إعادة تعبئة رصيد محفظة البرق (Lightning)",
|
||||
"sameWalletAsInvoiceError": "لا يمكنك دفع فاتورة بنفس المحفظة المستخدمة لإنشائها.",
|
||||
"title": "إدارة الأموال",
|
||||
"can_send": "يمكن أن ترسل",
|
||||
"can_receive": "يمكن ان تستقبل",
|
||||
"view_logs": "عرض السجلات"
|
||||
"title": "إدارة الأموال"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "معلومة إضافية",
|
||||
|
@ -427,7 +410,6 @@
|
|||
"list_tryagain": "إعادة المحاولة",
|
||||
"no_ln_wallet_error": "قبل دفع البرقية، يجب عليك أولاً إضافة محفظة برق.",
|
||||
"looks_like_bip38": "يبدوا ان هذا مفتاح خاص محمي بكلمة مرور (BIP38).",
|
||||
"reorder_title": "إعادة ترتيب المحافظ",
|
||||
"please_continue_scanning": "الرجاء متابعة الفحص.",
|
||||
"select_no_bitcoin": "لا توجد محافظ بتكوين متاحة حاليًا.",
|
||||
"select_no_bitcoin_exp": "تحتاج إلى محفظة بتكوين لإعادة تعبئة محافظ البرق. يُرجى إنشاء محفظة أو استيراد واحدة.",
|
||||
|
|
|
@ -39,13 +39,7 @@
|
|||
"network": "Памылка Сеткі"
|
||||
},
|
||||
"lnd": {
|
||||
"inactive": "Неактыўны",
|
||||
"channels": "Каналы",
|
||||
"no_channels": "Няма каналаў",
|
||||
"close_channel": "Зачыніць канал",
|
||||
"new_channel": "Новы канал",
|
||||
"expired": "Скончыўся",
|
||||
"open_channel": "Адкрыць Канал"
|
||||
"expired": "Скончыўся"
|
||||
},
|
||||
"plausibledeniability": {
|
||||
"success": "Посьпех"
|
||||
|
|
20
loc/bqi.json
20
loc/bqi.json
|
@ -48,37 +48,19 @@
|
|||
"network": "ختا شبکه"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "فعال",
|
||||
"inactive": "قیر فعال",
|
||||
"channels": "تورگیل",
|
||||
"no_channels": "بؽ تورگه",
|
||||
"claim_balance": "تسویه مۉجۊڌی {balance}",
|
||||
"close_channel": "بستن تورگه",
|
||||
"new_channel": "تورگه نۊ",
|
||||
"errorInvoiceExpired": "سۊرت هساو مونقزی وابیڌه.",
|
||||
"force_close_channel": "بستن اجباری تورگه؟",
|
||||
"expired": "مونقزی وابیڌه",
|
||||
"node_alias": "نوم موستعار گره",
|
||||
"expiresIn": "تا {time} دیقه دی مونقزی ابۊ",
|
||||
"payButton": "پرداخت",
|
||||
"payment": "پرداخت",
|
||||
"placeholder": "سۊرت هساو یا آدرس",
|
||||
"open_channel": "گۊشیڌن تورگه",
|
||||
"funding_amount_placeholder": "هندا بۊدجه، سی نمووه، 0.001",
|
||||
"opening_channnel_for_from": "هونی تورگه نه اگوشه سی کیف پیل {forWalletLabel}، وا تمین پیل زه {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "زه گۊشیڌن ای تورگه اتمینۉ داری؟",
|
||||
"potentialFee": "کارمزد ائتمالی: {fee}",
|
||||
"remote_host": "میزبۉ ره دیر",
|
||||
"refill": "پور کردن",
|
||||
"reconnect_peer": "منپیز دوارته به همتا",
|
||||
"refill_create": "سی ادامه، یه کیف پیل بیت کوین سی پور کردن وورکل کۊنین.",
|
||||
"refill_external": "پور کردن وا کیف پیل خارجی",
|
||||
"refill_lnd_balance": "پور کردن مۉجۊڌی کیف پیل لایتنینگ",
|
||||
"sameWalletAsInvoiceError": "ایسا نترین سۊرت هساوی نه وا همو کیف پیلی که وورکل کردین، پرداخت کۊنین.",
|
||||
"title": "دؽوۉداری دارایی",
|
||||
"can_send": "تره فشنه",
|
||||
"can_receive": "تره گره",
|
||||
"view_logs": "نیشتن تفاقا"
|
||||
"title": "دؽوۉداری دارایی"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "دۉسمندیا بیشتر",
|
||||
|
|
17
loc/ca.json
17
loc/ca.json
|
@ -48,30 +48,16 @@
|
|||
"network": "Error de red"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Actiu",
|
||||
"inactive": "Inactiu",
|
||||
"channels": "Canals",
|
||||
"no_channels": "No hi ha canals",
|
||||
"claim_balance": "Reclamar el saldo {balance}",
|
||||
"close_channel": "Tancar el canal",
|
||||
"new_channel": "Nou canal",
|
||||
"force_close_channel": "Forçar tancar el canal?",
|
||||
"expired": "Caducat",
|
||||
"node_alias": "Àlies del node",
|
||||
"expiresIn": "Caduca en {time} minuts",
|
||||
"payButton": "Pagar",
|
||||
"payment": "Pagament",
|
||||
"placeholder": "Factura o adreça",
|
||||
"open_channel": "Obra el canal",
|
||||
"are_you_sure_open_channel": "Esteu segur que voleu obrir aquest canal?",
|
||||
"refill": "Recarregar",
|
||||
"refill_external": "Recarregar amb un moneder extern",
|
||||
"refill_lnd_balance": "Recarregar el balanç del moneder Lightning",
|
||||
"sameWalletAsInvoiceError": "No pots pagar una factura amb el mateix moneder que l'ha creat.",
|
||||
"title": "gestionar fons",
|
||||
"can_send": "Pots enviar",
|
||||
"can_receive": "Pots rebre",
|
||||
"view_logs": "Veure Registres"
|
||||
"title": "gestionar fons"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Informació addicional",
|
||||
|
@ -299,7 +285,6 @@
|
|||
"list_long_scan": "Escaneja el codi QR",
|
||||
"list_title": "moneders",
|
||||
"list_tryagain": "Torna-ho a provar",
|
||||
"reorder_title": "Reorganitzar moneder",
|
||||
"select_wallet": "Seleccioni moneder",
|
||||
"xpub_copiedToClipboard": "Copiat al porta-retalls."
|
||||
},
|
||||
|
|
|
@ -52,37 +52,19 @@
|
|||
"network": "Chyba sítě"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktivní",
|
||||
"inactive": "Neaktivní",
|
||||
"channels": "Kanály",
|
||||
"no_channels": "Žádné kanály",
|
||||
"claim_balance": "Požadovat zůstatek {balance}",
|
||||
"close_channel": "Zavřít kanál",
|
||||
"new_channel": "Nový kanál",
|
||||
"errorInvoiceExpired": "Platnost faktury vypršela.",
|
||||
"force_close_channel": "Vynutit uzavření kanálu?",
|
||||
"expired": "Expirováno",
|
||||
"node_alias": "Alias uzlu",
|
||||
"expiresIn": "Vyprší za {time} minut",
|
||||
"payButton": "Zaplatit",
|
||||
"payment": "Platba",
|
||||
"placeholder": "Faktura nebo adresa",
|
||||
"open_channel": "Otevřít kanál",
|
||||
"funding_amount_placeholder": "Výše financování, např. 0,001",
|
||||
"opening_channnel_for_from": "Otevření kanálu pro peněženku {forWalletLabel}, financováním z {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Jste si jisti, že chcete tento kanál otevřít?",
|
||||
"potentialFee": "Potenciální poplatek: {fee}",
|
||||
"remote_host": "Vzdálený hostitel",
|
||||
"refill": "Doplnit",
|
||||
"reconnect_peer": "Znovu připojit peera",
|
||||
"refill_create": "Chcete-li pokračovat, vytvořte prosím bitcoinovou peněženku, kterou můžete doplnit.",
|
||||
"refill_external": "Doplnit pomocí externí peněženky",
|
||||
"refill_lnd_balance": "Doplnit zůstatek na Lightning peněžence",
|
||||
"sameWalletAsInvoiceError": "Fakturu nemůžete zaplatit pomocí stejné peněženky, kterou jste použili k jejímu vytvoření.",
|
||||
"title": "Správa prostředků",
|
||||
"can_send": "Může odeslat",
|
||||
"can_receive": "Může přijmout",
|
||||
"view_logs": "Zobrazit logy"
|
||||
"title": "Správa prostředků"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Dodatečné informace",
|
||||
|
@ -187,6 +169,7 @@
|
|||
"fee_1d": "1 d",
|
||||
"fee_3h": "3 h",
|
||||
"fee_custom": "Vlastní",
|
||||
"insert_custom_fee": "Vložte vlastní poplatek",
|
||||
"fee_fast": "Rychle",
|
||||
"fee_medium": "Středně rychle",
|
||||
"fee_replace_minvb": "Celková sazba poplatku (satoshi na vByte), kterou chcete zaplatit, by měla být vyšší než {min} sat/vByte.",
|
||||
|
@ -484,7 +467,8 @@
|
|||
"list_tryagain": "Zkuste to znovu",
|
||||
"no_ln_wallet_error": "Před zaplacením Lightning faktury musíte nejdříve přidat Lightning peněženku.",
|
||||
"looks_like_bip38": "Tohle vypadá jako soukromý klíč chráněný heslem (BIP38).",
|
||||
"reorder_title": "Seřadit peněženky",
|
||||
"manage_title": "Spravovat peněženky",
|
||||
"no_results_found": "Nebyly nalezeny žádné výsledky.",
|
||||
"please_continue_scanning": "Pokračujte ve skenování.",
|
||||
"select_no_bitcoin": "V současné době nejsou k dispozici žádné bitcoinové peněženky.",
|
||||
"select_no_bitcoin_exp": "Bitcoinová peněženka je vyžadována pro doplnění Lightning peněženky. Nějakou prosím vytvořte nebo importujte.",
|
||||
|
@ -495,7 +479,7 @@
|
|||
"add_ln_wallet_first": "Nejdříve musíte přidat Lightning peněženku.",
|
||||
"identity_pubkey": "Identity Pubkey",
|
||||
"xpub_title": "XPUB peněženky",
|
||||
"search_wallets": "Vyhledat peněženky"
|
||||
"manage_wallets_search_placeholder": "Prohledat peněženky, poznámky"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Úložiště",
|
||||
|
|
|
@ -111,7 +111,6 @@
|
|||
"list_create_a_wallet": "Tilføj en tegnebog",
|
||||
"list_empty_txs1": "Dine transaktioner vil blive vist her,",
|
||||
"list_latest_transaction": "seneste transaktion",
|
||||
"reorder_title": "Ændre rækkefølgen af wallets",
|
||||
"select_wallet": "Vælg wallet",
|
||||
"xpub_copiedToClipboard": "Kopieret til udklipsholder."
|
||||
},
|
||||
|
|
|
@ -52,37 +52,19 @@
|
|||
"network": "Netzwerkfehler"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktiv",
|
||||
"inactive": "Inaktiv",
|
||||
"channels": "Kanäle",
|
||||
"no_channels": "Keine Kanäle",
|
||||
"claim_balance": "Saldo von {balance} beanspruchen",
|
||||
"close_channel": "Kanal schließen",
|
||||
"new_channel": "Neuer Kanal",
|
||||
"errorInvoiceExpired": "Rechnung verfallen.",
|
||||
"force_close_channel": "Kanal zwangsweise schließen?",
|
||||
"expired": "Abgelaufen",
|
||||
"node_alias": "Knoten-Alias",
|
||||
"expiresIn": "Läuft in {time} Minuten ab",
|
||||
"payButton": "Zahlen",
|
||||
"payment": "Zahlung",
|
||||
"placeholder": "Rechnung oder Adresse",
|
||||
"open_channel": "Kanal öffnen",
|
||||
"funding_amount_placeholder": "Finanzierungsbetrag, z.B. 0.001",
|
||||
"opening_channnel_for_from": "Kanal für Wallet {forWalletLabel} finanziert durch Wallet {fromWalletLabel} eröffnen.",
|
||||
"are_you_sure_open_channel": "Diesen Kanal definitiv eröffnen?",
|
||||
"potentialFee": "Geschätzte Gebühr: {fee}",
|
||||
"remote_host": "Entfernter Rechner",
|
||||
"refill": "Aufladen",
|
||||
"reconnect_peer": "Erneut zu Peer verbinden",
|
||||
"refill_create": "Bitte eine Bitcoin Wallet erstellen um fortzufahren",
|
||||
"refill_external": "Mit externem Wallet aufladen",
|
||||
"refill_lnd_balance": "Lade deine Lightning Wallet auf",
|
||||
"sameWalletAsInvoiceError": "Du kannst nicht die Rechnung mit der Wallet begleichen, die du für die Erstellung dieser Rechnung verwendet hast.",
|
||||
"title": "Beträge verwalten",
|
||||
"can_send": "Kann senden",
|
||||
"can_receive": "Kann empfangen",
|
||||
"view_logs": "Protokolle anzeigen"
|
||||
"title": "Beträge verwalten"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Weiterführende Informationen",
|
||||
|
@ -475,7 +457,6 @@
|
|||
"list_tryagain": "Nochmal versuchen",
|
||||
"no_ln_wallet_error": "Vor Bezahlung einer Lightning Rechnung zuerst ein Lightning Wallet eröffnen.",
|
||||
"looks_like_bip38": "Passwortgeschützter Privatschlüssel (BIP38) erkannt.",
|
||||
"reorder_title": "Wallets neu ordnen",
|
||||
"please_continue_scanning": "Bitte Scanvorgang fortsetzten",
|
||||
"select_no_bitcoin": "Es sind momentan keine Bitcoin Wallets verfügbar.",
|
||||
"select_no_bitcoin_exp": "Eine Bitcoin Wallet ist Voraussetzung dafür, um eine Lightning Wallet zu befüllen. Bitte erstelle oder importiere eines.",
|
||||
|
@ -485,8 +466,7 @@
|
|||
"warning_do_not_disclose": "Warnung! Nicht veröffentlichen",
|
||||
"add_ln_wallet_first": "Bitte zuerst ein Lightning-Wallet hinzufügen.",
|
||||
"identity_pubkey": "Pubkey-Identität",
|
||||
"xpub_title": "Wallet xPub",
|
||||
"search_wallets": "Wallets suchen"
|
||||
"xpub_title": "Wallet xPub"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Tresor",
|
||||
|
|
15
loc/el.json
15
loc/el.json
|
@ -36,28 +36,16 @@
|
|||
"network": "Σφάλμα δικτύου"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Ενεργό",
|
||||
"inactive": "Ανενεργό",
|
||||
"channels": "Κανάλια",
|
||||
"no_channels": "Δεν υπάρχουν κανάλια",
|
||||
"close_channel": "Κλείσιμο καναλιού",
|
||||
"new_channel": "Νέο κανάλι",
|
||||
"errorInvoiceExpired": "Το τιμολόγιο έληξε",
|
||||
"expired": "Έληξε",
|
||||
"node_alias": "Ψευδώνυμο κόμβου",
|
||||
"expiresIn": "Λήγει σε {time} λεπτά",
|
||||
"payButton": "Πληρωμή",
|
||||
"payment": "Πληρωμή",
|
||||
"placeholder": "Τιμολόγιο ή διεύθυνση",
|
||||
"open_channel": "Άνοιγμα καναλιού",
|
||||
"are_you_sure_open_channel": "Είσαι βέβαιος ότι θέλεις να ανοίξεις αυτό το κανάλι;",
|
||||
"remote_host": "Απομακρυσμένος υπολογιστής",
|
||||
"refill": "Γέμισμα πορτοφολιού",
|
||||
"refill_lnd_balance": "Γέμισε το πορτοφόλι Lightning",
|
||||
"sameWalletAsInvoiceError": "Δεν μπορείς να εξοφλήσεις ένα τιμολόγιο από το ίδιο πορτοφόλι με το οποίο δημιουργήθηκε.",
|
||||
"title": "Διαχείριση χρημάτων",
|
||||
"can_send": "Μπορεί να αποσταλεί",
|
||||
"can_receive": "Μπορεί να ληφθεί"
|
||||
"title": "Διαχείριση χρημάτων"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Επιπρόσθετη πληροφορία",
|
||||
|
@ -314,7 +302,6 @@
|
|||
"list_long_scan": "Σάρωση QR Code",
|
||||
"list_title": "Πορτοφόλια",
|
||||
"list_tryagain": "Προσπαθήστε ξανά",
|
||||
"reorder_title": "Αναδιάταξη των πορτοφολιών",
|
||||
"select_wallet": "Επιλογή πορτοφολιού",
|
||||
"xpub_copiedToClipboard": "Αντιγράφηκε στο πρόχειρο",
|
||||
"xpub_title": "XPUB του πορτοφολιού"
|
||||
|
|
26
loc/en.json
26
loc/en.json
|
@ -52,37 +52,19 @@
|
|||
"network": "Network Error"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Active",
|
||||
"inactive": "Inactive",
|
||||
"channels": "Channels",
|
||||
"no_channels": "No channels",
|
||||
"claim_balance": "Claim balance {balance}",
|
||||
"close_channel": "Close channel",
|
||||
"new_channel": "New channel",
|
||||
"errorInvoiceExpired": "Invoice expired.",
|
||||
"force_close_channel": "Force close channel?",
|
||||
"expired": "Expired",
|
||||
"node_alias": "Node alias",
|
||||
"expiresIn": "Expires in {time} minutes",
|
||||
"payButton": "Pay",
|
||||
"payment": "Payment",
|
||||
"placeholder": "Invoice or address",
|
||||
"open_channel": "Open Channel",
|
||||
"funding_amount_placeholder": "Funding amount, for example, 0.001",
|
||||
"opening_channnel_for_from": "Opening channel for wallet {forWalletLabel}, by funding from {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Are you sure you want to open this channel?",
|
||||
"potentialFee": "Potential fee: {fee}",
|
||||
"remote_host": "Remote host",
|
||||
"refill": "Refill",
|
||||
"reconnect_peer": "Reconnect peer",
|
||||
"refill_create": "In order to proceed, please create a Bitcoin wallet to refill with.",
|
||||
"refill_external": "Refill with External Wallet",
|
||||
"refill_lnd_balance": "Refill Lightning Wallet Balance",
|
||||
"sameWalletAsInvoiceError": "You cannot pay an invoice with the same wallet used to create it.",
|
||||
"title": "Manage Funds",
|
||||
"can_send": "Can Send",
|
||||
"can_receive": "Can Receive",
|
||||
"view_logs": "View Logs"
|
||||
"title": "Manage Funds"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Additional Information",
|
||||
|
@ -187,6 +169,7 @@
|
|||
"fee_1d": "1d",
|
||||
"fee_3h": "3h",
|
||||
"fee_custom": "Custom",
|
||||
"insert_custom_fee": "Insert custom fee",
|
||||
"fee_fast": "Fast",
|
||||
"fee_medium": "Medium",
|
||||
"fee_replace_minvb": "The total fee rate (satoshi per vByte) you want to pay should be higher than {min} sat/vByte.",
|
||||
|
@ -484,7 +467,8 @@
|
|||
"list_tryagain": "Try again",
|
||||
"no_ln_wallet_error": "Before paying a Lightning invoice, you must first add a Lightning wallet.",
|
||||
"looks_like_bip38": "This looks like a password-protected private key (BIP38).",
|
||||
"reorder_title": "Re-order Wallets",
|
||||
"manage_title": "Manage Wallets",
|
||||
"no_results_found": "No results found.",
|
||||
"please_continue_scanning": "Please continue scanning.",
|
||||
"select_no_bitcoin": "There are currently no Bitcoin wallets available.",
|
||||
"select_no_bitcoin_exp": "A Bitcoin wallet is required to refill Lightning wallets. Please create or import one.",
|
||||
|
@ -495,7 +479,7 @@
|
|||
"add_ln_wallet_first": "You must first add a Lightning wallet.",
|
||||
"identity_pubkey": "Identity Pubkey",
|
||||
"xpub_title": "Wallet XPUB",
|
||||
"search_wallets": "Search Wallets"
|
||||
"manage_wallets_search_placeholder": "Search wallets, memos"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Vault",
|
||||
|
|
20
loc/es.json
20
loc/es.json
|
@ -40,33 +40,16 @@
|
|||
"network": "Error de red"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Activo",
|
||||
"inactive": "Inactivo",
|
||||
"channels": "Canales",
|
||||
"no_channels": "Sin canales",
|
||||
"claim_balance": "Reclamar saldo {balance}",
|
||||
"close_channel": "Cerrar canal",
|
||||
"new_channel": "Nuevo canal",
|
||||
"force_close_channel": "¿Forzar el cierre del canal?",
|
||||
"expired": "Expirado",
|
||||
"node_alias": "Alias del nodo",
|
||||
"expiresIn": "Expira en {time} minutos",
|
||||
"payButton": "Pagar",
|
||||
"open_channel": "Abrir canal",
|
||||
"opening_channnel_for_from": "Abrir canal para la cartera {forWalletLabel}, financiado desde {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "¿Estás seguro de que quieres abrir este canal?",
|
||||
"potentialFee": "Comisión estimada: {fee}",
|
||||
"remote_host": "Host remoto",
|
||||
"refill": "Recargar",
|
||||
"reconnect_peer": "Reconectar a los pares",
|
||||
"refill_create": "Para continuar, por favor crea una cartera de Bitcoin con la que recargar.",
|
||||
"refill_external": "Recargar con una cartera externa",
|
||||
"refill_lnd_balance": "Recargar saldo de la cartera Lightning",
|
||||
"sameWalletAsInvoiceError": "No puedes pagar una factura con la misma cartera que usaste para crearla.",
|
||||
"title": "Administrar fondos",
|
||||
"can_send": "Puede enviar",
|
||||
"can_receive": "Puede recibir",
|
||||
"view_logs": "Ver registros"
|
||||
"title": "Administrar fondos"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Información adicional",
|
||||
|
@ -414,7 +397,6 @@
|
|||
"list_tryagain": "Inténtalo otra vez",
|
||||
"no_ln_wallet_error": "Antes de pagar una factura Lightning, primero debe agregar una cartera Lightning.",
|
||||
"looks_like_bip38": "Parece que esto es una llave privada protegida con contraseña (BIP38).",
|
||||
"reorder_title": "Reorganizar carteras",
|
||||
"please_continue_scanning": "Por favor, continúa escaneando.",
|
||||
"select_no_bitcoin": "No hay carteras de Bitcoin disponibles.",
|
||||
"select_no_bitcoin_exp": "Una cartera de Bitcoin es necesaria para recargar una cartera Lightning. Por favor, cree o importe una.",
|
||||
|
|
|
@ -52,37 +52,19 @@
|
|||
"network": "Error de red"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Activo",
|
||||
"inactive": "Inactivo",
|
||||
"channels": "Canales",
|
||||
"no_channels": "Sin canales",
|
||||
"claim_balance": "Reclamar saldo {balance}",
|
||||
"close_channel": "Cerrar canal",
|
||||
"new_channel": "Nuevo canal",
|
||||
"errorInvoiceExpired": "Factura caducada.",
|
||||
"force_close_channel": "¿Forzar el cierre del canal?",
|
||||
"expired": "Expirado",
|
||||
"node_alias": "Alias del nodo",
|
||||
"expiresIn": "Expira en {time} minutos",
|
||||
"payButton": "Pagar",
|
||||
"payment": "Pago",
|
||||
"placeholder": "Factura o dirección",
|
||||
"open_channel": "Abrir canal",
|
||||
"funding_amount_placeholder": "Importe de financiación, por ejemplo, 0,001",
|
||||
"opening_channnel_for_from": "Abrir canal para la billetera {forWalletLabel}, por la financiación de {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "¿Estás seguro de que quieres abrir este canal?",
|
||||
"potentialFee": "Tasas potenciales: {fee}",
|
||||
"remote_host": "Host remoto",
|
||||
"refill": "Recarga",
|
||||
"reconnect_peer": "Reconectar a los pares",
|
||||
"refill_create": "Para continuar, crea una billetera Bitcoin para recargar.",
|
||||
"refill_external": "Recarga con billetera externa",
|
||||
"refill_lnd_balance": "Recargar el saldo de la billetera Lightning",
|
||||
"sameWalletAsInvoiceError": "No puedes pagar una factura con la misma billetera que usaste para crearla.",
|
||||
"title": "Manejar fondos",
|
||||
"can_send": "Puede enviar",
|
||||
"can_receive": "Puede recibir",
|
||||
"view_logs": "Ver registros"
|
||||
"title": "Manejar fondos"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Información adicional",
|
||||
|
@ -484,7 +466,6 @@
|
|||
"list_tryagain": "Intenta otra vez",
|
||||
"no_ln_wallet_error": "Antes de pagar una factura Lightning, primero debes agregar una billetera Lightning.",
|
||||
"looks_like_bip38": "Esto parece una clave privada protegida por contraseña (BIP38).",
|
||||
"reorder_title": "Reorganizar Billeteras",
|
||||
"please_continue_scanning": "Por favor continúa escaneando.",
|
||||
"select_no_bitcoin": "Actualmente no hay billeteras Bitcoin disponibles.",
|
||||
"select_no_bitcoin_exp": "Se requiere una billetera Bitcoin para recargar las billeteras Lightning. Por favor, crea o importa una.",
|
||||
|
@ -494,8 +475,7 @@
|
|||
"warning_do_not_disclose": "¡Advertencia! No revelar.",
|
||||
"add_ln_wallet_first": "Primero debes agregar una billetera Lightning.",
|
||||
"identity_pubkey": "Identidad Pubkey",
|
||||
"xpub_title": "XPUB de la billetera",
|
||||
"search_wallets": "Buscar billeteras"
|
||||
"xpub_title": "XPUB de la billetera"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Bóveda",
|
||||
|
|
23
loc/fa.json
23
loc/fa.json
|
@ -48,35 +48,18 @@
|
|||
"network": "خطای شبکه"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "فعال",
|
||||
"inactive": "غیرفعال",
|
||||
"channels": "کانالها",
|
||||
"no_channels": "بدون کانال",
|
||||
"claim_balance": "تسویهٔ موجودی {balance}",
|
||||
"close_channel": "بستن کانال",
|
||||
"new_channel": "کانال جدید",
|
||||
"force_close_channel": "بستن اجباری کانال؟",
|
||||
"expired": "منقضیشده",
|
||||
"node_alias": "نام مستعار گره",
|
||||
"expiresIn": "تا {time} دقیقهٔ دیگر منقضی میشود",
|
||||
"payButton": "پرداخت",
|
||||
"payment": "پرداخت",
|
||||
"placeholder": "صورتحساب یا آدرس",
|
||||
"open_channel": "بازکردن کانال",
|
||||
"opening_channnel_for_from": "درحال بازکردن کانال برای کیف پول {forWalletLabel}، با تأمین وجه از {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "آیا از بازکردن این کانال اطمینان دارید؟",
|
||||
"potentialFee": "کارمزد احتمالی: {fee}",
|
||||
"remote_host": "میزبان راهدور",
|
||||
"refill": "پرکردن",
|
||||
"reconnect_peer": "اتصال مجدد به همتا",
|
||||
"refill_create": "جهت ادامه، لطفاً یک کیف پول بیتکوین جهت پرکردن ایجاد کنید.",
|
||||
"refill_external": "پرکردن با کیف پول خارجی",
|
||||
"refill_lnd_balance": "پرکردن موجودی کیف پول لایتنینگ",
|
||||
"sameWalletAsInvoiceError": "شما نمیتوانید صورتحسابی را با همان کیف پولی که برای ایجاد آن استفاده کردهاید بپردازید.",
|
||||
"title": "مدیریت دارایی",
|
||||
"can_send": "میتواند ارسال کند",
|
||||
"can_receive": "میتواند دریافت کند",
|
||||
"view_logs": "مشاهدهٔ رخدادها"
|
||||
"title": "مدیریت دارایی"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "اطلاعات بیشتر",
|
||||
|
@ -434,7 +417,6 @@
|
|||
"list_tryagain": "دوباره امتحان کنید",
|
||||
"no_ln_wallet_error": "قبل از پرداخت یک صورتحساب لایتنینگ، ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
|
||||
"looks_like_bip38": "این به کلید خصوصی محافظتشده با گذرواژه (BIP38) شباهت دارد.",
|
||||
"reorder_title": "بازچینی کیف پولها",
|
||||
"please_continue_scanning": "لطفاً به اسکنکردن ادامه دهید.",
|
||||
"select_no_bitcoin": "هیچ کیف پول بیتکوینی درحالحاضر دردسترس نیست.",
|
||||
"select_no_bitcoin_exp": "یک کیف پول بیتکوین برای پرکردن کیف پولهای لایتنینگ نیاز است. لطفاً یکی بسازید یا وارد کنید.",
|
||||
|
@ -444,8 +426,7 @@
|
|||
"warning_do_not_disclose": "هشدار! فاش نکنید.",
|
||||
"add_ln_wallet_first": "ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
|
||||
"identity_pubkey": "هویت/کلید عمومی",
|
||||
"xpub_title": "کلید XPUB کیف پول",
|
||||
"search_wallets": "جستجوی کیفپولها"
|
||||
"xpub_title": "کلید XPUB کیف پول"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "گاوصندوق",
|
||||
|
|
|
@ -51,37 +51,19 @@
|
|||
"network": "Verkkovirhe"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktiivinen",
|
||||
"inactive": "Passiivinen",
|
||||
"channels": "Kanavat",
|
||||
"no_channels": "Ei kanavia",
|
||||
"claim_balance": "Lunasta saldo {balance}",
|
||||
"close_channel": "Sulje kanava",
|
||||
"new_channel": "Uusi kanava",
|
||||
"errorInvoiceExpired": "Lasku vanheni.",
|
||||
"force_close_channel": "Pakota kanavan sulku?",
|
||||
"expired": "Erääntynyt",
|
||||
"node_alias": "Solmun lempinimi",
|
||||
"expiresIn": "Vanhenee {time} minuutissa",
|
||||
"payButton": "Maksa",
|
||||
"payment": "Maksu",
|
||||
"placeholder": "Lasku",
|
||||
"open_channel": "Avaa kanava",
|
||||
"funding_amount_placeholder": "Rahoitettava määrä, esimerkiksi 0.001",
|
||||
"opening_channnel_for_from": "Ota rahoitus {fromWalletLabel}:sta kanavan avaamiseksi lompakkoon {forWalletLabel}",
|
||||
"are_you_sure_open_channel": "Oletko varma että haluat avata tämän kanavan?",
|
||||
"potentialFee": "Mahdollinen siirtokulu: {fee}",
|
||||
"remote_host": "Etäpalvelin",
|
||||
"refill": "Täytä",
|
||||
"reconnect_peer": "Palauta yhteys naapuriin",
|
||||
"refill_create": "Jatka luomalla Bitcoin-lompakko, jolla voit täyttää sen.",
|
||||
"refill_external": "Täytä ulkoisella lompakolla",
|
||||
"refill_lnd_balance": "Täytä Salamalompakon saldoa",
|
||||
"sameWalletAsInvoiceError": "Et voi maksaa laskua samalla lompakolla, jolla se on luotu.",
|
||||
"title": "hallinnoi varoja",
|
||||
"can_send": "Lähetettävissä",
|
||||
"can_receive": "Vastaanotettavissa",
|
||||
"view_logs": "Näytä lokitiedot"
|
||||
"title": "hallinnoi varoja"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Lisäinformaatio",
|
||||
|
@ -460,7 +442,6 @@
|
|||
"list_tryagain": "Yritä uudelleen",
|
||||
"no_ln_wallet_error": "Ennen kuin maksat Salamalaskun, sinun on ensin lisättävä Salamalompakko.",
|
||||
"looks_like_bip38": "Tämä näyttää salasanalla suojatulta yksityiseltä avaimelta (BIP38)",
|
||||
"reorder_title": "Järjestele Lompakot",
|
||||
"please_continue_scanning": "Jatka skannausta",
|
||||
"select_no_bitcoin": "Bitcoin-lompakkoa ei tällä hetkellä ole saatavana.",
|
||||
"select_no_bitcoin_exp": "Bitcoin-lompakkoa vaaditaan Salamalompakkojen täyttämiseksi. Luo tai tuo yksi.",
|
||||
|
@ -470,8 +451,7 @@
|
|||
"warning_do_not_disclose": "Varoitus! Älä paljasta",
|
||||
"add_ln_wallet_first": "Sinun on ensin lisättävä Salamalompakko.",
|
||||
"identity_pubkey": "Tunnus Pubkey",
|
||||
"xpub_title": "lompakon XPUB",
|
||||
"search_wallets": "Etsi lompakoista"
|
||||
"xpub_title": "lompakon XPUB"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Vault",
|
||||
|
|
|
@ -43,36 +43,18 @@
|
|||
"network": "Erreur réseau"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Actif",
|
||||
"inactive": "Inactif",
|
||||
"channels": "Canaux",
|
||||
"no_channels": "Pas de canaux",
|
||||
"claim_balance": "Réclamer le solde {balance}",
|
||||
"close_channel": "Fermer le canal",
|
||||
"new_channel": "Nouveau canal",
|
||||
"errorInvoiceExpired": "Requête expirée.",
|
||||
"force_close_channel": "Forcer la fermeture du canal ?",
|
||||
"expired": "Expiré",
|
||||
"node_alias": "Alias du node",
|
||||
"expiresIn": "Expire dans {time} minutes",
|
||||
"payButton": "Payer",
|
||||
"placeholder": "Facture ou adresse",
|
||||
"open_channel": "Ouverture canal",
|
||||
"funding_amount_placeholder": "Montant financement, par exemple 0,001",
|
||||
"opening_channnel_for_from": "Canal d'ouverture pour le portefeuille {forWalletLabel}, financement depuis {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Etes vous sûre de vouloir ouvrir ce canal?",
|
||||
"potentialFee": "Frais potentiels : {fee}",
|
||||
"remote_host": "Hôte distant",
|
||||
"refill": "Déposer des fonds",
|
||||
"reconnect_peer": "Reconnecter le pair",
|
||||
"refill_create": "Pour continuer, veuillez créer un portefeuille Bitcoin à partir duquel déposer des fonds.",
|
||||
"refill_external": "Déposer des fonds depuis un portefeuille externe",
|
||||
"refill_lnd_balance": "Déposer des fonds dans votre portfeuille Lightning",
|
||||
"sameWalletAsInvoiceError": "Vous ne pouvez pas payer une facture avec le même portefeuille utilisé pour la créer.",
|
||||
"title": "gérer vos fonds",
|
||||
"can_send": "Peut envoyer",
|
||||
"can_receive": "Peut recevoir",
|
||||
"view_logs": "Voir les logs"
|
||||
"title": "gérer vos fonds"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Informations complémentaires",
|
||||
|
@ -438,7 +420,6 @@
|
|||
"list_tryagain": "Réessayer",
|
||||
"no_ln_wallet_error": "Avant de payer une facture Ligthning, vous devez créer un portefeuille Ligthning.",
|
||||
"looks_like_bip38": "Ceci ressemble a une clé privée protégée par un mot de passe (BIP38)",
|
||||
"reorder_title": "Trier vos portefeuilles",
|
||||
"please_continue_scanning": "Merci de continuer à scaner",
|
||||
"select_no_bitcoin": "Il n'y a aucun portefeuille Bitcoin disponible pour le moment.",
|
||||
"select_no_bitcoin_exp": "Un portefeuille Bitcoin est nécessaire pour approvisionner les portefeuilles Lightning. Veuillez en créer ou en importer un.",
|
||||
|
|
24
loc/he.json
24
loc/he.json
|
@ -52,37 +52,19 @@
|
|||
"network": "שגיאת רשת"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "פעיל",
|
||||
"inactive": "לא פעיל",
|
||||
"channels": "ערוצים",
|
||||
"no_channels": "אין ערוצים",
|
||||
"claim_balance": "מאזן דרישה {balance}",
|
||||
"close_channel": "סגירת ערוץ",
|
||||
"new_channel": "ערוץ חדש",
|
||||
"errorInvoiceExpired": "חשבונית פגה",
|
||||
"force_close_channel": "כפיית סגירת ערוץ?",
|
||||
"expired": "פג",
|
||||
"node_alias": "כינוי צומת",
|
||||
"expiresIn": "פג בעוד {time} דקות",
|
||||
"payButton": "תשלום",
|
||||
"payment": "תשלום",
|
||||
"placeholder": "חשבונית או כתובת",
|
||||
"open_channel": "פתיחת ערוץ",
|
||||
"funding_amount_placeholder": "סכום מימון, לדוגמה, 0.001",
|
||||
"opening_channnel_for_from": "פתיחת ערוץ עבור ארנק {forWalletLabel}, בעמצאות מימון מארנק {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "האם אתם בטוחים שברצונכם לפתוח ערוץ זה?",
|
||||
"potentialFee": "עמלה פוטנציאלית: {fee}",
|
||||
"remote_host": "מארח מרוחק",
|
||||
"refill": "טעינה",
|
||||
"reconnect_peer": "התחברות מחדש לעמית",
|
||||
"refill_create": "כדי להמשיך, אנא צרו ארנק ביטקוין כדי לטעון באמצעותו.",
|
||||
"refill_external": "טעינה בעזרת ארנק חיצוני",
|
||||
"refill_lnd_balance": "מלאו את יתרת ארנק הברק",
|
||||
"sameWalletAsInvoiceError": "לא ניתן לשלם חשבונית עם אותו הארנק שיצר אותה.",
|
||||
"title": "ניהול כספים",
|
||||
"can_send": "ניתן לשלוח",
|
||||
"can_receive": "ניתן לקבל",
|
||||
"view_logs": "צפייה ביומנים"
|
||||
"title": "ניהול כספים"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "מידע נוסף",
|
||||
|
@ -473,7 +455,6 @@
|
|||
"list_tryagain": "נסו שוב",
|
||||
"no_ln_wallet_error": "לפני תשלום חשבונית ברק, עלייך להוסיף ארנק ברק.",
|
||||
"looks_like_bip38": "זה נראה כמו מפתח פרטי מוגן בסיסמה (BIP38)",
|
||||
"reorder_title": "ארגון ארנקים מחדש ",
|
||||
"please_continue_scanning": "אנא המשיכו בסריקה.",
|
||||
"select_no_bitcoin": "אין ארנקי ביטקוין זמינים.",
|
||||
"select_no_bitcoin_exp": "דרוש ארנק ביטקוין בכדי לטעון את ארנקי הברק. צרו או יבאו אחד.",
|
||||
|
@ -483,8 +464,7 @@
|
|||
"warning_do_not_disclose": "אזהרה! אין לחשוף.",
|
||||
"add_ln_wallet_first": "עלייך להוסיף ארנק ברק קודם.",
|
||||
"identity_pubkey": "מפתח זהות ציבורי",
|
||||
"xpub_title": "מפתח צפייה של הארנק",
|
||||
"search_wallets": "חיפוש ארנקים"
|
||||
"xpub_title": "מפתח צפייה של הארנק"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "כספת",
|
||||
|
|
|
@ -123,7 +123,6 @@
|
|||
"list_empty_txs1": "Vaše transakcije će se pojaviti ovdje",
|
||||
"list_latest_transaction": "posljednja transakcija",
|
||||
"list_title": "Voleti",
|
||||
"reorder_title": "Uredi volete",
|
||||
"select_wallet": "Odaberi volet",
|
||||
"xpub_copiedToClipboard": "Kopirano u međuspremnik.",
|
||||
"xpub_title": "volet XPUB"
|
||||
|
|
|
@ -41,36 +41,18 @@
|
|||
"network": "Hálózati hiba"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktív",
|
||||
"inactive": "Inaktív",
|
||||
"channels": "Csatornák",
|
||||
"no_channels": "Nincsenek csatornák",
|
||||
"claim_balance": "Egyenleg lefoglalása {balance}",
|
||||
"close_channel": "Csatorna zárása",
|
||||
"new_channel": "Új csatorna",
|
||||
"errorInvoiceExpired": "A számla lejárt.",
|
||||
"force_close_channel": "Csatorna erőltetett zárása?",
|
||||
"expired": "Lejárt",
|
||||
"node_alias": "Node aliasz",
|
||||
"expiresIn": "{time} percen belül elévül",
|
||||
"payButton": "Fizess",
|
||||
"placeholder": "Számla",
|
||||
"open_channel": "Csatorna nyitása",
|
||||
"funding_amount_placeholder": "Feltöltési mennyiség, például 0.001",
|
||||
"opening_channnel_for_from": "Csatornanyitás a {forWalletLabel} tárca számára, {fromWalletLabel} által finanszírozva.",
|
||||
"are_you_sure_open_channel": "Biztosan meg akarja nyitni ezt a csatornát?",
|
||||
"potentialFee": "Várható díj: {fee}",
|
||||
"remote_host": "Távoli host",
|
||||
"refill": "Feltölt",
|
||||
"reconnect_peer": "Társ újracsatlakoztatása",
|
||||
"refill_create": "A folytatáshoz, hozz létre egy Bitcoin tárcát amire feltölthetsz.",
|
||||
"refill_external": "Feltöltés külső tárcáról",
|
||||
"refill_lnd_balance": "Lightning egyenleg feltöltése",
|
||||
"sameWalletAsInvoiceError": "Számlát nem fizethesz be ugyanarról a tárcáról, mint amellyel létrehoztad.",
|
||||
"title": "kezelés",
|
||||
"can_send": "Tud küldeni",
|
||||
"can_receive": "Tud fogadni",
|
||||
"view_logs": "Eseménynapló Megtekintése"
|
||||
"title": "kezelés"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "További információk",
|
||||
|
@ -430,7 +412,6 @@
|
|||
"list_tryagain": "Próbáld újra",
|
||||
"no_ln_wallet_error": "Mielőtt tudnál fizetni a villámhálózaton, először egy Lightning tárcát kell létrehoznod vagy betöltened.",
|
||||
"looks_like_bip38": "Ez egy jelszó védett privát kulcsnak (BIP38) tűnik",
|
||||
"reorder_title": "Tárcák rendezése",
|
||||
"please_continue_scanning": "Kérem szkenneljen folyamatosan.",
|
||||
"select_no_bitcoin": "Jelenleg nincs elérhető Bitcoin tárca.",
|
||||
"select_no_bitcoin_exp": "A Lightning tárca feltöltéséhez Bitcoin tárcára van szükség. Készíts vagy importálj egy Bitcoin tárcát.",
|
||||
|
|
|
@ -48,32 +48,16 @@
|
|||
"network": "Kesalahan Jaringan"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktif",
|
||||
"inactive": "Tidak aktif",
|
||||
"channels": "Kanal",
|
||||
"no_channels": "Tidak ada kanal",
|
||||
"claim_balance": "Klaim saldo {saldo}",
|
||||
"close_channel": "Tutup kanal",
|
||||
"new_channel": "Kanal baru",
|
||||
"force_close_channel": "Tutup paksa kanal?",
|
||||
"expired": "Kadaluarsa",
|
||||
"node_alias": "Alias node",
|
||||
"expiresIn": "Kadaluwarsa dalam {waktu} menit",
|
||||
"payButton": "Bayar",
|
||||
"open_channel": "Buka kanal",
|
||||
"are_you_sure_open_channel": "Apakah Anda yakin ingin membuka kanal ini?",
|
||||
"potentialFee": "Potensi biaya: {fee}",
|
||||
"remote_host": "Host jarak jauh",
|
||||
"refill": "Isi ulang",
|
||||
"reconnect_peer": "Sambungkan rekan kembali",
|
||||
"refill_create": "Untuk melanjutkan, buat dompet Bitcoin untuk diisi ulang.",
|
||||
"refill_external": "Isi ulang dengan Dompet Eksternal",
|
||||
"refill_lnd_balance": "Isi ulang saldo Lightning",
|
||||
"sameWalletAsInvoiceError": "Kamu tidak bisa membayar invoice dengan dompet yang sama yang dipakai untuk membuat invoice.",
|
||||
"title": "Atur Dana",
|
||||
"can_send": "Bisa Mengirim",
|
||||
"can_receive": "Bisa Menerima",
|
||||
"view_logs": "Lihat Catatan"
|
||||
"title": "Atur Dana"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Informasi Tambahan",
|
||||
|
@ -355,7 +339,6 @@
|
|||
"list_long_scan": "Pindai QR Code",
|
||||
"list_title": "Dompet",
|
||||
"list_tryagain": "Coba lagi",
|
||||
"reorder_title": "Susun Dompet",
|
||||
"please_continue_scanning": "Harap lanjutkan memindai.",
|
||||
"select_wallet": "Pilih dompet",
|
||||
"xpub_copiedToClipboard": "Disalin ke clipboard.",
|
||||
|
|
20
loc/it.json
20
loc/it.json
|
@ -48,34 +48,17 @@
|
|||
"network": "Errore di rete"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Attivo",
|
||||
"inactive": "Inattivo",
|
||||
"channels": "Canali",
|
||||
"no_channels": "Nessun canale",
|
||||
"claim_balance": "Richiedi il saldo {balance}",
|
||||
"close_channel": "Chiudi il canale",
|
||||
"new_channel": "Nuovo canale",
|
||||
"force_close_channel": "Forza la chiusura del canale?",
|
||||
"expired": "Scaduto",
|
||||
"node_alias": "Alias del nodo",
|
||||
"expiresIn": "Scade tra {time} minuti",
|
||||
"payButton": "Paga",
|
||||
"placeholder": "Fattura o indirizzo",
|
||||
"open_channel": "Apri canale",
|
||||
"opening_channnel_for_from": "Apri canale per il wallet {forWalletLabel}, caricando fondi da {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Sei sicuro di voler aprie questo canale?",
|
||||
"potentialFee": "Commissioni potenziali: {fee}",
|
||||
"remote_host": "Host remoto",
|
||||
"refill": "Ricarica",
|
||||
"reconnect_peer": "Riconnetti peer",
|
||||
"refill_create": "Per continuare, crea un portafoglio Bitcoin dal quale ricaricare.",
|
||||
"refill_external": "Ricarica con un wallet esterno",
|
||||
"refill_lnd_balance": "Ricarica saldo del portafoglio Lightning",
|
||||
"sameWalletAsInvoiceError": "Non puoi pagare una fattura con lo stesso portafoglio utilizzato per crearla.",
|
||||
"title": "Gestisci fondi",
|
||||
"can_send": "Puoi inviare",
|
||||
"can_receive": "Puoi ricevere",
|
||||
"view_logs": "Visualizza i log"
|
||||
"title": "Gestisci fondi"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Ulteriori Informazioni",
|
||||
|
@ -424,7 +407,6 @@
|
|||
"list_tryagain": "Riprova",
|
||||
"no_ln_wallet_error": "Prima di pagare una fattura Lightning, devi aggiungere un portafoglio Lightning.",
|
||||
"looks_like_bip38": "Questa sembra essere una chiave privata protetta da password (BIP38).",
|
||||
"reorder_title": "Riordina Portafogli",
|
||||
"please_continue_scanning": "Per favore continua ad effettuare la scansione.",
|
||||
"select_no_bitcoin": "Non è disponibile alcun portafoglio Bitcoin.",
|
||||
"select_no_bitcoin_exp": "È necessario un portafoglio Bitcoin per ricaricare i portafogli Lightning. Per favore creane o importane uno.",
|
||||
|
|
|
@ -52,37 +52,19 @@
|
|||
"network": "ネットワークエラー"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "アクティブ",
|
||||
"inactive": "非アクティブ",
|
||||
"channels": "チャネル",
|
||||
"no_channels": "チャネルなし",
|
||||
"claim_balance": "残高{balance}を請求",
|
||||
"close_channel": "チャネルを閉じる",
|
||||
"new_channel": "新規チャネル",
|
||||
"errorInvoiceExpired": "インボイス失効",
|
||||
"force_close_channel": "チャネルを強制的に閉じますか?",
|
||||
"expired": "失効",
|
||||
"node_alias": "ノードエイリアス",
|
||||
"expiresIn": "失効まで{time}分",
|
||||
"payButton": "支払う",
|
||||
"payment": "支払い",
|
||||
"placeholder": "インボイスまたはアドレス",
|
||||
"open_channel": "チャネルを開く",
|
||||
"funding_amount_placeholder": "デポジット額(例:0.001)",
|
||||
"opening_channnel_for_from": "{fromWalletLabel} の資金を使い、ウォレット {forWalletLabel} のチャネルを開きます",
|
||||
"are_you_sure_open_channel": "本当にこのチャネルを開きますか?",
|
||||
"potentialFee": "手数料推計: {fee}",
|
||||
"remote_host": "リモートホスト",
|
||||
"refill": "送金",
|
||||
"reconnect_peer": "ピアに再接続",
|
||||
"refill_create": "先に進むためには、ビットコインウォレットを作成して補充してください。",
|
||||
"refill_external": "外部ウォレットで補充",
|
||||
"refill_lnd_balance": "Lightning ウォレットへ送金",
|
||||
"sameWalletAsInvoiceError": "インボイスを作成したのと同じウォレットで支払うことはできません。",
|
||||
"title": "資金の管理",
|
||||
"can_send": "送金可能",
|
||||
"can_receive": "受取可能",
|
||||
"view_logs": "ログを見る"
|
||||
"title": "資金の管理"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "追加情報",
|
||||
|
@ -187,6 +169,7 @@
|
|||
"fee_1d": "1日",
|
||||
"fee_3h": "3時間",
|
||||
"fee_custom": "カスタム",
|
||||
"insert_custom_fee": "カスタム手数料を入力",
|
||||
"fee_fast": "高速",
|
||||
"fee_medium": "中速",
|
||||
"fee_replace_minvb": "希望する手数料レート(vByteあたりsatoshi)は{min} sat/vByteより高くするのが良いです。",
|
||||
|
@ -484,7 +467,8 @@
|
|||
"list_tryagain": "再度試す",
|
||||
"no_ln_wallet_error": "ライトニングインボイスの支払いを行う前に、ライトニングウォレットを追加する必要があります。",
|
||||
"looks_like_bip38": "パスワード保護された秘密鍵(BIP38)のようです。",
|
||||
"reorder_title": "ウォレットの並び替え",
|
||||
"manage_title": "ウォレット管理",
|
||||
"no_results_found": "結果は見つかりませんでした。",
|
||||
"please_continue_scanning": "スキャンを続けてください。",
|
||||
"select_no_bitcoin": "現在利用可能なビットコインウォレットがありません。",
|
||||
"select_no_bitcoin_exp": "ライトニングウォレットのリフィルにはビットコインウォレットが必要です。作成するか、インポートしてください。",
|
||||
|
@ -495,7 +479,7 @@
|
|||
"add_ln_wallet_first": "先にライトニングウォレットを追加する必要があります。",
|
||||
"identity_pubkey": "識別用公開鍵",
|
||||
"xpub_title": "ウォレット XPUB",
|
||||
"search_wallets": "ウォレットを検索"
|
||||
"manage_wallets_search_placeholder": "ウォレット・メモを検索"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "金庫",
|
||||
|
|
|
@ -24,8 +24,7 @@
|
|||
"lnd": {
|
||||
"expiresIn": "Мерзімі {time} минутта аяқталады",
|
||||
"payButton": "Төлем жасау",
|
||||
"refill": "Қайта толтыру",
|
||||
"can_send": "Жібере алу"
|
||||
"refill": "Қайта толтыру"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"sats": "сат."
|
||||
|
|
|
@ -40,31 +40,14 @@
|
|||
"network": "네크워크 오류"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "활성",
|
||||
"inactive": "비활성",
|
||||
"channels": "챈널",
|
||||
"no_channels": "챈널 없음",
|
||||
"claim_balance": "현 잔고{balance} 찾아가기",
|
||||
"close_channel": "챈널 닫기",
|
||||
"new_channel": "새 챈널",
|
||||
"force_close_channel": "챈널을 강제로 닫을까요?",
|
||||
"expired": "만료되었습니다",
|
||||
"node_alias": "노드 별칭",
|
||||
"expiresIn": "{time}분 뒤 무효화됩니다",
|
||||
"payButton": "지불하기",
|
||||
"open_channel": "챈널 열기",
|
||||
"opening_channnel_for_from": "{fromWalletLabel} 지갑의 기금으로 {forWalletLabel} 지갑에 챈널을 개설중",
|
||||
"are_you_sure_open_channel": "정말 이 챈널을 개설하기 원하십니까?",
|
||||
"remote_host": "원격 호스트",
|
||||
"refill": "재충전",
|
||||
"reconnect_peer": "피어 재연결",
|
||||
"refill_create": "진행을 위해서 재충전할 수있는 비트코인 지갑을 만들어주세요.",
|
||||
"refill_external": "외부 지갑으로 재충전합니다.",
|
||||
"refill_lnd_balance": "라이트닝 월렛잔액 재충전하기",
|
||||
"title": "자금 관리하기",
|
||||
"can_send": "보내기 가능",
|
||||
"can_receive": "받기가능",
|
||||
"view_logs": "내역 보기"
|
||||
"title": "자금 관리하기"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "추가적인 정보",
|
||||
|
@ -405,7 +388,6 @@
|
|||
"list_tryagain": "다시 시도하기",
|
||||
"no_ln_wallet_error": "라이트닝 청구서를 지불하기 전 먼저 라이트닝 지갑을 추가해야 합니다.",
|
||||
"looks_like_bip38": "이것은 패스워드 보호된 비밀키(BIP38)로 보입니다.",
|
||||
"reorder_title": "지갑 재정렬",
|
||||
"please_continue_scanning": "계속 스캔하세요.",
|
||||
"select_no_bitcoin": "현재 사용 가능한 비트코인 월렛이 없습니다.",
|
||||
"select_no_bitcoin_exp": "라이트닝 지갑을 재충전하시려면 비트코인 지갑이 필요합니다. 새로 만들기 또는 들여오기를 하시기바랍니다.",
|
||||
|
|
14
loc/lrc.json
14
loc/lrc.json
|
@ -26,27 +26,15 @@
|
|||
"network": "ختا شبکه"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "فعال",
|
||||
"inactive": "قیر فعال",
|
||||
"channels": "تورگیا",
|
||||
"no_channels": "بؽ تورگه",
|
||||
"claim_balance": "تسویه مۉجۊدی {balance}",
|
||||
"close_channel": "بستن تورگه",
|
||||
"new_channel": "تورگه نۊ",
|
||||
"errorInvoiceExpired": "سۊرت هساو مونقزی بیه.",
|
||||
"force_close_channel": "بستن اجباری تورگه؟",
|
||||
"expired": "مونقزی بیه",
|
||||
"node_alias": "نوم موستعار گره",
|
||||
"payButton": "پرداخت",
|
||||
"payment": "پرداخت",
|
||||
"placeholder": "سۊرت هساو یا آدرس",
|
||||
"open_channel": "واز کردن تورگه",
|
||||
"potentialFee": "کارمزد ائتمالی: {fee}",
|
||||
"refill": "پور کردن",
|
||||
"refill_external": "پور کردن وا کیف پیلٛ خارجی",
|
||||
"refill_lnd_balance": "پور کردن مۉجۊدی کیف پیلٛ لایتنینگ",
|
||||
"can_send": "مؽتونه کلٛ بکه",
|
||||
"can_receive": "مؽتونه بگره"
|
||||
"refill_lnd_balance": "پور کردن مۉجۊدی کیف پیلٛ لایتنینگ"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "دونسمنیا بؽشتر",
|
||||
|
|
20
loc/ms.json
20
loc/ms.json
|
@ -37,31 +37,14 @@
|
|||
"network": "Ralat Rangkaian"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Giat",
|
||||
"inactive": "Tidak Giat",
|
||||
"channels": "Saluran",
|
||||
"no_channels": "Tiada saluran",
|
||||
"claim_balance": "Tebus baki {balance}",
|
||||
"close_channel": "Tutup saluran",
|
||||
"new_channel": "Saluran baru",
|
||||
"force_close_channel": "Tutup saluran secara paksa?",
|
||||
"expired": "Tamat tempoh",
|
||||
"node_alias": "Surihan nod",
|
||||
"expiresIn": "Tamat tempoh dalam {time} minit",
|
||||
"payButton": "Bayar",
|
||||
"open_channel": "Saluran Terbuka",
|
||||
"opening_channnel_for_from": "Membuka saluran untuk dompet {forWalletLabel}, atas pembiayaan dari {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Adakah anda pasti anda mahu membuka saluran ini?",
|
||||
"remote_host": "Host Jauh",
|
||||
"refill": "Isi semula",
|
||||
"reconnect_peer": "Sambung semula dengan rakan",
|
||||
"refill_create": "Untuk meneruskan, sila buat dompet Bitcoin untuk diisi semula.",
|
||||
"refill_external": "Isi Semula dengan Dompet Luaran",
|
||||
"refill_lnd_balance": "Isi Semula Baki Dompet Lightning",
|
||||
"title": "Uruskan Wang",
|
||||
"can_send": "Boleh Menghantar",
|
||||
"can_receive": "Boleh Menerima",
|
||||
"view_logs": "Lihat Log"
|
||||
"title": "Uruskan Wang"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Maklumat Tambahan",
|
||||
|
@ -374,7 +357,6 @@
|
|||
"list_tryagain": "Cuba lagi",
|
||||
"no_ln_wallet_error": "Sebelum membayar invois Lightning, anda perlu menambah dompet Lightning terlebih dahulu.",
|
||||
"looks_like_bip38": "Ini nampak seperti kunci persendirian yang dilindungi kata laluan (BIP38)",
|
||||
"reorder_title": "Ubah Aturan Dompet",
|
||||
"please_continue_scanning": "Sila teruskan mengimbas.",
|
||||
"select_no_bitcoin": "Tiada dompet Bitcoin ketika ini.",
|
||||
"select_no_bitcoin_exp": "Dompet Bitcoin diperlukan untuk mengisi dompet Lightning. Sila cipta atau pindah masuk sebuah dompet.",
|
||||
|
|
|
@ -40,32 +40,15 @@
|
|||
"network": "Nettverksfeil"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktiv",
|
||||
"inactive": "Inaktiv",
|
||||
"channels": "Kanaler",
|
||||
"no_channels": "Ingen kanaler",
|
||||
"claim_balance": "Få saldo {balance}",
|
||||
"close_channel": "Lukk kanal",
|
||||
"new_channel": "Ny kanal",
|
||||
"force_close_channel": "Tvinge kanal til å lukke?",
|
||||
"expired": "Utløpt",
|
||||
"node_alias": "Node alias",
|
||||
"expiresIn": "Utløper om {time} minutter",
|
||||
"payButton": "Betal",
|
||||
"open_channel": "Åpne kanal",
|
||||
"opening_channnel_for_from": "Åpner kanal for lommebok {forWalletLabel}, med finansiering fra {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Er du sikker på at du vil åpne denne kanalen?",
|
||||
"remote_host": "Remote host",
|
||||
"refill": "Fyll på",
|
||||
"reconnect_peer": "Koble til peer på nytt",
|
||||
"refill_create": "For å fortsette må du lage en Bitcoin-lommebok du kan fylle på med.",
|
||||
"refill_external": "Fyll på med Ekstern Lommebok",
|
||||
"refill_lnd_balance": "Fyll på Lightning Wallet-balanse",
|
||||
"sameWalletAsInvoiceError": "Du kan ikke betale en faktura med samme lommebok som brukes til å lage den.",
|
||||
"title": "Administrer Midler",
|
||||
"can_send": "Kan Sende",
|
||||
"can_receive": "Kan Motta",
|
||||
"view_logs": "Vis Logg"
|
||||
"title": "Administrer Midler"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Tilleggsinformasjon",
|
||||
|
@ -408,7 +391,6 @@
|
|||
"list_tryagain": "Prøv igjen",
|
||||
"no_ln_wallet_error": "Før du betaler en Lightning-faktura, må du først legge til en Lightning-lommebok.",
|
||||
"looks_like_bip38": "Dette ser ut som en passordbeskyttet privat nøkkel (BIP38).",
|
||||
"reorder_title": "Omorganisere Lommebøker",
|
||||
"please_continue_scanning": "Vennligst fortsett å skanne.",
|
||||
"select_no_bitcoin": "Det er for øyeblikket ingen tilgjengelige Bitcoin-lommebøker.",
|
||||
"select_no_bitcoin_exp": "En Bitcoin-lommebok kreves for å fylle Lightning-lommebøker. Opprett eller importer en.",
|
||||
|
|
20
loc/ne.json
20
loc/ne.json
|
@ -47,31 +47,14 @@
|
|||
"network": "नेटवर्क एर्रोर"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "सक्रिय",
|
||||
"inactive": "निष्क्रिय",
|
||||
"channels": "च्यानलहरू",
|
||||
"no_channels": "च्यानलहरू छैनन्",
|
||||
"claim_balance": "दावी ब्यालेन्स {balance}",
|
||||
"close_channel": "च्यानलहरू बन्द गर्नुहोस्",
|
||||
"new_channel": "नयाँ च्यानल",
|
||||
"force_close_channel": "जबरजस्ती च्यानल बन्द गर्ने हो?",
|
||||
"expired": "म्याद सकियो",
|
||||
"node_alias": "नोड को उपनाम",
|
||||
"expiresIn": "{time} मिनेटमा म्याद सकिन्छ",
|
||||
"payButton": "तिर्नुहोस्",
|
||||
"open_channel": "च्यानल खोल्नुहोस्",
|
||||
"opening_channnel_for_from": "वालेट {forWalletLabel} को लागि वालेट {fromWalletLabel} को कोषद्वारा बाट च्यानल खोल्दै",
|
||||
"are_you_sure_open_channel": "के तपाइँ यो च्यानल खोल्न निश्चित हुनुहुन्छ?",
|
||||
"remote_host": "रिमोट होस्ट",
|
||||
"refill": "फेरि भर्नु",
|
||||
"reconnect_peer": "पियर पुन: जडान गर्नुहोस्",
|
||||
"refill_create": "अगाडि बढ्नको लागि, कृपया बिटकोइन वालेट सिर्जना गर्नुहोस्।",
|
||||
"refill_external": "बाहिरको वालेटको साथ रिफिल गर्नुहोस्",
|
||||
"refill_lnd_balance": "लाइटनिङ वालेट ब्यालेन्स रिफिल गर्नुहोस्",
|
||||
"title": "कोष प्रबन्ध गर्नुहोस्",
|
||||
"can_send": "पठाउन सकिन्छ",
|
||||
"can_receive": "प्राप्त गर्न सक्छ",
|
||||
"view_logs": "लगहरू हेर्नुहोस्"
|
||||
"title": "कोष प्रबन्ध गर्नुहोस्"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "थप जानकारी",
|
||||
|
@ -322,7 +305,6 @@
|
|||
"list_tryagain": "पुन: प्रयास गर्नुहोस्",
|
||||
"no_ln_wallet_error": "लाइटनिङ इनभ्वाइस भुक्तान गर्नु अघि, तपाईंले पहिले लाइटनिङ वालेट थप्नुपर्छ।",
|
||||
"looks_like_bip38": "यो पासवर्ड सुरक्षित निजी कुञ्जी जस्तो देखिन्छ (BIP38)।",
|
||||
"reorder_title": "वालेटहरू पुन: अर्डर गर्नुहोस्",
|
||||
"please_continue_scanning": "कृपया स्क्यान जारी राख्नुहोस्।",
|
||||
"select_no_bitcoin": "हाल कुनै बिटकोइन वालेटहरू उपलब्ध छैनन्।",
|
||||
"select_no_bitcoin_exp": "लाइटनिङ वालेटहरू पुन: भर्नको लागि बिटकोइन वालेट आवश्यक छ। कृपया बिटकोइन वालेट सिर्जना वा आयात गर्नुहोस्।",
|
||||
|
|
|
@ -48,37 +48,19 @@
|
|||
"network": "Netwerkfout"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Actief",
|
||||
"inactive": "Inactief",
|
||||
"channels": "Kanalen",
|
||||
"no_channels": "Geen kanalen",
|
||||
"claim_balance": "Saldo claimen {balance}",
|
||||
"close_channel": "Sluit kanaal",
|
||||
"new_channel": "Nieuw kanaal",
|
||||
"errorInvoiceExpired": "Factuur verlopen.",
|
||||
"force_close_channel": "Het sluiten van een kanaal forceren?",
|
||||
"expired": "Verlopen",
|
||||
"node_alias": "Node alias",
|
||||
"expiresIn": "Verloopt in {time} minuten",
|
||||
"payButton": "Betalen",
|
||||
"payment": "Betaling",
|
||||
"placeholder": "Factuur of adres",
|
||||
"open_channel": "Open kanaal",
|
||||
"funding_amount_placeholder": "Stortingsbedrag, bijvoorbeeld 0.001",
|
||||
"opening_channnel_for_from": "Open kanaal voor wallet {forWalletLabel}, door financiering vanuit {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Weet je het zeker dat je dit kanaal wilt openen?",
|
||||
"potentialFee": "Mogelijke fee: {fee}",
|
||||
"remote_host": "Externe host",
|
||||
"refill": "Bijvullen",
|
||||
"reconnect_peer": "Verbind opnieuw",
|
||||
"refill_create": "Om verder te gaan, moet u een Bitcoin-wallet maken om mee te vullen.",
|
||||
"refill_external": "Aanvullen met externe wallet",
|
||||
"refill_lnd_balance": "Vul Lightning-walletsaldo bij",
|
||||
"sameWalletAsInvoiceError": "U kunt geen factuur betalen met dezelfde wallet die is gebruikt om de factuur te maken.",
|
||||
"title": "tegoeden beheren",
|
||||
"can_send": "Kan verzenden",
|
||||
"can_receive": "Kan verzenden",
|
||||
"view_logs": "Bekijk logs"
|
||||
"title": "tegoeden beheren"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Extra informatie",
|
||||
|
@ -412,7 +394,6 @@
|
|||
"list_tryagain": "Probeer opnieuw",
|
||||
"no_ln_wallet_error": "Voordat u een Lightning-factuur betaalt, moet u eerst een Lightning-wallet toevoegen.",
|
||||
"looks_like_bip38": "Dit lijkt op een met een wachtwoord beveiligde private key (BIP38)",
|
||||
"reorder_title": "Wallets opnieuw ordenen",
|
||||
"please_continue_scanning": "Ga door met scannen",
|
||||
"select_no_bitcoin": "Er is momenteel geen Bitcoin-wallet beschikbaar",
|
||||
"select_no_bitcoin_exp": "Een Bitcoin-wallet is vereist om Lightning-wallets opnieuw te vullen. Maak of importeer er een.",
|
||||
|
|
|
@ -10,11 +10,7 @@
|
|||
"success": "You correct"
|
||||
},
|
||||
"lnd": {
|
||||
"are_you_sure_open_channel": "You sure say you wan open this channel?",
|
||||
"refill_create": "To proceed like this so, abeg create Bitcoin wallet wey you go refill am with",
|
||||
"can_send": "You fit send",
|
||||
"can_receive": "You fit receive",
|
||||
"view_logs": "run shadow your logs"
|
||||
"refill_create": "To proceed like this so, abeg create Bitcoin wallet wey you go refill am with"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"please_pay_between_and": "Abeg pay between {min} and {max}",
|
||||
|
|
39
loc/pl.json
39
loc/pl.json
|
@ -52,37 +52,19 @@
|
|||
"network": "Błąd sieciowy"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktywny",
|
||||
"inactive": "Nieaktywny",
|
||||
"channels": "Kanały",
|
||||
"no_channels": "Brak kanałów",
|
||||
"claim_balance": "Zażądaj pozostałej kwoty {balance}",
|
||||
"close_channel": "Zamknij kanał",
|
||||
"new_channel": "Nowy kanał",
|
||||
"errorInvoiceExpired": "Faktura wygasła.",
|
||||
"force_close_channel": "Wymusić zamknięcie kanału?",
|
||||
"expired": "Przeterminowana",
|
||||
"node_alias": "Alias węzła",
|
||||
"expiresIn": "Traci ważność w ciągu {time} minut",
|
||||
"payButton": "Zapłać",
|
||||
"payment": "Płatność",
|
||||
"placeholder": "Faktura lub adres",
|
||||
"open_channel": "Otwórz kanał",
|
||||
"funding_amount_placeholder": "Kwota finansowania, na przykład, 0.001",
|
||||
"opening_channnel_for_from": "Otwieram kanał dla portfela {forWalletLabel} fundując z {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Na pewno otworzyć ten kanał?",
|
||||
"potentialFee": "Potencjalna opłata transakcyjna: {fee}",
|
||||
"remote_host": "Zdalny host",
|
||||
"refill": "Doładuj",
|
||||
"reconnect_peer": "Połącz ponownie",
|
||||
"refill_create": "Aby kontynuować, utwórz portfel Bitcoinowy który potem doładujesz.",
|
||||
"refill_external": "Doładowanie z zewnętrznego portfela",
|
||||
"refill_lnd_balance": "Doładowanie stanu portfela Lightning",
|
||||
"sameWalletAsInvoiceError": "Nie możesz zapłacić wezwania z tego samego portfela, który stworzyłeś.",
|
||||
"title": "Zarządzaj środkami",
|
||||
"can_send": "Może wysłać",
|
||||
"can_receive": "Może otrzymać",
|
||||
"view_logs": "Pokaż dziennik zdarzeń"
|
||||
"title": "Zarządzaj środkami"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Dodatkowe informacje",
|
||||
|
@ -123,6 +105,7 @@
|
|||
"details_setAmount": "Otrzymaj kwotę",
|
||||
"details_share": "Udostępnij...",
|
||||
"header": "Otrzymaj",
|
||||
"reset": "Reset",
|
||||
"maxSats": "Kwota maksymalna to {max} satoshi",
|
||||
"maxSatsFull": "Maksymalna kwota to {max} satoshi lub {currency}",
|
||||
"minSats": "Kwota minimalna to {min} satoshi",
|
||||
|
@ -186,6 +169,7 @@
|
|||
"fee_1d": "1 dzień",
|
||||
"fee_3h": "3 godz.",
|
||||
"fee_custom": "Niestandardowe",
|
||||
"insert_custom_fee": "Wprowadź niestandardową opłatę",
|
||||
"fee_fast": "Szybkie",
|
||||
"fee_medium": "Średnie",
|
||||
"fee_replace_minvb": "Opłata całkowita (satoshi za vByte), którą chcesz ponieść powinna być wyższa niż {min} satoshi/vBajt",
|
||||
|
@ -362,6 +346,12 @@
|
|||
"transaction_saved": "Zapisano",
|
||||
"details_show_in_block_explorer": "Zobacz w eksploratorze bloków",
|
||||
"details_title": "Transakcja",
|
||||
"incoming_transaction": "Transakcja przychodząca",
|
||||
"outgoing_transaction": "Transakcja wychodząca",
|
||||
"expired_transaction": "Transakcja przeterminowana",
|
||||
"pending_transaction": "Transakcja w toku",
|
||||
"offchain": "Offchain",
|
||||
"onchain": "Onchain",
|
||||
"details_to": "Wyjście",
|
||||
"enable_offline_signing": "Ten portfel nie jest używany w połączeniu z podpisem offline. Czy chcesz to teraz włączyć?",
|
||||
"list_conf": "potwierdzenia: {number}",
|
||||
|
@ -383,7 +373,9 @@
|
|||
"txid": "ID Transakcji",
|
||||
"from": "Od: {counterparty}",
|
||||
"to": "Do: {counterparty}",
|
||||
"updating": "Aktualizuję..."
|
||||
"updating": "Aktualizuję...",
|
||||
"watchOnlyWarningTitle": "Ostrzeżenie bezpieczeństwa",
|
||||
"watchOnlyWarningDescription": "Zachowaj ostrożność wobec oszustów, którzy często używają portfeli „tylko do odczytu” do wprowadzania użytkowników w błąd. Te portfele nie pozwalają na kontrolowanie ani wysyłanie środków; umożliwiają jedynie przeglądanie salda."
|
||||
},
|
||||
"wallets": {
|
||||
"add_bitcoin": "Bitcoin",
|
||||
|
@ -475,7 +467,8 @@
|
|||
"list_tryagain": "Spróbuj ponownie",
|
||||
"no_ln_wallet_error": "Musisz najpierw dodać portfel Lightning, zanim zapłacisz fakturę.",
|
||||
"looks_like_bip38": "To wygląda na klucz prywatny chroniony hasłem (BIP38).",
|
||||
"reorder_title": "Zmień kolejność portfeli",
|
||||
"manage_title": "Zarządzaj portfelami",
|
||||
"no_results_found": "Nie znaleziono wyników.",
|
||||
"please_continue_scanning": "Proszę skanuj dalej.",
|
||||
"select_no_bitcoin": "Nie ma dostępnych portfeli Bitcoin.",
|
||||
"select_no_bitcoin_exp": "Portfel Bitcoin jest wymagany by uzupełnić portfel Lightning. Proszę utwórz lub zaimportuj.",
|
||||
|
@ -486,7 +479,7 @@
|
|||
"add_ln_wallet_first": "Najpierw musisz dodać portfel Lightning.",
|
||||
"identity_pubkey": "Klucz publiczny tożsamości",
|
||||
"xpub_title": "XPUB portfela",
|
||||
"search_wallets": "Szukaj portfeli"
|
||||
"manage_wallets_search_placeholder": "Szukaj portfeli, notatek"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Skarbiec",
|
||||
|
@ -645,7 +638,7 @@
|
|||
"notification_tx_unconfirmed": "Transakcja powiadomienia nie została jeszcze potwierdzona, proszę czekać",
|
||||
"failed_create_notif_tx": "Nie udało się utworzyć transakcji on-chain",
|
||||
"onchain_tx_needed": "Wymagana transakcja on-chain",
|
||||
"notif_tx_sent": "Transakcja powiadomienia wysłana. Proszę czekać na jej potwierdzenie",
|
||||
"notif_tx_sent" : "Transakcja powiadomienia wysłana. Proszę czekać na jej potwierdzenie",
|
||||
"notif_tx": "Transakcja powiadomienia",
|
||||
"not_found": "Kod płatności nie znaleziony"
|
||||
}
|
||||
|
|
|
@ -52,37 +52,19 @@
|
|||
"network": "Erro na rede"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Ativo",
|
||||
"inactive": "Inativo",
|
||||
"channels": "Canais",
|
||||
"no_channels": "Nenhum canal",
|
||||
"claim_balance": "Reinvindicar saldo {balance}",
|
||||
"close_channel": "Fechar canal",
|
||||
"new_channel": "Novo canal",
|
||||
"errorInvoiceExpired": "Fatura expirada",
|
||||
"force_close_channel": "Forçar fechamento do canal?",
|
||||
"expired": "Expirada",
|
||||
"node_alias": "Apelido do nó",
|
||||
"expiresIn": "Expira em {time} minutos",
|
||||
"payButton": "Pagar",
|
||||
"payment": "Pagamento",
|
||||
"placeholder": "Fatura ou endereço",
|
||||
"open_channel": "Abrir canal",
|
||||
"funding_amount_placeholder": "Quantidade financiamento, exemplo: 0.001",
|
||||
"opening_channnel_for_from": "Abrindo canal para carteira {forWalletLabel}, com financiamento de {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Tem certeza que deseja abrir esse canal?",
|
||||
"potentialFee": "Taxa potencial: {fee}",
|
||||
"remote_host": "Hospedeiro remoto",
|
||||
"refill": "Recarregar",
|
||||
"reconnect_peer": "Reconectar par",
|
||||
"refill_create": "Para continuar, por favor, crie uma carteira Bitcoin para recarregar.",
|
||||
"refill_external": "Recarregar com uma carteira externa",
|
||||
"refill_lnd_balance": "Recarregar a carteira Lightning",
|
||||
"sameWalletAsInvoiceError": "Você não pode pagar um boleto com a mesma carteira que o criou.",
|
||||
"title": "Administrar fundos",
|
||||
"can_send": "Pode enviar",
|
||||
"can_receive": "Pode receber",
|
||||
"view_logs": "Ver logs"
|
||||
"title": "Administrar fundos"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Informação adicional",
|
||||
|
@ -475,7 +457,6 @@
|
|||
"list_tryagain": "Tente novamente",
|
||||
"no_ln_wallet_error": "Antes de pagar uma fatura Lightning, você deve primeiro adicionar uma carteira Lightning.",
|
||||
"looks_like_bip38": "Parece que esta é uma chave privada protegida por senha (BIP38)",
|
||||
"reorder_title": "Reordenar Carteiras",
|
||||
"please_continue_scanning": "Por favor, continue a leitura.",
|
||||
"select_no_bitcoin": "Não há carteiras Bitcoin disponíveis no momento.",
|
||||
"select_no_bitcoin_exp": "É necessário ter uma carteira Bitcoin para recarregar as carteiras Lightning. Por favor, crie ou importe uma.",
|
||||
|
@ -485,8 +466,7 @@
|
|||
"warning_do_not_disclose": "Cuidado! Não divulgue.",
|
||||
"add_ln_wallet_first": "Primeiro você deve adicionar uma carteira Lightning.",
|
||||
"identity_pubkey": "Identificar chave pública",
|
||||
"xpub_title": "XPUB da Carteira",
|
||||
"search_wallets": "Procurar Carteiras"
|
||||
"xpub_title": "XPUB da Carteira"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Cofre",
|
||||
|
|
|
@ -43,13 +43,10 @@
|
|||
"network": "Erro da rede"
|
||||
},
|
||||
"lnd": {
|
||||
"new_channel": "Novo canal",
|
||||
"expired": "Expirado",
|
||||
"expiresIn": "Expira em {time} minutos",
|
||||
"payButton": "Paga",
|
||||
"placeholder": "Fatura ou endereço",
|
||||
"open_channel": "Abrir canal",
|
||||
"are_you_sure_open_channel": "Tem a certeza de que quer abrir este canal?",
|
||||
"potentialFee": "Taxa provável: {fee}",
|
||||
"refill": "Carregar",
|
||||
"refill_create": "Para continuar, crie uma carteira Bitcoin para recarregar.",
|
||||
|
@ -349,7 +346,6 @@
|
|||
"list_long_scan": "Leia o código QR",
|
||||
"list_title": "carteiras",
|
||||
"list_tryagain": "Tente novamente",
|
||||
"reorder_title": "Reordenar Wallets",
|
||||
"select_no_bitcoin": "No momento, não há carteiras Bitcoin disponíveis.",
|
||||
"select_no_bitcoin_exp": "Uma carteira Bitcoin é necessária para recarregar as carteiras Lightning. Por favor, crie ou importe uma.",
|
||||
"select_wallet": "Seleccione uma Wallet",
|
||||
|
|
17
loc/ro.json
17
loc/ro.json
|
@ -40,28 +40,14 @@
|
|||
"network": "Eroare de rețea"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Activ",
|
||||
"inactive": "Inactiv",
|
||||
"channels": "Canale",
|
||||
"no_channels": "Niciun canal",
|
||||
"claim_balance": "Revendică sold {balance}",
|
||||
"close_channel": "Închide canal",
|
||||
"new_channel": "Canal nou",
|
||||
"force_close_channel": "Forțează închiderea canalului?",
|
||||
"expired": "Expirat",
|
||||
"node_alias": "Alias nod",
|
||||
"expiresIn": "Expiră în {time} minute",
|
||||
"payButton": "Plătește",
|
||||
"open_channel": "Deschide canal",
|
||||
"are_you_sure_open_channel": "Sigur vrei să deschizi acest canal?",
|
||||
"refill": "Reumple",
|
||||
"refill_create": "Pentru a continua, creează un portofel Bitcoin cu care să reumpli.",
|
||||
"refill_external": "Reumple cu Portofel Extern",
|
||||
"refill_lnd_balance": "Reumple balanța portofelului Lightning",
|
||||
"title": "Administrează fondurile",
|
||||
"can_send": "Poate trimite",
|
||||
"can_receive": "Poate primi",
|
||||
"view_logs": "Vezi jurnalele"
|
||||
"title": "Administrează fondurile"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Informații suplimentare",
|
||||
|
@ -382,7 +368,6 @@
|
|||
"list_tryagain": "Încearcă din nou",
|
||||
"no_ln_wallet_error": "Înainte de a plăti o factură Lightning, trebuie mai întîi să adaugi un portofel Lightning.",
|
||||
"looks_like_bip38": "Aceasta arată ca o cheie privată protejată de o parolă (BIP38).",
|
||||
"reorder_title": "Reordonează portofelele",
|
||||
"please_continue_scanning": "Continuă scanarea.",
|
||||
"select_no_bitcoin": "Nu e niciun portofel Bitcoin disponibil.",
|
||||
"select_no_bitcoin_exp": "E necesar un portofel Bitcoin pentru a re-umple portofelele Lightning. Creează sau importă unul.",
|
||||
|
|
24
loc/ru.json
24
loc/ru.json
|
@ -49,37 +49,19 @@
|
|||
"network": "Ошибка сети"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Активный",
|
||||
"inactive": "Неактивный",
|
||||
"channels": "Каналы",
|
||||
"no_channels": "Нет каналов",
|
||||
"claim_balance": "Требовать баланс {balance}",
|
||||
"close_channel": "Закрыть канал",
|
||||
"new_channel": "Новый канал",
|
||||
"errorInvoiceExpired": "Инвойс просрочен.",
|
||||
"force_close_channel": "Закрыть канал принудительно?",
|
||||
"expired": "Истекший",
|
||||
"node_alias": "Псевдоним ноды",
|
||||
"expiresIn": "Истекает через {time} мин",
|
||||
"payButton": "Оплатить",
|
||||
"payment": "Платеж",
|
||||
"placeholder": "Инвойс",
|
||||
"open_channel": "Открыть Канал",
|
||||
"funding_amount_placeholder": "Количество для пополнения, например 0.001",
|
||||
"opening_channnel_for_from": "Открытие канала для кошелька {forWalletLabel} средствами из {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Вы уверены, что хотите открыть этот канал?",
|
||||
"potentialFee": "Примерная комиссия: {fee}",
|
||||
"remote_host": "Удалённый хост",
|
||||
"refill": "Пополнить",
|
||||
"reconnect_peer": "Переподключиться",
|
||||
"refill_create": "Чтобы продолжить, пожалуйста, создайте биткоин-кошелёк для пополнения.",
|
||||
"refill_external": "Пополнить с помощью внешнего кошелька",
|
||||
"refill_lnd_balance": "Пополнить баланс кошелька Lightning",
|
||||
"sameWalletAsInvoiceError": "Ты не можешь оплатить Инвойс тем же кошельком, который ты использовал для его создания.",
|
||||
"title": "Мои средства",
|
||||
"can_send": "Может Отправлять",
|
||||
"can_receive": "Может Получать",
|
||||
"view_logs": "Посмотреть Логи"
|
||||
"title": "Мои средства"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Дополнительная информация",
|
||||
|
@ -449,7 +431,6 @@
|
|||
"list_tryagain": "Попробовать еще раз",
|
||||
"no_ln_wallet_error": "Прежде чем оплачивать Лайтнинг-инвойсы, нужно добавить Лайтнинг-кошелёк.",
|
||||
"looks_like_bip38": "Это похоже на закрытый ключ, защищенный паролем (BIP38)",
|
||||
"reorder_title": "Отсортировать кошельки",
|
||||
"please_continue_scanning": "Продолжайте сканировать",
|
||||
"select_no_bitcoin": "В настоящее время нет доступных кошельков Bitcoin.",
|
||||
"select_no_bitcoin_exp": "Кошелёк Bitcoin необходим для пополнения кошельков Lightning. Пожалуйста, создайте или импортируйте его.",
|
||||
|
@ -459,8 +440,7 @@
|
|||
"warning_do_not_disclose": "Внимание! Не разглашать",
|
||||
"add_ln_wallet_first": "Сначала добавьте Лайтнинг-кошелёк.",
|
||||
"identity_pubkey": "Identity Pubkey",
|
||||
"xpub_title": "XPUB кошелька",
|
||||
"search_wallets": "Поиск Кошельков"
|
||||
"xpub_title": "XPUB кошелька"
|
||||
},
|
||||
"multisig": {
|
||||
"multisig_vault": "Хранилище",
|
||||
|
|
|
@ -40,31 +40,14 @@
|
|||
"network": "ජාලකරණ දෝෂයකි"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "ක්රියාකාරී",
|
||||
"inactive": "අක්රීය",
|
||||
"channels": "නාලිකා",
|
||||
"no_channels": "නාලිකා කිසිවක් නැත",
|
||||
"claim_balance": "ශේෂය ඉල්ලන්න {balance}",
|
||||
"close_channel": "නාලිකාව වසන්න",
|
||||
"new_channel": "නව නාලිකාව",
|
||||
"force_close_channel": "කෙසේ හෝ නාලිකාව වසා දමන්නද?",
|
||||
"expired": "කල් ඉකුත් වී ඇත",
|
||||
"node_alias": "නෝඩ් අන්වර්ථ නාමය",
|
||||
"expiresIn": "මිනිත්තුවලින් {time} කල් ඉකුත් වේ",
|
||||
"payButton": "ගෙවන්න",
|
||||
"open_channel": "විවෘත නාලිකාව",
|
||||
"opening_channnel_for_from": "මුදල් පසුම්බිය සඳහා {forWalletLabel}, {fromWalletLabel} අරමුදල් මඟින් නාලිකාව විවෘත කිරීම",
|
||||
"are_you_sure_open_channel": "ඔබට මෙම නාලිකාව විවෘත කිරීමට අවශ්ය බව විශ්වාසද?",
|
||||
"remote_host": "දුරස්ථ ධාරකයා",
|
||||
"refill": "නැවත පුරවන්න",
|
||||
"reconnect_peer": "මිතුරා නැවත සම්බන්ධ කරන්න",
|
||||
"refill_create": "ඉදිරියට යාමට, කරුණාකර නැවත පිරවීම සඳහා බිට්කොයින් පසුම්බියක් සාදන්න.",
|
||||
"refill_external": "බාහිර පසුම්බිය සමඟ නැවත පුරවන්න",
|
||||
"refill_lnd_balance": "ලයිට්නින් පසුම්බියේ ශේෂය නැවත පුරවන්න",
|
||||
"title": "අරමුදල් කළමනාකරණය කරන්න",
|
||||
"can_send": "යැවිය හැක",
|
||||
"can_receive": "ලබා ගත හැක",
|
||||
"view_logs": "ලොග් බලන්න"
|
||||
"title": "අරමුදල් කළමනාකරණය කරන්න"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "අමතර තොරතුරු",
|
||||
|
@ -403,7 +386,6 @@
|
|||
"list_tryagain": "නැවත උත්සාහ කරන්න",
|
||||
"no_ln_wallet_error": "අකුණු ඉන්වොයිසියක් ගෙවීමට පෙර, ඔබ මුලින්ම අකුණු පසුම්බියක් එකතු කළ යුතුය.",
|
||||
"looks_like_bip38": "මෙය මුරපදයකින් ආරක්ෂිත පුද්ගලික යතුරක් ලෙස පෙනේ (BIP38).",
|
||||
"reorder_title": "පසුම්බි නැවත ඇණවුම් කරන්න",
|
||||
"please_continue_scanning": "කරුණාකර ස්කෑන් කිරීම දිගටම කරගෙන යන්න.",
|
||||
"select_no_bitcoin": "දැනට බිට්කොයින් පසුම්බි නොමැත.",
|
||||
"select_no_bitcoin_exp": "ලයිට්නින් පසුම්බි නැවත පිරවීම සඳහා බිට්කොයින් පසුම්බියක් අවශ්ය වේ. කරුණාකර එකක් සාදා හෝ ආයාත කරන්න.",
|
||||
|
|
|
@ -33,22 +33,15 @@
|
|||
"network": "Sieťová chyba"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktívne",
|
||||
"inactive": "Neaktívne",
|
||||
"channels": "Kanály",
|
||||
"close_channel": "Zatvoriť kanál",
|
||||
"new_channel": "Nový kanál",
|
||||
"expired": "Expirovaná",
|
||||
"expiresIn": "Vyprší za {time} minút",
|
||||
"payButton": "Zaplatiť",
|
||||
"open_channel": "Otvoriť kanál",
|
||||
"refill": "Doplniť",
|
||||
"refill_create": "Pre pokračovanie, prosím, vytvorte si Bitcoinovú peňaženku",
|
||||
"refill_external": "Doplniť z externej peňaženky",
|
||||
"refill_lnd_balance": "Doplniť zostatok na Lightning peňaženke",
|
||||
"sameWalletAsInvoiceError": "Faktúra sa nedá uhradiť s rovnakou peňaženkou ako tá, ktorá ju vytvorila.",
|
||||
"title": "spravovať zostatok",
|
||||
"can_send": "Môže poslať"
|
||||
"title": "spravovať zostatok"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Doplňujúce informácie",
|
||||
|
@ -236,7 +229,6 @@
|
|||
"list_long_scan": "Skenovať QR kód",
|
||||
"list_title": "peňaženky",
|
||||
"list_tryagain": "Skúste znovu",
|
||||
"reorder_title": "Zoradiť peňaženky",
|
||||
"select_no_bitcoin": "Žiadne Bitcoinové peňaženky nie sú k dispozícii.",
|
||||
"select_wallet": "Vyberte peňaženku",
|
||||
"xpub_copiedToClipboard": "Skopírované do schránky.",
|
||||
|
|
|
@ -40,32 +40,16 @@
|
|||
"network": "Omrežna napaka"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktivno",
|
||||
"inactive": "Neaktivno",
|
||||
"channels": "Kanali",
|
||||
"no_channels": "Ni odprtih kanalov",
|
||||
"close_channel": "Zapri kanal",
|
||||
"new_channel": "Nov kanal",
|
||||
"force_close_channel": "Prisilno zapri kanal?",
|
||||
"expired": "Potekel",
|
||||
"node_alias": "Vzdevek vozlišča",
|
||||
"expiresIn": "Poteče čez {time} min",
|
||||
"payButton": "Plačaj",
|
||||
"open_channel": "Odpri kanal",
|
||||
"opening_channnel_for_from": "Odpiranje kanala denarnice {forWalletLabel}, z uporabo sredstev iz {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Ali ste prepričani, da želite odpreti ta kanal?",
|
||||
"potentialFee": "Morebitna omrežnina: {fee}",
|
||||
"remote_host": "Oddaljeni gostitelj",
|
||||
"refill": "Napolni",
|
||||
"reconnect_peer": "Ponovna vzpostavitev povezave",
|
||||
"refill_create": "Če želite nadaljevati, ustvarite Bitcoin denarnico, s katero boste napolnili.",
|
||||
"refill_external": "Napolni z zunanjo denarnico",
|
||||
"refill_lnd_balance": "Napolni stanje Lightning denarnice",
|
||||
"sameWalletAsInvoiceError": "Plačilo računa ni mogoče z denarnico, s katero je bil ustvarjen.",
|
||||
"title": "Uredi sredstva",
|
||||
"can_send": "Mogoče poslati",
|
||||
"can_receive": "Mogoče prejeti",
|
||||
"view_logs": "Prikaži dnevnik"
|
||||
"title": "Uredi sredstva"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Dodatne Informacije",
|
||||
|
@ -412,7 +396,6 @@
|
|||
"list_tryagain": "Poskusi ponovno",
|
||||
"no_ln_wallet_error": "Za plačilo Lightning računa, morate najprej dodati Lightning denarnico.",
|
||||
"looks_like_bip38": "Zasebni ključ je verjetno zaščiten z geslom (BIP38)",
|
||||
"reorder_title": "Preureditev Denarnic",
|
||||
"please_continue_scanning": "Nadaljujte s skeniranjem",
|
||||
"select_no_bitcoin": "Trenutno ni na voljo nobena Bitcoin denarnica.",
|
||||
"select_no_bitcoin_exp": "Za napolnitev Lightning denarnic je potrebna Bitcoin denarnica. Ustvarite ali uvozite denarnico.",
|
||||
|
|
|
@ -47,35 +47,18 @@
|
|||
"network": "Nätverks fel"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktiva",
|
||||
"inactive": "Inaktiv",
|
||||
"channels": "Kanaler",
|
||||
"no_channels": "Inga kanaler",
|
||||
"claim_balance": "Begär saldo {saldo}",
|
||||
"close_channel": "Säng kanal",
|
||||
"new_channel": "Ny kanal",
|
||||
"force_close_channel": "Tvinga stänga kanal",
|
||||
"expired": "Förfallen",
|
||||
"node_alias": "Node alias",
|
||||
"expiresIn": "Går ut om {time} minuter",
|
||||
"payButton": "Betala",
|
||||
"payment": "Betalning",
|
||||
"placeholder": "Faktura eller adress",
|
||||
"open_channel": "Öppna kanal",
|
||||
"opening_channnel_for_from": "Öppnande kanal för plånbok {forWalletLabel}, genom insättning från {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Är du säker på att du vill öppna den här kanalen? ",
|
||||
"potentialFee": "Potentiell avgift: {avgift}",
|
||||
"remote_host": "Fjärrvärd",
|
||||
"refill": "Sätt in",
|
||||
"reconnect_peer": "Återanslut peer",
|
||||
"refill_create": "För att fortsätta, vänligen skapa en Bitcoin plånbok att fylla på med",
|
||||
"refill_external": "Fyll på från extern plånbok",
|
||||
"refill_lnd_balance": "Fyll på Lightning-plånbok",
|
||||
"sameWalletAsInvoiceError": "Du kan inte betala en faktura från samma plånbok som användes för att skapa den.",
|
||||
"title": "sätt in / ta ut",
|
||||
"can_send": "Kan skicka",
|
||||
"can_receive": "Kan ta emot",
|
||||
"view_logs": "Visa loggar"
|
||||
"title": "sätt in / ta ut"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Ytterligare information",
|
||||
|
@ -426,7 +409,6 @@
|
|||
"list_tryagain": "Försök igen",
|
||||
"no_ln_wallet_error": "Innan du betalar en Lightning-faktura måste du först lägga till en Lightning-plånbok.",
|
||||
"looks_like_bip38": "Detta ser ut som en lösenordsskyddad privat nyckel (BIP38).",
|
||||
"reorder_title": "Sortera plånböcker",
|
||||
"please_continue_scanning": "Fortsätt att skanna.",
|
||||
"select_no_bitcoin": "Det finns för närvarande inga tillgängliga Bitcoin-plånböcker.",
|
||||
"select_no_bitcoin_exp": "En Bitcoin-plånbok krävs för att fylla på Lightning-plånböcker. Vänligen skapa eller importera en.",
|
||||
|
|
|
@ -273,7 +273,6 @@
|
|||
"list_long_scan": "สแกนคิวอาร์โค้ด",
|
||||
"list_title": "กระเป๋าสตางค์",
|
||||
"list_tryagain": "พยายามอีกครั้ง",
|
||||
"reorder_title": "เปลี่ยนลำดับกระเป๋าสตางค์",
|
||||
"select_no_bitcoin": "ขณะนี้ไม่มีกระเป๋าสตางค์บิตคอยน์",
|
||||
"select_no_bitcoin_exp": "ก่อนที่จะเติมเงินเข้ากระเป๋าสตางค์ไลท์นิง ท่านต้องมีกระเป๋าสตางค์บิตคอยน์",
|
||||
"select_wallet": "เลือกกระเป๋าสตางค์",
|
||||
|
|
|
@ -40,29 +40,13 @@
|
|||
"network": "Ağ Hatası"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktif",
|
||||
"inactive": "Inaktif",
|
||||
"channels": "Kanallar",
|
||||
"no_channels": "Kanal yok",
|
||||
"claim_balance": "Talep balansı (balans)",
|
||||
"close_channel": "Kanalı kapa",
|
||||
"new_channel": "Yeni kanal",
|
||||
"force_close_channel": "Kanalı kapamaya zorla",
|
||||
"expired": "Süresi doldu",
|
||||
"node_alias": "Node mahlası",
|
||||
"expiresIn": "{time} dakika içerisinde sona erer",
|
||||
"payButton": "Öde",
|
||||
"open_channel": "Kanal aç",
|
||||
"opening_channnel_for_from": "{fromWalletLabel} tarafından fonlanan kanal {forWalletLabel} için aılıyor",
|
||||
"are_you_sure_open_channel": "Bu kanalı açmak istediğinizden emin misiniz?",
|
||||
"refill": "Yükle",
|
||||
"reconnect_peer": "Eş'e tekrar bağlan",
|
||||
"refill_lnd_balance": "Lightning cüzdana bakiye yükle",
|
||||
"sameWalletAsInvoiceError": "Bir faturayı, oluştururken kullandığınız cüzdan ile ödeyemezsiniz.",
|
||||
"title": "Bakiyeleri Yönet",
|
||||
"can_send": "Gönderebilir",
|
||||
"can_receive": "Alabilir",
|
||||
"view_logs": "Logları gör"
|
||||
"title": "Bakiyeleri Yönet"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Ek Bilgi",
|
||||
|
@ -225,7 +209,6 @@
|
|||
"list_empty_txs1": "İşlemleriniz burada görünür,",
|
||||
"list_latest_transaction": "en son işlem",
|
||||
"list_title": "cüzdanlar",
|
||||
"reorder_title": "Cüzdanları Sırala",
|
||||
"select_wallet": "Cüzdan Seç",
|
||||
"xpub_copiedToClipboard": "Panoya kopyalandı",
|
||||
"xpub_title": "cüzdan XPUB"
|
||||
|
|
19
loc/ua.json
19
loc/ua.json
|
@ -48,32 +48,15 @@
|
|||
"network": "Помилка Мережі"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Активний",
|
||||
"inactive": "Неактивний",
|
||||
"channels": "Канали",
|
||||
"no_channels": "Немає каналів",
|
||||
"claim_balance": "Баланс вимоги {баланс}",
|
||||
"close_channel": "Закрити канал",
|
||||
"new_channel": "Новий канал",
|
||||
"force_close_channel": "Примусово закрити канал?",
|
||||
"expired": "Термін дії закінчився",
|
||||
"node_alias": "Псевдонім вузла",
|
||||
"expiresIn": "Закінчується через {час} хвилин",
|
||||
"payButton": "Оплатити",
|
||||
"placeholder": "Рахунок або адреса",
|
||||
"open_channel": "Відкрити Канал",
|
||||
"opening_channnel_for_from": "Відкриття каналу для гаманця {forWalletLabel}, за рахунок фінансування з {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Ви впевнені, що хочете відкрити цей канал?",
|
||||
"remote_host": "Віддалений хост",
|
||||
"refill": "Поповнити",
|
||||
"reconnect_peer": "Перепідключити одноранговий",
|
||||
"refill_create": "Щоб продовжити, будь ласка, створіть біткоїн-гаманець для поповнення.",
|
||||
"refill_external": "Поповнити з зовнішнього гаманця",
|
||||
"refill_lnd_balance": "Збільшити баланс Lightning гаманця",
|
||||
"title": "Мої Кошти",
|
||||
"can_send": "Можна Надіслати",
|
||||
"can_receive": "Можна Отримати",
|
||||
"view_logs": "Переглянути Логи"
|
||||
"title": "Мої Кошти"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Додаткова Інформація",
|
||||
|
|
|
@ -47,32 +47,15 @@
|
|||
"network": "Lỗi mạng"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Kích hoạt",
|
||||
"inactive": "Không kích hoạt",
|
||||
"channels": "Các kênh",
|
||||
"no_channels": "Không có kênh",
|
||||
"claim_balance": "Yêu cầu số dư {balance}",
|
||||
"close_channel": "Đóng kênh",
|
||||
"new_channel": "Kênh mới",
|
||||
"force_close_channel": "Buộc đóng kênh",
|
||||
"expired": "Hết hạn",
|
||||
"node_alias": "Bí danh node",
|
||||
"expiresIn": "Hết hạn sau {time} phút",
|
||||
"payButton": "Thanh toán",
|
||||
"placeholder": "Hóa đơn hoặc địa chỉ",
|
||||
"open_channel": "Mở kênh",
|
||||
"opening_channnel_for_from": "Đang mở kênh cho ví {forWalletLabel} bằng cách tài trợ từ {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Bạn có chắc muốn mở kênh này không?",
|
||||
"remote_host": "Máy chủ từ xa",
|
||||
"refill": "Đổ đầy",
|
||||
"reconnect_peer": "Kết nối lại với peer",
|
||||
"refill_create": "Để tiếp tục, vui lòng tạo một ví Bitcoin để nạp tiền. ",
|
||||
"refill_external": "Nạp lại với ví bên ngoài",
|
||||
"refill_lnd_balance": "Nạp lại số dư ví Lightning",
|
||||
"title": "Quản lý quỹ",
|
||||
"can_send": "Gửi được",
|
||||
"can_receive": "Nhận được",
|
||||
"view_logs": "Xem các bản ghi"
|
||||
"title": "Quản lý quỹ"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Thông tin thêm",
|
||||
|
@ -419,7 +402,6 @@
|
|||
"list_tryagain": "Thử lại",
|
||||
"no_ln_wallet_error": "Trước khi thanh toán hoá đơn Lightning, đầu tiên bạn phải thêm một ví Lightning.",
|
||||
"looks_like_bip38": "Cái này trông giống một khoá cá nhân được bảo vệ bằng mật khẩu (BIP38).",
|
||||
"reorder_title": "Sắp xếp lại các vị",
|
||||
"please_continue_scanning": "Vui lòng quét tiếp.",
|
||||
"select_no_bitcoin": "Hiện tại không có ví Bitcoin có sẵn.",
|
||||
"select_no_bitcoin_exp": "Bạn phải sử dụng ví Bitcoin đễ nạp tiền vào ví Lightning. Hãy tạo hoặc nhập một ví Bitcoin.",
|
||||
|
|
|
@ -44,33 +44,18 @@
|
|||
"network": "Netwerk Vout"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "Aktief",
|
||||
"inactive": "Onaktief",
|
||||
"channels": "Kanale",
|
||||
"no_channels": "Geen kanale",
|
||||
"claim_balance": "Eis balaans {balance}",
|
||||
"close_channel": "Sluit kanaal",
|
||||
"new_channel": "Nuwe kanaal",
|
||||
"errorInvoiceExpired": "Faktuur het verval.",
|
||||
"force_close_channel": "Dwing kanaal sluiting?",
|
||||
"expired": "Verval",
|
||||
"node_alias": "Knoop-punt noem naam",
|
||||
"expiresIn": "Verval in {time} minute",
|
||||
"payButton": "Betaal",
|
||||
"payment": "Betaling",
|
||||
"placeholder": "Faktuur of adres",
|
||||
"open_channel": "Open Kanaal",
|
||||
"opening_channnel_for_from": "Skep kanaal vir beursie {forWalletLabel}, deur befondsing vanaf {fromWalletLabel}",
|
||||
"are_you_sure_open_channel": "Is jy seker jy wil hierdie kanaal oop maak?",
|
||||
"refill": "Herlaai",
|
||||
"refill_create": "Om voort te gaan, skep asb 'n Bitcoin beursie om vondse mee aan te vul.",
|
||||
"refill_external": "Vul aan met Eksterne Beursie",
|
||||
"refill_lnd_balance": "Herlaai Lightning beursie",
|
||||
"sameWalletAsInvoiceError": "U kan nie ‘n faktuur betaal met die selfde beursie waarmee die faktuur geksep is nie.",
|
||||
"title": "bestuur fondse",
|
||||
"can_send": "Kan Stuur",
|
||||
"can_receive": "Kan Ontvang",
|
||||
"view_logs": "Sien Aktiwiteits Register"
|
||||
"title": "bestuur fondse"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "Bykomende Inligting",
|
||||
|
@ -222,7 +207,6 @@
|
|||
"list_latest_transaction": "laaste transaksie",
|
||||
"list_title": "beursies",
|
||||
"no_ln_wallet_error": "Voordat jy 'n Lightning faktuur betaal moet jy eers 'n Lightning beursie aanwys.",
|
||||
"reorder_title": "Herorganiseer Beursies",
|
||||
"select_wallet": "Kies Beursie",
|
||||
"xpub_copiedToClipboard": "Gestuur na klipbord.",
|
||||
"add_ln_wallet_first": "Jy moet eers 'n Lightning beursie byvoeg.",
|
||||
|
|
|
@ -142,7 +142,6 @@
|
|||
"list_empty_txs1": "Intengiso yakho iya kubonakala apha,",
|
||||
"list_latest_transaction": "Utshintsho olutsha",
|
||||
"list_title": "Ingxowa",
|
||||
"reorder_title": "Yenza kwakhona ingxowa",
|
||||
"select_wallet": "Khetha ingxowa",
|
||||
"xpub_copiedToClipboard": "Ikopishwe kwi-clipboard",
|
||||
"xpub_title": "ingxowa XPUB"
|
||||
|
|
|
@ -40,8 +40,6 @@
|
|||
"network": "网络错误"
|
||||
},
|
||||
"lnd": {
|
||||
"active": "激活",
|
||||
"inactive": "无效",
|
||||
"expired": "已过期",
|
||||
"payButton": "支付",
|
||||
"refill": "充值",
|
||||
|
@ -340,7 +338,6 @@
|
|||
"list_tryagain": "再试一次",
|
||||
"no_ln_wallet_error": "在支付闪电账单之前,必须先添加一个闪电钱包。",
|
||||
"looks_like_bip38": "这看起来像是受密码保护的私钥(BIP38)。",
|
||||
"reorder_title": "重新排列钱包",
|
||||
"please_continue_scanning": "请继续扫描。",
|
||||
"select_no_bitcoin": "当前没有可用的比特币钱包。",
|
||||
"select_no_bitcoin_exp": "需要一个比特币钱包来为闪电钱包充值。 请创建或导入一个。",
|
||||
|
|
|
@ -44,9 +44,7 @@
|
|||
"refill_external": "用外部錢包增值",
|
||||
"refill_lnd_balance": "給閃電錢包增值",
|
||||
"sameWalletAsInvoiceError": "你不能用建立賬單的錢包去支付該賬單",
|
||||
"title": "管理資金",
|
||||
"can_send": "能傳送",
|
||||
"can_receive": "能接收"
|
||||
"title": "管理資金"
|
||||
},
|
||||
"lndViewInvoice": {
|
||||
"additional_info": "附加信息",
|
||||
|
@ -333,7 +331,6 @@
|
|||
"list_tryagain": "再試一次",
|
||||
"no_ln_wallet_error": "在繳付閃電賬單之前,必須先添加一個閃電錢包。",
|
||||
"looks_like_bip38": "這看起來像是受密碼保護的私鑰(BIP38)。",
|
||||
"reorder_title": "重新排列錢包",
|
||||
"please_continue_scanning": "請繼續掃描。",
|
||||
"select_no_bitcoin": "當前沒有可用的比特幣錢包。",
|
||||
"select_no_bitcoin_exp": "需要一個比特幣錢包來為閃電錢包增值,請建立或導入一個。",
|
||||
|
|
|
@ -11,7 +11,6 @@ import {
|
|||
ImportWalletComponent,
|
||||
ImportWalletDiscoveryComponent,
|
||||
PleaseBackupComponent,
|
||||
PleaseBackupLdkComponent,
|
||||
PleaseBackupLNDHubComponent,
|
||||
ProvideEntropyComponent,
|
||||
WalletsAddMultisigComponent,
|
||||
|
@ -27,7 +26,6 @@ export type AddWalletStackParamList = {
|
|||
ImportCustomDerivationPath: undefined;
|
||||
PleaseBackup: undefined;
|
||||
PleaseBackupLNDHub: undefined;
|
||||
PleaseBackupLdk: undefined;
|
||||
ProvideEntropy: undefined;
|
||||
WalletsAddMultisig: {
|
||||
walletLabel: string;
|
||||
|
@ -87,15 +85,6 @@ const AddWalletStack = () => {
|
|||
component={PleaseBackupLNDHubComponent}
|
||||
options={navigationStyle({ gestureEnabled: false, headerBackVisible: false, title: loc.pleasebackup.title })(theme)}
|
||||
/>
|
||||
<Stack.Screen
|
||||
name="PleaseBackupLdk"
|
||||
component={PleaseBackupLdkComponent}
|
||||
options={navigationStyle({
|
||||
title: loc.pleasebackup.title,
|
||||
gestureEnabled: false,
|
||||
headerBackVisible: false,
|
||||
})(theme)}
|
||||
/>
|
||||
<Stack.Screen
|
||||
name="ProvideEntropy"
|
||||
component={ProvideEntropyComponent}
|
||||
|
|
|
@ -7,7 +7,6 @@ import navigationStyle, { CloseButtonPosition } from '../components/navigationSt
|
|||
import { useTheme } from '../components/themes';
|
||||
import { useExtendedNavigation } from '../hooks/useExtendedNavigation';
|
||||
import loc from '../loc';
|
||||
import LdkInfo from '../screen/lnd/ldkInfo';
|
||||
import LNDViewAdditionalInvoiceInformation from '../screen/lnd/lndViewAdditionalInvoiceInformation';
|
||||
import LNDViewAdditionalInvoicePreImage from '../screen/lnd/lndViewAdditionalInvoicePreImage';
|
||||
import LNDViewInvoice from '../screen/lnd/lndViewInvoice';
|
||||
|
@ -25,7 +24,6 @@ import TransactionStatus from '../screen/transactions/TransactionStatus';
|
|||
import WalletAddresses from '../screen/wallets/WalletAddresses';
|
||||
import WalletDetails from '../screen/wallets/details';
|
||||
import GenerateWord from '../screen/wallets/generateWord';
|
||||
import LdkViewLogs from '../screen/wallets/ldkViewLogs';
|
||||
import SelectWallet from '../screen/wallets/SelectWallet';
|
||||
import WalletTransactions from '../screen/wallets/transactions';
|
||||
import WalletsList from '../screen/wallets/WalletsList';
|
||||
|
@ -52,10 +50,8 @@ import {
|
|||
ToolsComponent,
|
||||
} from './LazyLoadSettingsStack';
|
||||
import PaymentCodesListComponent from './LazyLoadPaymentCodeStack';
|
||||
import LDKOpenChannelRoot from './LDKOpenChannelStack';
|
||||
import LNDCreateInvoiceRoot from './LNDCreateInvoiceStack';
|
||||
import ReceiveDetailsStackRoot from './ReceiveDetailsStack';
|
||||
import ReorderWalletsStackRoot from './ReorderWalletsStack';
|
||||
import ScanLndInvoiceRoot from './ScanLndInvoiceStack';
|
||||
import ScanQRCodeStackRoot from './ScanQRCodeStack';
|
||||
import SendDetailsStack from './SendDetailsStack';
|
||||
|
@ -66,6 +62,7 @@ import WalletXpubStackRoot from './WalletXpubStack';
|
|||
import PlusIcon from '../components/icons/PlusIcon';
|
||||
import SettingsButton from '../components/icons/SettingsButton';
|
||||
import ExportMultisigCoordinationSetupStack from './ExportMultisigCoordinationSetupStack';
|
||||
import ManageWallets from '../screen/wallets/ManageWallets';
|
||||
|
||||
const DetailViewStackScreensStack = () => {
|
||||
const theme = useTheme();
|
||||
|
@ -116,19 +113,6 @@ const DetailViewStackScreensStack = () => {
|
|||
component={WalletTransactions}
|
||||
options={WalletTransactions.navigationOptions(theme)}
|
||||
/>
|
||||
<DetailViewStack.Screen
|
||||
name="LDKOpenChannelRoot"
|
||||
component={LDKOpenChannelRoot}
|
||||
options={navigationStyle({
|
||||
title: loc.lnd.new_channel,
|
||||
headerLargeTitle: true,
|
||||
statusBarStyle: 'auto',
|
||||
closeButtonPosition: CloseButtonPosition.Right,
|
||||
headerBackVisible: false,
|
||||
gestureEnabled: false,
|
||||
})(theme)}
|
||||
/>
|
||||
<DetailViewStack.Screen name="LdkInfo" component={LdkInfo} options={LdkInfo.navigationOptions(theme)} />
|
||||
<DetailViewStack.Screen
|
||||
name="WalletDetails"
|
||||
component={WalletDetails}
|
||||
|
@ -138,7 +122,6 @@ const DetailViewStackScreensStack = () => {
|
|||
headerRight: () => SaveButton,
|
||||
})(theme)}
|
||||
/>
|
||||
<DetailViewStack.Screen name="LdkViewLogs" component={LdkViewLogs} options={LdkViewLogs.navigationOptions(theme)} />
|
||||
<DetailViewStack.Screen
|
||||
name="TransactionDetails"
|
||||
component={TransactionDetails}
|
||||
|
@ -247,11 +230,7 @@ const DetailViewStackScreensStack = () => {
|
|||
/>
|
||||
|
||||
<DetailViewStack.Screen name="AddWalletRoot" component={AddWalletStack} options={NavigationFormModalOptions} />
|
||||
<DetailViewStack.Screen
|
||||
name="SendDetailsRoot"
|
||||
component={SendDetailsStack}
|
||||
options={navigationStyle({ headerShown: false, presentation: isDesktop ? 'fullScreenModal' : 'modal' })(theme)}
|
||||
/>
|
||||
<DetailViewStack.Screen name="SendDetailsRoot" component={SendDetailsStack} options={NavigationDefaultOptions} />
|
||||
<DetailViewStack.Screen name="LNDCreateInvoiceRoot" component={LNDCreateInvoiceRoot} options={NavigationDefaultOptions} />
|
||||
<DetailViewStack.Screen name="ScanLndInvoiceRoot" component={ScanLndInvoiceRoot} options={NavigationDefaultOptions} />
|
||||
<DetailViewStack.Screen name="AztecoRedeemRoot" component={AztecoRedeemStackRoot} options={NavigationDefaultOptions} />
|
||||
|
@ -379,13 +358,15 @@ const DetailViewStackScreensStack = () => {
|
|||
}}
|
||||
/>
|
||||
<DetailViewStack.Screen
|
||||
name="ReorderWallets"
|
||||
component={ReorderWalletsStackRoot}
|
||||
options={{
|
||||
headerShown: false,
|
||||
name="ManageWallets"
|
||||
component={ManageWallets}
|
||||
options={navigationStyle({
|
||||
headerBackVisible: false,
|
||||
headerLargeTitle: true,
|
||||
gestureEnabled: false,
|
||||
presentation: 'modal',
|
||||
}}
|
||||
title: loc.wallets.manage_title,
|
||||
})(theme)}
|
||||
/>
|
||||
</DetailViewStack.Navigator>
|
||||
);
|
||||
|
|
|
@ -5,10 +5,7 @@ export type DetailViewStackParamList = {
|
|||
UnlockWithScreen: undefined;
|
||||
WalletsList: { scannedData?: string };
|
||||
WalletTransactions: { walletID: string; walletType: string };
|
||||
LDKOpenChannelRoot: undefined;
|
||||
LdkInfo: undefined;
|
||||
WalletDetails: { walletID: string };
|
||||
LdkViewLogs: undefined;
|
||||
TransactionDetails: { transactionId: string };
|
||||
TransactionStatus: { hash?: string; walletID?: string };
|
||||
CPFP: { transactionId: string };
|
||||
|
@ -103,5 +100,5 @@ export type DetailViewStackParamList = {
|
|||
paymentCode: string;
|
||||
walletID: string;
|
||||
};
|
||||
ReorderWallets: undefined;
|
||||
ManageWallets: undefined;
|
||||
};
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
import { createNativeStackNavigator } from '@react-navigation/native-stack';
|
||||
import React from 'react';
|
||||
|
||||
import navigationStyle from '../components/navigationStyle';
|
||||
import { useTheme } from '../components/themes';
|
||||
import loc from '../loc';
|
||||
import { LdkOpenChannelComponent, SelectWalletComponent, SuccessComponent } from './LazyLoadLDKOpenChannelStack';
|
||||
|
||||
const Stack = createNativeStackNavigator();
|
||||
|
||||
const LDKOpenChannelRoot = () => {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<Stack.Navigator screenOptions={{ headerShadowVisible: false }} initialRouteName="SelectWallet">
|
||||
<Stack.Screen
|
||||
name="SelectWallet"
|
||||
component={SelectWalletComponent}
|
||||
options={navigationStyle({ title: loc.wallets.select_wallet })(theme)}
|
||||
/>
|
||||
<Stack.Screen name="LDKOpenChannelSetAmount" component={LdkOpenChannelComponent} />
|
||||
<Stack.Screen name="Success" component={SuccessComponent} options={{ headerShown: false, gestureEnabled: false }} />
|
||||
</Stack.Navigator>
|
||||
);
|
||||
};
|
||||
|
||||
export default LDKOpenChannelRoot;
|
|
@ -10,7 +10,6 @@ const ImportSpeed = lazy(() => import('../screen/wallets/importSpeed'));
|
|||
const ImportWallet = lazy(() => import('../screen/wallets/import'));
|
||||
const PleaseBackup = lazy(() => import('../screen/wallets/PleaseBackup'));
|
||||
const PleaseBackupLNDHub = lazy(() => import('../screen/wallets/pleaseBackupLNDHub'));
|
||||
const PleaseBackupLdk = lazy(() => import('../screen/wallets/pleaseBackupLdk'));
|
||||
const ProvideEntropy = lazy(() => import('../screen/wallets/ProvideEntropy'));
|
||||
const WalletsAddMultisig = lazy(() => import('../screen/wallets/WalletsAddMultisig'));
|
||||
const WalletsAddMultisigStep2 = lazy(() => import('../screen/wallets/addMultisigStep2'));
|
||||
|
@ -58,12 +57,6 @@ export const PleaseBackupLNDHubComponent = () => (
|
|||
</Suspense>
|
||||
);
|
||||
|
||||
export const PleaseBackupLdkComponent = () => (
|
||||
<Suspense fallback={<LazyLoadingIndicator />}>
|
||||
<PleaseBackupLdk />
|
||||
</Suspense>
|
||||
);
|
||||
|
||||
export const ProvideEntropyComponent = () => (
|
||||
<Suspense fallback={<LazyLoadingIndicator />}>
|
||||
<ProvideEntropy />
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
import React, { lazy, Suspense } from 'react';
|
||||
|
||||
import { LazyLoadingIndicator } from './LazyLoadingIndicator';
|
||||
|
||||
const SelectWallet = lazy(() => import('../screen/wallets/SelectWallet'));
|
||||
const LdkOpenChannel = lazy(() => import('../screen/lnd/ldkOpenChannel'));
|
||||
const Success = lazy(() => import('../screen/send/success'));
|
||||
|
||||
export const SelectWalletComponent = () => (
|
||||
<Suspense fallback={<LazyLoadingIndicator />}>
|
||||
<SelectWallet />
|
||||
</Suspense>
|
||||
);
|
||||
|
||||
export const LdkOpenChannelComponent = () => (
|
||||
<Suspense fallback={<LazyLoadingIndicator />}>
|
||||
<LdkOpenChannel />
|
||||
</Suspense>
|
||||
);
|
||||
|
||||
export const SuccessComponent = () => (
|
||||
<Suspense fallback={<LazyLoadingIndicator />}>
|
||||
<Success />
|
||||
</Suspense>
|
||||
);
|
|
@ -3,7 +3,7 @@ import React, { lazy, Suspense } from 'react';
|
|||
import { LazyLoadingIndicator } from './LazyLoadingIndicator';
|
||||
|
||||
// Define lazy imports
|
||||
const WalletExport = lazy(() => import('../screen/wallets/export'));
|
||||
const WalletExport = lazy(() => import('../screen/wallets/WalletExport'));
|
||||
|
||||
export const WalletExportComponent = () => (
|
||||
<Suspense fallback={<LazyLoadingIndicator />}>
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
import { createNativeStackNavigator } from '@react-navigation/native-stack';
|
||||
import React from 'react';
|
||||
|
||||
import navigationStyle from '../components/navigationStyle';
|
||||
import { useTheme } from '../components/themes';
|
||||
import loc from '../loc';
|
||||
import ReorderWallets from '../screen/wallets/ReorderWallets';
|
||||
|
||||
const Stack = createNativeStackNavigator();
|
||||
|
||||
const ReorderWalletsStackRoot = () => {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<Stack.Navigator screenOptions={{ headerShadowVisible: false }}>
|
||||
<Stack.Screen
|
||||
name="ReorderWalletsScreen"
|
||||
component={ReorderWallets}
|
||||
options={navigationStyle({
|
||||
headerBackVisible: false,
|
||||
headerLargeTitle: true,
|
||||
|
||||
headerTitle: loc.wallets.reorder_title,
|
||||
})(theme)}
|
||||
/>
|
||||
</Stack.Navigator>
|
||||
);
|
||||
};
|
||||
|
||||
export default ReorderWalletsStackRoot;
|
|
@ -99,10 +99,7 @@ export type DetailViewStackParamList = {
|
|||
UnlockWithScreen: undefined;
|
||||
WalletsList: undefined;
|
||||
WalletTransactions: { walletID: string; walletType: string };
|
||||
LDKOpenChannelRoot: undefined;
|
||||
LdkInfo: undefined;
|
||||
WalletDetails: { walletID: string };
|
||||
LdkViewLogs: undefined;
|
||||
TransactionDetails: { transactionId: string };
|
||||
TransactionStatus: { hash?: string; walletID?: string };
|
||||
CPFP: { transactionId: string };
|
||||
|
@ -213,5 +210,5 @@ export type DetailViewStackParamList = {
|
|||
paymentCode: string;
|
||||
walletID: string;
|
||||
};
|
||||
ReorderWallets: undefined;
|
||||
ManageWallets: undefined;
|
||||
};
|
||||
|
|
15318
package-lock.json
generated
15318
package-lock.json
generated
File diff suppressed because it is too large
Load diff
82
package.json
82
package.json
|
@ -29,6 +29,7 @@
|
|||
"eslint-config-standard-jsx": "^11.0.0",
|
||||
"eslint-config-standard-react": "^13.0.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-jest": "^28.7.0",
|
||||
"eslint-plugin-n": "^16.6.2",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
|
@ -43,30 +44,29 @@
|
|||
"typescript": "^5.1.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16",
|
||||
"npm": ">=6.9.0"
|
||||
"node": ">=20"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "cd android/; ./gradlew clean; cd ..; rm -r -f /tmp/metro-cache/; rm -r -f node_modules/; yarn cache clean; yarn install; yarn start --reset-cache",
|
||||
"clean:ios": "rm -fr node_modules && rm -fr ios/Pods && yarn && cd ios && pod update && cd ..; yarn start --reset-cache",
|
||||
"clean": "cd android/; ./gradlew clean; cd ..; rm -r -f /tmp/metro-cache/; rm -r -f node_modules/; npm cache clean --force; npm i; npm start -- --reset-cache",
|
||||
"clean:ios": "rm -fr node_modules && rm -fr ios/Pods && npm i && cd ios && pod update && cd ..; npm start -- --reset-cache",
|
||||
"releasenotes2json": "./scripts/release-notes.sh > release-notes.txt; node -e 'console.log(JSON.stringify(require(\"fs\").readFileSync(\"release-notes.txt\", \"utf8\")));' > release-notes.json",
|
||||
"branch2json": "./scripts/current-branch.sh > current-branch.json",
|
||||
"start": "react-native start",
|
||||
"start": "node node_modules/react-native/local-cli/cli.js start",
|
||||
"android": "react-native run-android",
|
||||
"android:clean": "cd android; ./gradlew clean; cd .. ;yarn android",
|
||||
"android:clean": "cd android; ./gradlew clean ; cd .. ; npm run android",
|
||||
"ios": "react-native run-ios",
|
||||
"postinstall": "rn-nodeify --install buffer,events,process,stream,inherits,path,assert,crypto --hack; yarn releasenotes2json; yarn branch2json; yarn patches",
|
||||
"patches": "patch -p1 < scripts/rn-ldk.patch; patch -p1 < scripts/react-native-camera-kit.patch;",
|
||||
"test": "yarn tslint && yarn lint && yarn unit && yarn jest",
|
||||
"postinstall": "rn-nodeify --install buffer,events,process,stream,inherits,path,assert,crypto --hack; npm run releasenotes2json; npm run branch2json; npm run patches",
|
||||
"patches": "patch -p1 < scripts/react-native-camera-kit.patch;",
|
||||
"test": "npm run tslint && npm run lint && npm run unit && npm run jest",
|
||||
"jest": "jest tests/integration/*",
|
||||
"e2e:debug-build": "detox build -c android.debug",
|
||||
"e2e:debug-test": "detox test -c android.debug -d 200000 -l info",
|
||||
"e2e:debug": "(test -f android/app/build/outputs/apk/debug/app-debug.apk && test -f android/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk) || yarn e2e:debug-build; yarn e2e:debug-test",
|
||||
"e2e:debug": "(test -f android/app/build/outputs/apk/debug/app-debug.apk && test -f android/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk) || npm run e2e:debug-build; npm run e2e:debug-test",
|
||||
"e2e:release-build": "detox build -c android.release",
|
||||
"e2e:release-test": "detox test -c android.release",
|
||||
"tslint": "tsc",
|
||||
"lint": " yarn tslint && node scripts/find-unused-loc.js && eslint --ext .js,.ts,.tsx '*.@(js|ts|tsx)' screen 'blue_modules/*.@(js|ts|tsx)' class models loc tests components navigation typings",
|
||||
"lint:fix": "yarn lint --fix",
|
||||
"lint": " npm run tslint && node scripts/find-unused-loc.js && eslint --ext .js,.ts,.tsx '*.@(js|ts|tsx)' screen 'blue_modules/*.@(js|ts|tsx)' class models loc tests components navigation typings",
|
||||
"lint:fix": "npm run lint -- --fix",
|
||||
"lint:quickfix": "git status --porcelain | grep -v '\\.json' | grep -E '\\.js|\\.ts' --color=never | awk '{print $2}' | xargs eslint --fix; exit 0",
|
||||
"unit": "jest -b -w tests/unit/*"
|
||||
},
|
||||
|
@ -103,25 +103,24 @@
|
|||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/preset-env": "^7.20.0",
|
||||
"@babel/preset-env": "7.25.3",
|
||||
"@bugsnag/react-native": "7.25.0",
|
||||
"@bugsnag/source-maps": "2.3.3",
|
||||
"@keystonehq/bc-ur-registry": "0.6.4",
|
||||
"@lodev09/react-native-true-sheet": "0.12.4",
|
||||
"@lodev09/react-native-true-sheet": "github:BlueWallet/react-native-true-sheet#730a84b0261ef2dd2e7e9adadba7f260c7f76726",
|
||||
"@ngraveio/bc-ur": "1.1.12",
|
||||
"@remobile/react-native-qrcode-local-image": "github:BlueWallet/react-native-qrcode-local-image#31b0113110fbafcf5a5f3ca4183a563550f5c352",
|
||||
"@noble/secp256k1": "1.6.3",
|
||||
"@react-native-async-storage/async-storage": "1.24.0",
|
||||
"@react-native-clipboard/clipboard": "1.14.1",
|
||||
"@react-native-community/push-notification-ios": "1.11.0",
|
||||
"@react-native-menu/menu": "1.1.2",
|
||||
"@react-native/metro-config": "0.74.84",
|
||||
"@react-navigation/drawer": "6.7.2",
|
||||
"@react-navigation/native": "6.1.18",
|
||||
"@react-navigation/native-stack": "6.11.0",
|
||||
"@remobile/react-native-qrcode-local-image": "github:BlueWallet/react-native-qrcode-local-image#31b0113110fbafcf5a5f3ca4183a563550f5c352",
|
||||
"@rneui/base": "4.0.0-rc.8",
|
||||
"@rneui/themed": "4.0.0-rc.8",
|
||||
"@spsina/bip47": "github:BlueWallet/bip47#f4b8047c7efbe382c268b3074a4956698087f984",
|
||||
"@spsina/bip47": "github:BlueWallet/bip47#f4b8047",
|
||||
"aezeed": "0.0.5",
|
||||
"assert": "2.1.0",
|
||||
"base-x": "4.0.0",
|
||||
|
@ -130,7 +129,7 @@
|
|||
"bignumber.js": "9.1.1",
|
||||
"bip21": "2.0.3",
|
||||
"bip32": "3.0.1",
|
||||
"bip38": "github:BlueWallet/bip38#7ec4b1932b98eaaff16c5a26765a26466958e6b4",
|
||||
"bip38": "github:BlueWallet/bip38",
|
||||
"bip39": "3.1.0",
|
||||
"bitcoinjs-lib": "6.1.6",
|
||||
"bitcoinjs-message": "2.2.0",
|
||||
|
@ -142,7 +141,7 @@
|
|||
"detox": "20.25.1",
|
||||
"ecpair": "2.0.1",
|
||||
"ecurve": "1.0.6",
|
||||
"electrum-client": "github:BlueWallet/rn-electrum-client#1bfe3cc4249d5440b816baac942b0cfa921eebf9",
|
||||
"electrum-client": "github:BlueWallet/rn-electrum-client#1bfe3cc",
|
||||
"electrum-mnemonic": "2.0.0",
|
||||
"events": "3.3.0",
|
||||
"frisbee": "3.1.4",
|
||||
|
@ -154,38 +153,39 @@
|
|||
"process": "0.11.10",
|
||||
"prop-types": "15.8.1",
|
||||
"react": "18.2.0",
|
||||
"react-localization": "github:BlueWallet/react-localization#ae7969a8998128aebf1169f931fb22587dc5f874",
|
||||
"react-localization": "github:BlueWallet/react-localization#ae7969a",
|
||||
"react-native": "0.72.14",
|
||||
"react-native-biometrics": "3.0.1",
|
||||
"react-native-blue-crypto": "github:BlueWallet/react-native-blue-crypto#3cb5442425bd835e185284fbc62e84b7155bc441",
|
||||
"react-native-blue-crypto": "github:BlueWallet/react-native-blue-crypto#3cb5442",
|
||||
"react-native-camera-kit": "13.0.0",
|
||||
"react-native-crypto": "2.2.0",
|
||||
"react-native-default-preference": "1.4.4",
|
||||
"react-native-device-info": "11.1.0",
|
||||
"react-native-document-picker": "github:BlueWallet/react-native-document-picker#ba9299e01be6d0ddaa5f1b491406481a5ad0f315",
|
||||
"react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#3061e3055cbe0a9c7665b9c4b90912c30f668a3d",
|
||||
"react-native-document-picker": "9.3.0",
|
||||
"react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#v4.0.1",
|
||||
"react-native-fs": "2.20.0",
|
||||
"react-native-gesture-handler": "2.17.1",
|
||||
"react-native-handoff": "github:BlueWallet/react-native-handoff#31d005f93d31099d0e564590a3bbd052b8a02b39",
|
||||
"react-native-haptic-feedback": "2.2.0",
|
||||
"react-native-idle-timer": "github:BlueWallet/react-native-idle-timer#7300b637c465c86e8db874c442e687950111da40",
|
||||
"react-native-gesture-handler": "2.18.1",
|
||||
"react-native-handoff": "github:BlueWallet/react-native-handoff#v0.0.4",
|
||||
"react-native-haptic-feedback": "2.3.0",
|
||||
"react-native-idle-timer": "github:BlueWallet/react-native-idle-timer#v2.2.3",
|
||||
"react-native-image-picker": "7.1.2",
|
||||
"react-native-ios-context-menu": "github:BlueWallet/react-native-ios-context-menu#v1.15.3",
|
||||
"react-native-ios-context-menu": "github:BlueWallet/react-native-ios-context-menu#e5c1217cd220bfab6e6d9a7c65838545082e3f8e",
|
||||
"react-native-keychain": "8.2.0",
|
||||
"react-native-linear-gradient": "2.8.3",
|
||||
"react-native-localize": "3.2.0",
|
||||
"react-native-localize": "3.2.1",
|
||||
"react-native-obscure": "github:BlueWallet/react-native-obscure#f4b83b4a261e39b1f5ed4a45ac5bcabc8a59eadb",
|
||||
"react-native-permissions": "4.1.5",
|
||||
"react-native-privacy-snapshot": "github:BlueWallet/react-native-privacy-snapshot#529e4627d93f67752a27e82a040ff7b64dca0783",
|
||||
"react-native-prompt-android": "github:BlueWallet/react-native-prompt-android#ed168d66fed556bc2ed07cf498770f058b78a376",
|
||||
"react-native-privacy-snapshot": "github:BlueWallet/react-native-privacy-snapshot#529e4627d93f67752a27e82a040ff7b64dca0783",
|
||||
"react-native-push-notification": "8.1.1",
|
||||
"react-native-qrcode-svg": "6.3.1",
|
||||
"react-native-quick-actions": "0.3.13",
|
||||
"react-native-randombytes": "3.6.1",
|
||||
"react-native-rate": "1.2.12",
|
||||
"react-native-reanimated": "3.14.0",
|
||||
"@react-native/metro-config": "0.74.84",
|
||||
"react-native-safe-area-context": "4.10.8",
|
||||
"react-native-screens": "3.32.0",
|
||||
"react-native-screens": "3.33.0",
|
||||
"react-native-secure-key-store": "github:BlueWallet/react-native-secure-key-store#2076b4849e88aa0a78e08bfbb4ce3923e0925cbc",
|
||||
"react-native-share": "10.2.1",
|
||||
"react-native-svg": "13.14.1",
|
||||
|
@ -194,13 +194,12 @@
|
|||
"react-native-watch-connectivity": "1.1.0",
|
||||
"readable-stream": "3.6.2",
|
||||
"realm": "12.12.1",
|
||||
"rn-ldk": "github:BlueWallet/rn-ldk#v0.8.4",
|
||||
"rn-nodeify": "10.3.0",
|
||||
"scryptsy": "2.1.0",
|
||||
"silent-payments": "github:BlueWallet/SilentPayments#7ac4d17b85dc875a3ebb072883dd1d92ac286d98",
|
||||
"slip39": "github:BlueWallet/slip39-js#d316ee6a929ab645fe5462ef1c91720eb66889c8",
|
||||
"silent-payments": "github:BlueWallet/SilentPayments#7ac4d17",
|
||||
"slip39": "https://github.com/BlueWallet/slip39-js#d316ee6",
|
||||
"stream-browserify": "3.0.0",
|
||||
"url": "0.11.3",
|
||||
"url": "0.11.4",
|
||||
"wif": "2.0.6"
|
||||
},
|
||||
"react-native": {
|
||||
|
@ -216,14 +215,13 @@
|
|||
"stream": "stream-browserify"
|
||||
},
|
||||
"browser": {
|
||||
"_stream_duplex": "readable-stream/duplex",
|
||||
"_stream_passthrough": "readable-stream/passthrough",
|
||||
"_stream_readable": "readable-stream/readable",
|
||||
"_stream_transform": "readable-stream/transform",
|
||||
"_stream_writable": "readable-stream/writable",
|
||||
"crypto": "react-native-crypto",
|
||||
"path": "path-browserify",
|
||||
"_stream_transform": "readable-stream/transform",
|
||||
"_stream_readable": "readable-stream/readable",
|
||||
"_stream_writable": "readable-stream/writable",
|
||||
"_stream_duplex": "readable-stream/duplex",
|
||||
"_stream_passthrough": "readable-stream/passthrough",
|
||||
"stream": "stream-browserify"
|
||||
},
|
||||
"packageManager": "yarn@3.6.4"
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue