Merge branch 'master' into scanread

This commit is contained in:
marcosrdz 2020-12-18 17:04:22 -05:00
commit 2e6e8960c5
81 changed files with 954 additions and 697 deletions

View File

@ -1,5 +1,4 @@
/* eslint react/prop-types: "off", react-native/no-inline-styles: "off" */
/* global alert */
import React, { Component, useState, useMemo, useCallback, useContext } from 'react';
import PropTypes from 'prop-types';
import { Icon, Input, Text, Header, ListItem, Avatar } from 'react-native-elements';
@ -26,33 +25,30 @@ import {
} from 'react-native';
import Clipboard from '@react-native-community/clipboard';
import LinearGradient from 'react-native-linear-gradient';
import ActionSheet from './screen/ActionSheet';
import { LightningCustodianWallet, MultisigHDWallet } from './class';
import { BitcoinUnit } from './models/bitcoinUnits';
import * as NavigationService from './NavigationService';
import WalletGradient from './class/wallet-gradient';
import ToolTip from 'react-native-tooltip';
import { BlurView } from '@react-native-community/blur';
import { launchCamera, launchImageLibrary } from 'react-native-image-picker';
import showPopupMenu from 'react-native-popup-menu-android';
import NetworkTransactionFees, { NetworkTransactionFee, NetworkTransactionFeeType } from './models/networkTransactionFees';
import Biometric from './class/biometrics';
import { getSystemName } from 'react-native-device-info';
import { encodeUR } from 'bc-ur/dist';
import QRCode from 'react-native-qrcode-svg';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useNavigation, useTheme } from '@react-navigation/native';
import { BlueCurrentTheme } from './components/themes';
import loc, { formatBalance, formatBalanceWithoutSuffix, formatBalancePlain, removeTrailingZeros, transactionTimeToReadable } from './loc';
import Lnurl from './class/lnurl';
import { BlueStorageContext } from './blue_modules/storage-context';
import { presentCameraNotAuthorizedAlert } from './class/camera';
/** @type {AppStorage} */
const { height, width } = Dimensions.get('window');
const aspectRatio = height / width;
const BigNumber = require('bignumber.js');
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
const currency = require('./blue_modules/currency');
const fs = require('./blue_modules/fs');
let isIpad;
if (aspectRatio > 1.6) {
isIpad = false;
@ -1633,77 +1629,6 @@ export const BlueAddressInput = ({
launchedBy,
}) => {
const { colors } = useTheme();
const choosePhoto = () => {
launchImageLibrary(
{
title: null,
mediaType: 'photo',
takePhotoButtonTitle: null,
},
response => {
if (response.uri) {
const uri = Platform.OS === 'ios' ? response.uri.toString().replace('file://', '') : response.uri;
LocalQRCode.decode(uri, (error, result) => {
if (!error) {
onBarScanned(result);
} else {
alert(loc.send.qr_error_no_qrcode);
}
});
}
},
);
};
const takePhoto = () => {
launchCamera(
{
title: null,
mediaType: 'photo',
takePhotoButtonTitle: null,
},
response => {
if (response.uri) {
const uri = Platform.OS === 'ios' ? response.uri.toString().replace('file://', '') : response.uri;
LocalQRCode.decode(uri, (error, result) => {
if (!error) {
onBarScanned(result);
} else {
alert(loc.send.qr_error_no_qrcode);
}
});
} else if (response.error) {
presentCameraNotAuthorizedAlert(response.error);
}
},
);
};
const copyFromClipbard = async () => {
onBarScanned(await Clipboard.getString());
};
const showActionSheet = async () => {
const isClipboardEmpty = (await Clipboard.getString()).trim().length === 0;
let copyFromClipboardIndex;
if (Platform.OS === 'ios') {
const options = [loc._.cancel, loc.wallets.list_long_choose, isDesktop ? loc.wallets.take_photo : loc.wallets.list_long_scan];
if (!isClipboardEmpty) {
options.push(loc.wallets.list_long_clipboard);
copyFromClipboardIndex = options.length - 1;
}
ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, buttonIndex => {
if (buttonIndex === 1) {
choosePhoto();
} else if (buttonIndex === 2) {
takePhoto();
} else if (buttonIndex === copyFromClipboardIndex) {
copyFromClipbard();
}
});
}
};
return (
<View
@ -1739,7 +1664,7 @@ export const BlueAddressInput = ({
onPress={() => {
Keyboard.dismiss();
if (isDesktop) {
showActionSheet();
fs.showActionSheet().then(onBarScanned);
} else {
NavigationService.navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',

View File

@ -7,6 +7,8 @@ When you tag a new release, use the following example:
`git tag -m "REL v1.4.0: 157c9c2" v1.4.0`
You may get the commit hash from git log. Don't forget to push tags `git push origin --tags`
Alternative way to tag: `git tag -a v6.0.0 2e1a00609d5a0dbc91bcda2421df0f61bdfc6b10 -m "v6.0.0"`
When tagging a new release, make sure to increment version in package.json and other files (we have a script for that: `./scripts/edit-version-number.sh`)
In the commit where you up version you can have the commit message as
`"REL vX.X.X: Summary message"`.

View File

@ -0,0 +1 @@
export default from '@react-native-async-storage/async-storage/jest/async-storage-mock'

View File

@ -1 +0,0 @@
export default from '@react-native-community/async-storage/jest/async-storage-mock'

View File

@ -136,7 +136,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "6.0.0"
versionName "6.0.2"
multiDexEnabled true
missingDimensionStrategy 'react-native-camera', 'general'
testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type

View File

@ -1,4 +1,4 @@
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { Platform } from 'react-native';
import { AppStorage, LegacyWallet, SegwitBech32Wallet, SegwitP2SHWallet } from '../class';
import DefaultPreference from 'react-native-default-preference';

View File

@ -1,4 +1,4 @@
import { useAsyncStorage } from '@react-native-community/async-storage';
import { useAsyncStorage } from '@react-native-async-storage/async-storage';
import Clipboard from '@react-native-community/clipboard';
function BlueClipboard() {

View File

@ -1,5 +1,5 @@
import Frisbee from 'frisbee';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { AppStorage } from '../class';
import { FiatServerResponse, FiatUnit } from '../models/fiatUnit';
import DefaultPreference from 'react-native-default-preference';

View File

@ -7,6 +7,8 @@ import DocumentPicker from 'react-native-document-picker';
import isCatalyst from 'react-native-is-catalyst';
import { launchCamera, launchImageLibrary } from 'react-native-image-picker';
import { presentCameraNotAuthorizedAlert } from '../class/camera';
import Clipboard from '@react-native-community/clipboard';
import ActionSheet from '../screen/ActionSheet';
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
const writeFileAndExport = async function (filename, contents) {
@ -190,8 +192,43 @@ const showFilePickerAndReadFile = async function () {
}
};
// Intended for macOS Catalina. Not for long press shortcut
const showActionSheet = async () => {
const isClipboardEmpty = (await Clipboard.getString()).replace(' ', '').length === 0;
let copyFromClipboardIndex;
const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose];
if (!isClipboardEmpty) {
options.push(loc.wallets.list_long_clipboard);
copyFromClipboardIndex = options.length - 1;
}
options.push(loc.wallets.import_file);
const importFileButtonIndex = options.length - 1;
return new Promise(resolve =>
ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => {
if (buttonIndex === 1) {
takePhotoWithImagePickerAndReadPhoto().then(resolve);
} else if (buttonIndex === 2) {
showImagePickerAndReadImage()
.then(resolve)
.catch(error => alert(error.message));
} else if (buttonIndex === copyFromClipboardIndex) {
const clipboard = await Clipboard.getString();
resolve(clipboard);
} else if (importFileButtonIndex) {
const { data } = await showFilePickerAndReadFile();
if (data) {
resolve(data);
}
}
}),
);
};
module.exports.writeFileAndExport = writeFileAndExport;
module.exports.openSignedTransaction = openSignedTransaction;
module.exports.showFilePickerAndReadFile = showFilePickerAndReadFile;
module.exports.showImagePickerAndReadImage = showImagePickerAndReadImage;
module.exports.takePhotoWithImagePickerAndReadPhoto = takePhotoWithImagePickerAndReadPhoto;
module.exports.showActionSheet = showActionSheet;

View File

@ -2,7 +2,7 @@ import PushNotificationIOS from '@react-native-community/push-notification-ios';
import { Alert, Platform } from 'react-native';
import Frisbee from 'frisbee';
import { getApplicationName, getVersion, getSystemName, getSystemVersion } from 'react-native-device-info';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import loc from '../loc';
const PushNotification = require('react-native-push-notification');
const constants = require('./constants');

View File

@ -1,5 +1,5 @@
/* global alert */
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import RNSecureKeyStore, { ACCESSIBLE } from 'react-native-secure-key-store';
import {
HDLegacyBreadwalletWallet,

View File

@ -1,5 +1,5 @@
import { AppStorage, LightningCustodianWallet } from './';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import RNFS from 'react-native-fs';
import url from 'url';
import { Chain } from '../models/bitcoinUnits';

View File

@ -40,12 +40,14 @@ export class HodlHodlApi {
constructor(apiKey = false) {
this.baseURI = 'https://hodlhodl.com/';
this.apiKey = apiKey || 'cmO8iLFgx9wrxCe9R7zFtbWpqVqpGuDfXR3FJB0PSGCd7EAh3xgG51vBKgNTAF8fEEpS0loqZ9P1fDZt';
this.useragent = process.env.HODLHODL_USERAGENT || 'bluewallet';
this._api = new Frisbee({ baseURI: this.baseURI });
}
_getHeaders() {
return {
headers: {
'User-Agent': this.useragent,
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
Authorization: 'Bearer ' + this.apiKey,
@ -56,6 +58,7 @@ export class HodlHodlApi {
_getHeadersWithoutAuthorization() {
return {
headers: {
'User-Agent': this.useragent,
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
},

View File

@ -1,4 +1,4 @@
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
const BlueApp = require('../BlueApp');
export default class OnAppLaunch {

View File

@ -1,7 +1,7 @@
import QuickActions from 'react-native-quick-actions';
import { Platform } from 'react-native';
import { formatBalance } from '../loc';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useContext, useEffect } from 'react';
import { BlueStorageContext } from '../blue_modules/storage-context';

View File

@ -579,7 +579,7 @@ export class MultisigHDWallet extends AbstractHDElectrumWallet {
if (m && m.length === 3) {
let hexFingerprint = m[1].split('/')[0];
if (hexFingerprint.length === 8) {
hexFingerprint = Buffer.from(hexFingerprint, 'hex').reverse().toString('hex');
hexFingerprint = Buffer.from(hexFingerprint, 'hex').toString('hex');
}
const path = 'm/' + m[1].split('/').slice(1).join('/').replace(/[h]/g, "'");
@ -1085,4 +1085,8 @@ export class MultisigHDWallet extends AbstractHDElectrumWallet {
if (fp.length !== 8) return false;
return /^[0-9A-F]{8}$/i.test(fp);
}
allowBatchSend() {
return true;
}
}

View File

@ -20,6 +20,8 @@
32F0A29A2311DBB20095C559 /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F0A2992311DBB20095C559 /* ComplicationController.swift */; };
5875B7B2D85DC56E00F292FF /* libPods-WalletInformationWidgetExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC8A6C610EAE90F810EADCC /* libPods-WalletInformationWidgetExtension.a */; platformFilter = ios; };
590C62D2ED8BF487C33945B0 /* libPods-WalletInformationAndMarketWidgetExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 98455D960744E4E5DD50BA87 /* libPods-WalletInformationAndMarketWidgetExtension.a */; platformFilter = ios; };
6D2A6464258BA92D0092292B /* Stickers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6D2A6463258BA92D0092292B /* Stickers.xcassets */; };
6D2A6468258BA92D0092292B /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6D2A6461258BA92C0092292B /* Stickers.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
6D2AA7FA2568B8750090B089 /* FiatUnits.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6D2AA7F92568B8750090B089 /* FiatUnits.plist */; };
6D2AA7FB2568B8750090B089 /* FiatUnits.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6D2AA7F92568B8750090B089 /* FiatUnits.plist */; };
6D2AA7FC2568B8750090B089 /* FiatUnits.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6D2AA7F92568B8750090B089 /* FiatUnits.plist */; };
@ -118,6 +120,13 @@
remoteGlobalIDString = 3271B0A8236E2E0700DA766F;
remoteInfo = TodayExtension;
};
6D2A6466258BA92D0092292B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6D2A6460258BA92C0092292B;
remoteInfo = Stickers;
};
6D6CA4C1255872E7009312A5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
@ -176,6 +185,7 @@
dstPath = "";
dstSubfolderSpec = 13;
files = (
6D2A6468258BA92D0092292B /* Stickers.appex in Embed App Extensions */,
6D9946692555A661000E52E8 /* MarketWidgetExtension.appex in Embed App Extensions */,
6D6CA4C3255872E7009312A5 /* PriceWidgetExtension.appex in Embed App Extensions */,
6D9A2E0D254BA348007B5B82 /* WalletInformationAndMarketWidgetExtension.appex in Embed App Extensions */,
@ -298,6 +308,9 @@
6D294A9C24D512770039E22B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/MainInterface.strings; sourceTree = "<group>"; };
6D294A9D24D5127F0039E22B /* xh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = xh; path = xh.lproj/Interface.strings; sourceTree = "<group>"; };
6D294A9E24D512800039E22B /* xh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = xh; path = xh.lproj/MainInterface.strings; sourceTree = "<group>"; };
6D2A6461258BA92C0092292B /* Stickers.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Stickers.appex; sourceTree = BUILT_PRODUCTS_DIR; };
6D2A6463258BA92D0092292B /* Stickers.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Stickers.xcassets; sourceTree = "<group>"; };
6D2A6465258BA92D0092292B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
6D2AA7F92568B8750090B089 /* FiatUnits.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = FiatUnits.plist; sourceTree = "<group>"; };
6D2AA8072568B8F40090B089 /* FiatUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiatUnit.swift; sourceTree = "<group>"; };
6D333B3A252FE1A3004D72DF /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
@ -461,6 +474,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
8889F8F93C39BB72C97DD77E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
B40D4E39225841ED00428FCC /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@ -566,6 +586,15 @@
name = Resources;
sourceTree = "<group>";
};
6D2A6462258BA92C0092292B /* Stickers */ = {
isa = PBXGroup;
children = (
6D2A6463258BA92D0092292B /* Stickers.xcassets */,
6D2A6465258BA92D0092292B /* Info.plist */,
);
path = Stickers;
sourceTree = "<group>";
};
6D2AA8062568B8E50090B089 /* Fiat */ = {
isa = PBXGroup;
children = (
@ -664,6 +693,7 @@
B40D4E40225841ED00428FCC /* BlueWalletWatch Extension */,
3271B0AC236E2E0700DA766F /* TodayExtension */,
6DEB4B18254FB7D700E9F9AA /* Widgets */,
6D2A6462258BA92C0092292B /* Stickers */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
B40FE50A21FAD228005D5578 /* Recovered References */,
@ -686,6 +716,7 @@
6DEB4AAD254FB59B00E9F9AA /* WalletInformationWidgetExtension.appex */,
6D99465E2555A660000E52E8 /* MarketWidgetExtension.appex */,
6D6CA4B8255872E3009312A5 /* PriceWidgetExtension.appex */,
6D2A6461258BA92C0092292B /* Stickers.appex */,
);
name = Products;
sourceTree = "<group>";
@ -809,6 +840,7 @@
6D9946452555A583000E52E8 /* PBXTargetDependency */,
6D9946682555A661000E52E8 /* PBXTargetDependency */,
6D6CA4C2255872E7009312A5 /* PBXTargetDependency */,
6D2A6467258BA92D0092292B /* PBXTargetDependency */,
);
name = BlueWallet;
productName = "Hello World";
@ -832,6 +864,22 @@
productReference = 3271B0A9236E2E0700DA766F /* BlueWallet - Bitcoin Price.appex */;
productType = "com.apple.product-type.app-extension";
};
6D2A6460258BA92C0092292B /* Stickers */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6D2A646B258BA92D0092292B /* Build configuration list for PBXNativeTarget "Stickers" */;
buildPhases = (
6D2A645F258BA92C0092292B /* Resources */,
8889F8F93C39BB72C97DD77E /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Stickers;
productName = Stickers;
productReference = 6D2A6461258BA92C0092292B /* Stickers.appex */;
productType = "com.apple.product-type.app-extension.messages-sticker-pack";
};
6D6CA4B7255872E3009312A5 /* PriceWidgetExtension */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6D6CA4C6255872E7009312A5 /* Build configuration list for PBXNativeTarget "PriceWidgetExtension" */;
@ -963,6 +1011,9 @@
CreatedOnToolsVersion = 11.2;
LastSwiftMigration = 1130;
};
6D2A6460258BA92C0092292B = {
CreatedOnToolsVersion = 12.1;
};
6D6CA4B7255872E3009312A5 = {
CreatedOnToolsVersion = 12.1;
};
@ -1040,6 +1091,7 @@
6DEB4AAC254FB59B00E9F9AA /* WalletInformationWidgetExtension */,
6D9A2E01254BA347007B5B82 /* WalletInformationAndMarketWidgetExtension */,
6D6CA4B7255872E3009312A5 /* PriceWidgetExtension */,
6D2A6460258BA92C0092292B /* Stickers */,
);
};
/* End PBXProject section */
@ -1062,6 +1114,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
6D2A645F258BA92C0092292B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6D2A6464258BA92D0092292B /* Stickers.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
6D6CA4B6255872E3009312A5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@ -1376,6 +1436,11 @@
target = 3271B0A8236E2E0700DA766F /* TodayExtension */;
targetProxy = 3271B0B3236E2E0700DA766F /* PBXContainerItemProxy */;
};
6D2A6467258BA92D0092292B /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6D2A6460258BA92C0092292B /* Stickers */;
targetProxy = 6D2A6466258BA92D0092292B /* PBXContainerItemProxy */;
};
6D6CA4C2255872E7009312A5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
platformFilter = ios;
@ -1513,7 +1578,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1556,7 +1621,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1597,7 +1662,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
@ -1636,7 +1701,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
PRODUCT_NAME = "BlueWallet - Bitcoin Price";
@ -1649,6 +1714,66 @@
};
name = Release;
};
6D2A6469258BA92D0092292B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = Stickers/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
6D2A646A258BA92D0092292B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "iPhone Distribution";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = Stickers/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = Stickers;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
6D6CA4C4255872E7009312A5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@ -1675,7 +1800,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
@ -1717,7 +1842,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1757,7 +1882,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
@ -1800,7 +1925,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1841,7 +1966,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
@ -1885,7 +2010,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1926,7 +2051,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
@ -1969,7 +2094,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -2111,7 +2236,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
@ -2151,7 +2276,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
PRODUCT_NAME = "${TARGET_NAME}";
@ -2185,7 +2310,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
@ -2221,7 +2346,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.0.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -2257,6 +2382,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6D2A646B258BA92D0092292B /* Build configuration list for PBXNativeTarget "Stickers" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6D2A6469258BA92D0092292B /* Debug */,
6D2A646A258BA92D0092292B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6D6CA4C6255872E7009312A5 /* Build configuration list for PBXNativeTarget "PriceWidgetExtension" */ = {
isa = XCConfigurationList;
buildConfigurations = (

View File

@ -116,6 +116,8 @@
<string>public.app-category.finance</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>https</string>
<string>http</string>
<string>bankid</string>
<string>swish</string>
</array>
@ -143,7 +145,7 @@
<key>NSCalendarsUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<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>
<string>In order to quickly scan the recipient&apos;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>NSLocationAlwaysUsageDescription</key>

View File

@ -265,7 +265,7 @@ PODS:
- React
- react-native-geolocation (2.0.2):
- React
- react-native-image-picker (3.0.1):
- react-native-image-picker (3.1.1):
- React
- react-native-is-catalyst (1.0.0):
- React
@ -349,8 +349,8 @@ PODS:
- React
- RemobileReactNativeQrcodeLocalImage (1.0.4):
- React
- RNCAsyncStorage (1.12.1):
- React-Core
- RNCAsyncStorage (1.13.2):
- React
- RNCClipboard (1.5.0):
- React-Core
- RNCMaskedView (0.1.10):
@ -472,7 +472,7 @@ DEPENDENCIES:
- ReactNativePrivacySnapshot (from `../node_modules/react-native-privacy-snapshot`)
- RealmJS (from `../node_modules/realm`)
- "RemobileReactNativeQrcodeLocalImage (from `../node_modules/@remobile/react-native-qrcode-local-image`)"
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)"
@ -609,7 +609,7 @@ EXTERNAL SOURCES:
RemobileReactNativeQrcodeLocalImage:
:path: "../node_modules/@remobile/react-native-qrcode-local-image"
RNCAsyncStorage:
:path: "../node_modules/@react-native-community/async-storage"
:path: "../node_modules/@react-native-async-storage/async-storage"
RNCClipboard:
:path: "../node_modules/@react-native-community/clipboard"
RNCMaskedView:
@ -703,7 +703,7 @@ SPEC CHECKSUMS:
react-native-document-picker: c5752781fbc0c126c627c1549b037c139444a4cf
react-native-fingerprint-scanner: c68136ca57e3704d7bdf5faa554ea535ce15b1d0
react-native-geolocation: cbd9d6bd06bac411eed2671810f454d4908484a8
react-native-image-picker: 4efc5b7f3a780975bcc677335eb670e52d203424
react-native-image-picker: 510ea4e35cbe99ec92ecd89e9449e7e149c930e6
react-native-is-catalyst: 52ee70e0123c82419dd4ce47dc4cc94b22467512
react-native-randombytes: 991545e6eaaf700b4ee384c291ef3d572e0b2ca8
react-native-safe-area-context: 01158a92c300895d79dee447e980672dc3fb85a6
@ -724,7 +724,7 @@ SPEC CHECKSUMS:
ReactNativePrivacySnapshot: cc295e45dc22810e9ff2c93380d643de20a77015
RealmJS: 899b4839a8bee46e248bc277995ad58da855e41f
RemobileReactNativeQrcodeLocalImage: 57aadc12896b148fb5e04bc7c6805f3565f5c3fa
RNCAsyncStorage: cb9a623793918c6699586281f0b51cbc38f046f9
RNCAsyncStorage: bc2f81cc1df90c267ce9ed30bb2dbc93b945a8ee
RNCClipboard: 8f9f12fabf3c06e976f19f87a62c89e28dfedfca
RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459
RNCPushNotificationIOS: eaf01f848a0b872b194d31bcad94bb864299e01e

31
ios/Stickers/Info.plist Normal file
View File

@ -0,0 +1,31 @@
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>BlueWallet</string>
<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>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.message-payload-provider</string>
<key>NSExtensionPrincipalClass</key>
<string>StickerBrowserViewController</string>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,10 @@
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,9 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"filename" : "bitcoin-logo-png-transparent.png"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

View File

@ -0,0 +1,9 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"filename" : "marketing-1024x1024.png"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

View File

@ -0,0 +1,17 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"grid-size" : "regular"
},
"stickers" : [
{
"filename" : "Bitcoin.sticker"
},
{
"filename" : "BlueWallet.sticker"
}
]
}

View File

@ -0,0 +1,91 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"images" : [
{
"size" : "29x29",
"scale" : "2x",
"idiom" : "iphone",
"filename" : "icon-29x29@2x.png"
},
{
"scale" : "3x",
"idiom" : "iphone",
"size" : "29x29",
"filename" : "icon-29x29@3x.png"
},
{
"filename" : "icon-60x45@2x.png",
"scale" : "2x",
"idiom" : "iphone",
"size" : "60x45"
},
{
"scale" : "3x",
"idiom" : "iphone",
"filename" : "icon-60x45@3x.png",
"size" : "60x45"
},
{
"scale" : "2x",
"idiom" : "ipad",
"filename" : "icon-29x29~ipad@2x.png",
"size" : "29x29"
},
{
"size" : "67x50",
"scale" : "2x",
"filename" : "icon-67x50~ipad@2x.png",
"idiom" : "ipad"
},
{
"size" : "74x55",
"idiom" : "ipad",
"filename" : "icon-74x55~ipad@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"filename" : "marketing-1024x1024.png",
"scale" : "1x",
"idiom" : "ios-marketing"
},
{
"filename" : "icon-27x20@2x.png",
"platform" : "ios",
"size" : "27x20",
"idiom" : "universal",
"scale" : "2x"
},
{
"scale" : "3x",
"size" : "27x20",
"platform" : "ios",
"filename" : "icon-27x20@3x.png",
"idiom" : "universal"
},
{
"size" : "32x24",
"idiom" : "universal",
"filename" : "icon-32x24@2x.png",
"platform" : "ios",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "icon-32x24@3x.png",
"scale" : "3x",
"size" : "32x24",
"platform" : "ios"
},
{
"scale" : "1x",
"filename" : "marketing-1024x768.png",
"platform" : "ios",
"size" : "1024x768",
"idiom" : "ios-marketing"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -35,7 +35,7 @@ Private Schlüssel verlassen niemals Dein Gerät.
Du kontrollierst Deine privaten Schlüssel
Definierbare Transaktionsgebühren
Starting from 1 Satoshi. Defined by you, the user
Beginnend bei 1 Satoshi. Du entscheidest.
Replace-By-Fee
(RBF) Speed-up your transactions by increasing the fee (BIP125)

View File

@ -1,3 +1,15 @@
v6.0.1
======
* ADD: enable batch-send on multisig wallets
* FIX: Speed-up multisig wallets (disable handoff for multisig)
* FIX: Import Multisig from Specter Desktop - Fingerprint is Incorrect
* FIX: broken export .txn file on tx confirmation screen
* FIX: backup screen would flash during loading on dark mode
* FIX: Handle opening links if the default browser isnt Safari
* FIX: contradiction in Vaul introduction text
* FIX: localizations for CA, DE, ES, fa_IR, sl_SI, cs_CZ, pt_BR
v6.0.0
======
* ADD: Multisig
@ -86,32 +98,3 @@ v5.6.5
* FIX: locales nl_NL, ru
* FIX: Widget Fiat calculation
* FIX: 'RnSksIsAppInstalled' was being read from the wrong suite
v5.6.3
======
* ADD: Market Widget for iOS 14
* ADD: Large iOS widget
* ADD: Turkish Lira
* FIX: Refill not working on Lightning
* FIX: iOS - lightning:lnurl... links
* FIX: hodlhodl - my contracts - sorted by creation time
* FIX: scanQR now has progress bar when scanning animated QRs
* FIX: Backup screen visibility
* REF: brush up locales sl_SI, cs_CZ
* REF: Wallet types style
v5.6.2
======
* ADD: Privacy Settings Screen
* ADD: Clipboard read opt-out
* ADD: support lnurl fallback scheme
* ADD: import LNDHub from QR
* ADD: Electrum server import from QR
* ADD: Philippines Peso currency
* FIX: copy balance on wallet/transactions screen crash
* FIX: remove padding to prevent text concealment
* REF: show numeric keyboard when ask for numbers in prompt
* FIX: locales de_DE, sl_SI, ru, fi_FI, ja_JP, es, pt_BR
* REF: improve wallet import speed

View File

@ -1 +1 @@
BlueWallet - Cartera Bitcoin
BlueWallet Cartera de Bitcoin

View File

@ -1,7 +1,8 @@
* Open Source
* Volledig versleutelt
* Plausible deniability
* Plausibele ontkenning
* Aanpasbare transactievergoedingen
* Replace-By-Fee
* Watch-only (Sentinel)
* Lightning network
* SegWit
* Watch-only portomonnees
* Lightning network

View File

@ -1,48 +1,53 @@
Uma carteira de Bitcoin que permite guardar, enviar Bitcoin, receber Bitcoin e comprar Bitcoin, com foco na segurança e simplicidade.
Uma carteira Bitcoin que permite armazenar, enviar bitcoin, receber bitcoin e comprar bitcoin com foco em segurança e simplicidade.
Na BlueWallet, uma Carteira de Bitcoin em que você controla as chaves privadas. Uma Carteira de Bitcoin criada por utilizadores de Bitcoin para a comunidade.
BlueWallet é uma carteira de bitcoin onde você tem posse das chaves privadas. Uma carteira Bitcoin criada para a comunidade por usuários do Bitcoin.
Você pode fazer transações com qualquer pessoa no mundo e transformar o sistema financeiro diretamente do seu bolso.
Você pode fazer transações com qualquer pessoa no mundo e transformar o sistema financeiro direto do seu bolso.
Pode criar gratuitamente uma quantidade ilimitada de carteiras de Bitcoin ou importar as carteiras que já tem para o seu aplicativo BlueWallet. É fácil e rápido!
Crie um número ilimitado de carteiras de bitcoin gratuitamente ou importe sua carteira existente. É simples e fácil.
---
_____
O que você vai encontrar:
Entenda o que oferecemos:
1 - Segurança em primeiro lugar
Código aberto/Open Source
Com licença MIT, você pode construí-lo e executá-lo por conta própria. Feito em React Native.
1 - Criada com segurança em mente
Open Source
Licença MIT, você pode compilar e rodar a sua própria versão! Feita com ReactNative
Negação plausível
Senha falsa que decripta wallets falsas. Para casos especias onde possa ser obrigado a revelar a sua senha, pode revelar a senha falsa, mantenha as suas bitcoin protegidas.
Senha que descriptografa carteiras de bitcoin falsas para utilizar em situações de estresse
Encriptação completa
Construída em cima da multi-camada de criptografia do iOS, A BlueWallet criptografa tudo com uma adicional senha de usuário.
Totalmente criptografada
Além da criptografia multicamadas do iOS, criptografamos tudo com senhas adicionais
Carteiras SegWit e HD
SegWit suportado (Ajuda a diminuir as taxas ainda mais) e carteiras HD ativadas.
Nó completo
Conecte com seu full node Bitcoin usando Electrum
2 - Focada na sua experiência
Armazenamento frio (Cold)
Conecte com sua hardwallet e mantenha suas moedas em armazenamento frio
Esteja em control
As chaves privadas nunca deixam o celular, você controla as suas chaves privadas.
2 - Foco na sua experiência
Fique no controle
As chaves privadas nunca saem do dispositivo.
Você controla suas chaves privadas
Taxas flexíveis
A começar em 1 Satoshi. Não page a mais por transações.
A partir de 1 satoshi. Você decide
Substituição de Taxa (RBF)
Acelere as suas transações aumentando a taxa (BIP125). Pode também alterar o endereço de destinatário em transações não confirmadas.
Replace-By-Fee
(RBF) Acelere suas transações aumentando a taxa depois de enviar (BIP125)
Carteira de Watch-only
Carteira de Watch-only/assistir apenas, observe o seu armazenamento externo de Bitcoin sem ter de lhe tocar.
Carteiras Watch-only
Carteiras somente leitura para você observar seu armazenamento frio sem tocar a hardwallet.
Lightning Network
Carteira de Lightning sem configurações. Transações baratas e ultra rápidas com a melhor experiência do Bitcoin.
Carteira Lightning sem precisar configurar nada. Transações muito baratas e rápidas para ter a melhor experiência com o Bitcoin.
Comprar Bitcoin
Agora já pode comprar Bitcoin diretamente sem sair da sua carteira e com as suas chaves privadas.
Compre Bitcoin
Faça parte da revolução financeira aberta com a habilidade de comprar Bitcoin direto na sua carteira.
Local Trader
Plataforma p2p Bitcoin de trading, que permite comprar e vender bitcoin diretamente para outros usuários sem terceiros.
Trader local
Uma plataforma de negociação de Bitcoin p2p que permite comprar e vender bitcoin de outros usuários diretamente, sem terceiros.

View File

@ -1,7 +1,7 @@
Особенности
* Открытый исходный код
* Все данные шифруются
* Правдоподобное отрицание
* Двойное дно
* Гибкие настройки комиссии
* Lightning network
* Повышение комиссии за транзакцию (RBF)
* SegWit
* Lightning network

View File

@ -1,22 +1,22 @@
{
"_": {
"allow": "Povolit",
"bad_password": "Nesprávné heslo, zkuste to znovu.",
"cancel": "Zrušit",
"continue": "Pokračovat",
"dont_allow": "Nepovolit",
"enter_password": "Zadejte heslo",
"file_saved": "Soubor ({filePath}) byl uložen do složky Stažené soubory.",
"invalid_animated_qr_code_fragment": "Neplatný animovaný fragment QRCode, zkuste to prosím znovu",
"never": "nikdy",
"no": "Ne",
"of": "{number} z {total}",
"ok": "OK",
"storage_is_encrypted": "Vaše úložiště je zašifrované. Zadejte heslo k odemčení",
"allow": "Povolit",
"dont_allow": "Nepovolit",
"yes": "Ano",
"no": "Ne",
"save": "Uložit",
"seed": "Seed",
"storage_is_encrypted": "Vaše úložiště je zašifrované. Zadejte heslo k odemčení",
"wallet_key": "Klíč peněženky",
"yes": "Ano"
"invalid_animated_qr_code_fragment" : "Neplatný animovaný fragment QRCode, zkuste to prosím znovu",
"file_saved": "Soubor ({filePath}) byl uložen do složky Stažené soubory."
},
"azteco": {
"codeIs": "Váš kód voucheru je",
@ -27,16 +27,6 @@
"success": "Úspěch",
"title": "Uplatnit Azte.co voucher"
},
"cc": {
"change": "změnit",
"coins_selected": "Vybrané mince ({number})",
"empty": "Tato peněženka nemá v tuto chvíli žádné mince",
"freeze": "zmrazit",
"freezeLabel": "Zmrazit",
"header": "Kontrola mincí",
"tip": "Umožňuje zobrazit, označit, zmrazit nebo vybrat mince pro lepší správu peněženky.",
"use_coin": "Použít minci"
},
"entropy": {
"save": "Uložit",
"title": "Entropie",
@ -97,12 +87,6 @@
"offer_window": "okno",
"p2p": "P2P směnárna"
},
"is_it_my_address": {
"check_address": "Zkontrolujte adresu",
"enter_address": "Zadejte adresu:",
"owns": "{label} vlastní {address}",
"title": "Je to moje adresa?"
},
"lnd": {
"errorInvoiceExpired": "Faktura vypršela",
"exchange": "Směnárna",
@ -123,76 +107,14 @@
"lndViewInvoice": {
"additional_info": "dodatečné informace",
"for": "Pro:",
"has_been_paid": "Tato faktura byla uhrazena",
"lightning_invoice": "Lightning faktura",
"has_been_paid": "Tato faktura byla uhrazena",
"open_direct_channel": "Otevřít přímý kanál s tímto uzlem:",
"please_pay": "Prosím zaplaťte",
"preimage": "Předobraz",
"sats": "sats",
"wasnt_paid_and_expired": "Tato faktura nebyla zaplacena a její platnost vypršela."
},
"multisig": {
"are_you_sure_seed_will_be_lost": "Jsi si jistý(á)? Vaš mnemotechnický seed budou ztracen, pokud nemáte zálohu",
"co_sign_transaction": "Podepsat transakci",
"confirm": "Potvrdit",
"cosign_this_transaction": "Spolupodepsat transakci?",
"create": "Vytvořit",
"create_new_key": "Vytvořit novou",
"export_coordination_setup": "nastavení koordinace exportu",
"export_signed_psbt": "Exportovat podepsanou PSBT",
"fee": "Poplatek: {number}",
"fee_btc": "{number} BTC",
"forget_this_seed": "Zapomeňte na toto seed a použijte místo něj xpub",
"header": "Odeslat",
"how_many_signatures_can_bluewallet_make": "kolik podpisů může bluewallet udělat",
"i_have_mnemonics": "Mám seed pro tento klíč...",
"i_wrote_it_down": "Dobře, napsal jsem ji",
"input_fp": "Zadejte otisk prstu",
"input_fp_explain": "přeskočit a použít výchozí (00000000)",
"input_path": "Vložit derivační cestu",
"input_path_explain": "přeskočit a použít výchozí ({default})",
"invalid_cosigner": "Nejsou platná data spolupodepsaného",
"invalid_cosigner_format": "Nesprávný spolupodepsaný: toto není spolupodepsaný pro {format} formát",
"invalid_fingerprint": "Otisk pro tento seed neodpovídá tomuto otisku spolupodepisujícího",
"invalid_mnemonics": "Zdá se, že tato mnemotechnická fráze není platná",
"legacy_title": "Starší",
"lets_start": "Začněme",
"multisig_vault": "Uložiště",
"multisig_vault_explain": "Nejlepší zabezpečení pro velké částky",
"native_segwit_title": "Nejlepší praxe",
"needs": "Potřebuje",
"of": "z",
"please_write_down_mnemonics": "Napište tuto mnemotechnickou frázi na papír. Nebojte se, můžete si ji zapsat i později.",
"provide_key": "Poskytněte klíč",
"provide_signature": "Poskytnout podpis",
"quorum": "{m} z {n} kvorum",
"quorum_header": "Kvorum",
"required_keys_out_of_total": "Požadované klíče z celkového počtu",
"scan_or_import_file": "Naskenujte nebo importujte soubor",
"scan_or_open_file": "Naskenujte nebo otevřete soubor",
"share": "Sdílet",
"this_cosigner_is_already_imported": "Tento spolupodepisující je již importován",
"this_is_cosigners_xpub": "Toto je xpub spolupodepisujícího připravený k importu do jiné peněženky. Je bezpečné ho sdílet.",
"type_your_mnemonics": "Vložte seed k importu stávajícího klíče uložiště",
"vault_advanced_customize": "Nastavení úložiště...",
"vault_key": "Klíč úložiště {number}",
"view_edit_cosigners": "Zobrazit/upravit spolupodepisující",
"view_edit_cosigners_title": "Upravit spolupodepisující",
"view_key": "Podívat se",
"wallet_key_created": "Klíč k uložišti byl vytvořen. Udělejte si chvíli a bezpečně zálohujte svůj mnemotechnický seed",
"wallet_type": "Typ peněženky",
"what_is_vault": "Uložiště je",
"what_is_vault_description_number_of_vault_keys": " {m} klíčů uložiště",
"what_is_vault_description_to_spend": "k utracení a třetí můžete\npoužít jako zálohu.",
"what_is_vault_numberOfWallets": " {m}-z-{n} multisig ",
"what_is_vault_wallet": "peněženka",
"wrapped_segwit_title": "Nejlepší kompatibilita"
},
"notifications": {
"ask_me_later": "Zeptejte se mě později",
"no_and_dont_ask": "Ne, a už se mě znovu neptejte",
"would_you_like_to_receive_notifications": "Chcete dostávat oznámení o příchozích platbách?"
},
"plausibledeniability": {
"create_fake_storage": "Vytvořit zašifrované úložiště",
"create_password": "Vytvořit heslo",
@ -282,24 +204,24 @@
"input_done": "Hotovo",
"input_paste": "Vložit",
"input_total": "Celkem:",
"no_tx_signing_in_progress": "Neprobíhá žádné podepisování transakcí",
"open_settings": "Otevřít nastavení",
"permission_camera_message": "K použití fotoaparátu potřebujeme vaše povolení",
"permission_camera_title": "Povolení k použití kamery",
"permission_storage_denied_message": "BlueWallet nemůže tento soubor uložit. Otevřete nastavení zařízení a povolte oprávnění úložiště.",
"open_settings": "Otevřít nastavení",
"permission_storage_later": "Zeptejte se mě později",
"permission_storage_message": "BlueWallet potřebuje vaše oprávnění k přístupu k vašemu úložišti, aby mohl tento soubor uložit.",
"permission_storage_denied_message": "BlueWallet nemůže tento soubor uložit. Otevřete nastavení zařízení a povolte oprávnění úložiště.",
"permission_storage_title": "Povolení k přístupu do úložiště",
"problem_with_psbt": "Problém s PSBT",
"psbt_clipboard": "Zkopírovat do schránky",
"psbt_this_is_psbt": "Toto je částečně podepsaná bitcoinová transakce (PSBT). Dokončete podepisování pomocí hardwarové peněženky.",
"psbt_tx_export": "Export do souboru",
"no_tx_signing_in_progress": "Neprobíhá žádné podepisování transakcí",
"psbt_tx_open": "Otevřít podepsanou transakci",
"psbt_tx_scan": "Skenovat podepsanou transakci",
"qr_error_no_qrcode": "Vybraný obrázek neobsahuje QR kód.",
"qr_error_no_wallet": "Vybraný soubor neobsahuje peněženku, kterou lze importovat.",
"success_done": "Hotovo",
"txSaved": "Transakční soubor ({filePath}) byl uložen do složky Soubory ke stažení."
"txSaved": "Transakční soubor ({filePath}) byl uložen do složky Soubory ke stažení.",
"problem_with_psbt": "Problém s PSBT"
},
"settings": {
"about": "O BlueWallet",
@ -355,26 +277,34 @@
"network_electrum": "Electrum server",
"not_a_valid_uri": "Není platné URI",
"notifications": "Oznámení",
"open_link_in_explorer" : "Otevřít odkaz v průzkumníku",
"password": "Heslo",
"password_explain": "Vytořte si heslo k zašifrování úložiště.",
"passwords_do_not_match": "Hesla se neshodují",
"plausible_deniability": "Věrohodná popiratelnost",
"privacy": "Soukromí",
"privacy_clipboard_explanation": "Pokud se ve vaší schránce nachází adresa nebo faktura, zadejte zástupce.",
"privacy_quickactions": "Zástupci peněženky",
"privacy_quickactions_explanation": "Dlouhý stisk ikony BlueWallet na vaší výchozí obrazovce zobrazí váš zůstatek.",
"privacy_read_clipboard": "Kopírovat ze schránky",
"privacy_read_clipboard_alert": "BlueWallet zobrazí zástupce pro zpracování faktury nebo adresy nalezené ve vaší schránce.",
"privacy_system_settings": "Systémová nastavení",
"privacy_quickactions": "Zástupci peněženky",
"privacy_quickactions_explanation": "Dlouhý stisk ikony BlueWallet na vaší výchozí obrazovce zobrazí váš zůstatek.",
"privacy_clipboard_explanation": "Pokud se ve vaší schránce nachází adresa nebo faktura, zadejte zástupce.",
"push_notifications": "Push notifikace",
"retype_password": "Zadejte heslo znovu",
"save": "Uložit",
"saved": "Uloženo"
"saved": "Uloženo",
"success_transaction_broadcasted" : "Úspěch! Vaše transakce byla vysílána!"
},
"notifications": {
"would_you_like_to_receive_notifications": "Chcete dostávat oznámení o příchozích platbách?",
"no_and_dont_ask": "Ne, a už se mě znovu neptejte",
"ask_me_later": "Zeptejte se mě později"
},
"transactions": {
"cancel_explain": "Tuto transakci nahradíme transakcí, která vám platí a má vyšší poplatky. Tím se transakce účinně zruší. Tomu se říká RBF - Replace By Fee.",
"cancel_no": "Tato transakce není vyměnitelná",
"cancel_title": "Zrušit tuto transakci (RBF)",
"confirmations_lowercase": "{confirmations} potvrzení",
"cpfp_create": "Vytvořit",
"cpfp_exp": "Vytvoříme další transakci, která utratí vaši nepotvrzenou transakci. Celkový poplatek bude vyšší než původní transakční poplatek, takže by měl být těžen rychleji. Tomu se říká CPFP - dítě platí za rodiče.",
"cpfp_no_bump": "Tuto transakci nelze popostrčit",
@ -387,19 +317,19 @@
"details_inputs": "Vstupy",
"details_outputs": "Výstupy",
"details_received": "Přijato",
"transaction_note_saved":"Transakční poznámka byla úspěšně uložena.",
"details_show_in_block_explorer": "Ukázat v block exploreru",
"details_title": "Transakce",
"details_to": "Výstup",
"details_transaction_details": "Detaily transakce",
"enable_hw": "Tato peněženka se nepoužívá ve spojení s hardwarovou peněženkou. Chcete povolit použití hardwarové peněženky?",
"list_conf": "potvrz: {number}",
"list_title": "transakce",
"pending": "Čekající",
"list_title": "transakce",
"rbf_explain": "Tuto transakci nahradíme transakcí s vyšším poplatkem, takže by měla být těžena rychleji. Tomu se říká RBF - Replace By Fee.",
"rbf_title": "Poplatek za popostrčení (CPFP)",
"status_bump": "Poplatek za popostrčení",
"status_cancel": "Zrušit transakci",
"transaction_note_saved": "Transakční poznámka byla úspěšně uložena.",
"transactions_count": "počet transakcí"
},
"wallets": {
@ -467,17 +397,107 @@
"list_long_clipboard": "Kopírovat ze schránky",
"list_long_scan": "Naskenovat QR kód",
"list_tap_here_to_buy": "Koupit bitcoiny",
"no_ln_wallet_error": "Před zaplacením Lightning faktury musíte nejprve přidat Lightning peněženku.",
"list_title": "peněženky",
"list_tryagain": "Zkuste to znovu",
"looks_like_bip38": "Tohle vypadá jako soukromý klíč chráněný heslem (BIP38)",
"pull_to_refresh": "zatáhněte pro obnovení",
"reorder_title": "Seřadit peěženky",
"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. Vytvořte nebo importujte jednu.",
"select_wallet": "Vyberte peněženku",
"take_photo": "Vyfotit",
"warning_do_not_disclose": "Varování! Nezveřejňujte",
"xpub_copiedToClipboard": "Zkopírováno do schránky.",
"pull_to_refresh": "zatáhněte pro obnovení",
"warning_do_not_disclose": "Varování! Nezveřejňujte",
"add_ln_wallet_first": "Nejprve musíte přidat Lightning peněženku.",
"xpub_title": "XPUB peněženky"
},
"multisig": {
"multisig_vault": "Uložiště",
"multisig_vault_explain": "Nejlepší zabezpečení pro velké částky",
"provide_signature": "Poskytnout podpis",
"vault_key": "Klíč úložiště {number}",
"required_keys_out_of_total": "Požadované klíče z celkového počtu",
"fee": "Poplatek: {number}",
"fee_btc": "{number} BTC",
"confirm": "Potvrdit",
"header": "Odeslat",
"share": "Sdílet",
"view": "Podívat se",
"manage_keys": "Spravovat klíče",
"how_many_signatures_can_bluewallet_make": "kolik podpisů může bluewallet udělat",
"scan_or_import_file": "Naskenujte nebo importujte soubor",
"export_coordination_setup": "nastavení koordinace exportu",
"cosign_this_transaction": "Spolupodepsat transakci?",
"lets_start": "Začněme",
"create": "Vytvořit",
"provide_key": "Poskytněte klíč",
"native_segwit_title": "Nejlepší praxe",
"wrapped_segwit_title": "Nejlepší kompatibilita",
"legacy_title": "Starší",
"co_sign_transaction": "Podepsat transakci",
"what_is_vault": "Uložiště je",
"what_is_vault_numberOfWallets": " {m}-z-{n} multisig ",
"what_is_vault_wallet": "peněženka",
"vault_advanced_customize": "Nastavení úložiště...",
"needs": "Potřebuje",
"what_is_vault_description_number_of_vault_keys": " {m} klíčů uložiště",
"what_is_vault_description_to_spend": "k utracení a třetí můžete\npoužít jako zálohu.",
"quorum": "{m} z {n} kvorum",
"quorum_header": "Kvorum",
"of": "z",
"wallet_type": "Typ peněženky",
"view_key": "Podívat se",
"invalid_mnemonics": "Zdá se, že tato mnemotechnická fráze není platná",
"invalid_cosigner": "Nejsou platná data spolupodepsaného",
"invalid_cosigner_format": "Nesprávný spolupodepsaný: toto není spolupodepsaný pro {format} formát",
"create_new_key": "Vytvořit novou",
"scan_or_open_file": "Naskenujte nebo otevřete soubor",
"i_have_mnemonics": "Mám seed pro tento klíč...",
"please_write_down_mnemonics": "Napište tuto mnemotechnickou frázi na papír. Nebojte se, můžete si ji zapsat i později.",
"i_wrote_it_down": "Dobře, napsal jsem ji",
"type_your_mnemonics": "Vložte seed k importu stávajícího klíče uložiště",
"this_is_cosigners_xpub": "Toto je xpub spolupodepisujícího připravený k importu do jiné peněženky. Je bezpečné ho sdílet.",
"wallet_key_created": "Klíč k uložišti byl vytvořen. Udělejte si chvíli a bezpečně zálohujte svůj mnemotechnický seed",
"are_you_sure_seed_will_be_lost": "Jsi si jistý(á)? Vaš mnemotechnický seed budou ztracen, pokud nemáte zálohu",
"forget_this_seed": "Zapomeňte na tento seed a použijte XPUB",
"invalid_fingerprint": "Otisk pro tento seed neodpovídá tomuto otisku spolupodepisujícího",
"view_edit_cosigners": "Zobrazit/upravit spolupodepisující",
"this_cosigner_is_already_imported": "Tento spolupodepisující je již importován",
"export_signed_psbt": "Exportovat podepsanou PSBT",
"input_fp": "Zadejte otisk prstu",
"input_fp_explain": "přeskočit a použít výchozí (00000000)",
"input_path": "Vložit derivační cestu",
"input_path_explain": "přeskočit a použít výchozí ({default})",
"ms_help": "Pomoc",
"ms_help_title": "Jak fungují Vícepodpisová uložiště. Tipy a triky",
"ms_help_text": "Peněženka s více klíči, k exponenciálnímu zvýšení bezpečnosti nebo ke sdílené úschově.",
"ms_help_title1": "Doporučujeme použít více zařízení",
"ms_help_1": "Uložiště bude fungovat s dalšími aplikacemi BlueWallet a peněženkami kompatibilními s PSBT, jako jsou Electrum, Specter, Coldcard, Cobo vault atd.",
"ms_help_title2": "Editace klíčů",
"ms_help_2": "V tomto zařízení můžete vytvořit všechny klíče úložiště a tyto klíče později odebrat nebo upravit. Mít všechny klíče na stejném zařízení má ekvivalentní zabezpečení jako běžná bitcoinová peněženka.",
"ms_help_title3": "Zálohy úložiště",
"ms_help_3": "V možnostech peněženky najdete zálohu Uložiště a zálohu peněženek pouze pro sledování. Tato záloha je jako mapa do vaší peněženky. Je nezbytná pro obnovení peněženky v případě, že ztratíte jeden z vašich seedů.",
"ms_help_title4": "Import uložiště",
"ms_help_4": "Chcete-li importovat multisig, použijte záložní soubor multisig a použijte funkci importu. Pokud máte pouze rozšířené klíče a seedy, můžete použít jednotlivá pole importu v procesu Přidat uložiště.",
"ms_help_title5": "Pokročilé možnosti",
"ms_help_5": "Ve výchozím nastavení vygeneruje BlueWallet uložiště 2z3. Chcete-li vytvořit jiné kvorum nebo změnit typ adresy, aktivujte pokročilé možnosti v Nastavení."
},
"is_it_my_address": {
"title": "Je to moje adresa?",
"owns": "{label} vlastní {address}",
"enter_address": "Zadat adresu",
"check_address": "Zkontrolovat adresu",
"no_wallet_owns_address": "Žádná z dostupných peněženek nevlastní uvedenou adresu."
},
"cc": {
"change": "změnit",
"coins_selected": "Vybrané mince ({number})",
"empty": "Tato peněženka nemá v tuto chvíli žádné mince",
"freeze": "zmrazit",
"freezeLabel": "Zmrazit",
"header": "Kontrola mincí",
"use_coin": "Použít minci",
"tip": "Umožňuje zobrazit, označit, zmrazit nebo vybrat mince pro lepší správu peněženky."
}
}

View File

@ -304,6 +304,7 @@
"cancel_explain": "We will replace this transaction with the one that pays you and has higher fees. This effectively cancels transaction. This is called RBF—Replace by Fee.",
"cancel_no": "This transaction is not replaceable.",
"cancel_title": "Cancel this transaction (RBF)",
"confirmations_lowercase": "{confirmations} confirmations",
"cpfp_create": "Create",
"cpfp_exp": "We will create another transaction that spends your unconfirmed transaction. The total fee will be higher than the original transaction fee, so it should be mined faster. This is called CPFP - Child Pays For Parent.",
"cpfp_no_bump": "This transaction is not bumpable",
@ -443,6 +444,7 @@
"needs": "It needs",
"what_is_vault_description_number_of_vault_keys": " {m} vault keys ",
"what_is_vault_description_to_spend": "to spend and a third one you \ncan use as backup.",
"what_is_vault_description_to_spend_other": "to spend.",
"quorum": "{m} of {n} quorum",
"quorum_header": "Quorum",
"of": "of",

View File

@ -388,6 +388,7 @@
"cancel_explain": "Reemplazaremos esta transacción con la que te paga y tiene tasas más altas, lo que cancelará la transacción. A esto se le llama RBF (Replace By Fee).",
"cancel_no": "Esta transacción no se puede reemplazar",
"cancel_title": "Cancelar esta transacción (RBF)",
"confirmations_lowercase": "{confirmations} confirmaciones",
"cpfp_create": "Crear",
"cpfp_exp": "Crearemos otra transacción que gastará tu otra transacción aun no confirmada. La comisión total será mayor que la comisión original, lo cual debería hacer que sea minada antes. A esto se le llama CPFP (Child Pays For Parent).",
"cpfp_no_bump": "Esta transacción no se puede acelerar",

View File

@ -88,32 +88,32 @@
"p2p": "تبادل همتابه‌همتا"
},
"lnd": {
"errorInvoiceExpired": "فاکتور منقضی شد",
"errorInvoiceExpired": "صورت‌حساب منقضی شد",
"exchange": "تبادل",
"expired": "منقضی‌شده",
"expiredLow": "منقضی‌شده",
"expiresIn": "انقضا: {time}",
"payButton": "پرداخت",
"placeholder": "فاکتور",
"placeholder": "صورت‌حساب",
"potentialFee": "کارمزد احتمالی: {fee}",
"refill": "پرکردن",
"refill_card": "پرکردن با کارت بانکی",
"refill_create": "جهت ادامه، لطفاً یک کیف پول بیت‌کوین جهت پرکردن ایجاد کنید.",
"refill_external": "پرکردن با کیف پول خارجی",
"refill_lnd_balance": "پرکردن موجودی کیف پول لایتنینگ",
"sameWalletAsInvoiceError": "شما نمی‌توانید فاکتوری را با همان کیف پولی که برای ایجاد آن استفاده کرده‌اید بپردازید.",
"sameWalletAsInvoiceError": "شما نمی‌توانید صورت‌حسابی را با همان کیف پولی که برای ایجاد آن استفاده کرده‌اید بپردازید.",
"title": "مدیریت دارایی"
},
"lndViewInvoice": {
"additional_info": "اطلاعات بیشتر",
"for": "برای: ",
"lightning_invoice": "فاکتور لایتنینگ",
"has_been_paid": "این فاکتور پرداخت شده است",
"lightning_invoice": "صورت‌حساب لایتنینگ",
"has_been_paid": "این صورت‌حساب پرداخت شده است",
"open_direct_channel": "کانال مستقیمی با این گره باز کن:",
"please_pay": "لطفاً",
"preimage": "پیش‌نگاره",
"sats": "ساتوشی بپردازید",
"wasnt_paid_and_expired": "این فاکتور پرداخت نشده و منقضی شده است."
"wasnt_paid_and_expired": "این صورت‌حساب پرداخت نشده و منقضی شده است."
},
"plausibledeniability": {
"create_fake_storage": "ایجاد فضای ذخیره‌سازی رمزگذاری‌شده",
@ -173,7 +173,7 @@
"details_adv_full_sure": "آیا مطمئن هستید که می‌خواهید از کل موجودی کیف پولتان برای این تراکنش استفاده کنید؟",
"details_adv_import": "واردکردن تراکنش",
"details_amount_field_is_not_valid": "مقدار معتبر نیست",
"details_create": "ایجاد فاکتور",
"details_create": "ایجاد صورت‌حساب",
"details_error_decode": "خطا: ناموفق در رمزگشایی آدرس بیت‌کوین",
"details_fee_field_is_not_valid": "کارمزد معتبر نیست",
"details_next": "بعدی",
@ -284,11 +284,11 @@
"plausible_deniability": "انکار موجه",
"privacy": "حریم خصوصی",
"privacy_read_clipboard": "خواندن کلیپ‌بورد",
"privacy_read_clipboard_alert": "برنامهٔ BlueWallet میان‌برهایی را برای مدیریت فاکتور یا آدرس موجود در کلیپ‌بورد شما نمایش خواهد داد.",
"privacy_read_clipboard_alert": "برنامهٔ BlueWallet میان‌برهایی را برای مدیریت صورت‌حساب یا آدرس موجود در کلیپ‌بورد شما نمایش خواهد داد.",
"privacy_system_settings": "تنظیمات دستگاه",
"privacy_quickactions": "میان‌برهای کیف پول",
"privacy_quickactions_explanation": "آیکون برنامهٔ BlueWallet را در صفحهٔ اصلی لمس کرده و نگه دارید تا موجودی کیف پول خود را سریع مشاهده کنید.",
"privacy_clipboard_explanation": "اگر آدرس یا فاکتوری در کلیپ‌بورد شما پیدا شد، میان‌بر ارائه می‌دهد.",
"privacy_clipboard_explanation": "اگر آدرس یا صورت‌حسابی در کلیپ‌بورد شما پیدا شد، میان‌بر ارائه می‌دهد.",
"push_notifications": "پوش نوتیفیکیشن",
"retype_password": "گذرواژه را دوباره بنویسید",
"save": "ذخیره",
@ -304,6 +304,7 @@
"cancel_explain": "ما این تراکنش را با تراکنشی که گیرندهٔ آن شما هستید و کارمزد بیشتری دارد جایگزین خواهیم کرد. این درعمل تراکنش را لغو می‌کند. این کار Replace by Fee (به‌اختصار RBF) نام دارد—جایگزینی با کارمزد.",
"cancel_no": "این تراکنش قابل‌جایگزینی نیست.",
"cancel_title": "این تراکنش را لغو کن (RBF)",
"confirmations_lowercase": "{confirmations} تأیید",
"cpfp_create": "ایجاد",
"cpfp_exp": "ما تراکنش دیگری را ایجاد خواهیم کرد که تراکنش تأییدنشدهٔ شما را خرج می‌کند. کارمزد کل بالاتر از کارمزد تراکنش اصلی خواهد بود، بنابراین سریع‌تر استخراج می‌شود. این کار Child Pays for Parent (به‌اختصار CPFP) نام دارد—فرزند به‌جای والدین می‌پردازد.",
"cpfp_no_bump": "این تراکنش قابلیت افزایش کارمزد را ندارد.",
@ -349,7 +350,7 @@
"add_wallet_name": "نام",
"add_wallet_type": "نوع",
"clipboard_bitcoin": "شما یک آدرس بیت‌کوین در کلیپ‌بورد خود دارید. آیا می‌خواهید برای تراکنش از آن استفاده کنید؟",
"clipboard_lightning": "شما در کلیپ‌بورد خود یک فاکتور لایتنینگ دارید. آیا می‌خواهید برای تراکنش از آن استفاده کنید؟",
"clipboard_lightning": "شما در کلیپ‌بورد خود یک صورت‌حساب لایتنینگ دارید. آیا می‌خواهید برای تراکنش از آن استفاده کنید؟",
"details_address": "آدرس",
"details_advanced": "پیشرفته",
"details_are_you_sure": "مطمئن هستید؟",
@ -396,7 +397,7 @@
"list_long_clipboard": "کپی از کلیپ‌بورد",
"list_long_scan": "اسکن کد QR",
"list_tap_here_to_buy": "خرید بیت‌کوین",
"no_ln_wallet_error": "قبل از پرداخت یک فاکتور لایتنینگ، ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
"no_ln_wallet_error": "قبل از پرداخت یک صورت‌حساب لایتنینگ، ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
"list_title": "کیف پول‌ها",
"list_tryagain": "دوباره امتحان کنید",
"looks_like_bip38": "این به کلید خصوصی محافظت‌شده با گذرواژه (BIP38) شباهت دارد.",
@ -442,6 +443,7 @@
"needs": "به",
"what_is_vault_description_number_of_vault_keys": " {m} کلید گاوصندوق ",
"what_is_vault_description_to_spend": "برای خرج‌کردن نیاز داشته و یک کلید سوم\nکه می‌توانید برای تهیهٔ نسخهٔ پشتیبان از آن استفاده کنید.",
"what_is_vault_description_to_spend_other": "برای خرج‌کردن نیاز دارد.",
"quorum": "حد نصاب {m} از {n}",
"quorum_header": "حد نصاب",
"of": "از",

View File

@ -1,5 +1,5 @@
import Localization from 'react-localization';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import * as RNLocalize from 'react-native-localize';

View File

@ -1,26 +1,26 @@
{
"_": {
"allow": "Toestaan",
"bad_password": "Onjuist wachtwoord, probeer het opnieuw",
"cancel": "Annuleren",
"continue": "Doorgaan",
"dont_allow": "Niet toestaan",
"enter_password": "Voer wachtwoord in",
"file_saved": "Bestand ({filePath}) is opgeslagen in uw gedownloade bestanden.",
"invalid_animated_qr_code_fragment": "Ongeldig geanimeerde QRCode, probeer het opnieuw",
"never": "nooit",
"no": "Nee",
"of": "{number} van {total}",
"ok": "Oké",
"storage_is_encrypted": "Uw opslag is versleuteld. Wachtwoord is vereist om het te ontcijferen",
"allow": "Toestaan",
"dont_allow": "Niet toestaan",
"yes": "Ja",
"no": "Nee",
"save": "Opslaan",
"seed": "Seed",
"storage_is_encrypted": "Uw opslag is versleuteld. Wachtwoord is vereist om het te ontcijferen",
"wallet_key": "Wallet key",
"yes": "Ja"
"invalid_animated_qr_code_fragment" : "Ongeldig geanimeerde QRCode, probeer het opnieuw",
"file_saved": "Bestand ({filePath}) is opgeslagen in uw gedownloade bestanden."
},
"azteco": {
"codeIs": "De code van uw tegoedbon is",
"errorBeforeRefeem": "Voor het inlossen moet u eerst Bitcoin wallet toevoegen.",
"errorBeforeRefeem": "Voor het inlossen moet u eerst Bitcoin-wallet toevoegen.",
"errorSomething": "Er ging is verkeerd. Is deze tegoedbon nog geldig?",
"redeem": "Inlossen naar wallet.",
"redeemButton": "Inlossen",
@ -33,7 +33,7 @@
"undo": "Herstellen"
},
"errors": {
"broadcast": "Broadcast mislukt",
"broadcast": "Verzenden mislukt",
"error": "Fout",
"network": "Netwerkfout"
},
@ -49,7 +49,7 @@
"cont_how": "Hoe te betalen",
"cont_no": "U heeft geen lopende contracten",
"cont_paid": "Markeer contract als betaald",
"cont_paid_e": "Doe dit alleen als u geld naar de verkoper heeft gestuurd via de overeengekomen betalingsmethode",
"cont_paid_e": "Doe dit alleen als u tegoeden naar de verkoper heeft gestuurd via de overeengekomen betalingsmethode",
"cont_paid_q": "Weet u zeker dat u dit contract als betaald wilt markeren?",
"cont_selling": "verkopen",
"cont_st_completed": "Klaar!",
@ -98,15 +98,16 @@
"potentialFee": "Mogelijke fee: {fee}",
"refill": "Bijvullen",
"refill_card": "Bijvullen met bankpas",
"refill_create": "Om verder te gaan, moet u een Bitcoin wallet maken om mee te vullen.",
"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-portemonneesaldo bij",
"sameWalletAsInvoiceError": "U kunt geen factuur betalen met dezelfde portemonnee die is gebruikt om de factuur te maken.",
"title": "fondsen beheren"
"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"
},
"lndViewInvoice": {
"additional_info": "Extra informatie",
"for": "Voor:",
"lightning_invoice": "Lightning-factuur",
"has_been_paid": "Deze factuur is betaald",
"open_direct_channel": "Open een rechtstreeks kanaal met deze node:",
"please_pay": "Betaal alstublieft",
@ -114,69 +115,11 @@
"sats": "sats",
"wasnt_paid_and_expired": "Deze factuur is niet betaald en is verlopen"
},
"multisig": {
"are_you_sure_seed_will_be_lost": "Weet u het zeker? Uw mnemonic seed zal verloren gaan als u geen back-up heeft",
"co_sign_transaction": "Signeer een transactie",
"confirm": "Bevestig",
"cosign_this_transaction": "Deze transactie medeondertekenen?",
"create": "Maken",
"create_new_key": "Maak een nieuwe",
"export_coordination_setup": "export coördinatie setup",
"export_signed_psbt": "Ondertekende PSBT exporteren",
"fee": "Fee: {number}",
"fee_btc": "{number} BTC",
"forget_this_seed": "Vergeet deze seed en gebruik xpub",
"header": "Verzenden",
"how_many_signatures_can_bluewallet_make": "hoeveel handtekeningen kan BlueWallet maken",
"i_have_mnemonics": "Ik heb een seed voor deze key...",
"i_wrote_it_down": "Ok, ik heb het opgeschreven",
"invalid_cosigner": "Geen geldige mede-ondertekenaar gegevens",
"invalid_cosigner_format": "Onjuiste mede-ondertekenaar: dit is geen mede-ondertekenaar voor het {format} formaat",
"invalid_fingerprint": "Vingerafdruk voor dit seed komt niet overeen met de vingerafdruk van deze mede-ondertekenaar",
"invalid_mnemonics": "Deze mnemonic phrase lijkt niet te kloppen",
"legacy_title": "Legacy",
"lets_start": "Laten we beginnen",
"multisig_vault": "Kluis",
"multisig_vault_explain": "Beste beveiliging voor grote bedragen",
"native_segwit_title": "Beste oefening",
"needs": "Behoeften",
"of": "van",
"please_write_down_mnemonics": "Schrijf dit mnemonic phrase op papier. Maak je geen zorgen, je kunt het later opschrijven.",
"provide_key": "Geef de key op",
"provide_signature": "Geef een handtekening",
"quorum": "{m} van {n} quorum",
"quorum_header": "Quorum",
"required_keys_out_of_total": "Vereiste sleutels uit het totaal",
"scan_or_import_file": "Scan of importeer bestand",
"scan_or_open_file": "Scan of open bestand",
"share": "Delen",
"this_cosigner_is_already_imported": "Deze mede-ondertekenaar is al geïmporteerd",
"this_is_cosigners_xpub": "Dit is de xpub van mede-ondertekenaar, klaar om in een andere wallet te worden geïmporteerd. Het is veilig om het te delen.",
"type_your_mnemonics": "Voeg een seed in om uw bestaande kluissleutel te importeren",
"vault_advanced_customize": "Kluis-instellingen...",
"vault_key": "Kluisnummer {number}",
"view_edit_cosigners": "Bekijk/bewerk mede-ondertekenaars",
"view_edit_cosigners_title": "Bewerk mede-ontertekenaars",
"view_key": "bekijk",
"wallet_key_created": "Uw kluissleutel is gemaakt. Neem even de tijd om een veilige back-up van uw mnemonic seed te maken",
"wallet_type": "Wallettype",
"what_is_vault": "Een kluis is een",
"what_is_vault_description_number_of_vault_keys": "{m} kluissleutels",
"what_is_vault_description_to_spend": "te besteden en een 3e die u \nals back-up kunt gebruiken.",
"what_is_vault_numberOfWallets": "{m}-van-{n} multisig",
"what_is_vault_wallet": "wallet",
"wrapped_segwit_title": "Beste compatibiliteit"
},
"notifications": {
"ask_me_later": "Vraag het mij later",
"no_and_dont_ask": "Nee, en vraag het me niet nog een keer",
"would_you_like_to_receive_notifications": "Wil je meldingen ontvangen als je binnenkomende betalingen ontvangt?"
},
"plausibledeniability": {
"create_fake_storage": "Creëer versleutelde opslag",
"create_password": "Wachtwoord aanmaken",
"create_password_explanation": "Wachtwoord voor nep-opslag hoort niet overeen te komen met wachtwoord voor uw hoofdopslag",
"help": "Onder bepaalde omstandigheden kunt u worden gedwongen om uw wachtwoord te onthullen. Om uw munten veilig te houden, kan BlueWallet nog een versleutelde opslag aanmaken, met een ander wachtwoord. Onder druk kunt u dit wachtwoord bekendmaken aan de derde partij. Indien ingevoerd in BlueWallet, zal het nieuwe nep'-opslagruimte worden ontgrendeld. Dit lijkt legitiem voor de derde partij, maar zal uw hoofdopslag met munten niet bekend maken aan de derde partij.",
"help": "Onder bepaalde omstandigheden kunt u worden gedwongen om uw wachtwoord te onthullen. Om uw coins veilig te houden, kan BlueWallet nog een versleutelde opslag aanmaken, met een ander wachtwoord. Onder druk kunt u dit wachtwoord bekendmaken aan de derde partij. Indien ingevoerd in BlueWallet, zal het nieuwe nep'-opslagruimte worden ontgrendeld. Dit lijkt legitiem voor de derde partij, maar zal uw hoofdopslag met coins niet bekend maken aan de derde partij.",
"help2": "De nieuwe opslag zal volledig functioneel zijn en u kunt er een minimum aantal munten opslaan zodat het geloofwaardig lijkt.",
"password_should_not_match": "Wachtwoord is momenteel in gebruik. Probeer een ander wachtwoord.",
"passwords_do_not_match": "Wachtwoorden komen niet overeen, probeer het opnieuw",
@ -185,7 +128,7 @@
"title": "Plausibele ontkenning"
},
"pleasebackup": {
"ask": "Heeft u uw back-up zin opgeslagen? Deze back-up zin is nodig om toegang te krijgen tot uw gelden wanneer u dit apparaat verliest. Zonder de back-up zin zijn je gelden voor altijd verloren.",
"ask": "Heeft u uw back-up zin opgeslagen? Deze back-up zin is nodig om toegang te krijgen tot uw tegoeden wanneer u dit apparaat verliest. Zonder de back-up zin zijn je gelden voor altijd verloren.",
"ask_no": "Nee, dat heb ik niet",
"ask_yes": "Ja, dat heb ik.",
"ok": "Oké, ik heb het opgeschreven!",
@ -202,7 +145,7 @@
"header": "Ontvang"
},
"send": {
"broadcastButton": "UITZENDEN",
"broadcastButton": "Verzenden",
"broadcastError": "fout",
"broadcastNone": "Voer transactie-hash in",
"broadcastPending": "in afwachting",
@ -210,7 +153,7 @@
"confirm_header": "Bevestig",
"confirm_sendNow": "Nu verzenden",
"create_amount": "Bedrag",
"create_broadcast": "Uitzenden",
"create_broadcast": "Verzenden",
"create_copy": "Kopieer en verzend lader",
"create_details": "Details",
"create_fee": "Fee",
@ -240,7 +183,7 @@
"details_note_placeholder": "notitie voor mezelf",
"details_scan": "Scan",
"details_total_exceeds_balance": "Het verzendingsbedrag overschrijdt het beschikbare saldo.",
"details_wallet_before_tx": "Voor het maken van een transactie moet u eerst een Bitcoin wallet toevoegen.",
"details_wallet_before_tx": "Voor het maken van een transactie moet u eerst een Bitcoin-wallet toevoegen.",
"details_wallet_selection": "Wallet keuze",
"dynamic_init": "Initialiseren",
"dynamic_next": "Volgende",
@ -261,28 +204,29 @@
"input_done": "Klaar",
"input_paste": "Plak",
"input_total": "Totaal:",
"no_tx_signing_in_progress": "Er is geen ondertekening van een transactie bezig",
"open_settings": "Open instellingen",
"permission_camera_message": "We hebben toestemming nodig om uw camera te gebruiken",
"permission_camera_title": "Toestemming om camera te gebruiken",
"open_settings": "Open instellingen",
"permission_storage_later": "Vraag mij later",
"permission_storage_message": "BlueWallet heeft u toestemming nodig om toegang te krijgen tot uw opslag om deze transactie op te slaan.",
"permission_storage_denied_message": "BlueWallet kan dit bestand niet opslaan. Open uw apparaatinstellingen en schakel Opslagrechten in.",
"permission_storage_title": "BlueWallet opslag toegang toestemming",
"problem_with_psbt": "Probleem met PSBT",
"psbt_clipboard": "Gekopieerd naar Plakbord",
"psbt_this_is_psbt": "Dit is een gedeeltelijk ondertekende bitcoin-transactie (PSBT). Voltooi het door te ondertekenen met uw hardware wallet. ",
"psbt_this_is_psbt": "Dit is een gedeeltelijk ondertekende bitcoin-transactie (PSBT). Voltooi het door te ondertekenen met uw hardware-wallet. ",
"psbt_tx_export": "Exporteer naar bestand",
"no_tx_signing_in_progress": "Er is geen ondertekening van een transactie bezig",
"psbt_tx_open": "Open ondertekende transactie",
"psbt_tx_scan": "Scan ondertekende transactie",
"qr_error_no_qrcode": "De geselecteerde afbeelding bevat geen QR-code.",
"qr_error_no_wallet": "Het geselecteerde bestand bevat geen wallet die geïmporteerd kan worden.",
"success_done": "Klaar",
"txSaved": "Het transactiebestand ({filePath}) is opgeslagen in uw map Downloads."
"txSaved": "Het transactiebestand ({filePath}) is opgeslagen in uw map Downloads.",
"problem_with_psbt": "Probleem met PSBT"
},
"settings": {
"about": "Over",
"about_awesome": "Gebouwt met de geweldige",
"about_backup": "Maak altijd een backup van uw sleutels!",
"about_backup": "Maak altijd een backup van uw keys!",
"about_free": "BlueWallet is een gratis en open-source project. Gemaakt door Bitcoin gebruikers.",
"about_release_notes": "Release-opmerkingen",
"about_review": "Laat een review achter",
@ -321,38 +265,46 @@
"general_continuity": "Continuïteit",
"general_continuity_e": "Indien ingeschakeld, kunt u geselecteerde wallets en transacties bekijken met uw andere Apple iCloud-apparaten.",
"groundcontrol_explanation": "GroundControl is een gratis opensource-server voor pushmeldingen voor bitcoin-wallets. U kunt uw eigen GroundControl-server installeren en de URL hier plaatsen om niet te vertrouwen op de infrastructuur van BlueWallet. Laat leeg om standaard te gebruiken",
"header": "instellingen",
"header": "Instellingen",
"language": "Taal",
"language_restart": "Bij het selecteren van een nieuwe taal kan het nodig zijn om BlueWallet opnieuw op te starten om de wijziging door te voeren.",
"lightning_error_lndhub_uri": "Ongeldige LndHub URI",
"lightning_saved": "Uw wijzigingen zijn succesvol opgeslagen",
"lightning_settings": "Lightning instellingen",
"lightning_settings_explain": "Om verbinding te maken met uw eigen LND-node installeert u LndHub en plaatst u de URL hier in de instellingen. Laat dit leeg om de standaard lndHub (lndhub.io) te gebruiken.",
"lightning_settings": "Lightning-instellingen",
"lightning_settings_explain": "Om verbinding te maken met uw eigen LND-node installeert u LNDHub en plaatst u de URL hier in de instellingen. Laat dit leeg om de standaard LNDHub (lndhub.io) te gebruiken.",
"network": "Netwerk",
"network_broadcast": "Verzend transactie",
"network_electrum": "Electrum server",
"not_a_valid_uri": "Ongeldige URI",
"notifications": "Meldingen",
"open_link_in_explorer" : "Open link in verkenner",
"password": "Wachtwoord",
"password_explain": "Maak een wachtwoord aan dat u wilt gebruiken om de opslag te versleutelen",
"passwords_do_not_match": "Wachtwoorden komen niet overeen",
"plausible_deniability": "Plausibele ontkenning",
"privacy": "Privacy",
"privacy_clipboard_explanation": "Bied snelkoppelingen aan als een adres of factuur op uw klembord staat.",
"privacy_quickactions": "Wallet snelkoppelingen",
"privacy_quickactions_explanation": "Houd het BlueWallet-app-pictogram op uw startscherm ingedrukt om snel het saldo van uw wallet te bekijken.",
"privacy_read_clipboard": "Lees klembord",
"privacy_read_clipboard_alert": "BlueWallet geeft snelkoppelingen weer voor het afhandelen van een factuur of adres op uw klembord.",
"privacy_system_settings": "Systeeminstellingen",
"privacy_quickactions": "Wallet snelkoppelingen",
"privacy_quickactions_explanation": "Houd het BlueWallet-app-pictogram op uw startscherm ingedrukt om snel het saldo van uw wallet te bekijken.",
"privacy_clipboard_explanation": "Bied snelkoppelingen aan als een adres of factuur op uw klembord staat.",
"push_notifications": "Push notificaties",
"retype_password": "Geef nogmaals het wachtwoord op",
"save": "Opslaan",
"saved": "Opgeslagen"
"saved": "Opgeslagen",
"success_transaction_broadcasted" : "Gelukt! Uw transactie is verzonden!"
},
"notifications": {
"would_you_like_to_receive_notifications": "Wil je meldingen ontvangen als je binnenkomende betalingen ontvangt?",
"no_and_dont_ask": "Nee, en vraag het mij niet meer",
"ask_me_later": "Vraag het mij later"
},
"transactions": {
"cancel_explain": "We zullen deze transactie vervangen door degene die u betaalt en hogere fees heeft. Dit annuleert effectief de transactie. Dit heet RBF - Replace By Fee.",
"cancel_no": "Deze transactie is niet vervangbaar",
"cancel_title": "Annuleer deze transcatie (RBF)",
"confirmations_lowercase": "{confirmations} bevestigingen",
"cpfp_create": "Creëer",
"cpfp_exp": "We zullen een andere transactie creëren die uw niet-bevestigde transactie besteedt. De totale vergoeding is hoger dan de oorspronkelijke transactiekosten, dus deze moet sneller worden gemined. Dit heet CPFP - Child Pays For Parent.",
"cpfp_no_bump": "Deze transactie is niet bumpable",
@ -365,19 +317,20 @@
"details_inputs": "Inputs",
"details_outputs": "Outputs",
"details_received": "Ontvangen",
"transaction_note_saved":"Transactie notitie is succesvol opgeslagen.",
"details_show_in_block_explorer": "Weergeven in block explorer",
"details_title": "Transacties",
"details_to": "Uitvoer",
"details_transaction_details": "Transactie details",
"enable_hw": "Deze wallet wordt niet gebruikt in combinatie met een hardware wallet. Wilt u het gebruik van een hardware wallet inschakelen?",
"list_conf": "conf: {number}",
"list_title": "transacties",
"pending": "In afwachting",
"list_title": "Transacties",
"rbf_explain": "We zullen deze transactie vervangen door degene met een hogere fee, dus het zou sneller moeten worden gemined. Dit heet RBF - Replace By Fee.",
"rbf_title": "Bumb fee (RBF)",
"status_bump": "Bumb fee",
"status_cancel": "Annuleer transactie",
"transactions_count": "transactieteller"
"transactions_count": "Transactieteller"
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -391,11 +344,11 @@
"add_lightning_explain": "Voor uitgaven met directe transacties",
"add_lndhub": "Verbind met uw LNDHub",
"add_lndhub_error": "Het opgegeven node-adres is geen geldige LNDHub-node.",
"add_lndhub_placeholder": "uw node adres",
"add_lndhub_placeholder": "Uw node adres",
"add_or": "of",
"add_title": "wallet toevoegen",
"add_wallet_name": "naam",
"add_wallet_type": "type",
"add_title": "Wallet toevoegen",
"add_wallet_name": "Naam",
"add_wallet_type": "Type",
"clipboard_bitcoin": "U heeft een Bitcoin-adres op uw klembord. Wilt u deze gebruiken voor een transactie?",
"clipboard_lightning": "Je hebt een Lightning-factuur op je klembord. Wilt u deze gebruiken voor een transactie?",
"details_address": "Adres",
@ -404,10 +357,10 @@
"details_connected_to": "Verbonden met",
"details_del_wb": "Wallet saldo",
"details_del_wb_err": "Het opgegeven saldo komt niet overeen met het saldo van deze wallet. Probeer het a.u.b. opnieuw",
"details_del_wb_q": "Deze wallet heeft een saldo. Voordat u verder gaat, moet u er rekening mee houden dat u het geld niet kunt terugkrijgen zonder de seed phrase van deze wallet. Om te voorkomen dat deze wallet per ongeluk wordt verwijderd, moet u het saldo van {balance} satoshis in uw wallet invoeren.",
"details_del_wb_q": "Deze wallet heeft een saldo. Voordat u verder gaat, moet u er rekening mee houden dat u de tegoeden niet kunt terugkrijgen zonder de seed phrase van deze wallet. Om te voorkomen dat deze wallet per ongeluk wordt verwijderd, moet u het saldo van {balance} satoshis in uw wallet invoeren.",
"details_delete": "Verwijderen",
"details_delete_wallet": "Verwijder wallet",
"details_display": "toon in wallet lijst",
"details_display": "Toon in wallet-lijst",
"details_export_backup": "Exporteren / back-up maken",
"details_marketplace": "Marktplaats",
"details_master_fingerprint": "Master vingerafdruk",
@ -416,11 +369,11 @@
"details_show_xpub": "Toon wallet XPUB",
"details_title": "Wallet",
"details_type": "Type",
"details_use_with_hardware_wallet": "Gebruik met hardware wallet",
"details_use_with_hardware_wallet": "Gebruik met hardware-wallet",
"details_wallet_updated": "Wallet bijgewerkt",
"details_yes_delete": "Ja, verwijder",
"enter_bip38_password": "Voer wachtwoord in om te ontgrendelen",
"export_title": "wallet exporteren",
"export_title": "Wallet exporteren",
"import_do_import": "Importeren",
"import_error": "Importeren mislukt. Zorg ervoor dat de verstrekte gegevens geldig zijn.",
"import_explanation": "Schrijf hier je mnemonic phrase, private key, WIF of wat je maar hebt. BlueWallet zal zijn best doen om het juiste formaat te raden en uw wallet te importeren",
@ -428,23 +381,24 @@
"import_imported": "Geïmporteerd",
"import_scan_qr": "QR-code scannen of importeren?",
"import_success": "Succes",
"import_title": "importeren",
"import_title": "Importeren",
"list_create_a_button": "Voeg nu toe",
"list_create_a_wallet": "Wallet aanmaken",
"list_create_a_wallet_text": "Het is gratis en u kunt \ner zoveel maken als u wilt",
"list_empty_txs1": "Uw transacties verschijnen hier",
"list_empty_txs1_lightning": "Lightning-wallet moet worden gebruikt voor uw dagelijkse transacties. De fees zijn oneerlijk goedkoop en het is razendsnel.",
"list_empty_txs2": "Begin met uw wallet",
"list_empty_txs2_lightning": "\nOm het te gebruiken, tikt u op \"beheer fondsen\" en laadt u uw saldo op.",
"list_empty_txs2_lightning": "\nOm het te gebruiken, tikt u op \"tegoeden beheren\" en laadt u uw saldo op.",
"list_header": "Een wallet vertegenwoordigt een paar keys, een private en een die u kunt delen om coins te ontvangen.",
"list_import_error": "Er is een fout opgetreden bij het importeren van deze wallet.",
"list_import_problem": "Er is een probleem opgetreden bij het importeren van deze wallet",
"list_latest_transaction": "laatste transactie",
"list_latest_transaction": "Laatste transactie",
"list_long_choose": "Kies foto",
"list_long_clipboard": "Kopiëren van klembord",
"list_long_scan": "Scan QR-code",
"list_tap_here_to_buy": "Koop Bitcoin",
"list_title": "wallets",
"no_ln_wallet_error": "Voordat u een Lightning-factuur betaalt, moet u eerst een Lightning-wallet toevoegen.",
"list_title": "Wallets",
"list_tryagain": "Probeer opnieuw",
"looks_like_bip38": "Dit lijkt op een met een wachtwoord beveiligde private key (BIP38)",
"reorder_title": "Wallets opnieuw ordenen",
@ -453,6 +407,97 @@
"select_wallet": "Selecteer wallet",
"take_photo": "Maak foto",
"xpub_copiedToClipboard": "Gekopieerd naar het klembord.",
"xpub_title": "wallet XPUB"
"pull_to_refresh": "Pull om te refreshen.",
"warning_do_not_disclose": "Waarschuwing! Niet bekendmaken",
"add_ln_wallet_first": "U moet eerst een Lightning-wallet toevoegen.",
"xpub_title": "Wallet XPUB"
},
"multisig": {
"multisig_vault": "Kluis",
"multisig_vault_explain": "Beste beveiliging voor grote bedragen",
"provide_signature": "Geef een handtekening",
"vault_key": "Vault key {number}",
"required_keys_out_of_total": "Vereiste keys uit het totaal",
"fee": "Fee: {number}",
"fee_btc": "{number} BTC",
"confirm": "Bevestig",
"header": "Verzenden",
"share": "Delen",
"view": "Bekijken",
"manage_keys": "Beheer keys",
"how_many_signatures_can_bluewallet_make": "Hoeveel handtekeningen kan BlueWallet maken",
"scan_or_import_file": "Scan of importeer bestand",
"export_coordination_setup": "Export coördinatie setup",
"cosign_this_transaction": "Deze transactie medeondertekenen?",
"lets_start": "Laten we beginnen",
"create": "Maken",
"provide_key": "Geef de key op",
"native_segwit_title": "Beste oefening",
"wrapped_segwit_title": "Beste compatibiliteit",
"legacy_title": "Legacy",
"co_sign_transaction": "Signeer een transactie",
"what_is_vault": "Een kluis is een",
"what_is_vault_numberOfWallets": "{m}-van-{n} multisig",
"what_is_vault_wallet": "Wallet",
"vault_advanced_customize": "Vault-instellingen...",
"needs": "Het is nodig",
"what_is_vault_description_number_of_vault_keys": "{m} Vault Keys",
"what_is_vault_description_to_spend": "te besteden en een 3e die u \nals back-up kunt gebruiken.",
"quorum": "{m} van {n} quorum",
"quorum_header": "Quorum",
"of": "van",
"wallet_type": "Wallettype",
"view_key": "Bekijk",
"invalid_mnemonics": "Deze mnemonic phrase lijkt niet te kloppen",
"invalid_cosigner": "Geen geldige mede-ondertekenaar gegevens",
"invalid_cosigner_format": "Onjuiste mede-ondertekenaar: dit is geen mede-ondertekenaar voor het {format} formaat",
"create_new_key": "Maak een nieuwe",
"scan_or_open_file": "Scan of open bestand",
"i_have_mnemonics": "Ik heb een seed voor deze key...",
"please_write_down_mnemonics": "Schrijf dit mnemonic phrase op papier. Maak je geen zorgen, je kunt het later opschrijven.",
"i_wrote_it_down": "Ok, ik heb het opgeschreven",
"type_your_mnemonics": "Voeg een seed in om uw bestaande Vault key te importeren",
"this_is_cosigners_xpub": "Dit is de XPUB van mede-ondertekenaar, klaar om in een andere wallet te worden geïmporteerd. Het is veilig om het te delen.",
"wallet_key_created": "Uw Vault key is gemaakt. Neem even de tijd om een veilige back-up van uw mnemonic seed te maken",
"are_you_sure_seed_will_be_lost": "Weet u het zeker? Uw mnemonic seed zal verloren gaan als u geen back-up heeft",
"forget_this_seed": "Vergeet deze seed en gebruik XPUB",
"invalid_fingerprint": "Vingerafdruk voor dit seed komt niet overeen met de vingerafdruk van deze mede-ondertekenaar",
"view_edit_cosigners": "Bekijk/bewerk mede-ondertekenaars",
"this_cosigner_is_already_imported": "Deze mede-ondertekenaar is al geïmporteerd",
"export_signed_psbt": "Ondertekende PSBT exporteren",
"input_fp": "Vingerafdruk invoeren",
"input_fp_explain": "Overslaan om de standaard te gebruiken (00000000)",
"input_path": "Voer het derivation path in",
"input_path_explain": "Sla over om de standaard te gebruiken ({default})",
"ms_help": "Help",
"ms_help_title": "Hoe Multisig Vaults werken. Tips en trucs",
"ms_help_text": "Een wallet met meerdere keys, om de veiligheid exponentieel te verhogen of voor gedeelde bewaring.",
"ms_help_title1": "Meerdere apparaten worden geadviseerd",
"ms_help_1": "De Vault werkt met andere BlueWallet-apps en PSBT-compatibele wallets, zoals Electrum, Spectre, Coldcard, Cobo-kluis, enz.",
"ms_help_title2": "Keys bewerken",
"ms_help_2": "U kunt alle Vault-keys op dit apparaat maken en deze keys later verwijderen of bewerken. Het hebben van alle keys op hetzelfde apparaat heeft dezelfde beveiliging als een gewone Bitcoin-wallet.",
"ms_help_title3": "Vault Back-ups",
"ms_help_3": "Op de wallet-opties vindt u uw Vault back-up en watch-only back-up. Deze back-up is als een routekaart voor uw wallet. Het is essentieel voor het herstel van uw wallet voor het geval u een van uw seeds verliest.",
"ms_help_title4": "Vaults importeren",
"ms_help_4": "Om een Multisig te importeren, gebruikt u uw multisig back-upbestand en de importfunctie. Als u alleen uitgebreide keys en seeds heeft, kunt u de afzonderlijke importvelden in het Vaults Toevoegen schema gebruiken.",
"ms_help_title5": "Geavanceerde opties",
"ms_help_5": "BlueWallet genereert standaard een 2of3 Vault. Activeer de geavanceerde opties in de Instellingen om een ander quorum te creëren of om het adrestype te wijzigen."
},
"is_it_my_address": {
"title": "Is het mijn adres?",
"owns": "{label} eigen {address}",
"enter_address": "Adres invoeren",
"check_address": "Adres checken",
"no_wallet_owns_address": "Geen van de beschikbare wallets bezit het opgegeven adres."
},
"cc": {
"change": "Veranderen",
"coins_selected": "Geselecteerde coins ({number})",
"empty": "Deze wallet heeft momenteel geen coins",
"freeze": "Bevriezen",
"freezeLabel": "Bevriezen",
"header": "Coin Control",
"use_coin": "Gebruik Coin",
"tip": "Hiermee kunt u coins zien, labelen, bevriezen of selecteren voor verbeterd walletbeheer."
}
}

View File

@ -1,22 +1,22 @@
{
"_": {
"allow": "Permitir",
"bad_password": "Senha incorreta, tente outra vez.",
"cancel": "Cancelar",
"continue": "Continuar",
"dont_allow": "Não Permitir",
"enter_password": "Insira a senha",
"file_saved": "O arquivo ({filePath}) foi salvo na pasta Downloads.",
"invalid_animated_qr_code_fragment": "Código QR animado inválido, tente novamente",
"never": "nunca",
"no": "Não",
"of": "{number} de {total}",
"ok": "OK",
"storage_is_encrypted": "Os arquivos estão criptografados, uma senha é necessária para descriptografá-los",
"allow": "Permitir",
"dont_allow": "Não Permitir",
"yes": "Sim",
"no": "Não",
"save": "Salvar",
"seed": "Seed",
"storage_is_encrypted": "Os arquivos estão criptografados, uma senha é necessária para descriptografá-los",
"wallet_key": "Wallet key",
"yes": "Sim"
"invalid_animated_qr_code_fragment" : "Código QR animado inválido, tente novamente",
"file_saved": "O arquivo ({filePath}) foi salvo na pasta Downloads."
},
"azteco": {
"codeIs": "Seu código voucher é",
@ -27,16 +27,6 @@
"success": "Sucesso",
"title": "Resgatar voucher Azte.co"
},
"cc": {
"change": "troco",
"coins_selected": "Moedas selecionadas ({number})",
"empty": "Esta carteira ainda não tem nenhuma moeda",
"freeze": "congelar",
"freezeLabel": "Congelar",
"header": "Controle de moedas",
"tip": "Permite que você veja, marque, congele ou selecione moedas para gerenciar melhor sua carteira.",
"use_coin": "Usar moeda"
},
"entropy": {
"save": "Salvar",
"title": "Entropia",
@ -117,6 +107,7 @@
"lndViewInvoice": {
"additional_info": "Informação Adicional",
"for": "Para:",
"lightning_invoice": "Fatura Lightning",
"has_been_paid": "O boleto foi pago",
"open_direct_channel": "Abrir canal direto com este node:",
"please_pay": "Pagar",
@ -124,68 +115,6 @@
"sats": "sats",
"wasnt_paid_and_expired": "Este boleto não foi pago e expirou"
},
"multisig": {
"are_you_sure_seed_will_be_lost": "Você tem certeza? Sua seed mnemônica será perdida se você não tiver um backup",
"co_sign_transaction": "Assinar uma transação",
"confirm": "Confirmar",
"cosign_this_transaction": "Assinar esta transação?",
"create": "Criar",
"create_new_key": "Criar nova",
"export_coordination_setup": "exportação de \"apenas assistir\"",
"export_signed_psbt": "Exportar PSBT assinado",
"fee": "Taxa: {number}",
"fee_btc": "{number} BTC",
"forget_this_seed": "Remover seed e use a chave (xpub)",
"header": "Enviar",
"how_many_signatures_can_bluewallet_make": "quantas assinaturas o bluewallet pode fazer",
"i_have_mnemonics": "Eu tenho uma seed para esta chave...",
"i_wrote_it_down": "Ok, eu anotei",
"input_fp": "Inserir fingerprint",
"input_fp_explain": "pule para usar a padrão (00000000)",
"input_path": "Inserir path de derivação",
"input_path_explain": "pule para usar o padrão ({default})",
"invalid_cosigner": "Dados não válidos de assinante",
"invalid_cosigner_format": "Signatário incorreto: este não é um signatário para o formato {format}",
"invalid_fingerprint": "A \"fingerprint\" desta seed não corresponde à \"fingerprint\" do co-signatário ",
"invalid_mnemonics": "Esta frase mnemônica não parece ser válida",
"legacy_title": "Antigo",
"lets_start": "Vamos começar",
"multisig_vault": "Cofre",
"multisig_vault_explain": "Segurança para grandes quantidades",
"native_segwit_title": "Melhor prática",
"needs": "Necessita",
"of": "de",
"please_write_down_mnemonics": "Escreva esta frase mnemônica no papel. Não se preocupe, você pode escrever mais tarde.",
"provide_key": "Forneça a chave",
"provide_signature": "Fornece assinatura",
"quorum": "{m} de {n} quorum",
"quorum_header": "Quorum",
"required_keys_out_of_total": "Chaves obrigatórias do total",
"scan_or_import_file": "Scan ou importar arquivo",
"scan_or_open_file": "Scan ou abrir arquivo",
"share": "Ver",
"this_cosigner_is_already_imported": "Este co-signatário já foi importado",
"this_is_cosigners_xpub": "Esta é a chave da carteira do co-signatário, pronta para ser importada para outra carteira. É seguro compartilhá-lo.",
"type_your_mnemonics": "Insira uma seed para importar a sua chave do cofre",
"vault_advanced_customize": "Configurações do Cofre...",
"vault_key": "Chave do cofre {número}",
"view_edit_cosigners": "Ver/editar chaves do cofre",
"view_edit_cosigners_title": "Editar co-signatários",
"view_key": "ver",
"wallet_key_created": "Sua chave do cofre foi criada. Reserve um momento para fazer backup com segurança de sua seed.",
"wallet_type": "Tipo de carteira",
"what_is_vault": "Um Cofre é um",
"what_is_vault_description_number_of_vault_keys": "{m} chaves do cofre",
"what_is_vault_description_to_spend": "para gastar e um terceiro você\npode usar como backup.",
"what_is_vault_numberOfWallets": "{m}-de-{n} multisig",
"what_is_vault_wallet": "wallet",
"wrapped_segwit_title": "Melhor compatibilidade"
},
"notifications": {
"ask_me_later": "Me pergunte mais tarde",
"no_and_dont_ask": "Não e não me pergunte de novo",
"would_you_like_to_receive_notifications": "Gostaria de receber notificações quando receber pagamentos?"
},
"plausibledeniability": {
"create_fake_storage": "Criar armazenamento criptografada falsa",
"create_password": "Criar senha",
@ -275,24 +204,24 @@
"input_done": "Feito",
"input_paste": "Colar",
"input_total": "Total:",
"no_tx_signing_in_progress": "Não há assinatura de transação em andamento",
"open_settings": "Abrir configurações",
"permission_camera_message": "Precisamos de sua permissão para usar sua câmera",
"permission_camera_title": "Permissão para usar a câmera",
"permission_storage_denied_message": "A BlueWallet não conseguiu salvar o arquivo. Abra as configurações do seu dispositivo e ative a permissão de armazenamento.",
"open_settings": "Abrir configurações",
"permission_storage_later": "Me pergunte mais tarde",
"permission_storage_message": "A BlueWallet precisa da sua permissão para acessar seu armazenamento e salvar o arquivo.",
"permission_storage_denied_message": "A BlueWallet não conseguiu salvar o arquivo. Abra as configurações do seu dispositivo e ative a permissão de armazenamento.",
"permission_storage_title": "Permissão de acesso ao armazenamento",
"problem_with_psbt": "Problema com a PSBT",
"psbt_clipboard": "Copiar para área de transferência",
"psbt_this_is_psbt": "Esta é uma transação bitcoin parcialmente assinada (PSBT). Por favor, termine de assiná-la com sua carteira de hardware.",
"psbt_tx_export": "Exportar para arquivo",
"no_tx_signing_in_progress": "Não há assinatura de transação em andamento",
"psbt_tx_open": "Abrir transação assinada",
"psbt_tx_scan": "Scanear transação assinada",
"qr_error_no_qrcode": "A imagem selecionada não contém um Código QR",
"qr_error_no_wallet": "O arquivo selecionado não contém uma carteira que possa ser importada.",
"success_done": "Enviado",
"txSaved": "O arquivo de transação ({filePath}) foi salvo na pasta Downloads."
"txSaved": "O arquivo de transação ({filePath}) foi salvo na pasta Downloads.",
"problem_with_psbt": "Problema com a PSBT"
},
"settings": {
"about": "Sobre",
@ -348,26 +277,34 @@
"network_electrum": "Servidor Electrum",
"not_a_valid_uri": "Não é um URI válido",
"notifications": "Notificações",
"open_link_in_explorer" : "Abrir link no explorador",
"password": "Senha",
"password_explain": "Definir a senha para descriptografar os arquivos",
"passwords_do_not_match": "Senhas não conferem",
"plausible_deniability": "Negação plausível...",
"privacy": "Privacidade",
"privacy_clipboard_explanation": "Fornece atalhos se um endereço ou boleto for encontrado em sua área de transferência.",
"privacy_quickactions": "Atalhos da carteira",
"privacy_quickactions_explanation": "Toque e segure o ícone do aplicativo BlueWallet em sua tela inicial para visualizar rapidamente o saldo de sua carteira.",
"privacy_read_clipboard": "Leia a área de transferência",
"privacy_read_clipboard_alert": "A BlueWallet exibirá atalhos para lidar com um boleto ou endereço encontrado em sua área de transferência.",
"privacy_system_settings": "Configurações do sistema",
"privacy_quickactions": "Atalhos da carteira",
"privacy_quickactions_explanation": "Toque e segure o ícone do aplicativo BlueWallet em sua tela inicial para visualizar rapidamente o saldo de sua carteira.",
"privacy_clipboard_explanation": "Fornece atalhos se um endereço ou boleto for encontrado em sua área de transferência.",
"push_notifications": "Notificações via push",
"retype_password": "Inserir senha novamente",
"save": "Salvar",
"saved": "Salvo"
"saved": "Salvo",
"success_transaction_broadcasted" : "Sucesso! Sua transação foi transmitida!"
},
"notifications": {
"would_you_like_to_receive_notifications": "Gostaria de receber notificações quando receber pagamentos?",
"no_and_dont_ask": "Não e não me pergunte de novo",
"ask_me_later": "Me pergunte mais tarde"
},
"transactions": {
"cancel_explain": "Substituiremos esta transação por aquela que lhe paga e tem taxas mais altas. Isso efetivamente cancela a transação. Isso é chamado de RBF - Substituir por Taxa.",
"cancel_no": "Esta transação não é substituível",
"cancel_title": "Cancelar esta transação (RBF)",
"confirmations_lowercase": "{confirmations} confirmações",
"cpfp_create": "Criar",
"cpfp_exp": "Criaremos outra transação que gasta sua transação não confirmada. A taxa total será maior do que a taxa de transação original, portanto, deve ser confirmada mais rapidamente. Isso é chamado de CPFP - Child Pays For Parent.",
"cpfp_no_bump": "Esta transação não pode ser Bumpeada",
@ -380,14 +317,15 @@
"details_inputs": "Inputs",
"details_outputs": "Outputs",
"details_received": "Recebido",
"transaction_note_saved":"Anotação da transação salva com sucesso.",
"details_show_in_block_explorer": "Mostrar num navegador",
"details_title": "Transação",
"details_to": "Para",
"details_transaction_details": "Detalhes",
"enable_hw": "Esta carteira não está sendo usada em conjunto com uma carteira de hardware. Gostaria de habilitar o uso da carteira de hardware?",
"list_conf": "conf: {number}",
"list_title": "Transações",
"pending": "Pendente",
"list_title": "Transações",
"rbf_explain": "Substituiremos essa transação por outra com uma taxa mais alta, portanto, ela deve ser confirmada mais rapidamente. Isso é chamado de RBF - Substituir por Taxa.",
"rbf_title": "Aumento de taxa (RBF)",
"status_bump": "Aumento de taxa",
@ -459,16 +397,107 @@
"list_long_clipboard": "Copiar da área de transferência",
"list_long_scan": "Ler QR Code",
"list_tap_here_to_buy": "Comprar Bitcoin",
"no_ln_wallet_error": "Antes de pagar uma fatura Lightning você deve adicionar uma carteira Lightning.",
"list_title": "carteiras",
"list_tryagain": "Tente Novamente",
"looks_like_bip38": "Parece uma chave privada protegida por senha (BIP38)",
"pull_to_refresh": "puxe para atualizar",
"reorder_title": "Reordenar carteiras",
"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 um.",
"select_wallet": "Escolher carteira",
"take_photo": "Registrar Foto",
"xpub_copiedToClipboard": "Copiado para a área de transferência",
"pull_to_refresh": "puxe para atualizar",
"warning_do_not_disclose": "Cuidado! Não divulgue",
"add_ln_wallet_first": "Primeiro você deve adicionar uma carteira Lightning.",
"xpub_title": "XPUB"
},
"multisig": {
"multisig_vault": "Cofre",
"multisig_vault_explain": "Segurança para grandes quantidades",
"provide_signature": "Fornece assinatura",
"vault_key": "Chave do cofre {número}",
"required_keys_out_of_total": "Chaves obrigatórias do total",
"fee": "Taxa: {number}",
"fee_btc": "{number} BTC",
"confirm": "Confirmar",
"header": "Enviar",
"share": "Ver",
"view": "Exibir",
"manage_keys": "Gerenciar chaves",
"how_many_signatures_can_bluewallet_make": "quantas assinaturas o bluewallet pode fazer",
"scan_or_import_file": "Scan ou importar arquivo",
"export_coordination_setup": "exportação de \"apenas assistir\"",
"cosign_this_transaction": "Assinar esta transação?",
"lets_start": "Vamos começar",
"create": "Criar",
"provide_key": "Forneça a chave",
"native_segwit_title": "Melhor prática",
"wrapped_segwit_title": "Melhor compatibilidade",
"legacy_title": "Antigo",
"co_sign_transaction": "Assinar uma transação",
"what_is_vault": "Um Cofre é um",
"what_is_vault_numberOfWallets": "{m}-de-{n} multisig",
"what_is_vault_wallet": "wallet",
"vault_advanced_customize": "Configurações do Cofre...",
"needs": "Necessita",
"what_is_vault_description_number_of_vault_keys": "{m} chaves do cofre",
"what_is_vault_description_to_spend": "para gastar e um terceiro você\npode usar como backup.",
"quorum": "{m} de {n} quorum",
"quorum_header": "Quorum",
"of": "de",
"wallet_type": "Tipo de carteira",
"view_key": "ver",
"invalid_mnemonics": "Esta frase mnemônica não parece ser válida",
"invalid_cosigner": "Dados não válidos de assinante",
"invalid_cosigner_format": "Signatário incorreto: este não é um signatário para o formato {format}",
"create_new_key": "Criar nova",
"scan_or_open_file": "Scan ou abrir arquivo",
"i_have_mnemonics": "Eu tenho uma seed para esta chave...",
"please_write_down_mnemonics": "Escreva esta frase mnemônica no papel. Não se preocupe, você pode escrever mais tarde.",
"i_wrote_it_down": "Ok, eu anotei",
"type_your_mnemonics": "Insira uma seed para importar a sua chave do cofre",
"this_is_cosigners_xpub": "Esta é a chave da carteira do co-signatário, pronta para ser importada para outra carteira. É seguro compartilhá-lo.",
"wallet_key_created": "Sua chave do cofre foi criada. Reserve um momento para fazer backup com segurança de sua seed.",
"are_you_sure_seed_will_be_lost": "Você tem certeza? Sua seed mnemônica será perdida se você não tiver um backup",
"forget_this_seed": "Esquecer esta seed e usar XPUB",
"invalid_fingerprint": "A \"fingerprint\" desta seed não corresponde à \"fingerprint\" do co-signatário ",
"view_edit_cosigners": "Ver/editar chaves do cofre",
"this_cosigner_is_already_imported": "Este co-signatário já foi importado",
"export_signed_psbt": "Exportar PSBT assinado",
"input_fp": "Inserir fingerprint",
"input_fp_explain": "pule para usar a padrão (00000000)",
"input_path": "Inserir path de derivação",
"input_path_explain": "pule para usar o padrão ({default})",
"ms_help": "Ajuda",
"ms_help_title": "Como os Cofres Multisig funcionam. Dicas e manhas",
"ms_help_text": "Uma carteira com várias chaves, para aumentar exponencialmente a segurança ou para custódia compartilhada.",
"ms_help_title1": "Recomendamos usar dispositivos diferentes",
"ms_help_1": "O Cofre vai funcionar com outros apps BlueWallet e carteiras compatíveis com PSBT como Electrum, Specter, Coldcard, Cobo Vault, etc.",
"ms_help_title2": "Editando chaves",
"ms_help_2": "Você pode criar todas as chaves do Cofre neste dispositivo e remover ou editar as chaves depois. Ter todas as chaves armazenadas no mesmo dispositivo oferece a mesma segurança de uma carteira de Bitcoin normal.",
"ms_help_title3": "Backups do Cofre",
"ms_help_3": "Nas opções da carteira você irá encontrar backup do Cofre e backup somente-leitura. Esse backup é como um mapa da sua carteira. Ele é essencial para recuperar a carteira caso você perca qualquer uma de suas seeds.",
"ms_help_title4": "Importando Cofres",
"ms_help_4": "Para importar uma Multisig, use o arquivo de backup da sua multisig e o recurso de importação. Se você só tem chaves estendidas (xpubs) e seeds, você pode usar os campos de importação individuais na interface de Adicionar Cofre.",
"ms_help_title5": "Opções avançadas",
"ms_help_5": "Por padrão, a BlueWallet vai gerar um Cofre 2 de 3. Para criar um quorum diferente ou alterar o tipo de endereço, ative as opções avançadas nas Configurações."
},
"is_it_my_address": {
"title": "É o meu endereço?",
"owns": "{label} possui {address}",
"enter_address": "Insira o endereço",
"check_address": "Verificar endereço",
"no_wallet_owns_address": "Nenhuma das carteiras disponíveis possui o endereço fornecido."
},
"cc": {
"change": "troco",
"coins_selected": "Moedas selecionadas ({number})",
"empty": "Esta carteira ainda não tem nenhuma moeda",
"freeze": "congelar",
"freezeLabel": "Congelar",
"header": "Controle de moedas",
"use_coin": "Usar moeda",
"tip": "Permite que você veja, marque, congele ou selecione moedas para gerenciar melhor sua carteira."
}
}

View File

@ -277,6 +277,7 @@
"network_electrum": "Electrum strežnik",
"not_a_valid_uri": "Neveljaven URI",
"notifications": "Obvestila",
"open_link_in_explorer" : "Odpri v raziskovalcu blokov",
"password": "Geslo",
"password_explain": "Ustvarite geslo za dešifriranje shrambe",
"passwords_do_not_match": "Gesli se ne ujemata",
@ -291,7 +292,8 @@
"push_notifications": "Potisna obvestila",
"retype_password": "Ponovno vpišite geslo",
"save": "Shrani",
"saved": "Shranjeno"
"saved": "Shranjeno",
"success_transaction_broadcasted" : "Vaša transakcija je bila objavljena!"
},
"notifications": {
"would_you_like_to_receive_notifications": "Želite prikaz obvestil ob prejemu plačila?",
@ -302,6 +304,7 @@
"cancel_explain": "To transakcijo bomo nadomestili z novo, ki plača višjo omrežnino. To prekliče prejšnjo transakcijo. To se imenuje RBF - Replace By Fee.",
"cancel_no": "Ta transakcija ni zamenljiva.",
"cancel_title": "Prekliči to transakcijo (RBF)",
"confirmations_lowercase": "potrditev: {confirmations}",
"cpfp_create": "Ustvari",
"cpfp_exp": "Ustvarjena bo nova transakcija, ki porabi vašo nepotrjeno transakcijo. Skupna omrežnina bo višja od omrežnine prvotne transakcije, zato bi morala biti potrditev hitrejša. To se imenuje CPFP - Child Pays For Parent.",
"cpfp_no_bump": "Tej transakciji ni mogoče povečati omrežnine",
@ -468,17 +471,17 @@
"input_path_explain": "preskoči in uporabi privzeto ({default})",
"ms_help": "Pomoč",
"ms_help_title": "Kako delujejo Multisig trezorji. Namigi in triki",
"ms_help_text": "Denarnica z več ključi, za eksponentno povečanje varnosti ali skupno upravljanje sredstev.",
"ms_help_text": "Denarnica z več ključi eksponentno poveča varnost. Omogoča skupno upravljanje sredstev.",
"ms_help_title1": "Priporočena uporaba več naprav",
"ms_help_1": "Trezor deluje z aplikacijo BlueWallet nameščeno na drugih napravah ter s PSBT združljivimi denarnicami, kot so: Electrum, Specter, Coldcard, Cobo vault,...",
"ms_help_title2": "Urejanje ključev",
"ms_help_2": "V tej napravi lahko ustvarite vse ključe trezorja in jih kasneje odstranite ali uredite. Varnost je v primeru, da so vsi ključi na isti napravi enaka, kot če gre za običajno Bitcoin denarnico.",
"ms_help_title3": "Varnostna kopija",
"ms_help_3": "Med možnostmi denarnice najdete varnostno kopijo trezorja in podatke za opazovalno (watch-only) denarnico. Ta varnostna kopija je kot zemljevid poti do vaše denarnice. Ob izgubi katerega od semen (ključev), jo boste potrebovali za obnovitev denarnice.",
"ms_help_3": "Med možnostmi denarnice najdete varnostno kopijo trezorja in podatke za opazovalno (watch-only) denarnico. Ta varnostna kopija je kot zemljevid poti do vaše denarnice. Ob izgubi katerega od semen (ključev), jo boste potrebovali za obnovitev.",
"ms_help_title4": "Uvoz trezorja",
"ms_help_4": "Trezor lahko uvozite z uporabo funkcije uvoza in izbiro datoteke z varnostno kopijo. Če imate samo razširjene ključe in semena, lahko uporabite posamezna polja za uvoz pri ustvarjanju ključev trezorja.",
"ms_help_4": "Trezor lahko uvozite z uporabo funkcije uvoza in izbiro datoteke z varnostno kopijo. Če imate samo semena in razširjene ključe, lahko uporabite posamezna polja za uvoz pri ustvarjanju ključev trezorja.",
"ms_help_title5": "Napredne možnosti",
"ms_help_5": "Privzeto bo ustvarjen trezor 2 od 3. Za ustvarjanje trezorja, ki ima drugačen kvorum ali tip naslova, v nastavitvah omogočite napredni način."
"ms_help_5": "Privzeto bo ustvarjen trezor 2 od 3. Za ustvarjanje trezorja, ki ima drugačen kvorum ali tip naslova v nastavitvah omogočite napredni način."
},
"is_it_my_address": {
"title": "Je to moj naslov?",

50
package-lock.json generated
View File

@ -1,14 +1,37 @@
{
"name": "bluewallet",
"version": "6.0.0",
"version": "6.0.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@amplitude/eslint-config-typescript": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@amplitude/eslint-config-typescript/-/eslint-config-typescript-1.1.0.tgz",
"integrity": "sha512-N8sKkwtFakPD2/cSOrBnM5Wudjp4qeDD69U1cG7dZ6DDczxBhUEqnJDJ0wiYmKMPXqr+bmFOsDdbCcOmb/CLYA=="
},
"@amplitude/types": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@amplitude/types/-/types-1.1.0.tgz",
"integrity": "sha512-aJebJlI1hfRrzsbcRzW1heTDEClhElwEJ4ODyYZbBacKzH29q3OKZCkgNfaEYdxfgLpoDSh/ffHYpl7fWm3SQA==",
"requires": {
"@amplitude/eslint-config-typescript": "^1.1.0"
}
},
"@amplitude/ua-parser-js": {
"version": "0.7.24",
"resolved": "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.24.tgz",
"integrity": "sha512-VbQuJymJ20WEw0HtI2np7EdC3NJGUWi8+Xdbc7uk8WfMIF308T0howpzkQ3JFMN7ejnrcSM/OyNGveeE3TP3TA=="
},
"@amplitude/utils": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@amplitude/utils/-/utils-1.1.0.tgz",
"integrity": "sha512-TbKgBZNSRFu5RfYTKpprn/DFlZqr8jnmjXASZyQ/m8XDdbD2VoRqHDmKUwFiruX9OhAb2m9BhjLuaiwRYHCcqQ==",
"requires": {
"@amplitude/eslint-config-typescript": "^1.1.0",
"@amplitude/types": "^1.1.0",
"tslib": "^1.9.3"
}
},
"@babel/code-frame": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
@ -5962,10 +5985,10 @@
}
}
},
"@react-native-community/async-storage": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@react-native-community/async-storage/-/async-storage-1.12.1.tgz",
"integrity": "sha512-70WGaH3PKYASi4BThuEEKMkyAgE9k7VytBqmgPRx3MzJx9/MkspwqJGmn3QLCgHLIFUgF1pit2mWICbRJ3T3lg==",
"@react-native-async-storage/async-storage": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.13.2.tgz",
"integrity": "sha512-isTDvUApRJPVWFxV15yrQSOGqarX7cIedq/y4N5yWSnotf68D9qvDEv1I7rCXhkBDi0u4OJt6GA9dksUT0D3wg==",
"requires": {
"deep-assign": "^3.0.0"
}
@ -6996,11 +7019,12 @@
}
},
"amplitude-js": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/amplitude-js/-/amplitude-js-7.3.0.tgz",
"integrity": "sha512-FI3ziFNfV4kqpLYHLo6t+E7cbZZ1n8VRCNt214Z1CuDbEzPcc/TenmkCwPoYJA5FQibamqZL9qiKtdMTZhSsUg==",
"version": "7.3.3",
"resolved": "https://registry.npmjs.org/amplitude-js/-/amplitude-js-7.3.3.tgz",
"integrity": "sha512-krSXUXeHqbQk15ozx0kC3h0K3i7wQ1ycSG08OfZBga2Vfbi3Y30CP6UXLdtJX4AiBB8EkjMePdMgU6kyuIpi/A==",
"requires": {
"@amplitude/ua-parser-js": "0.7.24",
"@amplitude/utils": "^1.0.5",
"blueimp-md5": "^2.10.0",
"query-string": "5"
},
@ -18987,8 +19011,8 @@
}
},
"react-native-handoff": {
"version": "git+https://github.com/marcosrdz/react-native-handoff.git#05fc7dee3843d8c8ae150c0def753d4a9322230e",
"from": "git+https://github.com/marcosrdz/react-native-handoff.git"
"version": "git+https://github.com/marcosrdz/react-native-handoff.git#f5becc63f3e36bf2da1ed1fc60fc690323e73602",
"from": "git+https://github.com/marcosrdz/react-native-handoff.git#f5becc63f3e36bf2da1ed1fc60fc690323e73602"
},
"react-native-haptic-feedback": {
"version": "1.11.0",
@ -18996,9 +19020,9 @@
"integrity": "sha512-KTIy7lExwMtB6pOpCARyUzFj5EzYTh+A1GN/FB5Eb0LrW5C6hbb1kdj9K2/RHyZC+wyAJD1M823ZaDCU6n6cLA=="
},
"react-native-image-picker": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-3.0.1.tgz",
"integrity": "sha512-jVWiKT24jxr7K8dAixlsfHURZd+eDA4WWYeZhhKeJDGITCtFPphcTuFomTMtaWYE/gJgNTEL8TiLedcfeqJ9qw=="
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-3.1.1.tgz",
"integrity": "sha512-7ZtOjFzfnsguNimyO1O/aASK5YBAPPtKmfEqWGCdfOft6cWctaQGOhZgbyEa+zWq6y2NIxo7306IlaCs+PXkog=="
},
"react-native-inappbrowser-reborn": {
"version": "git+https://github.com/BlueWallet/react-native-inappbrowser.git#fa2d8e1763e46dd12a7e53081e97a0f908049103",

View File

@ -1,6 +1,6 @@
{
"name": "bluewallet",
"version": "6.0.0",
"version": "6.0.2",
"license": "MIT",
"devDependencies": {
"@babel/core": "^7.10.4",
@ -66,7 +66,7 @@
},
"dependencies": {
"@babel/preset-env": "7.12.1",
"@react-native-community/async-storage": "1.12.1",
"@react-native-async-storage/async-storage": "1.13.2",
"@react-native-community/blur": "3.6.0",
"@react-native-community/clipboard": "1.5.0",
"@react-native-community/geolocation": "2.0.2",
@ -78,7 +78,7 @@
"@react-navigation/stack": "5.12.6",
"@remobile/react-native-qrcode-local-image": "git+https://github.com/BlueWallet/react-native-qrcode-local-image.git",
"@sentry/react-native": "1.9.0",
"amplitude-js": "7.3.0",
"amplitude-js": "7.3.3",
"assert": "1.5.0",
"base-x": "3.0.8",
"bc-bech32": "file:blue_modules/bc-bech32",
@ -127,9 +127,9 @@
"react-native-fingerprint-scanner": "git+https://github.com/BlueWallet/react-native-fingerprint-scanner.git#ce644673681716335d786727bab998f7e632ab5e",
"react-native-fs": "2.16.6",
"react-native-gesture-handler": "1.8.0",
"react-native-handoff": "git+https://github.com/marcosrdz/react-native-handoff.git",
"react-native-handoff": "git+https://github.com/marcosrdz/react-native-handoff.git#f5becc63f3e36bf2da1ed1fc60fc690323e73602",
"react-native-haptic-feedback": "1.11.0",
"react-native-image-picker": "3.0.1",
"react-native-image-picker": "3.1.1",
"react-native-inappbrowser-reborn": "git+https://github.com/BlueWallet/react-native-inappbrowser.git#fa2d8e1763e46dd12a7e53081e97a0f908049103",
"react-native-is-catalyst": "git+https://github.com/BlueWallet/react-native-is-catalyst.git#v1.0.0",
"react-native-level-fs": "3.0.1",

View File

@ -1,7 +1,7 @@
/* global alert */
import React, { Component } from 'react';
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {
BlueBitcoinAmount,
BlueButton,

View File

@ -1,7 +1,7 @@
import React, { Component } from 'react';
import LottieView from 'lottie-react-native';
import { View, Text, Linking, StyleSheet, Image, ScrollView } from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { Icon } from 'react-native-elements';
import {
BlueButton,

View File

@ -45,7 +45,7 @@ const ScanLndInvoice = () => {
const [isLoading, setIsLoading] = useState(false);
const [renderWalletSelectionButtonHidden, setRenderWalletSelectionButtonHidden] = useState(false);
const [destination, setDestination] = useState('');
const [unit, setUnit] = useState(wallet?.getPreferredBalanceUnit() || BitcoinUnit.SATS);
const [unit, setUnit] = useState(BitcoinUnit.SATS);
const [decoded, setDecoded] = useState();
const [amount, setAmount] = useState();
const [isAmountInitiallyEmpty, setIsAmountInitiallyEmpty] = useState();

View File

@ -78,7 +78,7 @@ export default class SendCreate extends Component {
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('Storage Permission: Granted');
const filePath = RNFS.DownloadDirectoryPath + `/${this.fileName}`;
const filePath = RNFS.DownloadDirectoryPath + `/${fileName}`;
try {
await RNFS.writeFile(filePath, this.state.tx);
alert(loc.formatString(loc.send.txSaved, { filePath }));

View File

@ -19,7 +19,7 @@ import {
FlatList,
} from 'react-native';
import { Icon } from 'react-native-elements';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {
BlueCreateTxNavigationStyle,
BlueButton,

View File

@ -7,7 +7,6 @@ import { SquareButton } from '../../components/SquareButton';
import { getSystemName } from 'react-native-device-info';
import loc from '../../loc';
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
import ActionSheet from '../ActionSheet';
const bitcoin = require('bitcoinjs-lib');
const fs = require('../../blue_modules/fs');
@ -47,26 +46,9 @@ const PsbtMultisigQRCode = () => {
}
};
const showActionSheet = () => {
const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose, loc.wallets.import_file];
ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => {
if (buttonIndex === 1) {
fs.takePhotoWithImagePickerAndReadPhoto.then(onBarScanned);
} else if (buttonIndex === 2) {
fs.showImagePickerAndReadImage(onBarScanned).catch(error => alert(error.message));
} else if (buttonIndex === 3) {
const { data } = await fs.showFilePickerAndReadFile();
if (data) {
onBarScanned({ data });
}
}
});
};
const openScanner = () => {
if (isDesktop) {
showActionSheet();
fs.showActionSheet().then(data => onBarScanned({ data }));
} else {
navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',

View File

@ -2,7 +2,7 @@
import React, { Component } from 'react';
import { View, TextInput, StyleSheet } from 'react-native';
import { AppStorage } from '../../class';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { ScrollView } from 'react-native-gesture-handler';
import {
BlueLoading,

View File

@ -4,7 +4,7 @@ import { View, TextInput, Linking, StyleSheet } from 'react-native';
import { Button } from 'react-native-elements';
import { useTheme, useNavigation, useRoute } from '@react-navigation/native';
import { AppStorage } from '../../class';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {
BlueSpacing20,
BlueButton,

View File

@ -336,7 +336,11 @@ const TransactionsStatus = () => {
)}
<View style={[styles.confirmations, stylesHook.confirmations]}>
<Text style={styles.confirmationsText}>{tx.confirmations > 6 ? '6+' : tx.confirmations} confirmations</Text>
<Text style={styles.confirmationsText}>
{loc.formatString(loc.transactions.confirmations_lowercase, {
confirmations: tx.confirmations > 6 ? '6+' : tx.confirmations,
})}
</Text>
</View>
</BlueCard>

View File

@ -12,7 +12,7 @@ import {
TextInput,
StyleSheet,
} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {
BlueText,
BlueListItem,

View File

@ -205,7 +205,9 @@ const WalletsAddMultisig = () => {
<Text style={[styles.textdescBold, stylesHook.textdesc]}>
{loc.formatString(loc.multisig.what_is_vault_description_number_of_vault_keys, { m })}
</Text>
<Text style={[styles.textdesc, stylesHook.textdesc]}>{loc.multisig.what_is_vault_description_to_spend}</Text>
<Text style={[styles.textdesc, stylesHook.textdesc]}>
{m === 2 && n === 3 ? loc.multisig.what_is_vault_description_to_spend : loc.multisig.what_is_vault_description_to_spend_other}
</Text>
</Text>
</View>
{isAdvancedModeEnabledRender && (

View File

@ -36,7 +36,6 @@ import MultipleStepsListItem, {
MultipleStepsListItemButtohType,
MultipleStepsListItemDashType,
} from '../../components/MultipleStepsListItem';
import ActionSheet from '../ActionSheet';
import Clipboard from '@react-native-community/clipboard';
import showPopupMenu from 'react-native-popup-menu-android';
import ToolTip from 'react-native-tooltip';
@ -391,7 +390,7 @@ const WalletsAddMultisigStep2 = () => {
const scanOrOpenFile = () => {
if (isDesktop) {
showActionSheet();
fs.showActionSheet().then(data => onBarScanned({ data }));
} else {
navigation.navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',
@ -403,23 +402,6 @@ const WalletsAddMultisigStep2 = () => {
}
};
const showActionSheet = () => {
const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose, loc.wallets.import_file];
ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => {
if (buttonIndex === 1) {
fs.takePhotoWithImagePickerAndReadPhoto.then(onBarScanned);
} else if (buttonIndex === 2) {
fs.showImagePickerAndReadImage(onBarScanned).catch(error => alert(error.message));
} else if (buttonIndex === 3) {
const { data } = await fs.showFilePickerAndReadFile();
if (data) {
onBarScanned({ data });
}
}
});
};
const _renderKeyItem = el => {
const renderProvideKeyButtons = el.index === cosigners.length;
const isChecked = el.index < cosigners.length;

View File

@ -15,16 +15,10 @@ import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
import Privacy from '../../Privacy';
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
import WalletImport from '../../class/wallet-import';
import Clipboard from '@react-native-community/clipboard';
import ActionSheet from '../ActionSheet';
import { launchCamera, launchImageLibrary } from 'react-native-image-picker';
import loc from '../../loc';
import { getSystemName } from 'react-native-device-info';
import RNFS from 'react-native-fs';
import DocumentPicker from 'react-native-document-picker';
import { presentCameraNotAuthorizedAlert } from '../../class/camera';
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
const isDesktop = getSystemName() === 'Mac OS X';
const fs = require('../../blue_modules/fs');
const WalletsImport = () => {
const [isToolbarVisibleForAndroid, setIsToolbarVisibleForAndroid] = useState(false);
@ -101,7 +95,7 @@ const WalletsImport = () => {
const importScan = () => {
if (isDesktop) {
showActionSheet();
fs.showActionSheet().then(onBarScanned);
} else {
navigation.navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',
@ -114,102 +108,6 @@ const WalletsImport = () => {
}
};
const choosePhoto = () => {
launchImageLibrary(
{
title: null,
mediaType: 'photo',
takePhotoButtonTitle: null,
},
response => {
if (response.uri) {
const uri = Platform.OS === 'ios' ? response.uri.toString().replace('file://', '') : response.uri;
LocalQRCode.decode(uri, (error, result) => {
if (!error) {
onBarScanned(result);
} else {
alert(loc.send.qr_error_no_qrcode);
}
});
}
},
);
};
const takePhoto = () => {
launchCamera(
{
title: null,
mediaType: 'photo',
takePhotoButtonTitle: null,
},
response => {
if (response.uri) {
const uri = Platform.OS === 'ios' ? response.uri.toString().replace('file://', '') : response.uri;
LocalQRCode.decode(uri, (error, result) => {
if (!error) {
onBarScanned(result);
} else {
alert(loc.send.qr_error_no_qrcode);
}
});
} else if (response.error) {
presentCameraNotAuthorizedAlert(response.error);
}
},
);
};
const copyFromClipbard = async () => {
onBarScanned(await Clipboard.getString());
};
const handleImportFileButtonPressed = async () => {
try {
const res = await DocumentPicker.pick({
type: [DocumentPicker.types.allFiles],
});
const file = await RNFS.readFile(res.uri);
if (file) {
onBarScanned(file);
} else {
throw new Error();
}
} catch (err) {
if (!DocumentPicker.isCancel(err)) {
alert(loc.wallets.import_error);
}
}
};
const showActionSheet = async () => {
const isClipboardEmpty = (await Clipboard.getString()).replace(' ', '').length === 0;
let copyFromClipboardIndex;
if (Platform.OS === 'ios') {
const options = [loc._.cancel, 'Take Photo', loc.wallets.list_long_choose];
if (!isClipboardEmpty) {
options.push(loc.wallets.list_long_clipboard);
copyFromClipboardIndex = options.length - 1;
}
options.push(loc.wallets.import_file);
const impoortFileButtonIndex = options.length - 1;
ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, buttonIndex => {
if (buttonIndex === 1) {
takePhoto();
} else if (buttonIndex === 2) {
choosePhoto();
} else if (buttonIndex === copyFromClipboardIndex) {
copyFromClipbard();
} else if (impoortFileButtonIndex) {
handleImportFileButtonPressed();
}
});
}
};
return (
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={styles.root}>
<StatusBar barStyle="light-content" />

View File

@ -32,7 +32,7 @@ import { BlueStorageContext } from '../../blue_modules/storage-context';
import isCatalyst from 'react-native-is-catalyst';
const A = require('../../blue_modules/analytics');
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
const fs = require('../../blue_modules/fs');
const WalletsListSections = { CAROUSEL: 'CAROUSEL', LOCALTRADER: 'LOCALTRADER', TRANSACTIONS: 'TRANSACTIONS' };
const isDesktop = getSystemName() === 'Mac OS X';
@ -342,7 +342,7 @@ const WalletsList = () => {
const onScanButtonPressed = () => {
if (isDesktop) {
sendButtonLongPress();
fs.showActionSheet().then(onBarScanned);
} else {
navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',

View File

@ -64,7 +64,7 @@ const PleaseBackup = () => {
};
return isLoading ? (
<View style={styles.loading}>
<View style={[styles.loading, stylesHook.flex]}>
<ActivityIndicator />
</View>
) : (
@ -99,7 +99,7 @@ const styles = StyleSheet.create({
},
loading: {
flex: 1,
paddingTop: 20,
justifyContent: 'center',
},
word: {
marginRight: 8,

View File

@ -581,7 +581,7 @@ const WalletTransactions = () => {
return (
<View style={styles.flex}>
<StatusBar barStyle="light-content" backgroundColor={WalletGradient.headerColorFor(wallet.current.type)} />
{wallet.current.chain === Chain.ONCHAIN && isHandOffUseEnabled && (
{wallet.current.chain === Chain.ONCHAIN && wallet.current.type !== MultisigHDWallet.type && isHandOffUseEnabled && (
<Handoff
title={`Bitcoin Wallet ${wallet.current.getLabel()}`}
type="io.bluewallet.bluewallet"

View File

@ -18,7 +18,6 @@ import { Icon } from 'react-native-elements';
import { useFocusEffect, useNavigation, useRoute, useTheme } from '@react-navigation/native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { getSystemName } from 'react-native-device-info';
import { launchCamera } from 'react-native-image-picker';
import {
BlueButton,
@ -40,11 +39,9 @@ import MultipleStepsListItem, {
MultipleStepsListItemButtohType,
MultipleStepsListItemDashType,
} from '../../components/MultipleStepsListItem';
import ScanQRCode from '../send/ScanQRCode';
import Privacy from '../../Privacy';
import Biometric from '../../class/biometrics';
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
const fs = require('../../blue_modules/fs');
const isDesktop = getSystemName() === 'Mac OS X';
const ViewEditMultisigCosigners = () => {
@ -403,29 +400,8 @@ const ViewEditMultisigCosigners = () => {
};
const scanOrOpenFile = () => {
setIsProvideMnemonicsModalVisible(false);
if (isDesktop) {
launchCamera(
{
title: null,
mediaType: 'photo',
takePhotoButtonTitle: null,
},
response => {
if (response.uri) {
const uri = Platform.OS === 'ios' ? response.uri.toString().replace('file://', '') : response.uri;
LocalQRCode.decode(uri, (error, result) => {
if (!error) {
_handleUseMnemonicPhrase(result);
} else {
alert(loc.send.qr_error_no_qrcode);
}
});
} else if (response.error) {
ScanQRCode.presentCameraNotAuthorizedAlert(response.error);
}
},
);
fs.showActionSheet().then(_handleUseMnemonicPhrase);
} else {
navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',

View File

@ -1,5 +1,5 @@
import { AppStorage } from '../../class';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
import RNFS from 'react-native-fs';
import RNSecureKeyStore, { ACCESSIBLE } from 'react-native-secure-key-store';
import DefaultPreference from 'react-native-default-preference';

View File

@ -548,6 +548,14 @@ describe('BlueWallet UI Tests', () => {
newInstance: true,
url: 'bitcoin:BC1QH6TF004TY7Z7UN2V5NTU4MKF630545GVHS45U7\\?amount=0.0001\\&label=Yo',
});
// setting fee rate:
const feeRate = 2;
await element(by.id('chooseFee')).tap();
await element(by.id('feeCustom')).tap();
await element(by.type('android.widget.EditText')).typeText(feeRate + '');
await element(by.text('OK')).tap();
try {
await element(by.id('CreateTransactionButton')).tap();
} catch (_) {}

View File

@ -1,7 +1,7 @@
/* global describe, it, jest, jasmine */
import { AppStorage } from '../../class';
import { FiatUnit } from '../../models/fiatUnit';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
const assert = require('assert');
jest.useFakeTimers();

View File

@ -85,7 +85,13 @@ it('can create escrow address', () => {
// console.log(tx.toHex());
});
describe('HodlHodl API', function () {
/**
* Use only for development.
* Run via `NODE_OPTIONS=--insecure-http-parser=true ./node_modules/.bin/jest tests/integration/hodlhodl.test.js`
* Also, process.env.HODLHODL_USERAGENT might be needed.
* All those a part of HodlHodl DDOS protection.
*/
describe.skip('HodlHodl API', function () {
it('can fetch countries & and own country code', async () => {
if (process.env.GITHUB_ACTIONS) {
// dont run here as it always fails

View File

@ -1,5 +1,9 @@
/* global jest */
import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock';
jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage);
jest.mock('react-native-watch-connectivity', () => {
return {
getIsWatchAppInstalled: jest.fn(() => Promise.resolve(false)),

View File

@ -1487,9 +1487,9 @@ describe('multisig-wallet (native segwit)', () => {
assert.ok(w.isNativeSegwit());
assert.ok(!w.isLegacy());
assert.strictEqual(w.getFingerprint(1), '2D440411');
assert.strictEqual(w.getFingerprint(2), 'F863CE8C');
assert.strictEqual(w.getFingerprint(3), '7BBD27BF');
assert.strictEqual(w.getFingerprint(1), '1104442D');
assert.strictEqual(w.getFingerprint(2), '8CCE63F8');
assert.strictEqual(w.getFingerprint(3), 'BF27BD7B');
assert.strictEqual(
w.getCosigner(1),

View File

@ -1,6 +1,6 @@
/* global it */
import { SegwitP2SHWallet, AppStorage } from '../../class';
import AsyncStorage from '@react-native-community/async-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';
const assert = require('assert');
it('Appstorage - loadFromDisk works', async () => {