test
This commit is contained in:
33
src/komodo.h
33
src/komodo.h
@@ -68,7 +68,7 @@ uint32_t MINDENOMS[] = { 1000, 1000, 100000, 1000, 1000, 1000, 1000, 1000, // ma
|
||||
|
||||
double PAX_val(uint32_t pval,int32_t baseid)
|
||||
{
|
||||
printf("PAX_val baseid.%d pval.%u\n",baseid,pval);
|
||||
//printf("PAX_val baseid.%d pval.%u\n",baseid,pval);
|
||||
if ( baseid >= 0 && baseid < MAX_CURRENCIES )
|
||||
return(((double)pval / 1000000000.) / MINDENOMS[baseid]);
|
||||
return(0.);
|
||||
@@ -488,15 +488,17 @@ int32_t komodo_baseid(char *origbase)
|
||||
for (i=0; origbase[i]!=0&&i<sizeof(base); i++)
|
||||
base[i] = toupper((int32_t)(origbase[i] & 0xff));
|
||||
base[i] = 0;
|
||||
if ( strcmp(base,"KMD") == 0 )
|
||||
return(MAX_CURRENCIES);
|
||||
for (i=0; i<MAX_CURRENCIES; i++)
|
||||
if ( strcmp(CURRENCIES[i],base) == 0 )
|
||||
return(i);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
uint64_t komodo_paxprice(int32_t height,char *base,char *rel)
|
||||
uint64_t komodo_paxprice(int32_t height,char *base,char *rel,uint64_t volume)
|
||||
{
|
||||
int32_t baseid,relid,i,ht; uint32_t pvalb,pvalr,*ptr; double baseval,relval;
|
||||
int32_t baseid,relid,i,ht; uint32_t usdval,kmdbtc,btcusd,pvalb,pvalr,*ptr; double usdval,baseval,relval,KMDBTC,BTCUSD;
|
||||
if ( (baseid= komodo_baseid(base)) >= 0 && (relid= komodo_baseid(rel)) >= 0 )
|
||||
{
|
||||
for (i=NUM_PRICES-1; i>=0; i--)
|
||||
@@ -504,12 +506,29 @@ uint64_t komodo_paxprice(int32_t height,char *base,char *rel)
|
||||
ptr = &PVALS[36 * i];
|
||||
if ( *ptr < height )
|
||||
{
|
||||
if ( (pvalb= ptr[1 + baseid]) != 0 && (pvalr= ptr[1 + relid]) != 0 )
|
||||
if ( (pvalb= ptr[1 + baseid]) != 0 )
|
||||
{
|
||||
baseval = PAX_val(pvalb,baseid);
|
||||
relval = PAX_val(pvalr,relid);
|
||||
printf("ht.%d [%d] base.(%u %f) rel.(%u %f) -> %llu\n",height,*ptr,pvalb,baseval,pvalr,relval,(long long)(COIN * (baseval / relval)));
|
||||
return(COIN * (baseval / relval));
|
||||
if ( relid == MAX_CURRENCIES )
|
||||
{
|
||||
kmdbtc = ptr[1 + MAX_CURRENCIES];
|
||||
btcusd = ptr[1 + MAX_CURRENCIES + 1];
|
||||
if ( ptr[1 + USD] != 0 && kmdbtc != 0 && btcusd != 0 )
|
||||
{
|
||||
usdval = PAX_val(ptr[1 + USD],USD);
|
||||
KMDBTC = ((double)kmdbtc / (1000000000. * 1000.));
|
||||
BTCUSD = ((double)btcusd / (1000000000. / 1000.));
|
||||
KMDUSD = (KMDBTC * BTCUSD);
|
||||
printf("base -> USD %f, BTC %f KMDUSD %f\n",baseval/usdval,BTCUSD,KMDUSD);
|
||||
return(volume * (baseval / usdval) / KMDUSD);
|
||||
}
|
||||
}
|
||||
else if ( (pvalr= ptr[1 + relid]) != 0 )
|
||||
{
|
||||
relval = PAX_val(pvalr,relid);
|
||||
printf("ht.%d [%d] base.(%u %f) rel.(%u %f) -> %llu\n",height,*ptr,pvalb,baseval,pvalr,relval,(long long)(COIN * (baseval / relval)));
|
||||
return(volume * (baseval / relval));
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -382,22 +382,29 @@ 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 komodo_paxprice(int32_t height,char *base,char *rel,uint64_t basevolume);
|
||||
|
||||
Value paxprice(const Array& params, bool fHelp)
|
||||
{
|
||||
if ( fHelp || params.size() != 3 )
|
||||
if ( fHelp || params.size() < 3 || params.size() > 4 )
|
||||
throw runtime_error("paxprice \"base\" \"rel\" height\n");
|
||||
LOCK(cs_main);
|
||||
Object ret; uint64_t pricetoshis;
|
||||
Object ret; uint64_t pricetoshis,basevolume;
|
||||
std::string base = params[0].get_str();
|
||||
std::string rel = params[1].get_str();
|
||||
int32_t height = atoi(params[2].get_str().c_str());
|
||||
pricetoshis = komodo_paxprice(height,(char *)base.c_str(),(char *)rel.c_str());
|
||||
if ( params.size() == 3 )
|
||||
basevolume = COIN;
|
||||
else basevolume = AmountFromValue(params[3]);
|
||||
relvolume = komodo_paxprice(height,(char *)base.c_str(),(char *)rel.c_str(),basevolume);
|
||||
ret.push_back(Pair("base", base));
|
||||
ret.push_back(Pair("rel", rel));
|
||||
ret.push_back(Pair("height", height));
|
||||
ret.push_back(Pair("price", ValueFromAmount(pricetoshis)));
|
||||
if ( relvolume != 0 )
|
||||
{
|
||||
ret.push_back(Pair("price", ValueFromAmount(basevolume) / ValueFromAmount(relvolume)));
|
||||
ret.push_back(Pair("relvolume", ValueFromAmount(relvolume)));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user