mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge remote-tracking branch 'ethereum/develop' into sol_overloadingFunctions
This commit is contained in:
commit
6b08b99b5e
@ -3743,6 +3743,29 @@ BOOST_AUTO_TEST_CASE(super_overload)
|
|||||||
BOOST_CHECK(callContractFunction("h()") == encodeArgs(2));
|
BOOST_CHECK(callContractFunction("h()") == encodeArgs(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(packed_storage_signed)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract C {
|
||||||
|
int8 a;
|
||||||
|
uint8 b;
|
||||||
|
int8 c;
|
||||||
|
uint8 d;
|
||||||
|
function test() returns (uint x1, uint x2, uint x3, uint x4) {
|
||||||
|
a = -2;
|
||||||
|
b = -uint8(a) * 2;
|
||||||
|
c = a * int8(120) * int8(121);
|
||||||
|
x1 = uint(a);
|
||||||
|
x2 = b;
|
||||||
|
x3 = uint(c);
|
||||||
|
x4 = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK( callContractFunction("test()") == encodeArgs(u256(-2), u256(4), u256(-112), u256(0)));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ BOOST_AUTO_TEST_CASE(smoke_test)
|
|||||||
{
|
{
|
||||||
char const* text = "contract test {\n"
|
char const* text = "contract test {\n"
|
||||||
" uint256 stateVariable1;\n"
|
" uint256 stateVariable1;\n"
|
||||||
" function fun(uint256 arg1) { var x; uint256 y; }"
|
" function fun(uint256 arg1) { uint256 y; }"
|
||||||
"}\n";
|
"}\n";
|
||||||
ETH_TEST_CHECK_NO_THROW(parseTextAndResolveNames(text), "Parsing and Name Resolving Failed");
|
ETH_TEST_CHECK_NO_THROW(parseTextAndResolveNames(text), "Parsing and Name Resolving Failed");
|
||||||
}
|
}
|
||||||
@ -1720,6 +1720,16 @@ BOOST_AUTO_TEST_CASE(equal_overload)
|
|||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), DeclarationError);
|
BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), DeclarationError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(uninitialized_var)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract C {
|
||||||
|
function f() returns (uint) { var x; return 2; }
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <test/solidityExecutionFramework.h>
|
#include <test/solidityExecutionFramework.h>
|
||||||
#include <libevmcore/CommonSubexpressionEliminator.h>
|
#include <libevmcore/CommonSubexpressionEliminator.h>
|
||||||
|
#include <libevmcore/ControlFlowGraph.h>
|
||||||
#include <libevmcore/Assembly.h>
|
#include <libevmcore/Assembly.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -96,6 +97,18 @@ public:
|
|||||||
BOOST_CHECK_EQUAL_COLLECTIONS(_expectation.begin(), _expectation.end(), output.begin(), output.end());
|
BOOST_CHECK_EQUAL_COLLECTIONS(_expectation.begin(), _expectation.end(), output.begin(), output.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void checkCFG(AssemblyItems const& _input, AssemblyItems const& _expectation)
|
||||||
|
{
|
||||||
|
AssemblyItems output = _input;
|
||||||
|
// Running it four times should be enough for these tests.
|
||||||
|
for (unsigned i = 0; i < 4; ++i)
|
||||||
|
{
|
||||||
|
eth::ControlFlowGraph cfg(output);
|
||||||
|
output = cfg.optimisedItems();
|
||||||
|
}
|
||||||
|
BOOST_CHECK_EQUAL_COLLECTIONS(_expectation.begin(), _expectation.end(), output.begin(), output.end());
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Address m_optimizedContract;
|
Address m_optimizedContract;
|
||||||
Address m_nonOptimizedContract;
|
Address m_nonOptimizedContract;
|
||||||
@ -731,6 +744,73 @@ BOOST_AUTO_TEST_CASE(cse_sha3_twice_same_content_noninterfering_store_in_between
|
|||||||
BOOST_CHECK_EQUAL(1, count(output.begin(), output.end(), AssemblyItem(Instruction::SHA3)));
|
BOOST_CHECK_EQUAL(1, count(output.begin(), output.end(), AssemblyItem(Instruction::SHA3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(control_flow_graph_remove_unused)
|
||||||
|
{
|
||||||
|
// remove parts of the code that are unused
|
||||||
|
AssemblyItems input{
|
||||||
|
AssemblyItem(PushTag, 1),
|
||||||
|
Instruction::JUMP,
|
||||||
|
u256(7),
|
||||||
|
AssemblyItem(Tag, 1),
|
||||||
|
};
|
||||||
|
checkCFG(input, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(control_flow_graph_remove_unused_loop)
|
||||||
|
{
|
||||||
|
AssemblyItems input{
|
||||||
|
AssemblyItem(PushTag, 3),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 1),
|
||||||
|
u256(7),
|
||||||
|
AssemblyItem(PushTag, 2),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 2),
|
||||||
|
u256(8),
|
||||||
|
AssemblyItem(PushTag, 1),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 3),
|
||||||
|
u256(11)
|
||||||
|
};
|
||||||
|
checkCFG(input, {u256(11)});
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(control_flow_graph_reconnect_single_jump_source)
|
||||||
|
{
|
||||||
|
// move code that has only one unconditional jump source
|
||||||
|
AssemblyItems input{
|
||||||
|
u256(1),
|
||||||
|
AssemblyItem(PushTag, 1),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 2),
|
||||||
|
u256(2),
|
||||||
|
AssemblyItem(PushTag, 3),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 1),
|
||||||
|
u256(3),
|
||||||
|
AssemblyItem(PushTag, 2),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 3),
|
||||||
|
u256(4),
|
||||||
|
};
|
||||||
|
checkCFG(input, {u256(1), u256(3), u256(2), u256(4)});
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(control_flow_graph_do_not_remove_returned_to)
|
||||||
|
{
|
||||||
|
// do not remove parts that are "returned to"
|
||||||
|
AssemblyItems input{
|
||||||
|
AssemblyItem(PushTag, 1),
|
||||||
|
AssemblyItem(PushTag, 2),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 2),
|
||||||
|
Instruction::JUMP,
|
||||||
|
AssemblyItem(Tag, 1),
|
||||||
|
u256(2)
|
||||||
|
};
|
||||||
|
checkCFG(input, {u256(2)});
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -866,6 +866,15 @@ BOOST_AUTO_TEST_CASE(constant_is_keyword)
|
|||||||
BOOST_CHECK_THROW(parseText(text), ParserError);
|
BOOST_CHECK_THROW(parseText(text), ParserError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(var_array)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract Foo {
|
||||||
|
function f() { var[] a; }
|
||||||
|
})";
|
||||||
|
BOOST_CHECK_THROW(parseText(text), ParserError);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -119,6 +119,32 @@ ImportTest::ImportTest(json_spirit::mObject& _o, bool isFiller):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json_spirit::mObject& ImportTest::makeAllFieldsHex(json_spirit::mObject& _o)
|
||||||
|
{
|
||||||
|
static const set<string> hashes {"bloom" , "coinbase", "hash", "mixHash", "parentHash", "receiptTrie",
|
||||||
|
"stateRoot", "transactionsTrie", "uncleHash", "currentCoinbase",
|
||||||
|
"previousHash", "to", "address", "caller", "origin", "secretKey"};
|
||||||
|
|
||||||
|
for (auto& i: _o)
|
||||||
|
{
|
||||||
|
std::string key = i.first;
|
||||||
|
if (hashes.count(key))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
std::string str;
|
||||||
|
json_spirit::mValue value = i.second;
|
||||||
|
|
||||||
|
if (value.type() == json_spirit::int_type)
|
||||||
|
str = toString(value.get_int());
|
||||||
|
else if (value.type() == json_spirit::str_type)
|
||||||
|
str = value.get_str();
|
||||||
|
else continue;
|
||||||
|
|
||||||
|
_o[key] = (str.substr(0, 2) == "0x") ? str : "0x" + toHex(toCompactBigEndian(toInt(str)));
|
||||||
|
}
|
||||||
|
return _o;
|
||||||
|
}
|
||||||
|
|
||||||
void ImportTest::importEnv(json_spirit::mObject& _o)
|
void ImportTest::importEnv(json_spirit::mObject& _o)
|
||||||
{
|
{
|
||||||
assert(_o.count("previousHash") > 0);
|
assert(_o.count("previousHash") > 0);
|
||||||
@ -325,6 +351,8 @@ void ImportTest::exportTest(bytes const& _output, State const& _statePost)
|
|||||||
|
|
||||||
// export pre state
|
// export pre state
|
||||||
m_TestObject["pre"] = fillJsonWithState(m_statePre);
|
m_TestObject["pre"] = fillJsonWithState(m_statePre);
|
||||||
|
m_TestObject["env"] = makeAllFieldsHex(m_TestObject["env"].get_obj());
|
||||||
|
m_TestObject["transaction"] = makeAllFieldsHex(m_TestObject["transaction"].get_obj());
|
||||||
}
|
}
|
||||||
|
|
||||||
json_spirit::mObject fillJsonWithState(State _state)
|
json_spirit::mObject fillJsonWithState(State _state)
|
||||||
@ -335,8 +363,8 @@ json_spirit::mObject fillJsonWithState(State _state)
|
|||||||
for (auto const& a: _state.addresses())
|
for (auto const& a: _state.addresses())
|
||||||
{
|
{
|
||||||
json_spirit::mObject o;
|
json_spirit::mObject o;
|
||||||
o["balance"] = toString(_state.balance(a.first));
|
o["balance"] = "0x" + toHex(toCompactBigEndian(_state.balance(a.first)));
|
||||||
o["nonce"] = toString(_state.transactionsFrom(a.first));
|
o["nonce"] = "0x" + toHex(toCompactBigEndian(_state.transactionsFrom(a.first)));
|
||||||
{
|
{
|
||||||
json_spirit::mObject store;
|
json_spirit::mObject store;
|
||||||
for (auto const& s: _state.storage(a.first))
|
for (auto const& s: _state.storage(a.first))
|
||||||
|
@ -121,6 +121,7 @@ public:
|
|||||||
static void importState(json_spirit::mObject& _o, eth::State& _state);
|
static void importState(json_spirit::mObject& _o, eth::State& _state);
|
||||||
static void importState(json_spirit::mObject& _o, eth::State& _state, stateOptionsMap& _stateOptionsMap);
|
static void importState(json_spirit::mObject& _o, eth::State& _state, stateOptionsMap& _stateOptionsMap);
|
||||||
void importTransaction(json_spirit::mObject& _o);
|
void importTransaction(json_spirit::mObject& _o);
|
||||||
|
static json_spirit::mObject& makeAllFieldsHex(json_spirit::mObject& _o);
|
||||||
|
|
||||||
void exportTest(bytes const& _output, eth::State const& _statePost);
|
void exportTest(bytes const& _output, eth::State const& _statePost);
|
||||||
static void checkExpectedState(eth::State const& _stateExpect, eth::State const& _statePost, stateOptionsMap const _expectedStateOptions = stateOptionsMap(), WhenError _throw = WhenError::Throw);
|
static void checkExpectedState(eth::State const& _stateExpect, eth::State const& _statePost, stateOptionsMap const _expectedStateOptions = stateOptionsMap(), WhenError _throw = WhenError::Throw);
|
||||||
|
@ -90,7 +90,7 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
for (auto const& bl: o["blocks"].get_array())
|
for (auto const& bl: o["blocks"].get_array())
|
||||||
{
|
{
|
||||||
mObject blObj = bl.get_obj();
|
mObject blObj = bl.get_obj();
|
||||||
stateTemp = state;
|
|
||||||
// get txs
|
// get txs
|
||||||
TransactionQueue txs;
|
TransactionQueue txs;
|
||||||
ZeroGasPricer gp;
|
ZeroGasPricer gp;
|
||||||
@ -222,6 +222,7 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
txObject["v"] = to_string(txi.second.signature().v + 27);
|
txObject["v"] = to_string(txi.second.signature().v + 27);
|
||||||
txObject["to"] = txi.second.isCreation() ? "" : toString(txi.second.receiveAddress());
|
txObject["to"] = txi.second.isCreation() ? "" : toString(txi.second.receiveAddress());
|
||||||
txObject["value"] = toString(txi.second.value());
|
txObject["value"] = toString(txi.second.value());
|
||||||
|
txObject = ImportTest::makeAllFieldsHex(txObject);
|
||||||
|
|
||||||
txArray.push_back(txObject);
|
txArray.push_back(txObject);
|
||||||
}
|
}
|
||||||
@ -301,6 +302,11 @@ void doBlockchainTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
|
|
||||||
o["blocks"] = blArray;
|
o["blocks"] = blArray;
|
||||||
o["postState"] = fillJsonWithState(state);
|
o["postState"] = fillJsonWithState(state);
|
||||||
|
|
||||||
|
//make all values hex
|
||||||
|
State prestate(OverlayDB(), BaseState::Empty, biGenesisBlock.coinbaseAddress);
|
||||||
|
importer.importState(o["pre"].get_obj(), prestate);
|
||||||
|
o["pre"] = fillJsonWithState(prestate);
|
||||||
}//_fillin
|
}//_fillin
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -619,11 +625,11 @@ void writeBlockHeaderToJson(mObject& _o, BlockInfo const& _bi)
|
|||||||
_o["transactionsTrie"] = toString(_bi.transactionsRoot);
|
_o["transactionsTrie"] = toString(_bi.transactionsRoot);
|
||||||
_o["receiptTrie"] = toString(_bi.receiptsRoot);
|
_o["receiptTrie"] = toString(_bi.receiptsRoot);
|
||||||
_o["bloom"] = toString(_bi.logBloom);
|
_o["bloom"] = toString(_bi.logBloom);
|
||||||
_o["difficulty"] = toString(_bi.difficulty);
|
_o["difficulty"] = "0x" + toHex(toCompactBigEndian(_bi.difficulty));
|
||||||
_o["number"] = toString(_bi.number);
|
_o["number"] = "0x" + toHex(toCompactBigEndian(_bi.number));
|
||||||
_o["gasLimit"] = toString(_bi.gasLimit);
|
_o["gasLimit"] = "0x" + toHex(toCompactBigEndian(_bi.gasLimit));
|
||||||
_o["gasUsed"] = toString(_bi.gasUsed);
|
_o["gasUsed"] = "0x" + toHex(toCompactBigEndian(_bi.gasUsed));
|
||||||
_o["timestamp"] = toString(_bi.timestamp);
|
_o["timestamp"] = "0x" + toHex(toCompactBigEndian(_bi.timestamp));
|
||||||
_o["extraData"] ="0x" + toHex(_bi.extraData);
|
_o["extraData"] ="0x" + toHex(_bi.extraData);
|
||||||
_o["mixHash"] = toString(_bi.mixHash);
|
_o["mixHash"] = toString(_bi.mixHash);
|
||||||
_o["nonce"] = toString(_bi.nonce);
|
_o["nonce"] = toString(_bi.nonce);
|
||||||
|
@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE(basic_test)
|
|||||||
unsigned cacheSize(o["cache_size"].get_int());
|
unsigned cacheSize(o["cache_size"].get_int());
|
||||||
h256 cacheHash(o["cache_hash"].get_str());
|
h256 cacheHash(o["cache_hash"].get_str());
|
||||||
BOOST_REQUIRE_EQUAL(EthashAux::get()->params(header).cache_size, cacheSize);
|
BOOST_REQUIRE_EQUAL(EthashAux::get()->params(header).cache_size, cacheSize);
|
||||||
BOOST_REQUIRE_EQUAL(sha3(bytesConstRef((byte const*)EthashAux::get()->light(header), cacheSize)), cacheHash);
|
BOOST_REQUIRE_EQUAL(sha3(EthashAux::get()->light(header)->data()), cacheHash);
|
||||||
|
|
||||||
#if TEST_FULL
|
#if TEST_FULL
|
||||||
unsigned fullSize(o["full_size"].get_int());
|
unsigned fullSize(o["full_size"].get_int());
|
||||||
|
45
net.cpp
45
net.cpp
@ -32,7 +32,13 @@ using namespace dev::p2p;
|
|||||||
namespace ba = boost::asio;
|
namespace ba = boost::asio;
|
||||||
namespace bi = ba::ip;
|
namespace bi = ba::ip;
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(net)
|
struct NetFixture
|
||||||
|
{
|
||||||
|
NetFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = true; }
|
||||||
|
~NetFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_FIXTURE_TEST_SUITE(net, NetFixture)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Only used for testing. Not useful beyond tests.
|
* Only used for testing. Not useful beyond tests.
|
||||||
@ -53,7 +59,7 @@ protected:
|
|||||||
struct TestNodeTable: public NodeTable
|
struct TestNodeTable: public NodeTable
|
||||||
{
|
{
|
||||||
/// Constructor
|
/// Constructor
|
||||||
TestNodeTable(ba::io_service& _io, KeyPair _alias, bi::address const& _addr, uint16_t _port = 30300): NodeTable(_io, _alias, _addr, _port) {}
|
TestNodeTable(ba::io_service& _io, KeyPair _alias, bi::address const& _addr, uint16_t _port = 30300): NodeTable(_io, _alias, NodeIPEndpoint(_addr, _port, _port)) {}
|
||||||
|
|
||||||
static std::vector<std::pair<KeyPair,unsigned>> createTestNodes(unsigned _count)
|
static std::vector<std::pair<KeyPair,unsigned>> createTestNodes(unsigned _count)
|
||||||
{
|
{
|
||||||
@ -93,7 +99,7 @@ struct TestNodeTable: public NodeTable
|
|||||||
// manually add node for test
|
// manually add node for test
|
||||||
{
|
{
|
||||||
Guard ln(x_nodes);
|
Guard ln(x_nodes);
|
||||||
shared_ptr<NodeEntry> node(new NodeEntry(m_node, n.first.pub(), NodeIPEndpoint(bi::udp::endpoint(ourIp, n.second), bi::tcp::endpoint(ourIp, n.second))));
|
shared_ptr<NodeEntry> node(new NodeEntry(m_node, n.first.pub(), NodeIPEndpoint(ourIp, n.second, n.second)));
|
||||||
node->pending = false;
|
node->pending = false;
|
||||||
m_nodes[node->id] = node;
|
m_nodes[node->id] = node;
|
||||||
}
|
}
|
||||||
@ -240,7 +246,7 @@ BOOST_AUTO_TEST_CASE(neighboursPacketLength)
|
|||||||
{
|
{
|
||||||
Neighbours::Node node;
|
Neighbours::Node node;
|
||||||
node.ipAddress = boost::asio::ip::address::from_string("200.200.200.200").to_string();
|
node.ipAddress = boost::asio::ip::address::from_string("200.200.200.200").to_string();
|
||||||
node.port = testNodes[i].second;
|
node.udpPort = testNodes[i].second;
|
||||||
node.node = testNodes[i].first.pub();
|
node.node = testNodes[i].first.pub();
|
||||||
out.nodes.push_back(node);
|
out.nodes.push_back(node);
|
||||||
}
|
}
|
||||||
@ -261,7 +267,7 @@ BOOST_AUTO_TEST_CASE(test_neighbours_packet)
|
|||||||
{
|
{
|
||||||
Neighbours::Node node;
|
Neighbours::Node node;
|
||||||
node.ipAddress = boost::asio::ip::address::from_string("127.0.0.1").to_string();
|
node.ipAddress = boost::asio::ip::address::from_string("127.0.0.1").to_string();
|
||||||
node.port = n.second;
|
node.udpPort = n.second;
|
||||||
node.node = n.first.pub();
|
node.node = n.first.pub();
|
||||||
out.nodes.push_back(node);
|
out.nodes.push_back(node);
|
||||||
}
|
}
|
||||||
@ -273,7 +279,7 @@ BOOST_AUTO_TEST_CASE(test_neighbours_packet)
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
for (auto n: in.nodes)
|
for (auto n: in.nodes)
|
||||||
{
|
{
|
||||||
BOOST_REQUIRE_EQUAL(testNodes[count].second, n.port);
|
BOOST_REQUIRE_EQUAL(testNodes[count].second, n.udpPort);
|
||||||
BOOST_REQUIRE_EQUAL(testNodes[count].first.pub(), n.node);
|
BOOST_REQUIRE_EQUAL(testNodes[count].first.pub(), n.node);
|
||||||
BOOST_REQUIRE_EQUAL(sha3(testNodes[count].first.pub()), sha3(n.node));
|
BOOST_REQUIRE_EQUAL(sha3(testNodes[count].first.pub()), sha3(n.node));
|
||||||
count++;
|
count++;
|
||||||
@ -337,3 +343,30 @@ BOOST_AUTO_TEST_CASE(test_udp_once)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(netTypes)
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(unspecifiedNode)
|
||||||
|
{
|
||||||
|
Node n = UnspecifiedNode;
|
||||||
|
BOOST_REQUIRE(!n);
|
||||||
|
|
||||||
|
Node node(Public(sha3("0")), NodeIPEndpoint(bi::address(), 0, 0));
|
||||||
|
BOOST_REQUIRE(node);
|
||||||
|
BOOST_REQUIRE(n != node);
|
||||||
|
|
||||||
|
Node nodeEq(Public(sha3("0")), NodeIPEndpoint(bi::address(), 0, 0));
|
||||||
|
BOOST_REQUIRE_EQUAL(node, nodeEq);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(nodeTableReturnsUnspecifiedNode)
|
||||||
|
{
|
||||||
|
ba::io_service io;
|
||||||
|
NodeTable t(io, KeyPair::create(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), 30303, 30303));
|
||||||
|
if (Node n = t.node(NodeId()))
|
||||||
|
BOOST_REQUIRE(false);
|
||||||
|
else
|
||||||
|
BOOST_REQUIRE(n == UnspecifiedNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
47
peer.cpp
47
peer.cpp
@ -28,7 +28,13 @@ using namespace std;
|
|||||||
using namespace dev;
|
using namespace dev;
|
||||||
using namespace dev::p2p;
|
using namespace dev::p2p;
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(p2p)
|
struct P2PFixture
|
||||||
|
{
|
||||||
|
P2PFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = true; }
|
||||||
|
~P2PFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_FIXTURE_TEST_SUITE(p2p, P2PFixture)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(host)
|
BOOST_AUTO_TEST_CASE(host)
|
||||||
{
|
{
|
||||||
@ -45,7 +51,7 @@ BOOST_AUTO_TEST_CASE(host)
|
|||||||
auto node2 = host2.id();
|
auto node2 = host2.id();
|
||||||
host2.start();
|
host2.start();
|
||||||
|
|
||||||
host1.addNode(node2, bi::address::from_string("127.0.0.1"), host2prefs.listenPort, host2prefs.listenPort);
|
host1.addNode(node2, NodeIPEndpoint(bi::address::from_string("127.0.0.1"), host2prefs.listenPort, host2prefs.listenPort));
|
||||||
|
|
||||||
this_thread::sleep_for(chrono::seconds(3));
|
this_thread::sleep_for(chrono::seconds(3));
|
||||||
|
|
||||||
@ -82,11 +88,11 @@ BOOST_AUTO_TEST_CASE(save_nodes)
|
|||||||
|
|
||||||
Host& host = *hosts.front();
|
Host& host = *hosts.front();
|
||||||
for (auto const& h: hosts)
|
for (auto const& h: hosts)
|
||||||
host.addNode(h->id(), bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort());
|
host.addNode(h->id(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort()));
|
||||||
|
|
||||||
Host& host2 = *hosts.back();
|
Host& host2 = *hosts.back();
|
||||||
for (auto const& h: hosts)
|
for (auto const& h: hosts)
|
||||||
host2.addNode(h->id(), bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort());
|
host2.addNode(h->id(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort()));
|
||||||
|
|
||||||
this_thread::sleep_for(chrono::milliseconds(2000));
|
this_thread::sleep_for(chrono::milliseconds(2000));
|
||||||
bytes firstHostNetwork(host.saveNetwork());
|
bytes firstHostNetwork(host.saveNetwork());
|
||||||
@ -101,7 +107,36 @@ BOOST_AUTO_TEST_CASE(save_nodes)
|
|||||||
BOOST_REQUIRE(r.itemCount() == 3);
|
BOOST_REQUIRE(r.itemCount() == 3);
|
||||||
BOOST_REQUIRE(r[0].toInt<unsigned>() == dev::p2p::c_protocolVersion);
|
BOOST_REQUIRE(r[0].toInt<unsigned>() == dev::p2p::c_protocolVersion);
|
||||||
BOOST_REQUIRE_EQUAL(r[1].toBytes().size(), 32); // secret
|
BOOST_REQUIRE_EQUAL(r[1].toBytes().size(), 32); // secret
|
||||||
BOOST_REQUIRE_EQUAL(r[2].itemCount(), 5);
|
BOOST_REQUIRE(r[2].itemCount() >= 5);
|
||||||
|
|
||||||
|
for (auto i: r[2])
|
||||||
|
{
|
||||||
|
BOOST_REQUIRE(i.itemCount() == 3 || i.itemCount() == 10);
|
||||||
|
BOOST_REQUIRE(i[0].itemCount() == 4 || i[0].itemCount() == 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(peerTypes)
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(emptySharedPeer)
|
||||||
|
{
|
||||||
|
shared_ptr<Peer> p;
|
||||||
|
BOOST_REQUIRE(!p);
|
||||||
|
|
||||||
|
std::map<NodeId, std::shared_ptr<Peer>> peers;
|
||||||
|
p = peers[NodeId()];
|
||||||
|
BOOST_REQUIRE(!p);
|
||||||
|
|
||||||
|
p.reset(new Peer(UnspecifiedNode));
|
||||||
|
BOOST_REQUIRE(!p->id);
|
||||||
|
BOOST_REQUIRE(!*p);
|
||||||
|
|
||||||
|
p.reset(new Peer(Node(NodeId(EmptySHA3), UnspecifiedNodeIPEndpoint)));
|
||||||
|
BOOST_REQUIRE(!(!*p));
|
||||||
|
BOOST_REQUIRE(*p);
|
||||||
|
BOOST_REQUIRE(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
@ -131,7 +166,7 @@ int peerTest(int argc, char** argv)
|
|||||||
Host ph("Test", NetworkPreferences(listenPort));
|
Host ph("Test", NetworkPreferences(listenPort));
|
||||||
|
|
||||||
if (!remoteHost.empty() && !remoteAlias)
|
if (!remoteHost.empty() && !remoteAlias)
|
||||||
ph.addNode(remoteAlias, bi::address::from_string(remoteHost), remotePort, remotePort);
|
ph.addNode(remoteAlias, NodeIPEndpoint(bi::address::from_string(remoteHost), remotePort, remotePort));
|
||||||
|
|
||||||
this_thread::sleep_for(chrono::milliseconds(200));
|
this_thread::sleep_for(chrono::milliseconds(200));
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
},
|
},
|
||||||
"transaction" :
|
"transaction" :
|
||||||
{
|
{
|
||||||
"//" : "run(int256)",
|
"data" : "run(int256)",
|
||||||
"data" : "0x61a47706000000000000000000000000000000000000000000000000000000000000c350",
|
"data" : "0x61a47706000000000000000000000000000000000000000000000000000000000000c350",
|
||||||
"gasLimit" : "904+68*x+e",
|
"gasLimit" : "904+68*x+e",
|
||||||
"gasLimit" : "350000000",
|
"gasLimit" : "350000000",
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -42,7 +42,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -85,7 +85,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -128,7 +128,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -167,7 +167,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -207,7 +207,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -280,7 +280,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1100",
|
"currentGasLimit" : "1100",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -316,7 +316,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "22000",
|
"currentGasLimit" : "22000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -370,7 +370,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "47766",
|
"currentGasLimit" : "47766",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -424,7 +424,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "220000",
|
"currentGasLimit" : "220000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -479,7 +479,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "21100",
|
"currentGasLimit" : "21100",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -515,7 +515,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "21100",
|
"currentGasLimit" : "21100",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -552,7 +552,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -609,7 +609,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "100000",
|
"currentGasLimit" : "100000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -678,7 +678,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -761,7 +761,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -834,7 +834,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -925,7 +925,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1003,7 +1003,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1056,7 +1056,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1110,7 +1110,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1170,7 +1170,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1226,7 +1226,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "100000",
|
"currentGasLimit" : "100000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1284,7 +1284,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1333,7 +1333,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"post" : {
|
"post" : {
|
||||||
@ -1381,7 +1381,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000",
|
"currentGasLimit" : "1000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1417,7 +1417,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "100000000",
|
"currentGasLimit" : "100000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1453,7 +1453,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1490,7 +1490,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1533,7 +1533,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "100000000",
|
"currentGasLimit" : "100000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1570,7 +1570,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "10000000",
|
"currentGasLimit" : "10000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1613,7 +1613,7 @@
|
|||||||
"currentGasLimit" : "(2**256)-1",
|
"currentGasLimit" : "(2**256)-1",
|
||||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1655,7 +1655,7 @@
|
|||||||
"currentGasLimit" : "(2**256)-1",
|
"currentGasLimit" : "(2**256)-1",
|
||||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1695,7 +1695,7 @@
|
|||||||
"currentGasLimit" : "(2**256)-1",
|
"currentGasLimit" : "(2**256)-1",
|
||||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1733,7 +1733,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "100000",
|
"currentGasLimit" : "100000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1769,7 +1769,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000000000",
|
"currentGasLimit" : "1000000000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1806,7 +1806,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000000000",
|
"currentGasLimit" : "1000000000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1846,7 +1846,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000000000",
|
"currentGasLimit" : "1000000000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
@ -1894,7 +1894,7 @@
|
|||||||
"currentDifficulty" : "45678256",
|
"currentDifficulty" : "45678256",
|
||||||
"currentGasLimit" : "1000000000000",
|
"currentGasLimit" : "1000000000000",
|
||||||
"currentNumber" : "0",
|
"currentNumber" : "0",
|
||||||
"currentTimestamp" : 1,
|
"currentTimestamp" : "1",
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
},
|
},
|
||||||
"expect" : {
|
"expect" : {
|
||||||
|
@ -51,7 +51,8 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
if (!txFromFields.signature().isValid())
|
if (!txFromFields.signature().isValid())
|
||||||
BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("transaction from RLP signature is invalid") );
|
BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("transaction from RLP signature is invalid") );
|
||||||
|
|
||||||
o["sender"] = toString(txFromFields.sender());
|
o["sender"] = toString(txFromFields.sender());
|
||||||
|
o["transaction"] = ImportTest::makeAllFieldsHex(tObj);
|
||||||
}
|
}
|
||||||
catch(Exception const& _e)
|
catch(Exception const& _e)
|
||||||
{
|
{
|
||||||
|
File diff suppressed because one or more lines are too long
@ -176,7 +176,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"SenderTest" : {
|
"SenderTest" : {
|
||||||
"//" : "sender 0f65fe9276bc9a24ae7083ae28e2660ef72df99e",
|
"senderExpect" : "sender 0f65fe9276bc9a24ae7083ae28e2660ef72df99e",
|
||||||
"expect" : "valid",
|
"expect" : "valid",
|
||||||
"transaction" :
|
"transaction" :
|
||||||
{
|
{
|
||||||
|
4
vm.cpp
4
vm.cpp
@ -85,7 +85,7 @@ void FakeExtVM::reset(u256 _myBalance, u256 _myNonce, map<u256, u256> const& _st
|
|||||||
|
|
||||||
void FakeExtVM::push(mObject& o, string const& _n, u256 _v)
|
void FakeExtVM::push(mObject& o, string const& _n, u256 _v)
|
||||||
{
|
{
|
||||||
o[_n] = toString(_v);
|
o[_n] = "0x" + toHex(toCompactBigEndian(_v));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeExtVM::push(mArray& a, u256 _v)
|
void FakeExtVM::push(mArray& a, u256 _v)
|
||||||
@ -448,7 +448,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(VMTests)
|
BOOST_AUTO_TEST_SUITE(VMTests)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(vm_tests)
|
BOOST_AUTO_TEST_CASE(vmtests)
|
||||||
{
|
{
|
||||||
dev::test::executeTests("vmtests", "/VMTests", dev::test::doVMTests);
|
dev::test::executeTests("vmtests", "/VMTests", dev::test::doVMTests);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user