aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsubtly <subtly@users.noreply.github.com>2015-02-07 03:58:04 +0800
committersubtly <subtly@users.noreply.github.com>2015-02-07 03:58:04 +0800
commit63f27fb920bf3afe3f896d6950a035642cc1cc45 (patch)
tree254f0fd8af15caab63630221352fc583e95a5f91
parent1ff43014095ce6d3b3863211e93c55145cbf7a11 (diff)
parentd5039b295eff31837ec629873882802fe95d3caf (diff)
downloaddexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.tar
dexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.tar.gz
dexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.tar.bz2
dexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.tar.lz
dexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.tar.xz
dexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.tar.zst
dexon-solidity-63f27fb920bf3afe3f896d6950a035642cc1cc45.zip
Merge branch 'develop' into p2p
-rw-r--r--CMakeLists.txt1
-rw-r--r--SolidityExpressionCompiler.cpp70
-rw-r--r--SolidityNameAndTypeResolution.cpp28
-rw-r--r--SolidityParser.cpp32
-rw-r--r--SolidityScanner.cpp9
-rw-r--r--natspec.cpp112
-rw-r--r--stRefundTestFiller.json30
-rw-r--r--stSystemOperationsTestFiller.json70
-rw-r--r--stTransactionTestFiller.json64
-rw-r--r--vmSha3TestFiller.json84
10 files changed, 497 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 764bf928..36876eea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,6 +22,7 @@ target_link_libraries(testeth ethcore)
target_link_libraries(testeth secp256k1)
target_link_libraries(testeth solidity)
target_link_libraries(testeth webthree)
+target_link_libraries(testeth natspec)
if (JSONRPC)
target_link_libraries(testeth web3jsonrpc)
diff --git a/SolidityExpressionCompiler.cpp b/SolidityExpressionCompiler.cpp
index a0cca3a3..3c3ea1ba 100644
--- a/SolidityExpressionCompiler.cpp
+++ b/SolidityExpressionCompiler.cpp
@@ -91,7 +91,15 @@ bytes compileFirstExpression(const string& _sourceCode, vector<vector<string>> _
{
Parser parser;
ASTPointer<SourceUnit> sourceUnit;
- BOOST_REQUIRE_NO_THROW(sourceUnit = parser.parse(make_shared<Scanner>(CharStream(_sourceCode))));
+ try
+ {
+ sourceUnit = parser.parse(make_shared<Scanner>(CharStream(_sourceCode)));
+ }
+ catch(boost::exception const& _e)
+ {
+ auto msg = std::string("Parsing source code failed with: \n") + boost::diagnostic_information(_e);
+ BOOST_FAIL(msg);
+ }
vector<Declaration const*> declarations;
declarations.reserve(_globalDeclarations.size() + 1);
@@ -177,6 +185,66 @@ BOOST_AUTO_TEST_CASE(int_literal)
BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end());
}
+BOOST_AUTO_TEST_CASE(int_with_wei_ether_subdenomination)
+{
+ char const* sourceCode = R"(
+ contract test {
+ function test ()
+ {
+ var x = 1 wei;
+ }
+ })";
+ bytes code = compileFirstExpression(sourceCode);
+
+ bytes expectation({byte(eth::Instruction::PUSH1), 0x1});
+ BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end());
+}
+
+BOOST_AUTO_TEST_CASE(int_with_szabo_ether_subdenomination)
+{
+ char const* sourceCode = R"(
+ contract test {
+ function test ()
+ {
+ var x = 1 szabo;
+ }
+ })";
+ bytes code = compileFirstExpression(sourceCode);
+
+ bytes expectation({byte(eth::Instruction::PUSH5), 0xe8, 0xd4, 0xa5, 0x10, 0x00});
+ BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end());
+}
+
+BOOST_AUTO_TEST_CASE(int_with_finney_ether_subdenomination)
+{
+ char const* sourceCode = R"(
+ contract test {
+ function test ()
+ {
+ var x = 1 finney;
+ }
+ })";
+ bytes code = compileFirstExpression(sourceCode);
+
+ bytes expectation({byte(eth::Instruction::PUSH7), 0x3, 0x8d, 0x7e, 0xa4, 0xc6, 0x80, 0x00});
+ BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end());
+}
+
+BOOST_AUTO_TEST_CASE(int_with_ether_ether_subdenomination)
+{
+ char const* sourceCode = R"(
+ contract test {
+ function test ()
+ {
+ var x = 1 ether;
+ }
+ })";
+ bytes code = compileFirstExpression(sourceCode);
+
+ bytes expectation({byte(eth::Instruction::PUSH8), 0xd, 0xe0, 0xb6, 0xb3, 0xa7, 0x64, 0x00, 0x00});
+ BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end());
+}
+
BOOST_AUTO_TEST_CASE(comparison)
{
char const* sourceCode = "contract test {\n"
diff --git a/SolidityNameAndTypeResolution.cpp b/SolidityNameAndTypeResolution.cpp
index ae6c374b..05ce6ed6 100644
--- a/SolidityNameAndTypeResolution.cpp
+++ b/SolidityNameAndTypeResolution.cpp
@@ -904,6 +904,34 @@ BOOST_AUTO_TEST_CASE(invalid_parameter_names_in_named_args)
BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
}
+BOOST_AUTO_TEST_CASE(disallow_declaration_of_void_type)
+{
+ char const* sourceCode = "contract c { function f() { var x = f(); } }";
+ BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
+}
+
+BOOST_AUTO_TEST_CASE(overflow_caused_by_ether_units)
+{
+ char const* sourceCodeFine = R"(
+ contract c {
+ function c ()
+ {
+ a = 115792089237316195423570985008687907853269984665640564039458;
+ }
+ uint256 a;
+ })";
+ BOOST_CHECK_NO_THROW(parseTextAndResolveNames(sourceCodeFine));
+ char const* sourceCode = R"(
+ contract c {
+ function c ()
+ {
+ a = 115792089237316195423570985008687907853269984665640564039458 ether;
+ }
+ uint256 a;
+ })";
+ BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/SolidityParser.cpp b/SolidityParser.cpp
index 9ba38a4a..7af99567 100644
--- a/SolidityParser.cpp
+++ b/SolidityParser.cpp
@@ -660,6 +660,38 @@ BOOST_AUTO_TEST_CASE(multiple_visibility_specifiers)
BOOST_CHECK_THROW(parseText(text), ParserError);
}
+BOOST_AUTO_TEST_CASE(literal_constants_with_ether_subdenominations)
+{
+ char const* text = R"(
+ contract c {
+ function c ()
+ {
+ a = 1 wei;
+ b = 2 szabo;
+ c = 3 finney;
+ b = 4 ether;
+ }
+ uint256 a;
+ uint256 b;
+ uint256 c;
+ uint256 d;
+ })";
+ BOOST_CHECK_NO_THROW(parseTextExplainError(text));
+}
+
+BOOST_AUTO_TEST_CASE(literal_constants_with_ether_subdenominations_in_expressions)
+{
+ char const* text = R"(
+ contract c {
+ function c ()
+ {
+ a = 1 wei * 100 wei + 7 szabo - 3;
+ }
+ uint256 a;
+ })";
+ BOOST_CHECK_NO_THROW(parseTextExplainError(text));
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/SolidityScanner.cpp b/SolidityScanner.cpp
index 7dc9ef48..8088b4d4 100644
--- a/SolidityScanner.cpp
+++ b/SolidityScanner.cpp
@@ -255,6 +255,15 @@ BOOST_AUTO_TEST_CASE(comments_mixed_in_sequence)
BOOST_CHECK_EQUAL(scanner.getCurrentCommentLiteral(), "documentation comment ");
}
+BOOST_AUTO_TEST_CASE(ether_subdenominations)
+{
+ Scanner scanner(CharStream("wei szabo finney ether"));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::SubWei);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SubSzabo);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SubFinney);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SubEther);
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/natspec.cpp b/natspec.cpp
new file mode 100644
index 00000000..827f9662
--- /dev/null
+++ b/natspec.cpp
@@ -0,0 +1,112 @@
+/*
+ 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/>.
+ */
+/** @file natspec.cpp
+ * @author Marek Kotewicz <marek@ethdev.com>
+ * @date 2015
+ */
+
+#include <boost/test/unit_test.hpp>
+#include <libdevcore/Log.h>
+#include <libnatspec/NatspecExpressionEvaluator.h>
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(natspec)
+
+BOOST_AUTO_TEST_CASE(natspec_eval_function_exists)
+{
+ // given
+ NatspecExpressionEvaluator e;
+ // when
+ string result = e.evalExpression("`typeof evaluateExpression`").toStdString();
+ // then
+ BOOST_CHECK_EQUAL(result, "function");
+}
+
+BOOST_AUTO_TEST_CASE(natspec_js_eval)
+{
+ // given
+ NatspecExpressionEvaluator e;
+ // when
+ string result = e.evalExpression("`1 + 2`").toStdString();
+ // then
+ BOOST_CHECK_EQUAL(result, "3");
+}
+
+BOOST_AUTO_TEST_CASE(natspec_create_custom_function)
+{
+ // given
+ NatspecExpressionEvaluator e;
+ // when
+ auto x = e.evalExpression("`test = function (x) { return x + 'ok'; }`"); // ommit var, make it global
+ string result = e.evalExpression("`test(5)`").toStdString();
+ string result2 = e.evalExpression("`typeof test`").toStdString();
+ // then
+ BOOST_CHECK_EQUAL(result, "5ok");
+ BOOST_CHECK_EQUAL(result2, "function");
+}
+
+BOOST_AUTO_TEST_CASE(natspec_js_eval_separated_expressions)
+{
+ // given
+ NatspecExpressionEvaluator e;
+ // when
+ string result = e.evalExpression("`x = 1` + `y = 2` will be equal `x + y`").toStdString();
+ // then
+ BOOST_CHECK_EQUAL(result, "1 + 2 will be equal 3");
+}
+
+BOOST_AUTO_TEST_CASE(natspec_js_eval_input_params)
+{
+ // given
+ char const* abi = R"([
+ {
+ "name": "f",
+ "constant": false,
+ "type": "function",
+ "inputs": [
+ {
+ "name": "a",
+ "type": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "d",
+ "type": "uint256"
+ }
+ ]
+ }
+ ])";
+ NatspecExpressionEvaluator e(abi, "'f'", "[4]");
+ // when
+ string result = e.evalExpression("Will multiply `a` by 7 and return `a * 7`.").toStdString();
+ // then
+ BOOST_CHECK_EQUAL(result, "Will multiply 4 by 7 and return 28.");
+}
+
+BOOST_AUTO_TEST_CASE(natspec_js_eval_error)
+{
+ // given
+ NatspecExpressionEvaluator e;
+ // when
+ string result = e.evalExpression("`test(`").toStdString();
+ // then
+ BOOST_CHECK_EQUAL(result, "`test(`");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/stRefundTestFiller.json b/stRefundTestFiller.json
index 6b2b2fc1..6749fd3d 100644
--- a/stRefundTestFiller.json
+++ b/stRefundTestFiller.json
@@ -303,6 +303,34 @@
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
"data" : ""
}
- }
+ },
+ "RefundOverflow" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "45678256",
+ "currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentNumber" : "0",
+ "currentTimestamp" : 1,
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "pre" : {
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "400",
+ "code" : "0x",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "5789604461865809771178549250434395392663499233282028201972879200395656482016",
+ "gasPrice" : "20",
+ "nonce" : "0",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+ "value" : ""
+ }
+ }
}
diff --git a/stSystemOperationsTestFiller.json b/stSystemOperationsTestFiller.json
index 253ba0a8..6a4b83e3 100644
--- a/stSystemOperationsTestFiller.json
+++ b/stSystemOperationsTestFiller.json
@@ -33,6 +33,76 @@
}
},
+ "testRandomTest": {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "300",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x424443444243434383f0155af055",
+ "nonce" : "0",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "10000",
+ "gasPrice" : "1",
+ "nonce" : "0",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "value" : "100000"
+ }
+ },
+
+ "createWithInvalidOpcode": {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "300",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "1000000000000000000",
+ "nonce" : 0,
+ "code" : "0x444242424245434253f0",
+ "storage": {}
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "1000000000000000000",
+ "nonce" : 0,
+ "code" : "",
+ "storage": {}
+ }
+ },
+ "transaction" : {
+ "nonce" : "0",
+ "gasPrice" : "1",
+ "gasLimit" : "10000",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "100000",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "data" : ""
+ }
+ },
+
"createNameRegistratorOOG_MemExpansionInsufficientBalance": {
"env" : {
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6",
diff --git a/stTransactionTestFiller.json b/stTransactionTestFiller.json
index cd42af79..a5092b60 100644
--- a/stTransactionTestFiller.json
+++ b/stTransactionTestFiller.json
@@ -169,7 +169,7 @@
},
"pre" :
{
- "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
"balance" : "1000",
"code" : "",
"nonce" : "0",
@@ -189,6 +189,68 @@
}
},
+ "TransactionFromCoinbaseHittingBlockGasLimit" : {
+ "env" : {
+ "currentCoinbase" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+ "currentDifficulty" : "45678256",
+ "currentGasLimit" : "1100",
+ "currentNumber" : "0",
+ "currentTimestamp" : 1,
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "pre" :
+ {
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "1000000",
+ "code" : "",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" :
+ {
+ "data" : "",
+ "gasLimit" : "1100",
+ "gasPrice" : "1",
+ "nonce" : "",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+ "value" : "10"
+ }
+ },
+
+ "TransactionFromCoinbaseHittingBlockGasLimit1" : {
+ "env" : {
+ "currentCoinbase" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+ "currentDifficulty" : "45678256",
+ "currentGasLimit" : "1100",
+ "currentNumber" : "0",
+ "currentTimestamp" : 1,
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "pre" :
+ {
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "100000",
+ "code" : "",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" :
+ {
+ "data" : "",
+ "gasLimit" : "1101",
+ "gasPrice" : "1",
+ "nonce" : "",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+ "value" : "10"
+ }
+ },
+
"ContractStoreClearsSuccess" : {
"env" : {
"currentCoinbase" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
diff --git a/vmSha3TestFiller.json b/vmSha3TestFiller.json
index 7ed72952..851b7aab 100644
--- a/vmSha3TestFiller.json
+++ b/vmSha3TestFiller.json
@@ -193,5 +193,89 @@
"gasPrice" : "100000000000000",
"gas" : "10000"
}
+ },
+
+ "sha3_bigSize": {
+ "env" : {
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6",
+ "currentNumber" : "0",
+ "currentGasLimit" : "1000000",
+ "currentDifficulty" : "256",
+ "currentTimestamp" : 1,
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "nonce" : 0,
+ "code" : "{ [[ 0 ]] (SHA3 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)}",
+ "storage": {}
+ }
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "data" : "",
+ "gasPrice" : "1",
+ "gas" : "0x10000000000"
+ }
+ },
+
+ "sha3_bigOffset": {
+ "env" : {
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6",
+ "currentNumber" : "0",
+ "currentGasLimit" : "1000000",
+ "currentDifficulty" : "256",
+ "currentTimestamp" : 1,
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "nonce" : 0,
+ "code" : "{ [[ 0 ]] (SHA3 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 2)}",
+ "storage": {}
+ }
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "data" : "",
+ "gasPrice" : "1",
+ "gas" : "0x10000000000"
+ }
+ },
+
+ "sha3_bigOffset2": {
+ "env" : {
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6",
+ "currentNumber" : "0",
+ "currentGasLimit" : "1000000",
+ "currentDifficulty" : "256",
+ "currentTimestamp" : 1,
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "nonce" : 0,
+ "code" : "{ [[ 0 ]] (SHA3 0x1000000 2)}",
+ "storage": {}
+ }
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "data" : "",
+ "gasPrice" : "1",
+ "gas" : "0x100000000"
+ }
}
}