use ethereum_function_call_encoder for signature calculation

This commit is contained in:
Pavel Baykov 2022-06-03 12:49:30 -03:00
parent 854e5ccb44
commit 1bfa8dba14
2 changed files with 18 additions and 13 deletions

View file

@ -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;

View file

@ -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<void*>(&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);