Playertxid
This commit is contained in:
@@ -361,7 +361,7 @@ int32_t rogue_isvalidgame(struct CCcontract_info *cp,int32_t &gameheight,CTransa
|
|||||||
} else return(-1);
|
} else return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
UniValue rogue_playerobj(std::vector<uint8_t> playerdata)
|
UniValue rogue_playerobj(std::vector<uint8_t> playerdata,uint256 playertxid)
|
||||||
{
|
{
|
||||||
int32_t i; struct rogue_player P; char packitemstr[512]; UniValue obj(UniValue::VOBJ),a(UniValue::VARR);
|
int32_t i; struct rogue_player P; char packitemstr[512]; UniValue obj(UniValue::VOBJ),a(UniValue::VARR);
|
||||||
memset(&P,0,sizeof(P));
|
memset(&P,0,sizeof(P));
|
||||||
@@ -376,6 +376,7 @@ UniValue rogue_playerobj(std::vector<uint8_t> playerdata)
|
|||||||
rogue_packitemstr(packitemstr,&P.roguepack[i]);
|
rogue_packitemstr(packitemstr,&P.roguepack[i]);
|
||||||
a.push_back(packitemstr);
|
a.push_back(packitemstr);
|
||||||
}
|
}
|
||||||
|
obj.push_back(Pair("playertxid",playertxid.GetHex()));
|
||||||
obj.push_back(Pair("pack",a));
|
obj.push_back(Pair("pack",a));
|
||||||
obj.push_back(Pair("packsize",(int64_t)P.packsize));
|
obj.push_back(Pair("packsize",(int64_t)P.packsize));
|
||||||
obj.push_back(Pair("hitpoints",(int64_t)P.hitpoints));
|
obj.push_back(Pair("hitpoints",(int64_t)P.hitpoints));
|
||||||
@@ -448,10 +449,11 @@ int32_t rogue_playerdataspend(CMutableTransaction &mtx,uint256 playertxid,uint25
|
|||||||
} else return(-1);
|
} else return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t rogue_findbaton(struct CCcontract_info *cp,char **keystrokesp,int32_t &numkeys,int32_t ®slot,std::vector<uint8_t> &playerdata,uint256 &batontxid,int32_t &batonvout,int64_t &batonvalue,int32_t &batonht,uint256 gametxid,CTransaction gametx,int32_t maxplayers,char *destaddr,int32_t &numplayers)
|
int32_t rogue_findbaton(struct CCcontract_info *cp,uint256 &playertxid,char **keystrokesp,int32_t &numkeys,int32_t ®slot,std::vector<uint8_t> &playerdata,uint256 &batontxid,int32_t &batonvout,int64_t &batonvalue,int32_t &batonht,uint256 gametxid,CTransaction gametx,int32_t maxplayers,char *destaddr,int32_t &numplayers)
|
||||||
{
|
{
|
||||||
int32_t i,numvouts,spentvini,matches = 0; CPubKey pk; uint256 spenttxid,hashBlock,txid,playertxid,origplayergame; CTransaction spenttx,matchtx,batontx; std::vector<uint8_t> checkdata; CBlockIndex *pindex; char ccaddr[64],*keystrokes=0;
|
int32_t i,numvouts,spentvini,matches = 0; CPubKey pk; uint256 spenttxid,hashBlock,txid,origplayergame; CTransaction spenttx,matchtx,batontx; std::vector<uint8_t> checkdata; CBlockIndex *pindex; char ccaddr[64],*keystrokes=0;
|
||||||
numkeys = numplayers = 0;
|
numkeys = numplayers = 0;
|
||||||
|
playertxid = zeroid;
|
||||||
for (i=0; i<maxplayers; i++)
|
for (i=0; i<maxplayers; i++)
|
||||||
{
|
{
|
||||||
if ( myIsutxo_spent(spenttxid,gametxid,i+2) >= 0 )
|
if ( myIsutxo_spent(spenttxid,gametxid,i+2) >= 0 )
|
||||||
@@ -477,7 +479,6 @@ int32_t rogue_findbaton(struct CCcontract_info *cp,char **keystrokesp,int32_t &n
|
|||||||
//fprintf(stderr,"matches.%d numvouts.%d\n",matches,numvouts);
|
//fprintf(stderr,"matches.%d numvouts.%d\n",matches,numvouts);
|
||||||
if ( rogue_registeropretdecode(txid,playertxid,matchtx.vout[numvouts-1].scriptPubKey) == 'R' && txid == gametxid )
|
if ( rogue_registeropretdecode(txid,playertxid,matchtx.vout[numvouts-1].scriptPubKey) == 'R' && txid == gametxid )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"playertxid.%s\n",playertxid.ToString().c_str());
|
|
||||||
if ( playertxid == zeroid || rogue_playerdata(cp,origplayergame,pk,playerdata,playertxid) == 0 )
|
if ( playertxid == zeroid || rogue_playerdata(cp,origplayergame,pk,playerdata,playertxid) == 0 )
|
||||||
{
|
{
|
||||||
txid = matchtx.GetHash();
|
txid = matchtx.GetHash();
|
||||||
@@ -539,7 +540,7 @@ int32_t rogue_findbaton(struct CCcontract_info *cp,char **keystrokesp,int32_t &n
|
|||||||
void rogue_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gametxid,CTransaction gametx,int32_t vout,int32_t maxplayers)
|
void rogue_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gametxid,CTransaction gametx,int32_t vout,int32_t maxplayers)
|
||||||
{
|
{
|
||||||
// identify if bailout or quit or timed out
|
// identify if bailout or quit or timed out
|
||||||
uint256 batontxid,spenttxid,hashBlock; CTransaction spenttx; int32_t numplayers,regslot,numkeys,batonvout,batonht,retval; int64_t batonvalue; std::vector<uint8_t> playerdata; char destaddr[64];
|
uint256 batontxid,spenttxid,hashBlock,playertxid; CTransaction spenttx; int32_t numplayers,regslot,numkeys,batonvout,batonht,retval; int64_t batonvalue; std::vector<uint8_t> playerdata; char destaddr[64];
|
||||||
destaddr[0] = 0;
|
destaddr[0] = 0;
|
||||||
if ( myIsutxo_spent(spenttxid,gametxid,vout) >= 0 )
|
if ( myIsutxo_spent(spenttxid,gametxid,vout) >= 0 )
|
||||||
{
|
{
|
||||||
@@ -547,7 +548,7 @@ void rogue_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gamet
|
|||||||
Getscriptaddress(destaddr,spenttx.vout[0].scriptPubKey);
|
Getscriptaddress(destaddr,spenttx.vout[0].scriptPubKey);
|
||||||
}
|
}
|
||||||
obj.push_back(Pair("slot",(int64_t)vout-2));
|
obj.push_back(Pair("slot",(int64_t)vout-2));
|
||||||
if ( (retval= rogue_findbaton(cp,0,numkeys,regslot,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,destaddr,numplayers)) == 0 )
|
if ( (retval= rogue_findbaton(cp,playertxid,0,numkeys,regslot,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,destaddr,numplayers)) == 0 )
|
||||||
{
|
{
|
||||||
if ( CCgettxout(gametxid,maxplayers+vout,1) == 10000 )
|
if ( CCgettxout(gametxid,maxplayers+vout,1) == 10000 )
|
||||||
obj.push_back(Pair("status","alive"));
|
obj.push_back(Pair("status","alive"));
|
||||||
@@ -558,7 +559,7 @@ void rogue_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gamet
|
|||||||
obj.push_back(Pair("batonvalue",ValueFromAmount(batonvalue)));
|
obj.push_back(Pair("batonvalue",ValueFromAmount(batonvalue)));
|
||||||
obj.push_back(Pair("batonht",(int64_t)batonht));
|
obj.push_back(Pair("batonht",(int64_t)batonht));
|
||||||
if ( playerdata.size() > 0 )
|
if ( playerdata.size() > 0 )
|
||||||
obj.push_back(Pair("player",rogue_playerobj(playerdata)));
|
obj.push_back(Pair("player",rogue_playerobj(playerdata,playertxid)));
|
||||||
} else fprintf(stderr,"findbaton err.%d\n",retval);
|
} else fprintf(stderr,"findbaton err.%d\n",retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -648,7 +649,7 @@ UniValue rogue_playerinfo(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
playertxid = juint256(jitem(params,0));
|
playertxid = juint256(jitem(params,0));
|
||||||
if ( rogue_playerdata(cp,origplayergame,pk,playerdata,playertxid) < 0 )
|
if ( rogue_playerdata(cp,origplayergame,pk,playerdata,playertxid) < 0 )
|
||||||
return(cclib_error(result,"invalid playerdata"));
|
return(cclib_error(result,"invalid playerdata"));
|
||||||
result.push_back(Pair("player",rogue_playerobj(playerdata)));
|
result.push_back(Pair("player",rogue_playerobj(playerdata,playertxid)));
|
||||||
} else return(cclib_error(result,"no playertxid"));
|
} else return(cclib_error(result,"no playertxid"));
|
||||||
return(result);
|
return(result);
|
||||||
} else return(cclib_error(result,"couldnt reparse params"));
|
} else return(cclib_error(result,"couldnt reparse params"));
|
||||||
@@ -711,7 +712,7 @@ UniValue rogue_keystrokes(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
// respawn to be prevented by including timestamps
|
// respawn to be prevented by including timestamps
|
||||||
int32_t nextheight = komodo_nextheight();
|
int32_t nextheight = komodo_nextheight();
|
||||||
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),nextheight);
|
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),nextheight);
|
||||||
UniValue result(UniValue::VOBJ); CPubKey roguepk,mypk; uint256 gametxid,batontxid; int64_t batonvalue,buyin; std::vector<uint8_t> keystrokes,playerdata; int32_t numplayers,regslot,numkeys,batonht,batonvout,n,elapsed,gameheight,maxplayers; CTransaction tx; CTxOut txout; char *keystrokestr,destaddr[64]; std::string rawtx; bits256 t; uint8_t mypriv[32];
|
UniValue result(UniValue::VOBJ); CPubKey roguepk,mypk; uint256 gametxid,playertxid,batontxid; int64_t batonvalue,buyin; std::vector<uint8_t> keystrokes,playerdata; int32_t numplayers,regslot,numkeys,batonht,batonvout,n,elapsed,gameheight,maxplayers; CTransaction tx; CTxOut txout; char *keystrokestr,destaddr[64]; std::string rawtx; bits256 t; uint8_t mypriv[32];
|
||||||
if ( txfee == 0 )
|
if ( txfee == 0 )
|
||||||
txfee = 10000;
|
txfee = 10000;
|
||||||
rogue_univalue(result,"keystrokes",-1,-1);
|
rogue_univalue(result,"keystrokes",-1,-1);
|
||||||
@@ -724,7 +725,7 @@ UniValue rogue_keystrokes(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
GetCCaddress1of2(cp,destaddr,roguepk,mypk);
|
GetCCaddress1of2(cp,destaddr,roguepk,mypk);
|
||||||
if ( rogue_isvalidgame(cp,gameheight,tx,buyin,maxplayers,gametxid) == 0 )
|
if ( rogue_isvalidgame(cp,gameheight,tx,buyin,maxplayers,gametxid) == 0 )
|
||||||
{
|
{
|
||||||
if ( rogue_findbaton(cp,0,numkeys,regslot,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,tx,maxplayers,destaddr,numplayers) == 0 )
|
if ( rogue_findbaton(cp,playertxid,0,numkeys,regslot,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,tx,maxplayers,destaddr,numplayers) == 0 )
|
||||||
{
|
{
|
||||||
if ( maxplayers == 1 || nextheight <= batonht+ROGUE_MAXKEYSTROKESGAP )
|
if ( maxplayers == 1 || nextheight <= batonht+ROGUE_MAXKEYSTROKESGAP )
|
||||||
{
|
{
|
||||||
@@ -755,7 +756,7 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
// vout0 -> 1% ingame gold
|
// vout0 -> 1% ingame gold
|
||||||
// get any playerdata, get all keystrokes, replay game and compare final state
|
// get any playerdata, get all keystrokes, replay game and compare final state
|
||||||
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight());
|
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight());
|
||||||
UniValue result(UniValue::VOBJ); std::string rawtx; CTransaction gametx; uint64_t seed,mult; int64_t buyin,batonvalue,inputsum,cashout,CCchange=0; int32_t i,gameheight,tmp,numplayers,regslot,n,num,numkeys,maxplayers,batonht,batonvout; char myrogueaddr[64],*keystrokes = 0; std::vector<uint8_t> playerdata,newdata; uint256 batontxid,gametxid; CPubKey mypk,roguepk; uint8_t player[10000],mypriv[32],funcid;
|
UniValue result(UniValue::VOBJ); std::string rawtx; CTransaction gametx; uint64_t seed,mult; int64_t buyin,batonvalue,inputsum,cashout,CCchange=0; int32_t i,gameheight,tmp,numplayers,regslot,n,num,numkeys,maxplayers,batonht,batonvout; char myrogueaddr[64],*keystrokes = 0; std::vector<uint8_t> playerdata,newdata; uint256 batontxid,playertxid,gametxid; CPubKey mypk,roguepk; uint8_t player[10000],mypriv[32],funcid;
|
||||||
if ( txfee == 0 )
|
if ( txfee == 0 )
|
||||||
txfee = 10000;
|
txfee = 10000;
|
||||||
mypk = pubkey2pk(Mypubkey());
|
mypk = pubkey2pk(Mypubkey());
|
||||||
@@ -784,7 +785,7 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
{
|
{
|
||||||
if ( maxplayers == 1 )
|
if ( maxplayers == 1 )
|
||||||
mult /= 2;
|
mult /= 2;
|
||||||
if ( rogue_findbaton(cp,&keystrokes,numkeys,regslot,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,myrogueaddr,numplayers) == 0 && keystrokes != 0 )
|
if ( rogue_findbaton(cp,playertxid,&keystrokes,numkeys,regslot,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,myrogueaddr,numplayers) == 0 && keystrokes != 0 )
|
||||||
{
|
{
|
||||||
UniValue obj; struct rogue_player P;
|
UniValue obj; struct rogue_player P;
|
||||||
seed = rogue_gamefields(obj,maxplayers,buyin,gametxid,myrogueaddr);
|
seed = rogue_gamefields(obj,maxplayers,buyin,gametxid,myrogueaddr);
|
||||||
@@ -926,7 +927,7 @@ UniValue rogue_players(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
|
|||||||
continue;
|
continue;
|
||||||
if ( rogue_playerdata(cp,gametxid,pk,playerdata,txid) == 0 && pk == mypk )
|
if ( rogue_playerdata(cp,gametxid,pk,playerdata,txid) == 0 && pk == mypk )
|
||||||
{
|
{
|
||||||
a.push_back(rogue_playerobj(playerdata));
|
a.push_back(rogue_playerobj(playerdata,txid));
|
||||||
//result.push_back(Pair("playerdata",rogue_playerobj(playerdata)));
|
//result.push_back(Pair("playerdata",rogue_playerobj(playerdata)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user