diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 4cb748bfd..9f333e289 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -216,7 +216,7 @@ int32_t komodo_baseid(char *origbase) uint64_t komodo_paxcalc(uint32_t *pvals,int32_t baseid,int32_t relid,uint64_t basevolume) { uint32_t pvalb,pvalr,kmdbtc,btcusd; uint64_t usdvol,baseusd,usdkmd,baserel,sum,ranked[32]; int32_t i; - if ( basevolume > 10000000*COIN ) + if ( basevolume > 1000000*COIN ) return(0); if ( (pvalb= pvals[baseid]) != 0 ) { @@ -284,17 +284,20 @@ int32_t komodo_paxprices(int32_t *heights,uint64_t *prices,int32_t max,char *bas return(num); } -uint64_t PAX_fiatdest(char *destaddr,uint8_t pubkey33[33],char *coinaddr,int32_t height,char *base,int32_t fiatunits) +uint64_t PAX_fiatdest(char *destaddr,uint8_t pubkey33[33],char *coinaddr,int32_t height,char *origbase,int64_t fiatoshis) { - uint8_t shortflag = 0; int32_t baseid,relid; uint8_t addrtype,rmd160[20]; uint64_t komodoshis = 0; + uint8_t shortflag = 0; char base[4]; int32_t i,baseid,relid; uint8_t addrtype,rmd160[20]; uint64_t komodoshis = 0; if ( strcmp(base,(char *)"KMD") == 0 || strcmp(base,(char *)"kmd") == 0 ) return(0); + for (i=0; i<3; i++) + base[i] = toupper(origbase[i]); + base[i] = 0; if ( fiatunits < 0 ) shortflag = 1, fiatunits = -fiatunits; - komodoshis = komodo_paxprice(height,base,(char *)"KMD",(uint64_t)fiatunits); + komodoshis = komodo_paxprice(height,base,(char *)"KMD",(uint64_t)fiatoshis); if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 ) { - PAX_pubkey(pubkey33,addrtype,rmd160,base,shortflag,fiatunits); + PAX_pubkey(pubkey33,addrtype,rmd160,base,shortflag,fiatoshis); bitcoin_address(destaddr,KOMODO_PUBTYPE,pubkey33,33); } return(komodoshis); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 6f08e69c5..967d7bd95 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -452,7 +452,7 @@ Value sendtoaddress(const Array& params, bool fHelp) return wtx.GetHash().GetHex(); } -uint64_t PAX_fiatdest(char *destaddr,uint8_t pubkey33[33],char *coinaddr,int32_t height,char *base,int32_t fiatunits); +uint64_t PAX_fiatdest(char *destaddr,uint8_t pubkey33[33],char *coinaddr,int32_t height,char *base,int64_t fiatoshis); Value paxdeposit(const Array& params, bool fHelp) { @@ -461,22 +461,22 @@ Value paxdeposit(const Array& params, bool fHelp) if (!EnsureWalletIsAvailable(fHelp)) return Value::null; if (fHelp || params.size() != 3) - throw runtime_error("paxdeposit \"bitcoinaddress\" fiatunits \"base\""); + throw runtime_error("paxdeposit \"bitcoinaddress\" [-]fiatoshis \"base\"\nnegative fiatoshis means a short position, long position capped at 100% gain"); LOCK2(cs_main, pwalletMain->cs_wallet); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); - int32_t fiatunits = atoi(params[1].get_str()); + int64_t fiatoshis = atof(params[1].get_str()) * COIN; std::string base = params[2].get_str(); std::string dest; - komodoshis = PAX_fiatdest(destaddr,pubkey33,(char *)params[0].get_str().c_str(),chainActive.Tip()->nHeight,(char *)base.c_str(),fiatunits); + komodoshis = PAX_fiatdest(destaddr,pubkey33,(char *)params[0].get_str().c_str(),chainActive.Tip()->nHeight,(char *)base.c_str(),fiatoshis); dest.append(destaddr); CBitcoinAddress destaddress(dest); if (!destaddress.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid dest Bitcoin address"); for (i=0; i<33; i++) printf("%02x",pubkey33[i]); - printf(" ht.%d srcaddr.(%s) %s fiatunits.%d -> dest.(%s) komodoshis.%llu\n",chainActive.Tip()->nHeight,(char *)params[0].get_str().c_str(),(char *)base.c_str(),fiatunits,destaddr,(long long)komodoshis); + printf(" ht.%d srcaddr.(%s) %s fiatoshis.%lld -> dest.(%s) komodoshis.%llu\n",chainActive.Tip()->nHeight,(char *)params[0].get_str().c_str(),(char *)base.c_str(),(long long)fiatoshis,destaddr,(long long)komodoshis); EnsureWalletIsUnlocked(); CWalletTx wtx;