From 94bb2ca08b03587ad28fa199568f7be93805d5b8 Mon Sep 17 00:00:00 2001 From: Todd Fleming Date: Wed, 22 Aug 2018 10:48:34 -0400 Subject: [PATCH 1/2] get_raw_abi --- plugins/chain_api_plugin/chain_api_plugin.cpp | 1 + plugins/chain_plugin/chain_plugin.cpp | 13 +++++++++++++ .../include/eosio/chain_plugin/chain_plugin.hpp | 13 +++++++++++++ 3 files changed, 27 insertions(+) diff --git a/plugins/chain_api_plugin/chain_api_plugin.cpp b/plugins/chain_api_plugin/chain_api_plugin.cpp index 58098501f04..2456e15c340 100644 --- a/plugins/chain_api_plugin/chain_api_plugin.cpp +++ b/plugins/chain_api_plugin/chain_api_plugin.cpp @@ -87,6 +87,7 @@ void chain_api_plugin::plugin_startup() { CHAIN_RO_CALL(get_code, 200), CHAIN_RO_CALL(get_abi, 200), CHAIN_RO_CALL(get_raw_code_and_abi, 200), + CHAIN_RO_CALL(get_raw_abi, 200), CHAIN_RO_CALL(get_table_rows, 200), CHAIN_RO_CALL(get_currency_balance, 200), CHAIN_RO_CALL(get_currency_stats, 200), diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index 11b62273808..fd153b3f3e9 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -1502,6 +1502,19 @@ read_only::get_raw_code_and_abi_results read_only::get_raw_code_and_abi( const g return result; } +read_only::get_raw_abi_results read_only::get_raw_abi( const get_raw_abi_params& params )const { + get_raw_abi_results result; + result.account_name = params.account_name; + + const auto& d = db.db(); + const auto& accnt = d.get(params.account_name); + // todo: fetch hash from table in eosio account + result.code_hash = fc::sha256::hash( accnt.code.data(), accnt.code.size() ); + result.abi = blob{{accnt.abi.begin(), accnt.abi.end()}}; + + return result; +} + read_only::get_account_results read_only::get_account( const get_account_params& params )const { get_account_results result; result.account_name = params.account_name; diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index 2fd665d6255..0945825596f 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -171,10 +171,21 @@ class read_only { name account_name; }; + struct get_raw_abi_params { + name account_name; + }; + + struct get_raw_abi_results { + name account_name; + fc::sha256 code_hash; + chain::blob abi; + }; + get_code_results get_code( const get_code_params& params )const; get_abi_results get_abi( const get_abi_params& params )const; get_raw_code_and_abi_results get_raw_code_and_abi( const get_raw_code_and_abi_params& params)const; + get_raw_abi_results get_raw_abi( const get_raw_abi_params& params)const; @@ -648,6 +659,8 @@ FC_REFLECT( eosio::chain_apis::read_only::get_code_params, (account_name)(code_a FC_REFLECT( eosio::chain_apis::read_only::get_abi_params, (account_name) ) FC_REFLECT( eosio::chain_apis::read_only::get_raw_code_and_abi_params, (account_name) ) FC_REFLECT( eosio::chain_apis::read_only::get_raw_code_and_abi_results, (account_name)(wasm)(abi) ) +FC_REFLECT( eosio::chain_apis::read_only::get_raw_abi_params, (account_name) ) +FC_REFLECT( eosio::chain_apis::read_only::get_raw_abi_results, (account_name)(code_hash)(abi) ) FC_REFLECT( eosio::chain_apis::read_only::producer_info, (producer_name) ) FC_REFLECT( eosio::chain_apis::read_only::abi_json_to_bin_params, (code)(action)(args) ) FC_REFLECT( eosio::chain_apis::read_only::abi_json_to_bin_result, (binargs) ) From 3aab9499243b65ec6baf98d9017c90007abb8b48 Mon Sep 17 00:00:00 2001 From: Todd Fleming Date: Thu, 13 Sep 2018 16:48:56 -0400 Subject: [PATCH 2/2] get_raw_abi --- plugins/chain_plugin/chain_plugin.cpp | 5 +++-- .../include/eosio/chain_plugin/chain_plugin.hpp | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index 53c0df50cf2..fe3b4b28332 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -1572,9 +1572,10 @@ read_only::get_raw_abi_results read_only::get_raw_abi( const get_raw_abi_params& const auto& d = db.db(); const auto& accnt = d.get(params.account_name); - // todo: fetch hash from table in eosio account + result.abi_hash = fc::sha256::hash( accnt.abi.data(), accnt.abi.size() ); result.code_hash = fc::sha256::hash( accnt.code.data(), accnt.code.size() ); - result.abi = blob{{accnt.abi.begin(), accnt.abi.end()}}; + if( !params.abi_hash || *params.abi_hash != result.abi_hash ) + result.abi = blob{{accnt.abi.begin(), accnt.abi.end()}}; return result; } diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index 40f395ac9e8..d4f4d49ea6e 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -182,12 +182,14 @@ class read_only { struct get_raw_abi_params { name account_name; + optional abi_hash; }; struct get_raw_abi_results { name account_name; fc::sha256 code_hash; - chain::blob abi; + fc::sha256 abi_hash; + optional abi; }; @@ -696,8 +698,8 @@ FC_REFLECT( eosio::chain_apis::read_only::get_code_hash_params, (account_name) ) FC_REFLECT( eosio::chain_apis::read_only::get_abi_params, (account_name) ) FC_REFLECT( eosio::chain_apis::read_only::get_raw_code_and_abi_params, (account_name) ) FC_REFLECT( eosio::chain_apis::read_only::get_raw_code_and_abi_results, (account_name)(wasm)(abi) ) -FC_REFLECT( eosio::chain_apis::read_only::get_raw_abi_params, (account_name) ) -FC_REFLECT( eosio::chain_apis::read_only::get_raw_abi_results, (account_name)(code_hash)(abi) ) +FC_REFLECT( eosio::chain_apis::read_only::get_raw_abi_params, (account_name)(abi_hash) ) +FC_REFLECT( eosio::chain_apis::read_only::get_raw_abi_results, (account_name)(code_hash)(abi_hash)(abi) ) FC_REFLECT( eosio::chain_apis::read_only::producer_info, (producer_name) ) FC_REFLECT( eosio::chain_apis::read_only::abi_json_to_bin_params, (code)(action)(args) ) FC_REFLECT( eosio::chain_apis::read_only::abi_json_to_bin_result, (binargs) )