mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 19:49:22 +00:00
Merged 4.0.94 into 4.1.0.
This commit is contained in:
commit
3e79f87ad6
8 changed files with 68 additions and 23 deletions
|
@ -294,14 +294,26 @@ extern "C"
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void load_wallet(char *path, char *password, int32_t nettype)
|
bool load_wallet(char *path, char *password, int32_t nettype)
|
||||||
{
|
{
|
||||||
nice(19);
|
nice(19);
|
||||||
Monero::NetworkType networkType = static_cast<Monero::NetworkType>(nettype);
|
Monero::NetworkType networkType = static_cast<Monero::NetworkType>(nettype);
|
||||||
Monero::Wallet *wallet = Monero::WalletManagerFactory::getWalletManager()->openWallet(std::string(path), std::string(password), networkType);
|
Monero::WalletManager *walletManager = Monero::WalletManagerFactory::getWalletManager();
|
||||||
|
Monero::Wallet *wallet = walletManager->openWallet(std::string(path), std::string(password), networkType);
|
||||||
|
int status;
|
||||||
|
std::string errorString;
|
||||||
|
|
||||||
|
wallet->statusWithErrorString(status, errorString);
|
||||||
change_current_wallet(wallet);
|
change_current_wallet(wallet);
|
||||||
|
|
||||||
|
return !(status != Monero::Wallet::Status_Ok || !errorString.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *error_string() {
|
||||||
|
return strdup(get_current_wallet()->errorString().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool is_wallet_exist(char *path)
|
bool is_wallet_exist(char *path)
|
||||||
{
|
{
|
||||||
return Monero::WalletManagerFactory::getWalletManager()->walletExists(std::string(path));
|
return Monero::WalletManagerFactory::getWalletManager()->walletExists(std::string(path));
|
||||||
|
|
8
cw_monero/lib/exceptions/wallet_opening_exception.dart
Normal file
8
cw_monero/lib/exceptions/wallet_opening_exception.dart
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
class WalletOpeningException implements Exception {
|
||||||
|
WalletOpeningException({this.message});
|
||||||
|
|
||||||
|
final String message;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() => message;
|
||||||
|
}
|
|
@ -14,7 +14,9 @@ typedef restore_wallet_from_keys = Int8 Function(Pointer<Utf8>, Pointer<Utf8>,
|
||||||
|
|
||||||
typedef is_wallet_exist = Int8 Function(Pointer<Utf8>);
|
typedef is_wallet_exist = Int8 Function(Pointer<Utf8>);
|
||||||
|
|
||||||
typedef load_wallet = Void Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
|
typedef load_wallet = Int8 Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
|
||||||
|
|
||||||
|
typedef error_string = Pointer<Utf8> Function();
|
||||||
|
|
||||||
typedef get_filename = Pointer<Utf8> Function();
|
typedef get_filename = Pointer<Utf8> Function();
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,9 @@ typedef RestoreWalletFromKeys = int Function(Pointer<Utf8>, Pointer<Utf8>,
|
||||||
|
|
||||||
typedef IsWalletExist = int Function(Pointer<Utf8>);
|
typedef IsWalletExist = int Function(Pointer<Utf8>);
|
||||||
|
|
||||||
typedef LoadWallet = void Function(Pointer<Utf8>, Pointer<Utf8>, int);
|
typedef LoadWallet = int Function(Pointer<Utf8>, Pointer<Utf8>, int);
|
||||||
|
|
||||||
|
typedef ErrorString = Pointer<Utf8> Function();
|
||||||
|
|
||||||
typedef GetFilename = Pointer<Utf8> Function();
|
typedef GetFilename = Pointer<Utf8> Function();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'dart:ffi';
|
import 'dart:ffi';
|
||||||
|
import 'package:cw_monero/exceptions/wallet_opening_exception.dart';
|
||||||
import 'package:cw_monero/wallet.dart';
|
import 'package:cw_monero/wallet.dart';
|
||||||
import 'package:ffi/ffi.dart';
|
import 'package:ffi/ffi.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
@ -32,6 +33,10 @@ final loadWalletNative = moneroApi
|
||||||
.lookup<NativeFunction<load_wallet>>('load_wallet')
|
.lookup<NativeFunction<load_wallet>>('load_wallet')
|
||||||
.asFunction<LoadWallet>();
|
.asFunction<LoadWallet>();
|
||||||
|
|
||||||
|
final errorStringNative = moneroApi
|
||||||
|
.lookup<NativeFunction<error_string>>('error_string')
|
||||||
|
.asFunction<ErrorString>();
|
||||||
|
|
||||||
void createWalletSync(
|
void createWalletSync(
|
||||||
{String path, String password, String language, int nettype = 0}) {
|
{String path, String password, String language, int nettype = 0}) {
|
||||||
final pathPointer = Utf8.toUtf8(path);
|
final pathPointer = Utf8.toUtf8(path);
|
||||||
|
@ -136,10 +141,14 @@ void restoreWalletFromKeysSync(
|
||||||
void loadWallet({String path, String password, int nettype = 0}) {
|
void loadWallet({String path, String password, int nettype = 0}) {
|
||||||
final pathPointer = Utf8.toUtf8(path);
|
final pathPointer = Utf8.toUtf8(path);
|
||||||
final passwordPointer = Utf8.toUtf8(password);
|
final passwordPointer = Utf8.toUtf8(password);
|
||||||
|
final loaded = loadWalletNative(pathPointer, passwordPointer, nettype) != 0;
|
||||||
loadWalletNative(pathPointer, passwordPointer, nettype);
|
|
||||||
free(pathPointer);
|
free(pathPointer);
|
||||||
free(passwordPointer);
|
free(passwordPointer);
|
||||||
|
|
||||||
|
if (!loaded) {
|
||||||
|
throw WalletOpeningException(
|
||||||
|
message: convertUTF8ToString(pointer: errorStringNative()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _createWallet(Map<String, dynamic> args) {
|
void _createWallet(Map<String, dynamic> args) {
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
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; };
|
||||||
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>"; };
|
||||||
|
|
|
@ -3,6 +3,7 @@ import 'package:cake_wallet/core/wallet_base.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:cw_monero/wallet_manager.dart' as monero_wallet_manager;
|
import 'package:cw_monero/wallet_manager.dart' as monero_wallet_manager;
|
||||||
import 'package:cw_monero/wallet.dart' as monero_wallet;
|
import 'package:cw_monero/wallet.dart' as monero_wallet;
|
||||||
|
import 'package:cw_monero/exceptions/wallet_opening_exception.dart';
|
||||||
import 'package:cake_wallet/monero/monero_wallet.dart';
|
import 'package:cake_wallet/monero/monero_wallet.dart';
|
||||||
import 'package:cake_wallet/core/wallet_credentials.dart';
|
import 'package:cake_wallet/core/wallet_credentials.dart';
|
||||||
import 'package:cake_wallet/core/wallet_service.dart';
|
import 'package:cake_wallet/core/wallet_service.dart';
|
||||||
|
@ -55,6 +56,18 @@ class MoneroWalletService extends WalletService<
|
||||||
|
|
||||||
final Box<WalletInfo> walletInfoSource;
|
final Box<WalletInfo> walletInfoSource;
|
||||||
|
|
||||||
|
static Future<void> _removeCache(String name) async {
|
||||||
|
final path = await pathForWallet(name: name, type: WalletType.monero);
|
||||||
|
final cacheFile = File(path);
|
||||||
|
|
||||||
|
if (cacheFile.existsSync()) {
|
||||||
|
cacheFile.deleteSync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool walletFilesExist(String path) =>
|
||||||
|
!File(path).existsSync() && !File('$path.keys').existsSync();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MoneroWallet> create(MoneroNewWalletCredentials credentials) async {
|
Future<MoneroWallet> create(MoneroNewWalletCredentials credentials) async {
|
||||||
try {
|
try {
|
||||||
|
@ -94,7 +107,7 @@ class MoneroWalletService extends WalletService<
|
||||||
try {
|
try {
|
||||||
final path = await pathForWallet(name: name, type: WalletType.monero);
|
final path = await pathForWallet(name: name, type: WalletType.monero);
|
||||||
|
|
||||||
if (!File(path).existsSync()) {
|
if (walletFilesExist(path)) {
|
||||||
await repairOldAndroidWallet(name);
|
await repairOldAndroidWallet(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,17 +121,9 @@ class MoneroWalletService extends WalletService<
|
||||||
final isValid = wallet.validate();
|
final isValid = wallet.validate();
|
||||||
|
|
||||||
if (!isValid) {
|
if (!isValid) {
|
||||||
// if (wallet.seed?.isNotEmpty ?? false) {
|
await _removeCache(name);
|
||||||
// let restore from seed in this case;
|
wallet.close();
|
||||||
// final seed = wallet.seed;
|
return openWallet(name, password);
|
||||||
// final credentials = MoneroRestoreWalletFromSeedCredentials(
|
|
||||||
// name: name, password: password, mnemonic: seed, height: 2000000)
|
|
||||||
// ..walletInfo = walletInfo;
|
|
||||||
// await remove(name);
|
|
||||||
// return restoreFromSeed(credentials);
|
|
||||||
// }
|
|
||||||
|
|
||||||
throw MoneroWalletLoadingException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await wallet.init();
|
await wallet.init();
|
||||||
|
@ -126,7 +131,15 @@ class MoneroWalletService extends WalletService<
|
||||||
return wallet;
|
return wallet;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// TODO: Implement Exception for wallet list service.
|
// TODO: Implement Exception for wallet list service.
|
||||||
print('MoneroWalletsManager Error: $e');
|
|
||||||
|
if (e.toString().contains('bad_alloc') ||
|
||||||
|
(e is WalletOpeningException &&
|
||||||
|
(e.message == 'std::bad_alloc' ||
|
||||||
|
e.message.contains('bad_alloc')))) {
|
||||||
|
await _removeCache(name);
|
||||||
|
return openWallet(name, password);
|
||||||
|
}
|
||||||
|
|
||||||
rethrow;
|
rethrow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,7 +217,7 @@ class MoneroWalletService extends WalletService<
|
||||||
final dir = Directory(oldAndroidWalletDirPath);
|
final dir = Directory(oldAndroidWalletDirPath);
|
||||||
|
|
||||||
if (!dir.existsSync()) {
|
if (!dir.existsSync()) {
|
||||||
throw MoneroWalletLoadingException();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final newWalletDirPath =
|
final newWalletDirPath =
|
||||||
|
@ -223,7 +236,6 @@ class MoneroWalletService extends WalletService<
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e.toString());
|
print(e.toString());
|
||||||
throw MoneroWalletLoadingException();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.0.91+22
|
version: 4.0.94+25
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.7.0 <3.0.0"
|
sdk: ">=2.7.0 <3.0.0"
|
||||||
|
|
Loading…
Reference in a new issue