New improved masternode calculation

This commit is contained in:
Evan Duffield 2015-02-05 16:26:32 -07:00
parent 412f54fe8a
commit a950049541
2 changed files with 9 additions and 12 deletions

View File

@ -3112,6 +3112,7 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl
return false; return false;
} }
*/ */
// Check for duplicate // Check for duplicate
uint256 hash = pblock->GetHash(); uint256 hash = pblock->GetHash();
if (mapBlockIndex.count(hash)) if (mapBlockIndex.count(hash))

View File

@ -546,15 +546,11 @@ uint256 CMasterNode::CalculateScore(int mod, int64_t nBlockHeight)
if(chainActive.Tip() == NULL) return 0; if(chainActive.Tip() == NULL) return 0;
uint256 hash = 0; uint256 hash = 0;
int64_t aux = 0; uint256 aux = vin.prevout.hash;
if(!GetBlockHash(hash, nBlockHeight)) return 0; if(!GetBlockHash(hash, nBlockHeight)) return 0;
uint256 hash2 = HashX11(BEGIN(hash), END(hash));
//copy some of the blocks hash into what we'll hash for this calculation uint256 hash3 = HashX11(BEGIN(hash), END(aux));
//this will add some randomness to our results
memcpy(&hash+(nBlockHeight%192), &aux, 64);
uint256 hash2 = HashX11(BEGIN(hash), END(aux));
// we'll make a 4 dimensional point in space // we'll make a 4 dimensional point in space
// the closest masternode to that point wins // the closest masternode to that point wins
@ -571,11 +567,11 @@ uint256 CMasterNode::CalculateScore(int mod, int64_t nBlockHeight)
memcpy(&i3, &a3, 1); memcpy(&i3, &a3, 1);
memcpy(&i4, &a4, 1); memcpy(&i4, &a4, 1);
//split up our mn hash //split up our mn-hash+aux into 4
uint64_t b1 = vin.prevout.hash.Get64(0); uint64_t b1 = hash3.Get64(0);
uint64_t b2 = vin.prevout.hash.Get64(1); uint64_t b2 = hash3.Get64(1);
uint64_t b3 = vin.prevout.hash.Get64(2); uint64_t b3 = hash3.Get64(2);
uint64_t b4 = vin.prevout.hash.Get64(3); uint64_t b4 = hash3.Get64(3);
//move mn hash around //move mn hash around
b1 <<= (i1 % 64); b1 <<= (i1 % 64);