mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge branch 'develop' into p2p
This commit is contained in:
commit
682873ac97
74
AccountHolder.cpp
Normal file
74
AccountHolder.cpp
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
This file is part of cpp-ethereum.
|
||||||
|
|
||||||
|
cpp-ethereum is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
cpp-ethereum is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @author Christian R <c@ethdev.com>
|
||||||
|
* @date 2015
|
||||||
|
* Unit tests for the account holder used by the WebThreeStubServer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include <libweb3jsonrpc/AccountHolder.h>
|
||||||
|
|
||||||
|
namespace dev
|
||||||
|
{
|
||||||
|
namespace test
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(AccountHolderTest)
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(ProxyAccountUseCase)
|
||||||
|
{
|
||||||
|
AccountHolder h = AccountHolder(std::function<eth::Interface*()>());
|
||||||
|
BOOST_CHECK(h.getAllAccounts().empty());
|
||||||
|
BOOST_CHECK(h.getRealAccounts().empty());
|
||||||
|
Address addr("abababababababababababababababababababab");
|
||||||
|
Address addr2("abababababababababababababababababababab");
|
||||||
|
int id = h.addProxyAccount(addr);
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(id).empty());
|
||||||
|
// register it again
|
||||||
|
int secondID = h.addProxyAccount(addr);
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(secondID).empty());
|
||||||
|
|
||||||
|
eth::TransactionSkeleton t1;
|
||||||
|
eth::TransactionSkeleton t2;
|
||||||
|
t1.from = addr;
|
||||||
|
t1.data = fromHex("12345678");
|
||||||
|
t2.from = addr;
|
||||||
|
t2.data = fromHex("abcdef");
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(id).empty());
|
||||||
|
h.queueTransaction(t1);
|
||||||
|
BOOST_CHECK_EQUAL(1, h.getQueuedTransactions(id).size());
|
||||||
|
h.queueTransaction(t2);
|
||||||
|
BOOST_REQUIRE_EQUAL(2, h.getQueuedTransactions(id).size());
|
||||||
|
|
||||||
|
// second proxy should not see transactions
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(secondID).empty());
|
||||||
|
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(id)[0].data == t1.data);
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(id)[1].data == t2.data);
|
||||||
|
|
||||||
|
h.clearQueue(id);
|
||||||
|
BOOST_CHECK(h.getQueuedTransactions(id).empty());
|
||||||
|
// removing fails because it never existed
|
||||||
|
BOOST_CHECK(!h.removeProxyAccount(secondID));
|
||||||
|
BOOST_CHECK(h.removeProxyAccount(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,10 @@ aux_source_directory(. SRC_LIST)
|
|||||||
list(REMOVE_ITEM SRC_LIST "./createRandomTest.cpp")
|
list(REMOVE_ITEM SRC_LIST "./createRandomTest.cpp")
|
||||||
list(REMOVE_ITEM SRC_LIST "./checkRandomTest.cpp")
|
list(REMOVE_ITEM SRC_LIST "./checkRandomTest.cpp")
|
||||||
|
|
||||||
|
if (NOT JSONRPC)
|
||||||
|
list(REMOVE_ITEM SRC_LIST "./AccountHolder.cpp")
|
||||||
|
endif()
|
||||||
|
|
||||||
include_directories(BEFORE ${JSONCPP_INCLUDE_DIRS})
|
include_directories(BEFORE ${JSONCPP_INCLUDE_DIRS})
|
||||||
include_directories(BEFORE ..)
|
include_directories(BEFORE ..)
|
||||||
include_directories(${Boost_INCLUDE_DIRS})
|
include_directories(${Boost_INCLUDE_DIRS})
|
||||||
|
@ -1669,7 +1669,6 @@ BOOST_AUTO_TEST_CASE(value_insane)
|
|||||||
function test() { h = new helper(); }
|
function test() { h = new helper(); }
|
||||||
function sendAmount(uint amount) returns (uint256 bal) {
|
function sendAmount(uint amount) returns (uint256 bal) {
|
||||||
var x1 = h.getBalance.value;
|
var x1 = h.getBalance.value;
|
||||||
uint someStackElement = 20;
|
|
||||||
var x2 = x1(amount).gas;
|
var x2 = x1(amount).gas;
|
||||||
var x3 = x2(1000).value;
|
var x3 = x2(1000).value;
|
||||||
return x3(amount + 3)();// overwrite value
|
return x3(amount + 3)();// overwrite value
|
||||||
@ -2138,7 +2137,7 @@ BOOST_AUTO_TEST_CASE(event_lots_of_data)
|
|||||||
callContractFunctionWithValue("deposit(hash256)", value, id);
|
callContractFunctionWithValue("deposit(hash256)", value, id);
|
||||||
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
|
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
|
||||||
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
|
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
|
||||||
BOOST_CHECK(m_logs[0].data == encodeArgs(m_sender, id, value, true));
|
BOOST_CHECK(m_logs[0].data == encodeArgs((u160)m_sender, id, value, true));
|
||||||
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
|
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
|
||||||
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::sha3(string("Deposit(address,hash256,uint256,bool)")));
|
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::sha3(string("Deposit(address,hash256,uint256,bool)")));
|
||||||
}
|
}
|
||||||
@ -2479,6 +2478,42 @@ BOOST_AUTO_TEST_CASE(struct_copy)
|
|||||||
BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(0, 0, 0, 0));
|
BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(0, 0, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(struct_containing_bytes_copy_and_delete)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract c {
|
||||||
|
struct Struct { uint a; bytes data; uint b; }
|
||||||
|
Struct data1;
|
||||||
|
Struct data2;
|
||||||
|
function set(uint _a, bytes _data, uint _b) external returns (bool) {
|
||||||
|
data1.a = _a;
|
||||||
|
data1.b = _b;
|
||||||
|
data1.data = _data;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function copy() returns (bool) {
|
||||||
|
data1 = data2;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function del() returns (bool) {
|
||||||
|
delete data1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
string data = "123456789012345678901234567890123";
|
||||||
|
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", u256(data.length()), 12, data, 13) == encodeArgs(true));
|
||||||
|
BOOST_CHECK(!m_state.storage(m_contractAddress).empty());
|
||||||
|
BOOST_CHECK(callContractFunction("copy()") == encodeArgs(true));
|
||||||
|
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", u256(data.length()), 12, data, 13) == encodeArgs(true));
|
||||||
|
BOOST_CHECK(!m_state.storage(m_contractAddress).empty());
|
||||||
|
BOOST_CHECK(callContractFunction("del()") == encodeArgs(true));
|
||||||
|
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(struct_copy_via_local)
|
BOOST_AUTO_TEST_CASE(struct_copy_via_local)
|
||||||
{
|
{
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
@ -2534,6 +2569,61 @@ BOOST_AUTO_TEST_CASE(constructing_enums_from_ints)
|
|||||||
BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
|
BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(inline_member_init)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract test {
|
||||||
|
function test(){
|
||||||
|
m_b = 6;
|
||||||
|
m_c = 8;
|
||||||
|
}
|
||||||
|
uint m_a = 5;
|
||||||
|
uint m_b;
|
||||||
|
uint m_c = 7;
|
||||||
|
function get() returns (uint a, uint b, uint c){
|
||||||
|
a = m_a;
|
||||||
|
b = m_b;
|
||||||
|
c = m_c;
|
||||||
|
}
|
||||||
|
})";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("get()") == encodeArgs(5, 6, 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(inline_member_init_inheritence)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract Base {
|
||||||
|
function Base(){}
|
||||||
|
uint m_base = 5;
|
||||||
|
function getBMember() returns (uint i) { return m_base; }
|
||||||
|
}
|
||||||
|
contract Derived is Base {
|
||||||
|
function Derived(){}
|
||||||
|
uint m_derived = 6;
|
||||||
|
function getDMember() returns (uint i) { return m_derived; }
|
||||||
|
})";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("getBMember()") == encodeArgs(5));
|
||||||
|
BOOST_CHECK(callContractFunction("getDMember()") == encodeArgs(6));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(inline_member_init_inheritence_without_constructor)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract Base {
|
||||||
|
uint m_base = 5;
|
||||||
|
function getBMember() returns (uint i) { return m_base; }
|
||||||
|
}
|
||||||
|
contract Derived is Base {
|
||||||
|
uint m_derived = 6;
|
||||||
|
function getDMember() returns (uint i) { return m_derived; }
|
||||||
|
})";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("getBMember()") == encodeArgs(5));
|
||||||
|
BOOST_CHECK(callContractFunction("getDMember()") == encodeArgs(6));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(external_function)
|
BOOST_AUTO_TEST_CASE(external_function)
|
||||||
{
|
{
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
@ -2577,6 +2667,107 @@ BOOST_AUTO_TEST_CASE(bytes_in_arguments)
|
|||||||
== encodeArgs(12, (8 + 9) * 3, 13, u256(innercalldata1.length())));
|
== encodeArgs(12, (8 + 9) * 3, 13, u256(innercalldata1.length())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(fixed_arrays_in_storage)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract c {
|
||||||
|
struct Data { uint x; uint y; }
|
||||||
|
Data[2**10] data;
|
||||||
|
uint[2**10 + 3] ids;
|
||||||
|
function setIDStatic(uint id) { ids[2] = id; }
|
||||||
|
function setID(uint index, uint id) { ids[index] = id; }
|
||||||
|
function setData(uint index, uint x, uint y) { data[index].x = x; data[index].y = y; }
|
||||||
|
function getID(uint index) returns (uint) { return ids[index]; }
|
||||||
|
function getData(uint index) returns (uint x, uint y) { x = data[index].x; y = data[index].y; }
|
||||||
|
function getLengths() returns (uint l1, uint l2) { l1 = data.length; l2 = ids.length; }
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("setIDStatic(uint256)", 11) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getID(uint256)", 2) == encodeArgs(11));
|
||||||
|
BOOST_CHECK(callContractFunction("setID(uint256,uint256)", 7, 8) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getID(uint256)", 7) == encodeArgs(8));
|
||||||
|
BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 7, 8, 9) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 8, 10, 11) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getData(uint256)", 7) == encodeArgs(8, 9));
|
||||||
|
BOOST_CHECK(callContractFunction("getData(uint256)", 8) == encodeArgs(10, 11));
|
||||||
|
BOOST_CHECK(callContractFunction("getLengths()") == encodeArgs(u256(1) << 10, (u256(1) << 10) + 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(dynamic_arrays_in_storage)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract c {
|
||||||
|
struct Data { uint x; uint y; }
|
||||||
|
Data[] data;
|
||||||
|
uint[] ids;
|
||||||
|
function setIDStatic(uint id) { ids[2] = id; }
|
||||||
|
function setID(uint index, uint id) { ids[index] = id; }
|
||||||
|
function setData(uint index, uint x, uint y) { data[index].x = x; data[index].y = y; }
|
||||||
|
function getID(uint index) returns (uint) { return ids[index]; }
|
||||||
|
function getData(uint index) returns (uint x, uint y) { x = data[index].x; y = data[index].y; }
|
||||||
|
function getLengths() returns (uint l1, uint l2) { l1 = data.length; l2 = ids.length; }
|
||||||
|
function setLengths(uint l1, uint l2) { data.length = l1; ids.length = l2; }
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("getLengths()") == encodeArgs(0, 0));
|
||||||
|
BOOST_CHECK(callContractFunction("setLengths(uint256,uint256)", 48, 49) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getLengths()") == encodeArgs(48, 49));
|
||||||
|
BOOST_CHECK(callContractFunction("setIDStatic(uint256)", 11) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getID(uint256)", 2) == encodeArgs(11));
|
||||||
|
BOOST_CHECK(callContractFunction("setID(uint256,uint256)", 7, 8) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getID(uint256)", 7) == encodeArgs(8));
|
||||||
|
BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 7, 8, 9) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 8, 10, 11) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("getData(uint256)", 7) == encodeArgs(8, 9));
|
||||||
|
BOOST_CHECK(callContractFunction("getData(uint256)", 8) == encodeArgs(10, 11));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(fixed_out_of_bounds_array_access)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract c {
|
||||||
|
uint[4] data;
|
||||||
|
function set(uint index, uint value) returns (bool) { data[index] = value; return true; }
|
||||||
|
function get(uint index) returns (uint) { return data[index]; }
|
||||||
|
function length() returns (uint) { return data.length; }
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,uint256)", 3, 4) == encodeArgs(true));
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,uint256)", 4, 5) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,uint256)", 400, 5) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("get(uint256)", 3) == encodeArgs(4));
|
||||||
|
BOOST_CHECK(callContractFunction("get(uint256)", 4) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("get(uint256)", 400) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(dynamic_out_of_bounds_array_access)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract c {
|
||||||
|
uint[] data;
|
||||||
|
function enlarge(uint amount) returns (uint) { return data.length += amount; }
|
||||||
|
function set(uint index, uint value) returns (bool) { data[index] = value; return true; }
|
||||||
|
function get(uint index) returns (uint) { return data[index]; }
|
||||||
|
function length() returns (uint) { return data.length; }
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("length()") == encodeArgs(0));
|
||||||
|
BOOST_CHECK(callContractFunction("get(uint256)", 3) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("enlarge(uint256)", 4) == encodeArgs(4));
|
||||||
|
BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,uint256)", 3, 4) == encodeArgs(true));
|
||||||
|
BOOST_CHECK(callContractFunction("get(uint256)", 3) == encodeArgs(4));
|
||||||
|
BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
|
||||||
|
BOOST_CHECK(callContractFunction("set(uint256,uint256)", 4, 8) == bytes());
|
||||||
|
BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -470,7 +470,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_indirect)
|
|||||||
BOOST_AUTO_TEST_CASE(illegal_override_visibility)
|
BOOST_AUTO_TEST_CASE(illegal_override_visibility)
|
||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract B { function f() protected {} }
|
contract B { function f() internal {} }
|
||||||
contract C is B { function f() public {} }
|
contract C is B { function f() public {} }
|
||||||
)";
|
)";
|
||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
||||||
@ -706,7 +706,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
|
|||||||
" uint64(2);\n"
|
" uint64(2);\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"uint256 private foo;\n"
|
"uint256 private foo;\n"
|
||||||
"uint256 protected bar;\n"
|
"uint256 internal bar;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
ASTPointer<SourceUnit> source;
|
ASTPointer<SourceUnit> source;
|
||||||
@ -717,7 +717,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
|
|||||||
function = retrieveFunctionBySignature(contract, "foo()");
|
function = retrieveFunctionBySignature(contract, "foo()");
|
||||||
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a private variable should not exist");
|
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a private variable should not exist");
|
||||||
function = retrieveFunctionBySignature(contract, "bar()");
|
function = retrieveFunctionBySignature(contract, "bar()");
|
||||||
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a protected variable should not exist");
|
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of an internal variable should not exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(fallback_function)
|
BOOST_AUTO_TEST_CASE(fallback_function)
|
||||||
@ -832,11 +832,11 @@ BOOST_AUTO_TEST_CASE(access_to_default_function_visibility)
|
|||||||
BOOST_CHECK_NO_THROW(parseTextAndResolveNames(text));
|
BOOST_CHECK_NO_THROW(parseTextAndResolveNames(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(access_to_protected_function)
|
BOOST_AUTO_TEST_CASE(access_to_internal_function)
|
||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract c {
|
contract c {
|
||||||
function f() protected {}
|
function f() internal {}
|
||||||
}
|
}
|
||||||
contract d {
|
contract d {
|
||||||
function g() { c(0).f(); }
|
function g() { c(0).f(); }
|
||||||
@ -856,7 +856,7 @@ BOOST_AUTO_TEST_CASE(access_to_default_state_variable_visibility)
|
|||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(access_to_protected_state_variable)
|
BOOST_AUTO_TEST_CASE(access_to_internal_state_variable)
|
||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract c {
|
contract c {
|
||||||
@ -1163,6 +1163,28 @@ BOOST_AUTO_TEST_CASE(external_argument_delete)
|
|||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
|
BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(test_for_bug_override_function_with_bytearray_type)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract Vehicle {
|
||||||
|
function f(bytes _a) external returns (uint256 r) {r = 1;}
|
||||||
|
}
|
||||||
|
contract Bike is Vehicle {
|
||||||
|
function f(bytes _a) external returns (uint256 r) {r = 42;}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
BOOST_CHECK_NO_THROW(parseTextAndResolveNamesWithChecks(sourceCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(array_with_nonconstant_length)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract c {
|
||||||
|
function f(uint a) { uint8[a] x; }
|
||||||
|
})";
|
||||||
|
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -480,6 +480,18 @@ BOOST_AUTO_TEST_CASE(statement_starting_with_type_conversion)
|
|||||||
char const* text = "contract test {\n"
|
char const* text = "contract test {\n"
|
||||||
" function fun() {\n"
|
" function fun() {\n"
|
||||||
" uint64(2);\n"
|
" uint64(2);\n"
|
||||||
|
" uint64[7](3);\n"
|
||||||
|
" uint64[](3);\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n";
|
||||||
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(type_conversion_to_dynamic_array)
|
||||||
|
{
|
||||||
|
char const* text = "contract test {\n"
|
||||||
|
" function fun() {\n"
|
||||||
|
" var x = uint64[](3);\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
BOOST_CHECK_NO_THROW(parseText(text));
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
@ -651,13 +663,13 @@ BOOST_AUTO_TEST_CASE(visibility_specifiers)
|
|||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract c {
|
contract c {
|
||||||
uint private a;
|
uint private a;
|
||||||
uint protected b;
|
uint internal b;
|
||||||
uint public c;
|
uint public c;
|
||||||
uint d;
|
uint d;
|
||||||
function f() {}
|
function f() {}
|
||||||
function f_priv() private {}
|
function f_priv() private {}
|
||||||
function f_public() public {}
|
function f_public() public {}
|
||||||
function f_protected() protected {}
|
function f_internal() internal {}
|
||||||
})";
|
})";
|
||||||
BOOST_CHECK_NO_THROW(parseText(text));
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
}
|
}
|
||||||
@ -666,7 +678,7 @@ BOOST_AUTO_TEST_CASE(multiple_visibility_specifiers)
|
|||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract c {
|
contract c {
|
||||||
uint private protected a;
|
uint private internal a;
|
||||||
})";
|
})";
|
||||||
BOOST_CHECK_THROW(parseText(text), ParserError);
|
BOOST_CHECK_THROW(parseText(text), ParserError);
|
||||||
}
|
}
|
||||||
@ -753,6 +765,45 @@ BOOST_AUTO_TEST_CASE(external_variable)
|
|||||||
BOOST_CHECK_THROW(parseText(text), ParserError);
|
BOOST_CHECK_THROW(parseText(text), ParserError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(arrays_in_storage)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract c {
|
||||||
|
uint[10] a;
|
||||||
|
uint[] a2;
|
||||||
|
struct x { uint[2**20] b; y[0] c; }
|
||||||
|
struct y { uint d; mapping(uint=>x)[] e; }
|
||||||
|
})";
|
||||||
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(arrays_in_events)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract c {
|
||||||
|
event e(uint[10] a, string7[8] indexed b, c[3] x);
|
||||||
|
})";
|
||||||
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(arrays_in_expressions)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract c {
|
||||||
|
function f() { c[10] a = 7; uint8[10 * 2] x; }
|
||||||
|
})";
|
||||||
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(multi_arrays)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract c {
|
||||||
|
mapping(uint => mapping(uint => int8)[8][][9])[] x;
|
||||||
|
})";
|
||||||
|
BOOST_CHECK_NO_THROW(parseText(text));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -475,11 +475,11 @@ void executeTests(const string& _name, const string& _testPathAppendix, std::fun
|
|||||||
}
|
}
|
||||||
catch (Exception const& _e)
|
catch (Exception const& _e)
|
||||||
{
|
{
|
||||||
BOOST_ERROR("Failed test with Exception: " << diagnostic_information(_e));
|
BOOST_ERROR("Failed filling test with Exception: " << diagnostic_information(_e));
|
||||||
}
|
}
|
||||||
catch (std::exception const& _e)
|
catch (std::exception const& _e)
|
||||||
{
|
{
|
||||||
BOOST_ERROR("Failed test with Exception: " << _e.what());
|
BOOST_ERROR("Failed filling test with Exception: " << _e.what());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -267,7 +267,7 @@
|
|||||||
{
|
{
|
||||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87": {
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87": {
|
||||||
"balance": "0",
|
"balance": "0",
|
||||||
"nonce": "0",
|
"nonce": "40",
|
||||||
"code": "{[[ 2 ]](ADDRESS)(CODECOPY 0 0 32)(CREATE 0 0 32)}",
|
"code": "{[[ 2 ]](ADDRESS)(CODECOPY 0 0 32)(CREATE 0 0 32)}",
|
||||||
"storage": {}
|
"storage": {}
|
||||||
},
|
},
|
||||||
@ -489,5 +489,83 @@
|
|||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
"value" : "0"
|
"value" : "0"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"ReturnTest" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "10000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"code" : "{(CALL 2000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 30 1 31 1) (RETURN 30 2)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"code" : "{(MSTORE 0 0x15) (RETURN 31 1)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "5000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"ReturnTest2" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"code" : "{(MSTORE 0 0x15)(CALL 7000 0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b 0 0 32 32 32) (RETURN 0 64)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"code" : "{(MSTORE 0 (MUL 3 (CALLDATALOAD 0)))(RETURN 0 32)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "15000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,9 @@
|
|||||||
"//" : " if (!testStructuresAndVariabless()) ",
|
"//" : " if (!testStructuresAndVariabless()) ",
|
||||||
"//" : " res = hash(int(res) + int(0x0000f00000000000000000000000000000000000000000000000000000000000)); ",
|
"//" : " res = hash(int(res) + int(0x0000f00000000000000000000000000000000000000000000000000000000000)); ",
|
||||||
"//" : " ",
|
"//" : " ",
|
||||||
|
"//" : " if (!testCryptographicFunctions()) ",
|
||||||
|
"//" : " res = hash(int(res) + int(0x00000f0000000000000000000000000000000000000000000000000000000000)); ",
|
||||||
|
"//" : " ",
|
||||||
"//" : " //Tested 27.01.2015 ",
|
"//" : " //Tested 27.01.2015 ",
|
||||||
"//" : " //should run out of gas ",
|
"//" : " //should run out of gas ",
|
||||||
"//" : " //if (!testInfiniteLoop()) ",
|
"//" : " //if (!testInfiniteLoop()) ",
|
||||||
@ -83,6 +86,21 @@
|
|||||||
"//" : " // res = hash(int(res) + int(0x0000000000000000000000000000000000000000000000000000000000000000)); ",
|
"//" : " // res = hash(int(res) + int(0x0000000000000000000000000000000000000000000000000000000000000000)); ",
|
||||||
"//" : " } ",
|
"//" : " } ",
|
||||||
"//" : " ",
|
"//" : " ",
|
||||||
|
"//" : " function testCryptographicFunctions() returns (bool res) ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " res = true; ",
|
||||||
|
"//" : " if (sha3('teststring') != 0x43c4b4524adb81e4e9a5c4648a98e9d320e3908ac5b6c889144b642cd08ae16d) ",
|
||||||
|
"//" : " return false; ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " if (sha256('teststring') != 0x3c8727e019a42b444667a587b6001251becadabbb36bfed8087a92c18882d111) ",
|
||||||
|
"//" : " return false; ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " if (ripemd160('teststring') != 0xcd566972b5e50104011a92b59fa8e0b1234851ae) ",
|
||||||
|
"//" : " return false; ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " //ecrecover ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : " ",
|
||||||
"//" : " function testStructuresAndVariabless() returns (bool res) ",
|
"//" : " function testStructuresAndVariabless() returns (bool res) ",
|
||||||
"//" : " { ",
|
"//" : " { ",
|
||||||
"//" : " res = true; ",
|
"//" : " res = true; ",
|
||||||
@ -112,8 +130,8 @@
|
|||||||
"//" : " return false; ",
|
"//" : " return false; ",
|
||||||
"//" : " ",
|
"//" : " ",
|
||||||
"//" : " //for some reason does not work 27.01.2015 ",
|
"//" : " //for some reason does not work 27.01.2015 ",
|
||||||
"//" : " //if (block.gaslimit != 1000000000000000000000) ",
|
"//" : " if (block.gaslimit != 1000000000000000000000) ",
|
||||||
"//" : " // return false; ",
|
"//" : " return false; ",
|
||||||
"//" : " ",
|
"//" : " ",
|
||||||
"//" : " if (block.number != 120) ",
|
"//" : " if (block.number != 120) ",
|
||||||
"//" : " return false; ",
|
"//" : " return false; ",
|
||||||
@ -213,7 +231,7 @@
|
|||||||
"//" : " a = new TestContract(); ",
|
"//" : " a = new TestContract(); ",
|
||||||
"//" : " } ",
|
"//" : " } ",
|
||||||
"//" : "} ",
|
"//" : "} ",
|
||||||
"code" : "0x60e060020a6000350480630c4c9a8014610078578063296df0df1461008a5780632a9afb831461009c578063380e4396146100ae5780634893d88a146100c05780637ee17e12146100ce578063981a3165146100dc578063a60eedda146100ee578063e97384dc14610100578063ed973fe91461011257005b610080610431565b8060005260206000f35b6100926103f7565b8060005260206000f35b6100a46105d1565b8060005260206000f35b6100b6610220565b8060005260206000f35b6100c8610426565b60006000f35b6100d66102df565b60006000f35b6100e4610411565b8060005260206000f35b6100f6610124565b8060005260206000f35b6101086102f5565b8060005260206000f35b61011a6101be565b8060005260206000f35b60006000605f6106be600039605f60006000f0905080600160a060020a031662f55d9d8060e060020a0260005241600160a060020a0316600452600060006024600060008660155a03f150505080600160a060020a031663b9c3d0a58060e060020a02600052602060006004600060008660155a03f150505060005160e1146101ac576101b5565b600191506101ba565b600091505b5090565b60006000605f6106be600039605f60006000f0905080600160a060020a031663b9c3d0a58060e060020a02600052602060006004600060008660155a03f150505060005160e11461020e57610217565b6001915061021c565b600091505b5090565b60006000600060009150600092508160001461023b576102bf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe78213156102b5575b600a82121561027a578180600101925050610264565b81600a14610287576102b0565b600a90505b60008160ff1611156102af5781806001900392505080806001900391505061028c565b5b6102be565b600092506102da565b5b816000146102cc576102d5565b600192506102da565b600092505b505090565b6000605f6106be600039605f60006000f0905090565b60006001905041600160a060020a0316732adc25665018aa1fe0e6bc666dac8fc2697ff9ba14156103255761032e565b600090506103f4565b446302b8feb0141561033f57610348565b600090506103f4565b43607814156103565761035f565b600090506103f4565b33600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b141561038957610392565b600090506103f4565b34606414156103a0576103a9565b600090506103f4565b3a600114156103b7576103c0565b600090506103f4565b32600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b14156103ea576103f3565b600090506103f4565b5b90565b6000600090505b60011561040a576103fe565b6001905090565b60006000905061041f610426565b6001905090565b61042e610411565b50565b60006000905061043f6102df565b50610448610220565b1561045257610478565b7ff000000000000000000000000000000000000000000000000000000000000000810190505b6104806101be565b1561048a576104b0565b7f0f00000000000000000000000000000000000000000000000000000000000000810190505b6104b8610124565b156104c2576104e7565b7ef0000000000000000000000000000000000000000000000000000000000000810190505b6104ef6102f5565b156104f95761051e565b7e0f000000000000000000000000000000000000000000000000000000000000810190505b60ff60008190555073a94f5374fce5edbc8e2a8697c15331677e6ebf0b60018190555060ff6002819055507f676c6f62616c2064617461203332206c656e67746820737472696e670000000060038190555073a94f5374fce5edbc8e2a8697c15331677e6ebf0b600460006000526020526040600020819055506105a06105d1565b156105aa576105ce565b7df00000000000000000000000000000000000000000000000000000000000810190505b90565b60006001905060005460ff14156105e7576105f0565b600090506106ba565b60025460005414156106015761060a565b600090506106ba565b600154600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b14156106365761063f565b600090506106ba565b6003547f676c6f62616c2064617461203332206c656e67746820737472696e6700000000141561066e57610677565b600090506106ba565b60046000600052602052604060002054600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b14156106b0576106b9565b600090506106ba565b5b905600605380600c6000396000f30060e060020a600035048062f55d9d14601d578063b9c3d0a514602c57005b60266004356045565b60006000f35b6032603c565b8060005260206000f35b600060e1905090565b80600160a060020a0316ff5056",
|
"code" : "0x60003560e060020a900480630c4c9a8014610084578063296df0df146100965780632a9afb83146100a8578063380e4396146100ba5780634893d88a146100cc5780637ee17e12146100da578063981a3165146100e8578063a60eedda146100fa578063e0a9fd281461010c578063e97384dc1461011e578063ed973fe91461013057005b61008c6102c0565b8060005260206000f35b61009e61067b565b8060005260206000f35b6100b06101ba565b8060005260206000f35b6100c261049b565b8060005260206000f35b6100d461087d565b60006000f35b6100e26101a4565b60006000f35b6100f06102ab565b8060005260206000f35b610102610695565b8060005260206000f35b610114610732565b8060005260206000f35b61012661055a565b8060005260206000f35b610138610142565b8060005260206000f35b600060006060610889600039606060006000f0905080600160a060020a031663b9c3d0a5602060008260e060020a026000526004600060008660155a03f150505060005160e1146101925761019b565b600191506101a0565b600091505b5090565b60006060610889600039606060006000f0905090565b60006001905060005460ff14156101d0576101d9565b600090506102a8565b60025460005414156101ea576101f3565b600090506102a8565b600154600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b141561021f57610228565b600090506102a8565b6003547f676c6f62616c2064617461203332206c656e67746820737472696e6700000000141561025757610260565b600090506102a8565b600460006000815260200190815260200160002054600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b141561029e576102a7565b600090506102a8565b5b90565b6000600090506102b961087d565b6001905090565b6000600090506102ce6101a4565b506102d761049b565b156102e157610307565b7ff000000000000000000000000000000000000000000000000000000000000000810190505b61030f610142565b156103195761033f565b7f0f00000000000000000000000000000000000000000000000000000000000000810190505b610347610695565b1561035157610376565b7ef0000000000000000000000000000000000000000000000000000000000000810190505b61037e61055a565b15610388576103ad565b7e0f000000000000000000000000000000000000000000000000000000000000810190505b60ff60008190555073a94f5374fce5edbc8e2a8697c15331677e6ebf0b60018190555060ff6002819055507f676c6f62616c2064617461203332206c656e67746820737472696e670000000060038190555073a94f5374fce5edbc8e2a8697c15331677e6ebf0b6004600060008152602001908152602001600020819055506104346101ba565b1561043e57610462565b7df00000000000000000000000000000000000000000000000000000000000810190505b61046a610732565b1561047457610498565b7d0f0000000000000000000000000000000000000000000000000000000000810190505b90565b6000600060006000915060009250816000146104b65761053a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7821315610530575b600a8212156104f55781806001019250506104df565b81600a146105025761052b565b600a90505b60008160ff16111561052a57818060019003925050808060019003915050610507565b5b610539565b60009250610555565b5b8160001461054757610550565b60019250610555565b600092505b505090565b60006001905041600160a060020a0316732adc25665018aa1fe0e6bc666dac8fc2697ff9ba141561058a57610593565b60009050610678565b446302b8feb014156105a4576105ad565b60009050610678565b45683635c9adc5dea0000014156105c3576105cc565b60009050610678565b43607814156105da576105e3565b60009050610678565b33600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b141561060d57610616565b60009050610678565b34606414156106245761062d565b60009050610678565b3a6001141561063b57610644565b60009050610678565b32600160a060020a031673a94f5374fce5edbc8e2a8697c15331677e6ebf0b141561066e57610677565b60009050610678565b5b90565b6000600090505b60011561068e57610682565b6001905090565b60006000600191506060610889600039606060006000f0905080600160a060020a031662f55d9d600060008260e060020a02600052600441600160a060020a03168152602001600060008660155a03f150505080600160a060020a031663b9c3d0a5602060008260e060020a026000526004600060008660155a03f150505060005160e114156107245761072d565b6000915061072e565b5b5090565b60006001905060007f74657374737472696e67000000000000000000000000000000000000000000008152600a016000207f43c4b4524adb81e4e9a5c4648a98e9d320e3908ac5b6c889144b642cd08ae16d141561078f57610798565b6000905061087a565b60026020600060007f74657374737472696e67000000000000000000000000000000000000000000008152600a01600060008560155a03f150506000517f3c8727e019a42b444667a587b6001251becadabbb36bfed8087a92c18882d11114156108015761080a565b6000905061087a565b60036020600060007f74657374737472696e67000000000000000000000000000000000000000000008152600a01600060008560155a03f15050600051600160a060020a031673cd566972b5e50104011a92b59fa8e0b1234851ae141561087057610879565b6000905061087a565b5b90565b6108856102ab565b505600605480600c6000396000f30060003560e060020a90048062f55d9d14601e578063b9c3d0a514602d57005b60276004356046565b60006000f35b6033603d565b8060005260206000f35b600060e1905090565b80600160a060020a0316ff5056",
|
||||||
"nonce" : "0",
|
"nonce" : "0",
|
||||||
"storage" : {
|
"storage" : {
|
||||||
}
|
}
|
||||||
@ -233,5 +251,290 @@
|
|||||||
"to" : "d94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
"to" : "d94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
"value" : "100"
|
"value" : "100"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"CallLowLevelCreatesSolidity" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"//": "contract subcaller ",
|
||||||
|
"//": "{ ",
|
||||||
|
"//": " function init(address a) ",
|
||||||
|
"//": " { ",
|
||||||
|
"//": " main(a).setdata(225); ",
|
||||||
|
"//": " } ",
|
||||||
|
"//": "} ",
|
||||||
|
"//": " ",
|
||||||
|
"//": "contract main ",
|
||||||
|
"//": "{ ",
|
||||||
|
"//": " uint data; ",
|
||||||
|
"//": " function run() returns (uint) ",
|
||||||
|
"//": " { ",
|
||||||
|
"//": " data = 1; ",
|
||||||
|
"//": " subcaller a = new subcaller(); ",
|
||||||
|
"//": " a.init(msg.sender); ",
|
||||||
|
"//": " return data; ",
|
||||||
|
"//": " } ",
|
||||||
|
"//": " ",
|
||||||
|
"//": " function setdata(uint _data) ",
|
||||||
|
"//": " { ",
|
||||||
|
"//": " data = _data; ",
|
||||||
|
"//": " } ",
|
||||||
|
"//": "}",
|
||||||
|
"code" : "0x60e060020a60003504806330debb4214610020578063c04062261461003157005b61002b6004356100a4565b60006000f35b610039610043565b8060005260206000f35b60006000600160008190555060656100af600039606560006000f0905080600160a060020a03166319ab453c600060008260e060020a02600052600433600160a060020a03168152602001600060008660155a03f150505060005491505090565b80600081905550505600605980600c6000396000f30060e060020a60003504806319ab453c14601457005b601d6004356023565b60006000f35b80600160a060020a03166330debb42600060008260e060020a02600052600460e18152602001600060008660155a03f15050505056",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"nonce" : "0",
|
||||||
|
"code" : "",
|
||||||
|
"storage": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"//" : "run()",
|
||||||
|
"data" : "0xc0406226",
|
||||||
|
"gasLimit" : "15000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"CallRecursiveMethods" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"//" : "contract recursiveMethods ",
|
||||||
|
"//" : "{ ",
|
||||||
|
"//" : " function testInfiniteLoop() ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " while(true){} ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " function testRecursiveMethods() ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " testRecursiveMethods2(); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " function testRecursiveMethods2() ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " testRecursiveMethods(); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : "}",
|
||||||
|
"code" : "0x60e060020a600035048063296df0df1460285780634893d88a146034578063981a316514604057005b602e604c565b60006000f35b603a6061565b60006000f35b60466059565b60006000f35b5b600115605757604d565b565b605f6061565b565b60676059565b56",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"nonce" : "0",
|
||||||
|
"code" : "",
|
||||||
|
"storage": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"//" : "testRecursiveMethods()",
|
||||||
|
"data" : "0x981a3165",
|
||||||
|
"gasLimit" : "7000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"CallInfiniteLoop" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"//" : "contract recursiveMethods ",
|
||||||
|
"//" : "{ ",
|
||||||
|
"//" : " function testInfiniteLoop() ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " while(true){} ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " function testRecursiveMethods() ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " testRecursiveMethods2(); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " function testRecursiveMethods2() ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " testRecursiveMethods(); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : "}",
|
||||||
|
"code" : "0x60e060020a600035048063296df0df1460285780634893d88a146034578063981a316514604057005b602e604c565b60006000f35b603a6061565b60006000f35b60466059565b60006000f35b5b600115605757604d565b565b605f6061565b565b60676059565b56",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "500",
|
||||||
|
"nonce" : "0",
|
||||||
|
"code" : "",
|
||||||
|
"storage": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"//" : "testInfiniteLoop()",
|
||||||
|
"data" : "0x296df0df",
|
||||||
|
"gasLimit" : "10000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"RecursiveCreateContracts" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "1000000",
|
||||||
|
"//" : "contract recursiveCreate1 ",
|
||||||
|
"//" : "{ ",
|
||||||
|
"//" : " function recursiveCreate1(address a, uint depth) ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " depth = depth - 1; ",
|
||||||
|
"//" : " if(depth > 0) ",
|
||||||
|
"//" : " main(a).create2(depth); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : "} ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : "contract recursiveCreate2 ",
|
||||||
|
"//" : "{ ",
|
||||||
|
"//" : " function recursiveCreate2(address a, uint depth) ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " depth = depth - 1; ",
|
||||||
|
"//" : " if(depth > 0) ",
|
||||||
|
"//" : " recursiveCreate1 rec1 = new recursiveCreate1(a, depth); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : "} ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : "contract main ",
|
||||||
|
"//" : "{ ",
|
||||||
|
"//" : " address maincontract; ",
|
||||||
|
"//" : " uint depp; ",
|
||||||
|
"//" : " function run(uint depth) ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " maincontract = msg.sender; ",
|
||||||
|
"//" : " depp = depth; ",
|
||||||
|
"//" : " recursiveCreate1 rec1 = new recursiveCreate1(maincontract, depth); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : " ",
|
||||||
|
"//" : " function create2(uint depth) ",
|
||||||
|
"//" : " { ",
|
||||||
|
"//" : " recursiveCreate2 rec2 = new recursiveCreate2(maincontract, depth); ",
|
||||||
|
"//" : " address(rec2).send(2); ",
|
||||||
|
"//" : " } ",
|
||||||
|
"//" : "}",
|
||||||
|
"code" : "0x60003560e060020a90048063820b13f614610021578063a444f5e91461003257005b61002c600435610043565b60006000f35b61003d60043561008f565b60006000f35b600060c66100cc60003960c6600054600160a060020a0316815260200182815260200160006000f0905080600160a060020a0316600060026000600060006000848787f1505050505050565b6000336000819055508160018190555060686101926000396068600054600160a060020a0316815260200182815260200160006000f09050505056006012604060c6600439600451602451601e565b60018060c56000396000f35b6000600182039150600082116031576057565b6068605d600039606883600160a060020a0316815260200182815260200160006000f090505b5050505600601260406068600439600451602451601e565b60018060676000396000f35b60018103905060008111602f576062565b81600160a060020a031663820b13f6600060008260e060020a026000526004858152602001600060008660155a03f15050505b505056000000601260406068600439600451602451601e565b60018060676000396000f35b60018103905060008111602f576062565b81600160a060020a031663820b13f6600060008260e060020a026000526004858152602001600060008660155a03f15050505b5050560000",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "500000",
|
||||||
|
"nonce" : "0",
|
||||||
|
"code" : "",
|
||||||
|
"storage": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"//" : "run(uint256)",
|
||||||
|
"data" : "0xa444f5e900000000000000000000000000000000000000000000000000000000000204",
|
||||||
|
"gasLimit" : "10000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"AmbigiousMethod" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "100000",
|
||||||
|
"code" : "0x60003560e060020a90048063c040622614601557005b601b6021565b60006000f35b61014f60008190555056",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "500",
|
||||||
|
"nonce" : "0",
|
||||||
|
"code" : "",
|
||||||
|
"storage": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"//" : "run()",
|
||||||
|
"data" : "0xc0406226",
|
||||||
|
"gasLimit" : "10000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "1"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
"balance" : "1000000",
|
"balance" : "1000000",
|
||||||
"code" : "{ (CALL 5000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 1 0 0 0 0) }",
|
"code" : "{ (CALL 5000 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b 1 0 0 0 0) }",
|
||||||
"nonce" : "0",
|
"nonce" : "0",
|
||||||
@ -216,7 +216,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
"c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
"balance" : "0",
|
"balance" : "0",
|
||||||
"code" : "{[[1]]55}",
|
"code" : "{[[1]]55}",
|
||||||
"nonce" : "0",
|
"nonce" : "0",
|
||||||
@ -523,6 +523,232 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"SuicidesAndInternlCallSuicidesOOG" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "10000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "7000",
|
||||||
|
"code" : "",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "10",
|
||||||
|
"code" : "{(CALL 0 0 1 0 0 0 0) (SUICIDE 0)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"0000000000000000000000000000000000000000" : {
|
||||||
|
"balance" : "0",
|
||||||
|
"code" : "{(SUICIDE 1)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "700",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"SuicidesAndInternlCallSuicides" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "10000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "7000",
|
||||||
|
"code" : "",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "10",
|
||||||
|
"code" : "{(CALL 20 0 1 0 0 0 0) (SUICIDE 0)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"0000000000000000000000000000000000000000" : {
|
||||||
|
"balance" : "0",
|
||||||
|
"code" : "{(SUICIDE 1)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "700",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"SuicidesStopAfterSuicide" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "100000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "7000",
|
||||||
|
"code" : "",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "10000",
|
||||||
|
"code" : "{(SUICIDE 0) (CALL 0 2000 0 0 0 0 0) }",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"0000000000000000000000000000000000000000" : {
|
||||||
|
"balance" : "1110",
|
||||||
|
"code" : "{(SUICIDE 1)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "3700",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"SuicidesAndSendMoneyToItselfEtherDestroyed" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "10000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "7000",
|
||||||
|
"code" : "",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"c94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "1000",
|
||||||
|
"code" : "{(SUICIDE 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "1700",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "c94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"SuicidesMixingCoinbase" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"currentDifficulty" : "45678256",
|
||||||
|
"currentGasLimit" : "10000",
|
||||||
|
"currentNumber" : "0",
|
||||||
|
"currentTimestamp" : 1,
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"pre" :
|
||||||
|
{
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "7000",
|
||||||
|
"code" : "",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "1000",
|
||||||
|
"code" : "{(SUICIDE 0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b)}",
|
||||||
|
"nonce" : "0",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "1700",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
|
"value" : "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
"TransactionNonceCheck" : {
|
"TransactionNonceCheck" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
@ -616,78 +842,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"TransactionMakeAccountBalanceOverflow" : {
|
|
||||||
"env" : {
|
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
|
||||||
"currentDifficulty" : "45678256",
|
|
||||||
"currentGasLimit" : "1000000",
|
|
||||||
"currentNumber" : "0",
|
|
||||||
"currentTimestamp" : 1,
|
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
|
||||||
},
|
|
||||||
"pre" :
|
|
||||||
{
|
|
||||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
|
||||||
"balance" : "100000",
|
|
||||||
"code" : "",
|
|
||||||
"nonce" : "0",
|
|
||||||
"storage" : {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
|
||||||
"balance" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
|
||||||
"code" : "",
|
|
||||||
"nonce" : "0",
|
|
||||||
"storage" : {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"transaction" :
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "1000",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "0",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"value" : "100"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"TransactionMakeAccountNonceOverflow" : {
|
|
||||||
"env" : {
|
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
|
||||||
"currentDifficulty" : "1",
|
|
||||||
"currentGasLimit" : "1000000",
|
|
||||||
"currentNumber" : "0",
|
|
||||||
"currentTimestamp" : 1,
|
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
|
||||||
},
|
|
||||||
"pre" :
|
|
||||||
{
|
|
||||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
|
||||||
"balance" : "100000",
|
|
||||||
"code" : "",
|
|
||||||
"nonce" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
|
||||||
"nonce" : "10000",
|
|
||||||
"storage" : {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"transaction" :
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "1000",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
|
||||||
"nonce" : "10000",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"value" : "100"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"UserTransactionZeroCost" : {
|
"UserTransactionZeroCost" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
@ -994,7 +1148,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
"b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
"balance" : "0",
|
"balance" : "0",
|
||||||
"code" : "{(MSTORE 0 0x600c600055) (CREATE 0 27 5)}",
|
"code" : "{(MSTORE 0 0x600c600055) (CREATE 0 27 5)}",
|
||||||
"nonce" : "0",
|
"nonce" : "0",
|
||||||
|
@ -51,7 +51,7 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
BOOST_CHECK_MESSAGE(o.count("transaction") == 0, "A transaction object should not be defined because the RLP is invalid!");
|
BOOST_CHECK_MESSAGE(o.count("transaction") == 0, "A transaction object should not be defined because the RLP is invalid!");
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_REQUIRE(o.count("transaction") > 0);
|
BOOST_REQUIRE(o.count("transaction") > 0);
|
||||||
@ -108,6 +108,11 @@ BOOST_AUTO_TEST_CASE(TransactionTest)
|
|||||||
dev::test::executeTests("ttTransactionTest", "/TransactionTests", dev::test::doTransactionTests);
|
dev::test::executeTests("ttTransactionTest", "/TransactionTests", dev::test::doTransactionTests);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(ttWrongRLPTransaction)
|
||||||
|
{
|
||||||
|
dev::test::executeTests("ttWrongRLPTransaction", "/TransactionTests", dev::test::doTransactionTests);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(tt10mbDataField)
|
BOOST_AUTO_TEST_CASE(tt10mbDataField)
|
||||||
{
|
{
|
||||||
dev::test::executeTests("tt10mbDataField", "/TransactionTests", dev::test::doTransactionTests);
|
dev::test::executeTests("tt10mbDataField", "/TransactionTests", dev::test::doTransactionTests);
|
||||||
|
@ -241,21 +241,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"WrongAddress" : {
|
|
||||||
"transaction" :
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "",
|
|
||||||
"gasPrice" : "",
|
|
||||||
"nonce" : "",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d8v",
|
|
||||||
"value" : "",
|
|
||||||
"v" : "27",
|
|
||||||
"r" : "0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353",
|
|
||||||
"s" : "0xefffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"AddressMoreThan20" : {
|
"AddressMoreThan20" : {
|
||||||
"transaction" :
|
"transaction" :
|
||||||
{
|
{
|
||||||
@ -309,7 +294,7 @@
|
|||||||
"gasPrice" : "1",
|
"gasPrice" : "1",
|
||||||
"nonce" : "0xffdc5",
|
"nonce" : "0xffdc5",
|
||||||
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||||
"value" : "0xfffdc12c",
|
"value" : "4294820140",
|
||||||
"v" : "28",
|
"v" : "28",
|
||||||
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
||||||
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
||||||
@ -329,5 +314,18 @@
|
|||||||
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
||||||
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"unpadedRValue": {
|
||||||
|
"transaction": {
|
||||||
|
"nonce": "13",
|
||||||
|
"gasPrice": "0x09184e72a000",
|
||||||
|
"gasLimit": "0x2710",
|
||||||
|
"to": "7c47ef93268a311f4cad0c750724299e9b72c268",
|
||||||
|
"data": "0x379607f50000000000000000000000000000000000000000000000000000000000000005",
|
||||||
|
"r": "0x006ab6dda9f4df56ea45583af36660329147f1753f3724ea5eb9ed83e812ca77",
|
||||||
|
"s": "0x495701e230667832c8999e884e366a61028633ecf951e8cd66d119f381ae5718",
|
||||||
|
"v": "28",
|
||||||
|
"value": ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -447,6 +447,36 @@ class WebThreeStubClient : public jsonrpc::Client
|
|||||||
else
|
else
|
||||||
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
||||||
}
|
}
|
||||||
|
int eth_register(const std::string& param1) throw (jsonrpc::JsonRpcException)
|
||||||
|
{
|
||||||
|
Json::Value p;
|
||||||
|
p.append(param1);
|
||||||
|
Json::Value result = this->CallMethod("eth_register",p);
|
||||||
|
if (result.isInt())
|
||||||
|
return result.asInt();
|
||||||
|
else
|
||||||
|
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
||||||
|
}
|
||||||
|
bool eth_unregister(int param1) throw (jsonrpc::JsonRpcException)
|
||||||
|
{
|
||||||
|
Json::Value p;
|
||||||
|
p.append(param1);
|
||||||
|
Json::Value result = this->CallMethod("eth_unregister",p);
|
||||||
|
if (result.isBool())
|
||||||
|
return result.asBool();
|
||||||
|
else
|
||||||
|
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
||||||
|
}
|
||||||
|
Json::Value eth_queuedTransactions(int param1) throw (jsonrpc::JsonRpcException)
|
||||||
|
{
|
||||||
|
Json::Value p;
|
||||||
|
p.append(param1);
|
||||||
|
Json::Value result = this->CallMethod("eth_queuedTransactions",p);
|
||||||
|
if (result.isArray())
|
||||||
|
return result;
|
||||||
|
else
|
||||||
|
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
||||||
|
}
|
||||||
bool db_put(const std::string& param1, const std::string& param2, const std::string& param3) throw (jsonrpc::JsonRpcException)
|
bool db_put(const std::string& param1, const std::string& param2, const std::string& param3) throw (jsonrpc::JsonRpcException)
|
||||||
{
|
{
|
||||||
Json::Value p;
|
Json::Value p;
|
||||||
|
@ -30,6 +30,7 @@ using namespace dev::shh;
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(whisper)
|
BOOST_AUTO_TEST_SUITE(whisper)
|
||||||
|
|
||||||
|
#if ALEX_HASH_FIXED_NETWORKING
|
||||||
BOOST_AUTO_TEST_CASE(topic)
|
BOOST_AUTO_TEST_CASE(topic)
|
||||||
{
|
{
|
||||||
cnote << "Testing Whisper...";
|
cnote << "Testing Whisper...";
|
||||||
@ -293,5 +294,6 @@ BOOST_AUTO_TEST_CASE(asyncforwarding)
|
|||||||
|
|
||||||
BOOST_REQUIRE_EQUAL(result, 1);
|
BOOST_REQUIRE_EQUAL(result, 1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
Loading…
Reference in New Issue
Block a user