struct CCcontract_info *cp,

This commit is contained in:
jl777
2019-02-05 20:03:48 -11:00
parent 5e5f9d0054
commit dcfd8c5705

View File

@@ -225,7 +225,7 @@ int32_t rogue_isvalidgame(struct CCcontract_info *cp,CTransaction &tx,int64_t &b
UniValue rogue_playerobj(UniValue &obj,std::vector<uint8_t> playerdata) UniValue rogue_playerobj(UniValue &obj,std::vector<uint8_t> playerdata)
{ {
obj.push_back("raw",playerdata.GetHex().ToString()); obj.push_back("raw","<playerdata>");
// convert to scrolls, etc. // convert to scrolls, etc.
return(obj); return(obj);
} }
@@ -293,14 +293,14 @@ int32_t rogue_playerdataspend(CMutableTransaction &mtx,uint256 playertxid,uint25
} else return(-1); } else return(-1);
} }
int32_t rogue_findbaton(std::vector<uint8_t> &playerdata,uint256 &batontxid,int32_t &batonvout,int64_t &batonvalue,int32_t &batonht,uint256 gametxid,CTransaction gametx,int32_t maxplayers,CScript scriptPubKey) int32_t rogue_findbaton(struct CCcontract_info *cp,std::vector<uint8_t> &playerdata,uint256 &batontxid,int32_t &batonvout,int64_t &batonvalue,int32_t &batonht,uint256 gametxid,CTransaction gametx,int32_t maxplayers,CScript scriptPubKey)
{ {
int32_t i,numvouts,spentvini,matches = 0; uint256 spenttxid,hashBlock,txid,playertxid,origplayergame; CTransaction spenttx,matchtx,batontx; std::vector<uint8_t> checkdata; CBlockIndex *pindex; int32_t i,numvouts,spentvini,matches = 0; uint256 spenttxid,hashBlock,txid,playertxid,origplayergame; CTransaction spenttx,matchtx,batontx; std::vector<uint8_t> checkdata; CBlockIndex *pindex;
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 )
{ {
if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && tx.vout.size() > 0 ) if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 )
{ {
if ( spenttx.vout[0].scriptPubKey == scriptPubKey ) if ( spenttx.vout[0].scriptPubKey == scriptPubKey )
{ {
@@ -321,10 +321,10 @@ int32_t rogue_findbaton(std::vector<uint8_t> &playerdata,uint256 &batontxid,int3
while ( CCgettxout(txid,0,1) > 0 ) while ( CCgettxout(txid,0,1) > 0 )
{ {
spenttxid = zeroid; spenttxid = zeroid;
spentvinit = -1; spentvini = -1;
if ( (spentvini= myIsutxo_spent(spenttxid,txid,0)) >= 0 ) if ( (spentvini= myIsutxo_spent(spenttxid,txid,0)) >= 0 )
txid = spenttxid; txid = spenttxid;
else if ( myIsutxo_spentinmempool(spenttxid,spentvin,txid,0) == 0 || spenttxid == zeroid ) else if ( myIsutxo_spentinmempool(spenttxid,spentvini,txid,0) == 0 || spenttxid == zeroid )
{ {
fprintf(stderr,"mempool tracking error %s/v0\n",txid.ToString().c_str()); fprintf(stderr,"mempool tracking error %s/v0\n",txid.ToString().c_str());
return(-2); return(-2);
@@ -342,7 +342,7 @@ int32_t rogue_findbaton(std::vector<uint8_t> &playerdata,uint256 &batontxid,int3
batonht = komodo_nextheight(); batonht = komodo_nextheight();
else if ( (pindex= komodo_blockindex(hashBlock)) == 0 ) else if ( (pindex= komodo_blockindex(hashBlock)) == 0 )
return(-4); return(-4);
else batonht = pindex->nHeight; else batonht = pindex->GetHeight();
return(0); return(0);
} }
} }
@@ -351,12 +351,12 @@ int32_t rogue_findbaton(std::vector<uint8_t> &playerdata,uint256 &batontxid,int3
return(-1); return(-1);
} }
void rogue_gameplayerinfo(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; int32_t batonvout,batonht; int64_t batonvalue; std::vector<uint8_t> playerdata; uint256 batontxid; int32_t batonvout,batonht; int64_t batonvalue; std::vector<uint8_t> playerdata;
obj.push_back(Pair("slot",(int64_t)vout-2)); obj.push_back(Pair("slot",(int64_t)vout-2));
if ( rogue_findbaton(playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,gametx.vout[vout].scriptPubKey) == 0 ) if ( rogue_findbaton(cp,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,gametx.vout[vout].scriptPubKey) == 0 )
{ {
obj.push_back(Pair("baton",batontxid.ToString())); obj.push_back(Pair("baton",batontxid.ToString()));
obj.push_back(Pair("batonvout",(int64_t)batonvout)); obj.push_back(Pair("batonvout",(int64_t)batonvout));
@@ -364,7 +364,7 @@ void rogue_gameplayerinfo(UniValue &obj,uint256 gametxid,CTransaction gametx,int
obj.push_back(Pair("batonht",(int64_t)batonht)); obj.push_back(Pair("batonht",(int64_t)batonht));
if ( playerdata.size() > 0 ) if ( playerdata.size() > 0 )
{ {
UniValue pobj(UniValue:VOBJ); UniValue pobj(UniValue::VOBJ);
obj.push_back(Pair("rogue",rogue_playerobj(pobj,playerdata))); obj.push_back(Pair("rogue",rogue_playerobj(pobj,playerdata)));
} }
} }
@@ -373,7 +373,7 @@ void rogue_gameplayerinfo(UniValue &obj,uint256 gametxid,CTransaction gametx,int
int64_t rogue_registrationbaton(CMutableTransaction &mtx,uint256 gametxid,CTransaction gametx,int32_t maxplayers) int64_t rogue_registrationbaton(CMutableTransaction &mtx,uint256 gametxid,CTransaction gametx,int32_t maxplayers)
{ {
int32_t vout,j,r; int64_t nValue; int32_t vout,j,r; int64_t nValue;
if ( tx.vout.size() > maxplayers+2 ) if ( gametx.vout.size() > maxplayers+2 )
{ {
r = rand() % maxplayers; r = rand() % maxplayers;
for (j=0; j<maxplayers; j++) for (j=0; j<maxplayers; j++)
@@ -451,7 +451,7 @@ UniValue rogue_playerinfo(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
{ {
if ( n > 0 ) if ( n > 0 )
{ {
UniValue pobj(UniValue:VOBJ); UniValue pobj(UniValue::VOBJ);
playertxid = jbits256(jitem(params,0),0); playertxid = jbits256(jitem(params,0),0);
if ( rogue_playerdata(cp,origplayergame,playerdata,playertxid) < 0 ) if ( rogue_playerdata(cp,origplayergame,playerdata,playertxid) < 0 )
return(cclib_error(result,"invalid playerdata")); return(cclib_error(result,"invalid playerdata"));
@@ -469,7 +469,7 @@ UniValue rogue_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
// vin3+ -> buyin // vin3+ -> buyin
// vout0 -> keystrokes/completion baton // vout0 -> keystrokes/completion baton
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight());
UniValue result(UniValue::VOBJ); uint256 gametxid,playertxid,hashBlock; int32_t maxplayers,n,numvouts; int64_t inputsum,CCchange=0; CPubKey pk,mypk,roguepk; CTransaction tx; std::vector<uint8_t> playerdata; UniValue result(UniValue::VOBJ); uint256 gametxid,playertxid,hashBlock; int32_t maxplayers,n,numvouts; int64_t inputsum,buyin,CCchange=0; CPubKey pk,mypk,roguepk; CTransaction tx; std::vector<uint8_t> playerdata;
if ( txfee == 0 ) if ( txfee == 0 )
txfee = 10000; txfee = 10000;
mypk = pubkey2pk(Mypubkey()); mypk = pubkey2pk(Mypubkey());
@@ -526,7 +526,7 @@ UniValue rogue_keystrokes(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
txout = MakeCC1of2vout(cp->evalcode,0,roguepk,mypk); txout = MakeCC1of2vout(cp->evalcode,0,roguepk,mypk);
if ( rogue_isvalidgame(cp,tx,buyin,maxplayers,gametxid) == 0 ) if ( rogue_isvalidgame(cp,tx,buyin,maxplayers,gametxid) == 0 )
{ {
if ( rogue_findbaton(playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,tx,maxplayers,txout.scriptPubKey) == 0 ) if ( rogue_findbaton(cp,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,tx,maxplayers,txout.scriptPubKey) == 0 )
{ {
if ( maxplayers == 1 || nextheight <= batonht+ROGUE_MAXKEYSTROKESGAP ) if ( maxplayers == 1 || nextheight <= batonht+ROGUE_MAXKEYSTROKESGAP )
{ {
@@ -595,7 +595,7 @@ UniValue rogue_gameinfo(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
if ( CCgettxout(txid,i+2,1) == 0 ) if ( CCgettxout(txid,i+2,1) == 0 )
{ {
UniValue obj(UniValue::VOBJ); UniValue obj(UniValue::VOBJ);
rogue_gameplayerinfo(obj,txid,tx,i+2,maxplayers); rogue_gameplayerinfo(cp,obj,txid,tx,i+2,maxplayers);
a.push_back(obj); a.push_back(obj);
} }
} }