diff --git a/Changelog.md b/Changelog.md index 8e639a2d3..0d77fbc98 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,8 +1,10 @@ ### 0.4.3 (unreleased) Features: + * Inline assembly: support both `sucide` and `selfdestruct` opcodes (note: `suicide` is deprecated) + * Include `keccak256()` as an alias to `sha3()` ### 0.4.2 (2016-09-17) diff --git a/libsolidity/analysis/GlobalContext.cpp b/libsolidity/analysis/GlobalContext.cpp index a7ffcfad7..d075949ef 100644 --- a/libsolidity/analysis/GlobalContext.cpp +++ b/libsolidity/analysis/GlobalContext.cpp @@ -48,6 +48,8 @@ m_magicVariables(vector>{make_shared< make_shared(strings{"uint256", "uint256", "uint256"}, strings{"uint256"}, FunctionType::Location::MulMod)), make_shared("sha3", make_shared(strings(), strings{"bytes32"}, FunctionType::Location::SHA3, true)), + make_shared("keccak256", + make_shared(strings(), strings{"bytes32"}, FunctionType::Location::SHA3, true)), make_shared("log0", make_shared(strings{"bytes32"}, strings{}, FunctionType::Location::Log0)), make_shared("log1", diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 23bd2abcc..9485c5fa0 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -2872,6 +2872,24 @@ BOOST_AUTO_TEST_CASE(iterated_sha3_with_bytes) )); } +BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments) +{ + char const* sourceCode = R"( + contract c { + function foo(uint a, uint b, uint c) returns (bytes32 d) + { + d = keccak256(a, b, c); + } + })"; + compileAndRun(sourceCode); + + BOOST_CHECK(callContractFunction("foo(uint256,uint256,uint256)", 10, 12, 13) == encodeArgs( + dev::sha3( + toBigEndian(u256(10)) + + toBigEndian(u256(12)) + + toBigEndian(u256(13))))); +} + BOOST_AUTO_TEST_CASE(generic_call) { char const* sourceCode = R"**(