Skip to content

Instantly share code, notes, and snippets.

@aaroncox
Created April 23, 2025 16:26
Show Gist options
  • Save aaroncox/5de94228bc2feeceaa3b768a1812630d to your computer and use it in GitHub Desktop.
Save aaroncox/5de94228bc2feeceaa3b768a1812630d to your computer and use it in GitHub Desktop.
diff --git a/plugins/trace_api_plugin/CMakeLists.txt b/plugins/trace_api_plugin/CMakeLists.txt
index 8f9f18691..f94981a7e 100644
--- a/plugins/trace_api_plugin/CMakeLists.txt
+++ b/plugins/trace_api_plugin/CMakeLists.txt
@@ -12,4 +12,3 @@ target_link_libraries( trace_api_plugin chain_plugin http_plugin eosio_chain app
target_include_directories( trace_api_plugin PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" )
add_subdirectory( utils )
-add_subdirectory( test )
diff --git a/plugins/trace_api_plugin/include/eosio/trace_api/extract_util.hpp b/plugins/trace_api_plugin/include/eosio/trace_api/extract_util.hpp
index ce240a9b5..f5c9059c6 100644
--- a/plugins/trace_api_plugin/include/eosio/trace_api/extract_util.hpp
+++ b/plugins/trace_api_plugin/include/eosio/trace_api/extract_util.hpp
@@ -15,13 +15,24 @@ inline ActionTrace to_action_trace( const chain::action_trace& at ) {
if constexpr(std::is_same_v<ActionTrace, action_trace_v1>) {
r.return_value = at.return_value;
}
+ r.action_ordinal = at.action_ordinal;
+ r.creator_action_ordinal = at.creator_action_ordinal;
+ r.closest_unnotified_ancestor_action_ordinal = at.closest_unnotified_ancestor_action_ordinal;
if( at.receipt ) {
- r.global_sequence = at.receipt->global_sequence;
+ r.receipt_receiver = at.receipt->receiver;
+ r.global_sequence = at.receipt->global_sequence;
+ r.recv_sequence = at.receipt->recv_sequence;
+ r.auth_sequence = at.receipt->auth_sequence;
+ r.code_sequence = at.receipt->code_sequence;
+ r.abi_sequence = at.receipt->abi_sequence;
}
r.authorization.reserve( at.act.authorization.size());
for( const auto& auth : at.act.authorization ) {
r.authorization.emplace_back( authorization_trace_v0{auth.actor, auth.permission} );
}
+ r.context_free = at.context_free;
+ r.elapsed = at.elapsed;
+ r.account_ram_deltas = at.account_ram_deltas;
return r;
}
diff --git a/plugins/trace_api_plugin/include/eosio/trace_api/trace.hpp b/plugins/trace_api_plugin/include/eosio/trace_api/trace.hpp
index e3fc82a77..0b150d6d4 100644
--- a/plugins/trace_api_plugin/include/eosio/trace_api/trace.hpp
+++ b/plugins/trace_api_plugin/include/eosio/trace_api/trace.hpp
@@ -13,12 +13,39 @@ namespace eosio { namespace trace_api {
};
struct action_trace_v0 {
- uint64_t global_sequence = {};
- chain::name receiver = {};
- chain::name account = {};
- chain::name action = {};
- std::vector<authorization_trace_v0> authorization = {};
- chain::bytes data = {};
+ fc::unsigned_int action_ordinal;
+ fc::unsigned_int creator_action_ordinal;
+ fc::unsigned_int closest_unnotified_ancestor_action_ordinal;
+
+ /// receipt
+ chain::name receipt_receiver = {};
+ //digest_type act_digest;
+ uint64_t global_sequence = 0; ///< total number of actions dispatched since genesis
+ uint64_t recv_sequence = 0; ///< total number of actions with this receiver since genesis
+ chain::flat_map<chain::account_name, uint64_t> auth_sequence = {};
+ fc::unsigned_int code_sequence = 0; ///< total number of setcodes
+ fc::unsigned_int abi_sequence = 0; ///< total number of setabis
+ /// receipt
+
+ chain::name receiver;
+
+ /// act
+ chain::name account;
+ chain::name action; // name
+ std::vector<authorization_trace_v0> authorization;
+ chain::bytes data;
+ /// act
+
+ bool context_free = false;
+ fc::microseconds elapsed;
+ //string console;
+ //transaction_id_type trx_id; ///< the transaction that generated this action
+ //uint32_t block_num = 0;
+ //block_timestamp_type block_time;
+ //fc::optional<block_id_type> producer_block_id;
+ chain::flat_set<chain::account_delta> account_ram_deltas;
+ //fc::optional<fc::exception> except;
+ //fc::optional<uint64_t> error_code;
};
struct action_trace_v1 : public action_trace_v0 {
@@ -98,7 +125,7 @@ namespace eosio { namespace trace_api {
} }
FC_REFLECT(eosio::trace_api::authorization_trace_v0, (account)(permission))
-FC_REFLECT(eosio::trace_api::action_trace_v0, (global_sequence)(receiver)(account)(action)(authorization)(data))
+FC_REFLECT(eosio::trace_api::action_trace_v0, (action_ordinal)(creator_action_ordinal)(closest_unnotified_ancestor_action_ordinal)(receipt_receiver)(global_sequence)(recv_sequence)(auth_sequence)(code_sequence)(abi_sequence)(receiver)(account)(action)(authorization)(data)(context_free)(elapsed)(account_ram_deltas))
FC_REFLECT_DERIVED(eosio::trace_api::action_trace_v1, (eosio::trace_api::action_trace_v0),(return_value))
FC_REFLECT(eosio::trace_api::transaction_trace_v0, (id)(actions))
FC_REFLECT_DERIVED(eosio::trace_api::transaction_trace_v1, (eosio::trace_api::transaction_trace_v0), (status)(cpu_usage_us)(net_usage_words)(signatures)(trx_header))
diff --git a/plugins/trace_api_plugin/request_handler.cpp b/plugins/trace_api_plugin/request_handler.cpp
index a20225e2a..a19397b42 100644
--- a/plugins/trace_api_plugin/request_handler.cpp
+++ b/plugins/trace_api_plugin/request_handler.cpp
@@ -16,7 +16,7 @@ namespace {
result.reserve(authorizations.size());
for ( const auto& a: authorizations) {
result.emplace_back(fc::mutable_variant_object()
- ("account", a.account.to_string())
+ ("actor", a.account.to_string())
("permission", a.permission.to_string())
);
}
@@ -40,11 +40,24 @@ namespace {
auto action_variant = fc::mutable_variant_object();
action_variant("global_sequence", a.global_sequence)
+ ("action_ordinal", a.action_ordinal)
+ ("creator_action_ordinal", a.creator_action_ordinal)
+ ("closest_unnotified_ancestor_action_ordinal", a.closest_unnotified_ancestor_action_ordinal)
+ ("receipt_receiver", a.receipt_receiver.to_string())
+ ("global_sequence", a.global_sequence)
+ ("recv_sequence", a.recv_sequence)
+ ("auth_sequence", a.auth_sequence)
+ ("code_sequence", a.code_sequence)
+ ("abi_sequence", a.abi_sequence)
("receiver", a.receiver.to_string())
("account", a.account.to_string())
- ("action", a.action.to_string())
+ ("name", a.action.to_string())
("authorization", process_authorizations(a.authorization))
- ("data", fc::to_hex(a.data.data(), a.data.size()));
+ ("data", fc::to_hex(a.data.data(), a.data.size()))
+ ("context_free", a.context_free)
+ ("elapsed", a.elapsed)
+ ("account_ram_deltas", a.account_ram_deltas)
+ ;
if constexpr(std::is_same_v<ActionTrace, action_trace_v0>){
auto [params, return_data] = data_handler(a);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment