From fe210166867ebb5500450dda6a4cdeb1887b5e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 16 Oct 2014 18:19:58 +0200 Subject: [PATCH 1/4] test/rlp bugfix: expectedText can be empty --- rlp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rlp.cpp b/rlp.cpp index 95d40ada7..69360ad66 100644 --- a/rlp.cpp +++ b/rlp.cpp @@ -79,7 +79,7 @@ namespace dev if ( v.type() == js::str_type ) { const std::string& expectedText = v.get_str(); - if ( expectedText.front() == '#' ) + if ( !expectedText.empty() && expectedText.front() == '#' ) { // Deal with bigint instead of a raw string std::string bigIntStr = expectedText.substr(1,expectedText.length()-1); From 6d3cf5fad9e8e5b894177ba617eeb1ba9203771e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 16 Oct 2014 18:20:49 +0200 Subject: [PATCH 2/4] Prepare VM test engine for running JIT-ed tests --- vm.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vm.cpp b/vm.cpp index cc87866df..d77906731 100644 --- a/vm.cpp +++ b/vm.cpp @@ -493,7 +493,6 @@ void doTests(json_spirit::mValue& v, bool _fillin) BOOST_REQUIRE(o.count("pre") > 0); BOOST_REQUIRE(o.count("exec") > 0); - VM vm; dev::test::FakeExtVM fev; fev.importEnv(o["env"].get_obj()); fev.importState(o["pre"].get_obj()); @@ -508,11 +507,13 @@ void doTests(json_spirit::mValue& v, bool _fillin) fev.code = &fev.thisTxCode; } - vm.reset(fev.gas); bytes output; + u256 gas; try { - output = vm.go(fev).toBytes(); + VM vm(fev.gas); + output = vm.go(fev).toVector(); + gas = vm.gas(); // Get the remaining gas } catch (Exception const& _e) { @@ -549,7 +550,7 @@ void doTests(json_spirit::mValue& v, bool _fillin) o["post"] = mValue(fev.exportState()); o["callcreates"] = fev.exportCallCreates(); o["out"] = "0x" + toHex(output); - fev.push(o, "gas", vm.gas()); + fev.push(o, "gas", gas); } else { @@ -573,7 +574,7 @@ void doTests(json_spirit::mValue& v, bool _fillin) else BOOST_CHECK(output == fromHex(o["out"].get_str())); - BOOST_CHECK(test.toInt(o["gas"]) == vm.gas()); + BOOST_CHECK(test.toInt(o["gas"]) == gas); BOOST_CHECK(test.addresses == fev.addresses); BOOST_CHECK(test.callcreates == fev.callcreates); } From 165e9780f7b79bdead6eb6af7f5a857398159eb2 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Thu, 16 Oct 2014 19:43:48 +0300 Subject: [PATCH 3/4] Correct namespace for a few things in devcrypto. Added lower_bound to TrieDB. Added nextActiveAddress to State. --- MemTrie.cpp | 4 ++-- crypto.cpp | 2 +- hexPrefix.cpp | 1 - trie.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/MemTrie.cpp b/MemTrie.cpp index d654179f3..4879f2674 100644 --- a/MemTrie.cpp +++ b/MemTrie.cpp @@ -55,7 +55,7 @@ public: #endif /// 256-bit hash of the node - this is a SHA-3/256 hash of the RLP of the node. - h256 hash256() const { RLPStream s; makeRLP(s); return dev::eth::sha3(s.out()); } + h256 hash256() const { RLPStream s; makeRLP(s); return dev::sha3(s.out()); } bytes rlp() const { RLPStream s; makeRLP(s); return s.out(); } void mark() { m_hash256 = h256(); } @@ -200,7 +200,7 @@ void MemTrieNode::putRLP(RLPStream& _parentStream) const if (s.out().size() < 32) _parentStream.APPEND_CHILD(s.out()); else - _parentStream << dev::eth::sha3(s.out()); + _parentStream << dev::sha3(s.out()); } void TrieBranchNode::makeRLP(RLPStream& _intoStream) const diff --git a/crypto.cpp b/crypto.cpp index 55feb1a54..ebe3f81aa 100644 --- a/crypto.cpp +++ b/crypto.cpp @@ -150,7 +150,7 @@ int cryptoTest() int ret = secp256k1_ecdsa_recover_compact((byte const*)hmsg.data(), (int)hmsg.size(), (byte const*)sig64.data(), pubkey.data(), &pubkeylen, 0, (int)t.vrs.v - 27); pubkey.resize(pubkeylen); cout << "RECPUB: " << dec << ret << " " << pubkeylen << " " << toHex(pubkey) << endl; - cout << "SENDER: " << hex << toAddress(dev::eth::sha3(bytesConstRef(&pubkey).cropped(1))) << dec << endl; + cout << "SENDER: " << hex << toAddress(dev::sha3(bytesConstRef(&pubkey).cropped(1))) << dec << endl; } #endif return 0; diff --git a/hexPrefix.cpp b/hexPrefix.cpp index 6ced839dd..fb2fbc826 100644 --- a/hexPrefix.cpp +++ b/hexPrefix.cpp @@ -29,7 +29,6 @@ using namespace std; using namespace dev; -using namespace dev::eth; namespace js = json_spirit; BOOST_AUTO_TEST_CASE(hexPrefix_test) diff --git a/trie.cpp b/trie.cpp index fb74ebe20..899eb1f60 100644 --- a/trie.cpp +++ b/trie.cpp @@ -31,7 +31,6 @@ using namespace std; using namespace dev; -using namespace dev::eth; namespace js = json_spirit; @@ -236,6 +235,51 @@ BOOST_AUTO_TEST_CASE(moreTrieTests) } } +BOOST_AUTO_TEST_CASE(trieLowerBound) +{ + cnote << "Stress-testing Trie.lower_bound..."; + { + MemoryDB dm; + EnforceRefs e(dm, true); + GenericTrieDB d(&dm); + d.init(); // initialise as empty tree. + for (int a = 0; a < 20; ++a) + { + StringMap m; + for (int i = 0; i < 50; ++i) + { + auto k = randomWord(); + auto v = toString(i); + m[k] = v; + d.insert(k, v); + } + + for (auto i: d) + { + auto it = d.lower_bound(i.first); + for (auto iit = d.begin(); iit != d.end(); ++iit) + if ((*iit).first.toString() >= i.first.toString()) + { + BOOST_REQUIRE(it == iit); + break; + } + } + for (unsigned i = 0; i < 100; ++i) + { + auto k = randomWord(); + auto it = d.lower_bound(k); + for (auto iit = d.begin(); iit != d.end(); ++iit) + if ((*iit).first.toString() >= k) + { + BOOST_REQUIRE(it == iit); + break; + } + } + + } + } +} + BOOST_AUTO_TEST_CASE(trieStess) { cnote << "Stress-testing Trie..."; From b5bd1cc521471b740095e1b62d319909cb5d173d Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Thu, 16 Oct 2014 20:03:04 +0300 Subject: [PATCH 4/4] Add QtCreator code style. Fix warnings. Bad boy, Alex! --- TestHelperCrypto.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/TestHelperCrypto.h b/TestHelperCrypto.h index 6feeeb97f..cdc22ec31 100644 --- a/TestHelperCrypto.h +++ b/TestHelperCrypto.h @@ -22,11 +22,22 @@ #pragma once //#include + +#pragma warning(push) +#pragma warning(disable:4100 4244) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" +#pragma GCC diagnostic ignored "-Wextra" #include #include #include #include #include +#pragma warning(pop) +#pragma GCC diagnostic pop using namespace std; using namespace CryptoPP;