use ethereum_function_call_encoder for signature calculation
This commit is contained in:
parent
854e5ccb44
commit
1bfa8dba14
2 changed files with 18 additions and 13 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue