1) get_nonce

2) get_gas_price
3) get_gas_limit
This commit is contained in:
Vlad Dobromyslov 2022-08-22 10:43:53 +03:00
parent e3098c3fb6
commit adc6743ef0
2 changed files with 45 additions and 8 deletions

View file

@ -19,12 +19,17 @@ public:
std::string eth_get_block_by_number(std::string block_number, bool full_block); std::string eth_get_block_by_number(std::string block_number, bool full_block);
std::string eth_get_logs(std::string wallet_contract_address); std::string eth_get_logs(std::string wallet_contract_address);
std::string net_version(); std::string net_version();
std::string eth_get_transaction_count(const std::string& params);
std::string eth_gas_price();
std::string get_chain_id(); std::string get_chain_id();
std::string get_network_id(); std::string get_network_id();
std::string get_nonce(const std::string& address);
std::string get_gas_price();
std::string get_gas_limit();
std::string send_transaction(const std::string& params); std::string eth_send_transaction(const std::string& params);
std::string get_transaction_receipt(const std::string& params); std::string eth_get_transaction_receipt(const std::string& params);
}; };
class sidechain_net_handler_ethereum : public sidechain_net_handler { class sidechain_net_handler_ethereum : public sidechain_net_handler {

View file

@ -44,6 +44,14 @@ std::string ethereum_rpc_client::net_version() {
return send_post_request("net_version", "", debug_rpc_calls); return send_post_request("net_version", "", debug_rpc_calls);
} }
std::string ethereum_rpc_client::eth_get_transaction_count(const std::string& params) {
return send_post_request("eth_getTransactionCount", params, debug_rpc_calls);
}
std::string ethereum_rpc_client::eth_gas_price() {
return send_post_request("eth_gasPrice", "", debug_rpc_calls);
}
std::string ethereum_rpc_client::get_chain_id() { std::string ethereum_rpc_client::get_chain_id() {
std::string reply_str = net_version(); std::string reply_str = net_version();
return retrieve_value_from_reply(reply_str, ""); return retrieve_value_from_reply(reply_str, "");
@ -54,11 +62,35 @@ std::string ethereum_rpc_client::get_network_id() {
return retrieve_value_from_reply(reply_str, "protocols.eth.network"); return retrieve_value_from_reply(reply_str, "protocols.eth.network");
} }
std::string ethereum_rpc_client::send_transaction(const std::string& params) { std::string ethereum_rpc_client::get_nonce(const std::string& address) {
std::string reply_str = eth_get_transaction_count("[\"" + address + "\", \"latest\"]");
return retrieve_value_from_reply(reply_str, "");
}
std::string ethereum_rpc_client::get_gas_price() {
std::string reply_str = eth_gas_price();
return retrieve_value_from_reply(reply_str, "");
}
std::string ethereum_rpc_client::get_gas_limit() {
std::string reply_str = eth_get_block_by_number("latest", false);
if (!reply_str.empty()) {
std::stringstream ss(reply_str);
boost::property_tree::ptree json;
boost::property_tree::read_json(ss, json);
if (json.count("result")) {
std::string gas_limit_s = json.get<std::string>("result.gasLimit");
return gas_limit_s;
}
}
return std::string{};
}
std::string ethereum_rpc_client::eth_send_transaction(const std::string& params) {
return send_post_request("eth_sendTransaction", "[" + params + "]", debug_rpc_calls); return send_post_request("eth_sendTransaction", "[" + params + "]", debug_rpc_calls);
} }
std::string ethereum_rpc_client::get_transaction_receipt(const std::string& params) { std::string ethereum_rpc_client::eth_get_transaction_receipt(const std::string& params) {
return send_post_request("eth_getTransactionReceipt", "[\"" + params + "\"]", debug_rpc_calls); return send_post_request("eth_getTransactionReceipt", "[\"" + params + "\"]", debug_rpc_calls);
} }
@ -504,7 +536,7 @@ std::string sidechain_net_handler_ethereum::send_sidechain_transaction(const sid
boost::property_tree::ptree pt_array; boost::property_tree::ptree pt_array;
for(const auto& signature : sto.signatures) { for(const auto& signature : sto.signatures) {
const auto& transaction = signature.second; const auto& transaction = signature.second;
const std::string sidechain_transaction = rpc_client->send_transaction(transaction); const std::string sidechain_transaction = rpc_client->eth_send_transaction(transaction);
std::stringstream ss_tx(sidechain_transaction); std::stringstream ss_tx(sidechain_transaction);
boost::property_tree::ptree tx_json; boost::property_tree::ptree tx_json;
@ -517,8 +549,8 @@ std::string sidechain_net_handler_ethereum::send_sidechain_transaction(const sid
} }
else { else {
//! Fixme //! Fixme
//! How should we proceed with error in send_transaction //! How should we proceed with error in eth_send_transaction
elog("Error in send_transaction for transaction ${id}, transaction ${transaction}", ("id", sto.id) ("transaction", transaction)); elog("Error in eth_send_transaction for transaction ${id}, transaction ${transaction}", ("id", sto.id) ("transaction", transaction));
} }
} }
pt.add_child("result_array", pt_array); pt.add_child("result_array", pt_array);
@ -539,7 +571,7 @@ bool sidechain_net_handler_ethereum::settle_sidechain_transaction(const sidechai
size_t count = 0; size_t count = 0;
for(const auto &entry : json.get_child("result_array")) { for(const auto &entry : json.get_child("result_array")) {
const std::string receipt = rpc_client->get_transaction_receipt( entry.second.get<std::string>("transaction_receipt") ); const std::string receipt = rpc_client->eth_get_transaction_receipt( entry.second.get<std::string>("transaction_receipt") );
std::stringstream ss_receipt(receipt); std::stringstream ss_receipt(receipt);
boost::property_tree::ptree json_receipt; boost::property_tree::ptree json_receipt;