struct CCcontract_info *cp,
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user