From f9beda0ded40cd5f20e3ad7c98741712f4e85147 Mon Sep 17 00:00:00 2001 From: Aditya Kulkarni Date: Sun, 20 Oct 2019 12:11:02 -0700 Subject: [PATCH] Check for existing wallet --- lib/src/lib.rs | 18 ++++++++++++++++-- lib/zecwalletlitelib.h | 9 +++++---- src/connection.cpp | 2 +- src/liteinterface.cpp | 29 ----------------------------- 4 files changed, 22 insertions(+), 36 deletions(-) diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 8d77adc..5fdc116 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -16,9 +16,23 @@ lazy_static! { static ref LIGHTCLIENT: Mutex>> = Mutex::new(RefCell::new(None)); } +// Check if there is an existing wallet +#[no_mangle] +pub extern fn litelib_wallet_exists(chain_name: *const c_char) -> bool { + let chain_name_str = unsafe { + assert!(!chain_name.is_null()); + + CStr::from_ptr(chain_name).to_string_lossy().into_owned() + }; + + let config = LightClientConfig::create_unconnected(chain_name_str); + + config.wallet_exists() +} + // Initialize a new lightclient and store its value #[no_mangle] -pub extern fn litelib_initialze(dangerous: bool, server: *const c_char) -> *mut c_char { +pub extern fn litelib_initialze_existing(dangerous: bool, server: *const c_char) -> *mut c_char { let server_str = unsafe { assert!(!server.is_null()); @@ -34,7 +48,7 @@ pub extern fn litelib_initialze(dangerous: bool, server: *const c_char) -> *mut } }; - let lightclient = match LightClient::new(None, &config, latest_block_height) { + let lightclient = match LightClient::read_from_disk(&config) { Ok(l) => l, Err(e) => { let e_str = CString::new(format!("Error: {}", e)).unwrap(); diff --git a/lib/zecwalletlitelib.h b/lib/zecwalletlitelib.h index d1d18ec..de1345d 100644 --- a/lib/zecwalletlitelib.h +++ b/lib/zecwalletlitelib.h @@ -2,12 +2,13 @@ #define _ZEC_PAPER_RUST_H #ifdef __cplusplus -extern "C"{ +extern "C" { #endif -extern char * litelib_initialze (bool dangerous, const char* server); -extern char * litelib_execute (const char* s, const char* args); -extern void litelib_rust_free_string (char* s); +extern bool litelib_wallet_exists (const char* chain_name); +extern char * litelib_initialze_existing (bool dangerous, const char* server); +extern char * litelib_execute (const char* s, const char* args); +extern void litelib_rust_free_string (char* s); #ifdef __cplusplus } diff --git a/src/connection.cpp b/src/connection.cpp index ac06208..a078608 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -42,7 +42,7 @@ void ConnectionLoader::doAutoConnect() { // Initialize the library main->logger->write(QObject::tr("Attempting to initialize")); - litelib_initialze(config->dangerous, config->server.toStdString().c_str()); + litelib_initialze_existing(config->dangerous, config->server.toStdString().c_str()); auto connection = makeConnection(config); diff --git a/src/liteinterface.cpp b/src/liteinterface.cpp index 5f74074..7fe9580 100644 --- a/src/liteinterface.cpp +++ b/src/liteinterface.cpp @@ -56,35 +56,6 @@ void LiteInterface::fetchPrivKey(QString addr, const std::function& conn->doRPCWithDefaultErrorHandling("export", addr, cb); } -// void LiteInterface::importZPrivKey(QString addr, bool rescan, const std::function& cb) { -// if (conn == nullptr) -// return; - -// // json payload = { -// // {"jsonrpc", "1.0"}, -// // {"id", "someid"}, -// // {"method", "z_importkey"}, -// // {"params", { addr.toStdString(), (rescan? "yes" : "no") }}, -// // }; - -// // conn->doRPCWithDefaultErrorHandling(payload, cb); -// } - - -// void LiteInterface::importTPrivKey(QString addr, bool rescan, const std::function& cb) { -// if (conn == nullptr) -// return; - -// // json payload = { -// // {"jsonrpc", "1.0"}, -// // {"id", "someid"}, -// // {"method", "importprivkey"}, -// // {"params", { addr.toStdString(), (rescan? "yes" : "no") }}, -// // }; - -// // conn->doRPCWithDefaultErrorHandling(payload, cb); -// } - void LiteInterface::fetchBalance(const std::function& cb) { if (conn == nullptr) return;