diff --git a/src/komodo.h b/src/komodo.h index 30fca14a8..e82c4b429 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -501,19 +501,26 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) numvouts = block.vtx[i].vout.size(); notaryid = -1; voutmask = specialtx = notarizedheight = isratification = notarized = 0; - signedmask = 1; + signedmask = (height < 91400) ? 1 : 0; numvins = block.vtx[i].vin.size(); for (j=0; j 0 ) { if ( (k= komodo_notarycmp(scriptPubKey,scriptlen,pubkeys,numnotaries,rmd160)) >= 0 ) signedmask |= (1LL << k); - } + else if ( numvins >= 17 ) + { + int32_t k; + for (k=0; k= KOMODO_MINRATIFY) || numvalid > (numnotaries/3)) ) { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); @@ -538,10 +545,14 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } } + printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d notarized.%d special.%d isratification.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts,notarized,specialtx,isratification); if ( notarized != 0 && (notarizedheight != 0 || specialtx != 0) ) { - //printf("%s NOTARY SIGNED.%llx numvins.%d ht.%d txi.%d notaryht.%d specialtx.%d\n",ASSETCHAINS_SYMBOL,(long long)signedmask,numvins,height,i,notarizedheight,specialtx); - //printf("ht.%d specialtx.%d isratification.%d numvouts.%d signed.%llx numnotaries.%d\n",height,specialtx,isratification,numvouts,(long long)signedmask,numnotaries); + if ( isratification != 0 ) + { + printf("%s NOTARY SIGNED.%llx numvins.%d ht.%d txi.%d notaryht.%d specialtx.%d\n",ASSETCHAINS_SYMBOL,(long long)signedmask,numvins,height,i,notarizedheight,specialtx); + printf("ht.%d specialtx.%d isratification.%d numvouts.%d signed.%llx numnotaries.%d\n",height,specialtx,isratification,numvouts,(long long)signedmask,numnotaries); + } if ( specialtx != 0 && isratification != 0 && numvouts > 2 ) { numvalid = 0; diff --git a/src/main.cpp b/src/main.cpp index e2da7de1b..3f7413799 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2555,6 +2555,7 @@ static int64_t nTimePostConnect = 0; * corresponding to pindexNew, to bypass loading it again from disk. */ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *pblock) { + assert(pindexNew->pprev == chainActive.Tip()); mempool.check(pcoinsTip); // Read block from disk. @@ -2703,7 +2704,21 @@ static bool ActivateBestChainStep(CValidationState &state, CBlockIndex *pindexMo if (!DisconnectTip(state)) return false; } - +if ( 0 ) +{ + static int32_t didinit; + if ( didinit++ == 0 ) + { + while (chainActive.Tip()->nHeight > 91418 ) + { + fprintf(stderr,"rewind ht.%d\n",chainActive.Tip()->nHeight); + if ( !DisconnectTip(state) ) + return false; + } + pindexOldTip = chainActive.Tip(); + pindexFork = chainActive.FindFork(pindexMostWork); + } +} // Build list of new blocks to connect. std::vector vpindexToConnect; bool fContinue = true; diff --git a/src/miner.cpp b/src/miner.cpp index 3f4a8975a..ffa9e43c2 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -661,7 +661,7 @@ void static BitcoinMiner(CWallet *pwallet) int32_t nseconds = Mining_start+ROUNDROBIN_DELAY-time(NULL); if ( nseconds > 0 ) sleep(nseconds); - MilliSleep((rand() % 3700) + 1); + MilliSleep((rand() % 700) + 1); } KOMODO_CHOSEN_ONE = 1; // Found a solution diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 70644aad7..7caedc3fb 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -677,29 +677,6 @@ Value gettxout(const Array& params, bool fHelp) return ret; } -int32_t gettxout_scriptPubKey(uint8_t *scriptPubKey,int32_t maxsize,uint256 txid,int32_t n) -{ - int32_t i,m; uint8_t *ptr; - LOCK(cs_main); - CCoins coins; - if ( 1 ) - { - LOCK(mempool.cs); - CCoinsViewMemPool view(pcoinsTip,mempool); - if ( view.GetCoins(txid,coins) == 0 ) - return(-1); - mempool.pruneSpent(txid, coins); // TODO: this should be done by the CCoinsViewMemPool - } else if ( pcoinsTip->GetCoins(txid,coins) == 0 ) - return(-1); - if ( n < 0 || (unsigned int)n >= coins.vout.size() || coins.vout[n].IsNull() ) - return(-1); - ptr = (uint8_t *)coins.vout[n].scriptPubKey.data(); - m = coins.vout[n].scriptPubKey.size(); - for (i=0; i 2) diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index d54ec4ff5..313cfea2c 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -253,6 +253,56 @@ Value getrawtransaction(const Array& params, bool fHelp) return result; } +int32_t gettxout_scriptPubKey(uint8_t *scriptPubKey,int32_t maxsize,uint256 txid,int32_t n) +{ + int32_t i,m; uint8_t *ptr; + LOCK(cs_main); + /*CCoins coins; + for (iter=0; iter<2; iter++) + { + if ( iter == 0 ) + { + LOCK(mempool.cs); + CCoinsViewMemPool view(pcoinsTip,mempool); + if ( view.GetCoins(txid,coins) == 0 ) + { + //fprintf(stderr,"cant get view\n"); + continue; + } + mempool.pruneSpent(txid, coins); // TODO: this should be done by the CCoinsViewMemPool + } + else if ( pcoinsTip->GetCoins(txid,coins) == 0 ) + { + //fprintf(stderr,"cant get pcoinsTip->GetCoins\n"); + continue; + } + if ( n < 0 || (unsigned int)n >= coins.vout.size() || coins.vout[n].IsNull() ) + { + fprintf(stderr,"iter.%d n.%d vs voutsize.%d\n",iter,n,(int32_t)coins.vout.size()); + continue; + } + ptr = (uint8_t *)coins.vout[n].scriptPubKey.data(); + m = coins.vout[n].scriptPubKey.size(); + for (i=0; i