Browse Source

Moved UpdateTime out of CBlockHeader and moved CBlockHeader into core.

tags/v0.15.1
Eric Lombrozo 8 years ago
parent
commit
aabdf9e899
4 changed files with 71 additions and 70 deletions
  1. 61
    0
      src/core.h
  2. 5
    5
      src/main.cpp
  3. 3
    63
      src/main.h
  4. 2
    2
      src/rpcmining.cpp

+ 61
- 0
src/core.h View File

@@ -672,4 +672,65 @@ public:
};


/** Nodes collect new transactions into a block, hash them into a hash tree,
* and scan through nonce values to make the block's hash satisfy proof-of-work
* requirements. When they solve the proof-of-work, they broadcast the block
* to everyone and the block is added to the block chain. The first transaction
* in the block is a special one that creates a new coin owned by the creator
* of the block.
*/
class CBlockHeader
{
public:
// header
static const int CURRENT_VERSION=2;
int nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
unsigned int nTime;
unsigned int nBits;
unsigned int nNonce;

CBlockHeader()
{
SetNull();
}

IMPLEMENT_SERIALIZE
(
READWRITE(this->nVersion);
nVersion = this->nVersion;
READWRITE(hashPrevBlock);
READWRITE(hashMerkleRoot);
READWRITE(nTime);
READWRITE(nBits);
READWRITE(nNonce);
)

void SetNull()
{
nVersion = CBlockHeader::CURRENT_VERSION;
hashPrevBlock = 0;
hashMerkleRoot = 0;
nTime = 0;
nBits = 0;
nNonce = 0;
}

bool IsNull() const
{
return (nBits == 0);
}

uint256 GetHash() const
{
return Hash(BEGIN(nVersion), END(nNonce));
}

int64 GetBlockTime() const
{
return (int64)nTime;
}
};

#endif

+ 5
- 5
src/main.cpp View File

@@ -1300,13 +1300,13 @@ bool ConnectBestBlock(CValidationState &state) {
} while(true);
}

void CBlockHeader::UpdateTime(const CBlockIndex* pindexPrev)
void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev)
{
nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
block.nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());

// Updating time can change work required on testnet:
if (fTestNet)
nBits = GetNextWorkRequired(pindexPrev, this);
block.nBits = GetNextWorkRequired(pindexPrev, &block);
}


@@ -4366,7 +4366,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey)

// Fill in header
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
pblock->UpdateTime(pindexPrev);
UpdateTime(*pblock, pindexPrev);
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock);
pblock->nNonce = 0;
pblock->vtx[0].vin[0].scriptSig = CScript() << OP_0 << OP_0;
@@ -4606,7 +4606,7 @@ void static BitcoinMiner(CWallet *pwallet)
break;

// Update nTime every few seconds
pblock->UpdateTime(pindexPrev);
UpdateTime(*pblock, pindexPrev);
nBlockTime = ByteReverse(pblock->nTime);
if (fTestNet)
{

+ 3
- 63
src/main.h View File

@@ -180,6 +180,9 @@ bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, b
bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew);
/** Find the best known block, and make it the tip of the block chain */
bool ConnectBestBlock(CValidationState &state);

void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev);

/** Create a new block index entry for a given block hash */
CBlockIndex * InsertBlockIndex(uint256 hash);
/** Verify a signature */
@@ -576,69 +579,6 @@ public:
};


/** Nodes collect new transactions into a block, hash them into a hash tree,
* and scan through nonce values to make the block's hash satisfy proof-of-work
* requirements. When they solve the proof-of-work, they broadcast the block
* to everyone and the block is added to the block chain. The first transaction
* in the block is a special one that creates a new coin owned by the creator
* of the block.
*/
class CBlockHeader
{
public:
// header
static const int CURRENT_VERSION=2;
int nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
unsigned int nTime;
unsigned int nBits;
unsigned int nNonce;

CBlockHeader()
{
SetNull();
}

IMPLEMENT_SERIALIZE
(
READWRITE(this->nVersion);
nVersion = this->nVersion;
READWRITE(hashPrevBlock);
READWRITE(hashMerkleRoot);
READWRITE(nTime);
READWRITE(nBits);
READWRITE(nNonce);
)

void SetNull()
{
nVersion = CBlockHeader::CURRENT_VERSION;
hashPrevBlock = 0;
hashMerkleRoot = 0;
nTime = 0;
nBits = 0;
nNonce = 0;
}

bool IsNull() const
{
return (nBits == 0);
}

uint256 GetHash() const
{
return Hash(BEGIN(nVersion), END(nNonce));
}

int64 GetBlockTime() const
{
return (int64)nTime;
}

void UpdateTime(const CBlockIndex* pindexPrev);
};

class CBlock : public CBlockHeader
{
public:

+ 2
- 2
src/rpcmining.cpp View File

@@ -159,7 +159,7 @@ Value getwork(const Array& params, bool fHelp)
CBlock* pblock = &pblocktemplate->block; // pointer for convenience

// Update nTime
pblock->UpdateTime(pindexPrev);
UpdateTime(*pblock, pindexPrev);
pblock->nNonce = 0;

// Update nExtraNonce
@@ -289,7 +289,7 @@ Value getblocktemplate(const Array& params, bool fHelp)
CBlock* pblock = &pblocktemplate->block; // pointer for convenience

// Update nTime
pblock->UpdateTime(pindexPrev);
UpdateTime(*pblock, pindexPrev);
pblock->nNonce = 0;

Array transactions;

Loading…
Cancel
Save