From 936078888db0780f880828b0a5336a3332b1b824 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:04:00 -1100 Subject: [PATCH 01/19] int32_t CBlockTreeDB::SnapShot() --- src/txdb.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/txdb.cpp b/src/txdb.cpp index c856947ad..0d802345a 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -396,6 +396,43 @@ bool CBlockTreeDB::ReadAddressIndex(uint160 addressHash, int type, return true; } +int32_t CBlockTreeDB::SnapShot() +{ + char chType; int32_t num = 0; std::string address; + boost::scoped_ptr pcursor(NewIterator()); + while (pcursor->Valid()) + { + boost::this_thread::interruption_point(); + try + { + leveldb::Slice slKey = pcursor->key(); + CDataStream ssKey(slKey.data(), slKey.data()+slKey.size(), SER_DISK, CLIENT_VERSION); + CAddressIndexKey indexKey; + ssKey >> chType; + ssKey >> indexKey; + if ( chType == DB_ADDRESSINDEX ) + { + try { + leveldb::Slice slValue = pcursor->value(); + CDataStream ssValue(slValue.data(), slValue.data()+slValue.size(), SER_DISK, CLIENT_VERSION); + CAmount nValue; + ssValue >> nValue; + getAddressFromIndex(indexKey.type, indexKey.addressBytes, address); + fprintf(stderr,"{\"%s\", %.8f},\n",address.c_str(),(double)nValue/COIN); + num++; + //addressIndex.push_back(make_pair(indexKey, nValue)); + pcursor->Next(); + } catch (const std::exception& e) { + return error("failed to get address index value"); + } + } else break; + } catch (const std::exception& e) { + break; + } + } + return(num); +} + bool CBlockTreeDB::WriteTimestampIndex(const CTimestampIndexKey ×tampIndex) { CLevelDBBatch batch; batch.Write(make_pair(DB_TIMESTAMPINDEX, timestampIndex), 0); From b4b4c499853d308c9ae2bc67ce2131576cddaa16 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:07:51 -1100 Subject: [PATCH 02/19] Syntax --- src/txdb.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/txdb.h b/src/txdb.h index 401f92144..14728d748 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -94,6 +94,7 @@ public: bool ReadFlag(const std::string &name, bool &fValue); bool LoadBlockIndexGuts(); bool blockOnchainActive(const uint256 &hash); + int32_t SnapShot(); }; #endif // BITCOIN_TXDB_H From bd1469982428160c89e4c0a0ff520a5bbf2d3cda Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:10:37 -1100 Subject: [PATCH 03/19] Syntax --- src/txdb.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/txdb.cpp b/src/txdb.cpp index 0d802345a..67f403c64 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -396,6 +396,8 @@ bool CBlockTreeDB::ReadAddressIndex(uint160 addressHash, int type, return true; } +bool getAddressFromIndex(const int &type, const uint160 &hash, std::string &address); + int32_t CBlockTreeDB::SnapShot() { char chType; int32_t num = 0; std::string address; @@ -417,7 +419,7 @@ int32_t CBlockTreeDB::SnapShot() CDataStream ssValue(slValue.data(), slValue.data()+slValue.size(), SER_DISK, CLIENT_VERSION); CAmount nValue; ssValue >> nValue; - getAddressFromIndex(indexKey.type, indexKey.addressBytes, address); + getAddressFromIndex(indexKey.type, indexKey.hashBytes, address); fprintf(stderr,"{\"%s\", %.8f},\n",address.c_str(),(double)nValue/COIN); num++; //addressIndex.push_back(make_pair(indexKey, nValue)); From 2200781907408b07f0de4988b07728680e89e7b4 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:26:46 -1100 Subject: [PATCH 04/19] Snapshot roc --- src/rpcmisc.cpp | 17 +++++++++++++++++ src/rpcserver.cpp | 1 + src/rpcserver.h | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 278fb8866..b348a893f 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -993,6 +993,23 @@ UniValue getaddressbalance(const UniValue& params, bool fHelp) } +UniValue getsnapshot(const UniValue& params, bool fHelp) +{ + UniValue result(UniValue::VOBJ); int32_t num; + if ( fHelp || params.size() > 0 ) + { + throw runtime_error( + "getsnapshot\n" + ); + } + if ( pblocktree != 0 ) + { + num = pblocktree->Snapshot(); + result.push_back(Pair("numaddresses", num)); + } else result.push_back(Pair("error", "no addressindex")); + return(result); +} + UniValue getaddresstxids(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 86a7aed86..8e9a2c634 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -345,6 +345,7 @@ static const CRPCCommand vRPCCommands[] = { "addressindex", "getaddressdeltas", &getaddressdeltas, false }, { "addressindex", "getaddresstxids", &getaddresstxids, false }, { "addressindex", "getaddressbalance", &getaddressbalance, false }, + { "addressindex", "getsnapshot", &getsnapshot, false }, /* Utility functions */ { "util", "createmultisig", &createmultisig, true }, diff --git a/src/rpcserver.h b/src/rpcserver.h index ce412cdb9..1fbcca794 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -177,7 +177,8 @@ extern UniValue getaddressmempool(const UniValue& params, bool fHelp); extern UniValue getaddressutxos(const UniValue& params, bool fHelp); extern UniValue getaddressdeltas(const UniValue& params, bool fHelp); extern UniValue getaddresstxids(const UniValue& params, bool fHelp); -extern UniValue getaddressbalance(const UniValue& params, bool fHelp); +extern UniValue getaddresstxids(const UniValue& params, bool fHelp); +extern UniValue getsnapshot(const UniValue& params, bool fHelp); extern UniValue getpeerinfo(const UniValue& params, bool fHelp); extern UniValue ping(const UniValue& params, bool fHelp); extern UniValue addnode(const UniValue& params, bool fHelp); From 329d80d2c1b8ecbfea30b0d78f7252bc4da94bf7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:34:28 -1100 Subject: [PATCH 05/19] Move code --- src/main.cpp | 8 ++++++++ src/rpcmisc.cpp | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 2100b59ed..d15ff62c0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -585,6 +585,14 @@ CBlockTreeDB *pblocktree = NULL; #define KOMODO_ZCASH #include "komodo.h" +int32_t komodo_snapshot() +{ + int32_t num = -1; + if ( pblocktree != 0 ) + num = pblocktree->Snapshot(); + return(num); +} + ////////////////////////////////////////////////////////////////////////////// // // mapOrphanTransactions diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index b348a893f..4c4d1958b 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -993,6 +993,8 @@ UniValue getaddressbalance(const UniValue& params, bool fHelp) } +int32_t komodo_snapshot(); + UniValue getsnapshot(const UniValue& params, bool fHelp) { UniValue result(UniValue::VOBJ); int32_t num; @@ -1002,11 +1004,9 @@ UniValue getsnapshot(const UniValue& params, bool fHelp) "getsnapshot\n" ); } - if ( pblocktree != 0 ) - { - num = pblocktree->Snapshot(); + if ( (num= komodo_snapshot()) >= 0 ) result.push_back(Pair("numaddresses", num)); - } else result.push_back(Pair("error", "no addressindex")); + else result.push_back(Pair("error", "no addressindex")); return(result); } From bf91fda6825132f6f6b470eb458cef17a71cfaa6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:35:59 -1100 Subject: [PATCH 06/19] SnapShot -> snapshot --- src/txdb.cpp | 2 +- src/txdb.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/txdb.cpp b/src/txdb.cpp index 67f403c64..d2ffb0b21 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -398,7 +398,7 @@ bool CBlockTreeDB::ReadAddressIndex(uint160 addressHash, int type, bool getAddressFromIndex(const int &type, const uint160 &hash, std::string &address); -int32_t CBlockTreeDB::SnapShot() +int32_t CBlockTreeDB::Snapshot() { char chType; int32_t num = 0; std::string address; boost::scoped_ptr pcursor(NewIterator()); diff --git a/src/txdb.h b/src/txdb.h index 14728d748..a93e50f19 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -94,7 +94,7 @@ public: bool ReadFlag(const std::string &name, bool &fValue); bool LoadBlockIndexGuts(); bool blockOnchainActive(const uint256 &hash); - int32_t SnapShot(); + int32_t Snapshot(); }; #endif // BITCOIN_TXDB_H From 50b11c4a55c76f7fc6a9259212f623ed05e5f910 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:38:15 -1100 Subject: [PATCH 07/19] Fix --- src/rpcserver.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpcserver.h b/src/rpcserver.h index 1fbcca794..b122e307a 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -177,8 +177,8 @@ extern UniValue getaddressmempool(const UniValue& params, bool fHelp); extern UniValue getaddressutxos(const UniValue& params, bool fHelp); extern UniValue getaddressdeltas(const UniValue& params, bool fHelp); extern UniValue getaddresstxids(const UniValue& params, bool fHelp); -extern UniValue getaddresstxids(const UniValue& params, bool fHelp); extern UniValue getsnapshot(const UniValue& params, bool fHelp); +extern UniValue getaddressbalance(const UniValue& params, bool fHelp); extern UniValue getpeerinfo(const UniValue& params, bool fHelp); extern UniValue ping(const UniValue& params, bool fHelp); extern UniValue addnode(const UniValue& params, bool fHelp); From 67d2e41b3f0332767eefb698f53c82b1a4b7eba3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:41:46 -1100 Subject: [PATCH 08/19] Test --- src/main.cpp | 8 ++++---- src/rpcmisc.cpp | 6 +++--- src/txdb.cpp | 10 ++++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d15ff62c0..8dee9bfea 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -585,12 +585,12 @@ CBlockTreeDB *pblocktree = NULL; #define KOMODO_ZCASH #include "komodo.h" -int32_t komodo_snapshot() +int64_t komodo_snapshot() { - int32_t num = -1; + int64_t total = -1; if ( pblocktree != 0 ) - num = pblocktree->Snapshot(); - return(num); + total = pblocktree->Snapshot(); + return(total); } ////////////////////////////////////////////////////////////////////////////// diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 4c4d1958b..b873dc495 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -997,15 +997,15 @@ int32_t komodo_snapshot(); UniValue getsnapshot(const UniValue& params, bool fHelp) { - UniValue result(UniValue::VOBJ); int32_t num; + UniValue result(UniValue::VOBJ); int64_t total; if ( fHelp || params.size() > 0 ) { throw runtime_error( "getsnapshot\n" ); } - if ( (num= komodo_snapshot()) >= 0 ) - result.push_back(Pair("numaddresses", num)); + if ( (total= komodo_snapshot()) >= 0 ) + result.push_back(Pair("total", (double)total/COIN)); else result.push_back(Pair("error", "no addressindex")); return(result); } diff --git a/src/txdb.cpp b/src/txdb.cpp index d2ffb0b21..72ff85937 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -398,9 +398,9 @@ bool CBlockTreeDB::ReadAddressIndex(uint160 addressHash, int type, bool getAddressFromIndex(const int &type, const uint160 &hash, std::string &address); -int32_t CBlockTreeDB::Snapshot() +int64_t CBlockTreeDB::Snapshot() { - char chType; int32_t num = 0; std::string address; + char chType; int64_t total = -1; std::string address; boost::scoped_ptr pcursor(NewIterator()); while (pcursor->Valid()) { @@ -421,7 +421,9 @@ int32_t CBlockTreeDB::Snapshot() ssValue >> nValue; getAddressFromIndex(indexKey.type, indexKey.hashBytes, address); fprintf(stderr,"{\"%s\", %.8f},\n",address.c_str(),(double)nValue/COIN); - num++; + if ( total < 0 ) + total = (int64_t)nValue; + else total += (int64_t)nValue; //addressIndex.push_back(make_pair(indexKey, nValue)); pcursor->Next(); } catch (const std::exception& e) { @@ -432,7 +434,7 @@ int32_t CBlockTreeDB::Snapshot() break; } } - return(num); + return(total); } bool CBlockTreeDB::WriteTimestampIndex(const CTimestampIndexKey ×tampIndex) { From 78a6f7041ec4d43fc29539b24d390c073ddc70d5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 00:43:46 -1100 Subject: [PATCH 09/19] int64_t --- src/txdb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/txdb.h b/src/txdb.h index a93e50f19..cb4d6d19e 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -94,7 +94,7 @@ public: bool ReadFlag(const std::string &name, bool &fValue); bool LoadBlockIndexGuts(); bool blockOnchainActive(const uint256 &hash); - int32_t Snapshot(); + int64_t Snapshot(); }; #endif // BITCOIN_TXDB_H From 74db3cd02768174b4e4c37322d30a3ece8dca062 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 02:01:14 -1100 Subject: [PATCH 10/19] SeekToFirst --- src/main.cpp | 1 + src/txdb.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 8dee9bfea..c9a798e4d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -590,6 +590,7 @@ int64_t komodo_snapshot() int64_t total = -1; if ( pblocktree != 0 ) total = pblocktree->Snapshot(); + else fprintf(stderr,"null pblocktree start with -addressindex=true\n"); return(total); } diff --git a/src/txdb.cpp b/src/txdb.cpp index 72ff85937..d061d7792 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -402,6 +402,8 @@ int64_t CBlockTreeDB::Snapshot() { char chType; int64_t total = -1; std::string address; boost::scoped_ptr pcursor(NewIterator()); + pcursor->SeekToFirst(); + fprintf(stderr,"pcursor iterate\n"); while (pcursor->Valid()) { boost::this_thread::interruption_point(); From de84abc1b04c80b1be561fdd453c02bb95d959bd Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 02:06:11 -1100 Subject: [PATCH 11/19] Prints --- src/txdb.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/txdb.cpp b/src/txdb.cpp index d061d7792..a0f764962 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -414,6 +414,7 @@ int64_t CBlockTreeDB::Snapshot() CAddressIndexKey indexKey; ssKey >> chType; ssKey >> indexKey; + fprintf(stderr,"chType.%d\n",chType); if ( chType == DB_ADDRESSINDEX ) { try { @@ -431,7 +432,7 @@ int64_t CBlockTreeDB::Snapshot() } catch (const std::exception& e) { return error("failed to get address index value"); } - } else break; + } else { break; } } catch (const std::exception& e) { break; } From 67d4c3beef517ad54efc56ac5c24243a65322f4c Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 03:13:45 -1100 Subject: [PATCH 12/19] Test --- src/rpcmisc.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index b873dc495..3cc18c6a6 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -634,12 +634,12 @@ bool getAddressesFromParams(const UniValue& params, std::vector > addresses; @@ -753,8 +753,8 @@ UniValue getaddressutxos(const UniValue& params, bool fHelp) " }\n" "]\n" "\nExamples:\n" - + HelpExampleCli("getaddressutxos", "'{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}'") - + HelpExampleRpc("getaddressutxos", "{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}") + + HelpExampleCli("getaddressutxos", "'{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}'") + + HelpExampleRpc("getaddressutxos", "{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}") ); bool includeChainInfo = false; @@ -840,8 +840,8 @@ UniValue getaddressdeltas(const UniValue& params, bool fHelp) " }\n" "]\n" "\nExamples:\n" - + HelpExampleCli("getaddressdeltas", "'{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}'") - + HelpExampleRpc("getaddressdeltas", "{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}") + + HelpExampleCli("getaddressdeltas", "'{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}'") + + HelpExampleRpc("getaddressdeltas", "{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}") ); @@ -957,8 +957,8 @@ UniValue getaddressbalance(const UniValue& params, bool fHelp) " \"received\" (string) The total number of satoshis received (including change)\n" "}\n" "\nExamples:\n" - + HelpExampleCli("getaddressbalance", "'{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}'") - + HelpExampleRpc("getaddressbalance", "{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}") + + HelpExampleCli("getaddressbalance", "'{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}'") + + HelpExampleRpc("getaddressbalance", "{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}") ); std::vector > addresses; @@ -1032,8 +1032,8 @@ UniValue getaddresstxids(const UniValue& params, bool fHelp) " ,...\n" "]\n" "\nExamples:\n" - + HelpExampleCli("getaddresstxids", "'{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}'") - + HelpExampleRpc("getaddresstxids", "{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}") + + HelpExampleCli("getaddresstxids", "'{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}'") + + HelpExampleRpc("getaddresstxids", "{\"addresses\": [\"RY5LccmGiX9bUHYGtSWQouNy1yFhc5rM87\"]}") ); std::vector > addresses; From 32748f525e9db520b6def11a8c73b50268d92ce9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 03:38:36 -1100 Subject: [PATCH 13/19] New iterator --- src/txdb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/txdb.cpp b/src/txdb.cpp index a0f764962..151acdb68 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -401,7 +401,7 @@ bool getAddressFromIndex(const int &type, const uint160 &hash, std::string &addr int64_t CBlockTreeDB::Snapshot() { char chType; int64_t total = -1; std::string address; - boost::scoped_ptr pcursor(NewIterator()); + boost::scoped_ptr pcursor(const_cast(&db)->NewIterator()); pcursor->SeekToFirst(); fprintf(stderr,"pcursor iterate\n"); while (pcursor->Valid()) From afd86eb21ef844cabf3e21babf1ad6eb979d8e8a Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 03:46:42 -1100 Subject: [PATCH 14/19] Undo --- src/txdb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/txdb.cpp b/src/txdb.cpp index 151acdb68..a0f764962 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -401,7 +401,7 @@ bool getAddressFromIndex(const int &type, const uint160 &hash, std::string &addr int64_t CBlockTreeDB::Snapshot() { char chType; int64_t total = -1; std::string address; - boost::scoped_ptr pcursor(const_cast(&db)->NewIterator()); + boost::scoped_ptr pcursor(NewIterator()); pcursor->SeekToFirst(); fprintf(stderr,"pcursor iterate\n"); while (pcursor->Valid()) From 28a62b60df3f57eaad1d946b75a1af6f3f7b15e7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 05:46:21 -1100 Subject: [PATCH 15/19] Deterministic RNG for notary mining --- src/miner.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 35eb8e4d3..07e4a7a16 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -112,6 +112,7 @@ extern std::string NOTARY_PUBKEY,ASSETCHAINS_OVERRIDE_PUBKEY; extern uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33]; uint32_t Mining_start,Mining_height; +int32_t My_notaryid = -1; int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); int32_t komodo_pax_opreturn(int32_t height,uint8_t *opret,int32_t maxsize); //uint64_t komodo_paxtotal(); @@ -472,13 +473,21 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn,int32_t gpucount) } pblock->nSolution.clear(); pblocktemplate->vTxSigOps[0] = GetLegacySigOpCount(pblock->vtx[0]); - if ( ASSETCHAINS_SYMBOL[0] == 0 && NOTARY_PUBKEY33[0] != 0 ) + if ( ASSETCHAINS_SYMBOL[0] == 0 && NOTARY_PUBKEY33[0] != 0 && My_notaryid >= 0 ) { + uint32_t r; CMutableTransaction txNotary = CreateNewContextualCMutableTransaction(Params().GetConsensus(), chainActive.Height() + 1); if ( pblock->nTime < pindexPrev->nTime+60 ) pblock->nTime = pindexPrev->nTime + 60; if ( gpucount < 33 ) - pblock->nTime += (rand() % (33 - gpucount)*(33 - gpucount)); + { + uint8_t tmpbuffer[40]; int32_t n=0; bits256 randvals; + memcpy(&tmpbuffer[n],&My_notaryid,sizeof(My_notaryid)), n += sizeof(My_notaryid); + memcpy(&tmpbuffer[n],&Mining_height,sizeof(Mining_height)), n += sizeof(Mining_height); + memcpy(&tmpbuffer[n],&pblock->hashPrevBlock,sizeof(pblock->hashPrevBlock)), n += sizeof(pblock->hashPrevBlock); + vcalc_sha256(0,randvals.bytes,tmpbuffer,n); + pblock->nTime += (randvals.uints[0] % (33 - gpucount)*(33 - gpucount)); + } if ( komodo_notaryvin(txNotary,NOTARY_PUBKEY33) > 0 ) { CAmount txfees = 5000; @@ -729,7 +738,8 @@ void static BitcoinMiner() break; } komodo_chosennotary(¬aryid,chainActive.Tip()->nHeight,NOTARY_PUBKEY33,(uint32_t)chainActive.Tip()->GetBlockTime()); - + if ( notaryid != My_notaryid ) + My_notaryid = notaryid; std::string solver; //if ( notaryid >= 0 || ASSETCHAINS_SYMBOL[0] != 0 ) solver = "tromp"; From 55566f16bd2cb405d93e896ed2b687beaa1c7853 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 05:50:20 -1100 Subject: [PATCH 16/19] Fix --- src/miner.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 07e4a7a16..45b70040f 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -481,12 +481,13 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn,int32_t gpucount) pblock->nTime = pindexPrev->nTime + 60; if ( gpucount < 33 ) { - uint8_t tmpbuffer[40]; int32_t n=0; bits256 randvals; + uint8_t tmpbuffer[40]; uint32_t r; int32_t n=0; uint256 randvals; memcpy(&tmpbuffer[n],&My_notaryid,sizeof(My_notaryid)), n += sizeof(My_notaryid); memcpy(&tmpbuffer[n],&Mining_height,sizeof(Mining_height)), n += sizeof(Mining_height); memcpy(&tmpbuffer[n],&pblock->hashPrevBlock,sizeof(pblock->hashPrevBlock)), n += sizeof(pblock->hashPrevBlock); - vcalc_sha256(0,randvals.bytes,tmpbuffer,n); - pblock->nTime += (randvals.uints[0] % (33 - gpucount)*(33 - gpucount)); + vcalc_sha256(0,(void *)&randvals,tmpbuffer,n); + memcpy(&r,&randvals,sizeof(r)); + pblock->nTime += (r % (33 - gpucount)*(33 - gpucount)); } if ( komodo_notaryvin(txNotary,NOTARY_PUBKEY33) > 0 ) { From 292809f76cc838ca0d2f4996df46c3016eac291b Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 05:51:17 -1100 Subject: [PATCH 17/19] Fix --- src/miner.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/miner.cpp b/src/miner.cpp index 45b70040f..327382089 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -109,6 +109,7 @@ extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOS extern uint64_t ASSETCHAINS_REWARD,ASSETCHAINS_COMMISSION,ASSETCHAINS_STAKED; extern char ASSETCHAINS_SYMBOL[KOMODO_ASSETCHAIN_MAXLEN]; extern std::string NOTARY_PUBKEY,ASSETCHAINS_OVERRIDE_PUBKEY; +void vcalc_sha256(char deprecated[(256 >> 3) * 2 + 1],uint8_t hash[256 >> 3],uint8_t *src,int32_t len); extern uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33]; uint32_t Mining_start,Mining_height; From 9a146fef7685b8b84d0b6c490f6996e0e5b17068 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 12 Jun 2018 05:52:44 -1100 Subject: [PATCH 18/19] Fix --- src/miner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/miner.cpp b/src/miner.cpp index 327382089..5f753f267 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -486,7 +486,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn,int32_t gpucount) memcpy(&tmpbuffer[n],&My_notaryid,sizeof(My_notaryid)), n += sizeof(My_notaryid); memcpy(&tmpbuffer[n],&Mining_height,sizeof(Mining_height)), n += sizeof(Mining_height); memcpy(&tmpbuffer[n],&pblock->hashPrevBlock,sizeof(pblock->hashPrevBlock)), n += sizeof(pblock->hashPrevBlock); - vcalc_sha256(0,(void *)&randvals,tmpbuffer,n); + vcalc_sha256(0,(uint8_t *)&randvals,tmpbuffer,n); memcpy(&r,&randvals,sizeof(r)); pblock->nTime += (r % (33 - gpucount)*(33 - gpucount)); } From 784e0917cfdfb3c6e53153bd6ee94e45d183ee06 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 13 Jun 2018 08:48:47 -1100 Subject: [PATCH 19/19] Prevent skipping even old notarizations --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 690e91248..18a97ab00 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -694,7 +694,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr } else if ( ASSETCHAINS_SYMBOL[0] == 0 && matched != 0 && notarized != 0 && validated != 0 ) komodo_rwccdata((char *)"KMD",1,&ccdata,0); - if ( matched != 0 && *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) + if ( matched != 0 )//&& *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) { sp->NOTARIZED_HEIGHT = *notarizedheightp; sp->NOTARIZED_HASH = srchash;