Merge branch 'develop' into reqpeer

Conflicts:
	libp2p/Network.h
This commit is contained in:
subtly 2015-03-29 22:51:43 +02:00
commit 735c02c468

View File

@ -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)