From 9f7e9d9cdd148892876c223de785ce70c2b50b36 Mon Sep 17 00:00:00 2001 From: Lefteris Karapetsas Date: Thu, 8 Jan 2015 00:19:19 +0100 Subject: [PATCH] work in progress in testing the new function selector in the end to end tests --- solidityExecutionFramework.h | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/solidityExecutionFramework.h b/solidityExecutionFramework.h index 9f25b3725..9beabdc54 100644 --- a/solidityExecutionFramework.h +++ b/solidityExecutionFramework.h @@ -29,6 +29,7 @@ #include #include #include +#include namespace dev { @@ -48,17 +49,32 @@ public: bytes const& compileAndRun(std::string const& _sourceCode, u256 const& _value = 0, std::string const& _contractName = "") { - dev::solidity::CompilerStack compiler; - compiler.compile(_sourceCode, m_optimize); - bytes code = compiler.getBytecode(_contractName); + /* dev::solidity::CompilerStack compiler; */ + m_compiler.compile(_sourceCode, m_optimize); + bytes code = m_compiler.getBytecode(_contractName); + /* m_contractDefinition = compiler.getContractDefinition(_contractName); */ sendMessage(code, true, _value); BOOST_REQUIRE(!m_output.empty()); return m_output; } - bytes const& callContractFunction(byte _index, bytes const& _data = bytes(), u256 const& _value = 0) + bytes const& callContractFunction(byte _index, bytes const& _data = bytes(), + u256 const& _value = 0) { - sendMessage(bytes(1, _index) + _data, false, _value); + /* if (!_contractDef) */ + /* _contractDef = m_contractDefinition; */ + + unsigned index = 0; + auto interfaceFunctions = m_compiler.getContractDefinition("").getInterfaceFunctions(); + for (auto it = interfaceFunctions.cbegin(); it != interfaceFunctions.cend(); ++it, ++index) + if (index == _index) + { + sendMessage(it->first.asBytes() + _data, false, _value); + /* sendMessage(bytes(1, _index) + _data, false, _value); */ + return m_output; + } + + BOOST_FAIL("Function with index " << _index << "not found"); return m_output; } @@ -149,6 +165,9 @@ protected: bool m_optimize = false; Address m_sender; Address m_contractAddress; + /* ContractDefinition m_contractDefinition; */ + dev::solidity::CompilerStack m_compiler; + eth::State m_state; u256 const m_gasPrice = 100 * eth::szabo; u256 const m_gas = 1000000;