From 65a961ff06b5b7357be05ac861c22c88222858ba Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 22 Jul 2018 13:06:46 -1100 Subject: [PATCH] Faucet --- src/cc/CCcustom.cpp | 4 ++-- src/cc/CCfaucet.h | 2 ++ src/cc/CCtx.cpp | 3 ++- src/cc/CCutils.cpp | 6 +++--- src/cc/faucet.cpp | 35 +++++++++++++++++++++++++++++++++++ src/rpcserver.cpp | 3 +++ src/rpcserver.h | 2 ++ src/wallet/rpcwallet.cpp | 32 ++++++++++++++++++++++++++++++++ 8 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/cc/CCcustom.cpp b/src/cc/CCcustom.cpp index 2d8485507..f10c35fb6 100644 --- a/src/cc/CCcustom.cpp +++ b/src/cc/CCcustom.cpp @@ -36,8 +36,8 @@ CC *MakeFaucetCond(CPubKey pk); const char *AssetsCCaddr = "RGKRjeTBw4LYFotSDLT6RWzMHbhXri6BG6" ;//"RFYE2yL3KknWdHK6uNhvWacYsCUtwzjY3u"; char AssetsCChexstr[67] = { "02adf84e0e075cf90868bd4e3d34a03420e034719649c41f371fc70d8e33aa2702" }; uint8_t AssetsCCpriv[32] = { 0x9b, 0x17, 0x66, 0xe5, 0x82, 0x66, 0xac, 0xb6, 0xba, 0x43, 0x83, 0x74, 0xf7, 0x63, 0x11, 0x3b, 0xf0, 0xf3, 0x50, 0x6f, 0xd9, 0x6b, 0x67, 0x85, 0xf9, 0x7a, 0xf0, 0x54, 0x4d, 0xb1, 0x30, 0x77 }; -const char *FaucetCCaddr = "RGKRjeTBw4LYFotSDLT6RWzMHbhXri6BG6" ;//"RFYE2yL3KknWdHK6uNhvWacYsCUtwzjY3u"; -char FaucetCChexstr[67] = { "02adf84e0e075cf90868bd4e3d34a03420e034719649c41f371fc70d8e33aa2702" }; +const char *FaucetCCaddr = "RKQV4oYs4rvxAWx1J43VnT73rSTVtUeckk" ;//"RKQV4oYs4rvxAWx1J43VnT73rSTVtUeckk"; +char FaucetCChexstr[67] = { "03682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe12" }; uint8_t FaucetCCpriv[32] = { 0x9b, 0x17, 0x66, 0xe5, 0x82, 0x66, 0xac, 0xb6, 0xba, 0x43, 0x83, 0x74, 0xf7, 0x63, 0x11, 0x3b, 0xf0, 0xf3, 0x50, 0x6f, 0xd9, 0x6b, 0x67, 0x85, 0xf9, 0x7a, 0xf0, 0x54, 0x4d, 0xb1, 0x30, 0x77 }; diff --git a/src/cc/CCfaucet.h b/src/cc/CCfaucet.h index 09178be14..71875c394 100644 --- a/src/cc/CCfaucet.h +++ b/src/cc/CCfaucet.h @@ -26,5 +26,7 @@ extern char FaucetCChexstr[67]; bool IsFaucetInput(CScript const& scriptSig); CC *MakeFaucetCond(CPubKey pk); +std::string FaucetFund(uint64_t txfee,uint64_t funds); +std::string FaucetGet(uint64_t txfee); #endif diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index 24be366d1..201adb074 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -82,7 +82,8 @@ std::string FinalizeCCTx(uint8_t evalcode,CMutableTransaction &mtx,CPubKey mypk, change = totalinputs - (totaloutputs+txfee); mtx.vout.push_back(CTxOut(change,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); } - mtx.vout.push_back(CTxOut(0,opret)); + if ( opret.size() > 0 ) + mtx.vout.push_back(CTxOut(0,opret)); PrecomputedTransactionData txdata(mtx); n = mtx.vin.size(); for (i=0; iGetKey(keyID,vchSecret) != 0 ) { memcpy(myprivkey,vchSecret.begin(),32); - //for (i=0; i<32; i++) - // fprintf(stderr,"%02x",myprivkey[i]); - //fprintf(stderr," found privkey!\n"); + for (i=0; i<32; i++) + fprintf(stderr,"0x%02x, ",myprivkey[i]); + fprintf(stderr," found privkey!\n"); return(true); } #endif diff --git a/src/cc/faucet.cpp b/src/cc/faucet.cpp index 92abe0003..b1b69b90f 100644 --- a/src/cc/faucet.cpp +++ b/src/cc/faucet.cpp @@ -111,3 +111,38 @@ bool ProcessFaucet(Eval* eval, std::vector paramsNull,const CTransactio return(true); } else return(false); } + +std::string FaucetFund(uint64_t txfee,uint64_t funds) +{ + CMutableTransaction mtx; CPubKey mypk,faucetpk; CScript opret; + if ( txfee == 0 ) + txfee = 10000; + mypk = pubkey2pk(Mypubkey()); + faucetpk = GetUnspendable(EVAL_FAUCET,0); + if ( AddNormalinputs(mtx,mypk,funds+2*txfee,64) > 0 ) + { + mtx.vout.push_back(MakeFaucetVout(funds,faucetpk)); + return(FinalizeCCTx(EVAL_ASSETS,mtx,mypk,txfee,opret)); + } + return(0); +} + +std::string FaucetGet(uint64_t txfee) +{ + CMutableTransaction mtx; CPubKey mypk,faucetpk; CScript opret; uint64_t inputs,CCchange=0,nValue=COIN; + if ( txfee == 0 ) + txfee = 10000; + faucetpk = GetUnspendable(EVAL_FAUCET,0); + mypk = pubkey2pk(Mypubkey()); + if ( (inputs= AddFaucetInputs(mtx,faucetpk,nValue+txfee,60)) > 0 ) + { + if ( inputs > nValue ) + CCchange = (inputs - nValue - txfee); + if ( CCchange != 0 ) + mtx.vout.push_back(MakeFaucetVout(CCchange,faucetpk)); + mtx.vout.push_back(CTxOut(nValue,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); + return(FinalizeCCTx(EVAL_ASSETS,mtx,mypk,txfee,opret)); + } + return(0); +} + diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index d5f6e861d..ab676ddae 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -344,6 +344,9 @@ static const CRPCCommand vRPCCommands[] = #ifdef ENABLE_WALLET { "rawtransactions", "fundrawtransaction", &fundrawtransaction, false }, #endif + /* faucet */ + { "faucet", "faucetfund", &faucetfund, true }, + { "faucet", "faucetget", &faucetget, true }, /* tokens */ { "tokens", "tokenorders", &tokenorders, true }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 93db71733..021e2d274 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -221,6 +221,8 @@ extern UniValue tokencancelask(const UniValue& params, bool fHelp); extern UniValue tokenfillask(const UniValue& params, bool fHelp); extern UniValue tokenswapask(const UniValue& params, bool fHelp); extern UniValue tokenfillswap(const UniValue& params, bool fHelp); +extern UniValue faucetfund(const UniValue& params, bool fHelp); +extern UniValue faucetget(const UniValue& params, bool fHelp); extern UniValue getnewaddress(const UniValue& params, bool fHelp); // in rpcwallet.cpp //extern UniValue getnewaddress64(const UniValue& params, bool fHelp); // in rpcwallet.cpp diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 7455b532b..355eb1800 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -4830,8 +4830,40 @@ int32_t komodo_staked(CMutableTransaction &txNew,uint32_t nBits,uint32_t *blockt return(siglen); } +#include "../cc/CCfaucet.h" + +UniValue faucetfund(const UniValue& params, bool fHelp) +{ + uint64_t funds; std::string hex; + if ( fHelp || params.size() > 1 ) + throw runtime_error("faucetfund amount\n"); + funds = atof(params[1].get_str().c_str()) * COIN; + hex = FaucetFund(0,funds); + if ( hex.size() > 0 ) + { + result.push_back(Pair("result", "success")); + result.push_back(Pair("hex", hex)); + } else result.push_back(Pair("error", "couldnt create faucet funding transaction")); + return(result); +} + +UniValue faucetget(const UniValue& params, bool fHelp) +{ + uint64_t funds; std::string hex; + if ( fHelp || params.size() > 0 ) + throw runtime_error("faucetget\n"); + hex = FaucetGet(0); + if ( hex.size() > 0 ) + { + result.push_back(Pair("result", "success")); + result.push_back(Pair("hex", hex)); + } else result.push_back(Pair("error", "couldnt create faucet get transaction")); + return(result); +} + #include "../cc/CCassets.h" + UniValue tokenorders(const UniValue& params, bool fHelp) { uint256 tokenid;