This commit is contained in:
jl777
2019-02-27 03:05:41 -11:00
parent 3dfe0c77c4
commit cc08fcbf12
4 changed files with 86 additions and 21 deletions

View File

@@ -708,11 +708,48 @@ char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port)
#include "rogue.h" #include "rogue.h"
void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_t num) int32_t rogue_confirmed(uint256 txid)
{ {
char cmd[16384],hexstr[16384],params[32768],*retstr; int32_t i; char params[512],*retstr; cJSON *retjson; int32_t numconfs = -1;
sprintf(params,"[\"%s\"]",txid.GetHex().c_str());
if ( (retstr= komodo_issuemethod(USERPASS,"getrawtransaction",params,ROGUE_PORT)) != 0 )
{
fprintf(stderr,"params.(%s) -> %s\n",params,retstr);
if ( (retjson= cJSON_Parse(retstr)) != 0 )
{
numconfs = juint(retjson,"confirmations");
free_json(retjson);
}
free(retstr);
}
fprintf(stderr,"numconfs %d\n",numconfs);
return(numconfs);
}
void rogue_progress(struct rogue_state *rs,int32_t waitflag,uint64_t seed,char *keystrokes,int32_t num)
{
char cmd[16384],hexstr[16384],params[32768],*retstr; int32_t i; uint256 txid;
memset(&txid,0,sizeof(txid));
if ( rs->guiflag != 0 && Gametxidstr[0] != 0 ) if ( rs->guiflag != 0 && Gametxidstr[0] != 0 )
{ {
if ( rs->keytxid != zeroid )
{
if ( rogue_confirmed(rs->keytxid) < 2 )
{
if ( waitflag == 0 )
return(0);
else
{
while ( rogue_confirmed(rs->keytxid) < 2 )
{
fprintf(stderr,"pre-rebroadcast\n");
RelayTransaction(rs->keystrokestx);
sleep(10);
}
}
}
rs->keytxid = zeroid;
}
for (i=0; i<num; i++) for (i=0; i<num; i++)
sprintf(&hexstr[i<<1],"%02x",keystrokes[i]&0xff); sprintf(&hexstr[i<<1],"%02x",keystrokes[i]&0xff);
hexstr[i<<1] = 0; hexstr[i<<1] = 0;
@@ -736,9 +773,34 @@ void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_
fprintf(fp,"%s\n",retstr); fprintf(fp,"%s\n",retstr);
fflush(fp); fflush(fp);
} }
if ( (retjson= cJSON_Parse(retstr)) != 0 )
{
if ( (hexstr= jstr(retjson,"hex")) != 0 )
{
if ( DecodeHexTx(tx,rawtx) != 0 )
{
txid = juint256(retjson,"txid");
if ( tx.GetHash() == txid )
{
rs->keystrokestx = tx;
rs->keytxid = txid;
fprintf(stderr,"set keystrokestx <- %s\n",txid.GetHex().c_str());
}
}
}
free_json(retjson);
}
free(retstr); free(retstr);
} }
sleep(1); if ( waitflag != 0 && rs->keytxid != zeroid )
{
while ( rogue_confirmed(rs->keytxid) < 2 )
{
fprintf(stderr,"post-rebroadcast\n");
RelayTransaction(rs->keystrokestx);
sleep(3);
}
}
} }
} }
} }

View File

@@ -119,7 +119,7 @@ int32_t roguefname(char *fname,uint64_t seed,int32_t counter)
} }
#ifdef test #ifdef test
int32_t flushkeystrokes(struct rogue_state *rs) int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag)
{ {
char fname[1024]; FILE *fp; int32_t i,retflag = -1; char fname[1024]; FILE *fp; int32_t i,retflag = -1;
roguefname(fname,rs->seed,rs->counter); roguefname(fname,rs->seed,rs->counter);
@@ -155,7 +155,7 @@ int32_t flushkeystrokes(struct rogue_state *rs)
#ifdef BUILD_ROGUE #ifdef BUILD_ROGUE
// stubs for inside daemon // stubs for inside daemon
void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_t num) void rogue_progress(struct rogue_state *rs,int32_t waitflag,uint64_t seed,char *keystrokes,int32_t num)
{ {
} }
@@ -165,16 +165,17 @@ int32_t rogue_setplayerdata(struct rogue_state *rs,char *gametxidstr)
} }
#endif #endif
int32_t flushkeystrokes(struct rogue_state *rs) int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag)
{ {
if ( rs->num > 0 ) if ( rs->num > 0 )
{ {
// need to get existing keystrokes including mempool // need to get existing keystrokes including mempool
// create keystrokes that are not saved // create keystrokes that are not saved
rogue_progress(rs,rs->seed,rs->buffered,rs->num); //rs->keytxid = rogue_progress(rs,waitflag,rs->seed,&rs->buffered[rs->lastnum],rs->num - rs->lastnum);
//rs->lastnum = rs->num;
rogue_progress(rs,waitflag,rs->seed,rs->buffered,rs->num);
memset(rs->buffered,0,sizeof(rs->buffered)); memset(rs->buffered,0,sizeof(rs->buffered));
rs->counter++; rs->counter++;
rs->num = 0;
} }
return(0); return(0);
} }
@@ -182,7 +183,7 @@ int32_t flushkeystrokes(struct rogue_state *rs)
void rogue_bailout(struct rogue_state *rs) void rogue_bailout(struct rogue_state *rs)
{ {
char cmd[512]; char cmd[512];
flushkeystrokes(rs); flushkeystrokes(rs,1);
//sleep(5); //sleep(5);
return; return;
/*fprintf(stderr,"bailing out\n"); /*fprintf(stderr,"bailing out\n");
@@ -562,15 +563,15 @@ playit(struct rogue_state *rs)
} }
else else
{ {
if ( rs->needflush != 0 && rs->num > 1000 ) if ( rs->needflush != 0 )
{ {
if ( flushkeystrokes(rs) == 0 ) if ( flushkeystrokes(rs,0) == 0 )
rs->needflush = 0; rs->needflush = 0;
} }
} }
} }
if ( rs->guiflag != 0 ) if ( rs->guiflag != 0 )
flushkeystrokes(rs); flushkeystrokes(rs,1);
endit(0); endit(0);
} }
@@ -595,7 +596,7 @@ int32_t _quit()
if ( rs->sleeptime != 0 ) if ( rs->sleeptime != 0 )
refresh(); refresh();
score(rs,purse, 1, 0); score(rs,purse, 1, 0);
flushkeystrokes(rs); flushkeystrokes(rs,1);
my_exit(0); my_exit(0);
} }
else else

View File

@@ -361,12 +361,14 @@ typedef union _bits256 bits256;
struct rogue_state struct rogue_state
{ {
uint256 keytxid;
CTransaction keystrokestx;
uint64_t seed; uint64_t seed;
char *keystrokes; char *keystrokes;
uint32_t needflush,replaydone; uint32_t needflush,replaydone;
int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring; int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring,lastnum;
struct rogue_player P; struct rogue_player P;
char buffered[8192]; char buffered[65536*16];
uint8_t playerdata[10000]; uint8_t playerdata[10000];
}; };
extern struct rogue_state globalR; extern struct rogue_state globalR;
@@ -374,12 +376,12 @@ extern struct rogue_state globalR;
int rogue(int argc, char **argv, char **envp); int rogue(int argc, char **argv, char **envp);
void rogueiterate(struct rogue_state *rs); void rogueiterate(struct rogue_state *rs);
int32_t roguefname(char *fname,uint64_t seed,int32_t counter); int32_t roguefname(char *fname,uint64_t seed,int32_t counter);
int32_t flushkeystrokes(struct rogue_state *rs); int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag);
int32_t rogue_restorepack(struct rogue_state *rs); int32_t rogue_restorepack(struct rogue_state *rs);
void restore_player(struct rogue_state *rs); void restore_player(struct rogue_state *rs);
int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t num,struct rogue_player *player,int32_t sleepmillis); int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t num,struct rogue_player *player,int32_t sleepmillis);
void rogue_bailout(struct rogue_state *rs); void rogue_bailout(struct rogue_state *rs);
void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_t num); void rogue_progress(struct rogue_state *rs,int32_t waitflag,uint64_t seed,char *keystrokes,int32_t num);
int32_t rogue_setplayerdata(struct rogue_state *rs,char *gametxidstr); int32_t rogue_setplayerdata(struct rogue_state *rs,char *gametxidstr);
#define ROGUE_MAXTOTAL (pstats.s_str*2) #define ROGUE_MAXTOTAL (pstats.s_str*2)

View File

@@ -361,7 +361,7 @@ UniValue rogue_playerobj(std::vector<uint8_t> playerdata,uint256 playertxid,uint
} }
} }
//fprintf(stderr,"trace spend to %s/v%d\n",txid.GetHex().c_str(),vout); //fprintf(stderr,"trace spend to %s/v%d\n",txid.GetHex().c_str(),vout);
if ( n++ > 1000 ) if ( n++ > ROGUE_MAXITERATIONS )
break; break;
} }
obj.push_back(Pair("gametxid",gametxid.GetHex())); obj.push_back(Pair("gametxid",gametxid.GetHex()));
@@ -588,7 +588,7 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx
{ {
txid = gametxid; txid = gametxid;
vout = 1+i; vout = 1+i;
fprintf(stderr,"scan forward active.%s spenttxid.%s\n",gametxid.GetHex().c_str(),txid.GetHex().c_str()); //fprintf(stderr,"scan forward active.%s spenttxid.%s\n",gametxid.GetHex().c_str(),txid.GetHex().c_str());
n = 0; n = 0;
while ( CCgettxout(txid,vout,1) < 0 ) while ( CCgettxout(txid,vout,1) < 0 )
{ {
@@ -603,10 +603,10 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx
} }
txid = spenttxid; txid = spenttxid;
vout = 0; vout = 0;
fprintf(stderr,"n.%d next txid.%s/v%d\n",n,txid.GetHex().c_str(),spentvini); //fprintf(stderr,"n.%d next txid.%s/v%d\n",n,txid.GetHex().c_str(),spentvini);
if ( spentvini != 0 ) if ( spentvini != 0 )
break; break;
if ( n++ > 1000 ) if ( n++ > ROGUE_MAXITERATIONS )
break; break;
} }
if ( txid != zeroid ) if ( txid != zeroid )