additional refactor

This commit is contained in:
tequ
2025-10-30 21:02:06 +09:00
parent 6f83efee91
commit 4269ef736b

View File

@@ -1,3 +1,7 @@
#ifndef GUARD_CHECKER_BUILD
#include <ripple/protocol/Feature.h>
#include <ripple/protocol/Rules.h>
#endif
#include <cstdint>
#include <map>
#include <set>
@@ -371,12 +375,13 @@ const double fee_base_multiplier = 1.1f;
#define I32 0x7FU
#define I64 0x7EU
#define HOOK_API_DEFINITION(RETURN_TYPE, FUNCTION_NAME, ...) \
{ \
FUNCTION_NAME, \
{ \
RETURN_TYPE, __VA_ARGS__ \
} \
#define HOOK_WRAP_PARAMS(...) __VA_ARGS__
#define HOOK_API_DEFINITION(RETURN_TYPE, FUNCTION_NAME, PARAMS_TUPLE) \
{ \
#FUNCTION_NAME, \
{ \
RETURN_TYPE, HOOK_WRAP_PARAMS PARAMS_TUPLE \
} \
}
using APIWhitelist = std::map<std::string, std::vector<uint8_t>>;
@@ -386,86 +391,86 @@ using APIWhitelist = std::map<std::string, std::vector<uint8_t>>;
// code (vec[0] and its parameters vec[>0]) as wasm type codes
static const APIWhitelist import_whitelist{
// clang-format off
HOOK_API_DEFINITION(I32, "_g", I32, I32),
HOOK_API_DEFINITION(I64, "accept", I32, I32, I64),
HOOK_API_DEFINITION(I64, "rollback", I32, I32, I64),
HOOK_API_DEFINITION(I64, "util_raddr", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "util_accid", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "util_verify", I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "util_sha512h", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "util_keylet", I32, I32, I32, I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "sto_validate", I32, I32),
HOOK_API_DEFINITION(I64, "sto_subfield", I32, I32, I32),
HOOK_API_DEFINITION(I64, "sto_subarray", I32, I32, I32),
HOOK_API_DEFINITION(I64, "sto_emplace", I32, I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "sto_erase", I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "etxn_burden"),
HOOK_API_DEFINITION(I64, "etxn_details", I32, I32),
HOOK_API_DEFINITION(I64, "etxn_fee_base", I32, I32),
HOOK_API_DEFINITION(I64, "etxn_reserve", I32),
HOOK_API_DEFINITION(I64, "etxn_generation"),
HOOK_API_DEFINITION(I64, "etxn_nonce", I32, I32),
HOOK_API_DEFINITION(I64, "emit", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "float_set", I32, I64),
HOOK_API_DEFINITION(I64, "float_multiply", I64, I64),
HOOK_API_DEFINITION(I64, "float_mulratio", I64, I32, I32, I32),
HOOK_API_DEFINITION(I64, "float_negate", I64),
HOOK_API_DEFINITION(I64, "float_compare", I64, I64, I32),
HOOK_API_DEFINITION(I64, "float_sum", I64, I64),
HOOK_API_DEFINITION(I64, "float_sto", I32, I32, I32, I32, I32, I32, I64, I32),
HOOK_API_DEFINITION(I64, "float_sto_set", I32, I32),
HOOK_API_DEFINITION(I64, "float_invert", I64),
HOOK_API_DEFINITION(I64, "float_divide", I64, I64),
HOOK_API_DEFINITION(I64, "float_one"),
HOOK_API_DEFINITION(I64, "float_mantissa", I64),
HOOK_API_DEFINITION(I64, "float_sign", I64),
HOOK_API_DEFINITION(I64, "float_int", I64, I32, I32),
HOOK_API_DEFINITION(I64, "float_log", I64),
HOOK_API_DEFINITION(I64, "float_root", I64, I32),
HOOK_API_DEFINITION(I64, "fee_base"),
HOOK_API_DEFINITION(I64, "ledger_seq"),
HOOK_API_DEFINITION(I64, "ledger_last_time"),
HOOK_API_DEFINITION(I64, "ledger_last_hash", I32, I32),
HOOK_API_DEFINITION(I64, "ledger_nonce", I32, I32),
HOOK_API_DEFINITION(I64, "ledger_keylet", I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "hook_account", I32, I32),
HOOK_API_DEFINITION(I64, "hook_hash", I32, I32, I32),
HOOK_API_DEFINITION(I64, "hook_param_set", I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "hook_param", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "hook_again"),
HOOK_API_DEFINITION(I64, "hook_skip", I32, I32, I32),
HOOK_API_DEFINITION(I64, "hook_pos"),
HOOK_API_DEFINITION(I64, "slot", I32, I32, I32),
HOOK_API_DEFINITION(I64, "slot_clear", I32),
HOOK_API_DEFINITION(I64, "slot_count", I32),
HOOK_API_DEFINITION(I64, "slot_set", I32, I32, I32),
HOOK_API_DEFINITION(I64, "slot_size", I32),
HOOK_API_DEFINITION(I64, "slot_subarray", I32, I32, I32),
HOOK_API_DEFINITION(I64, "slot_subfield", I32, I32, I32),
HOOK_API_DEFINITION(I64, "slot_type", I32, I32),
HOOK_API_DEFINITION(I64, "slot_float", I32),
HOOK_API_DEFINITION(I64, "state_set", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "state_foreign_set", I32, I32, I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "state", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "state_foreign", I32, I32, I32, I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "trace", I32, I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "trace_num", I32, I32, I64),
HOOK_API_DEFINITION(I64, "trace_float", I32, I32, I64),
HOOK_API_DEFINITION(I64, "otxn_burden"),
HOOK_API_DEFINITION(I64, "otxn_field", I32, I32, I32),
HOOK_API_DEFINITION(I64, "otxn_generation"),
HOOK_API_DEFINITION(I64, "otxn_id", I32, I32, I32),
HOOK_API_DEFINITION(I64, "otxn_type"),
HOOK_API_DEFINITION(I64, "otxn_slot", I32),
HOOK_API_DEFINITION(I64, "otxn_param", I32, I32, I32, I32),
HOOK_API_DEFINITION(I64, "meta_slot", I32),
HOOK_API_DEFINITION(I32, _g, (I32, I32)),
HOOK_API_DEFINITION(I64, accept, (I32, I32, I64)),
HOOK_API_DEFINITION(I64, rollback, (I32, I32, I64)),
HOOK_API_DEFINITION(I64, util_raddr, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, util_accid, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, util_verify, (I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, util_sha512h, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, util_keylet, (I32, I32, I32, I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, sto_validate, (I32, I32)),
HOOK_API_DEFINITION(I64, sto_subfield, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, sto_subarray, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, sto_emplace, (I32, I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, sto_erase, (I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, etxn_burden, ()),
HOOK_API_DEFINITION(I64, etxn_details, (I32, I32)),
HOOK_API_DEFINITION(I64, etxn_fee_base, (I32, I32)),
HOOK_API_DEFINITION(I64, etxn_reserve, (I32)),
HOOK_API_DEFINITION(I64, etxn_generation, ()),
HOOK_API_DEFINITION(I64, etxn_nonce, (I32, I32)),
HOOK_API_DEFINITION(I64, emit, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, float_set, (I32, I64)),
HOOK_API_DEFINITION(I64, float_multiply, (I64, I64)),
HOOK_API_DEFINITION(I64, float_mulratio, (I64, I32, I32, I32)),
HOOK_API_DEFINITION(I64, float_negate, (I64)),
HOOK_API_DEFINITION(I64, float_compare, (I64, I64, I32)),
HOOK_API_DEFINITION(I64, float_sum, (I64, I64)),
HOOK_API_DEFINITION(I64, float_sto, (I32, I32, I32, I32, I32, I32, I64, I32)),
HOOK_API_DEFINITION(I64, float_sto_set, (I32, I32)),
HOOK_API_DEFINITION(I64, float_invert, (I64)),
HOOK_API_DEFINITION(I64, float_divide, (I64, I64)),
HOOK_API_DEFINITION(I64, float_one, ()),
HOOK_API_DEFINITION(I64, float_mantissa, (I64)),
HOOK_API_DEFINITION(I64, float_sign, (I64)),
HOOK_API_DEFINITION(I64, float_int, (I64, I32, I32)),
HOOK_API_DEFINITION(I64, float_log, (I64)),
HOOK_API_DEFINITION(I64, float_root, (I64, I32)),
HOOK_API_DEFINITION(I64, fee_base, ()),
HOOK_API_DEFINITION(I64, ledger_seq, ()),
HOOK_API_DEFINITION(I64, ledger_last_time, ()),
HOOK_API_DEFINITION(I64, ledger_last_hash, (I32, I32)),
HOOK_API_DEFINITION(I64, ledger_nonce, (I32, I32)),
HOOK_API_DEFINITION(I64, ledger_keylet, (I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, hook_account, (I32, I32)),
HOOK_API_DEFINITION(I64, hook_hash, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, hook_param_set, (I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, hook_param, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, hook_again, ()),
HOOK_API_DEFINITION(I64, hook_skip, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, hook_pos, ()),
HOOK_API_DEFINITION(I64, slot, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, slot_clear, (I32)),
HOOK_API_DEFINITION(I64, slot_count, (I32)),
HOOK_API_DEFINITION(I64, slot_set, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, slot_size, (I32)),
HOOK_API_DEFINITION(I64, slot_subarray, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, slot_subfield, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, slot_type, (I32, I32)),
HOOK_API_DEFINITION(I64, slot_float, (I32)),
HOOK_API_DEFINITION(I64, state_set, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, state_foreign_set, (I32, I32, I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, state, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, state_foreign, (I32, I32, I32, I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, trace, (I32, I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, trace_num, (I32, I32, I64)),
HOOK_API_DEFINITION(I64, trace_float, (I32, I32, I64)),
HOOK_API_DEFINITION(I64, otxn_burden, ()),
HOOK_API_DEFINITION(I64, otxn_field, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, otxn_generation, ()),
HOOK_API_DEFINITION(I64, otxn_id, (I32, I32, I32)),
HOOK_API_DEFINITION(I64, otxn_type, ()),
HOOK_API_DEFINITION(I64, otxn_slot, (I32)),
HOOK_API_DEFINITION(I64, otxn_param, (I32, I32, I32, I32)),
HOOK_API_DEFINITION(I64, meta_slot, (I32)),
// clang-format on
};
// featureHooks1
static const APIWhitelist import_whitelist_1{
// clang-format off
HOOK_API_DEFINITION(I64, "xpop_slot", I32, I32)
HOOK_API_DEFINITION(I64, xpop_slot, (I32, I32)),
// clang-format on
};