From 645db3d82b11343a1920efee3deb066b3b12fff4 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 01:19:33 -1100 Subject: [PATCH 01/13] Change entropy tx issuing --- src/cc/dice.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 631951c0d..ae9e01fce 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1652,21 +1652,28 @@ static uint256 dealer0_fundingtxid; void *dealer0_loop(void *_arg) { char *planstr = (char *)_arg; - CTransaction tx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid; int32_t entropytxs,i,n,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; + CTransaction tx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid; int32_t height,lastht,entropytxs,i,n,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; if ( (cp= Diceinit(fundingPubKey,dealer0_fundingtxid,&C,planstr,txfee,mypk,dicepk,refsbits,minbet,maxbet,maxodds,timeoutblocks)) == 0 ) { fprintf(stderr,"error initializing dealer0_loop\n"); exit(-1); } fprintf(stderr,"dealer0 node running\n"); + height = lastht = 0; while ( 1 ) { + while ( KOMODO_INSYNC == 0 || (height= KOMODO_INSYNC) == lastht ) + { + sleep(3); + } + lastht = height; + fprintf(stderr,"New height.%d\n",height); DicePlanFunds(entropyval,entropytxid,refsbits,cp,dicepk,dealer0_fundingtxid,entropytxs,false); if ( entropytxs < DICE_MINUTXOS ) { n = sqrt(DICE_MINUTXOS - entropytxs); - if ( n > 10 ) - n = 10; + //if ( n > 10 ) + // n = 10; for (i=0; i Date: Sat, 1 Dec 2018 01:23:56 -1100 Subject: [PATCH 02/13] Limit to 10 --- 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 ae9e01fce..a2909efc3 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1672,8 +1672,8 @@ void *dealer0_loop(void *_arg) if ( entropytxs < DICE_MINUTXOS ) { n = sqrt(DICE_MINUTXOS - entropytxs); - //if ( n > 10 ) - // n = 10; + if ( n > 10 ) + n = 10; for (i=0; i Date: Sat, 1 Dec 2018 01:50:35 -1100 Subject: [PATCH 03/13] AddNormalinputs2 bypass bitcoin wallet --- src/cc/CCinclude.h | 1 + src/cc/CCtx.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++++++ src/cc/dice.cpp | 2 +- 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index ddfecd47a..83c85e551 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -178,6 +178,7 @@ std::string FinalizeCCTx(uint64_t skipmask,struct CCcontract_info *cp,CMutableTr void SetCCunspents(std::vector > &unspentOutputs,char *coinaddr); void SetCCtxids(std::vector > &addressIndex,char *coinaddr); int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs); +int64_t AddNormalinputs2(CMutableTransaction &mtx,int64_t total,int32_t maxinputs); int64_t CCutxovalue(char *coinaddr,uint256 utxotxid,int32_t utxovout); // curve25519 and sha256 diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index b94e1372c..b683a7f51 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -431,3 +431,92 @@ int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int3 #endif return(0); } + + +int64_t AddNormalinputs2(CMutableTransaction &mtx,int64_t total,int32_t maxinputs) +{ + int32_t abovei,belowi,ind,vout,i,n = 0,maxutxos=64; int64_t sum,threshold,above,below; int64_t remains,nValue,totalinputs = 0; char coinaddr[64]; uint256 txid,hashBlock; CTransaction tx; struct CC_utxo *utxos,*up; + std::vector > unspentOutputs; + utxos = (struct CC_utxo *)calloc(maxutxos,sizeof(*utxos)); + threshold = total/(maxinputs+1); + if ( maxinputs > maxutxos ) + maxutxos = maxinputs; + sum = 0; + Getscriptaddress(coinaddr,CScript() << Mypubkey() << OP_CHECKSIG); + SetCCunspents(unspentOutputs,coinaddr); + for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) + { + txid = it->first.txhash; + vout = (int32_t)it->first.index; + if ( it->second.satoshis < threshold ) + continue; + if ( myGetTransaction(txid,tx,hashBlock) != 0 && tx.vout.size() > 0 && vout < tx.vout.size() && tx.vout[vout].scriptPubKey.IsPayToCryptoCondition() == 0 ) + { + //fprintf(stderr,"check %.8f to vins array.%d of %d %s/v%d\n",(double)out.tx->vout[out.i].nValue/COIN,n,maxutxos,txid.GetHex().c_str(),(int32_t)vout); + if ( mtx.vin.size() > 0 ) + { + for (i=0; i 0 ) + { + for (i=0; itxid = txid; + up->nValue = it->second.satoshis; + up->vout = vout; + sum += up->nValue; + //fprintf(stderr,"add %.8f to vins array.%d of %d\n",(double)up->nValue/COIN,n,maxutxos); + if ( n >= maxutxos || sum >= total ) + break; + } + } + } + remains = total; + for (i=0; i0; i++) + { + below = above = 0; + abovei = belowi = -1; + if ( CC_vinselect(&abovei,&above,&belowi,&below,utxos,n,remains) < 0 ) + { + printf("error finding unspent i.%d of %d, %.8f vs %.8f\n",i,n,(double)remains/COIN,(double)total/COIN); + free(utxos); + return(0); + } + if ( belowi < 0 || abovei >= 0 ) + ind = abovei; + else ind = belowi; + if ( ind < 0 ) + { + printf("error finding unspent i.%d of %d, %.8f vs %.8f, abovei.%d belowi.%d ind.%d\n",i,n,(double)remains/COIN,(double)total/COIN,abovei,belowi,ind); + free(utxos); + return(0); + } + up = &utxos[ind]; + mtx.vin.push_back(CTxIn(up->txid,up->vout,CScript())); + totalinputs += up->nValue; + remains -= up->nValue; + utxos[ind] = utxos[--n]; + memset(&utxos[n],0,sizeof(utxos[n])); + //fprintf(stderr,"totalinputs %.8f vs total %.8f i.%d vs max.%d\n",(double)totalinputs/COIN,(double)total/COIN,i,maxinputs); + if ( totalinputs >= total || (i+1) >= maxinputs ) + break; + } + free(utxos); + if ( totalinputs >= total ) + { + //fprintf(stderr,"return totalinputs %.8f\n",(double)totalinputs/COIN); + return(totalinputs); + } + return(0); +} diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index a2909efc3..7af73241b 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1392,7 +1392,7 @@ std::string DiceAddfunding(uint64_t txfee,char *planstr,uint256 fundingtxid,int6 } if ( scriptPubKey == fundingPubKey ) { - if ( AddNormalinputs(mtx,mypk,amount+2*txfee,60) > 0 ) + if ( AddNormalinputs2(mtx,amount+2*txfee,60) > 0 ) { hentropy = DiceHashEntropy(entropy,mtx.vin[0].prevout.hash,mtx.vin[0].prevout.n,1); mtx.vout.push_back(MakeCC1vout(cp->evalcode,amount,dicepk)); From 69f0b8631f6c028fec0768eb4c3e82a16c0d00e6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 01:56:08 -1100 Subject: [PATCH 04/13] Remove 10 entropy cap --- 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 7af73241b..9c8438fd4 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1672,8 +1672,8 @@ void *dealer0_loop(void *_arg) if ( entropytxs < DICE_MINUTXOS ) { n = sqrt(DICE_MINUTXOS - entropytxs); - if ( n > 10 ) - n = 10; + //if ( n > 10 ) + // n = 10; for (i=0; i Date: Sat, 1 Dec 2018 03:16:26 -1100 Subject: [PATCH 05/13] Verify entropy tx is confirmed for dealer0 --- src/cc/dice.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 9c8438fd4..4f923d754 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1505,7 +1505,7 @@ std::string DiceBetFinish(uint8_t &funcid,uint256 &entropyused,int32_t &entropyv { if ( vin0txid == zeroid || vin0vout < 0 ) { - if ( AddNormalinputs(mtx,mypk,2*txfee,3) == 0 ) // must be a single vin!! + if ( AddNormalinputs2(mtx,2*txfee,3) == 0 ) // must be a single vin!! { CCerror = "no txfee inputs for win/lose"; fprintf(stderr,"%s\n", CCerror.c_str() ); @@ -1652,7 +1652,7 @@ static uint256 dealer0_fundingtxid; void *dealer0_loop(void *_arg) { char *planstr = (char *)_arg; - CTransaction tx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid; int32_t height,lastht,entropytxs,i,n,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; + CTransaction tx,*entropytxs,entropytx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid,txid; int32_t height,lastht,entropytxs,i,n,m,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; if ( (cp= Diceinit(fundingPubKey,dealer0_fundingtxid,&C,planstr,txfee,mypk,dicepk,refsbits,minbet,maxbet,maxodds,timeoutblocks)) == 0 ) { fprintf(stderr,"error initializing dealer0_loop\n"); @@ -1660,6 +1660,7 @@ void *dealer0_loop(void *_arg) } fprintf(stderr,"dealer0 node running\n"); height = lastht = 0; + entropytx = (CTransaction *)calloc(sizeof(*entropytx),DICE_MINUTXOS); while ( 1 ) { while ( KOMODO_INSYNC == 0 || (height= KOMODO_INSYNC) == lastht ) @@ -1674,7 +1675,7 @@ void *dealer0_loop(void *_arg) n = sqrt(DICE_MINUTXOS - entropytxs); //if ( n > 10 ) // n = 10; - for (i=0; i 64 && is_hexstr((char *)res.c_str(),0) > 64 ) @@ -1686,10 +1687,30 @@ void *dealer0_loop(void *_arg) { fprintf(stderr,"ENTROPY %s: %d of %d, %d\n",tx.GetHash().GetHex().c_str(),i,n,DICE_MINUTXOS - entropytxs); RelayTransaction(tx); + entropytxs[m++] = tx; } else break; } else break; } else break; } + for (i=0; i Date: Sat, 1 Dec 2018 03:17:26 -1100 Subject: [PATCH 06/13] numentropytxs --- src/cc/dice.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 4f923d754..dd7ef11ab 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1652,7 +1652,7 @@ static uint256 dealer0_fundingtxid; void *dealer0_loop(void *_arg) { char *planstr = (char *)_arg; - CTransaction tx,*entropytxs,entropytx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid,txid; int32_t height,lastht,entropytxs,i,n,m,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; + CTransaction tx,*entropytxs,entropytx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid,txid; int32_t height,lastht,numentropytxs,i,n,m,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; if ( (cp= Diceinit(fundingPubKey,dealer0_fundingtxid,&C,planstr,txfee,mypk,dicepk,refsbits,minbet,maxbet,maxodds,timeoutblocks)) == 0 ) { fprintf(stderr,"error initializing dealer0_loop\n"); @@ -1669,13 +1669,13 @@ void *dealer0_loop(void *_arg) } lastht = height; fprintf(stderr,"New height.%d\n",height); - DicePlanFunds(entropyval,entropytxid,refsbits,cp,dicepk,dealer0_fundingtxid,entropytxs,false); - if ( entropytxs < DICE_MINUTXOS ) + DicePlanFunds(entropyval,entropytxid,refsbits,cp,dicepk,dealer0_fundingtxid,numentropytxs,false); + if ( numentropytxs < DICE_MINUTXOS ) { - n = sqrt(DICE_MINUTXOS - entropytxs); + n = sqrt(DICE_MINUTXOS - numentropytxs); //if ( n > 10 ) // n = 10; - for (i=m=0; i 64 && is_hexstr((char *)res.c_str(),0) > 64 ) @@ -1685,7 +1685,7 @@ void *dealer0_loop(void *_arg) LOCK(cs_main); if ( myAddtomempool(tx) != 0 ) { - fprintf(stderr,"ENTROPY %s: %d of %d, %d\n",tx.GetHash().GetHex().c_str(),i,n,DICE_MINUTXOS - entropytxs); + fprintf(stderr,"ENTROPY %s: %d of %d, %d\n",tx.GetHash().GetHex().c_str(),i,n,DICE_MINUTXOS - numentropytxs); RelayTransaction(tx); entropytxs[m++] = tx; } else break; From 760d30b22bdecc19f6cadeb49fb65ad2a030643b Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:17:56 -1100 Subject: [PATCH 07/13] hashBlock --- 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 dd7ef11ab..3cb1a5a25 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1652,7 +1652,7 @@ static uint256 dealer0_fundingtxid; void *dealer0_loop(void *_arg) { char *planstr = (char *)_arg; - CTransaction tx,*entropytxs,entropytx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 entropytxid,txid; int32_t height,lastht,numentropytxs,i,n,m,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; + CTransaction tx,*entropytxs,entropytx; CPubKey mypk,dicepk; uint64_t entropyval; uint256 hashBlock,entropytxid,txid; int32_t height,lastht,numentropytxs,i,n,m,num; CScript fundingPubKey; struct CCcontract_info *cp,C; char coinaddr[64]; std::string res; int64_t minbet,maxbet,maxodds,timeoutblocks; uint64_t refsbits,txfee = 10000; if ( (cp= Diceinit(fundingPubKey,dealer0_fundingtxid,&C,planstr,txfee,mypk,dicepk,refsbits,minbet,maxbet,maxodds,timeoutblocks)) == 0 ) { fprintf(stderr,"error initializing dealer0_loop\n"); From d6dfb8c2506326a9f39b28918e792a655972fa1c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:18:45 -1100 Subject: [PATCH 08/13] numentropytxs --- 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 3cb1a5a25..0676900e4 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1660,7 +1660,7 @@ void *dealer0_loop(void *_arg) } fprintf(stderr,"dealer0 node running\n"); height = lastht = 0; - entropytx = (CTransaction *)calloc(sizeof(*entropytx),DICE_MINUTXOS); + entropytx = (CTransaction *)calloc(sizeof(*entropytxs),DICE_MINUTXOS); while ( 1 ) { while ( KOMODO_INSYNC == 0 || (height= KOMODO_INSYNC) == lastht ) From 2ee44287ade0860d1de384f40d517ecb1c95f3fd Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:19:24 -1100 Subject: [PATCH 09/13] Txs --- 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 0676900e4..6d09eda07 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1660,7 +1660,7 @@ void *dealer0_loop(void *_arg) } fprintf(stderr,"dealer0 node running\n"); height = lastht = 0; - entropytx = (CTransaction *)calloc(sizeof(*entropytxs),DICE_MINUTXOS); + entropytxs = (CTransaction *)calloc(sizeof(*entropytxs),DICE_MINUTXOS); while ( 1 ) { while ( KOMODO_INSYNC == 0 || (height= KOMODO_INSYNC) == lastht ) From 4c1cab06b0bdc443855461a55fb0578c7d820a86 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:32:40 -1100 Subject: [PATCH 10/13] +prints --- src/cc/dice.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index 6d09eda07..ff55be6ef 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1696,7 +1696,7 @@ void *dealer0_loop(void *_arg) { tx = entropytxs[i]; txid = tx.GetHash(); - fprintf(stderr,"found %d of %d: %s\n",i,m,txid.GetHex().c_str()); + fprintf(stderr,"check %d of %d: %s\n",i,m,txid.GetHex().c_str()); while ( 1 ) { if ( myGetTransaction(txid,entropytx,hashBlock) == 0 || hashBlock == zeroid ) @@ -1708,7 +1708,12 @@ void *dealer0_loop(void *_arg) RelayTransaction(tx); } sleep(10); - } else break; + } + else + { + fprintf(stderr,"found %s in %s\n",txid.GetHex().c_str(),hashBlock.GetHex().c_str()); + break; + } } } } From 2e8f9eda462090ffe43949610251ed4b9891b3ec Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:40:13 -1100 Subject: [PATCH 11/13] Test --- src/cc/dice.cpp | 2 +- src/main.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index ff55be6ef..0581dc9ce 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1707,13 +1707,13 @@ void *dealer0_loop(void *_arg) fprintf(stderr,"resend ENTROPY %s: %d of %d\n",txid.GetHex().c_str(),i,m); RelayTransaction(tx); } - sleep(10); } else { fprintf(stderr,"found %s in %s\n",txid.GetHex().c_str(),hashBlock.GetHex().c_str()); break; } + sleep(10); } } } diff --git a/src/main.cpp b/src/main.cpp index de9fe34c3..564221f17 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1979,6 +1979,7 @@ bool myAddtomempool(CTransaction &tx, CValidationState *pstate) bool myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock) { + hashBlock = zeroid; // need a GetTransaction without lock so the validation code for assets can run without deadlock { //fprintf(stderr,"check mempool\n"); @@ -2022,6 +2023,7 @@ bool myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlo bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock, bool fAllowSlow) { CBlockIndex *pindexSlow = NULL; + hashBlock = zeroid; LOCK(cs_main); From e5a4fcc4b82e8160f9671e38a0622958e0338e29 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:42:33 -1100 Subject: [PATCH 12/13] memset(&hashBlock,0,sizeof(hashBlock)); --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 564221f17..942dc120e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1979,7 +1979,7 @@ bool myAddtomempool(CTransaction &tx, CValidationState *pstate) bool myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock) { - hashBlock = zeroid; + memset(&hashBlock,0,sizeof(hashBlock)); // need a GetTransaction without lock so the validation code for assets can run without deadlock { //fprintf(stderr,"check mempool\n"); @@ -2023,7 +2023,7 @@ bool myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlo bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock, bool fAllowSlow) { CBlockIndex *pindexSlow = NULL; - hashBlock = zeroid; + memset(&hashBlock,0,sizeof(hashBlock)); LOCK(cs_main); From b0b80e69e68069da8d55537cc1856c83eeeff921 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Dec 2018 03:59:11 -1100 Subject: [PATCH 13/13] Entropy tx size 1.0 --- 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 0581dc9ce..6faaa1f0c 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1677,7 +1677,7 @@ void *dealer0_loop(void *_arg) // n = 10; for (i=m=0; i 64 && is_hexstr((char *)res.c_str(),0) > 64 ) { if ( DecodeHexTx(tx,res) != 0 )