Remove second vout for new game

This commit is contained in:
jl777
2019-02-09 23:26:31 -11:00
parent de6477bd52
commit 071e83e28b

View File

@@ -72,9 +72,8 @@
Transaction details Transaction details
creategame creategame
vout0 -> txfee highlander vout TCBOO creation vout0 -> txfee highlander vout TCBOO creation
vout1 -> txfee highlander vout TCBOO playerdata used (deprecated) vout1 to vout.maxplayers+1 -> 1of2 registration ROGUE_REGISTRATIONSIZE batons
vout2 to vout.maxplayers+2 -> 1of2 registration ROGUE_REGISTRATIONSIZE batons vout2+maxplayers to vout.2*maxplayers+1 -> 1of2 registration txfee batons for game completion
vout2+maxplayers to vout.2*maxplayers+2 -> 1of2 registration txfee batons for game completion
register register
vin0 -> ROGUE_REGISTRATIONSIZE 1of2 registration baton from creategame vin0 -> ROGUE_REGISTRATIONSIZE 1of2 registration baton from creategame
@@ -268,7 +267,7 @@ int32_t rogue_iamregistered(int32_t maxplayers,uint256 gametxid,CTransaction tx,
for (i=0; i<maxplayers; i++) for (i=0; i<maxplayers; i++)
{ {
destaddr[0] = 0; destaddr[0] = 0;
vout = i+2; vout = i+1;
if ( myIsutxo_spent(spenttxid,gametxid,vout) >= 0 ) if ( myIsutxo_spent(spenttxid,gametxid,vout) >= 0 )
{ {
if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 ) if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 )
@@ -289,10 +288,10 @@ int32_t rogue_playersalive(int32_t &numplayers,uint256 gametxid,int32_t maxplaye
numplayers = 0; numplayers = 0;
for (i=0; i<maxplayers; i++) for (i=0; i<maxplayers; i++)
{ {
if ( CCgettxout(gametxid,2+i,1) < 0 ) if ( CCgettxout(gametxid,1+i,1) < 0 )
{ {
numplayers++; numplayers++;
if (CCgettxout(gametxid,2+maxplayers+i,1) == txfee ) if (CCgettxout(gametxid,1+maxplayers+i,1) == txfee )
alive++; alive++;
} }
} }
@@ -342,13 +341,13 @@ int32_t rogue_isvalidgame(struct CCcontract_info *cp,int32_t &gameheight,CTransa
{ {
if ( rogue_newgameopreturndecode(buyin,maxplayers,tx.vout[numvouts-1].scriptPubKey) == 'G' ) if ( rogue_newgameopreturndecode(buyin,maxplayers,tx.vout[numvouts-1].scriptPubKey) == 'G' )
{ {
if ( numvouts > maxplayers+2 ) if ( numvouts > maxplayers+1 )
{ {
for (i=0; i<maxplayers; i++) for (i=0; i<maxplayers; i++)
{ {
if ( tx.vout[i+2].nValue != ROGUE_REGISTRATIONSIZE ) if ( tx.vout[i+1].nValue != ROGUE_REGISTRATIONSIZE )
break; break;
if ( tx.vout[maxplayers+i+2].nValue != txfee ) if ( tx.vout[maxplayers+i+1].nValue != txfee )
break; break;
} }
if ( i == maxplayers ) if ( i == maxplayers )
@@ -456,7 +455,7 @@ int32_t rogue_findbaton(struct CCcontract_info *cp,uint256 &playertxid,char **ke
playertxid = zeroid; 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+1) >= 0 )
{ {
if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 ) if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 )
{ {
@@ -467,13 +466,13 @@ int32_t rogue_findbaton(struct CCcontract_info *cp,uint256 &playertxid,char **ke
matches++; matches++;
regslot = i; regslot = i;
matchtx = spenttx; matchtx = spenttx;
} //else fprintf(stderr,"%d+2 doesnt match %s vs %s\n",i,ccaddr,destaddr); } //else fprintf(stderr,"%d+1 doesnt match %s vs %s\n",i,ccaddr,destaddr);
} //else fprintf(stderr,"%d+2 couldnt find spenttx.%s\n",i,spenttxid.GetHex().c_str()); } //else fprintf(stderr,"%d+1 couldnt find spenttx.%s\n",i,spenttxid.GetHex().c_str());
} //else fprintf(stderr,"%d+2 unspent\n",i); } //else fprintf(stderr,"%d+1 unspent\n",i);
} }
if ( matches == 1 ) if ( matches == 1 )
{ {
if ( myIsutxo_spent(spenttxid,gametxid,maxplayers+i+2) < 0 ) if ( myIsutxo_spent(spenttxid,gametxid,maxplayers+i+1) < 0 )
{ {
numvouts = matchtx.vout.size(); numvouts = matchtx.vout.size();
//fprintf(stderr,"matches.%d numvouts.%d\n",matches,numvouts); //fprintf(stderr,"matches.%d numvouts.%d\n",matches,numvouts);
@@ -547,7 +546,7 @@ void rogue_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gamet
if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 ) if ( GetTransaction(spenttxid,spenttx,hashBlock,false) != 0 && spenttx.vout.size() > 0 )
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-1));
if ( (retval= rogue_findbaton(cp,playertxid,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 )
@@ -566,12 +565,12 @@ void rogue_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gamet
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 ( gametx.vout.size() > maxplayers+2 ) if ( gametx.vout.size() > maxplayers+1 )
{ {
r = rand() % maxplayers; r = rand() % maxplayers;
for (j=0; j<maxplayers; j++) for (j=0; j<maxplayers; j++)
{ {
vout = ((r + j) % maxplayers) + 2; vout = ((r + j) % maxplayers) + 1;
if ( CCgettxout(gametxid,vout,1) == ROGUE_REGISTRATIONSIZE ) if ( CCgettxout(gametxid,vout,1) == ROGUE_REGISTRATIONSIZE )
{ {
mtx.vin.push_back(CTxIn(gametxid,vout,CScript())); mtx.vin.push_back(CTxIn(gametxid,vout,CScript()));
@@ -623,7 +622,6 @@ UniValue rogue_newgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
if ( (inputsum= AddCClibInputs(cp,mtx,roguepk,required,16,cp->unspendableCCaddr)) >= required ) if ( (inputsum= AddCClibInputs(cp,mtx,roguepk,required,16,cp->unspendableCCaddr)) >= required )
{ {
mtx.vout.push_back(MakeCC1vout(cp->evalcode,txfee,roguepk)); // for highlander TCBOO creation mtx.vout.push_back(MakeCC1vout(cp->evalcode,txfee,roguepk)); // for highlander TCBOO creation
mtx.vout.push_back(MakeCC1vout(cp->evalcode,txfee,roguepk)); // for highlander TCBOO used
for (i=0; i<maxplayers; i++) for (i=0; i<maxplayers; i++)
mtx.vout.push_back(MakeCC1of2vout(cp->evalcode,ROGUE_REGISTRATIONSIZE,roguepk,roguepk)); mtx.vout.push_back(MakeCC1of2vout(cp->evalcode,ROGUE_REGISTRATIONSIZE,roguepk,roguepk));
for (i=0; i<maxplayers; i++) for (i=0; i<maxplayers; i++)
@@ -800,9 +798,8 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
if ( keystrokes != 0 ) if ( keystrokes != 0 )
free(keystrokes); free(keystrokes);
mtx.vin.push_back(CTxIn(batontxid,batonvout,CScript())); mtx.vin.push_back(CTxIn(batontxid,batonvout,CScript()));
mtx.vin.push_back(CTxIn(gametxid,2+maxplayers+regslot,CScript())); mtx.vin.push_back(CTxIn(gametxid,1+maxplayers+regslot,CScript()));
mtx.vout.push_back(MakeCC1vout(cp->evalcode,1,mypk)); mtx.vout.push_back(MakeCC1vout(cp->evalcode,1,mypk));
mtx.vout.push_back(MakeCC1vout(cp->evalcode,txfee,mypk));
if ( num > 0 ) if ( num > 0 )
{ {
newdata.resize(num); newdata.resize(num);
@@ -870,10 +867,10 @@ UniValue rogue_gameinfo(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
rogue_gamefields(result,maxplayers,buyin,txid,myrogueaddr); rogue_gamefields(result,maxplayers,buyin,txid,myrogueaddr);
for (i=0; i<maxplayers; i++) for (i=0; i<maxplayers; i++)
{ {
if ( CCgettxout(txid,i+2,1) < 0 ) if ( CCgettxout(txid,i+1,1) < 0 )
{ {
UniValue obj(UniValue::VOBJ); UniValue obj(UniValue::VOBJ);
rogue_gameplayerinfo(cp,obj,txid,tx,i+2,maxplayers); rogue_gameplayerinfo(cp,obj,txid,tx,i+1,maxplayers);
a.push_back(obj); a.push_back(obj);
} }
} }