Merge pull request #4968 from ethereum/alethUpdateCompatible

Fix tests for newer versions of aleth.
This commit is contained in:
chriseth 2018-09-13 23:38:46 +02:00 committed by GitHub
commit 5cf570e100
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 31 deletions

View File

@ -122,9 +122,9 @@ void ExecutionFramework::sendMessage(bytes const& _data, bool _isCreation, u256
if (!_isCreation)
{
d.to = dev::toString(m_contractAddress);
BOOST_REQUIRE(m_rpc.eth_getCode(d.to, "latest").size() > 2);
BOOST_REQUIRE(m_rpc.eth_getCode(d.to, "pending").size() > 2);
// Use eth_call to get the output
m_output = fromHex(m_rpc.eth_call(d, "latest"), WhenError::Throw);
m_output = fromHex(m_rpc.eth_call(d, "pending"), WhenError::Throw);
}
string txHash = m_rpc.eth_sendTransaction(d);

View File

@ -3039,26 +3039,26 @@ BOOST_AUTO_TEST_CASE(gasprice)
BOOST_AUTO_TEST_CASE(blockhash)
{
char const* sourceCode = R"(
contract C {
uint256 counter;
function g() public returns (bool) { counter++; return true; }
function f() public returns (bytes32[] memory r) {
r = new bytes32[](259);
for (uint i = 0; i < 259; i++)
r[i] = blockhash(block.number - 257 + i);
}
}
)";
compileAndRun(sourceCode);
// generate a sufficient amount of blocks
while (blockNumber() < u256(255))
ABI_CHECK(callContractFunction("g()"), encodeArgs(true));
vector<u256> hashes;
// currently the test only works for pre-constantinople
// depending on the aleth version, this test only works for pre-constantinople
if (Options::get().evmVersion() < EVMVersion::constantinople())
{
char const* sourceCode = R"(
contract C {
uint256 counter;
function g() public returns (bool) { counter++; return true; }
function f() public returns (bytes32[] memory r) {
r = new bytes32[](259);
for (uint i = 0; i < 259; i++)
r[i] = blockhash(block.number - 257 + i);
}
}
)";
compileAndRun(sourceCode);
// generate a sufficient amount of blocks
while (blockNumber() < u256(255))
ABI_CHECK(callContractFunction("g()"), encodeArgs(true));
vector<u256> hashes;
// ``blockhash()`` is only valid for the last 256 blocks, otherwise zero
hashes.emplace_back(0);
for (u256 i = blockNumber() - u256(255); i <= blockNumber(); i++)
@ -3067,18 +3067,9 @@ BOOST_AUTO_TEST_CASE(blockhash)
hashes.emplace_back(0);
// future block hashes are zero
hashes.emplace_back(0);
}
else
// TODO: Starting from constantinople blockhash always seems to return zero.
// The blockhash contract introduced in EIP96 seems to break in our setup of
// aleth (setting the constantinople fork block to zero and resetting the chain
// to block zero before each test run). Pre-deploying the blockchain contract
// during genesis seems to help, but currently causes problems with other tests.
// Set the expectation to zero for now, so that this test tracks changes in this
// behavior.
hashes.assign(259, 0);
ABI_CHECK(callContractFunction("f()"), encodeDyn(hashes));
ABI_CHECK(callContractFunction("f()"), encodeDyn(hashes));
}
}
BOOST_AUTO_TEST_CASE(value_complex)