mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-03 00:45:49 +00:00
@@ -2,8 +2,6 @@
|
||||
NIH dep: wasmedge: web assembly runtime for hooks.
|
||||
#]===================================================================]
|
||||
|
||||
find_package(Curses REQUIRED)
|
||||
include_directories(${CURSES_INCLUDE_DIR})
|
||||
find_package(LLVM REQUIRED CONFIG)
|
||||
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
|
||||
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
|
||||
@@ -26,7 +24,6 @@ ExternalProject_Add (wasmedge_src
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||
-DLLVM_DIR=${LLVM_DIR}
|
||||
-DLLVM_LIBRARY_DIR=${LLVM_LIBRARY_DIR}
|
||||
-DLLVM_ENABLE_TERMINFO=OFF
|
||||
$<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
|
||||
$<$<BOOL:${MSVC}>:
|
||||
"-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP -march=native"
|
||||
@@ -66,6 +63,4 @@ set_target_properties (wasmedge PROPERTIES
|
||||
"${wasmedge_src_BINARY_DIR}/include/api/"
|
||||
)
|
||||
target_link_libraries (ripple_libs INTERFACE wasmedge)
|
||||
target_link_libraries(ripple_libs INTERFACE ${CURSES_LIBRARY})
|
||||
target_link_libraries(ripple_libs INTERFACE xar)
|
||||
add_library (NIH::WasmEdge ALIAS wasmedge)
|
||||
|
||||
@@ -79,7 +79,7 @@ Invoke::calculateBaseFee(ReadView const& view, STTx const& tx)
|
||||
XRPAmount extraFee{0};
|
||||
|
||||
if (tx.isFieldPresent(sfBlob))
|
||||
extraFee += XRPAmount{ static_cast<XRPAmount>(tx.getFieldVL(sfBlob).size()) };
|
||||
extraFee += XRPAmount{ tx.getFieldVL(sfBlob).size() };
|
||||
|
||||
if (tx.isFieldPresent(sfHookParameters))
|
||||
{
|
||||
@@ -93,7 +93,7 @@ Invoke::calculateBaseFee(ReadView const& view, STTx const& tx)
|
||||
(param.isFieldPresent(sfHookParameterValue) ?
|
||||
param.getFieldVL(sfHookParameterValue).size() : 0);
|
||||
}
|
||||
extraFee += XRPAmount { static_cast<XRPAmount>(paramBytes) };
|
||||
extraFee += XRPAmount { paramBytes };
|
||||
}
|
||||
|
||||
return Transactor::calculateBaseFee(view, tx) + extraFee;
|
||||
|
||||
@@ -547,7 +547,7 @@ SetHook::calculateBaseFee(ReadView const& view, STTx const& tx)
|
||||
(param.isFieldPresent(sfHookParameterValue) ?
|
||||
param.getFieldVL(sfHookParameterValue).size() : 0);
|
||||
}
|
||||
extraFee += XRPAmount { static_cast<XRPAmount>(paramBytes) };
|
||||
extraFee += XRPAmount { paramBytes };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -69,281 +69,281 @@ private:
|
||||
Json::Value ret{Json::objectValue};
|
||||
ret[jss::TYPES] = Json::objectValue;
|
||||
|
||||
// auto const translate = [](std::string inp) -> std::string {
|
||||
// auto replace = [&](const char* f, const char* r) -> std::string {
|
||||
// std::string out = inp;
|
||||
// boost::replace_all(out, f, r);
|
||||
// return out;
|
||||
// };
|
||||
auto const translate = [](std::string inp) -> std::string {
|
||||
auto replace = [&](const char* f, const char* r) -> std::string {
|
||||
std::string out = inp;
|
||||
boost::replace_all(out, f, r);
|
||||
return out;
|
||||
};
|
||||
|
||||
// auto find = [&](const char* s) -> bool {
|
||||
// return inp.find(s) != std::string::npos;
|
||||
// };
|
||||
auto find = [&](const char* s) -> bool {
|
||||
return inp.find(s) != std::string::npos;
|
||||
};
|
||||
|
||||
// if (find("UINT"))
|
||||
// {
|
||||
// if (find("256") || find("160") || find("128"))
|
||||
// return replace("UINT", "Hash");
|
||||
// else
|
||||
// return replace("UINT", "UInt");
|
||||
// }
|
||||
if (find("UINT"))
|
||||
{
|
||||
if (find("256") || find("160") || find("128"))
|
||||
return replace("UINT", "Hash");
|
||||
else
|
||||
return replace("UINT", "UInt");
|
||||
}
|
||||
|
||||
// if (inp == "OBJECT")
|
||||
// return "STObject";
|
||||
// if (inp == "ARRAY")
|
||||
// return "STArray";
|
||||
// if (inp == "AMM")
|
||||
// return "AMM";
|
||||
// if (inp == "ACCOUNT")
|
||||
// return "AccountID";
|
||||
// if (inp == "LEDGERENTRY")
|
||||
// return "LedgerEntry";
|
||||
// if (inp == "NOTPRESENT")
|
||||
// return "NotPresent";
|
||||
// if (inp == "PATHSET")
|
||||
// return "PathSet";
|
||||
// if (inp == "VL")
|
||||
// return "Blob";
|
||||
// if (inp == "DIR_NODE")
|
||||
// return "DirectoryNode";
|
||||
// if (inp == "PAYCHAN")
|
||||
// return "PayChannel";
|
||||
if (inp == "OBJECT")
|
||||
return "STObject";
|
||||
if (inp == "ARRAY")
|
||||
return "STArray";
|
||||
if (inp == "AMM")
|
||||
return "AMM";
|
||||
if (inp == "ACCOUNT")
|
||||
return "AccountID";
|
||||
if (inp == "LEDGERENTRY")
|
||||
return "LedgerEntry";
|
||||
if (inp == "NOTPRESENT")
|
||||
return "NotPresent";
|
||||
if (inp == "PATHSET")
|
||||
return "PathSet";
|
||||
if (inp == "VL")
|
||||
return "Blob";
|
||||
if (inp == "DIR_NODE")
|
||||
return "DirectoryNode";
|
||||
if (inp == "PAYCHAN")
|
||||
return "PayChannel";
|
||||
|
||||
// static const std::map<std::string, std::string>
|
||||
// capitalization_exceptions = {
|
||||
// {"NFTOKEN", "NFToken"},
|
||||
// {"UNL", "UNL"},
|
||||
// {"XCHAIN", "XChain"},
|
||||
// {"ID", "ID"},
|
||||
// {"AMM", "AMM"},
|
||||
// {"URITOKEN", "URIToken"},
|
||||
// {"URI", "URI"}};
|
||||
static const std::map<std::string, std::string>
|
||||
capitalization_exceptions = {
|
||||
{"NFTOKEN", "NFToken"},
|
||||
{"UNL", "UNL"},
|
||||
{"XCHAIN", "XChain"},
|
||||
{"ID", "ID"},
|
||||
{"AMM", "AMM"},
|
||||
{"URITOKEN", "URIToken"},
|
||||
{"URI", "URI"}};
|
||||
|
||||
// std::string out;
|
||||
// size_t pos = 0;
|
||||
// for (;;)
|
||||
// {
|
||||
// pos = inp.find("_");
|
||||
// if (pos == std::string::npos)
|
||||
// pos = inp.size();
|
||||
// std::string token = inp.substr(0, pos);
|
||||
// if (auto const e = capitalization_exceptions.find(token);
|
||||
// e != capitalization_exceptions.end())
|
||||
// out += e->second;
|
||||
// else if (token.size() > 1)
|
||||
// {
|
||||
// boost::algorithm::to_lower(token);
|
||||
// token.data()[0] -= ('a' - 'A');
|
||||
// out += token;
|
||||
// }
|
||||
// else
|
||||
// out += token;
|
||||
// if (pos == inp.size())
|
||||
// break;
|
||||
// inp = inp.substr(pos + 1);
|
||||
// }
|
||||
// return out;
|
||||
// };
|
||||
std::string out;
|
||||
size_t pos = 0;
|
||||
for (;;)
|
||||
{
|
||||
pos = inp.find("_");
|
||||
if (pos == std::string::npos)
|
||||
pos = inp.size();
|
||||
std::string token = inp.substr(0, pos);
|
||||
if (auto const e = capitalization_exceptions.find(token);
|
||||
e != capitalization_exceptions.end())
|
||||
out += e->second;
|
||||
else if (token.size() > 1)
|
||||
{
|
||||
boost::algorithm::to_lower(token);
|
||||
token.data()[0] -= ('a' - 'A');
|
||||
out += token;
|
||||
}
|
||||
else
|
||||
out += token;
|
||||
if (pos == inp.size())
|
||||
break;
|
||||
inp = inp.substr(pos + 1);
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
||||
// ret[jss::TYPES]["Done"] = -1;
|
||||
// std::map<int32_t, std::string> type_map{{-1, "Done"}};
|
||||
// for (auto [value, name] : magic_enum::enum_entries<SerializedTypeID>())
|
||||
// {
|
||||
// std::string type_name =
|
||||
// translate(STR(name).substr(4) /* remove STI_ */);
|
||||
// int32_t type_value = std::stoi(STR(value));
|
||||
// ret[jss::TYPES][type_name] = type_value;
|
||||
// type_map[type_value] = type_name;
|
||||
// }
|
||||
ret[jss::TYPES]["Done"] = -1;
|
||||
std::map<int32_t, std::string> type_map{{-1, "Done"}};
|
||||
for (auto [value, name] : magic_enum::enum_entries<SerializedTypeID>())
|
||||
{
|
||||
std::string type_name =
|
||||
translate(STR(name).substr(4) /* remove STI_ */);
|
||||
int32_t type_value = std::stoi(STR(value));
|
||||
ret[jss::TYPES][type_name] = type_value;
|
||||
type_map[type_value] = type_name;
|
||||
}
|
||||
|
||||
// ret[jss::LEDGER_ENTRY_TYPES] = Json::objectValue;
|
||||
// ret[jss::LEDGER_ENTRY_TYPES][jss::Invalid] = -1;
|
||||
ret[jss::LEDGER_ENTRY_TYPES] = Json::objectValue;
|
||||
ret[jss::LEDGER_ENTRY_TYPES][jss::Invalid] = -1;
|
||||
|
||||
// for (auto [value, name] : magic_enum::enum_entries<LedgerEntryType>())
|
||||
// ret[jss::LEDGER_ENTRY_TYPES]
|
||||
// [translate(STR(name).substr(2) /* remove lt_ */)] =
|
||||
// std::stoi(STR(value));
|
||||
for (auto [value, name] : magic_enum::enum_entries<LedgerEntryType>())
|
||||
ret[jss::LEDGER_ENTRY_TYPES]
|
||||
[translate(STR(name).substr(2) /* remove lt_ */)] =
|
||||
std::stoi(STR(value));
|
||||
|
||||
// ret[jss::FIELDS] = Json::arrayValue;
|
||||
ret[jss::FIELDS] = Json::arrayValue;
|
||||
|
||||
// uint32_t i = 0;
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "Generic";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 0;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = false;
|
||||
// v[jss::type] = "Unknown";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
uint32_t i = 0;
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "Generic";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 0;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = false;
|
||||
v[jss::type] = "Unknown";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "Invalid";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = -1;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = false;
|
||||
// v[jss::type] = "Unknown";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "Invalid";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = -1;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = false;
|
||||
v[jss::type] = "Unknown";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "ObjectEndMarker";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 1;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = true;
|
||||
// v[jss::type] = "STObject";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "ObjectEndMarker";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 1;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = true;
|
||||
v[jss::type] = "STObject";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "ArrayEndMarker";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 1;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = true;
|
||||
// v[jss::type] = "STArray";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "ArrayEndMarker";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 1;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = true;
|
||||
v[jss::type] = "STArray";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "hash";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 257;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = false;
|
||||
// v[jss::type] = "Hash256";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "hash";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 257;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = false;
|
||||
v[jss::type] = "Hash256";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "index";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 258;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = false;
|
||||
// v[jss::type] = "Hash256";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "index";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 258;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = false;
|
||||
v[jss::type] = "Hash256";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "taker_gets_funded";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 258;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = false;
|
||||
// v[jss::type] = "Amount";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "taker_gets_funded";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 258;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = false;
|
||||
v[jss::type] = "Amount";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// {
|
||||
// Json::Value a = Json::arrayValue;
|
||||
// a[0U] = "taker_pays_funded";
|
||||
// Json::Value v = Json::objectValue;
|
||||
// v[jss::nth] = 259;
|
||||
// v[jss::isVLEncoded] = false;
|
||||
// v[jss::isSerialized] = false;
|
||||
// v[jss::isSigningField] = false;
|
||||
// v[jss::type] = "Amount";
|
||||
// a[1U] = v;
|
||||
// ret[jss::FIELDS][i++] = a;
|
||||
// }
|
||||
{
|
||||
Json::Value a = Json::arrayValue;
|
||||
a[0U] = "taker_pays_funded";
|
||||
Json::Value v = Json::objectValue;
|
||||
v[jss::nth] = 259;
|
||||
v[jss::isVLEncoded] = false;
|
||||
v[jss::isSerialized] = false;
|
||||
v[jss::isSigningField] = false;
|
||||
v[jss::type] = "Amount";
|
||||
a[1U] = v;
|
||||
ret[jss::FIELDS][i++] = a;
|
||||
}
|
||||
|
||||
// for (auto const& [code, f] : ripple::SField::knownCodeToField)
|
||||
// {
|
||||
// if (f->fieldName == "")
|
||||
// continue;
|
||||
for (auto const& [code, f] : ripple::SField::knownCodeToField)
|
||||
{
|
||||
if (f->fieldName == "")
|
||||
continue;
|
||||
|
||||
// Json::Value innerObj = Json::objectValue;
|
||||
Json::Value innerObj = Json::objectValue;
|
||||
|
||||
// uint32_t fc = code & 0xFFU;
|
||||
// uint32_t tc = code >> 16U;
|
||||
uint32_t fc = code & 0xFFU;
|
||||
uint32_t tc = code >> 16U;
|
||||
|
||||
// innerObj[jss::nth] = fc;
|
||||
innerObj[jss::nth] = fc;
|
||||
|
||||
// innerObj[jss::isVLEncoded] =
|
||||
// (tc == 7U /* Blob */ || tc == 8U /* AccountID */ ||
|
||||
// tc == 19U /* Vector256 */);
|
||||
innerObj[jss::isVLEncoded] =
|
||||
(tc == 7U /* Blob */ || tc == 8U /* AccountID */ ||
|
||||
tc == 19U /* Vector256 */);
|
||||
|
||||
// innerObj[jss::isSerialized] =
|
||||
// (tc <
|
||||
// 10000); /* TRANSACTION, LEDGER_ENTRY, VALIDATION, METADATA */
|
||||
innerObj[jss::isSerialized] =
|
||||
(tc <
|
||||
10000); /* TRANSACTION, LEDGER_ENTRY, VALIDATION, METADATA */
|
||||
|
||||
// innerObj[jss::isSigningField] = f->shouldInclude(false);
|
||||
innerObj[jss::isSigningField] = f->shouldInclude(false);
|
||||
|
||||
// innerObj[jss::type] = type_map[tc];
|
||||
innerObj[jss::type] = type_map[tc];
|
||||
|
||||
// Json::Value innerArray = Json::arrayValue;
|
||||
// innerArray[0U] = f->fieldName;
|
||||
// innerArray[1U] = innerObj;
|
||||
Json::Value innerArray = Json::arrayValue;
|
||||
innerArray[0U] = f->fieldName;
|
||||
innerArray[1U] = innerObj;
|
||||
|
||||
// ret[jss::FIELDS][i++] = innerArray;
|
||||
// }
|
||||
ret[jss::FIELDS][i++] = innerArray;
|
||||
}
|
||||
|
||||
// ret[jss::TRANSACTION_RESULTS] = Json::objectValue;
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TELcodes>())
|
||||
// ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TEMcodes>())
|
||||
// ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TEFcodes>())
|
||||
// ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TERcodes>())
|
||||
// ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TEScodes>())
|
||||
// ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TECcodes>())
|
||||
// ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
ret[jss::TRANSACTION_RESULTS] = Json::objectValue;
|
||||
for (auto [value, name] : magic_enum::enum_entries<TELcodes>())
|
||||
ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
for (auto [value, name] : magic_enum::enum_entries<TEMcodes>())
|
||||
ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
for (auto [value, name] : magic_enum::enum_entries<TEFcodes>())
|
||||
ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
for (auto [value, name] : magic_enum::enum_entries<TERcodes>())
|
||||
ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
for (auto [value, name] : magic_enum::enum_entries<TEScodes>())
|
||||
ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
for (auto [value, name] : magic_enum::enum_entries<TECcodes>())
|
||||
ret[jss::TRANSACTION_RESULTS][STR(name)] = std::stoi(STR(value));
|
||||
|
||||
|
||||
// auto const translate_tt = [](std::string inp) -> std::string {
|
||||
// if (inp == "PaychanClaim")
|
||||
// return "PaymentChannelClaim";
|
||||
// if (inp == "PaychanCreate")
|
||||
// return "PaymentChannelCreate";
|
||||
// if (inp == "PaychanFund")
|
||||
// return "PaymentChannelFund";
|
||||
// if (inp == "RegularKeySet")
|
||||
// return "SetRegularKey";
|
||||
// if (inp == "HookSet")
|
||||
// return "SetHook";
|
||||
// return inp;
|
||||
// };
|
||||
auto const translate_tt = [](std::string inp) -> std::string {
|
||||
if (inp == "PaychanClaim")
|
||||
return "PaymentChannelClaim";
|
||||
if (inp == "PaychanCreate")
|
||||
return "PaymentChannelCreate";
|
||||
if (inp == "PaychanFund")
|
||||
return "PaymentChannelFund";
|
||||
if (inp == "RegularKeySet")
|
||||
return "SetRegularKey";
|
||||
if (inp == "HookSet")
|
||||
return "SetHook";
|
||||
return inp;
|
||||
};
|
||||
|
||||
// ret[jss::TRANSACTION_TYPES] = Json::objectValue;
|
||||
// ret[jss::TRANSACTION_TYPES][jss::Invalid] = -1;
|
||||
// for (auto [value, name] : magic_enum::enum_entries<TxType>())
|
||||
// ret[jss::TRANSACTION_TYPES][translate_tt(translate(STR(name).substr(2)))] =
|
||||
// std::stoi(STR(value));
|
||||
ret[jss::TRANSACTION_TYPES] = Json::objectValue;
|
||||
ret[jss::TRANSACTION_TYPES][jss::Invalid] = -1;
|
||||
for (auto [value, name] : magic_enum::enum_entries<TxType>())
|
||||
ret[jss::TRANSACTION_TYPES][translate_tt(translate(STR(name).substr(2)))] =
|
||||
std::stoi(STR(value));
|
||||
|
||||
// // generate hash
|
||||
// {
|
||||
// const std::string out = Json::FastWriter().write(ret);
|
||||
// defsHash =
|
||||
// ripple::sha512Half(ripple::Slice{out.data(), out.size()});
|
||||
// ret[jss::hash] = to_string(*defsHash);
|
||||
// }
|
||||
// generate hash
|
||||
{
|
||||
const std::string out = Json::FastWriter().write(ret);
|
||||
defsHash =
|
||||
ripple::sha512Half(ripple::Slice{out.data(), out.size()});
|
||||
ret[jss::hash] = to_string(*defsHash);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user