mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge branch 'whizz' into develop
This commit is contained in:
commit
262643f561
@ -23,6 +23,7 @@
|
||||
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include <libethcore/EthashAux.h>
|
||||
#include <libethereum/Client.h>
|
||||
#include <liblll/Compiler.h>
|
||||
#include <libevm/VMFactory.h>
|
||||
@ -62,32 +63,23 @@ void connectClients(Client& c1, Client& c2)
|
||||
|
||||
void mine(State& s, BlockChain const& _bc)
|
||||
{
|
||||
std::unique_ptr<SealEngineFace> sealer(Ethash::createSealEngine());
|
||||
s.commitToMine(_bc);
|
||||
GenericFarm<ProofOfWork> f;
|
||||
bool completed = false;
|
||||
f.onSolutionFound([&](ProofOfWork::Solution sol)
|
||||
{
|
||||
return completed = s.completeMine<ProofOfWork>(sol);
|
||||
});
|
||||
f.setWork(s.info());
|
||||
f.startCPU();
|
||||
while (!completed)
|
||||
this_thread::sleep_for(chrono::milliseconds(20));
|
||||
Notified<bytes> sealed;
|
||||
sealer->onSealGenerated([&](bytes const& sealedHeader){ sealed = sealedHeader; });
|
||||
sealer->generateSeal(s.info());
|
||||
sealed.waitNot({});
|
||||
s.sealBlock(sealed);
|
||||
}
|
||||
|
||||
void mine(BlockInfo& _bi)
|
||||
void mine(Ethash::BlockHeader& _bi)
|
||||
{
|
||||
GenericFarm<ProofOfWork> f;
|
||||
bool completed = false;
|
||||
f.onSolutionFound([&](ProofOfWork::Solution sol)
|
||||
{
|
||||
ProofOfWork::assignResult(sol, _bi);
|
||||
return completed = true;
|
||||
});
|
||||
f.setWork(_bi);
|
||||
f.startCPU();
|
||||
while (!completed)
|
||||
this_thread::sleep_for(chrono::milliseconds(20));
|
||||
std::unique_ptr<SealEngineFace> sealer(Ethash::createSealEngine());
|
||||
Notified<bytes> sealed;
|
||||
sealer->onSealGenerated([&](bytes const& sealedHeader){ sealed = sealedHeader; });
|
||||
sealer->generateSeal(_bi);
|
||||
sealed.waitNot({});
|
||||
_bi = Ethash::BlockHeader(sealed);
|
||||
}
|
||||
|
||||
}
|
||||
@ -151,13 +143,24 @@ void ImportTest::importEnv(json_spirit::mObject& _o)
|
||||
assert(_o.count("currentCoinbase") > 0);
|
||||
assert(_o.count("currentNumber") > 0);
|
||||
|
||||
m_environment.currentBlock.parentHash = h256(_o["previousHash"].get_str());
|
||||
m_environment.currentBlock.number = toInt(_o["currentNumber"]);
|
||||
m_environment.currentBlock.gasLimit = toInt(_o["currentGasLimit"]);
|
||||
m_environment.currentBlock.difficulty = toInt(_o["currentDifficulty"]);
|
||||
m_environment.currentBlock.timestamp = toInt(_o["currentTimestamp"]);
|
||||
m_environment.currentBlock.coinbaseAddress = Address(_o["currentCoinbase"].get_str());
|
||||
RLPStream rlpStream;
|
||||
rlpStream.appendList(BlockInfo::BasicFields);
|
||||
|
||||
rlpStream << h256(_o["previousHash"].get_str());
|
||||
rlpStream << EmptyListSHA3;
|
||||
rlpStream << Address(_o["currentCoinbase"].get_str());
|
||||
rlpStream << h256(); // stateRoot
|
||||
rlpStream << EmptyTrie; // transactionTrie
|
||||
rlpStream << EmptyTrie; // receiptTrie
|
||||
rlpStream << LogBloom(); // bloom
|
||||
rlpStream << toInt(_o["currentDifficulty"]);
|
||||
rlpStream << toInt(_o["currentNumber"]);
|
||||
rlpStream << toInt(_o["currentGasLimit"]);
|
||||
rlpStream << 0; //gasUsed
|
||||
rlpStream << toInt(_o["currentTimestamp"]);
|
||||
rlpStream << std::string(); //extra data
|
||||
|
||||
m_environment.currentBlock = BlockInfo(rlpStream.out(), CheckEverything, h256{}, HeaderData);
|
||||
m_statePre.m_previousBlock = m_environment.previousBlock;
|
||||
m_statePre.m_currentBlock = m_environment.currentBlock;
|
||||
}
|
||||
@ -817,6 +820,43 @@ LastHashes lastHashes(u256 _currentBlockNumber)
|
||||
return ret;
|
||||
}
|
||||
|
||||
dev::eth::Ethash::BlockHeader constructHeader(
|
||||
h256 const& _parentHash,
|
||||
h256 const& _sha3Uncles,
|
||||
Address const& _coinbaseAddress,
|
||||
h256 const& _stateRoot,
|
||||
h256 const& _transactionsRoot,
|
||||
h256 const& _receiptsRoot,
|
||||
dev::eth::LogBloom const& _logBloom,
|
||||
u256 const& _difficulty,
|
||||
u256 const& _number,
|
||||
u256 const& _gasLimit,
|
||||
u256 const& _gasUsed,
|
||||
u256 const& _timestamp,
|
||||
bytes const& _extraData)
|
||||
{
|
||||
RLPStream rlpStream;
|
||||
rlpStream.appendList(Ethash::BlockHeader::Fields);
|
||||
|
||||
rlpStream << _parentHash << _sha3Uncles << _coinbaseAddress << _stateRoot << _transactionsRoot << _receiptsRoot << _logBloom
|
||||
<< _difficulty << _number << _gasLimit << _gasUsed << _timestamp << _extraData << h256{} << Nonce{};
|
||||
|
||||
return Ethash::BlockHeader(rlpStream.out());
|
||||
}
|
||||
|
||||
void updateEthashSeal(dev::eth::Ethash::BlockHeader& _header, h256 const& _mixHash, dev::eth::Nonce const& _nonce)
|
||||
{
|
||||
RLPStream source;
|
||||
_header.streamRLP(source);
|
||||
RLP sourceRlp(source.out());
|
||||
RLPStream header;
|
||||
header.appendList(Ethash::BlockHeader::Fields);
|
||||
for (size_t i = 0; i < BlockInfo::BasicFields; i++)
|
||||
header << sourceRlp[i];
|
||||
|
||||
header << _mixHash << _nonce;
|
||||
_header = Ethash::BlockHeader(header.out());
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
|
19
TestHelper.h
19
TestHelper.h
@ -27,6 +27,7 @@
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
#include "JsonSpiritHeaders.h"
|
||||
#include <libethcore/Ethash.h>
|
||||
#include <libethereum/State.h>
|
||||
#include <libevm/ExtVMFace.h>
|
||||
#include <libtestutils/Common.h>
|
||||
@ -62,7 +63,7 @@ class State;
|
||||
void mine(Client& c, int numBlocks);
|
||||
void connectClients(Client& c1, Client& c2);
|
||||
void mine(State& _s, BlockChain const& _bc);
|
||||
void mine(BlockInfo& _bi);
|
||||
void mine(Ethash::BlockHeader& _bi);
|
||||
|
||||
}
|
||||
|
||||
@ -175,7 +176,21 @@ void checkOutput(bytes const& _output, json_spirit::mObject& _o);
|
||||
void checkStorage(std::map<u256, u256> _expectedStore, std::map<u256, u256> _resultStore, Address _expectedAddr);
|
||||
void checkLog(eth::LogEntries _resultLogs, eth::LogEntries _expectedLogs);
|
||||
void checkCallCreates(eth::Transactions _resultCallCreates, eth::Transactions _expectedCallCreates);
|
||||
|
||||
dev::eth::Ethash::BlockHeader constructHeader(
|
||||
h256 const& _parentHash,
|
||||
h256 const& _sha3Uncles,
|
||||
Address const& _coinbaseAddress,
|
||||
h256 const& _stateRoot,
|
||||
h256 const& _transactionsRoot,
|
||||
h256 const& _receiptsRoot,
|
||||
dev::eth::LogBloom const& _logBloom,
|
||||
u256 const& _difficulty,
|
||||
u256 const& _number,
|
||||
u256 const& _gasLimit,
|
||||
u256 const& _gasUsed,
|
||||
u256 const& _timestamp,
|
||||
bytes const& _extraData);
|
||||
void updateEthashSeal(dev::eth::Ethash::BlockHeader& _header, h256 const& _mixHash, dev::eth::Nonce const& _nonce);
|
||||
void executeTests(const std::string& _name, const std::string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests);
|
||||
void userDefinedTest(std::function<void(json_spirit::mValue&, bool)> doTests);
|
||||
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj);
|
||||
|
@ -41,7 +41,11 @@ namespace test
|
||||
class ExecutionFramework
|
||||
{
|
||||
public:
|
||||
ExecutionFramework() { g_logVerbosity = 0; }
|
||||
ExecutionFramework()
|
||||
{
|
||||
g_logVerbosity = 0;
|
||||
m_state.resetCurrent();
|
||||
}
|
||||
|
||||
bytes const& compileAndRunWithoutCheck(
|
||||
std::string const& _sourceCode,
|
||||
|
Loading…
Reference in New Issue
Block a user