mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #3725 from ethereum/blockhashNoCall
Allow ``block.blockhash`` without it being called.
This commit is contained in:
commit
abc7a45230
@ -3,6 +3,7 @@
|
|||||||
Features:
|
Features:
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
|
* Code Generator: Allow ``block.blockhash`` without being called.
|
||||||
* Code Generator: Properly skip unneeded storgae array cleanup when not reducing length.
|
* Code Generator: Properly skip unneeded storgae array cleanup when not reducing length.
|
||||||
* Code Generator: Bugfix in modifier lookup in libraries.
|
* Code Generator: Bugfix in modifier lookup in libraries.
|
||||||
* Commandline interface: Support ``--evm-version constantinople`` properly.
|
* Commandline interface: Support ``--evm-version constantinople`` properly.
|
||||||
|
@ -1147,6 +1147,9 @@ bool ExpressionCompiler::visit(MemberAccess const& _memberAccess)
|
|||||||
else if (member == "sig")
|
else if (member == "sig")
|
||||||
m_context << u256(0) << Instruction::CALLDATALOAD
|
m_context << u256(0) << Instruction::CALLDATALOAD
|
||||||
<< (u256(0xffffffff) << (256 - 32)) << Instruction::AND;
|
<< (u256(0xffffffff) << (256 - 32)) << Instruction::AND;
|
||||||
|
else if (member == "blockhash")
|
||||||
|
{
|
||||||
|
}
|
||||||
else
|
else
|
||||||
solAssert(false, "Unknown magic member.");
|
solAssert(false, "Unknown magic member.");
|
||||||
break;
|
break;
|
||||||
|
@ -1788,6 +1788,23 @@ BOOST_AUTO_TEST_CASE(transfer_ether)
|
|||||||
ABI_CHECK(callContractFunction("b(address,uint256)", oogRecipient, 10), encodeArgs());
|
ABI_CHECK(callContractFunction("b(address,uint256)", oogRecipient, 10), encodeArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(uncalled_blockhash)
|
||||||
|
{
|
||||||
|
char const* code = R"(
|
||||||
|
contract C {
|
||||||
|
function f() public view returns (bytes32)
|
||||||
|
{
|
||||||
|
var x = block.blockhash;
|
||||||
|
return x(block.number - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(code, 0, "C");
|
||||||
|
bytes result = callContractFunction("f()");
|
||||||
|
BOOST_REQUIRE_EQUAL(result.size(), 32);
|
||||||
|
BOOST_CHECK(result[0] != 0 || result[1] != 0 || result[2] != 0);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(log0)
|
BOOST_AUTO_TEST_CASE(log0)
|
||||||
{
|
{
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
|
Loading…
Reference in New Issue
Block a user