diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 71281d087..f91df8566 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -214,6 +214,17 @@ UniValue NSPV_broadcast_json(struct NSPV_broadcastresp *ptr,uint256 txid) return(result); } +UniValue NSPV_logout() +{ + UniValue result(UniValue::VOBJ); + fprintf(stderr,"scrub wif and privkey from NSPV memory\n"); + memset(NSPV_wifstr,0,sizeof(NSPV_wifstr)); + memset(&NSPV_key,0,sizeof(NSPV_key)); + NSPV_logintime = 0; + result.push_back(Pair("result","success")); + return(result); +} + UniValue NSPV_login(char *wifstr) { UniValue result(UniValue::VOBJ); char coinaddr[64]; uint8_t data[128]; int32_t len,valid = 0; @@ -229,11 +240,14 @@ UniValue NSPV_login(char *wifstr) return(result); } memset(NSPV_wifstr,0,sizeof(NSPV_wifstr)); - strncpy(NSPV_wifstr,wifstr,sizeof(NSPV_wifstr)-1); NSPV_logintime = (uint32_t)time(NULL); + if ( strcmp(NSPV_wifstr,wifstr) != 0 ) + { + strncpy(NSPV_wifstr,wifstr,sizeof(NSPV_wifstr)-1); + NSPV_key = DecodeSecret(wifstr); + } result.push_back(Pair("result","success")); result.push_back(Pair("status","wif will expire in 777 seconds")); - NSPV_key = DecodeSecret(wifstr); CPubKey pubkey = NSPV_key.GetPubKey(); CKeyID vchAddress = pubkey.GetID(); NSPV_address = EncodeDestination(vchAddress); diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index 7db65b60e..ba70a3b8a 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -353,10 +353,7 @@ void komodo_nSPV(CNode *pto) // polling loop from SendMessages uint8_t msg[256]; int32_t i,len=0; uint32_t timestamp = (uint32_t)time(NULL); if ( NSPV_logintime != 0 && timestamp > NSPV_logintime+NSPV_AUTOLOGOUT ) { - fprintf(stderr,"scrub wif and privkey from NSPV memory\n"); - memset(NSPV_wifstr,0,sizeof(NSPV_wifstr)); - memset(&NSPV_key,0,sizeof(NSPV_key)); - NSPV_logintime = 0; + NSPV_logout(); } if ( (pto->nServices & NODE_NSPV) == 0 ) return; diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 36e4a8fda..d3e0646ea 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -426,6 +426,7 @@ static const CRPCCommand vRPCCommands[] = { "nSPV", "nspv_txproof", &nspv_txproof, true }, { "nSPV", "nspv_spend", &nspv_spend, true }, { "nSPV", "nspv_broadcast", &nspv_broadcast, true }, + { "nSPV", "nspv_logout", &nspv_logout, true }, // rewards { "rewards", "rewardslist", &rewardslist, true }, diff --git a/src/rpc/server.h b/src/rpc/server.h index 31da0e32f..35af45a18 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -464,6 +464,7 @@ extern UniValue nspv_hdrsproof(const UniValue& params, bool fHelp); extern UniValue nspv_txproof(const UniValue& params, bool fHelp); extern UniValue nspv_spend(const UniValue& params, bool fHelp); extern UniValue nspv_broadcast(const UniValue& params, bool fHelp); +extern UniValue nspv_logout(const UniValue& params, bool fHelp); extern UniValue getblocksubsidy(const UniValue& params, bool fHelp); diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 225d32c80..7069dcaec 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -974,6 +974,7 @@ UniValue z_exportviewingkey(const UniValue& params, bool fHelp) UniValue NSPV_getinfo_json(); UniValue NSPV_login(char *wifstr); +UniValue NSPV_logout(); UniValue NSPV_addressutxos(char *coinaddr); UniValue NSPV_broadcast(char *hex); UniValue NSPV_spend(char *srcaddr,char *destaddr,int64_t satoshis); @@ -991,6 +992,13 @@ UniValue nspv_getinfo(const UniValue& params, bool fHelp) return(NSPV_getinfo_json()); } +UniValue nspv_logout(const UniValue& params, bool fHelp) +{ + if ( fHelp || params.size() != 0 ) + throw runtime_error("nspv_logout\n"); + return(NSPV_getinfo_logout()); +} + UniValue nspv_login(const UniValue& params, bool fHelp) { if ( fHelp || params.size() != 1 ) @@ -1002,9 +1010,15 @@ UniValue nspv_listunspent(const UniValue& params, bool fHelp) { if ( fHelp || params.size() > 1 ) throw runtime_error("nspv_listunspent address\n"); - if ( params.size() == 0 && NSPV_address.size() != 0 ) - return(NSPV_addressutxos((char *)NSPV_address.c_str())); - return(NSPV_addressutxos((char *)params[0].get_str().c_str())); + if ( params.size() == 0 ) + { + if ( NSPV_address.size() != 0 ) + return(NSPV_addressutxos((char *)NSPV_address.c_str())); + else throw runtime_error("nspv_listunspent address\n"); + } + if ( params.size() == 1 ) + return(NSPV_addressutxos((char *)params[0].get_str().c_str())); + else throw runtime_error("nspv_listunspent address\n"); } UniValue nspv_spentinfo(const UniValue& params, bool fHelp)