From 62f0cedd3c5e359805e772e0a240e8bb7f707bd1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Sep 2018 06:00:40 -1100 Subject: [PATCH] Test --- src/cc/dapps/oraclefeed.c | 73 +++++++++++++++++++++++++++++++++++++++ src/cc/gateways.cpp | 18 +++++----- 2 files changed, 81 insertions(+), 10 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index bd044ab62..9eaa40964 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -430,6 +430,78 @@ int32_t get_KMDheader(bits256 *blockhashp,bits256 *merklerootp,int32_t prevheigh return(0); } +cJSON *get_gatewayspending(char *acname,char *oraclestxidstr,char *coin) +{ + cJSON *retjson; char *retstr; int32_t height=0; + if ( (retjson= get_komodocli(&retstr,acname,"gatewayspending",oraclestxidstr,coin,"")) != 0 ) + { + return(retjson); + } + else if ( retstr != 0 ) + { + fprintf(stderr,"get_gatewayspending.(%s) error.(%s)\n",acname,retstr); + free(retstr); + } + return(0); +} + +cJSON *get_rawmempool(char *acname) +{ + cJSON *retjson; char *retstr; int32_t height=0; + if ( (retjson= get_komodocli(&retstr,acname,"getrawmempool","","","")) != 0 ) + { + return(retjson); + } + else if ( retstr != 0 ) + { + fprintf(stderr,"get_rawmempool.(%s) error.(%s)\n",acname,retstr); + free(retstr); + } + return(0); +} + +void update_gatewayspending(char *acname,char *oraclestxidstr,char *coin) +{ + // check queue to prevent duplicate + // check KMD chain and mempool for txidaddr + // if txidaddr exists properly, spend the marker (txid.2) + // create withdraw tx and sign it + // if enough sigs, sendrawtransaction and when it confirms spend marker (txid.2) + // if not enough sigs, post partially signed to acname with marker2 + // monitor marker2, for the partially signed withdraws + cJSON *retjson,*pending; char *coinstr,*txidaddr; int32_t i,n; + if ( (retjson= get_gatewayspending(acname,oraclestxidstr,coin)) != 0 ) + { + if ( jint(retjson,"queueflag") != 0 && (coinstr= jstr(retjson,"coin")) != 0 && strcmp(coinstr,coin) == 0 ) + { + if ( (pending= jarray(&n,retjson,"pending")) != 0 ) + { + for (i=0; i msigpubkeys; uint256 hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64]; int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply; struct CCcontract_info *cp,C; + UniValue result(UniValue::VOBJ),pending(UniValue::VARR),obj(UniValue::VOBJ); CTransaction tx; std::string coin; CPubKey mypk,gatewayspk; std::vector msigpubkeys; uint256 hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64],signeraddr[64]; int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply; struct CCcontract_info *cp,C; std::vector > unspentOutputs; cp = CCinit(&C,EVAL_GATEWAYS); mypk = pubkey2pk(Mypubkey()); @@ -816,8 +809,13 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) sprintf(numstr,"%.8f",(double)tx.vout[0].nValue/COIN); obj.push_back(Pair("amount",numstr)); pending.push_back(obj); - //if ( queueflag != 0 ) - // numqueued += GatewaysAddQueue(refcoin,txid,tx.vout[1].scriptPubKey,tx.vout[0].nValue); + if ( queueflag != 0 ) + { + obj.push_back(Pair("depositaddr",depositaddr)); + Getscriptaddress(signeraddr,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG); + obj.push_back(Pair("signeraddr",signeraddr)); + // numqueued += GatewaysAddQueue(refcoin,txid,tx.vout[1].scriptPubKey,tx.vout[0].nValue); + } } } }