|
|
@ -54,13 +54,6 @@ const char *Notaries_genesis[][2] = |
|
|
|
|
|
|
|
#define KOMODO_ELECTION_GAP ((ASSETCHAINS_SYMBOL[0] == 0) ? 2000 : 100) |
|
|
|
|
|
|
|
int32_t KOMODO_PUBKEYS_HEIGHT(int32_t height) |
|
|
|
{ |
|
|
|
height += KOMODO_ELECTION_GAP/2; |
|
|
|
height /= KOMODO_ELECTION_GAP; |
|
|
|
return((height + 1) * KOMODO_ELECTION_GAP); |
|
|
|
} |
|
|
|
|
|
|
|
struct nutxo_entry { UT_hash_handle hh; uint256 txhash; uint64_t voutmask; int32_t notaryid,height; } *NUTXOS; |
|
|
|
struct knotary_entry { UT_hash_handle hh; uint8_t pubkey[33],notaryid; }; |
|
|
|
struct knotaries_entry { int32_t height,numnotaries; struct knotary_entry *Notaries; } Pubkeys[10000]; |
|
|
@ -100,8 +93,7 @@ int32_t komodo_ratify_threshold(int32_t height,uint64_t signedmask) |
|
|
|
int32_t htind,numnotaries,i,wt = 0; |
|
|
|
if ( ASSETCHAINS_SYMBOL[0] != 0 ) |
|
|
|
return(2); |
|
|
|
if ( (htind= KOMODO_PUBKEYS_HEIGHT(height) / KOMODO_ELECTION_GAP) == 0 ) |
|
|
|
htind = 1; |
|
|
|
htind = height / KOMODO_ELECTION_GAP; |
|
|
|
numnotaries = Pubkeys[htind].numnotaries; |
|
|
|
for (i=0; i<numnotaries; i++) |
|
|
|
if ( ((1LL << i) & signedmask) != 0 ) |
|
|
@ -114,8 +106,7 @@ int32_t komodo_ratify_threshold(int32_t height,uint64_t signedmask) |
|
|
|
int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height) |
|
|
|
{ |
|
|
|
int32_t i,htind,n; uint64_t mask = 0; struct knotary_entry *kp,*tmp; |
|
|
|
if ( (htind= KOMODO_PUBKEYS_HEIGHT(height) / KOMODO_ELECTION_GAP) == 0 ) |
|
|
|
htind = 1; |
|
|
|
htind = height / KOMODO_ELECTION_GAP; |
|
|
|
pthread_mutex_lock(&komodo_mutex); |
|
|
|
n = Pubkeys[htind].numnotaries; |
|
|
|
HASH_ITER(hh,Pubkeys[htind].Notaries,kp,tmp) |
|
|
@ -138,7 +129,10 @@ void komodo_notarysinit(int32_t height,uint8_t pubkeys[64][33],int32_t num) |
|
|
|
static int32_t hwmheight; |
|
|
|
int32_t k,i,htind,nonz; struct knotary_entry *kp; struct knotaries_entry N; |
|
|
|
memset(&N,0,sizeof(N)); |
|
|
|
htind = (KOMODO_PUBKEYS_HEIGHT(height) / KOMODO_ELECTION_GAP) + 1; |
|
|
|
height += KOMODO_ELECTION_GAP/2; |
|
|
|
height /= KOMODO_ELECTION_GAP; |
|
|
|
height = ((height + 1) * KOMODO_ELECTION_GAP); |
|
|
|
htind = (height / KOMODO_ELECTION_GAP); |
|
|
|
pthread_mutex_lock(&komodo_mutex); |
|
|
|
for (k=0; k<num; k++) |
|
|
|
{ |
|
|
@ -173,8 +167,7 @@ int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33) |
|
|
|
*notaryidp = -1; |
|
|
|
if ( height < 0 || height/KOMODO_ELECTION_GAP >= sizeof(Pubkeys)/sizeof(*Pubkeys) ) |
|
|
|
return(-1); |
|
|
|
if ( (htind= KOMODO_PUBKEYS_HEIGHT(height) / KOMODO_ELECTION_GAP) == 0 ) |
|
|
|
htind = 1; |
|
|
|
htind = height / KOMODO_ELECTION_GAP; |
|
|
|
pthread_mutex_lock(&komodo_mutex); |
|
|
|
HASH_FIND(hh,Pubkeys[htind].Notaries,pubkey33,33,kp); |
|
|
|
pthread_mutex_unlock(&komodo_mutex); |
|
|
|