diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2016-11-28 08:21:01 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2016-11-30 05:54:27 +0800 |
commit | a226db73384ac1b588e07a28dd8f1ff92cbdf6f7 (patch) | |
tree | 67ea757fe4786f70d6343234f1c8dc86de7059f4 /test/libsolidity/SolidityExecutionFramework.cpp | |
parent | 4af30cc5183d83afd8a112bbc29e5c7beb3b7c1a (diff) | |
download | dexon-solidity-a226db73384ac1b588e07a28dd8f1ff92cbdf6f7.tar.gz dexon-solidity-a226db73384ac1b588e07a28dd8f1ff92cbdf6f7.tar.zst dexon-solidity-a226db73384ac1b588e07a28dd8f1ff92cbdf6f7.zip |
Split out Solidity-specific part of ExecutionFramework
Diffstat (limited to 'test/libsolidity/SolidityExecutionFramework.cpp')
-rw-r--r-- | test/libsolidity/SolidityExecutionFramework.cpp | 106 |
1 files changed, 2 insertions, 104 deletions
diff --git a/test/libsolidity/SolidityExecutionFramework.cpp b/test/libsolidity/SolidityExecutionFramework.cpp index 00943367..fe35087c 100644 --- a/test/libsolidity/SolidityExecutionFramework.cpp +++ b/test/libsolidity/SolidityExecutionFramework.cpp @@ -22,7 +22,6 @@ #include <cstdlib> #include <boost/test/framework.hpp> -#include <libdevcore/CommonIO.h> #include <test/libsolidity/SolidityExecutionFramework.h> using namespace std; @@ -30,108 +29,7 @@ using namespace dev; using namespace dev::solidity; using namespace dev::solidity::test; -namespace // anonymous +SolidityExecutionFramework::SolidityExecutionFramework() : + ExecutionFramework() { - h256 const EmptyTrie("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"); -} - -string getIPCSocketPath() -{ - string ipcPath = dev::test::Options::get().ipcPath; - if (ipcPath.empty()) - BOOST_FAIL("ERROR: ipcPath not set! (use --ipcpath <path> or the environment variable ETH_TEST_IPC)"); - - return ipcPath; -} - -ExecutionFramework::ExecutionFramework() : - m_rpc(RPCSession::instance(getIPCSocketPath())), - m_optimize(dev::test::Options::get().optimize), - m_sender(m_rpc.account(0)) -{ - m_rpc.test_rewindToBlock(0); -} - -void ExecutionFramework::sendMessage(bytes const& _data, bool _isCreation, u256 const& _value) -{ - RPCSession::TransactionData d; - d.data = "0x" + toHex(_data); - d.from = "0x" + toString(m_sender); - d.gas = toHex(m_gas, HexPrefix::Add); - d.gasPrice = toHex(m_gasPrice, HexPrefix::Add); - d.value = toHex(_value, HexPrefix::Add); - if (!_isCreation) - { - d.to = dev::toString(m_contractAddress); - BOOST_REQUIRE(m_rpc.eth_getCode(d.to, "latest").size() > 2); - // Use eth_call to get the output - m_output = fromHex(m_rpc.eth_call(d, "latest"), WhenError::Throw); - } - - string txHash = m_rpc.eth_sendTransaction(d); - m_rpc.test_mineBlocks(1); - RPCSession::TransactionReceipt receipt(m_rpc.eth_getTransactionReceipt(txHash)); - - if (_isCreation) - { - m_contractAddress = Address(receipt.contractAddress); - BOOST_REQUIRE(m_contractAddress); - string code = m_rpc.eth_getCode(receipt.contractAddress, "latest"); - m_output = fromHex(code, WhenError::Throw); - } - - m_gasUsed = u256(receipt.gasUsed); - m_logs.clear(); - for (auto const& log: receipt.logEntries) - { - LogEntry entry; - entry.address = Address(log.address); - for (auto const& topic: log.topics) - entry.topics.push_back(h256(topic)); - entry.data = fromHex(log.data, WhenError::Throw); - m_logs.push_back(entry); - } -} - -void ExecutionFramework::sendEther(Address const& _to, u256 const& _value) -{ - RPCSession::TransactionData d; - d.data = "0x"; - d.from = "0x" + toString(m_sender); - d.gas = toHex(m_gas, HexPrefix::Add); - d.gasPrice = toHex(m_gasPrice, HexPrefix::Add); - d.value = toHex(_value, HexPrefix::Add); - d.to = dev::toString(_to); - - string txHash = m_rpc.eth_sendTransaction(d); - m_rpc.test_mineBlocks(1); -} - -size_t ExecutionFramework::currentTimestamp() -{ - auto latestBlock = m_rpc.rpcCall("eth_getBlockByNumber", {"\"latest\"", "false"}); - return size_t(u256(latestBlock.get("timestamp", "invalid").asString())); -} - -Address ExecutionFramework::account(size_t _i) -{ - return Address(m_rpc.accountCreateIfNotExists(_i)); -} - -bool ExecutionFramework::addressHasCode(Address const& _addr) -{ - string code = m_rpc.eth_getCode(toString(_addr), "latest"); - return !code.empty() && code != "0x"; -} - -u256 ExecutionFramework::balanceAt(Address const& _addr) -{ - return u256(m_rpc.eth_getBalance(toString(_addr), "latest")); -} - -bool ExecutionFramework::storageEmpty(Address const& _addr) -{ - h256 root(m_rpc.eth_getStorageRoot(toString(_addr), "latest")); - BOOST_CHECK(root); - return root == EmptyTrie; } |