aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/debug_utilities/cn_deserialize.cpp34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/debug_utilities/cn_deserialize.cpp b/src/debug_utilities/cn_deserialize.cpp
index 4f274a66e..dfbd3b864 100644
--- a/src/debug_utilities/cn_deserialize.cpp
+++ b/src/debug_utilities/cn_deserialize.cpp
@@ -41,6 +41,22 @@ using namespace epee;
using namespace cryptonote;
+static void print_extra_fields(const std::vector<cryptonote::tx_extra_field> &fields)
+{
+ std::cout << "tx_extra has " << fields.size() << " field(s)" << std::endl;
+ for (size_t n = 0; n < fields.size(); ++n)
+ {
+ std::cout << "field " << n << ": ";
+ if (typeid(cryptonote::tx_extra_padding) == fields[n].type()) std::cout << "extra padding: " << boost::get<cryptonote::tx_extra_padding>(fields[n]).size << " bytes";
+ else if (typeid(cryptonote::tx_extra_pub_key) == fields[n].type()) std::cout << "extra pub key: " << boost::get<cryptonote::tx_extra_pub_key>(fields[n]).pub_key;
+ else if (typeid(cryptonote::tx_extra_nonce) == fields[n].type()) std::cout << "extra nonce: " << epee::string_tools::buff_to_hex_nodelimer(boost::get<cryptonote::tx_extra_nonce>(fields[n]).nonce);
+ else if (typeid(cryptonote::tx_extra_merge_mining_tag) == fields[n].type()) std::cout << "extra merge mining tag: depth " << boost::get<cryptonote::tx_extra_merge_mining_tag>(fields[n]).depth << ", merkle root " << boost::get<cryptonote::tx_extra_merge_mining_tag>(fields[n]).merkle_root;
+ else if (typeid(cryptonote::tx_extra_mysterious_minergate) == fields[n].type()) std::cout << "extra minergate custom: " << epee::string_tools::buff_to_hex_nodelimer(boost::get<cryptonote::tx_extra_mysterious_minergate>(fields[n]).data);
+ else std::cout << "unknown";
+ std::cout << std::endl;
+ }
+}
+
int main(int argc, char* argv[])
{
uint32_t log_level = 0;
@@ -160,24 +176,18 @@ int main(int argc, char* argv[])
if (!fields.empty())
{
- std::cout << "tx_extra has " << fields.size() << " field(s)" << std::endl;
- for (size_t n = 0; n < fields.size(); ++n)
- {
- std::cout << "field " << n << ": ";
- if (typeid(cryptonote::tx_extra_padding) == fields[n].type()) std::cout << "extra padding: " << boost::get<cryptonote::tx_extra_padding>(fields[n]).size << " bytes";
- else if (typeid(cryptonote::tx_extra_pub_key) == fields[n].type()) std::cout << "extra pub key: " << boost::get<cryptonote::tx_extra_pub_key>(fields[n]).pub_key;
- else if (typeid(cryptonote::tx_extra_nonce) == fields[n].type()) std::cout << "extra nonce: " << epee::string_tools::buff_to_hex_nodelimer(boost::get<cryptonote::tx_extra_nonce>(fields[n]).nonce);
- else if (typeid(cryptonote::tx_extra_merge_mining_tag) == fields[n].type()) std::cout << "extra merge mining tag: depth " << boost::get<cryptonote::tx_extra_merge_mining_tag>(fields[n]).depth << ", merkle root " << boost::get<cryptonote::tx_extra_merge_mining_tag>(fields[n]).merkle_root;
- else if (typeid(cryptonote::tx_extra_mysterious_minergate) == fields[n].type()) std::cout << "extra minergate custom: " << epee::string_tools::buff_to_hex_nodelimer(boost::get<cryptonote::tx_extra_mysterious_minergate>(fields[n]).data);
- else std::cout << "unknown";
- std::cout << std::endl;
- }
+ print_extra_fields(fields);
}
else
{
std::cout << "No fields were found in tx_extra" << std::endl;
}
}
+ else if (cryptonote::parse_tx_extra(std::vector<uint8_t>(blob.begin(), blob.end()), fields) && !fields.empty())
+ {
+ std::cout << "Parsed tx_extra:" << std::endl;
+ print_extra_fields(fields);
+ }
else
{
std::cerr << "Not a recognized CN type" << std::endl;