Merge branch 'main' into CAKE-320-add-Croatian-language
|
@ -1,15 +1,49 @@
|
||||||
package com.cakewallet.cake_wallet;
|
package com.cakewallet.cake_wallet;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterFragmentActivity;
|
import io.flutter.embedding.android.FlutterFragmentActivity;
|
||||||
import io.flutter.embedding.engine.FlutterEngine;
|
import io.flutter.embedding.engine.FlutterEngine;
|
||||||
import io.flutter.plugins.GeneratedPluginRegistrant;
|
import io.flutter.plugins.GeneratedPluginRegistrant;
|
||||||
|
|
||||||
|
import io.flutter.plugin.common.MethodCall;
|
||||||
|
import io.flutter.plugin.common.MethodChannel;
|
||||||
|
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
|
||||||
public class MainActivity extends FlutterFragmentActivity {
|
public class MainActivity extends FlutterFragmentActivity {
|
||||||
|
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
|
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
|
||||||
GeneratedPluginRegistrant.registerWith(flutterEngine);
|
GeneratedPluginRegistrant.registerWith(flutterEngine);
|
||||||
|
|
||||||
|
MethodChannel utilsChannel =
|
||||||
|
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(),
|
||||||
|
UTILS_CHANNEL);
|
||||||
|
|
||||||
|
utilsChannel.setMethodCallHandler(this::handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handle(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
|
||||||
|
Handler handler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (call.method.equals("sec_random")) {
|
||||||
|
int count = call.argument("count");
|
||||||
|
SecureRandom random = new SecureRandom();
|
||||||
|
byte bytes[] = new byte[count];
|
||||||
|
random.nextBytes(bytes);
|
||||||
|
handler.post(() -> result.success(bytes));
|
||||||
|
} else {
|
||||||
|
handler.post(() -> result.notImplemented());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handler.post(() -> result.error("UNCAUGHT_ERROR", e.getMessage(), null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
package com.cakewallet.cake_wallet
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
|
||||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
|
||||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
|
||||||
|
|
||||||
class MainActivity: FlutterActivity() {
|
|
||||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine){
|
|
||||||
GeneratedPluginRegistrant.registerWith(flutterEngine);
|
|
||||||
}
|
|
||||||
}
|
|
BIN
android/app/src/main/res/drawable/ic_launcher.png
Executable file
After Width: | Height: | Size: 5.3 KiB |
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@android:color/white" />
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher" />
|
||||||
|
</adaptive-icon>
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 3 KiB |
12
ios/CakeWallet/secRandom.swift
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
func secRandom(count: Int) -> Data? {
|
||||||
|
var bytes = [Int8](repeating: 0, count: count)
|
||||||
|
let status = SecRandomCopyBytes(kSecRandomDefault, bytes.count, &bytes)
|
||||||
|
|
||||||
|
if status == errSecSuccess {
|
||||||
|
return Data(bytes: bytes, count: bytes.count)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
0C44A71A2518EF8000B570ED /* decrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C44A7192518EF8000B570ED /* decrypt.swift */; };
|
0C44A71A2518EF8000B570ED /* decrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C44A7192518EF8000B570ED /* decrypt.swift */; };
|
||||||
|
0C9D68C9264854B60011B691 /* secRandom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C9D68C8264854B60011B691 /* secRandom.swift */; };
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||||
20ED0868E1BD7E12278C0CB3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B26E3F56D69167FBB1DC160A /* Pods_Runner.framework */; };
|
20ED0868E1BD7E12278C0CB3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B26E3F56D69167FBB1DC160A /* Pods_Runner.framework */; };
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||||
|
@ -21,6 +22,7 @@
|
||||||
0C400E0F25B21ABB0025E469 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
|
0C400E0F25B21ABB0025E469 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
|
||||||
0C44A7192518EF8000B570ED /* decrypt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = decrypt.swift; sourceTree = "<group>"; };
|
0C44A7192518EF8000B570ED /* decrypt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = decrypt.swift; sourceTree = "<group>"; };
|
||||||
0C9986A3251A932F00D566FD /* CryptoSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
0C9986A3251A932F00D566FD /* CryptoSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
0C9D68C8264854B60011B691 /* secRandom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = secRandom.swift; sourceTree = "<group>"; };
|
||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||||
20F67A1B2C2FCB2A3BB048C1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
20F67A1B2C2FCB2A3BB048C1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
@ -65,6 +67,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
0C44A7192518EF8000B570ED /* decrypt.swift */,
|
0C44A7192518EF8000B570ED /* decrypt.swift */,
|
||||||
|
0C9D68C8264854B60011B691 /* secRandom.swift */,
|
||||||
);
|
);
|
||||||
path = CakeWallet;
|
path = CakeWallet;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -274,6 +277,7 @@
|
||||||
files = (
|
files = (
|
||||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
|
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
|
||||||
|
0C9D68C9264854B60011B691 /* secRandom.swift in Sources */,
|
||||||
0C44A71A2518EF8000B570ED /* decrypt.swift in Sources */,
|
0C44A71A2518EF8000B570ED /* decrypt.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -358,7 +362,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 35;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -375,7 +379,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.1.6;
|
MARKETING_VERSION = 4.1.7;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
@ -501,7 +505,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 35;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -518,7 +522,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.1.6;
|
MARKETING_VERSION = 4.1.7;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
@ -536,7 +540,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 35;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
DEVELOPMENT_TEAM = 32J6BB6VUS;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -553,7 +557,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.1.6;
|
MARKETING_VERSION = 4.1.7;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
|
|
@ -8,9 +8,10 @@ import Flutter
|
||||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||||
) -> Bool {
|
) -> Bool {
|
||||||
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
|
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
|
||||||
let batteryChannel = FlutterMethodChannel(name: "com.cakewallet.cakewallet/legacy_wallet_migration",
|
let legacyMigrationChannel = FlutterMethodChannel(
|
||||||
binaryMessenger: controller.binaryMessenger)
|
name: "com.cakewallet.cakewallet/legacy_wallet_migration",
|
||||||
batteryChannel.setMethodCallHandler({
|
binaryMessenger: controller.binaryMessenger)
|
||||||
|
legacyMigrationChannel.setMethodCallHandler({
|
||||||
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
|
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
|
||||||
|
|
||||||
switch call.method {
|
switch call.method {
|
||||||
|
@ -52,6 +53,24 @@ import Flutter
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
let utilsChannel = FlutterMethodChannel(
|
||||||
|
name: "com.cake_wallet/native_utils",
|
||||||
|
binaryMessenger: controller.binaryMessenger)
|
||||||
|
utilsChannel.setMethodCallHandler({ (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
|
||||||
|
switch call.method {
|
||||||
|
case "sec_random":
|
||||||
|
guard let args = call.arguments as? Dictionary<String, Any>,
|
||||||
|
let count = args["count"] as? Int else {
|
||||||
|
result(nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result(secRandom(count: count))
|
||||||
|
default:
|
||||||
|
result(FlutterMethodNotImplemented)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
GeneratedPluginRegistrant.register(with: self)
|
GeneratedPluginRegistrant.register(with: self)
|
||||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,23 +4,11 @@ import 'dart:typed_data';
|
||||||
import 'package:crypto/crypto.dart';
|
import 'package:crypto/crypto.dart';
|
||||||
import 'package:unorm_dart/unorm_dart.dart' as unorm;
|
import 'package:unorm_dart/unorm_dart.dart' as unorm;
|
||||||
import 'package:cryptography/cryptography.dart' as cryptography;
|
import 'package:cryptography/cryptography.dart' as cryptography;
|
||||||
|
import 'package:cake_wallet/core/sec_random_native.dart';
|
||||||
|
|
||||||
const segwit = '100';
|
const segwit = '100';
|
||||||
final wordlist = englishWordlist;
|
final wordlist = englishWordlist;
|
||||||
|
|
||||||
Uint8List randomBytes(int length, {bool secure = false}) {
|
|
||||||
assert(length > 0);
|
|
||||||
|
|
||||||
final random = secure ? Random.secure() : Random();
|
|
||||||
final ret = Uint8List(length);
|
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
ret[i] = random.nextInt(256);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
double logBase(num x, num base) => log(x) / log(base);
|
double logBase(num x, num base) => log(x) / log(base);
|
||||||
|
|
||||||
String mnemonicEncode(int i) {
|
String mnemonicEncode(int i) {
|
||||||
|
@ -102,14 +90,15 @@ List<bool> prefixMatches(String source, List<String> prefixes) {
|
||||||
return prefixes.map((prefix) => hx.startsWith(prefix.toLowerCase())).toList();
|
return prefixes.map((prefix) => hx.startsWith(prefix.toLowerCase())).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
String generateMnemonic({int strength = 132, String prefix = segwit}) {
|
Future<String> generateMnemonic(
|
||||||
|
{int strength = 264, String prefix = segwit}) async {
|
||||||
final wordBitlen = logBase(wordlist.length, 2).ceil();
|
final wordBitlen = logBase(wordlist.length, 2).ceil();
|
||||||
final wordCount = strength / wordBitlen;
|
final wordCount = strength / wordBitlen;
|
||||||
final byteCount = ((wordCount * wordBitlen).ceil() / 8).ceil();
|
final byteCount = ((wordCount * wordBitlen).ceil() / 8).ceil();
|
||||||
var result = '';
|
var result = '';
|
||||||
|
|
||||||
do {
|
do {
|
||||||
final bytes = randomBytes(byteCount);
|
final bytes = await secRandom(byteCount);
|
||||||
maskBytes(bytes, strength);
|
maskBytes(bytes, strength);
|
||||||
result = encode(bytes);
|
result = encode(bytes);
|
||||||
} while (!prefixMatches(result, [prefix]).first);
|
} while (!prefixMatches(result, [prefix]).first);
|
||||||
|
@ -134,7 +123,7 @@ bool matchesAnyPrefix(String mnemonic) =>
|
||||||
bool validateMnemonic(String mnemonic, {String prefix = segwit}) {
|
bool validateMnemonic(String mnemonic, {String prefix = segwit}) {
|
||||||
try {
|
try {
|
||||||
return matchesAnyPrefix(mnemonic);
|
return matchesAnyPrefix(mnemonic);
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class BitcoinMnemonicIsIncorrectException implements Exception {
|
class BitcoinMnemonicIsIncorrectException implements Exception {
|
||||||
@override
|
@override
|
||||||
String toString() =>
|
String toString() =>
|
||||||
'Bitcoin mnemonic has incorrect format. Mnemonic should contain 12 words separated by space.';
|
'Bitcoin mnemonic has incorrect format. Mnemonic should contain 24 words separated by space.';
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ class BitcoinWalletService extends WalletService<
|
||||||
type: WalletType.bitcoin, name: credentials.name);
|
type: WalletType.bitcoin, name: credentials.name);
|
||||||
final wallet = BitcoinWalletBase.build(
|
final wallet = BitcoinWalletBase.build(
|
||||||
dirPath: dirPath,
|
dirPath: dirPath,
|
||||||
mnemonic: generateMnemonic(),
|
mnemonic: await generateMnemonic(),
|
||||||
password: credentials.password,
|
password: credentials.password,
|
||||||
name: credentials.name,
|
name: credentials.name,
|
||||||
walletInfo: credentials.walletInfo);
|
walletInfo: credentials.walletInfo);
|
||||||
|
@ -47,7 +47,7 @@ class BitcoinWalletService extends WalletService<
|
||||||
final walletPath = '$walletDirPath/$name';
|
final walletPath = '$walletDirPath/$name';
|
||||||
final walletJSONRaw = await read(path: walletPath, password: password);
|
final walletJSONRaw = await read(path: walletPath, password: password);
|
||||||
final walletInfo = walletInfoSource.values.firstWhere(
|
final walletInfo = walletInfoSource.values.firstWhere(
|
||||||
(info) => info.id == WalletBase.idFor(name, WalletType.bitcoin),
|
(info) => info.id == WalletBase.idFor(name, WalletType.bitcoin),
|
||||||
orElse: () => null);
|
orElse: () => null);
|
||||||
final wallet = BitcoinWalletBase.fromJSON(
|
final wallet = BitcoinWalletBase.fromJSON(
|
||||||
password: password,
|
password: password,
|
||||||
|
|
13
lib/core/sec_random_native.dart
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
const utils = const MethodChannel('com.cake_wallet/native_utils');
|
||||||
|
|
||||||
|
Future<Uint8List> secRandom(int count) async {
|
||||||
|
try {
|
||||||
|
return await utils.invokeMethod<Uint8List>('sec_random', {'count': count});
|
||||||
|
} on PlatformException catch (_) {
|
||||||
|
return Uint8List.fromList([]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,7 +19,6 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
|
||||||
CryptoCurrency.eos,
|
CryptoCurrency.eos,
|
||||||
CryptoCurrency.eth,
|
CryptoCurrency.eth,
|
||||||
CryptoCurrency.ltc,
|
CryptoCurrency.ltc,
|
||||||
CryptoCurrency.nano,
|
|
||||||
CryptoCurrency.trx,
|
CryptoCurrency.trx,
|
||||||
CryptoCurrency.usdt,
|
CryptoCurrency.usdt,
|
||||||
CryptoCurrency.usdterc20,
|
CryptoCurrency.usdterc20,
|
||||||
|
@ -29,7 +28,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
|
||||||
static const xmr = CryptoCurrency(title: 'XMR', raw: 0);
|
static const xmr = CryptoCurrency(title: 'XMR', raw: 0);
|
||||||
static const ada = CryptoCurrency(title: 'ADA', raw: 1);
|
static const ada = CryptoCurrency(title: 'ADA', raw: 1);
|
||||||
static const bch = CryptoCurrency(title: 'BCH', raw: 2);
|
static const bch = CryptoCurrency(title: 'BCH', raw: 2);
|
||||||
static const bnb = CryptoCurrency(title: 'BNB', raw: 3);
|
static const bnb = CryptoCurrency(title: 'BNB BEP2', raw: 3);
|
||||||
static const btc = CryptoCurrency(title: 'BTC', raw: 4);
|
static const btc = CryptoCurrency(title: 'BTC', raw: 4);
|
||||||
static const dai = CryptoCurrency(title: 'DAI', raw: 5);
|
static const dai = CryptoCurrency(title: 'DAI', raw: 5);
|
||||||
static const dash = CryptoCurrency(title: 'DASH', raw: 6);
|
static const dash = CryptoCurrency(title: 'DASH', raw: 6);
|
||||||
|
@ -90,7 +89,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
|
||||||
return CryptoCurrency.ada;
|
return CryptoCurrency.ada;
|
||||||
case 'bch':
|
case 'bch':
|
||||||
return CryptoCurrency.bch;
|
return CryptoCurrency.bch;
|
||||||
case 'bnb':
|
case 'bnbmainnet':
|
||||||
return CryptoCurrency.bnb;
|
return CryptoCurrency.bnb;
|
||||||
case 'btc':
|
case 'btc':
|
||||||
return CryptoCurrency.btc;
|
return CryptoCurrency.btc;
|
||||||
|
|
|
@ -16,7 +16,8 @@ class LanguageService {
|
||||||
'ru': 'Русский (Russian)',
|
'ru': 'Русский (Russian)',
|
||||||
'uk': 'Українська (Ukrainian)',
|
'uk': 'Українська (Ukrainian)',
|
||||||
'zh': '中文 (Chinese)',
|
'zh': '中文 (Chinese)',
|
||||||
'hr': 'Hrvatski (Croatian)'
|
'hr': 'Hrvatski (Croatian)',
|
||||||
|
'it': 'Italiano (Italian)'
|
||||||
};
|
};
|
||||||
static final list = <String, String> {};
|
static final list = <String, String> {};
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,9 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
@override
|
@override
|
||||||
Future<Limits> fetchLimits({CryptoCurrency from, CryptoCurrency to,
|
Future<Limits> fetchLimits({CryptoCurrency from, CryptoCurrency to,
|
||||||
bool isFixedRateMode}) async {
|
bool isFixedRateMode}) async {
|
||||||
final symbol = from.toString() + '_' + to.toString();
|
final fromTitle = defineCurrencyTitle(from);
|
||||||
|
final toTitle = defineCurrencyTitle(to);
|
||||||
|
final symbol = fromTitle + '_' + toTitle;
|
||||||
final url = isFixedRateMode
|
final url = isFixedRateMode
|
||||||
? apiUri + _marketInfoUriSufix + _fixedRateUriSufix + apiKey
|
? apiUri + _marketInfoUriSufix + _fixedRateUriSufix + apiKey
|
||||||
: apiUri + _minAmountUriSufix + symbol;
|
: apiUri + _minAmountUriSufix + symbol;
|
||||||
|
@ -61,8 +63,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
final elemFrom = elem["from"] as String;
|
final elemFrom = elem["from"] as String;
|
||||||
final elemTo = elem["to"] as String;
|
final elemTo = elem["to"] as String;
|
||||||
|
|
||||||
if ((elemFrom == from.toString().toLowerCase()) &&
|
if ((elemFrom == fromTitle) && (elemTo == toTitle)) {
|
||||||
(elemTo == to.toString().toLowerCase())) {
|
|
||||||
final min = elem["min"] as double;
|
final min = elem["min"] as double;
|
||||||
final max = elem["max"] as double;
|
final max = elem["max"] as double;
|
||||||
|
|
||||||
|
@ -84,9 +85,11 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
? apiUri + _transactionsUriSufix + _fixedRateUriSufix + apiKey
|
? apiUri + _transactionsUriSufix + _fixedRateUriSufix + apiKey
|
||||||
: apiUri + _transactionsUriSufix + apiKey;
|
: apiUri + _transactionsUriSufix + apiKey;
|
||||||
final _request = request as ChangeNowRequest;
|
final _request = request as ChangeNowRequest;
|
||||||
|
final fromTitle = defineCurrencyTitle(_request.from);
|
||||||
|
final toTitle = defineCurrencyTitle(_request.to);
|
||||||
final body = {
|
final body = {
|
||||||
'from': _request.from.toString(),
|
'from': fromTitle,
|
||||||
'to': _request.to.toString(),
|
'to': toTitle,
|
||||||
'address': _request.address,
|
'address': _request.address,
|
||||||
'amount': _request.amount,
|
'amount': _request.amount,
|
||||||
'refundAddress': _request.refundAddress
|
'refundAddress': _request.refundAddress
|
||||||
|
@ -182,6 +185,8 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
final url = apiUri + _marketInfoUriSufix + _fixedRateUriSufix + apiKey;
|
final url = apiUri + _marketInfoUriSufix + _fixedRateUriSufix + apiKey;
|
||||||
final response = await get(url);
|
final response = await get(url);
|
||||||
final responseJSON = json.decode(response.body) as List<dynamic>;
|
final responseJSON = json.decode(response.body) as List<dynamic>;
|
||||||
|
final fromTitle = defineCurrencyTitle(from);
|
||||||
|
final toTitle = defineCurrencyTitle(to);
|
||||||
var rate = 0.0;
|
var rate = 0.0;
|
||||||
var fee = 0.0;
|
var fee = 0.0;
|
||||||
|
|
||||||
|
@ -189,8 +194,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
final elemFrom = elem["from"] as String;
|
final elemFrom = elem["from"] as String;
|
||||||
final elemTo = elem["to"] as String;
|
final elemTo = elem["to"] as String;
|
||||||
|
|
||||||
if ((elemFrom == to.toString().toLowerCase()) &&
|
if ((elemFrom == toTitle) && (elemTo == fromTitle)) {
|
||||||
(elemTo == from.toString().toLowerCase())) {
|
|
||||||
rate = elem["rate"] as double;
|
rate = elem["rate"] as double;
|
||||||
fee = elem["minerFee"] as double;
|
fee = elem["minerFee"] as double;
|
||||||
break;
|
break;
|
||||||
|
@ -216,22 +220,32 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
CryptoCurrency to,
|
CryptoCurrency to,
|
||||||
double amount,
|
double amount,
|
||||||
bool isFixedRateMode) {
|
bool isFixedRateMode) {
|
||||||
|
final fromTitle = defineCurrencyTitle(from);
|
||||||
|
final toTitle = defineCurrencyTitle(to);
|
||||||
|
|
||||||
return isFixedRateMode
|
return isFixedRateMode
|
||||||
? apiUri +
|
? apiUri +
|
||||||
_exchangeAmountUriSufix +
|
_exchangeAmountUriSufix +
|
||||||
_fixedRateUriSufix +
|
_fixedRateUriSufix +
|
||||||
amount.toString() +
|
amount.toString() +
|
||||||
'/' +
|
'/' +
|
||||||
from.toString() +
|
fromTitle +
|
||||||
'_' +
|
'_' +
|
||||||
to.toString() +
|
toTitle +
|
||||||
'?api_key=' + apiKey
|
'?api_key=' + apiKey
|
||||||
: apiUri +
|
: apiUri +
|
||||||
_exchangeAmountUriSufix +
|
_exchangeAmountUriSufix +
|
||||||
amount.toString() +
|
amount.toString() +
|
||||||
'/' +
|
'/' +
|
||||||
from.toString() +
|
fromTitle +
|
||||||
'_' +
|
'_' +
|
||||||
to.toString();
|
toTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String defineCurrencyTitle(CryptoCurrency currency) {
|
||||||
|
const bnbTitle = 'bnbmainnet';
|
||||||
|
final currencyTitle = currency == CryptoCurrency.bnb
|
||||||
|
? bnbTitle : currency.title.toLowerCase();
|
||||||
|
return currencyTitle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,7 +228,7 @@ class MoneroWalletService extends WalletService<
|
||||||
final name = f.path.split('/').last;
|
final name = f.path.split('/').last;
|
||||||
final newPath = newWalletDirPath + '/$name';
|
final newPath = newWalletDirPath + '/$name';
|
||||||
final newFile = File(newPath);
|
final newFile = File(newPath);
|
||||||
print(file.path);
|
|
||||||
if (!newFile.existsSync()) {
|
if (!newFile.existsSync()) {
|
||||||
newFile.createSync();
|
newFile.createSync();
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,9 +237,11 @@ Route<dynamic> createRoute(RouteSettings settings) {
|
||||||
case Routes.unlock:
|
case Routes.unlock:
|
||||||
return MaterialPageRoute<void>(
|
return MaterialPageRoute<void>(
|
||||||
fullscreenDialog: true,
|
fullscreenDialog: true,
|
||||||
builder: (_) => getIt.get<AuthPage>(
|
builder: (_) => WillPopScope(
|
||||||
param1: settings.arguments as OnAuthenticationFinished,
|
child: getIt.get<AuthPage>(
|
||||||
param2: false));
|
param1: settings.arguments as OnAuthenticationFinished,
|
||||||
|
param2: false),
|
||||||
|
onWillPop: () async => false));
|
||||||
|
|
||||||
case Routes.nodeList:
|
case Routes.nodeList:
|
||||||
return CupertinoPageRoute<void>(
|
return CupertinoPageRoute<void>(
|
||||||
|
|
|
@ -13,7 +13,7 @@ class PreSeedPage extends BasePage {
|
||||||
imageDark = Image.asset('assets/images/pre_seed_dark.png'),
|
imageDark = Image.asset('assets/images/pre_seed_dark.png'),
|
||||||
wordsCount = type == WalletType.monero
|
wordsCount = type == WalletType.monero
|
||||||
? 25
|
? 25
|
||||||
: 12; // FIXME: Stupid fast implementation
|
: 24; // FIXME: Stupid fast implementation
|
||||||
|
|
||||||
final Image imageDark;
|
final Image imageDark;
|
||||||
final Image imageLight;
|
final Image imageLight;
|
||||||
|
@ -49,7 +49,9 @@ class PreSeedPage extends BasePage {
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 70, left: 16, right: 16),
|
padding: EdgeInsets.only(top: 70, left: 16, right: 16),
|
||||||
child: Text(
|
child: Text(
|
||||||
S.of(context).pre_seed_description(wordsCount.toString()),
|
S
|
||||||
|
.of(context)
|
||||||
|
.pre_seed_description(wordsCount.toString()),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
|
|
@ -110,8 +110,6 @@ abstract class AuthViewModelBase with Store {
|
||||||
|
|
||||||
if (isAuthenticated) {
|
if (isAuthenticated) {
|
||||||
state = ExecutedSuccessfullyState();
|
state = ExecutedSuccessfullyState();
|
||||||
} else {
|
|
||||||
state = FailureState('Failure biometric authentication');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
|
|
@ -59,7 +59,8 @@ abstract class ExchangeViewModelBase with Store {
|
||||||
});
|
});
|
||||||
receiveCurrencies = CryptoCurrency.all.where((cryptoCurrency) =>
|
receiveCurrencies = CryptoCurrency.all.where((cryptoCurrency) =>
|
||||||
(cryptoCurrency != CryptoCurrency.xlm)&&
|
(cryptoCurrency != CryptoCurrency.xlm)&&
|
||||||
(cryptoCurrency != CryptoCurrency.xrp)).toList();
|
(cryptoCurrency != CryptoCurrency.xrp)&&
|
||||||
|
(cryptoCurrency != CryptoCurrency.bnb)).toList();
|
||||||
_defineIsReceiveAmountEditable();
|
_defineIsReceiveAmountEditable();
|
||||||
isFixedRateMode = false;
|
isFixedRateMode = false;
|
||||||
isReceiveAmountEntered = false;
|
isReceiveAmountEntered = false;
|
||||||
|
|
|
@ -11,7 +11,7 @@ description: Cake Wallet.
|
||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 4.1.6+45
|
version: 4.1.7+46
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.7.0 <3.0.0"
|
sdk: ">=2.7.0 <3.0.0"
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Beschreibung zur Wiederherstellung der Brieftasche",
|
"restore_wallet_restore_description" : "Beschreibung zur Wiederherstellung der Brieftasche",
|
||||||
"restore_new_seed" : "Neuer Seed",
|
"restore_new_seed" : "Neuer Seed",
|
||||||
"restore_active_seed" : "Aktives Seed",
|
"restore_active_seed" : "Aktives Seed",
|
||||||
"restore_bitcoin_description_from_seed" : "Stellen Sie Ihre Brieftasche aus dem 12-Wort-Kombinationscode wieder her",
|
"restore_bitcoin_description_from_seed" : "Stellen Sie Ihre Brieftasche aus dem 24-Wort-Kombinationscode wieder her",
|
||||||
"restore_bitcoin_description_from_keys" : "Stellen Sie Ihre Brieftasche aus der generierten WIF-Zeichenfolge aus Ihren privaten Schlüsseln wieder her",
|
"restore_bitcoin_description_from_keys" : "Stellen Sie Ihre Brieftasche aus der generierten WIF-Zeichenfolge aus Ihren privaten Schlüsseln wieder her",
|
||||||
"restore_bitcoin_title_from_keys" : "Aus WIF wiederherstellen",
|
"restore_bitcoin_title_from_keys" : "Aus WIF wiederherstellen",
|
||||||
"restore_from_date_or_blockheight" : "Bitte geben Sie einige Tage vor dem Erstellen dieser Brieftasche ein Datum ein. Oder wenn Sie die Blockhöhe kennen, geben Sie sie stattdessen ein",
|
"restore_from_date_or_blockheight" : "Bitte geben Sie einige Tage vor dem Erstellen dieser Brieftasche ein Datum ein. Oder wenn Sie die Blockhöhe kennen, geben Sie sie stattdessen ein",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Wallet restore description",
|
"restore_wallet_restore_description" : "Wallet restore description",
|
||||||
"restore_new_seed" : "New seed",
|
"restore_new_seed" : "New seed",
|
||||||
"restore_active_seed" : "Active seed",
|
"restore_active_seed" : "Active seed",
|
||||||
"restore_bitcoin_description_from_seed" : "Restore your wallet from 12 word combination code",
|
"restore_bitcoin_description_from_seed" : "Restore your wallet from 24 word combination code",
|
||||||
"restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys",
|
"restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys",
|
||||||
"restore_bitcoin_title_from_keys" : "Restore from WIF",
|
"restore_bitcoin_title_from_keys" : "Restore from WIF",
|
||||||
"restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead",
|
"restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Restaurar billetera",
|
"restore_wallet_restore_description" : "Restaurar billetera",
|
||||||
"restore_new_seed" : "Nueva semilla",
|
"restore_new_seed" : "Nueva semilla",
|
||||||
"restore_active_seed" : "Semilla activa",
|
"restore_active_seed" : "Semilla activa",
|
||||||
"restore_bitcoin_description_from_seed" : "Restaure su billetera a partir del código de combinación de 12 palabras",
|
"restore_bitcoin_description_from_seed" : "Restaure su billetera a partir del código de combinación de 24 palabras",
|
||||||
"restore_bitcoin_description_from_keys" : "Restaure su billetera a partir de una cadena WIF generada a partir de sus claves privadas",
|
"restore_bitcoin_description_from_keys" : "Restaure su billetera a partir de una cadena WIF generada a partir de sus claves privadas",
|
||||||
"restore_bitcoin_title_from_keys" : "Restaurar desde WIF",
|
"restore_bitcoin_title_from_keys" : "Restaurar desde WIF",
|
||||||
"restore_from_date_or_blockheight" : "Ingrese una fecha unos días antes de crear esta billetera. O si conoce la altura del bloque, ingréselo en su lugar",
|
"restore_from_date_or_blockheight" : "Ingrese una fecha unos días antes de crear esta billetera. O si conoce la altura del bloque, ingréselo en su lugar",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "बटुआ विवरण पुनर्स्थापित करें",
|
"restore_wallet_restore_description" : "बटुआ विवरण पुनर्स्थापित करें",
|
||||||
"restore_new_seed" : "नया बीज",
|
"restore_new_seed" : "नया बीज",
|
||||||
"restore_active_seed" : "सक्रिय बीज",
|
"restore_active_seed" : "सक्रिय बीज",
|
||||||
"restore_bitcoin_description_from_seed" : "12 शब्द संयोजन कोड से अपने वॉलेट को पुनर्स्थापित करें",
|
"restore_bitcoin_description_from_seed" : "24 शब्द संयोजन कोड से अपने वॉलेट को पुनर्स्थापित करें",
|
||||||
"restore_bitcoin_description_from_keys" : "अपने निजी कुंजी से उत्पन्न WIF स्ट्रिंग से अपने वॉलेट को पुनर्स्थापित करें",
|
"restore_bitcoin_description_from_keys" : "अपने निजी कुंजी से उत्पन्न WIF स्ट्रिंग से अपने वॉलेट को पुनर्स्थापित करें",
|
||||||
"restore_bitcoin_title_from_keys" : "WIF से पुनर्स्थापित करें",
|
"restore_bitcoin_title_from_keys" : "WIF से पुनर्स्थापित करें",
|
||||||
"restore_from_date_or_blockheight" : "कृपया इस वॉलेट को बनाने से कुछ दिन पहले एक तारीख दर्ज करें। या यदि आप ब्लॉकचेट जानते हैं, तो कृपया इसके बजाय इसे दर्ज करें",
|
"restore_from_date_or_blockheight" : "कृपया इस वॉलेट को बनाने से कुछ दिन पहले एक तारीख दर्ज करें। या यदि आप ब्लॉकचेट जानते हैं, तो कृपया इसके बजाय इसे दर्ज करें",
|
||||||
|
|
473
res/values/strings_it.arb
Normal file
|
@ -0,0 +1,473 @@
|
||||||
|
{
|
||||||
|
"welcome" : "Benvenuto",
|
||||||
|
"cake_wallet" : "Cake Wallet",
|
||||||
|
"first_wallet_text" : "Fantastico portafoglio per Monero e Bitcoin",
|
||||||
|
"please_make_selection" : "Gentilmente seleziona se vuoi generare o recuperare il tuo portafoglio.",
|
||||||
|
"create_new" : "Genera nuovo Portafoglio",
|
||||||
|
"restore_wallet" : "Recupera Portafoglio",
|
||||||
|
|
||||||
|
|
||||||
|
"accounts" : "Accounts",
|
||||||
|
"edit" : "Modifica",
|
||||||
|
"account" : "Account",
|
||||||
|
"add" : "Aggiungi",
|
||||||
|
|
||||||
|
|
||||||
|
"address_book" : "Rubrica indirizzi",
|
||||||
|
"contact" : "Contatta",
|
||||||
|
"please_select" : "Gentilmente seleziona:",
|
||||||
|
"cancel" : "Cancella",
|
||||||
|
"ok" : "OK",
|
||||||
|
"contact_name" : "Nome Contatto",
|
||||||
|
"reset" : "Resetta",
|
||||||
|
"save" : "Salva",
|
||||||
|
"address_remove_contact" : "Rimuovi contatto",
|
||||||
|
"address_remove_content" : "Sei sicuro di voler eliminare il contatto selezionato?",
|
||||||
|
|
||||||
|
|
||||||
|
"authenticated" : "Autenticato",
|
||||||
|
"authentication" : "Autenticazione",
|
||||||
|
"failed_authentication" : "Autenticazione fallita. ${state_error}",
|
||||||
|
|
||||||
|
|
||||||
|
"wallet_menu" : "Menu",
|
||||||
|
"Blocks_remaining" : "${status} Blocchi Rimanenti",
|
||||||
|
"please_try_to_connect_to_another_node" : "Gentilmente prova a connetterti ad un altro nodo",
|
||||||
|
"xmr_hidden" : "Nascosto",
|
||||||
|
"xmr_available_balance" : "Saldo Disponibile",
|
||||||
|
"xmr_full_balance" : "Saldo Completo",
|
||||||
|
"send" : "Invia",
|
||||||
|
"receive" : "Ricevi",
|
||||||
|
"transactions" : "Transazioni",
|
||||||
|
"incoming" : "In arrivo",
|
||||||
|
"outgoing" : "In uscita",
|
||||||
|
"transactions_by_date" : "Transazioni per data",
|
||||||
|
"trades" : "Scambi",
|
||||||
|
"filters" : "Filtri",
|
||||||
|
"today" : "Oggi",
|
||||||
|
"yesterday" : "Ieri",
|
||||||
|
"received" : "Ricevuto",
|
||||||
|
"sent" : "Inviato",
|
||||||
|
"pending" : " (pendente)",
|
||||||
|
"rescan" : "Scansiona di nuovo",
|
||||||
|
"reconnect" : "Riconnetti",
|
||||||
|
"wallets" : "Portafogli",
|
||||||
|
"show_seed" : "Mostra seme",
|
||||||
|
"show_keys" : "Mostra seme/chiavi",
|
||||||
|
"address_book_menu" : "Rubrica indirizzi",
|
||||||
|
"reconnection" : "Riconnessione",
|
||||||
|
"reconnect_alert_text" : "Sei sicuro di volerti riconnettere?",
|
||||||
|
|
||||||
|
|
||||||
|
"exchange" : "Scambia",
|
||||||
|
"clear" : "Pulisci",
|
||||||
|
"refund_address" : "Indirizzo di rimborso",
|
||||||
|
"change_exchange_provider" : "Cambia Exchange",
|
||||||
|
"you_will_send" : "Conveti da",
|
||||||
|
"you_will_get" : "Converti a",
|
||||||
|
"amount_is_guaranteed" : "L'ammonare da ricevere è fissato",
|
||||||
|
"amount_is_estimate" : "L'ammontare da ricevere è una stima",
|
||||||
|
"powered_by" : "Sviluppato da ${title}",
|
||||||
|
"error" : "Errore",
|
||||||
|
"estimated" : "Stimato",
|
||||||
|
"min_value" : "Min: ${value} ${currency}",
|
||||||
|
"max_value" : "Max: ${value} ${currency}",
|
||||||
|
"change_currency" : "Cambia Moneta",
|
||||||
|
|
||||||
|
|
||||||
|
"copy_id" : "Copia ID",
|
||||||
|
"exchange_result_write_down_trade_id" : "Gentilmente fai una copia o trascrivi l'ID dello scambio per continuare.",
|
||||||
|
"trade_id" : "ID Scambio:",
|
||||||
|
"copied_to_clipboard" : "Copiato negli Appunti",
|
||||||
|
"saved_the_trade_id" : "Ho salvato l'ID dello scambio",
|
||||||
|
"fetching" : "Recupero",
|
||||||
|
"id" : "ID: ",
|
||||||
|
"amount" : "Ammontare: ",
|
||||||
|
"payment_id" : "ID Pagamento: ",
|
||||||
|
"status" : "Stato: ",
|
||||||
|
"offer_expires_in" : "Offerta termina tra: ",
|
||||||
|
"trade_is_powered_by" : "Questo scambio è fornito da ${provider}",
|
||||||
|
"copy_address" : "Copia Indirizzo",
|
||||||
|
"exchange_result_confirm" : "Cliccando su Conferma, invierai ${fetchingLabel} ${from} dal tuo portafoglio chiamato ${walletName} all'indirizzo mostrato qui in basso. O puoi inviare dal tuo portafoglio esterno all'indirizzo/codice QR mostrato in basso.\n\nGentilmente clicca su Conferma per continuare o torna indietro per cambiare l'ammontare.",
|
||||||
|
"exchange_result_description" : "Devi inviare un minimo di ${fetchingLabel} ${from} all'indirizzo mostrato nella pagina seguente. Se invii un ammontare inferiore a ${fetchingLabel} ${from} la conversione potrebbe non andare a buon fine e l'indirizzo potrebbe non essere rimborsato.",
|
||||||
|
"exchange_result_write_down_ID" : "*Gentilmente fai una copia o trascrivi il tuo ID mostrato in alto.",
|
||||||
|
"confirm" : "Conferma",
|
||||||
|
"confirm_sending" : "Conferma l'invio",
|
||||||
|
"commit_transaction_amount_fee" : "Invia transazione\nAmmontare: ${amount}\nCommissione: ${fee}",
|
||||||
|
"sending" : "Invio",
|
||||||
|
"transaction_sent" : "Transazione inviata!",
|
||||||
|
"expired" : "Scaduta",
|
||||||
|
"time" : "${minutes}m ${seconds}s",
|
||||||
|
"send_xmr" : "Invia XMR",
|
||||||
|
"exchange_new_template" : "Nuovo modello",
|
||||||
|
|
||||||
|
"faq" : "Domande Frequenti",
|
||||||
|
|
||||||
|
|
||||||
|
"enter_your_pin" : "Inserisci il tuo PIN",
|
||||||
|
"loading_your_wallet" : "Caricamento portafoglio",
|
||||||
|
|
||||||
|
|
||||||
|
"new_wallet" : "Nuovo Portafoglio",
|
||||||
|
"wallet_name" : "Nome del Portafoglio",
|
||||||
|
"continue_text" : "Continua",
|
||||||
|
"choose_wallet_currency" : "Gentilmente scegli la moneta del portafoglio:",
|
||||||
|
|
||||||
|
|
||||||
|
"node_new" : "Nuovo Nodo",
|
||||||
|
"node_address" : "Indirizzo Nodo",
|
||||||
|
"node_port" : "Porta Nodo",
|
||||||
|
"login" : "Accedi",
|
||||||
|
"password" : "Password",
|
||||||
|
"nodes" : "Nodi",
|
||||||
|
"node_reset_settings_title" : "Ripristina impostazioni",
|
||||||
|
"nodes_list_reset_to_default_message" : "Sei sicuro di voler ripristinare le impostazioni predefinite?",
|
||||||
|
"change_current_node" : "Sei sicuro di voler cambiare il nodo corrente con ${node}?",
|
||||||
|
"change" : "Cambia",
|
||||||
|
"remove_node" : "Rimuovi nodo",
|
||||||
|
"remove_node_message" : "Sei sicuro di voler rimuovere il nodo selezionato?",
|
||||||
|
"remove" : "Remuovi",
|
||||||
|
"delete" : "Elimina",
|
||||||
|
"add_new_node" : "Aggiungi nuovo nodo",
|
||||||
|
"change_current_node_title" : "Cambia nodo corrente",
|
||||||
|
"node_test" : "Test",
|
||||||
|
"node_connection_successful" : "Connessione avvenuta con successo",
|
||||||
|
"node_connection_failed" : "Connessione fallita",
|
||||||
|
"new_node_testing" : "Test novo nodo",
|
||||||
|
|
||||||
|
|
||||||
|
"use" : "Passa a ",
|
||||||
|
"digit_pin" : "-cifre PIN",
|
||||||
|
|
||||||
|
|
||||||
|
"share_address" : "Condividi indirizzo",
|
||||||
|
"receive_amount" : "Ammontare",
|
||||||
|
"subaddresses" : "Sottoindirizzi",
|
||||||
|
"addresses" : "Indirizzi",
|
||||||
|
"scan_qr_code" : "Scansiona il codice QR per ottenere l'indirizzo",
|
||||||
|
"rename" : "Rinomina",
|
||||||
|
"choose_account" : "Scegli account",
|
||||||
|
"create_new_account" : "Crea nuovo account",
|
||||||
|
"accounts_subaddresses" : "Accounts e sottoindirizzi",
|
||||||
|
|
||||||
|
|
||||||
|
"restore_restore_wallet" : "Recupera Portafoglio",
|
||||||
|
"restore_title_from_seed_keys" : "Recupera dal seme/chiavi",
|
||||||
|
"restore_description_from_seed_keys" : "Recupera il tuo portafoglio dal seme/chiavi che hai salvato in un posto sicuro",
|
||||||
|
"restore_next" : "Prossimo",
|
||||||
|
"restore_title_from_backup" : "Recupera da backup",
|
||||||
|
"restore_description_from_backup" : "Puoi recuperare l'app Cake Wallet per intero dal tuo file di backup",
|
||||||
|
"restore_seed_keys_restore" : "Recupera Seme/Chiavi",
|
||||||
|
"restore_title_from_seed" : "Recupera dal seme",
|
||||||
|
"restore_description_from_seed" : "Recupera il tuo portafoglio da una combinazione di 25 o 13 parole",
|
||||||
|
"restore_title_from_keys" : "Recupera dalle chiavi",
|
||||||
|
"restore_description_from_keys" : "Recupera il tuo portafoglio da una sequenza di caratteri generati dalle tue chiavi private",
|
||||||
|
"restore_wallet_name" : "Nome Portafoglio",
|
||||||
|
"restore_address" : "Indirizzo",
|
||||||
|
"restore_view_key_private" : "Chiave di Visualizzazione (privata)",
|
||||||
|
"restore_spend_key_private" : "Chiave di Spesa (privata)",
|
||||||
|
"restore_recover" : "Recupera",
|
||||||
|
"restore_wallet_restore_description" : "Descrizione recupero Portafoglio",
|
||||||
|
"restore_new_seed" : "Nuovo seme",
|
||||||
|
"restore_active_seed" : "Seme attivo",
|
||||||
|
"restore_bitcoin_description_from_seed" : "Recupera il tuo portafoglio da una combinazione di 12 parole",
|
||||||
|
"restore_bitcoin_description_from_keys" : "Recupera il tuo portafoglio da una stringa WIF generata dalle tue chiavi private",
|
||||||
|
"restore_bitcoin_title_from_keys" : "Recupera da WIF",
|
||||||
|
"restore_from_date_or_blockheight" : "Gentilmente inserisci la data di un paio di giorni prima che hai creato questo portafoglio. Oppure inserisci l'altezza del blocco se la conosci",
|
||||||
|
|
||||||
|
|
||||||
|
"seed_reminder" : "Gentilmente trascrivi le parole. Ti tornerà utie in caso perdessi o ripristinassi il tuo telefono",
|
||||||
|
"seed_title" : "Seme",
|
||||||
|
"seed_share" : "Condividi seme",
|
||||||
|
"copy" : "Copia",
|
||||||
|
|
||||||
|
|
||||||
|
"seed_language_choose" : "Gentilmente scegli la lingua del seme:",
|
||||||
|
"seed_choose" : "Scegli la lingua del seme",
|
||||||
|
"seed_language_next" : "Prossimo",
|
||||||
|
"seed_language_english" : "Inglese",
|
||||||
|
"seed_language_chinese" : "Cinese",
|
||||||
|
"seed_language_dutch" : "Olandese",
|
||||||
|
"seed_language_german" : "Tedesco",
|
||||||
|
"seed_language_japanese" : "Giapponese",
|
||||||
|
"seed_language_portuguese" : "Portoghese",
|
||||||
|
"seed_language_russian" : "Russo",
|
||||||
|
"seed_language_spanish" : "Spagnolo",
|
||||||
|
|
||||||
|
|
||||||
|
"send_title" : "Invia",
|
||||||
|
"send_your_wallet" : "Il tuo portafoglio",
|
||||||
|
"send_address" : "${cryptoCurrency} indirizzo",
|
||||||
|
"send_payment_id" : "ID Pagamento (opzionale)",
|
||||||
|
"all" : "TUTTO",
|
||||||
|
"send_error_minimum_value" : "L'ammontare minimo è 0.01",
|
||||||
|
"send_error_currency" : "L'ammontare può contenere solo numeri",
|
||||||
|
"send_estimated_fee" : "Commissione stimata:",
|
||||||
|
"send_priority" : "Attualmente la commissione è impostata a priorità ${transactionPriority} .\nLa priorità della transazione può essere modificata nelle impostazioni",
|
||||||
|
"send_creating_transaction" : "Creazione della transazione",
|
||||||
|
"send_templates" : "Modelli",
|
||||||
|
"send_new" : "Nuovo",
|
||||||
|
"send_amount" : "Ammontare:",
|
||||||
|
"send_fee" : "Commissione:",
|
||||||
|
"send_name" : "Nome",
|
||||||
|
"send_got_it" : "Ho capito",
|
||||||
|
"send_sending" : "Invio...",
|
||||||
|
"send_success" : " ${crypto} inviati con successo",
|
||||||
|
|
||||||
|
|
||||||
|
"settings_title" : "Impostazioni",
|
||||||
|
"settings_nodes" : "Nodi",
|
||||||
|
"settings_current_node" : "Nodo attuale",
|
||||||
|
"settings_wallets" : "Portafogli",
|
||||||
|
"settings_display_balance_as" : "Mostra saldo come",
|
||||||
|
"settings_currency" : "Moneta",
|
||||||
|
"settings_fee_priority" : "Priorità commissione",
|
||||||
|
"settings_save_recipient_address" : "Salva indirizzo di destinazione",
|
||||||
|
"settings_personal" : "Personali",
|
||||||
|
"settings_change_pin" : "Cambia PIN",
|
||||||
|
"settings_change_language" : "Cambia lingua",
|
||||||
|
"settings_allow_biometrical_authentication" : "Consenti autenticazione biometrica",
|
||||||
|
"settings_dark_mode" : "Tema scuro",
|
||||||
|
"settings_transactions" : "Transazioni",
|
||||||
|
"settings_trades" : "Scambi",
|
||||||
|
"settings_display_on_dashboard_list" : "Mostra nella lista della pagina principale",
|
||||||
|
"settings_all" : "TUTTO",
|
||||||
|
"settings_only_trades" : "Solo scambi",
|
||||||
|
"settings_only_transactions" : "Solo transazioni",
|
||||||
|
"settings_none" : "Nessuno",
|
||||||
|
"settings_support" : "Supporto",
|
||||||
|
"settings_terms_and_conditions" : "Termini e condizioni",
|
||||||
|
"pin_is_incorrect" : "Il PIN non è corretto",
|
||||||
|
|
||||||
|
|
||||||
|
"setup_pin" : "Imposta PIN",
|
||||||
|
"enter_your_pin_again" : "Inserisci il tuo pin di nuovo",
|
||||||
|
"setup_successful" : "Il tuo PIN è stato impostato con successo!",
|
||||||
|
|
||||||
|
|
||||||
|
"wallet_keys" : "Seme Portafoglio /chiavi",
|
||||||
|
"wallet_seed" : "Seme Portafoglio",
|
||||||
|
"private_key" : "Chiave privata",
|
||||||
|
"public_key" : "Chiave pubblica",
|
||||||
|
"view_key_private" : "Chiave di visualizzazione (privata)",
|
||||||
|
"view_key_public" : "Chiave di visualizzazione (pubblica)",
|
||||||
|
"spend_key_private" : "Chiave di spesa (privata)",
|
||||||
|
"spend_key_public" : "Chiave di spesa (pubblica)",
|
||||||
|
"copied_key_to_clipboard" : " ${key} copiata negli Appunti",
|
||||||
|
|
||||||
|
|
||||||
|
"new_subaddress_title" : "Nuovo indirizzo",
|
||||||
|
"new_subaddress_label_name" : "Nome etichetta",
|
||||||
|
"new_subaddress_create" : "Crea",
|
||||||
|
|
||||||
|
|
||||||
|
"subaddress_title" : "Lista sottoindirizzi",
|
||||||
|
|
||||||
|
|
||||||
|
"trade_details_title" : "Dettagli Scambio",
|
||||||
|
"trade_details_id" : "ID",
|
||||||
|
"trade_details_state" : "Stato",
|
||||||
|
"trade_details_fetching" : "Recupero",
|
||||||
|
"trade_details_provider" : "Fornitore",
|
||||||
|
"trade_details_created_at" : "Creato alle",
|
||||||
|
"trade_details_pair" : "Coppia",
|
||||||
|
"trade_details_copied" : "${title} copiati negli Appunti",
|
||||||
|
|
||||||
|
|
||||||
|
"trade_history_title" : "Storico scambi",
|
||||||
|
|
||||||
|
|
||||||
|
"transaction_details_title" : "Dettagli Transazione",
|
||||||
|
"transaction_details_transaction_id" : "ID Transazione",
|
||||||
|
"transaction_details_date" : "Data",
|
||||||
|
"transaction_details_height" : "Altezza",
|
||||||
|
"transaction_details_amount" : "Ammontare",
|
||||||
|
"transaction_details_fee" : "Commissione",
|
||||||
|
"transaction_details_copied" : "${title} copiati negli Appunti",
|
||||||
|
"transaction_details_recipient_address" : "Indirizzo destinatario",
|
||||||
|
|
||||||
|
|
||||||
|
"wallet_list_title" : "Portafoglio Monero",
|
||||||
|
"wallet_list_create_new_wallet" : "Crea Nuovo Portafoglio",
|
||||||
|
"wallet_list_restore_wallet" : "Recupera Portafoglio",
|
||||||
|
"wallet_list_load_wallet" : "Caricamento Portafoglio",
|
||||||
|
"wallet_list_loading_wallet" : "Caricamento portafoglio ${wallet_name}",
|
||||||
|
"wallet_list_failed_to_load" : "Caricamento portafoglio ${wallet_name} fallito. ${error}",
|
||||||
|
"wallet_list_removing_wallet" : "Rimozione portafoglio ${wallet_name}",
|
||||||
|
"wallet_list_failed_to_remove" : "Rimozione portafoglio ${wallet_name} fallita. ${error}",
|
||||||
|
|
||||||
|
|
||||||
|
"widgets_address" : "Indirizzo",
|
||||||
|
"widgets_restore_from_blockheight" : "Recupera da altezza blocco",
|
||||||
|
"widgets_restore_from_date" : "Recupera da data",
|
||||||
|
"widgets_or" : "o",
|
||||||
|
"widgets_seed" : "Seme",
|
||||||
|
|
||||||
|
|
||||||
|
"router_no_route" : "Nessun percorso definito per ${name}",
|
||||||
|
|
||||||
|
|
||||||
|
"error_text_account_name" : "Il nome dell'Account può contenere solo lettere, numeri\ne deve avere una lunghezza compresa tra 1 e 15 caratteri",
|
||||||
|
"error_text_contact_name" : "Il nome del Contatto non può contenere i simboli ` , ' \" \ne deve avere una lunghezza compresa tra 1 e 32 caratteri",
|
||||||
|
"error_text_address" : "L'indirizzo del Portafoglio deve corrispondere alla tipologia\ndi criptovaluta",
|
||||||
|
"error_text_node_address" : "Gentilmente inserisci un indirizzo iPv4",
|
||||||
|
"error_text_node_port" : "La porta del nodo può contenere solo numeri compresi tra 0 e 65535",
|
||||||
|
"error_text_payment_id" : "l'ID del pagamento può contenere solo da 16 a 64 caratteri in hex",
|
||||||
|
"error_text_xmr" : "Il valore XMR non può eccedere il saldo disponibile.\nIl numero delle cifre decimali deve essere inferiore o uguale a 12",
|
||||||
|
"error_text_fiat" : "L'ammontare non può eccedere il saldo dispoinibile.\nIl numero di cifre decimali deve essere inferiore o uguale a 2",
|
||||||
|
"error_text_subaddress_name" : "Il nome del sottoindirizzo non può contenere i simboli ` , ' \" \ne deve avere una lunghezza compresa tra 1 e 20 caratteri",
|
||||||
|
"error_text_amount" : "L'ammontare può contenere solo numeri",
|
||||||
|
"error_text_wallet_name" : "Il nome del portafoglio può contenere solo lettere, numeri\ne deve avere una lunghezza compresa tra 1 e 15 caratteri",
|
||||||
|
"error_text_keys" : "Le chiavi del portafoglio possono contenere solo 64 caratteri in hex",
|
||||||
|
"error_text_crypto_currency" : "Il numero delle cifre decimali\ndeve essere inferiore o uguale a 12",
|
||||||
|
"error_text_minimal_limit" : "Lo scambio per ${provider} non è stato creato. L'ammontare è inferiore al minimo: ${min} ${currency}",
|
||||||
|
"error_text_maximum_limit" : "Lo scambio per ${provider} non è stato creato. L'ammontare è superiore al massimo: ${max} ${currency}",
|
||||||
|
"error_text_limits_loading_failed" : "Lo scambio per ${provider} non è stato creato. Caricamento dei limiti fallito",
|
||||||
|
"error_text_template" : "Il nome del modello e l'indirizzo non possono contenere i simboli ` , ' \" \ne devono avere una lunghezza compresa tra 1 e 106 caratteri",
|
||||||
|
|
||||||
|
|
||||||
|
"auth_store_ban_timeout" : "ban_timeout",
|
||||||
|
"auth_store_banned_for" : "Bannato per ",
|
||||||
|
"auth_store_banned_minutes" : " minuti",
|
||||||
|
"auth_store_incorrect_password" : "PIN non corretto",
|
||||||
|
"wallet_store_monero_wallet" : "Portafoglio Monero",
|
||||||
|
"wallet_restoration_store_incorrect_seed_length" : "Lunghezza seme non corretta",
|
||||||
|
|
||||||
|
|
||||||
|
"full_balance" : "Saldo Completo",
|
||||||
|
"available_balance" : "Saldo Disponibile",
|
||||||
|
"hidden_balance" : "Saldo Nascosto",
|
||||||
|
|
||||||
|
|
||||||
|
"sync_status_syncronizing" : "SINCRONIZZAZIONE",
|
||||||
|
"sync_status_syncronized" : "SINCRONIZZATO",
|
||||||
|
"sync_status_not_connected" : "NON CONNESSO",
|
||||||
|
"sync_status_starting_sync" : "INIZIO SINC",
|
||||||
|
"sync_status_failed_connect" : "DISCONNESSO",
|
||||||
|
"sync_status_connecting" : "CONNESSIONE",
|
||||||
|
"sync_status_connected" : "CONNESSO",
|
||||||
|
|
||||||
|
|
||||||
|
"transaction_priority_slow" : "Bassa",
|
||||||
|
"transaction_priority_regular" : "Regolare",
|
||||||
|
"transaction_priority_medium" : "Media",
|
||||||
|
"transaction_priority_fast" : "Alta",
|
||||||
|
"transaction_priority_fastest" : "Massima",
|
||||||
|
|
||||||
|
|
||||||
|
"trade_for_not_created" : "Lo scambio per ${title} non è stato creato.",
|
||||||
|
"trade_not_created" : "Scambio non creato.",
|
||||||
|
"trade_id_not_found" : "Scambio ${tradeId} di ${title} not trovato.",
|
||||||
|
"trade_not_found" : "Scambio non trovato.",
|
||||||
|
|
||||||
|
|
||||||
|
"trade_state_pending" : "In corso",
|
||||||
|
"trade_state_confirming" : "Conferma",
|
||||||
|
"trade_state_trading" : "Scambio",
|
||||||
|
"trade_state_traded" : "Scambiato",
|
||||||
|
"trade_state_complete" : "Completato",
|
||||||
|
"trade_state_to_be_created" : "Da creare",
|
||||||
|
"trade_state_unpaid" : "Non pagato",
|
||||||
|
"trade_state_underpaid" : "Sottopagato",
|
||||||
|
"trade_state_paid_unconfirmed" : "Pagato non confermato",
|
||||||
|
"trade_state_paid" : "Pagato",
|
||||||
|
"trade_state_btc_sent" : "Btc inviati",
|
||||||
|
"trade_state_timeout" : "Timeout",
|
||||||
|
"trade_state_created" : "Creato",
|
||||||
|
"trade_state_finished" : "Finito",
|
||||||
|
|
||||||
|
"change_language" : "Cambia lingua",
|
||||||
|
"change_language_to" : "Cambia lingua in ${language}?",
|
||||||
|
|
||||||
|
"paste" : "Incolla",
|
||||||
|
"restore_from_seed_placeholder" : "Gentilmente inserisci o incolla il tuo seme qui",
|
||||||
|
"add_new_word" : "Aggiungi nuova parola",
|
||||||
|
"incorrect_seed" : "Il testo inserito non è valido.",
|
||||||
|
|
||||||
|
"biometric_auth_reason" : "Scansiona la tua impronta per autenticarti",
|
||||||
|
"version" : "Versione ${currentVersion}",
|
||||||
|
|
||||||
|
"openalias_alert_title" : "XMR Destinatario Rilevato",
|
||||||
|
"openalias_alert_content" : "Invierai i tuoi fondi a\n${recipient_name}",
|
||||||
|
|
||||||
|
"card_address" : "Indirizzo:",
|
||||||
|
"buy" : "Compra",
|
||||||
|
|
||||||
|
"placeholder_transactions" : "Le tue transazioni saranno mostrate qui",
|
||||||
|
"placeholder_contacts" : "I tuoi contatti saranno mostrati qui",
|
||||||
|
|
||||||
|
"template" : "Modello",
|
||||||
|
"confirm_delete_template" : "Questa azione cancellerà questo modello. Desideri continuare?",
|
||||||
|
"confirm_delete_wallet" : "Questa azione cancellerà questo portafoglio. Desideri continuare?",
|
||||||
|
|
||||||
|
"picker_description" : "Per scegliere ChangeNOW o MorphToken, gentilmente cambia prima la tua coppia di valute",
|
||||||
|
|
||||||
|
"change_wallet_alert_title" : "Cambia portafoglio attuale",
|
||||||
|
"change_wallet_alert_content" : "Sei sicuro di voler cambiare il portafoglio attuale con ${wallet_name}?",
|
||||||
|
|
||||||
|
"creating_new_wallet" : "Creazione nuovo portafoglio",
|
||||||
|
"creating_new_wallet_error" : "Errore: ${description}",
|
||||||
|
|
||||||
|
"seed_alert_title" : "Attenzione",
|
||||||
|
"seed_alert_content" : "Il seme è l'unico modo per recuperare il tuo portafoglio. L'hai trascritto?",
|
||||||
|
"seed_alert_back" : "Torna indietro",
|
||||||
|
"seed_alert_yes" : "Sì, l'ho fatto",
|
||||||
|
|
||||||
|
"exchange_sync_alert_content" : "Gentilmente aspetta che il tuo portafoglio sia sincronizzato",
|
||||||
|
|
||||||
|
"pre_seed_title" : "IMPORTANTE",
|
||||||
|
"pre_seed_description" : "Nella pagina seguente ti sarà mostrata una serie di parole ${words}. Questo è il tuo seme unico e privato ed è l'UNICO modo per recuperare il tuo portafoglio in caso di perdita o malfunzionamento. E' TUA responsabilità trascriverlo e conservarlo in un posto sicuro fuori dall'app Cake Wallet.",
|
||||||
|
"pre_seed_button_text" : "Ho capito. Mostrami il seme",
|
||||||
|
|
||||||
|
"xmr_to_error" : "XMR.TO errore",
|
||||||
|
"xmr_to_error_description" : "Ammontare invalido. Il limite massimo è 8 cifre dopo il punto decimale",
|
||||||
|
|
||||||
|
"provider_error" : "${provider} errore",
|
||||||
|
|
||||||
|
"use_ssl" : "Usa SSL",
|
||||||
|
|
||||||
|
"color_theme" : "Colore tema",
|
||||||
|
"light_theme" : "Bianco",
|
||||||
|
"bright_theme" : "Colorato",
|
||||||
|
"dark_theme" : "Scuro",
|
||||||
|
"enter_your_note" : "Inserisci la tua nota…",
|
||||||
|
"note_optional" : "Nota (opzionale)",
|
||||||
|
"note_tap_to_change" : "Nota (clicca per cambiare)",
|
||||||
|
"transaction_key" : "Chiave Transazione",
|
||||||
|
"confirmations" : "Conferme",
|
||||||
|
"recipient_address" : "Indirizzo di destinazione",
|
||||||
|
|
||||||
|
"extra_id" : "Extra ID:",
|
||||||
|
"destination_tag" : "Tag destinazione:",
|
||||||
|
"memo" : "Memo:",
|
||||||
|
|
||||||
|
"backup" : "Backup",
|
||||||
|
"change_password" : "Cambia password",
|
||||||
|
"backup_password" : "Backup password",
|
||||||
|
"write_down_backup_password" : "Gentilmente trascrivi la password del backup, che è usata per importare i tuoi file di backup.",
|
||||||
|
"export_backup" : "Esporta backup",
|
||||||
|
"save_backup_password" : "Gentilmente assicurati di aver salvato la password del tuo backup. Senza questa non sarai in grado di importare i tuoi file di backup.",
|
||||||
|
"backup_file" : "Backup file",
|
||||||
|
|
||||||
|
"edit_backup_password" : "Modifica Password Backup",
|
||||||
|
"save_backup_password_alert" : "Salva password Backup",
|
||||||
|
"change_backup_password_alert" : "I precedenti file di backup non potranno essere importati con la nuova password di backup. La nuova password di backup verrà usata soltanto per i nuovi file di backup. Sei sicuro di voler cambiare la tua password di backup?",
|
||||||
|
|
||||||
|
"enter_backup_password" : "Inserisci la password di backup qui",
|
||||||
|
"select_backup_file" : "Seleziona file di backup",
|
||||||
|
"import" : "Importa",
|
||||||
|
"please_select_backup_file" : "Gentilmente seleziona il file di backup e inserisci la password di backup.",
|
||||||
|
|
||||||
|
"fixed_rate" : "Tasso fisso",
|
||||||
|
"fixed_rate_alert" : "Potrai inserire l'ammontare da ricevere quando il tasso è fisso. Vuoi cambiare alla modalità tasso fisso?",
|
||||||
|
|
||||||
|
"xlm_extra_info" : "Gentilmente ricorda di indicare il Memo ID quando invii la transazione XLM per lo scambio",
|
||||||
|
"xrp_extra_info" : "Gentilmente ricorda di indicare il Tag di Destinazione quando invii una transazione XRP per lo scambio",
|
||||||
|
|
||||||
|
"exchange_incorrect_current_wallet_for_xmr" : "Se vuoi scambiare XMR dal tuo saldo Cake Wallet Monero, gentilmente passa al tuo portafoglio Monero.",
|
||||||
|
"confirmed" : "Confermato",
|
||||||
|
"unconfirmed" : "Non confermato",
|
||||||
|
"displayable" : "Visualizzabile",
|
||||||
|
|
||||||
|
"submit_request" : "invia una richiesta"
|
||||||
|
}
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "ウォレットの復元",
|
"restore_wallet_restore_description" : "ウォレットの復元",
|
||||||
"restore_new_seed" : "新しい種",
|
"restore_new_seed" : "新しい種",
|
||||||
"restore_active_seed" : "アクティブシード",
|
"restore_active_seed" : "アクティブシード",
|
||||||
"restore_bitcoin_description_from_seed" : "12ワードの組み合わせコードからウォレットを復元する",
|
"restore_bitcoin_description_from_seed" : "24ワードの組み合わせコードからウォレットを復元する",
|
||||||
"restore_bitcoin_description_from_keys" : "秘密鍵から生成されたWIF文字列からウォレットを復元します",
|
"restore_bitcoin_description_from_keys" : "秘密鍵から生成されたWIF文字列からウォレットを復元します",
|
||||||
"restore_bitcoin_title_from_keys" : "WIFから復元",
|
"restore_bitcoin_title_from_keys" : "WIFから復元",
|
||||||
"restore_from_date_or_blockheight" : "このウォレットを作成する数日前に日付を入力してください。 または、ブロックの高さがわかっている場合は、代わりに入力してください",
|
"restore_from_date_or_blockheight" : "このウォレットを作成する数日前に日付を入力してください。 または、ブロックの高さがわかっている場合は、代わりに入力してください",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "월렛 복원 설명",
|
"restore_wallet_restore_description" : "월렛 복원 설명",
|
||||||
"restore_new_seed" : "새로운 씨앗",
|
"restore_new_seed" : "새로운 씨앗",
|
||||||
"restore_active_seed" : "활성 종자",
|
"restore_active_seed" : "활성 종자",
|
||||||
"restore_bitcoin_description_from_seed" : "12 단어 조합 코드에서 지갑 복원",
|
"restore_bitcoin_description_from_seed" : "24 단어 조합 코드에서 지갑 복원",
|
||||||
"restore_bitcoin_description_from_keys" : "개인 키에서 생성 된 WIF 문자열에서 지갑 복원",
|
"restore_bitcoin_description_from_keys" : "개인 키에서 생성 된 WIF 문자열에서 지갑 복원",
|
||||||
"restore_bitcoin_title_from_keys" : "WIF에서 복원",
|
"restore_bitcoin_title_from_keys" : "WIF에서 복원",
|
||||||
"restore_from_date_or_blockheight" : "이 지갑을 생성하기 며칠 전에 날짜를 입력하십시오. 또는 블록 높이를 알고있는 경우 대신 입력하십시오.",
|
"restore_from_date_or_blockheight" : "이 지갑을 생성하기 며칠 전에 날짜를 입력하십시오. 또는 블록 높이를 알고있는 경우 대신 입력하십시오.",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Portemonnee-herstelbeschrijving",
|
"restore_wallet_restore_description" : "Portemonnee-herstelbeschrijving",
|
||||||
"restore_new_seed" : "Nieuw zaad",
|
"restore_new_seed" : "Nieuw zaad",
|
||||||
"restore_active_seed" : "Actief zaad",
|
"restore_active_seed" : "Actief zaad",
|
||||||
"restore_bitcoin_description_from_seed" : "Herstel uw portemonnee met een combinatiecode van 12 woorden",
|
"restore_bitcoin_description_from_seed" : "Herstel uw portemonnee met een combinatiecode van 24 woorden",
|
||||||
"restore_bitcoin_description_from_keys" : "Herstel uw portemonnee van de gegenereerde WIF-string van uw privésleutels",
|
"restore_bitcoin_description_from_keys" : "Herstel uw portemonnee van de gegenereerde WIF-string van uw privésleutels",
|
||||||
"restore_bitcoin_title_from_keys" : "Herstel van WIF",
|
"restore_bitcoin_title_from_keys" : "Herstel van WIF",
|
||||||
"restore_from_date_or_blockheight" : "Voer een datum in een paar dagen voordat u deze portemonnee heeft gemaakt. Of als u de blokhoogte kent, voert u deze in",
|
"restore_from_date_or_blockheight" : "Voer een datum in een paar dagen voordat u deze portemonnee heeft gemaakt. Of als u de blokhoogte kent, voert u deze in",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Opis przywracania portfela",
|
"restore_wallet_restore_description" : "Opis przywracania portfela",
|
||||||
"restore_new_seed" : "Nowe nasienie",
|
"restore_new_seed" : "Nowe nasienie",
|
||||||
"restore_active_seed" : "Aktywne nasiona",
|
"restore_active_seed" : "Aktywne nasiona",
|
||||||
"restore_bitcoin_description_from_seed" : "Przywróć swój portfel z kodu złożonego z 12 słów",
|
"restore_bitcoin_description_from_seed" : "Przywróć swój portfel z kodu złożonego z 24 słów",
|
||||||
"restore_bitcoin_description_from_keys" : "Przywróć swój portfel z wygenerowanego ciągu WIF z kluczy prywatnych",
|
"restore_bitcoin_description_from_keys" : "Przywróć swój portfel z wygenerowanego ciągu WIF z kluczy prywatnych",
|
||||||
"restore_bitcoin_title_from_keys" : "Przywróć z WIF",
|
"restore_bitcoin_title_from_keys" : "Przywróć z WIF",
|
||||||
"restore_from_date_or_blockheight" : "Wprowadź datę na kilka dni przed utworzeniem tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego",
|
"restore_from_date_or_blockheight" : "Wprowadź datę na kilka dni przed utworzeniem tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Restauração da carteira",
|
"restore_wallet_restore_description" : "Restauração da carteira",
|
||||||
"restore_new_seed" : "Nova semente",
|
"restore_new_seed" : "Nova semente",
|
||||||
"restore_active_seed" : "Semente ativa",
|
"restore_active_seed" : "Semente ativa",
|
||||||
"restore_bitcoin_description_from_seed" : "Restaure sua carteira a partir de um código de combinação de 12 palavras",
|
"restore_bitcoin_description_from_seed" : "Restaure sua carteira a partir de um código de combinação de 24 palavras",
|
||||||
"restore_bitcoin_description_from_keys" : "Restaure sua carteira a partir da string WIF gerada de suas chaves privadas",
|
"restore_bitcoin_description_from_keys" : "Restaure sua carteira a partir da string WIF gerada de suas chaves privadas",
|
||||||
"restore_bitcoin_title_from_keys" : "Restaurar de WIF",
|
"restore_bitcoin_title_from_keys" : "Restaurar de WIF",
|
||||||
"restore_from_date_or_blockheight" : "Insira uma data alguns dias antes de criar esta carteira. Ou se você souber a altura do bloco, insira-o",
|
"restore_from_date_or_blockheight" : "Insira uma data alguns dias antes de criar esta carteira. Ou se você souber a altura do bloco, insira-o",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Описание восстановления кошелька",
|
"restore_wallet_restore_description" : "Описание восстановления кошелька",
|
||||||
"restore_new_seed" : "Новая мнемоническая фраза",
|
"restore_new_seed" : "Новая мнемоническая фраза",
|
||||||
"restore_active_seed" : "Активная мнемоническая фраза",
|
"restore_active_seed" : "Активная мнемоническая фраза",
|
||||||
"restore_bitcoin_description_from_seed" : "Вы можете восстановить кошелёк используя 12-ти значную мнемоническую фразу",
|
"restore_bitcoin_description_from_seed" : "Вы можете восстановить кошелёк используя 24-ти значную мнемоническую фразу",
|
||||||
"restore_bitcoin_description_from_keys" : "Вы можете восстановить кошелёк с помощью WIF",
|
"restore_bitcoin_description_from_keys" : "Вы можете восстановить кошелёк с помощью WIF",
|
||||||
"restore_bitcoin_title_from_keys" : "Восстановить с помощью WIF",
|
"restore_bitcoin_title_from_keys" : "Восстановить с помощью WIF",
|
||||||
"restore_from_date_or_blockheight" : "Пожалуйста, введите дату за несколько дней до создания этого кошелька. Или, если вы знаете высоту блока, введите ее значение",
|
"restore_from_date_or_blockheight" : "Пожалуйста, введите дату за несколько дней до создания этого кошелька. Или, если вы знаете высоту блока, введите ее значение",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "Опис відновлюваного гаманця",
|
"restore_wallet_restore_description" : "Опис відновлюваного гаманця",
|
||||||
"restore_new_seed" : "Нова мнемонічна фраза",
|
"restore_new_seed" : "Нова мнемонічна фраза",
|
||||||
"restore_active_seed" : "Активна мнемонічна фраза",
|
"restore_active_seed" : "Активна мнемонічна фраза",
|
||||||
"restore_bitcoin_description_from_seed" : "Ви можете відновити гаманець використовуючи 12-ти слівну мнемонічну фразу",
|
"restore_bitcoin_description_from_seed" : "Ви можете відновити гаманець використовуючи 24-ти слівну мнемонічну фразу",
|
||||||
"restore_bitcoin_description_from_keys" : "Ви можете відновити гаманець за допомогою WIF",
|
"restore_bitcoin_description_from_keys" : "Ви можете відновити гаманець за допомогою WIF",
|
||||||
"restore_bitcoin_title_from_keys" : "Відновити за допомогою WIF",
|
"restore_bitcoin_title_from_keys" : "Відновити за допомогою WIF",
|
||||||
"restore_from_date_or_blockheight" : "Будь ласка, введіть дату за кілька днів до створення цього гаманця. Або, якщо ви знаєте висоту блоку, введіть її значення",
|
"restore_from_date_or_blockheight" : "Будь ласка, введіть дату за кілька днів до створення цього гаманця. Або, якщо ви знаєте висоту блоку, введіть її значення",
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"restore_wallet_restore_description" : "钱包还原说明",
|
"restore_wallet_restore_description" : "钱包还原说明",
|
||||||
"restore_new_seed" : "新種子",
|
"restore_new_seed" : "新種子",
|
||||||
"restore_active_seed" : "活性種子",
|
"restore_active_seed" : "活性種子",
|
||||||
"restore_bitcoin_description_from_seed" : "從12個單詞的組合碼恢復您的錢包",
|
"restore_bitcoin_description_from_seed" : "從24個單詞的組合碼恢復您的錢包",
|
||||||
"restore_bitcoin_description_from_keys" : "從私鑰中生成的WIF字符串還原您的錢包",
|
"restore_bitcoin_description_from_keys" : "從私鑰中生成的WIF字符串還原您的錢包",
|
||||||
"restore_bitcoin_title_from_keys" : "從WIF還原",
|
"restore_bitcoin_title_from_keys" : "從WIF還原",
|
||||||
"restore_from_date_or_blockheight" : "請在創建此錢包之前幾天輸入一個日期。 或者,如果您知道塊高,請改為輸入",
|
"restore_from_date_or_blockheight" : "請在創建此錢包之前幾天輸入一個日期。 或者,如果您知道塊高,請改為輸入",
|
||||||
|
|