diff --git a/src/komodo_pax.h b/src/komodo_pax.h index c56e62d7c..d22960475 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -51,9 +51,9 @@ void pax_rank(uint64_t *ranked,uint32_t *pvals) for (i=0; i<32; i++) { ranked[i] = (vals[i] * 1000000000) / sum; - printf("%.6f ",(double)ranked[i]/1000000000.); + //printf("%.6f ",(double)ranked[i]/1000000000.); } - printf("sum %llu\n",(long long)sum); + //printf("sum %llu\n",(long long)sum); }; int32_t dpow_readprices(uint8_t *data,uint32_t *timestampp,double *KMDBTCp,double *BTCUSDp,double *CNYUSDp,uint32_t *pvals) @@ -159,8 +159,11 @@ uint64_t komodo_paxcalc(uint32_t *pvals,int32_t baseid,int32_t relid,uint64_t vo } else if ( baseid == relid ) { - pax_rank(ranked,pvals); - return(ranked[baseid]); + if ( baseid != MAX_CURRENCIES ) + { + pax_rank(ranked,pvals); + return(ranked[baseid]); + } } else if ( (pvalr= pvals[relid]) != 0 ) { @@ -186,16 +189,22 @@ uint64_t komodo_paxprice(int32_t height,char *base,char *rel,uint64_t volume) return(0); } -int32_t komodo_paxprices(uint32_t *timestamps,uint64_t *prices,int32_t max,int32_t width,char *base,char *rel) +int32_t komodo_paxprices(int32_t *heights,uint64_t *prices,int32_t max,int32_t width,char *base,char *rel) { - int32_t baseid=-1,relid=-1,i,ht; uint32_t *ptr; + int32_t baseid=-1,relid=-1,i,ht,num = 0; uint32_t *ptr; if ( (baseid= komodo_baseid(base)) >= 0 && (relid= komodo_baseid(rel)) >= 0 ) { for (i=NUM_PRICES-1; i>=0; i--) { ptr = &PVALS[36 * i]; + heights[num] = *ptr; + prices[num] = komodo_paxcalc(&ptr[1],baseid,relid,COIN); + num++; + if ( num >= max ) + return(num); } } + return(num); } int32_t komodo_pax_opreturn(uint8_t *opret,int32_t maxsize) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index e085d4203..9adfd527d 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -383,7 +383,7 @@ Value gettxoutsetinfo(const Array& params, bool fHelp) uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); uint32_t komodo_txtime(uint256 hash); uint64_t komodo_paxprice(int32_t height,char *base,char *rel,uint64_t basevolume); -int32_t komodo_paxprices(uint32_t *timestamps,uint64_t *prices,int32_t max,int32_t width,char *base,char *rel); +int32_t komodo_paxprices(int32_t *heights,uint64_t *prices,int32_t max,int32_t width,char *base,char *rel); Value paxprice(const Array& params, bool fHelp) { @@ -415,7 +415,7 @@ Value paxprices(const Array& params, bool fHelp) if ( fHelp || params.size() != 3 ) throw runtime_error("paxprices \"base\" \"rel\" width\n"); LOCK(cs_main); - Object ret; uint64_t relvolume,prices[1024]; uint32_t i,n,timestamps[1024]; + Object ret; uint64_t relvolume,prices[1024]; uint32_t i,n; int32_t heights[1024]; std::string base = params[0].get_str(); std::string rel = params[1].get_str(); int32_t width = atoi(params[2].get_str().c_str()); @@ -428,9 +428,16 @@ Value paxprices(const Array& params, bool fHelp) for (i=0; i chainActive.Height() ) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Block height out of range"); + else + { + CBlockIndex *pblockindex = chainActive[heights[i]]; + + item.push_back(Pair("t", (int64_t)pblockindex->nTime)); + item.push_back(Pair("p", (double)prices[i] / COIN)); + a.push_back(item); + } } ret.push_back(Pair("array", a)); return ret;