diff --git a/src/cc/gamescc.cpp b/src/cc/gamescc.cpp index ae3f0cd6f..95caa0f9e 100644 --- a/src/cc/gamescc.cpp +++ b/src/cc/gamescc.cpp @@ -248,22 +248,32 @@ int32_t games_payload(CPubKey pk,uint32_t timestamp,std::vector payload UniValue games_events(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - static uint256 lastgametxid; - UniValue result(UniValue::VOBJ); std::vector sig,payload,vopret; int32_t len,i,n; uint32_t x; CPubKey mypk; char str[67]; uint32_t timestamp = 0; - if ( params != 0 && (n= cJSON_GetArraySize(params)) == 1 ) + static uint256 lastgametxid; static uint32_t numevents; + UniValue result(UniValue::VOBJ); std::vector sig,payload,vopret; int32_t len,i,n; uint32_t x; CPubKey mypk; char str[67]; uint32_t eventid,timestamp = 0; uint256 gametxid; + if ( params != 0 && (n= cJSON_GetArraySize(params)) >= 1 && n <= 3 ) { if ( payments_parsehexdata(payload,jitem(params,0),0) == 0 ) { - if ( Gametxid != lastgametxid ) + if ( n >= 2 ) + gametxid = juint256(jitem(params,1),0); + else gametxid = zeroid; + if ( gametxid != lastgametxid ) { - lastgametxid = Gametxid; - numevents = 0; + lastgametxid = gametxid; + numevents = 1; + eventid = 0; } + if ( n == 3 ) + { + eventid = juint(jitem(params,2),0); + if ( numevents <= eventid ) + numevents = eventid+1; + } else eventid = numevents++; len = payload.size(); payload.resize(len + 4 + 32); for (i=0; i<32; i++) payload[len++] = ((uint8_t *)&Gametxid)[i]; - x = numevents++; + x = eventid; payload[len++] = x, x >>= 8; payload[len++] = x, x >>= 8; payload[len++] = x, x >>= 8; @@ -274,6 +284,9 @@ UniValue games_events(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) GetOpReturnData(games_eventopret(timestamp,mypk,sig,payload),vopret); games_payload(mypk,timestamp,payload); komodo_sendmessage(4,8,"events",vopret); + result.push_back(Pair("gametxid",gametxid.GetHex())); + result.push_back(Pair("eventid",(int64_t)eventid)); + result.push_back(Pair("timestamp",(int64_t)timestamp)); result.push_back(Pair("result","success")); result.push_back(Pair("pubkey33",pubkey33_str(str,(uint8_t *)&mypk))); } diff --git a/src/cc/gamescc.h b/src/cc/gamescc.h index 4743bd0b7..c1fc63b48 100644 --- a/src/cc/gamescc.h +++ b/src/cc/gamescc.h @@ -23,7 +23,7 @@ std::string MYCCLIBNAME = (char *)"gamescc"; { (char *)MYCCNAME, (char *)"rngnext", (char *)"seed", 1, 1, ' ', EVAL_GAMES }, \ { (char *)MYCCNAME, (char *)"create", (char *)"game,minplayers,maxplayers,buyin,numblocks", 5, 5, ' ', EVAL_GAMES }, \ { (char *)MYCCNAME, (char *)"info", (char *)"txid", 1, 1, ' ', EVAL_GAMES }, \ - { (char *)MYCCNAME, (char *)"events", (char *)"hex", 1, 1, ' ', EVAL_GAMES }, \ + { (char *)MYCCNAME, (char *)"events", (char *)"eventshex [gametxid [eventid]]", 1, 3, ' ', EVAL_GAMES }, \ { (char *)MYCCNAME, (char *)"register", (char *)"txid", 1, 1, ' ', EVAL_GAMES }, bool games_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const CTransaction tx);