diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a1480f83b..4de2cbca0 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -495,9 +495,10 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to continue; { #ifdef KOMODO_ASSETCHAINS_WAITNOTARIZE - if ( kmdsp != 0 && (kmdsp->NOTARIZED_HEIGHT >= pax->height || kmdsp->CURRENT_HEIGHT > pax->height+30) ) // assumes same chain as notarize + if ( kmdsp != 0 && kmdsp->NOTARIZED_HEIGHT >= pax->height )//|| kmdsp->CURRENT_HEIGHT > pax->height+30) ) // assumes same chain as notarize pax->validated = pax->komodoshis; //kmdsp->NOTARIZED_HEIGHT; - else pax->validated = pax->ready = 0; + else if ( kmdsp->CURRENT_HEIGHT > pax->height+30 ) + pax->validated = pax->ready = 0; #else pax->validated = pax->komodoshis; #endif diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 3e2a8aab4..98bf8d286 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -370,9 +370,9 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) return(sum); } -uint64_t komodo_paxcalc(uint32_t *pvals,int32_t baseid,int32_t relid,uint64_t basevolume,uint64_t kmdbtc,uint64_t btcusd) +uint64_t komodo_paxcalc(int32_t height,uint32_t *pvals,int32_t baseid,int32_t relid,uint64_t basevolume,uint64_t refkmdbtc,uint64_t refbtcusd) { - uint32_t pvalb,pvalr; uint64_t usdvol,baseusd,usdkmd,baserel,ranked[32]; + uint32_t pvalb,pvalr; uint64_t price,kmdbtc,btcusd,usdvol,baseusd,usdkmd,baserel,ranked[32]; if ( basevolume > KOMODO_PAXMAX ) { printf("paxcalc overflow %.8f\n",dstr(basevolume)); @@ -382,10 +382,20 @@ uint64_t komodo_paxcalc(uint32_t *pvals,int32_t baseid,int32_t relid,uint64_t ba { if ( relid == MAX_CURRENCIES ) { - if ( kmdbtc == 0 ) - kmdbtc = pvals[MAX_CURRENCIES]; - if ( btcusd == 0 ) - btcusd = pvals[MAX_CURRENCIES + 1]; + if ( height < 236000 ) + { + if ( kmdbtc == 0 ) + kmdbtc = pvals[MAX_CURRENCIES]; + if ( btcusd == 0 ) + btcusd = pvals[MAX_CURRENCIES + 1]; + } + else + { + if ( (kmdbtc= pvals[MAX_CURRENCIES]) == 0 ) + kmdbtc = refkmdbtc; + if ( (btcusd= pvals[MAX_CURRENCIES + 1]) == 0 ) + btcusd = refbtcusd; + } if ( kmdbtc < 25000000 ) kmdbtc = 25000000; if ( pvals[USD] != 0 && kmdbtc != 0 && btcusd != 0 ) @@ -393,9 +403,16 @@ uint64_t komodo_paxcalc(uint32_t *pvals,int32_t baseid,int32_t relid,uint64_t ba baseusd = (((uint64_t)pvalb * 1000000000) / pvals[USD]); usdvol = komodo_paxvol(basevolume,baseusd); usdkmd = ((uint64_t)kmdbtc * 1000000000) / btcusd; - //printf("kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); - //printf("usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %.8f\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,dstr(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd))); - return(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)); + if ( height >= 236000-10 ) + { + usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; + price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); + fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); + fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); + //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); + //price = (uint64_t)((long long)MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid])); + } else price = (MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)); + return(price); } //else printf("zero val in KMD conv %llu %llu %llu\n",(long long)pvals[USD],(long long)kmdbtc,(long long)btcusd); } else if ( baseid == relid ) @@ -442,7 +459,7 @@ uint64_t _komodo_paxprice(uint64_t *kmdbtcp,uint64_t *btcusdp,int32_t height,cha } //portable_mutex_unlock(&komodo_mutex); if ( kmdbtc != 0 && btcusd != 0 ) - return(komodo_paxcalc(&ptr[1],baseid,relid,basevolume,kmdbtc,btcusd)); + return(komodo_paxcalc(height,&ptr[1],baseid,relid,basevolume,kmdbtc,btcusd)); else return(0); } } @@ -512,12 +529,18 @@ uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint { if ( (votes[numvotes-1-i]= _komodo_paxprice(0,0,height-i,base,rel,100000,kmdbtc,btcusd)) == 0 ) zeroes++; - else nonz++; + else + { + nonz++; + sum += votes[numvotes-1-i]; + //if ( (i % 10) == 0 ) + // fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); + } } + //fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); + //fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); if ( nonz <= (numvotes >> 1) ) { - //printf("kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); - //printf("komodo_paxprice nonz.%d of numvotes.%d seed.%llu\n",nonz,numvotes,(long long)seed); return(0); } return(komodo_paxcorrelation(votes,numvotes,seed) * basevolume / 100000); @@ -561,7 +584,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin break; } } - if ( height < 165000 ) + if ( height < 165000 || height > 236000 ) break; } portable_mutex_unlock(&komodo_mutex); @@ -580,7 +603,7 @@ int32_t komodo_paxprices(int32_t *heights,uint64_t *prices,int32_t max,char *bas { ptr = &PVALS[36 * i]; heights[num] = *ptr; - prices[num] = komodo_paxcalc(&ptr[1],baseid,relid,COIN,0,0); + prices[num] = komodo_paxcalc(*ptr,&ptr[1],baseid,relid,COIN,0,0); num++; if ( num >= max ) return(num); diff --git a/src/main.cpp b/src/main.cpp index 8552aff8a..31ee26c8e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -873,7 +873,9 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state, { if ( tx.vin[j].prevout.hash == array[k] && tx.vin[j].prevout.n == 1 ) { - printf("MEMPOOL: banned tx.%d being used at ht.%d vini.%d\n",k,(int32_t)chainActive.Tip()->nHeight,j); + static uint32_t counter; + if ( counter++ < 100 ) + printf("MEMPOOL: banned tx.%d being used at ht.%d vini.%d\n",k,(int32_t)chainActive.Tip()->nHeight,j); return(false); } }