mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge branch 'develop' into reqpeer
Conflicts: libp2p/Network.h
This commit is contained in:
commit
735c02c468
@ -20,7 +20,9 @@
|
|||||||
* block test functions.
|
* block test functions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
#include <libdevcrypto/FileSystem.h>
|
#include <libdevcrypto/FileSystem.h>
|
||||||
|
#include <libtestutils/TransientDirectory.h>
|
||||||
#include <libethereum/CanonBlockChain.h>
|
#include <libethereum/CanonBlockChain.h>
|
||||||
#include "TestHelper.h"
|
#include "TestHelper.h"
|
||||||
|
|
||||||
@ -35,8 +37,8 @@ bytes createBlockRLPFromFields(mObject& _tObj);
|
|||||||
void overwriteBlockHeader(BlockInfo& _current_BlockHeader, mObject& _blObj);
|
void overwriteBlockHeader(BlockInfo& _current_BlockHeader, mObject& _blObj);
|
||||||
BlockInfo constructBlock(mObject& _o);
|
BlockInfo constructBlock(mObject& _o);
|
||||||
void updatePoW(BlockInfo& _bi);
|
void updatePoW(BlockInfo& _bi);
|
||||||
void writeBlockHeaderToJson(mObject& _o, const BlockInfo& _bi);
|
void writeBlockHeaderToJson(mObject& _o, BlockInfo const& _bi);
|
||||||
RLPStream createFullBlockFromHeader(const BlockInfo& _bi, const bytes& _txs = RLPEmptyList, const bytes& _uncles = RLPEmptyList);
|
RLPStream createFullBlockFromHeader(BlockInfo const& _bi, bytes const& _txs = RLPEmptyList, bytes const& _uncles = RLPEmptyList);
|
||||||
|
|
||||||
void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
||||||
{
|
{
|
||||||
@ -75,7 +77,8 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
o["genesisRLP"] = "0x" + toHex(rlpGenesisBlock.out());
|
o["genesisRLP"] = "0x" + toHex(rlpGenesisBlock.out());
|
||||||
|
|
||||||
// construct blockchain
|
// construct blockchain
|
||||||
BlockChain bc(rlpGenesisBlock.out(), string(), true);
|
TransientDirectory td;
|
||||||
|
BlockChain bc(rlpGenesisBlock.out(), td.path(), true);
|
||||||
|
|
||||||
if (_fillin)
|
if (_fillin)
|
||||||
{
|
{
|
||||||
@ -241,6 +244,7 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
|
|
||||||
if (sha3(RLP(state.blockData())[2].data()) != sha3(RLP(block2.out())[2].data()))
|
if (sha3(RLP(state.blockData())[2].data()) != sha3(RLP(block2.out())[2].data()))
|
||||||
cnote << "uncle list mismatch\n" << RLP(state.blockData())[2].data() << "\n" << RLP(block2.out())[2].data();
|
cnote << "uncle list mismatch\n" << RLP(state.blockData())[2].data() << "\n" << RLP(block2.out())[2].data();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
state.sync(bc);
|
state.sync(bc);
|
||||||
@ -292,7 +296,7 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
BOOST_CHECK(blObj.count("uncleHeaders") == 0);
|
BOOST_CHECK(blObj.count("uncleHeaders") == 0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch (...)
|
||||||
{
|
{
|
||||||
cnote << "state sync or block import did throw an exception\n";
|
cnote << "state sync or block import did throw an exception\n";
|
||||||
BOOST_CHECK(blObj.count("blockHeader") == 0);
|
BOOST_CHECK(blObj.count("blockHeader") == 0);
|
||||||
@ -388,7 +392,6 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
|
|
||||||
BOOST_CHECK_MESSAGE(txsFromField[i] == txsFromRlp[i], "transactions from rlp and transaction from field do not match");
|
BOOST_CHECK_MESSAGE(txsFromField[i] == txsFromRlp[i], "transactions from rlp and transaction from field do not match");
|
||||||
BOOST_CHECK_MESSAGE(txsFromField[i].rlp() == txsFromRlp[i].rlp(), "transactions rlp do not match");
|
BOOST_CHECK_MESSAGE(txsFromField[i].rlp() == txsFromRlp[i].rlp(), "transactions rlp do not match");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check uncle list
|
// check uncle list
|
||||||
@ -488,12 +491,12 @@ bytes createBlockRLPFromFields(mObject& _tObj)
|
|||||||
return rlpStream.out();
|
return rlpStream.out();
|
||||||
}
|
}
|
||||||
|
|
||||||
void overwriteBlockHeader(BlockInfo& _current_BlockHeader, mObject& _blObj)
|
void overwriteBlockHeader(BlockInfo& _currentBlockHeader, mObject& _blObj)
|
||||||
{
|
{
|
||||||
if (_blObj["blockHeader"].get_obj().size() != 14)
|
if (_blObj["blockHeader"].get_obj().size() != 14)
|
||||||
{
|
{
|
||||||
|
|
||||||
BlockInfo tmp = _current_BlockHeader;
|
BlockInfo tmp = _currentBlockHeader;
|
||||||
|
|
||||||
if (_blObj["blockHeader"].get_obj().count("parentHash"))
|
if (_blObj["blockHeader"].get_obj().count("parentHash"))
|
||||||
tmp.parentHash = h256(_blObj["blockHeader"].get_obj()["parentHash"].get_str());
|
tmp.parentHash = h256(_blObj["blockHeader"].get_obj()["parentHash"].get_str());
|
||||||
@ -539,16 +542,16 @@ void overwriteBlockHeader(BlockInfo& _current_BlockHeader, mObject& _blObj)
|
|||||||
|
|
||||||
// find new valid nonce
|
// find new valid nonce
|
||||||
|
|
||||||
if (tmp != _current_BlockHeader)
|
if (tmp != _currentBlockHeader)
|
||||||
{
|
{
|
||||||
_current_BlockHeader = tmp;
|
_currentBlockHeader = tmp;
|
||||||
|
|
||||||
ProofOfWork pow;
|
ProofOfWork pow;
|
||||||
std::pair<MineInfo, Ethash::Proof> ret;
|
std::pair<MineInfo, Ethash::Proof> ret;
|
||||||
while (!ProofOfWork::verify(_current_BlockHeader))
|
while (!ProofOfWork::verify(_currentBlockHeader))
|
||||||
{
|
{
|
||||||
ret = pow.mine(_current_BlockHeader, 1000, true, true);
|
ret = pow.mine(_currentBlockHeader, 1000, true, true);
|
||||||
Ethash::assignResult(ret.second, _current_BlockHeader);
|
Ethash::assignResult(ret.second, _currentBlockHeader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -557,13 +560,12 @@ void overwriteBlockHeader(BlockInfo& _current_BlockHeader, mObject& _blObj)
|
|||||||
// take the blockheader as is
|
// take the blockheader as is
|
||||||
const bytes c_blockRLP = createBlockRLPFromFields(_blObj["blockHeader"].get_obj());
|
const bytes c_blockRLP = createBlockRLPFromFields(_blObj["blockHeader"].get_obj());
|
||||||
const RLP c_bRLP(c_blockRLP);
|
const RLP c_bRLP(c_blockRLP);
|
||||||
_current_BlockHeader.populateFromHeader(c_bRLP, IgnoreNonce);
|
_currentBlockHeader.populateFromHeader(c_bRLP, IgnoreNonce);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockInfo constructBlock(mObject& _o)
|
BlockInfo constructBlock(mObject& _o)
|
||||||
{
|
{
|
||||||
|
|
||||||
BlockInfo ret;
|
BlockInfo ret;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -600,7 +602,7 @@ void updatePoW(BlockInfo& _bi)
|
|||||||
_bi.hash = _bi.headerHash(WithNonce);
|
_bi.hash = _bi.headerHash(WithNonce);
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeBlockHeaderToJson(mObject& _o, const BlockInfo& _bi)
|
void writeBlockHeaderToJson(mObject& _o, BlockInfo const& _bi)
|
||||||
{
|
{
|
||||||
_o["parentHash"] = toString(_bi.parentHash);
|
_o["parentHash"] = toString(_bi.parentHash);
|
||||||
_o["uncleHash"] = toString(_bi.sha3Uncles);
|
_o["uncleHash"] = toString(_bi.sha3Uncles);
|
||||||
@ -620,7 +622,7 @@ void writeBlockHeaderToJson(mObject& _o, const BlockInfo& _bi)
|
|||||||
_o["hash"] = toString(_bi.hash);
|
_o["hash"] = toString(_bi.hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
RLPStream createFullBlockFromHeader(const BlockInfo& _bi,const bytes& _txs, const bytes& _uncles )
|
RLPStream createFullBlockFromHeader(BlockInfo const& _bi, bytes const& _txs, bytes const& _uncles)
|
||||||
{
|
{
|
||||||
RLPStream rlpStream;
|
RLPStream rlpStream;
|
||||||
_bi.streamRLP(rlpStream, WithNonce);
|
_bi.streamRLP(rlpStream, WithNonce);
|
||||||
@ -632,8 +634,8 @@ RLPStream createFullBlockFromHeader(const BlockInfo& _bi,const bytes& _txs, cons
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} }// Namespace Close
|
|
||||||
|
|
||||||
|
} }// Namespace Close
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(BlockChainTests)
|
BOOST_AUTO_TEST_SUITE(BlockChainTests)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user