From e09099a178423db57d936a6fbd02cf862b1c97ba Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Sun, 28 Oct 2018 16:26:56 +0800 Subject: [PATCH 1/6] fix dice status error message after mempool entopy is invalidated --- src/cc/dice.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 3a2d3129c..d1b207ce0 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1104,9 +1104,7 @@ std::string DiceBetFinish(int32_t *resultp,uint64_t txfee,char *planstr,uint256 } } *resultp = -1; - CCerror = "couldnt find bettx or entropytx"; - fprintf(stderr,"%s\n", CCerror.c_str() ); - return(""); + return("couldnt find bettx or entropytx"); } double DiceStatus(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettxid,std::string &error) @@ -1137,6 +1135,9 @@ double DiceStatus(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettx { mySendrawtransaction(res); n++; + } else + { + error = res; } } } From b19a3d5217f4f7e823732ee3f9019e2e4ca5dba2 Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Sun, 28 Oct 2018 19:11:23 +0800 Subject: [PATCH 2/6] try --- src/cc/dice.cpp | 17 ++--------------- src/cc/eval.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index d1b207ce0..d914be251 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -440,17 +440,6 @@ bool DiceVerifyTimeout(CTransaction &betTx,int32_t timeoutblocks) return(numblocks >= timeoutblocks); } -bool GetBlock(uint256 hash, CBlockIndex& blockIdx) -{ - auto r = mapBlockIndex.find(hash); - if (r != mapBlockIndex.end()) { - blockIdx = *r->second; - return true; - } - fprintf(stderr, "CC Eval Error: Can't get block from index\n"); - return false; -} - bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx) { uint256 txid,fundingtxid,vinfundingtxid,vinhentropy,vinproof,hashBlock,hash,proof,entropy; int64_t minbet,maxbet,maxodds,timeoutblocks,odds,winnings; uint64_t vinsbits,sbits,amount,inputs,outputs,txfee=10000; int32_t numvins,numvouts,preventCCvins,preventCCvouts,i,iswin; uint8_t funcid; CScript fundingPubKey; CTransaction fundingTx,vinTx,vinofvinTx; char CCaddr[64]; @@ -558,10 +547,8 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx) return eval->Invalid("vin0 or vin1 normal vin for bet"); else if ( tx.vin[1].prevout.hash != tx.vin[2].prevout.hash ) return eval->Invalid("vin0 != vin1 prevout.hash for bet"); - else if ( eval->GetTxUnconfirmed(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) { - if (hashBlock.IsNull() || !GetBlock(hashBlock, block)) + else if ( eval->GetTxConfirmedDICE(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) return eval->Invalid("always should find vin.0, but didnt for wlt"); - } else if ( vinTx.vout.size() < 3 || DecodeDiceOpRet(tx.vin[1].prevout.hash,vinTx.vout[vinTx.vout.size()-1].scriptPubKey,vinsbits,vinfundingtxid,vinhentropy,vinproof) != 'B' ) return eval->Invalid("not betTx for vin0/1 for wlt"); else if ( sbits != vinsbits || fundingtxid != vinfundingtxid ) @@ -968,7 +955,7 @@ std::string DiceBet(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t bet int32_t entropytxs; if ( (funding= DicePlanFunds(entropyval,entropytxid,sbits,cp,dicepk,fundingtxid,entropytxs)) >= 2*bet*odds+txfee && entropyval != 0 ) { - if ( entropytxs < 2 ) { + if ( entropytxs < 10 ) { error = "Your dealer is broke, find a new casino."; return(""); } diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index b6fcf57dd..b2bc80d9e 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -76,11 +76,11 @@ bool Eval::Dispatch(const CC *cond, const CTransaction &txTo, unsigned int nIn) case EVAL_IMPORTPAYOUT: return ImportPayout(vparams, txTo, nIn); break; - + case EVAL_IMPORTCOIN: return ImportCoin(vparams, txTo, nIn); break; - + default: return(ProcessCC(cp,this, vparams, txTo, nIn)); break; @@ -115,6 +115,15 @@ bool Eval::GetTxConfirmed(const uint256 &hash, CTransaction &txOut, CBlockIndex return true; } +bool Eval::GetTxConfirmedDICE(const uint256 &hash, CTransaction &txOut,uint256 &hashBlock) const +{ + CBlockIndex block; + if (!GetTxUnconfirmed(hash, txOut, hashBlock)) + return false; + if (hashBlock.IsNull() || !GetBlock(hashBlock, block)) + return false; + return true; +} unsigned int Eval::GetCurrentHeight() const { From cf4ddfaf5d513e016b801745f282ae03987984a2 Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Sun, 28 Oct 2018 19:18:07 +0800 Subject: [PATCH 3/6] try --- src/cc/dice.cpp | 4 +++- src/cc/eval.cpp | 10 ---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index d914be251..0ec2d1043 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -547,8 +547,10 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx) return eval->Invalid("vin0 or vin1 normal vin for bet"); else if ( tx.vin[1].prevout.hash != tx.vin[2].prevout.hash ) return eval->Invalid("vin0 != vin1 prevout.hash for bet"); - else if ( eval->GetTxConfirmedDICE(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) + else if ( eval->GetTxUnconfirmed(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) { + if (hashBlock.IsNull() || !eval->GetBlock(hashBlock, block)) return eval->Invalid("always should find vin.0, but didnt for wlt"); + } else if ( vinTx.vout.size() < 3 || DecodeDiceOpRet(tx.vin[1].prevout.hash,vinTx.vout[vinTx.vout.size()-1].scriptPubKey,vinsbits,vinfundingtxid,vinhentropy,vinproof) != 'B' ) return eval->Invalid("not betTx for vin0/1 for wlt"); else if ( sbits != vinsbits || fundingtxid != vinfundingtxid ) diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index b2bc80d9e..113c4a6e8 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -115,16 +115,6 @@ bool Eval::GetTxConfirmed(const uint256 &hash, CTransaction &txOut, CBlockIndex return true; } -bool Eval::GetTxConfirmedDICE(const uint256 &hash, CTransaction &txOut,uint256 &hashBlock) const -{ - CBlockIndex block; - if (!GetTxUnconfirmed(hash, txOut, hashBlock)) - return false; - if (hashBlock.IsNull() || !GetBlock(hashBlock, block)) - return false; - return true; -} - unsigned int Eval::GetCurrentHeight() const { return chainActive.Height(); From 0f2c1a42606c08cd44782e93820ed6b61c569d1f Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Sun, 28 Oct 2018 19:24:14 +0800 Subject: [PATCH 4/6] fix --- src/cc/dice.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 0ec2d1043..7961d3809 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -547,6 +547,7 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx) return eval->Invalid("vin0 or vin1 normal vin for bet"); else if ( tx.vin[1].prevout.hash != tx.vin[2].prevout.hash ) return eval->Invalid("vin0 != vin1 prevout.hash for bet"); + CBlockIndex block; else if ( eval->GetTxUnconfirmed(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) { if (hashBlock.IsNull() || !eval->GetBlock(hashBlock, block)) return eval->Invalid("always should find vin.0, but didnt for wlt"); From 5096e57c8017f7d1d642ba88877b434caa68a337 Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Sun, 28 Oct 2018 19:28:58 +0800 Subject: [PATCH 5/6] fix --- src/cc/dice.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 7961d3809..1e99ece58 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -547,9 +547,9 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx) return eval->Invalid("vin0 or vin1 normal vin for bet"); else if ( tx.vin[1].prevout.hash != tx.vin[2].prevout.hash ) return eval->Invalid("vin0 != vin1 prevout.hash for bet"); - CBlockIndex block; else if ( eval->GetTxUnconfirmed(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) { - if (hashBlock.IsNull() || !eval->GetBlock(hashBlock, block)) + CBlockIndex block; + if (hashBlock.IsNull() || eval->!GetBlock(hashBlock, block)) return eval->Invalid("always should find vin.0, but didnt for wlt"); } else if ( vinTx.vout.size() < 3 || DecodeDiceOpRet(tx.vin[1].prevout.hash,vinTx.vout[vinTx.vout.size()-1].scriptPubKey,vinsbits,vinfundingtxid,vinhentropy,vinproof) != 'B' ) From 54ffcaee4656f0d99ba0cde94c47dd40822c7caf Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Sun, 28 Oct 2018 19:31:18 +0800 Subject: [PATCH 6/6] fix --- src/cc/dice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 1e99ece58..48413005f 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -549,7 +549,7 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx) return eval->Invalid("vin0 != vin1 prevout.hash for bet"); else if ( eval->GetTxUnconfirmed(tx.vin[1].prevout.hash,vinTx,hashBlock) == 0 ) { CBlockIndex block; - if (hashBlock.IsNull() || eval->!GetBlock(hashBlock, block)) + if (hashBlock.IsNull() || !eval->GetBlock(hashBlock, block)) return eval->Invalid("always should find vin.0, but didnt for wlt"); } else if ( vinTx.vout.size() < 3 || DecodeDiceOpRet(tx.vin[1].prevout.hash,vinTx.vout[vinTx.vout.size()-1].scriptPubKey,vinsbits,vinfundingtxid,vinhentropy,vinproof) != 'B' )