From 448ecdbdd1f82d12b8f60ba096d648ab8227fb1b Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 08:51:11 -1100 Subject: [PATCH 01/11] +print --- src/komodo_bitcoind.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index dbea7ba12..2387048cd 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -2012,10 +2012,10 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) { script = (uint8_t *)&pblock->vtx[0].vout[1].scriptPubKey[0]; scriptlen = (int32_t)pblock->vtx[0].vout[1].scriptPubKey.size(); - //int32_t i; - //for (i=0; ivtx[0].vout[1].nValue/COIN); + int32_t i; + for (i=0; ivtx[0].vout[1].nValue/COIN); if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) { if ( ASSETCHAINS_SCRIPTPUB.size()/2 == scriptlen && scriptlen < sizeof(scripthex) ) @@ -2031,7 +2031,13 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) matched = 25; if ( matched == 0 ) { - fprintf(stderr," payment to wrong pubkey scriptlen.%d, scriptpub[%d] checktoshis.%llu\n",scriptlen,(int32_t)ASSETCHAINS_SCRIPTPUB.size()/2,(long long)checktoshis); + if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) + { + int32_t i; + for (i=0; i Date: Fri, 1 Mar 2019 08:57:28 -1100 Subject: [PATCH 02/11] -print --- src/komodo_bitcoind.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 2387048cd..b846ba9d1 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -2012,10 +2012,13 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) { script = (uint8_t *)&pblock->vtx[0].vout[1].scriptPubKey[0]; scriptlen = (int32_t)pblock->vtx[0].vout[1].scriptPubKey.size(); - int32_t i; - for (i=0; ivtx[0].vout[1].nValue/COIN); + if ( 0 ) + { + int32_t i; + for (i=0; ivtx[0].vout[1].nValue/COIN); + } if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) { if ( ASSETCHAINS_SCRIPTPUB.size()/2 == scriptlen && scriptlen < sizeof(scripthex) ) @@ -2031,7 +2034,7 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) matched = 25; if ( matched == 0 ) { - if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) + if ( 0 && ASSETCHAINS_SCRIPTPUB.size() > 1 ) { int32_t i; for (i=0; i Date: Fri, 1 Mar 2019 19:31:48 -1100 Subject: [PATCH 03/11] Destpubtxid --- src/cc/dilithium.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dilithium.c b/src/cc/dilithium.c index b01a3bf1d..4841eb981 100644 --- a/src/cc/dilithium.c +++ b/src/cc/dilithium.c @@ -3276,7 +3276,7 @@ UniValue dilithium_spend(uint64_t txfee,struct CCcontract_info *cp,cJSON *params } else return(cclib_error(result,"need to have exactly 2 params sendtxid, scriptPubKey")); } -int64_t dilithium_inputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPubKey pk,uint256 pubtxid,int64_t total,int32_t maxinputs,char *cmpaddr) +int64_t dilithium_inputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPubKey pk,uint256 destpubtxid,int64_t total,int32_t maxinputs,char *cmpaddr) { char coinaddr[64]; int64_t threshold,nValue,price,totalinputs = 0; uint256 checktxid,txid,hashBlock; std::vector origpubkey,tmpsig; CTransaction vintx; int32_t vout,numvouts,n = 0; std::vector voutpubtxids; std::vector > unspentOutputs; @@ -3294,7 +3294,7 @@ int64_t dilithium_inputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPu { if ( (nValue= IsCClibvout(cp,vintx,vout,cmpaddr)) > DILITHIUM_TXFEE && myIsutxo_spentinmempool(ignoretxid,ignorevin,txid,vout) == 0 ) { - if ( (dilithium_Qsendopretdecode(checktxid,tmpsig,voutpubtxids,vintx.vout[numvouts-1].scriptPubKey) == 'Q' || dilithium_sendopretdecode(checktxid,vintx.vout[numvouts-1].scriptPubKey) == 'x') && desttxid == checktxid ) + if ( (dilithium_Qsendopretdecode(checktxid,tmpsig,voutpubtxids,vintx.vout[numvouts-1].scriptPubKey) == 'Q' || dilithium_sendopretdecode(checktxid,vintx.vout[numvouts-1].scriptPubKey) == 'x') && destpubtxid == checktxid ) { if ( total != 0 && maxinputs != 0 ) mtx.vin.push_back(CTxIn(txid,vout,CScript())); From 92510adcf1b0d5a9effe37a1556b4b4dd22a479f Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 20:51:03 -1100 Subject: [PATCH 04/11] Local files --- src/cc/rogue/rogue.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index 6cc51e04b..d0827ddbe 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -118,22 +118,21 @@ int32_t roguefname(char *fname,uint64_t seed,int32_t counter) return(0); } -#ifdef test -int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag) +int32_t flushkeystrokes_local(struct rogue_state *rs,int32_t waitflag) { char fname[1024]; FILE *fp; int32_t i,retflag = -1; + rs->counter++; roguefname(fname,rs->seed,rs->counter); if ( (fp= fopen(fname,"wb")) != 0 ) { if ( fwrite(rs->buffered,1,rs->num,fp) == rs->num ) { - rs->counter++; rs->num = 0; retflag = 0; fclose(fp); if ( (fp= fopen("savefile","wb")) != 0 ) { - save_file(rs,fp,0); + //save_file(rs,fp,0); if ( 0 && (fp= fopen("savefile","rb")) != 0 ) { for (i=0; i<0x150; i++) @@ -150,7 +149,7 @@ int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag) } else fprintf(stderr,"error creating (%s)\n",fname); return(retflag); } -#else +#endif #ifdef BUILD_ROGUE // stubs for inside daemon @@ -174,9 +173,10 @@ int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag) //rs->keytxid = rogue_progress(rs,waitflag,rs->seed,&rs->buffered[rs->lastnum],rs->num - rs->lastnum); //rs->lastnum = rs->num; rogue_progress(rs,waitflag,rs->seed,rs->buffered,rs->num); + flushkeystrokes_local(rs,waitflag); memset(rs->buffered,0,sizeof(rs->buffered)); - rs->num = 0; - rs->counter++; + //rs->num = 0; + //rs->counter++; } return(0); } From 3d8d0a3e21ef9fa87f9981f832402cb176559401 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 20:52:46 -1100 Subject: [PATCH 05/11] Endif --- src/cc/rogue/rogue.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index d0827ddbe..d2eeb826d 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -120,6 +120,7 @@ int32_t roguefname(char *fname,uint64_t seed,int32_t counter) int32_t flushkeystrokes_local(struct rogue_state *rs,int32_t waitflag) { +#ifndef BUILD_ROGUE char fname[1024]; FILE *fp; int32_t i,retflag = -1; rs->counter++; roguefname(fname,rs->seed,rs->counter); @@ -148,8 +149,10 @@ int32_t flushkeystrokes_local(struct rogue_state *rs,int32_t waitflag) } else fprintf(stderr,"error writing (%s)\n",fname); } else fprintf(stderr,"error creating (%s)\n",fname); return(retflag); -} +#else + return(0); #endif +} #ifdef BUILD_ROGUE // stubs for inside daemon From 42f52b2ffa5a9e867cc39973bf97df5b1a52e08f Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 20:53:24 -1100 Subject: [PATCH 06/11] -endif --- src/cc/rogue/rogue.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index d2eeb826d..90045f083 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -244,7 +244,6 @@ int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t nu free(rs); return(n); } -#endif long get_filesize(FILE *fp) { From 07b3f1ab548152199ee82b79ff3be81f306a31b6 Mon Sep 17 00:00:00 2001 From: "Anton \"TonyL\" Lysakov" Date: Sat, 2 Mar 2019 15:40:35 +0700 Subject: [PATCH 07/11] ensuring that rogue update --- src/cc/makerogue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc/makerogue b/src/cc/makerogue index 51caef6e2..f1f1452c0 100755 --- a/src/cc/makerogue +++ b/src/cc/makerogue @@ -1,5 +1,6 @@ #!/bin/sh cd rogue; +make clean; if [ "$HOST" = "x86_64-w64-mingw32" ]; then echo building rogue.exe... From 1db23db8b7392ead72cc00ce23a32085e0a4394d Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 22:26:25 -1100 Subject: [PATCH 08/11] Enforce player data at height 50000 --- src/cc/rogue_rpc.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index 00fe4c842..eee5bc9e9 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -1447,9 +1447,14 @@ UniValue rogue_setname(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) bool rogue_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const CTransaction tx) { - CScript scriptPubKey; std::vector vopret; uint8_t *script,e,f,funcid,tokentx=0; int32_t i,maxplayers,decoded=0,regslot,ind,err,dispflag,gameheight,score,numvouts; CTransaction vintx,gametx; CPubKey pk; uint256 hashBlock,gametxid,txid,tokenid,batontxid,playertxid,ptxid; int64_t buyin,cashout; std::vector playerdata,keystrokes; std::string symbol,pname; - if ( strcmp(ASSETCHAINS_SYMBOL,"ROGUE") == 0 && height < 21274 ) - return(true); + CScript scriptPubKey; std::vector vopret; uint8_t *script,e,f,funcid,tokentx=0; int32_t i,maxplayers,enabled = 0,decoded=0,regslot,ind,err,dispflag,gameheight,score,numvouts; CTransaction vintx,gametx; CPubKey pk; uint256 hashBlock,gametxid,txid,tokenid,batontxid,playertxid,ptxid; int64_t buyin,cashout; std::vector playerdata,keystrokes; std::string symbol,pname; + if ( strcmp(ASSETCHAINS_SYMBOL,"ROGUE") == 0 ) + { + if (height < 21274 ) + return(true); + else if ( height > 50000 ) + enabled = 1; + } else enabled = 1; if ( (numvouts= tx.vout.size()) > 1 ) { txid = tx.GetHash(); @@ -1549,6 +1554,8 @@ bool rogue_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const C strcpy(laststr,cashstr); fprintf(stderr,"%s\n",cashstr); } + if ( enabled != 0 && tx.vout[2].nValue != cashout ) + return eval->Invalid("mismatched cashout amount"); } } if ( funcid == 'Q' ) From 72c2649727d90db9c0dba491a7ec4500cd1ca921 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 22:43:16 -1100 Subject: [PATCH 09/11] Enforce 63 bit nValue limits --- src/main.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 01e19628c..c88f1520a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1808,7 +1808,9 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa CAmount nValueOut = tx.GetValueOut(); CAmount nFees = nValueIn-nValueOut; double dPriority = view.GetPriority(tx, chainActive.Height()); - + if ( KOMODO_BIT63SET(nValueOut) != 0 ) + return state.DoS(100, error("AcceptToMemoryPool: GetValueOut too big"),REJECT_INVALID,"tx valueout is too big"); + // Keep track of transactions that spend a coinbase, which we re-scan // during reorgs to ensure COINBASE_MATURITY is still met. bool fSpendsCoinbase = false; @@ -3371,6 +3373,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin int64_t nTimeStart = GetTimeMicros(); CAmount nFees = 0; int nInputs = 0; + uint64_t voutsum = 0,prevsum=0,valueout; int64_t interest,sum = 0; unsigned int nSigOps = 0; CDiskTxPos pos(pindex->GetBlockPos(), GetSizeOfCompactSize(block.vtx.size())); @@ -3490,9 +3493,18 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin txdata.emplace_back(tx); + valueout = tx.GetValueOut(); + if ( KOMODO_BIT63SET(valueout) != 0 ) + return state.DoS(100, error("ConnectBlock(): GetValueOut too big"),REJECT_INVALID,"tx valueout is too big"); + prevsum = voutsum; + voutsum += valueout; + if ( KOMODO_BIT63SET(voutsum) != 0 ) + return state.DoS(100, error("ConnectBlock(): voutsum too big"),REJECT_INVALID,"tx valueout is too big"); + else if ( voutsum < prevsum ) + return state.DoS(100, error("ConnectBlock(): voutsum less after adding valueout"),REJECT_INVALID,"tx valueout is too big"); if (!tx.IsCoinBase()) { - nFees += view.GetValueIn(chainActive.LastTip()->GetHeight(),&interest,tx,chainActive.LastTip()->nTime) - tx.GetValueOut(); + nFees += view.GetValueIn(chainActive.LastTip()->GetHeight(),&interest,tx,chainActive.LastTip()->nTime) - valueout; sum += interest; std::vector vChecks; From c3fcff8b3b9c31c03f11803a17d626cba1b33b67 Mon Sep 17 00:00:00 2001 From: Alrighttt <36680730+Alrighttt@users.noreply.github.com> Date: Sat, 2 Mar 2019 10:57:05 +0100 Subject: [PATCH 10/11] add libboost-dev to README as dependency --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f112982d..d0bc3cf52 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Komodo is based on Zcash and has been extended by our innovative consensus algor ```shell #The following packages are needed: -sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python python-zmq zlib1g-dev wget libcurl4-gnutls-dev bsdmainutils automake curl +sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python python-zmq zlib1g-dev wget libcurl4-gnutls-dev bsdmainutils automake curl libboost-dev ``` ### Build Komodo From a5475a30dea8ae59b8b91465b2a9e130ccfdad58 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 1 Mar 2019 23:18:52 -1100 Subject: [PATCH 11/11] Change amulet level to 26 --- src/cc/rogue_rpc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index eee5bc9e9..93eb22dc8 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -1084,8 +1084,8 @@ int32_t rogue_playerdata_validate(int64_t *cashoutp,uint256 &playertxid,struct C if ( P.amulet != 0 ) mult *= 5; dungeonlevel = P.dungeonlevel; - if ( P.amulet != 0 && dungeonlevel < 21 ) - dungeonlevel = 21; + if ( P.amulet != 0 && dungeonlevel < 26 ) + dungeonlevel = 26; *cashoutp = (uint64_t)P.gold * P.gold * mult * dungeonlevel; if ( newdata == playerdata ) {