|
|
@ -139,7 +139,7 @@ int32_t NSPV_getinfo(struct NSPV_inforesp *ptr,int32_t reqheight) |
|
|
|
} else return(-1); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC,int32_t skipcount) // check mempool
|
|
|
|
int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC,int32_t skipcount,uint32_t filter) |
|
|
|
{ |
|
|
|
int64_t total = 0,interest=0; uint32_t locktime; int32_t ind=0,tipheight,maxlen,txheight,n = 0,len = 0; |
|
|
|
std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > unspentOutputs; |
|
|
@ -198,7 +198,7 @@ int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC |
|
|
|
return(0); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t NSPV_getaddresstxids(struct NSPV_txidsresp *ptr,char *coinaddr,bool isCC,int32_t skipcount) |
|
|
|
int32_t NSPV_getaddresstxids(struct NSPV_txidsresp *ptr,char *coinaddr,bool isCC,int32_t skipcount,uint32_t filter) |
|
|
|
{ |
|
|
|
int32_t maxlen,txheight,ind=0,n = 0,len = 0; |
|
|
|
std::vector<std::pair<CAddressIndexKey, CAmount> > txids; |
|
|
@ -551,23 +551,29 @@ void komodo_nSPVreq(CNode *pfrom,std::vector<uint8_t> request) // received a req |
|
|
|
//fprintf(stderr,"utxos: %u > %u, ind.%d, len.%d\n",timestamp,pfrom->prevtimes[ind],ind,len);
|
|
|
|
if ( timestamp > pfrom->prevtimes[ind] ) |
|
|
|
{ |
|
|
|
struct NSPV_utxosresp U; char coinaddr[64]; |
|
|
|
if ( len < 64 && (request[1] == len-3 || request[1] == len-7) ) |
|
|
|
struct NSPV_utxosresp U; |
|
|
|
if ( len < 64+5 && (request[1] == len-3 || request[1] == len-7 || request[1] == len-11) ) |
|
|
|
{ |
|
|
|
int32_t skipcount = 0; uint8_t isCC = 0; |
|
|
|
int32_t skipcount = 0; char coinaddr[64]; uint8_t filter; uint8_t isCC = 0; |
|
|
|
memcpy(coinaddr,&request[2],request[1]); |
|
|
|
coinaddr[request[1]] = 0; |
|
|
|
if ( request[1] == len-3 ) |
|
|
|
isCC = (request[len-1] != 0); |
|
|
|
else |
|
|
|
else if ( request[1] == len-7 ) |
|
|
|
{ |
|
|
|
isCC = (request[len-5] != 0); |
|
|
|
iguana_rwnum(0,&request[len-4],sizeof(skipcount),&skipcount); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
isCC = (request[len-9] != 0); |
|
|
|
iguana_rwnum(0,&request[len-4],sizeof(skipcount),&skipcount); |
|
|
|
iguana_rwnum(0,&request[len-4],sizeof(filter),&filter); |
|
|
|
} |
|
|
|
if ( isCC != 0 ) |
|
|
|
fprintf(stderr,"%s isCC.%d skipcount.%d\n",coinaddr,isCC,skipcount); |
|
|
|
fprintf(stderr,"utxos %s isCC.%d skipcount.%d filter.%x\n",coinaddr,isCC,skipcount,filter); |
|
|
|
memset(&U,0,sizeof(U)); |
|
|
|
if ( (slen= NSPV_getaddressutxos(&U,coinaddr,isCC,skipcount)) > 0 ) |
|
|
|
if ( (slen= NSPV_getaddressutxos(&U,coinaddr,isCC,skipcount,filter)) > 0 ) |
|
|
|
{ |
|
|
|
response.resize(1 + slen); |
|
|
|
response[0] = NSPV_UTXOSRESP; |
|
|
@ -585,23 +591,29 @@ void komodo_nSPVreq(CNode *pfrom,std::vector<uint8_t> request) // received a req |
|
|
|
{ |
|
|
|
if ( timestamp > pfrom->prevtimes[ind] ) |
|
|
|
{ |
|
|
|
struct NSPV_txidsresp T; char coinaddr[64]; |
|
|
|
if ( len < 64+5 && (request[1] == len-3 || request[1] == len-7) ) |
|
|
|
struct NSPV_txidsresp T; |
|
|
|
if ( len < 64+5 && (request[1] == len-3 || request[1] == len-7 || request[1] == len-11) ) |
|
|
|
{ |
|
|
|
int32_t skipcount = 0; uint8_t isCC = 0; |
|
|
|
int32_t skipcount = 0; char coinaddr[64]; uint32_t filter; uint8_t isCC = 0; |
|
|
|
memcpy(coinaddr,&request[2],request[1]); |
|
|
|
coinaddr[request[1]] = 0; |
|
|
|
if ( request[1] == len-3 ) |
|
|
|
isCC = (request[len-1] != 0); |
|
|
|
else |
|
|
|
else if ( request[1] == len-7 ) |
|
|
|
{ |
|
|
|
isCC = (request[len-5] != 0); |
|
|
|
iguana_rwnum(0,&request[len-4],sizeof(skipcount),&skipcount); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
isCC = (request[len-9] != 0); |
|
|
|
iguana_rwnum(0,&request[len-4],sizeof(skipcount),&skipcount); |
|
|
|
iguana_rwnum(0,&request[len-4],sizeof(filter),&filter); |
|
|
|
} |
|
|
|
//if ( isCC != 0 )
|
|
|
|
fprintf(stderr,"%s isCC.%d skipcount.%d\n",coinaddr,isCC,skipcount); |
|
|
|
fprintf(stderr,"txids %s isCC.%d skipcount.%d filter.%d\n",coinaddr,isCC,skipcount,filter); |
|
|
|
memset(&T,0,sizeof(T)); |
|
|
|
if ( (slen= NSPV_getaddresstxids(&T,coinaddr,isCC,skipcount)) > 0 ) |
|
|
|
if ( (slen= NSPV_getaddresstxids(&T,coinaddr,isCC,skipcount,filter)) > 0 ) |
|
|
|
{ |
|
|
|
//fprintf(stderr,"slen.%d\n",slen);
|
|
|
|
response.resize(1 + slen); |
|
|
|