From 2992d085ec626f0c3430715d6413c7953fabc84d Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 00:15:33 -1100 Subject: [PATCH 01/17] AmountFromValue --- src/komodo_nSPV_wallet.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index ea25b8983..f43c2b424 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -375,8 +375,8 @@ UniValue NSPV_spend(char *srcaddr,char *destaddr,int64_t satoshis) // what its a hex = NSPV_signtx(rewardsum,interestsum,retcodes,mtx,txfee,opret,used); if ( ASSETCHAINS_SYMBOL[0] == 0 ) { - result.push_back(Pair("rewards",dstr(interestsum))); - result.push_back(Pair("validated",dstr(rewardsum))); + result.push_back(Pair("rewards",AmountFromValue(interestsum))); + result.push_back(Pair("validated",AmountFromValue(rewardsum))); } if ( hex.size() > 0 ) { From 958f2c198ef54cbaa7b525d690534f7374bbd08f Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:21:47 -1100 Subject: [PATCH 02/17] Add caching to three requests: ntzsresp, txproof, ntzsproof --- src/komodo_nSPV.h | 42 +++++++++++++++ src/komodo_nSPV_fullnode.h | 3 +- src/komodo_nSPV_superlite.h | 104 ++++++++++++++++++++++++++++++------ src/komodo_nSPV_wallet.h | 2 - 4 files changed, 131 insertions(+), 20 deletions(-) diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index 2aec951ba..846e5b879 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -203,6 +203,7 @@ int32_t NSPV_rwntz(int32_t rwflag,uint8_t *serialized,struct NSPV_ntz *ptr) struct NSPV_ntzsresp { struct NSPV_ntz prevntz,nextntz; + int32_t reqheight; }; int32_t NSPV_rwntzsresp(int32_t rwflag,uint8_t *serialized,struct NSPV_ntzsresp *ptr) @@ -210,9 +211,15 @@ int32_t NSPV_rwntzsresp(int32_t rwflag,uint8_t *serialized,struct NSPV_ntzsresp int32_t len = 0; len += NSPV_rwntz(rwflag,&serialized[len],&ptr->prevntz); len += NSPV_rwntz(rwflag,&serialized[len],&ptr->nextntz); + len += iguana_rwnum(rwflag,&serialized[len],sizeof(ptr->reqheight),&ptr->reqheight); return(len); } +void NSPV_ntzsresp_copy(struct NSPV_ntzsresp *dest,struct NSPV_ntzsresp *ptr) +{ + *dest = *ptr; +} + void NSPV_ntzsresp_purge(struct NSPV_ntzsresp *ptr) { if ( ptr != 0 ) @@ -267,6 +274,21 @@ int32_t NSPV_rwtxproof(int32_t rwflag,uint8_t *serialized,struct NSPV_txproof *p return(len); } +void NSPV_txproof_copy(struct NSPV_txproof *dest,struct NSPV_txproof *ptr) +{ + *dest = *ptr; + if ( ptr->tx != 0 ) + { + dest->tx = malloc(ptr->txlen); + memcpy(dest->tx,ptr->tx,ptr->txlen); + } + if ( ptr->txproof != 0 ) + { + dest->txproof = malloc(ptr->txprooflen); + memcpy(dest->txproof,ptr->txproof,ptr->txprooflen); + } +} + void NSPV_txproof_purge(struct NSPV_txproof *ptr) { if ( ptr != 0 ) @@ -321,6 +343,26 @@ int32_t NSPV_rwntzsproofresp(int32_t rwflag,uint8_t *serialized,struct NSPV_ntzs return(len); } +void NSPV_ntzsproof_copy(struct NSPV_ntzsproofresp *dest,struct NSPV_ntzsproofresp *ptr) +{ + *dest = *ptr; + if ( ptr->common.hdrs != 0 ) + { + dest->common.hdrs = malloc(ptr->common.numhdrs * sizeof(*ptr->common.hdrs)); + memcpy(dest->common.hdrs,ptr->common.hdrs,ptr->common.numhdrs * sizeof(*ptr->common.hdrs)); + } + if ( ptr->prevntz != 0 ) + { + dest->prevntz = malloc(ptr->prevtxlen); + memcpy(dest->prevntz,ptr->prevntz,ptr->prevtxlen); + } + if ( ptr->nextntz != 0 ) + { + dest->nextntz = malloc(ptr->nexttxlen); + memcpy(dest->nextntz,ptr->nextntz,ptr->nexttxlen); + } +} + void NSPV_ntzsproofresp_purge(struct NSPV_ntzsproofresp *ptr) { if ( ptr != 0 ) diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index 0d540e06d..fc56b0a4e 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -77,7 +77,7 @@ int32_t NSPV_ntzextract(struct NSPV_ntz *ptr,uint256 ntztxid,int32_t txidht,uint return(0); } -int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t height) +int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t reqheight) { struct NSPV_ntzargs prev,next; if ( height < chainActive.LastTip()->GetHeight() ) @@ -86,6 +86,7 @@ int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t height) { if ( prev.ntzheight != 0 ) { + ptr->reqheight = reqheight; if ( NSPV_ntzextract(&ptr->prevntz,prev.txid,prev.txidht,prev.desttxid,prev.ntzheight) < 0 ) return(-1); } diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 8b3d2a762..27fd0d241 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -37,6 +37,72 @@ struct NSPV_ntzsproofresp NSPV_ntzsproofresult; struct NSPV_txproof NSPV_txproofresult; struct NSPV_broadcastresp NSPV_broadcastresult; +struct NSPV_ntzsresp NSPV_ntzsresp_cache[NSPV_MAXVINS]; +struct NSPV_ntzsproofresp NSPV_ntzsproofresp_cache[NSPV_MAXVINS * 2]; +struct NSPV_txproof NSPV_txproof_cache[NSPV_MAXVINS * 4]; + +struct NSPV_ntzsresp *NSPV_ntzsresp_find(int32_t reqheight) +{ + for (i=0; i response) // received a r case NSPV_NTZSRESP: NSPV_ntzsresp_purge(&NSPV_ntzsresult); NSPV_rwntzsresp(0,&response[1],&NSPV_ntzsresult); + if ( NSPV_ntzs_find(NSPV_ntzsresult.reqheight) == 0 ) + NSPV_txproof_add(&NSPV_ntzsresult); fprintf(stderr,"got ntzs response %u size.%d %s prev.%d, %s next.%d\n",timestamp,(int32_t)response.size(),NSPV_ntzsresult.prevntz.txid.GetHex().c_str(),NSPV_ntzsresult.prevntz.height,NSPV_ntzsresult.nextntz.txid.GetHex().c_str(),NSPV_ntzsresult.nextntz.height); break; case NSPV_NTZSPROOFRESP: NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresult); NSPV_rwntzsproofresp(0,&response[1],&NSPV_ntzsproofresult); + if ( NSPV_ntzsproof_find(NSPV_ntzsproofresult.prevtxid,NSPV_ntzsproofresult.nexttxid) == 0 ) + NSPV_ntzsproof_add(&NSPV_ntzsproofresult); fprintf(stderr,"got ntzproof response %u size.%d prev.%d next.%d\n",timestamp,(int32_t)response.size(),NSPV_ntzsproofresult.common.prevht,NSPV_ntzsproofresult.common.nextht); break; case NSPV_TXPROOFRESP: NSPV_txproof_purge(&NSPV_txproofresult); NSPV_rwtxproof(0,&response[1],&NSPV_txproofresult); + if ( NSPV_txproof_find(NSPV_txproofresult.txid) == 0 ) + NSPV_txproof_add(&NSPV_txproofresult); fprintf(stderr,"got txproof response %u size.%d %s ht.%d\n",timestamp,(int32_t)response.size(),NSPV_txproofresult.txid.GetHex().c_str(),NSPV_txproofresult.height); break; case NSPV_SPENTINFORESP: @@ -298,7 +370,7 @@ UniValue NSPV_utxosresp_json(struct NSPV_utxosresp *ptr) return(result); } -UniValue NSPV_ntzs_json(struct NSPV_ntzsresp *ptr) +UniValue NSPV_ntzsresp_json(struct NSPV_ntzsresp *ptr) { UniValue result(UniValue::VOBJ); result.push_back(Pair("result","success")); @@ -455,11 +527,11 @@ UniValue NSPV_addressutxos(char *coinaddr,int32_t CCflag) return(result); } -UniValue NSPV_notarizations(int32_t height) +UniValue NSPV_notarizations(int32_t reqheight) { - uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_ntzsresp N; - if ( NSPV_ntzsresult.prevntz.height <= height && NSPV_ntzsresult.nextntz.height >= height ) - return(NSPV_ntzs_json(&NSPV_ntzsresult)); + uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_ntzsresp N,*ptr; + if ( (ptr= NSPV_ntzsresp_find(reqheight)) != 0 ) + return(NSPV_ntzsresp_json(ptr)); NSPV_ntzsresp_purge(&NSPV_ntzsresult); msg[len++] = NSPV_NTZS; len += iguana_rwnum(1,&msg[len],sizeof(height),&height); @@ -470,18 +542,18 @@ UniValue NSPV_notarizations(int32_t height) { usleep(NSPV_POLLMICROS); if ( NSPV_ntzsresult.prevntz.height <= height && NSPV_ntzsresult.nextntz.height >= height ) - return(NSPV_ntzs_json(&NSPV_ntzsresult)); + return(NSPV_ntzsresp_json(&NSPV_ntzsresult)); } } else sleep(1); memset(&N,0,sizeof(N)); - return(NSPV_ntzs_json(&N)); + return(NSPV_ntzsresp_json(&N)); } UniValue NSPV_txidhdrsproof(uint256 prevtxid,uint256 nexttxid) { - uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_ntzsproofresp H; - if ( NSPV_ntzsproofresult.prevtxid == prevtxid && NSPV_ntzsproofresult.nexttxid == nexttxid ) - return(NSPV_ntzsproof_json(&NSPV_ntzsproofresult)); + uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_ntzsproofresp P,*ptr; + if ( (ptr= NSPV_ntzsproof_find(prevtxid,nexttxid)) != 0 ) + return(NSPV_ntzsproof_json(ptr)); NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresult); msg[len++] = NSPV_NTZSPROOF; len += iguana_rwbignum(1,&msg[len],sizeof(prevtxid),(uint8_t *)&prevtxid); @@ -496,8 +568,8 @@ UniValue NSPV_txidhdrsproof(uint256 prevtxid,uint256 nexttxid) return(NSPV_ntzsproof_json(&NSPV_ntzsproofresult)); } } else sleep(1); - memset(&H,0,sizeof(H)); - return(NSPV_ntzsproof_json(&H)); + memset(&P,0,sizeof(P)); + return(NSPV_ntzsproof_json(&P)); } UniValue NSPV_hdrsproof(int32_t prevht,int32_t nextht) @@ -512,9 +584,9 @@ UniValue NSPV_hdrsproof(int32_t prevht,int32_t nextht) UniValue NSPV_txproof(int32_t vout,uint256 txid,int32_t height) { - uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_txproof P; - if ( NSPV_txproofresult.txid == txid ) - return(NSPV_txproof_json(&NSPV_txproofresult)); + uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_txproof P,*ptr; + if ( (ptr= NSPV_txproof_find(txid)) != 0 ) + return(NSPV_txproof_json(ptr)); NSPV_txproof_purge(&NSPV_txproofresult); msg[len++] = NSPV_TXPROOF; len += iguana_rwnum(1,&msg[len],sizeof(height),&height); @@ -539,8 +611,6 @@ UniValue NSPV_txproof(int32_t vout,uint256 txid,int32_t height) UniValue NSPV_spentinfo(uint256 txid,int32_t vout) { uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_spentinfo I; - //if ( NSPV_spentresult.txid == txid && NSPV_spentresult.vout == vout ) - // return(NSPV_spentinfo_json(&NSPV_spentresult)); NSPV_spentinfo_purge(&NSPV_spentresult); msg[len++] = NSPV_SPENTINFO; len += iguana_rwnum(1,&msg[len],sizeof(vout),&vout); diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index f43c2b424..bb3d7b86a 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -80,9 +80,7 @@ int32_t NSPV_gettransaction(int32_t skipvalidation,int32_t vout,uint256 txid,int { rewards = komodo_interestnew(height,tx.vout[vout].nValue,tx.nLockTime,tiptime); if ( rewards != extradata ) - { fprintf(stderr,"extradata %.8f vs rewards %.8f\n",dstr(extradata),dstr(rewards)); - } rewardsum += rewards; } From 46b8950f0425e502a6818bf54f2039ae79350fbc Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:38:55 -1100 Subject: [PATCH 03/17] Syntax --- src/komodo_nSPV.h | 10 +++++----- src/komodo_nSPV_fullnode.h | 6 +++--- src/komodo_nSPV_superlite.h | 3 +++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index 846e5b879..32c9dcd69 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -279,12 +279,12 @@ void NSPV_txproof_copy(struct NSPV_txproof *dest,struct NSPV_txproof *ptr) *dest = *ptr; if ( ptr->tx != 0 ) { - dest->tx = malloc(ptr->txlen); + dest->tx = (uint8_t *)malloc(ptr->txlen); memcpy(dest->tx,ptr->tx,ptr->txlen); } if ( ptr->txproof != 0 ) { - dest->txproof = malloc(ptr->txprooflen); + dest->txproof = (uint8_t *)malloc(ptr->txprooflen); memcpy(dest->txproof,ptr->txproof,ptr->txprooflen); } } @@ -348,17 +348,17 @@ void NSPV_ntzsproof_copy(struct NSPV_ntzsproofresp *dest,struct NSPV_ntzsproofre *dest = *ptr; if ( ptr->common.hdrs != 0 ) { - dest->common.hdrs = malloc(ptr->common.numhdrs * sizeof(*ptr->common.hdrs)); + dest->common.hdrs = (struct NSPV_equihdr *)malloc(ptr->common.numhdrs * sizeof(*ptr->common.hdrs)); memcpy(dest->common.hdrs,ptr->common.hdrs,ptr->common.numhdrs * sizeof(*ptr->common.hdrs)); } if ( ptr->prevntz != 0 ) { - dest->prevntz = malloc(ptr->prevtxlen); + dest->prevntz = (uint8_t *)malloc(ptr->prevtxlen); memcpy(dest->prevntz,ptr->prevntz,ptr->prevtxlen); } if ( ptr->nextntz != 0 ) { - dest->nextntz = malloc(ptr->nexttxlen); + dest->nextntz = (uint8_t *)malloc(ptr->nexttxlen); memcpy(dest->nextntz,ptr->nextntz,ptr->nexttxlen); } } diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index fc56b0a4e..629abfb17 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -80,9 +80,9 @@ int32_t NSPV_ntzextract(struct NSPV_ntz *ptr,uint256 ntztxid,int32_t txidht,uint int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t reqheight) { struct NSPV_ntzargs prev,next; - if ( height < chainActive.LastTip()->GetHeight() ) - height++; - if ( NSPV_notarized_bracket(&prev,&next,height) == 0 ) + if ( reqheight < chainActive.LastTip()->GetHeight() ) + reqheight++; + if ( NSPV_notarized_bracket(&prev,&next,reqheight) == 0 ) { if ( prev.ntzheight != 0 ) { diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 27fd0d241..3d3c5ef26 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -43,6 +43,7 @@ struct NSPV_txproof NSPV_txproof_cache[NSPV_MAXVINS * 4]; struct NSPV_ntzsresp *NSPV_ntzsresp_find(int32_t reqheight) { + int32_t i; for (i=0; i Date: Wed, 10 Jul 2019 01:40:26 -1100 Subject: [PATCH 04/17] Syntax --- src/komodo_nSPV_superlite.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 3d3c5ef26..90b8f4523 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -50,7 +50,7 @@ struct NSPV_ntzsresp *NSPV_ntzsresp_find(int32_t reqheight) return(0); } -struct NSPV_txproof *NSPV_ntzsresp_add(struct NSPV_ntzsresp *ptr) +struct NSPV_ntzsresp *NSPV_ntzsresp_add(struct NSPV_ntzsresp *ptr) { int32_t i; for (i=0; i response) // received a r case NSPV_NTZSRESP: NSPV_ntzsresp_purge(&NSPV_ntzsresult); NSPV_rwntzsresp(0,&response[1],&NSPV_ntzsresult); - if ( NSPV_ntzs_find(NSPV_ntzsresult.reqheight) == 0 ) - NSPV_txproof_add(&NSPV_ntzsresult); + if ( NSPV_ntzsresp_find(NSPV_ntzsresult.reqheight) == 0 ) + NSPV_ntzsresp_add(&NSPV_ntzsresult); fprintf(stderr,"got ntzs response %u size.%d %s prev.%d, %s next.%d\n",timestamp,(int32_t)response.size(),NSPV_ntzsresult.prevntz.txid.GetHex().c_str(),NSPV_ntzsresult.prevntz.height,NSPV_ntzsresult.nextntz.txid.GetHex().c_str(),NSPV_ntzsresult.nextntz.height); break; case NSPV_NTZSPROOFRESP: From 2584080a31dd6d0f26703c821cac22edc4b1b96b Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:42:16 -1100 Subject: [PATCH 05/17] Syntax --- src/komodo_nSPV_superlite.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 90b8f4523..37157fd64 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -98,11 +98,11 @@ struct NSPV_ntzsproofresp *NSPV_ntzsproof_add(struct NSPV_ntzsproofresp *ptr) { int32_t i; for (i=0; i>1) != 0 ) { From ef096457b5ca837e1f121d0996c4bbecb51d5245 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:44:04 -1100 Subject: [PATCH 06/17] Reqheight --- src/komodo_nSPV_superlite.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 37157fd64..73ff1260f 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -544,7 +544,7 @@ UniValue NSPV_notarizations(int32_t reqheight) for (i=0; i= height ) + if ( NSPV_ntzsresult.prevntz.reqheight == reqheight ) return(NSPV_ntzsresp_json(&NSPV_ntzsresult)); } } else sleep(1); From adde9f27412372a75fbc72e4d7de678397eed738 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:45:03 -1100 Subject: [PATCH 07/17] Req --- src/komodo_nSPV_superlite.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 73ff1260f..caf1178c1 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -544,7 +544,7 @@ UniValue NSPV_notarizations(int32_t reqheight) for (i=0; i Date: Wed, 10 Jul 2019 01:51:58 -1100 Subject: [PATCH 08/17] +print --- src/komodo_nSPV_superlite.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index caf1178c1..5893429e9 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -60,6 +60,7 @@ struct NSPV_ntzsresp *NSPV_ntzsresp_add(struct NSPV_ntzsresp *ptr) i == (rand() % (sizeof(NSPV_ntzsresp_cache)/sizeof(*NSPV_ntzsresp_cache))); NSPV_ntzsresp_purge(&NSPV_ntzsresp_cache[i]); NSPV_ntzsresp_copy(&NSPV_ntzsresp_cache[i],ptr); + fprintf(stderr,"ADD CACHE ntzsresp req.%d\n",ptr->reqheight); return(&NSPV_ntzsresp_cache[i]); } @@ -82,6 +83,7 @@ struct NSPV_txproof *NSPV_txproof_add(struct NSPV_txproof *ptr) i == (rand() % (sizeof(NSPV_txproof_cache)/sizeof(*NSPV_txproof_cache))); NSPV_txproof_purge(&NSPV_txproof_cache[i]); NSPV_txproof_copy(&NSPV_txproof_cache[i],ptr); + fprintf(stderr,"ADD CACHE txproof %s\n",ptr->txid.GetHex().c_str()); return(&NSPV_txproof_cache[i]); } @@ -104,6 +106,7 @@ struct NSPV_ntzsproofresp *NSPV_ntzsproof_add(struct NSPV_ntzsproofresp *ptr) i == (rand() % (sizeof(NSPV_ntzsproofresp_cache)/sizeof(*NSPV_ntzsproofresp_cache))); NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresp_cache[i]); NSPV_ntzsproof_copy(&NSPV_ntzsproofresp_cache[i],ptr); + fprintf(stderr,"ADD CACHE ntzsproof %s %s\n",ptr->prevtxid.GetHex().c_str(),ptr->nexttxid.GetHex().c_str()); return(&NSPV_ntzsproofresp_cache[i]); } @@ -534,7 +537,10 @@ UniValue NSPV_notarizations(int32_t reqheight) { uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_ntzsresp N,*ptr; if ( (ptr= NSPV_ntzsresp_find(reqheight)) != 0 ) + { + fprintf(stderr,"FROM CACHE NSPV_notarizations.%d\n",reqheight); return(NSPV_ntzsresp_json(ptr)); + } NSPV_ntzsresp_purge(&NSPV_ntzsresult); msg[len++] = NSPV_NTZS; len += iguana_rwnum(1,&msg[len],sizeof(reqheight),&reqheight); @@ -556,7 +562,10 @@ UniValue NSPV_txidhdrsproof(uint256 prevtxid,uint256 nexttxid) { uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_ntzsproofresp P,*ptr; if ( (ptr= NSPV_ntzsproof_find(prevtxid,nexttxid)) != 0 ) + { + fprintf(stderr,"FROM CACHE NSPV_txidhdrsproof %s %s\n",ptr->prevtxid.GetHex().c_str(),ptr->nexttxid.GetHex().c_str()); return(NSPV_ntzsproof_json(ptr)); + } NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresult); msg[len++] = NSPV_NTZSPROOF; len += iguana_rwbignum(1,&msg[len],sizeof(prevtxid),(uint8_t *)&prevtxid); @@ -589,7 +598,10 @@ UniValue NSPV_txproof(int32_t vout,uint256 txid,int32_t height) { uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_txproof P,*ptr; if ( (ptr= NSPV_txproof_find(txid)) != 0 ) + { + fprintf(stderr,"FROM CACHE NSPV_txproof %s %s\n",txid.GetHex().c_str()); return(NSPV_txproof_json(ptr)); + } NSPV_txproof_purge(&NSPV_txproofresult); msg[len++] = NSPV_TXPROOF; len += iguana_rwnum(1,&msg[len],sizeof(height),&height); From 80a2d6431fffceaf9bf8739dfa83d8f417d77abb Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:52:35 -1100 Subject: [PATCH 09/17] -sleep --- src/komodo_nSPV.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index 32c9dcd69..e175b40c3 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -561,7 +561,7 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 * GetOpReturnData(tx.vout[1].scriptPubKey,opret); if ( opret.size() >= 32*2+4 ) { - sleep(1); + //sleep(1); *desttxidp = NSPV_opretextract(ntzheightp,blockhashp,symbol,opret,tx.GetHash()); nTime = NSPV_blocktime(*ntzheightp); komodo_notaries(elected,*ntzheightp,nTime); From 12084bf9ab9bb1334d51cf1b54e00f3dc4e48796 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 01:56:38 -1100 Subject: [PATCH 10/17] - %s --- src/komodo_nSPV_superlite.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 5893429e9..b9acd4791 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -599,7 +599,7 @@ UniValue NSPV_txproof(int32_t vout,uint256 txid,int32_t height) uint8_t msg[64]; int32_t i,iter,len = 0; struct NSPV_txproof P,*ptr; if ( (ptr= NSPV_txproof_find(txid)) != 0 ) { - fprintf(stderr,"FROM CACHE NSPV_txproof %s %s\n",txid.GetHex().c_str()); + fprintf(stderr,"FROM CACHE NSPV_txproof %s\n",txid.GetHex().c_str()); return(NSPV_txproof_json(ptr)); } NSPV_txproof_purge(&NSPV_txproofresult); From cbed35aa1c17856ff19e97475c32b9288bea561e Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:02:19 -1100 Subject: [PATCH 11/17] Origreqheight --- src/komodo_nSPV_fullnode.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index 629abfb17..bbc1712b8 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -77,16 +77,16 @@ int32_t NSPV_ntzextract(struct NSPV_ntz *ptr,uint256 ntztxid,int32_t txidht,uint return(0); } -int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t reqheight) +int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t origreqheight) { - struct NSPV_ntzargs prev,next; + struct NSPV_ntzargs prev,next; int32_t reqheight = origreqheight; if ( reqheight < chainActive.LastTip()->GetHeight() ) reqheight++; if ( NSPV_notarized_bracket(&prev,&next,reqheight) == 0 ) { if ( prev.ntzheight != 0 ) { - ptr->reqheight = reqheight; + ptr->reqheight = origreqheight; if ( NSPV_ntzextract(&ptr->prevntz,prev.txid,prev.txidht,prev.desttxid,prev.ntzheight) < 0 ) return(-1); } From 0fbb1df96b2665d648c78f5c48633f28549635d2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:03:28 -1100 Subject: [PATCH 12/17] Test --- src/komodo_nSPV_superlite.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index b9acd4791..ca599e56a 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -215,7 +215,7 @@ CNode *NSPV_req(CNode *pnode,uint8_t *msg,int32_t len,uint64_t mask,int32_t ind) std::vector request; request.resize(len); memcpy(&request[0],msg,len); - if ( KOMODO_NSPV == 0 ) + if ( KOMODO_NSPV != 0 ) fprintf(stderr,"pushmessage [%d] len.%d\n",msg[0],len); pnode->PushMessage("getnSPV",request); pnode->prevtimes[ind] = timestamp; From 9963d63159511f7b605f3d9f05b6c2cf5ebf76ea Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:11:23 -1100 Subject: [PATCH 13/17] Txproof --- src/komodo_nSPV_superlite.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index ca599e56a..17e1f3053 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -607,7 +607,7 @@ UniValue NSPV_txproof(int32_t vout,uint256 txid,int32_t height) len += iguana_rwnum(1,&msg[len],sizeof(height),&height); len += iguana_rwnum(1,&msg[len],sizeof(vout),&vout); len += iguana_rwbignum(1,&msg[len],sizeof(txid),(uint8_t *)&txid); - //fprintf(stderr,"req txproof %s/v%d at height.%d\n",txid.GetHex().c_str(),vout,height); + fprintf(stderr,"req txproof %s/v%d at height.%d\n",txid.GetHex().c_str(),vout,height); for (iter=0; iter<3; iter++); if ( NSPV_req(0,msg,len,NODE_NSPV,msg[0]>>1) != 0 ) { @@ -618,7 +618,7 @@ UniValue NSPV_txproof(int32_t vout,uint256 txid,int32_t height) return(NSPV_txproof_json(&NSPV_txproofresult)); } } else sleep(1); - //fprintf(stderr,"txproof timeout\n"); + fprintf(stderr,"txproof timeout\n"); memset(&P,0,sizeof(P)); return(NSPV_txproof_json(&P)); } From 07e4f28dc94f3ee5dfdecfb6fe66e9b0afa5ea67 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:22:37 -1100 Subject: [PATCH 14/17] Fix code flow --- src/komodo_nSPV_superlite.h | 14 +++++++++++--- src/komodo_nSPV_wallet.h | 27 ++++++++++++--------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 17e1f3053..383cd025b 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -231,6 +231,9 @@ UniValue NSPV_logout() if ( NSPV_logintime != 0 ) fprintf(stderr,"scrub wif and privkey from NSPV memory\n"); else result.push_back(Pair("status","wasnt logged in")); + memset(NSPV_ntzsproofresp_cache,0,sizeof(NSPV_ntzsproofresp_cache)); + memset(NSPV_txproof_cache,0,sizeof(NSPV_txproof_cache)); + memset(NSPV_ntzsresp_cache,0,sizeof(NSPV_ntzsresp_cache)); memset(NSPV_wifstr,0,sizeof(NSPV_wifstr)); memset(&NSPV_key,0,sizeof(NSPV_key)); NSPV_logintime = 0; @@ -539,9 +542,10 @@ UniValue NSPV_notarizations(int32_t reqheight) if ( (ptr= NSPV_ntzsresp_find(reqheight)) != 0 ) { fprintf(stderr,"FROM CACHE NSPV_notarizations.%d\n",reqheight); + NSPV_ntzsresp_purge(&NSPV_ntzsresult); + NSPV_ntzsresp_copy(&NSPV_ntzsresult,ptr); return(NSPV_ntzsresp_json(ptr)); } - NSPV_ntzsresp_purge(&NSPV_ntzsresult); msg[len++] = NSPV_NTZS; len += iguana_rwnum(1,&msg[len],sizeof(reqheight),&reqheight); for (iter=0; iter<3; iter++); @@ -564,13 +568,15 @@ UniValue NSPV_txidhdrsproof(uint256 prevtxid,uint256 nexttxid) if ( (ptr= NSPV_ntzsproof_find(prevtxid,nexttxid)) != 0 ) { fprintf(stderr,"FROM CACHE NSPV_txidhdrsproof %s %s\n",ptr->prevtxid.GetHex().c_str(),ptr->nexttxid.GetHex().c_str()); + NSPV_txidhdrsproof_purge(&NSPV_ntzsproofresult); + NSPV_txidhdrsproof_copy(&NSPV_ntzsproofresult,ptr); return(NSPV_ntzsproof_json(ptr)); } NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresult); msg[len++] = NSPV_NTZSPROOF; len += iguana_rwbignum(1,&msg[len],sizeof(prevtxid),(uint8_t *)&prevtxid); len += iguana_rwbignum(1,&msg[len],sizeof(nexttxid),(uint8_t *)&nexttxid); - for (iter=0; iter<3; iter++); + //for (iter=0; iter<3; iter++); if ( NSPV_req(0,msg,len,NODE_NSPV,msg[0]>>1) != 0 ) { for (i=0; i proof; - for (i=0; i<3; i++) + struct NSPV_txproof *ptr; int32_t i,offset,retval = 0; int64_t rewards = 0; uint32_t nLockTime; std::vector proof; + if ( (ptr= NSPV_txproof_find(txid)) == 0 ) { NSPV_txproof(vout,txid,height); - if ( NSPV_txproofresult.txlen != 0 ) - break; - sleep(1); + ptr = &NSPV_txproofresult; } - if ( NSPV_txproofresult.txid != txid ) + if ( ptr->txid != txid ) { - fprintf(stderr,"txproof error %s != %s\n",NSPV_txproofresult.txid.GetHex().c_str(),txid.GetHex().c_str()); + fprintf(stderr,"txproof error %s != %s\n",ptr->txid.GetHex().c_str(),txid.GetHex().c_str()); return(-1); } - else if ( NSPV_txextract(tx,NSPV_txproofresult.tx,NSPV_txproofresult.txlen) < 0 || NSPV_txproofresult.txlen <= 0 ) + else if ( NSPV_txextract(tx,ptr->tx,ptr->txlen) < 0 || ptr->txlen <= 0 ) retval = -2000; - else if ( skipvalidation == 0 && NSPV_txproofresult.unspentvalue <= 0 ) + else if ( skipvalidation == 0 && ptr->unspentvalue <= 0 ) retval = -2001; else if ( ASSETCHAINS_SYMBOL[0] == 0 && extradata >= 0 && tiptime != 0 ) { @@ -86,12 +84,11 @@ int32_t NSPV_gettransaction(int32_t skipvalidation,int32_t vout,uint256 txid,int if ( skipvalidation == 0 ) { - if ( NSPV_txproofresult.txprooflen > 0 ) + if ( ptr->txprooflen > 0 ) { - proof.resize(NSPV_txproofresult.txprooflen); - memcpy(&proof[0],NSPV_txproofresult.txproof,NSPV_txproofresult.txprooflen); + proof.resize(ptr->txprooflen); + memcpy(&proof[0],ptr->txproof,ptr->txprooflen); } - fprintf(stderr,"call NSPV_notarizations\n"); NSPV_notarizations(height); // gets the prev and next notarizations if ( NSPV_inforesult.notarization.height >= height && (NSPV_ntzsresult.prevntz.height == 0 || NSPV_ntzsresult.prevntz.height >= NSPV_ntzsresult.nextntz.height) ) { @@ -106,7 +103,7 @@ int32_t NSPV_gettransaction(int32_t skipvalidation,int32_t vout,uint256 txid,int offset = (height - NSPV_ntzsresult.prevntz.height); if ( offset >= 0 && height <= NSPV_ntzsresult.nextntz.height ) { - fprintf(stderr,"call NSPV_txidhdrsproof %s %s\n",NSPV_ntzsresult.prevntz.txid.GetHex().c_str(),NSPV_ntzsresult.nextntz.txid.GetHex().c_str()); + //fprintf(stderr,"call NSPV_txidhdrsproof %s %s\n",NSPV_ntzsresult.prevntz.txid.GetHex().c_str(),NSPV_ntzsresult.nextntz.txid.GetHex().c_str()); NSPV_txidhdrsproof(NSPV_ntzsresult.prevntz.txid,NSPV_ntzsresult.nextntz.txid); usleep(10000); if ( (retval= NSPV_validatehdrs(&NSPV_ntzsproofresult)) == 0 ) @@ -115,7 +112,7 @@ int32_t NSPV_gettransaction(int32_t skipvalidation,int32_t vout,uint256 txid,int proofroot = BitcoinGetProofMerkleRoot(proof,txids); if ( proofroot != NSPV_ntzsproofresult.common.hdrs[offset].hashMerkleRoot ) { - fprintf(stderr,"prooflen.%d proofroot.%s vs %s\n",NSPV_txproofresult.txprooflen,proofroot.GetHex().c_str(),NSPV_ntzsproofresult.common.hdrs[offset].hashMerkleRoot.GetHex().c_str()); + fprintf(stderr,"prooflen.%d proofroot.%s vs %s\n",(int32_t)proof.size(),proofroot.GetHex().c_str(),NSPV_ntzsproofresult.common.hdrs[offset].hashMerkleRoot.GetHex().c_str()); retval = -2003; } } From 10a7cb5f44407ee9eb84b1c0a5042e23315998b5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:25:36 -1100 Subject: [PATCH 15/17] Syntax --- src/komodo_nSPV.h | 2 +- src/komodo_nSPV_superlite.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index e175b40c3..c623e15d1 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -343,7 +343,7 @@ int32_t NSPV_rwntzsproofresp(int32_t rwflag,uint8_t *serialized,struct NSPV_ntzs return(len); } -void NSPV_ntzsproof_copy(struct NSPV_ntzsproofresp *dest,struct NSPV_ntzsproofresp *ptr) +void NSPV_ntzsproofresp_copy(struct NSPV_ntzsproofresp *dest,struct NSPV_ntzsproofresp *ptr) { *dest = *ptr; if ( ptr->common.hdrs != 0 ) diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index 383cd025b..b31115079 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -105,7 +105,7 @@ struct NSPV_ntzsproofresp *NSPV_ntzsproof_add(struct NSPV_ntzsproofresp *ptr) if ( i == sizeof(NSPV_ntzsproofresp_cache)/sizeof(*NSPV_ntzsproofresp_cache) ) i == (rand() % (sizeof(NSPV_ntzsproofresp_cache)/sizeof(*NSPV_ntzsproofresp_cache))); NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresp_cache[i]); - NSPV_ntzsproof_copy(&NSPV_ntzsproofresp_cache[i],ptr); + NSPV_ntzsproofresp_copy(&NSPV_ntzsproofresp_cache[i],ptr); fprintf(stderr,"ADD CACHE ntzsproof %s %s\n",ptr->prevtxid.GetHex().c_str(),ptr->nexttxid.GetHex().c_str()); return(&NSPV_ntzsproofresp_cache[i]); } @@ -215,7 +215,7 @@ CNode *NSPV_req(CNode *pnode,uint8_t *msg,int32_t len,uint64_t mask,int32_t ind) std::vector request; request.resize(len); memcpy(&request[0],msg,len); - if ( KOMODO_NSPV != 0 ) + if ( (0) && KOMODO_NSPV != 0 ) fprintf(stderr,"pushmessage [%d] len.%d\n",msg[0],len); pnode->PushMessage("getnSPV",request); pnode->prevtimes[ind] = timestamp; @@ -568,8 +568,8 @@ UniValue NSPV_txidhdrsproof(uint256 prevtxid,uint256 nexttxid) if ( (ptr= NSPV_ntzsproof_find(prevtxid,nexttxid)) != 0 ) { fprintf(stderr,"FROM CACHE NSPV_txidhdrsproof %s %s\n",ptr->prevtxid.GetHex().c_str(),ptr->nexttxid.GetHex().c_str()); - NSPV_txidhdrsproof_purge(&NSPV_ntzsproofresult); - NSPV_txidhdrsproof_copy(&NSPV_ntzsproofresult,ptr); + NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresult); + NSPV_ntzsproofresp_copy(&NSPV_ntzsproofresult,ptr); return(NSPV_ntzsproof_json(ptr)); } NSPV_ntzsproofresp_purge(&NSPV_ntzsproofresult); From 359aaf0c8143fc081ba95937268e8eb6ad121858 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:29:59 -1100 Subject: [PATCH 16/17] Add delay --- src/komodo_nSPV.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index c623e15d1..aacc0a583 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -561,7 +561,7 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 * GetOpReturnData(tx.vout[1].scriptPubKey,opret); if ( opret.size() >= 32*2+4 ) { - //sleep(1); + sleep(1); // needed to avoid no pnodes error *desttxidp = NSPV_opretextract(ntzheightp,blockhashp,symbol,opret,tx.GetHash()); nTime = NSPV_blocktime(*ntzheightp); komodo_notaries(elected,*ntzheightp,nTime); From 15eb217c46f8294007cdd95f1ef514b1653698fe Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 10 Jul 2019 02:32:13 -1100 Subject: [PATCH 17/17] Tweak sleeps --- src/komodo_nSPV.h | 2 +- src/komodo_nSPV_wallet.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index aacc0a583..c8338d365 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -561,7 +561,7 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 * GetOpReturnData(tx.vout[1].scriptPubKey,opret); if ( opret.size() >= 32*2+4 ) { - sleep(1); // needed to avoid no pnodes error + //sleep(1); // needed to avoid no pnodes error *desttxidp = NSPV_opretextract(ntzheightp,blockhashp,symbol,opret,tx.GetHash()); nTime = NSPV_blocktime(*ntzheightp); komodo_notaries(elected,*ntzheightp,nTime); diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index cf409aa61..300d5de22 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -44,6 +44,7 @@ int32_t NSPV_validatehdrs(struct NSPV_ntzsproofresp *ptr) if ( blockhash != ptr->common.hdrs[i].hashPrevBlock ) return(-i-13); } + sleep(1); if ( NSPV_txextract(tx,ptr->prevntz,ptr->prevtxlen) < 0 ) return(-8); else if ( tx.GetHash() != ptr->prevtxid )