mirror of
https://github.com/dashpay/dash.git
synced 2024-12-28 13:32:47 +01:00
Moved UpdateTime out of CBlockHeader and moved CBlockHeader into core.
This commit is contained in:
parent
48343a0a50
commit
aabdf9e899
61
src/core.h
61
src/core.h
@ -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
|
#endif
|
||||||
|
10
src/main.cpp
10
src/main.cpp
@ -1300,13 +1300,13 @@ bool ConnectBestBlock(CValidationState &state) {
|
|||||||
} while(true);
|
} 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:
|
// Updating time can change work required on testnet:
|
||||||
if (fTestNet)
|
if (fTestNet)
|
||||||
nBits = GetNextWorkRequired(pindexPrev, this);
|
block.nBits = GetNextWorkRequired(pindexPrev, &block);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4366,7 +4366,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey)
|
|||||||
|
|
||||||
// Fill in header
|
// Fill in header
|
||||||
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
|
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
|
||||||
pblock->UpdateTime(pindexPrev);
|
UpdateTime(*pblock, pindexPrev);
|
||||||
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock);
|
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock);
|
||||||
pblock->nNonce = 0;
|
pblock->nNonce = 0;
|
||||||
pblock->vtx[0].vin[0].scriptSig = CScript() << OP_0 << OP_0;
|
pblock->vtx[0].vin[0].scriptSig = CScript() << OP_0 << OP_0;
|
||||||
@ -4606,7 +4606,7 @@ void static BitcoinMiner(CWallet *pwallet)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// Update nTime every few seconds
|
// Update nTime every few seconds
|
||||||
pblock->UpdateTime(pindexPrev);
|
UpdateTime(*pblock, pindexPrev);
|
||||||
nBlockTime = ByteReverse(pblock->nTime);
|
nBlockTime = ByteReverse(pblock->nTime);
|
||||||
if (fTestNet)
|
if (fTestNet)
|
||||||
{
|
{
|
||||||
|
66
src/main.h
66
src/main.h
@ -180,6 +180,9 @@ bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, b
|
|||||||
bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew);
|
bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew);
|
||||||
/** Find the best known block, and make it the tip of the block chain */
|
/** Find the best known block, and make it the tip of the block chain */
|
||||||
bool ConnectBestBlock(CValidationState &state);
|
bool ConnectBestBlock(CValidationState &state);
|
||||||
|
|
||||||
|
void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev);
|
||||||
|
|
||||||
/** Create a new block index entry for a given block hash */
|
/** Create a new block index entry for a given block hash */
|
||||||
CBlockIndex * InsertBlockIndex(uint256 hash);
|
CBlockIndex * InsertBlockIndex(uint256 hash);
|
||||||
/** Verify a signature */
|
/** 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
|
class CBlock : public CBlockHeader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -159,7 +159,7 @@ Value getwork(const Array& params, bool fHelp)
|
|||||||
CBlock* pblock = &pblocktemplate->block; // pointer for convenience
|
CBlock* pblock = &pblocktemplate->block; // pointer for convenience
|
||||||
|
|
||||||
// Update nTime
|
// Update nTime
|
||||||
pblock->UpdateTime(pindexPrev);
|
UpdateTime(*pblock, pindexPrev);
|
||||||
pblock->nNonce = 0;
|
pblock->nNonce = 0;
|
||||||
|
|
||||||
// Update nExtraNonce
|
// Update nExtraNonce
|
||||||
@ -289,7 +289,7 @@ Value getblocktemplate(const Array& params, bool fHelp)
|
|||||||
CBlock* pblock = &pblocktemplate->block; // pointer for convenience
|
CBlock* pblock = &pblocktemplate->block; // pointer for convenience
|
||||||
|
|
||||||
// Update nTime
|
// Update nTime
|
||||||
pblock->UpdateTime(pindexPrev);
|
UpdateTime(*pblock, pindexPrev);
|
||||||
pblock->nNonce = 0;
|
pblock->nNonce = 0;
|
||||||
|
|
||||||
Array transactions;
|
Array transactions;
|
||||||
|
Loading…
Reference in New Issue
Block a user