From 85f05424d3b83a8fa5d6fd3baa965bf56fce6188 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 26 Mar 2018 03:38:47 +0300 Subject: [PATCH 1/4] Speed up komodo_notaries --- src/komodo_notary.h | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index ab51e9c7e..88ca567a7 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -199,6 +199,7 @@ const char *Notaries_elected1[][2] = int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp) { + static uint8_t elected_pubkeys0[64][33],elected_pubkeys1[64][33],did0,did1; int32_t i,htind,n; uint64_t mask = 0; struct knotary_entry *kp,*tmp; if ( timestamp == 0 && ASSETCHAINS_SYMBOL[0] != 0 ) timestamp = komodo_heightstamp(height); @@ -206,19 +207,29 @@ int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestam { if ( (timestamp != 0 && timestamp <= KOMODO_NOTARIES_TIMESTAMP1) || height <= KOMODO_NOTARIES_HEIGHT1 ) { - n = (int32_t)(sizeof(Notaries_elected0)/sizeof(*Notaries_elected0)); - for (i=0; i Date: Mon, 26 Mar 2018 04:23:57 +0300 Subject: [PATCH 2/4] Cache pubkey33 and notary --- src/chain.h | 3 +- src/komodo_bitcoind.h | 64 +++++++++++++++++++++++++++---------------- src/komodo_notary.h | 8 ++---- src/pow.cpp | 2 +- 4 files changed, 46 insertions(+), 31 deletions(-) diff --git a/src/chain.h b/src/chain.h index 937e20bda..d3c46f9d6 100644 --- a/src/chain.h +++ b/src/chain.h @@ -177,7 +177,8 @@ public: //! (memory only) Sequential id assigned to distinguish order in which blocks are received. uint32_t nSequenceId; - + int8_t notaryid; uint8_t pubkey33[33]; + void SetNull() { phashBlock = NULL; diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index b2489f814..2fa18708b 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -585,7 +585,7 @@ void komodo_disconnect(CBlockIndex *pindex,CBlock& block) int32_t komodo_is_notarytx(const CTransaction& tx) { - uint8_t *ptr,crypto777[33]; + uint8_t *ptr; static uint8_t crypto777[33]; if ( tx.vout.size() > 0 ) { #ifdef KOMODO_ZCASH @@ -595,7 +595,8 @@ int32_t komodo_is_notarytx(const CTransaction& tx) #endif if ( ptr != 0 ) { - decode_hex(crypto777,33,(char *)CRYPTO777_PUBSECPSTR); + if ( crypto777[0] == 0 ) + decode_hex(crypto777,33,(char *)CRYPTO777_PUBSECPSTR); if ( memcmp(ptr+1,crypto777,33) == 0 ) { //printf("found notarytx\n"); @@ -704,8 +705,15 @@ void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) memset(pubkey33,0,33); if ( pindex != 0 ) { - if ( komodo_blockload(block,pindex) == 0 ) - komodo_block2pubkey33(pubkey33,block); + if ( pindex->pubkey33[0] == 0 ) + { + if ( komodo_blockload(block,pindex) == 0 ) + { + komodo_block2pubkey33(pindex->pubkey33,block); + pindex->notaryid = komodo_electednotary(&numnotaries,pindex->pubkey33,height,pindex->nTime); + } + } + memcpy(pubkey33,pindex->pubkey33,33); } else { @@ -714,12 +722,12 @@ void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) } } -void komodo_connectpindex(CBlockIndex *pindex) +/*void komodo_connectpindex(CBlockIndex *pindex) { CBlock block; if ( komodo_blockload(block,pindex) == 0 ) komodo_connectblock(pindex,block); -} +}*/ int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp); @@ -727,40 +735,50 @@ int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t hei int8_t komodo_minerid(int32_t height,uint8_t *pubkey33) { int32_t num,i,numnotaries; CBlockIndex *pindex; uint32_t timestamp=0; uint8_t _pubkey33[33],pubkeys[64][33]; - if ( pubkey33 == 0 && (pindex= chainActive[height]) != 0 ) + if ( (pindex= chainActive[height]) != 0 ) { - timestamp = pindex->GetBlockTime(); - if ( pubkey33 == 0 ) + if ( pindex->pubkey33[0] == 0 ) { - pubkey33 = _pubkey33; + timestamp = pindex->GetBlockTime(); + if ( pubkey33 == 0 ) + pubkey33 = _pubkey33; komodo_index2pubkey33(pubkey33,pindex,height); + pindex->notaryid = komodo_electednotary(&numnotaries,pindex->pubkey33,height,pindex->nTime); + /*if ( (num= komodo_notaries(pubkeys,height,timestamp)) > 0 ) + { + for (i=0; i 0 ) - { - for (i=0; inotaryid); } return(komodo_electednotary(&numnotaries,pubkey33,height,timestamp)); } int32_t komodo_eligiblenotary(uint8_t pubkeys[66][33],int32_t *mids,int32_t *nonzpkeysp,int32_t height) { - int32_t i,j,duplicate; CBlockIndex *pindex; uint8_t pubkey33[33]; + int32_t i,j,duplicate,numnotaries; CBlockIndex *pindex; uint8_t pubkey33[33]; memset(mids,-1,sizeof(*mids)*66); for (i=duplicate=0; i<66; i++) { if ( (pindex= komodo_chainactive(height-i)) != 0 ) { - komodo_index2pubkey33(pubkey33,pindex,height-i); - for (j=0; j<33; j++) - pubkeys[i][j] = pubkey33[j]; - if ( (mids[i]= komodo_minerid(height-i,pubkey33)) >= 0 ) + if ( pindex->pubkey33[0] == 0 ) { - //mids[i] = *(int32_t *)pubkey33; - (*nonzpkeysp)++; + komodo_index2pubkey33(pubkey33,pindex,height-i); + pindex->notaryid = komodo_electednotary(&numnotaries,pindex->pubkey33,height,pindex->nTime); + //for (j=0; j<33; j++) + // pubkeys[i][j] = pubkey33[j]; + /*if ( (mids[i]= komodo_minerid(height-i,pubkey33)) >= 0 ) + { + //mids[i] = *(int32_t *)pubkey33; + (*nonzpkeysp)++; + }*/ } + memcpy(pubkeys[i],pindex->pubkey33,33); + if ( (mids[i]= pindex->notaryid) >= 0 ) + (*nonzkeysp)++; if ( mids[0] >= 0 && i > 0 && mids[i] == mids[0] ) duplicate++; } diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 88ca567a7..961c1e866 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -257,11 +257,7 @@ int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestam int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp) { - char pubkeystr[67]; int32_t i,n; uint8_t pubkeys[64][33]; - for (i=0; i<33; i++) - sprintf(&pubkeystr[i*2],"%02x",pubkey33[i]); - pubkeystr[66] = 0; - //printf("%s vs\n",pubkeystr); + int32_t i,n; uint8_t pubkeys[64][33]; n = komodo_notaries(pubkeys,height,timestamp); *numnotariesp = n; for (i=0; i Date: Mon, 26 Mar 2018 04:31:09 +0300 Subject: [PATCH 3/4] Test --- src/komodo_bitcoind.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 2fa18708b..6b88758e8 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -700,7 +700,7 @@ uint32_t komodo_heightstamp(int32_t height) void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) { - CBlock block; + CBlock block; int32_t numnotaries; //komodo_init(height); memset(pubkey33,0,33); if ( pindex != 0 ) @@ -778,7 +778,7 @@ int32_t komodo_eligiblenotary(uint8_t pubkeys[66][33],int32_t *mids,int32_t *non } memcpy(pubkeys[i],pindex->pubkey33,33); if ( (mids[i]= pindex->notaryid) >= 0 ) - (*nonzkeysp)++; + (*nonzpkeysp)++; if ( mids[0] >= 0 && i > 0 && mids[i] == mids[0] ) duplicate++; } From 92fc319628a491e269c695fe94158495e36db25a Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 26 Mar 2018 04:32:21 +0300 Subject: [PATCH 4/4] Test --- src/komodo_bitcoind.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 6b88758e8..9f1713584 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -698,6 +698,9 @@ uint32_t komodo_heightstamp(int32_t height) return(0); } +int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp); + void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) { CBlock block; int32_t numnotaries; @@ -729,8 +732,6 @@ void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) komodo_connectblock(pindex,block); }*/ -int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); -int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp); int8_t komodo_minerid(int32_t height,uint8_t *pubkey33) {