From a4ef7ea8ee6c14e55b85fd339a531bfed880fc99 Mon Sep 17 00:00:00 2001 From: rodiazet Date: Fri, 7 Feb 2025 11:33:09 +0100 Subject: [PATCH] evmmax: Add naive evmmax tracing log --- include/evmmax/evmmax.hpp | 2 ++ lib/evmmax/evmmax.cpp | 20 ++++++++++++++++++++ lib/evmone/tracing.cpp | 7 +++++++ 3 files changed, 29 insertions(+) diff --git a/include/evmmax/evmmax.hpp b/include/evmmax/evmmax.hpp index 495d1324e4..2efcedbec0 100644 --- a/include/evmmax/evmmax.hpp +++ b/include/evmmax/evmmax.hpp @@ -72,6 +72,8 @@ class EVMMAXState /// Size (expressed in multiples of 8 bytes) needed to represent modulus. [[nodiscard]] size_t active_mod_value_size_multiplier() const noexcept; + void print_state(std::ostream& out) const noexcept; + void clear() noexcept; EVMMAXState& operator=(EVMMAXState&&) noexcept; diff --git a/lib/evmmax/evmmax.cpp b/lib/evmmax/evmmax.cpp index d3c205b726..4b9f48be51 100644 --- a/lib/evmmax/evmmax.cpp +++ b/lib/evmmax/evmmax.cpp @@ -20,6 +20,7 @@ struct EXMMAXModStateInterface size_t x_stride, size_t y_idx, size_t y_stride, size_t count) noexcept = 0; [[nodiscard]] virtual bool mulmodx(size_t dst_idx, size_t dst_stride, size_t x_idx, size_t x_stride, size_t y_idx, size_t y_stride, size_t count) noexcept = 0; + virtual void print(std::ostream& out) noexcept = 0; [[nodiscard]] virtual size_t value_size_multiplier() const noexcept = 0; [[nodiscard]] virtual size_t num_values() const noexcept = 0; @@ -148,6 +149,17 @@ struct EXMMAXModState : public EXMMAXModStateInterface dst_stride, x_idx, x_stride, y_idx, y_stride, count); } + void print(std::ostream& out) noexcept override + { + out << "{ \n"; + for (size_t i = 0; i < values.size(); ++i) + { + if (values[i] != 0) + out << "\t" << i << ": " << hex(arith.from_mont(values[i])) << ", \n"; + } + out << "}\n"; + } + [[nodiscard]] size_t num_values() const noexcept override { return values.size(); } [[nodiscard]] size_t value_size_multiplier() const noexcept override { return value_size_mult; } }; @@ -309,6 +321,14 @@ struct EXMMAXModState : public EXMMAXModStateInterface return active_mod->value_size_multiplier(); } +void EVMMAXState::print_state(std::ostream& out) const noexcept +{ + if (!is_activated()) + return; + + active_mod->print(out); +} + void EVMMAXState::clear() noexcept { active_mod = nullptr; diff --git a/lib/evmone/tracing.cpp b/lib/evmone/tracing.cpp index fdad141736..fb71d2b998 100644 --- a/lib/evmone/tracing.cpp +++ b/lib/evmone/tracing.cpp @@ -124,6 +124,13 @@ class InstructionTracer : public Tracer m_out << R"(,"refund":)" << std::dec << state.gas_refund; m_out << R"(,"opName":")" << get_name(opcode) << '"'; + // if (state.evmmax_state.is_activated()) + // { + // m_out << R"(,"evmmax":")" << std::endl; + // m_out << ""; + // state.evmmax_state.print_state(m_out); + // } + m_out << "}\n"; }