mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
commit
e572aa4f63
@ -191,7 +191,7 @@ void ImportTest::importState(json_spirit::mObject& _o, State& _state)
|
||||
BOOST_THROW_EXCEPTION(MissingFields() << errinfo_comment("Import State: Missing state fields!"));
|
||||
}
|
||||
|
||||
void ImportTest::importTransaction(json_spirit::mObject& _o)
|
||||
void ImportTest::importTransaction (json_spirit::mObject const& _o, eth::Transaction& o_tr)
|
||||
{
|
||||
if (_o.count("secretKey") > 0)
|
||||
{
|
||||
@ -202,18 +202,18 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
|
||||
assert(_o.count("value") > 0);
|
||||
assert(_o.count("data") > 0);
|
||||
|
||||
if (bigint(_o["nonce"].get_str()) >= c_max256plus1)
|
||||
if (bigint(_o.at("nonce").get_str()) >= c_max256plus1)
|
||||
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'nonce' is equal or greater than 2**256") );
|
||||
if (bigint(_o["gasPrice"].get_str()) >= c_max256plus1)
|
||||
if (bigint(_o.at("gasPrice").get_str()) >= c_max256plus1)
|
||||
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'gasPrice' is equal or greater than 2**256") );
|
||||
if (bigint(_o["gasLimit"].get_str()) >= c_max256plus1)
|
||||
if (bigint(_o.at("gasLimit").get_str()) >= c_max256plus1)
|
||||
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'gasLimit' is equal or greater than 2**256") );
|
||||
if (bigint(_o["value"].get_str()) >= c_max256plus1)
|
||||
if (bigint(_o.at("value").get_str()) >= c_max256plus1)
|
||||
BOOST_THROW_EXCEPTION(ValueTooLarge() << errinfo_comment("Transaction 'value' is equal or greater than 2**256") );
|
||||
|
||||
m_transaction = _o["to"].get_str().empty() ?
|
||||
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), importData(_o), toInt(_o["nonce"]), Secret(_o["secretKey"].get_str())) :
|
||||
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), Address(_o["to"].get_str()), importData(_o), toInt(_o["nonce"]), Secret(_o["secretKey"].get_str()));
|
||||
o_tr = _o.at("to").get_str().empty() ?
|
||||
Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), importData(_o), toInt(_o.at("nonce")), Secret(_o.at("secretKey").get_str())) :
|
||||
Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), Address(_o.at("to").get_str()), importData(_o), toInt(_o.at("nonce")), Secret(_o.at("secretKey").get_str()));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -221,14 +221,14 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
|
||||
RLP transactionRLP(transactionRLPStream.out());
|
||||
try
|
||||
{
|
||||
m_transaction = Transaction(transactionRLP.data(), CheckTransaction::Everything);
|
||||
o_tr = Transaction(transactionRLP.data(), CheckTransaction::Everything);
|
||||
}
|
||||
catch (InvalidSignature)
|
||||
{
|
||||
// create unsigned transaction
|
||||
m_transaction = _o["to"].get_str().empty() ?
|
||||
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), importData(_o), toInt(_o["nonce"])) :
|
||||
Transaction(toInt(_o["value"]), toInt(_o["gasPrice"]), toInt(_o["gasLimit"]), Address(_o["to"].get_str()), importData(_o), toInt(_o["nonce"]));
|
||||
o_tr = _o.at("to").get_str().empty() ?
|
||||
Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), importData(_o), toInt(_o.at("nonce"))) :
|
||||
Transaction(toInt(_o.at("value")), toInt(_o.at("gasPrice")), toInt(_o.at("gasLimit")), Address(_o.at("to").get_str()), importData(_o), toInt(_o.at("nonce")));
|
||||
}
|
||||
catch (Exception& _e)
|
||||
{
|
||||
@ -237,6 +237,11 @@ void ImportTest::importTransaction(json_spirit::mObject& _o)
|
||||
}
|
||||
}
|
||||
|
||||
void ImportTest::importTransaction(json_spirit::mObject const& o_tr)
|
||||
{
|
||||
importTransaction(o_tr, m_transaction);
|
||||
}
|
||||
|
||||
void ImportTest::compareStates(State const& _stateExpect, State const& _statePost, AccountMaskMap const _expectedStateOptions, WhenError _throw)
|
||||
{
|
||||
#define CHECK(a,b) \
|
||||
@ -421,13 +426,13 @@ bytes importByteArray(std::string const& _str)
|
||||
return fromHex(_str.substr(0, 2) == "0x" ? _str.substr(2) : _str, WhenError::Throw);
|
||||
}
|
||||
|
||||
bytes importData(json_spirit::mObject& _o)
|
||||
bytes importData(json_spirit::mObject const& _o)
|
||||
{
|
||||
bytes data;
|
||||
if (_o["data"].type() == json_spirit::str_type)
|
||||
data = importByteArray(_o["data"].get_str());
|
||||
if (_o.at("data").type() == json_spirit::str_type)
|
||||
data = importByteArray(_o.at("data").get_str());
|
||||
else
|
||||
for (auto const& j: _o["data"].get_array())
|
||||
for (auto const& j: _o.at("data").get_array())
|
||||
data.push_back(toByte(j));
|
||||
return data;
|
||||
}
|
||||
@ -633,46 +638,46 @@ void executeTests(const string& _name, const string& _testPathAppendix, const bo
|
||||
}
|
||||
}
|
||||
|
||||
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj)
|
||||
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject const& _tObj)
|
||||
{
|
||||
//Construct Rlp of the given transaction
|
||||
RLPStream rlpStream;
|
||||
rlpStream.appendList(_tObj.size());
|
||||
|
||||
if (_tObj.count("nonce"))
|
||||
rlpStream << bigint(_tObj["nonce"].get_str());
|
||||
rlpStream << bigint(_tObj.at("nonce").get_str());
|
||||
|
||||
if (_tObj.count("gasPrice"))
|
||||
rlpStream << bigint(_tObj["gasPrice"].get_str());
|
||||
rlpStream << bigint(_tObj.at("gasPrice").get_str());
|
||||
|
||||
if (_tObj.count("gasLimit"))
|
||||
rlpStream << bigint(_tObj["gasLimit"].get_str());
|
||||
rlpStream << bigint(_tObj.at("gasLimit").get_str());
|
||||
|
||||
if (_tObj.count("to"))
|
||||
{
|
||||
if (_tObj["to"].get_str().empty())
|
||||
if (_tObj.at("to").get_str().empty())
|
||||
rlpStream << "";
|
||||
else
|
||||
rlpStream << importByteArray(_tObj["to"].get_str());
|
||||
rlpStream << importByteArray(_tObj.at("to").get_str());
|
||||
}
|
||||
|
||||
if (_tObj.count("value"))
|
||||
rlpStream << bigint(_tObj["value"].get_str());
|
||||
rlpStream << bigint(_tObj.at("value").get_str());
|
||||
|
||||
if (_tObj.count("data"))
|
||||
rlpStream << importData(_tObj);
|
||||
|
||||
if (_tObj.count("v"))
|
||||
rlpStream << bigint(_tObj["v"].get_str());
|
||||
rlpStream << bigint(_tObj.at("v").get_str());
|
||||
|
||||
if (_tObj.count("r"))
|
||||
rlpStream << bigint(_tObj["r"].get_str());
|
||||
rlpStream << bigint(_tObj.at("r").get_str());
|
||||
|
||||
if (_tObj.count("s"))
|
||||
rlpStream << bigint(_tObj["s"].get_str());
|
||||
rlpStream << bigint(_tObj.at("s").get_str());
|
||||
|
||||
if (_tObj.count("extrafield"))
|
||||
rlpStream << bigint(_tObj["extrafield"].get_str());
|
||||
rlpStream << bigint(_tObj.at("extrafield").get_str());
|
||||
|
||||
return rlpStream;
|
||||
}
|
||||
|
@ -32,7 +32,6 @@
|
||||
#include <libevm/ExtVMFace.h>
|
||||
#include <libtestutils/Common.h>
|
||||
|
||||
|
||||
#ifdef NOBOOST
|
||||
#define TBOOST_REQUIRE(arg) if(arg == false) throw dev::Exception();
|
||||
#define TBOOST_REQUIRE_EQUAL(arg1, arg2) if(arg1 != arg2) throw dev::Exception();
|
||||
@ -139,7 +138,8 @@ public:
|
||||
void importEnv(json_spirit::mObject& _o);
|
||||
static void importState(json_spirit::mObject& _o, eth::State& _state);
|
||||
static void importState(json_spirit::mObject& _o, eth::State& _state, eth::AccountMaskMap& o_mask);
|
||||
void importTransaction(json_spirit::mObject& _o);
|
||||
static void importTransaction (json_spirit::mObject const& _o, eth::Transaction& o_tr);
|
||||
void importTransaction(json_spirit::mObject const& _o);
|
||||
static json_spirit::mObject& makeAllFieldsHex(json_spirit::mObject& _o);
|
||||
|
||||
bytes executeTest();
|
||||
@ -168,7 +168,7 @@ protected:
|
||||
u256 toInt(json_spirit::mValue const& _v);
|
||||
byte toByte(json_spirit::mValue const& _v);
|
||||
bytes importCode(json_spirit::mObject& _o);
|
||||
bytes importData(json_spirit::mObject& _o);
|
||||
bytes importData(json_spirit::mObject const& _o);
|
||||
bytes importByteArray(std::string const& _str);
|
||||
eth::LogEntries importLog(json_spirit::mArray& _o);
|
||||
json_spirit::mArray exportLog(eth::LogEntries _logs);
|
||||
@ -193,7 +193,7 @@ dev::eth::Ethash::BlockHeader constructHeader(
|
||||
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);
|
||||
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject const& _tObj);
|
||||
eth::LastHashes lastHashes(u256 _currentBlockNumber);
|
||||
json_spirit::mObject fillJsonWithState(eth::State _state);
|
||||
json_spirit::mObject fillJsonWithTransaction(eth::Transaction _txn);
|
||||
|
Loading…
Reference in New Issue
Block a user