Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
evm_formatter.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <format>
4#include <string>
5#include <sstream>
6#include <iomanip>
7
8// Undefine the conflicting macro
9#ifdef interface
10 #undef interface
11#endif
12
13#include <evmc/evmc.h>
14#include <evmc/evmc.hpp>
15#include <evmc/hex.hpp>
16
17#ifndef interface
18 #define interface __STRUCT__
19#endif
20
21namespace dcn
22{
23
24}
25
26template <>
27struct std::formatter<evmc_address> : std::formatter<std::string> {
28 auto format(const evmc_address & addr, format_context& ctx) const {
29 return formatter<std::string>::format(evmc::hex(evmc::address(addr)), ctx);
30 }
31};
32
33template <>
34struct std::formatter<evmc::address> : std::formatter<std::string> {
35 auto format(const evmc::address & addr, format_context& ctx) const {
36 return formatter<std::string>{}.format(evmc::hex(addr), ctx);
37 }
38};
39
40template <>
41struct std::formatter<evmc_status_code> : std::formatter<std::string> {
42 auto format(const evmc_status_code & code, format_context& ctx) const {
43 switch(code)
44 {
45 case EVMC_SUCCESS : return formatter<string>::format("Success", ctx);
46 case EVMC_FAILURE : return formatter<string>::format("Failure", ctx);
47 case EVMC_REVERT : return formatter<string>::format("Revert", ctx);
48 case EVMC_OUT_OF_GAS : return formatter<string>::format("Out of Gas", ctx);
49 case EVMC_INVALID_INSTRUCTION : return formatter<string>::format("Invalid Instruction", ctx);
50 case EVMC_UNDEFINED_INSTRUCTION : return formatter<string>::format("Undefined Instruction", ctx);
51 case EVMC_STACK_OVERFLOW : return formatter<string>::format("Stack Overflow", ctx);
52 case EVMC_STACK_UNDERFLOW : return formatter<string>::format("Stack Underflow", ctx);
53 case EVMC_BAD_JUMP_DESTINATION : return formatter<string>::format("Bad Jump Destination", ctx);
54 case EVMC_INVALID_MEMORY_ACCESS : return formatter<string>::format("Invalid Memory Access", ctx);
55 case EVMC_CALL_DEPTH_EXCEEDED : return formatter<string>::format("Call Depth Exceeded", ctx);
56 case EVMC_STATIC_MODE_VIOLATION : return formatter<string>::format("Static Mode Violation", ctx);
57 case EVMC_PRECOMPILE_FAILURE : return formatter<string>::format("Precompile Failure", ctx);
58 case EVMC_CONTRACT_VALIDATION_FAILURE : return formatter<string>::format("Contract Validation Failure", ctx);
59 case EVMC_ARGUMENT_OUT_OF_RANGE : return formatter<string>::format("Argument Out of Range", ctx);
60 case EVMC_WASM_UNREACHABLE_INSTRUCTION : return formatter<string>::format("WASM Unreachable Instruction", ctx);
61 case EVMC_WASM_TRAP : return formatter<string>::format("WASM Trap", ctx);
62 case EVMC_INSUFFICIENT_BALANCE : return formatter<string>::format("Insufficient Balance", ctx);
63 case EVMC_INTERNAL_ERROR : return formatter<string>::format("Internal Error", ctx);
64 case EVMC_REJECTED : return formatter<string>::format("Rejected", ctx);
65 case EVMC_OUT_OF_MEMORY : return formatter<string>::format("Out of Memory", ctx);
66
67 default: return formatter<string>::format("Unknown", ctx);
68 }
69 return formatter<string>::format("", ctx);
70 }
71};
72
73template <>
74struct std::formatter<evmc_call_kind> : std::formatter<std::string> {
75 auto format(const evmc_call_kind & kind, format_context& ctx) const {
76 switch(kind)
77 {
78 case EVMC_CALL : return formatter<string>::format("Call", ctx);
79 case EVMC_DELEGATECALL : return formatter<string>::format("Delegate Call", ctx);
80 case EVMC_CALLCODE : return formatter<string>::format("Call code", ctx);
81 case EVMC_CREATE : return formatter<string>::format("Create", ctx);
82 case EVMC_CREATE2 : return formatter<string>::format("Create2", ctx);
83 case EVMC_EOFCREATE : return formatter<string>::format("EOF Create", ctx);
84
85 default: return formatter<string>::format("Unknown", ctx);
86 }
87 return formatter<string>::format("", ctx);
88 }
89};
90
91template <>
92struct std::formatter<evmc_flags> : std::formatter<std::string> {
93 auto format(const evmc_flags & flags, format_context& ctx) const {
94 switch(flags)
95 {
96 case EVMC_STATIC : return formatter<string>::format("Static", ctx);
97 case EVMC_DELEGATED : return formatter<string>::format("Delegated", ctx);
98 default: return formatter<string>::format("Unknown", ctx);
99 }
100 return formatter<string>::format("", ctx);
101 }
102};
103
104template <>
105struct std::formatter<evmc::bytes32> : std::formatter<std::string> {
106 auto format(const evmc::bytes32 & bytes, format_context& ctx) const {
107 std::string hex_str = evmc::hex(bytes);
108 return std::formatter<std::string>::format(hex_str, ctx);
109 }
110};
111
112
113
114//TODO evmc_revision
115
116
Definition decentralised_art.hpp:30
auto format(const evmc::address &addr, format_context &ctx) const
Definition evm_formatter.hpp:35
auto format(const evmc::bytes32 &bytes, format_context &ctx) const
Definition evm_formatter.hpp:106
auto format(const evmc_address &addr, format_context &ctx) const
Definition evm_formatter.hpp:28
auto format(const evmc_call_kind &kind, format_context &ctx) const
Definition evm_formatter.hpp:75
auto format(const evmc_flags &flags, format_context &ctx) const
Definition evm_formatter.hpp:93
auto format(const evmc_status_code &code, format_context &ctx) const
Definition evm_formatter.hpp:42