@ -98,7 +98,7 @@ What is needed is for the dealer node to track the entropy tx that was already b
# include "../compat/endian.h"
# define MAX_ENTROPYUSED 8192
# define DICE_MINUTXOS 7777
# define DICE_MINUTXOS 10000
extern int32_t KOMODO_INSYNC ;
pthread_mutex_t DICE_MUTEX , DICEREVEALED_MUTEX ;
@ -226,7 +226,7 @@ bool mySenddicetransaction(std::string res,uint256 entropyused,int32_t entropyvo
//fprintf(stderr,"%s\n%s\n",res.c_str(),uint256_str(str,tx.GetHash()));
if ( funcid = = ' R ' | | ( retval = DiceEntropyUsed ( oldbetTx , oldbettxid , oldentropyvout , entropyused , bettxid , betTx , entropyvout ) ) > = 0 )
{
//LOCK(cs_main);
LOCK ( cs_main ) ;
if ( myAddtomempool ( tx ) ! = 0 )
{
RelayTransaction ( tx ) ;
@ -319,10 +319,11 @@ void dicefinish_delete(struct dicefinish_info *ptr)
void * dicefinish ( void * _ptr )
{
std : : vector < uint8_t > mypk ; struct CCcontract_info * cp , C ; char name [ 32 ] , coinaddr [ 64 ] , CCaddr [ 64 ] ; std : : string res ; int32_t newht , newblock , entropyvout , numblocks , lastheight = 0 , vin0_needed , i , n , m , num , iter , result ; struct dicefinish_info * ptr , * tmp ; uint32_t now ; struct dicefinish_utxo * utxos ; uint256 hashBlock , entropyused ; CTransaction betTx , finishTx ;
std : : vector < uint8_t > mypk ; struct CCcontract_info * cp , C ; char name [ 32 ] , coinaddr [ 64 ] , CCaddr [ 64 ] ; std : : string res ; int32_t newht , newblock , entropyvout , numblocks , lastheight = 0 , vin0_needed , i , n , m , num , iter , result ; struct dicefinish_info * ptr , * tmp ; uint32_t now ; struct dicefinish_utxo * utxos ; uint256 hashBlock , entropyused ; CPubKey dicepk ; C Transaction betTx , finishTx , t x ;
mypk = Mypubkey ( ) ;
pubkey2addr ( coinaddr , mypk . data ( ) ) ;
cp = CCinit ( & C , EVAL_DICE ) ;
dicepk = GetUnspendable ( cp , 0 ) ;
GetCCaddress ( cp , CCaddr , GetUnspendable ( cp , 0 ) ) ;
fprintf ( stderr , " start dicefinish thread %s CCaddr.%s \n " , coinaddr , CCaddr ) ;
if ( ( newht = KOMODO_INSYNC ) = = 0 )
@ -393,18 +394,28 @@ void *dicefinish(void *_ptr)
fprintf ( stderr , " send refund! \n " ) ;
mySenddicetransaction ( ptr - > rawtx , ptr - > entropyused , ptr - > entropyvout , ptr - > bettxid , ptr - > betTx , ptr - > funcid , ptr ) ;
}
dicefinish_delete ( ptr ) ;
continue ;
}
}
if ( ptr - > bettxid_ready ! = 0 )
{
if ( newblock ! = 0 & & ptr - > txid ! = zeroid )
if ( now > ptr - > bettxid_ready + 2 * 3600 )
{
CCduration ( numblocks , ptr - > txid ) ;
//fprintf(stderr,"duration finish txid.%s\n",ptr->txid.GetHex().c_str());
if ( numblocks = = 0 )
mySenddicetransaction ( ptr - > rawtx , ptr - > entropyused , ptr - > entropyvout , ptr - > bettxid , ptr - > betTx , ptr - > funcid , ptr ) ;
else continue ;
fprintf ( stderr , " purge bettxid_ready %s \n " , ptr - > bettxid . GetHex ( ) . c_str ( ) ) ;
dicefinish_delete ( ptr ) ;
continue ;
}
else if ( newblock ! = 0 )
{
if ( ptr - > txid ! = zeroid )
{
CCduration ( numblocks , ptr - > txid ) ;
//fprintf(stderr,"duration finish txid.%s\n",ptr->txid.GetHex().c_str());
if ( numblocks = = 0 )
mySenddicetransaction ( ptr - > rawtx , ptr - > entropyused , ptr - > entropyvout , ptr - > bettxid , ptr - > betTx , ptr - > funcid , ptr ) ;
else continue ;
}
}
if ( ptr - > txid = = zeroid )
vin0_needed + + ;
@ -417,7 +428,7 @@ void *dicefinish(void *_ptr)
utxos = ( struct dicefinish_utxo * ) calloc ( vin0_needed , sizeof ( * utxos ) ) ;
if ( ( n = dicefinish_utxosget ( num , utxos , vin0_needed , coinaddr ) ) > 0 )
{
//fprintf(stderr,"iter.%d vin0_needed.%d got %d\n",iter,vin0_needed,n);
//fprintf(stderr,"iter.%d vin0_needed.%d got %d, num 0.0002 %d \n",iter,vin0_needed,n,num );
m = 0 ;
DL_FOREACH_SAFE ( DICEFINISH_LIST , ptr , tmp )
{
@ -471,28 +482,7 @@ void *dicefinish(void *_ptr)
}
}
}
else if ( newblock ! = 0 )
dicefinish_utxosget ( num , 0 , 0 , coinaddr ) ;
free ( utxos ) ;
if ( newblock ! = 0 & & num < DICE_MINUTXOS )
{
char * cmd = ( char * ) malloc ( 100 * 128 ) ;
sprintf ( cmd , " ./komodo-cli -ac_name=%s sendmany \" \" \" { \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002} \" " , ASSETCHAINS_SYMBOL , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr ) ;
n = sqrt ( ( DICE_MINUTXOS - num ) / 100 ) * 2 + 1 ;
fprintf ( stderr , " num normal 0.0002 utxos.%d < %d -> n.%d \n " , num , DICE_MINUTXOS , n ) ;
for ( i = 0 ; i < n ; i + + )
{
if ( system ( cmd ) ! = 0 )
fprintf ( stderr , " system error issuing.(%s) \n " , cmd ) ;
}
free ( cmd ) ;
if ( ( rand ( ) % 100 ) = = 0 )
{
fprintf ( stderr , " make 0.023 utxos \n " ) ;
if ( system ( " cc/dapps/sendmany " ) ! = 0 )
fprintf ( stderr , " system error issuing.(cc/dapps/sendmany) \n " ) ;
}
}
}
}
if ( ( newht = KOMODO_INSYNC ) = = 0 | | newht = = lastheight )
@ -540,7 +530,7 @@ void DiceQueue(int32_t iswin,uint64_t sbits,uint256 fundingtxid,uint256 bettxid,
else
{
//fprintf(stderr,"DiceQueue status bettxid.%s already in list\n",bettxid.GetHex().c_str());
//_dicehash_clear(bettxid);
_dicehash_clear ( bettxid ) ;
}
pthread_mutex_unlock ( & DICE_MUTEX ) ;
}
@ -941,7 +931,7 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx,
if ( ( iswin = DiceIsWinner ( entropy , entropyvout , txid , tx , vinTx , hash , sbits , minbet , maxbet , maxodds , timeoutblocks , fundingtxid ) ) ! = 0 )
{
// will only happen for fundingPubKey
if ( KOMODO_INSYNC ! = 0 )
if ( KOMODO_INSYNC ! = 0 & & KOMODO_DEALERNODE ! = 0 )
DiceQueue ( iswin , sbits , fundingtxid , txid , tx , entropyvout ) ;
}
else
@ -1081,11 +1071,12 @@ uint64_t AddDiceInputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPubK
unstringbits ( sstr , sbits ) ;
if ( sbits = = refsbits & & ( funcid = = ' F ' & & reffundingtxid = = txid ) | | reffundingtxid = = fundingtxid )
{
if ( funcid = = ' F ' | | funcid = = ' E ' | | funcid = = ' W ' | | funcid = = ' L ' | | funcid = = ' T ' )
if ( funcid = = ' R ' | | funcid = = ' F ' | | funcid = = ' E ' | | funcid = = ' W ' | | funcid = = ' L ' | | funcid = = ' T ' )
{
if ( total ! = 0 & & maxinputs ! = 0 )
{
fprintf ( stderr , " use (%c) %.8f %s %s/v%d \n " , funcid , ( double ) tx . vout [ 0 ] . nValue / COIN , sstr , uint256_str ( str , txid ) , vout ) ;
if ( funcid = = ' R ' )
fprintf ( stderr , " >>>>>>>>>>>> use (%c) %.8f %s %s/v%d \n " , funcid , ( double ) tx . vout [ 0 ] . nValue / COIN , sstr , uint256_str ( str , txid ) , vout ) ;
mtx . vin . push_back ( CTxIn ( txid , vout , CScript ( ) ) ) ;
}
totalinputs + = it - > second . satoshis ;
@ -1142,7 +1133,7 @@ int64_t DicePlanFunds(uint64_t &entropyval,uint256 &entropytxid,uint64_t refsbit
if ( ( funcid = = ' F ' & & reffundingtxid = = txid ) | | reffundingtxid = = fundingtxid )
{
//fprintf(stderr,"%d: %s/v%d (%c %.8f) %.8f %.8f\n",n,uint256_str(str,txid),vout,funcid,(double)it->second.satoshis/COIN,(double)totalinputs/COIN,(double)sum/COIN);
if ( ( nValue = IsDicevout ( cp , tx , vout , refsbits , reffundingtxid ) ) > = 10000 & & ( funcid = = ' F ' | | funcid = = ' E ' | | funcid = = ' W ' | | funcid = = ' L ' | | funcid = = ' T ' ) )
if ( ( nValue = IsDicevout ( cp , tx , vout , refsbits , reffundingtxid ) ) > = 10000 & & ( funcid = = ' R ' | | funcid = = ' F ' | | funcid = = ' E ' | | funcid = = ' W ' | | funcid = = ' L ' | | funcid = = ' T ' ) )
{
if ( funcid = = ' L ' | | funcid = = ' W ' | | funcid = = ' E ' )
n + + ;
@ -1205,7 +1196,7 @@ int64_t DicePlanFunds(uint64_t &entropyval,uint256 &entropytxid,uint64_t refsbit
}
}
}
else if ( funcid ! = ' B ' )
else if ( 0 & & funcid ! = ' B ' )
fprintf ( stderr , " %s %c refsbits.%llx sbits.%llx nValue %.8f \n " , uint256_str ( str , txid ) , funcid , ( long long ) refsbits , ( long long ) sbits , ( double ) nValue / COIN ) ;
} //else fprintf(stderr,"else case funcid (%c) %d %s vs %s\n",funcid,funcid,uint256_str(str,reffundingtxid),uint256_str(str2,fundingtxid));
} //else fprintf(stderr,"funcid.%d %c skipped %.8f\n",funcid,funcid,(double)tx.vout[vout].nValue/COIN);
@ -1443,7 +1434,7 @@ std::string DiceBet(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t bet
entropyval = entropyval2 ;
entropytxid = entropytxid2 ;
}
if ( ( funding > = 2 * bet * odds + txfee & & entropyval ! = 0 ) )
if ( funding > = 2 * bet * odds + txfee & & entropyval ! = 0 )
{
if ( entropytxs < 100 ) {
CCerror = " Your dealer is broke, find a new casino. " ;
@ -1477,7 +1468,6 @@ std::string DiceBetFinish(uint8_t &funcid,uint256 &entropyused,int32_t &entropyv
entropyused = zeroid ;
* resultp = 0 ;
funcid = 0 ;
//char str[65]; fprintf(stderr,"DiceBetFinish.%s %s\n",planstr,uint256_str(str,bettxid));
if ( ( cp = Diceinit ( fundingPubKey , fundingtxid , & C , planstr , txfee , mypk , dicepk , sbits , minbet , maxbet , maxodds , timeoutblocks ) ) = = 0 )
{
CCerror = " Diceinit error in finish, is your transaction confirmed? " ;
@ -1539,7 +1529,8 @@ std::string DiceBetFinish(uint8_t &funcid,uint256 &entropyused,int32_t &entropyv
mtx . vin . push_back ( CTxIn ( bettxid , 0 , CScript ( ) ) ) ;
mtx . vin . push_back ( CTxIn ( bettxid , 1 , CScript ( ) ) ) ;
funcid = ' R ' ;
mtx . vout . push_back ( CTxOut ( betTx . vout [ 0 ] . nValue , fundingPubKey ) ) ;
mtx . vout . push_back ( MakeCC1vout ( cp - > evalcode , betTx . vout [ 0 ] . nValue , dicepk ) ) ;
//mtx.vout.push_back(CTxOut(betTx.vout[0].nValue,fundingPubKey));
mtx . vout . push_back ( CTxOut ( txfee , fundingPubKey ) ) ;
mtx . vout . push_back ( CTxOut ( betTx . vout [ 1 ] . nValue , betTx . vout [ 2 ] . scriptPubKey ) ) ;
* resultp = 1 ;
@ -1639,9 +1630,72 @@ std::string DiceBetFinish(uint8_t &funcid,uint256 &entropyused,int32_t &entropyv
return ( " couldnt find bettx or entropytx " ) ;
}
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 ;
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 " ) ;
while ( 1 )
{
DicePlanFunds ( entropyval , entropytxid , refsbits , cp , dicepk , dealer0_fundingtxid , entropytxs , false ) ;
if ( entropytxs < DICE_MINUTXOS )
{
n = sqrt ( DICE_MINUTXOS - entropytxs ) + 10 ;
for ( i = 0 ; i < DICE_MINUTXOS - entropytxs & & i < n ; i + + )
{
res = DiceAddfunding ( txfee , planstr , dealer0_fundingtxid , COIN / 100 ) ;
if ( res . empty ( ) = = 0 & & res . size ( ) > 64 & & is_hexstr ( ( char * ) res . c_str ( ) , 0 ) > 64 )
{
if ( DecodeHexTx ( tx , res ) ! = 0 )
{
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 ) ;
RelayTransaction ( tx ) ;
} else break ;
} else break ;
} else break ;
}
}
pubkey2addr ( coinaddr , Mypubkey ( ) . data ( ) ) ;
dicefinish_utxosget ( num , 0 , 0 , coinaddr ) ;
fprintf ( stderr , " have %d 0.0002 utxos, need %d \n " , num , DICE_MINUTXOS ) ;
if ( num < DICE_MINUTXOS ) // this deadlocks, need to put it in a different thread
{
char * cmd = ( char * ) malloc ( 100 * 128 ) ;
sprintf ( cmd , " ./komodo-cli -ac_name=%s sendmany \" \" \" { \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002, \\ \" %s \\ \" :0.0002} \" " , ASSETCHAINS_SYMBOL , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr , coinaddr ) ;
n = sqrt ( ( DICE_MINUTXOS - num ) / 100 ) * 2 + 1 ;
fprintf ( stderr , " num normal 0.0002 utxos.%d < %d -> n.%d \n " , num , DICE_MINUTXOS , n ) ;
for ( i = 0 ; i < n ; i + + )
{
fprintf ( stderr , " %d of %d: " , i , n ) ;
if ( system ( cmd ) ! = 0 )
fprintf ( stderr , " system error issuing.(%s) \n " , cmd ) ;
}
free ( cmd ) ;
if ( ( rand ( ) % 100 ) = = 0 )
{
fprintf ( stderr , " make 0.023 utxos \n " ) ;
if ( system ( " cc/dapps/sendmany " ) ! = 0 )
fprintf ( stderr , " system error issuing.(cc/dapps/sendmany) \n " ) ;
}
}
sleep ( 60 ) ;
}
return ( 0 ) ;
}
double DiceStatus ( uint64_t txfee , char * planstr , uint256 fundingtxid , uint256 bettxid )
{
CScript fundingPubKey , scriptPubKey ; CTransaction spenttx , betTx , entropyTx ; uint256 hentropyproof , entropyused , hash , proof , txid , hashBlock , spenttxid , bettorentropy ; CPubKey mypk , dicepk , fundingpk ; struct CCcontract_info * cp , C ; int32_t i , entropyvout , flag , win , loss , duplicate = 0 , result , iswin , vout , n = 0 ; int64_t minbet , maxbet , maxodds , timeoutblocks , sum = 0 ; uint64_t sbits , refsbits ; char coinaddr [ 64 ] ; std : : string res ; uint8_t funcid ;
static int32_t didinit ; static char _planstr [ 64 ] ;
CScript fundingPubKey , scriptPubKey ; CTransaction spenttx , betTx , entropyTx ; uint256 hentropyproof , entropyused , hash , proof , txid , hashBlock , spenttxid , bettorentropy ; CPubKey mypk , dicepk , fundingpk ; struct CCcontract_info * cp , C ; int32_t i , entropyvout , flag , win , num , loss , duplicate = 0 , result , iswin , vout , n = 0 ; int64_t minbet , maxbet , maxodds , timeoutblocks , sum = 0 ; uint64_t sbits , refsbits ; char coinaddr [ 64 ] ; std : : string res ; uint8_t funcid ;
if ( ( cp = Diceinit ( fundingPubKey , fundingtxid , & C , planstr , txfee , mypk , dicepk , refsbits , minbet , maxbet , maxodds , timeoutblocks ) ) = = 0 )
{
CCerror = " Diceinit error in status, is your transaction confirmed? " ;
@ -1669,8 +1723,8 @@ double DiceStatus(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettx
{
if ( myGetTransaction ( betTx . vin [ 0 ] . prevout . hash , entropyTx , hashBlock ) ! = 0 )
{
flag = 0 ;
if ( scriptPubKey = = fundingPubKey )
flag = KOMODO_DEALERNODE ! = 0 ;
if ( KOMODO_DEALERNODE ! = 0 & & scriptPubKey = = fundingPubKey )
{
bettorentropy = DiceGetEntropy ( betTx , ' B ' ) ;
if ( ( iswin = DiceIsWinner ( hentropyproof , entropyvout , txid , betTx , entropyTx , bettorentropy , sbits , minbet , maxbet , maxodds , timeoutblocks , fundingtxid ) ) ! = 0 )
@ -1681,47 +1735,30 @@ double DiceStatus(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettx
loss + + ;
n + + ;
DiceQueue ( iswin , sbits , fundingtxid , txid , betTx , entropyvout ) ;
} //else flag = 1;
}
}
if ( flag ! = 0 | | scriptPubKey ! = fundingPubKey )
if ( scriptPubKey ! = fundingPubKey )
{
if ( flag ! = 0 )
fprintf ( stderr , " illegal bettxid %d: iswin.%d W.%d L.%d %s/v%d (%c %.8f) %.8f \n " , n , iswin , win , loss , txid . GetHex ( ) . c_str ( ) , vout , funcid , ( double ) it - > second . satoshis / COIN , ( double ) sum / COIN ) ;
fprintf ( stderr , " serialized bettxid %d: iswin.%d W.%d L.%d %s/v%d (%c %.8f) %.8f \n " , n , iswin , win , loss , txid . GetHex ( ) . c_str ( ) , vout , funcid , ( double ) it - > second . satoshis / COIN , ( double ) sum / COIN ) ;
res = DiceBetFinish ( funcid , entropyused , entropyvout , & result , txfee , planstr , fundingtxid , txid , scriptPubKey = = fundingPubKey , zeroid , - 1 ) ;
if ( result > 0 )
{
mySenddicetransaction ( res , entropyused , entropyvout , txid , betTx , funcid , 0 ) ;
n + + ;
if ( n > 10 )
break ;
}
}
} else fprintf ( stderr , " bettxid.%s cant find entropyTx.%s \n " , txid . GetHex ( ) . c_str ( ) , betTx . vin [ 0 ] . prevout . hash . GetHex ( ) . c_str ( ) ) ;
}
}
}
if ( scriptPubKey = = fundingPubKey )
if ( didinit = = 0 & & KOMODO_DEALERNODE = = 0 & & scriptPubKey = = fundingPubKey )
{
CTransaction tx ; uint64_t entropyval ; uint256 entropytxid ; int32_t entropytxs ;
DicePlanFunds ( entropyval , entropytxid , refsbits , cp , dicepk , fundingtxid , entropytxs , false ) ;
if ( entropytxs < DICE_MINUTXOS )
{
n = 10 ; //sqrt(DICE_MINUTXOS - entropytxs) + 10;
for ( i = 0 ; i < DICE_MINUTXOS - entropytxs & & i < n ; i + + )
{
res = DiceAddfunding ( txfee , planstr , fundingtxid , COIN / 100 ) ;
if ( res . empty ( ) = = 0 & & res . size ( ) > 64 & & is_hexstr ( ( char * ) res . c_str ( ) , 0 ) > 64 )
{
if ( DecodeHexTx ( tx , res ) ! = 0 )
{
//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 ) ;
RelayTransaction ( tx ) ;
} else break ;
} else break ;
} else break ;
}
}
strcpy ( _planstr , planstr ) ;
dealer0_fundingtxid = fundingtxid ;
if ( pthread_create ( ( pthread_t * ) malloc ( sizeof ( pthread_t ) ) , NULL , dealer0_loop , _planstr ) = = 0 )
didinit = 1 ;
}
return ( n ) ;
}