diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_eth.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_eth.hpp index 505bc3a4..40f2a7ae 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_eth.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_eth.hpp @@ -121,13 +121,16 @@ public: private: class ethereum_function_call_encoder { - std::string encode_function_signature(const std::string& function_signature); - std::string encode_address(const std::string& addr); - std::string encode_uint256(const std::string& value); - std::string encode_uint8(uint8_t value); - std::string encode_bytes(const std::string& values); + public: + std::string encode_function_signature(const std::string& function_signature); + std::string encode_address(const std::string& addr); + std::string encode_uint256(const std::string& value); + std::string encode_uint8(uint8_t value); + std::string encode_bytes(const std::string& values); }; + ethereum_function_call_encoder m_ethereum_function_call_encoder; + std::string geth_url; uint64_t t_id; std::string account_address; diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_eth.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_eth.cpp index 25464be8..7fe06e86 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_eth.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_eth.cpp @@ -28,16 +28,16 @@ namespace graphene { namespace peerplays_sidechain { // ============================================================================= std::string eth_rpc_client::ethereum_function_call_encoder::encode_function_signature(const std::string& function_signature) { sha3_context c; - uint8_t *hash; + char *hash; sha3_Init256(static_cast(&c)); + sha3_SetFlags(&c, SHA3_FLAGS_KECCAK); sha3_Update(&c, "abc", 3); - hash = (uint8_t*)sha3_Finalize(&c); + hash = (char*)sha3_Finalize(&c); + std::string output(hash); + output = output.substr(0,8); -// 'hash' points to a buffer inside 'c' -// with the value of SHA3-256 -// - return ""; + return output; }; std::string eth_rpc_client::ethereum_function_call_encoder::encode_address(const std::string& addr) { @@ -268,7 +268,8 @@ uint64_t eth_rpc_client::add_owner(const std::string& addr ) { //It's require to execute //execTransaction method of smart contract , using safe-account address //execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 dataGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) - std::string method_id = "6a761202"; + std::string method_id = m_ethereum_function_call_encoder.encode_function_signature("execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)"); + FC_ASSERT("6a761202" == method_id); std::string address = safe_account_addr; std::string value = str(boost::format("%020u") % 0); std::string data = "f8dc5dd9000000000000000000000000" + owners[0] + "000000000000000000000000" + addr + str(boost::format("%032u") % threshold); @@ -297,7 +298,8 @@ uint64_t eth_rpc_client::remove_owner(const std::string& addr, uint32_t threshol //It's require to execute //execTransaction method of smart contract , using safe-account address //execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 dataGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) - std::string method_id = "6a761202"; + std::string method_id = m_ethereum_function_call_encoder.encode_function_signature("execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)"); + FC_ASSERT("6a761202" == method_id); std::string address = safe_account_addr; std::string value = str(boost::format("%032u") % 0); std::string data = "f8dc5dd90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000" + addr + str(boost::format("%032u") % threshold);