Merge commit 'cdf3008d9dd4ca23c2559ede4cfdbfdca5e03412' into HookFeeV2

This commit is contained in:
tequ
2025-11-04 15:41:00 +09:00
12 changed files with 380 additions and 676 deletions

View File

@@ -18,12 +18,23 @@ jobs:
generator: bash ./hook/generate_sfcodes.sh
- target: hook/tts.h
generator: ./hook/generate_tts.sh
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
env:
CLANG_VERSION: 10
name: ${{ matrix.target }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download and install clang-format
run: |
sudo apt-get update -y
sudo apt-get install -y libtinfo5
curl -LO https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.1/clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz
tar -xf clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz
sudo mv clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04 /opt/clang-10
sudo ln -s /opt/clang-10/bin/clang-format /usr/local/bin/clang-format-10
- name: Verify ${{ matrix.target }}
run: |
set -euo pipefail

View File

@@ -82,7 +82,7 @@ sto_erase(
uint32_t field_id);
extern int64_t
etxn_burden(void);
etxn_burden();
extern int64_t
etxn_details(uint32_t write_ptr, uint32_t write_len);
@@ -94,7 +94,7 @@ extern int64_t
etxn_reserve(uint32_t count);
extern int64_t
etxn_generation(void);
etxn_generation();
extern int64_t
etxn_nonce(uint32_t write_ptr, uint32_t write_len);
@@ -149,7 +149,7 @@ extern int64_t
float_divide(int64_t float1, int64_t float2);
extern int64_t
float_one(void);
float_one();
extern int64_t
float_mantissa(int64_t float1);
@@ -167,13 +167,13 @@ extern int64_t
float_root(int64_t float1, uint32_t n);
extern int64_t
fee_base(void);
fee_base();
extern int64_t
ledger_seq(void);
ledger_seq();
extern int64_t
ledger_last_time(void);
ledger_last_time();
extern int64_t
ledger_last_hash(uint32_t write_ptr, uint32_t write_len);
@@ -213,13 +213,13 @@ hook_param(
uint32_t read_len);
extern int64_t
hook_again(void);
hook_again();
extern int64_t
hook_skip(uint32_t read_ptr, uint32_t read_len, uint32_t flags);
extern int64_t
hook_pos(void);
hook_pos();
extern int64_t
slot(uint32_t write_ptr, uint32_t write_len, uint32_t slot);
@@ -299,19 +299,19 @@ extern int64_t
trace_float(uint32_t read_ptr, uint32_t read_len, int64_t float1);
extern int64_t
otxn_burden(void);
otxn_burden();
extern int64_t
otxn_field(uint32_t write_ptr, uint32_t write_len, uint32_t field_id);
extern int64_t
otxn_generation(void);
otxn_generation();
extern int64_t
otxn_id(uint32_t write_ptr, uint32_t write_len, uint32_t flags);
extern int64_t
otxn_type(void);
otxn_type();
extern int64_t
otxn_slot(uint32_t slot_no);

View File

@@ -4,7 +4,7 @@ set -eu
SCRIPT_DIR=$(dirname "$0")
SCRIPT_DIR=$(cd "$SCRIPT_DIR" && pwd)
APPLY_HOOK="$SCRIPT_DIR/../src/ripple/app/hook/applyHook.h"
APPLY_HOOK="$SCRIPT_DIR/../src/ripple/app/hook/hook_api.macro"
{
echo '// For documentation please see: https://xrpl-hooks.readme.io/reference/'
@@ -19,127 +19,36 @@ APPLY_HOOK="$SCRIPT_DIR/../src/ripple/app/hook/applyHook.h"
return s;
}
function emit(ret, name, argc, argt, argn) {
attr = (name == "_g") ? " __attribute__((noduplicate))" : "";
if (!first)
printf("\n");
first = 0;
printf("extern %s%s\n", ret, attr);
if (argc == 0) {
printf("%s(void);\n", name);
return;
}
if (argc <= 3) {
line = argt[1] " " argn[1];
for (i = 2; i <= argc; ++i)
line = line ", " argt[i] " " argn[i];
printf("%s(%s);\n", name, line);
return;
}
printf("%s(\n", name);
for (i = 1; i <= argc; ++i) {
sep = (i < argc) ? "," : ");";
printf(" %s %s%s\n", argt[i], argn[i], sep);
}
}
function process(buffer, kind, payload, parts, n, i, arg, tokens, argc, argt, argn) {
if (kind == "func")
sub(/^DECLARE_HOOK_FUNCTION[[:space:]]*\(/, "", buffer);
else
sub(/^DECLARE_HOOK_FUNCNARG[[:space:]]*\(/, "", buffer);
buffer = trim(buffer);
sub(/\)[[:space:]]*$/, "", buffer);
n = split(buffer, parts, ",");
for (i = 1; i <= n; ++i)
parts[i] = trim(parts[i]);
ret = parts[1];
name = parts[2];
argc = 0;
delete argt;
delete argn;
for (i = 3; i <= n; ++i) {
arg = parts[i];
if (arg == "")
continue;
split(arg, tokens, /[[:space:]]+/);
if (length(tokens) < 2)
continue;
++argc;
argt[argc] = tokens[1];
argn[argc] = tokens[2];
}
emit(ret, name, argc, argt, argn);
}
BEGIN {
first = 1;
in_block = 0;
in_macro = 0;
}
{
line = $0;
if (in_block) {
if (line ~ /\*\//) {
sub(/.*\*\//, "", line);
in_block = 0;
}
else
next;
}
while (line ~ /\/\*/) {
if (line ~ /\/\*.*\*\//) {
gsub(/\/\*.*\*\//, "", line);
}
else {
sub(/\/\*.*/, "", line);
in_block = 1;
break;
}
}
sub(/\/\/.*$/, "", line);
line = trim(line);
if (line == "")
next;
if (!in_macro && line ~ /^DECLARE_HOOK_FUNCTION\(/) {
buffer = line;
kind = "func";
if (line ~ /\);[[:space:]]*$/) {
sub(/\);[[:space:]]*$/, "", buffer);
process(buffer, kind);
}
else
in_macro = 1;
# Skip block comments
if (line ~ /\/\*/) {
next;
}
if (!in_macro && line ~ /^DECLARE_HOOK_FUNCNARG\(/) {
buffer = line;
kind = "narg";
if (line ~ /\);[[:space:]]*$/) {
sub(/\);[[:space:]]*$/, "", buffer);
process(buffer, kind);
# Look for comment lines that start with // and contain function signature
if (line ~ /^[[:space:]]*\/\/[[:space:]]*[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]+[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*\(/) {
# Remove leading // and trim
sub(/^[[:space:]]*\/\/[[:space:]]*/, "", line);
line = trim(line);
# Check if function name is "_g" to add attribute
if (line ~ /[[:space:]]+_g[[:space:]]*\(/) {
# Insert __attribute__((noduplicate)) before _g
sub(/[[:space:]]+_g/, " __attribute__((noduplicate)) _g", line);
}
else
in_macro = 1;
next;
# printf("\n");
printf("extern %s\n\n", line);
}
if (in_macro) {
buffer = buffer " " line;
if (line ~ /\);[[:space:]]*$/) {
sub(/\);[[:space:]]*$/, "", buffer);
process(buffer, kind);
in_macro = 0;
}
}
}
END {
printf("\n");
}
' "$APPLY_HOOK"
echo '#define HOOK_EXTERN'
echo '#endif // HOOK_EXTERN'
}
} | (
cd "$SCRIPT_DIR/.."
clang-format --style=file -
)

View File

@@ -371,14 +371,6 @@ const uint8_t max_emit = 255;
const uint8_t max_params = 16;
const double fee_base_multiplier = 1.1f;
#define I32 0x7FU
#define I64 0x7EU
#define HOOK_WRAP_PARAMS(...) __VA_ARGS__
#define HOOK_API_DEFINITION(RETURN_TYPE, FUNCTION_NAME, PARAMS_TUPLE, COST) \
whitelist[FUNCTION_NAME] = { \
{RETURN_TYPE, HOOK_WRAP_PARAMS PARAMS_TUPLE}, COST};
using APIWhitelist =
std::map<std::string, std::pair<std::vector<uint8_t>, uint32_t>>;
@@ -393,93 +385,68 @@ getImportWhitelist(
)
{
APIWhitelist whitelist;
// clang-format off
// TODO: update costs for each API
HOOK_API_DEFINITION(I32, "_g", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "accept", (I32, I32, I64), 100)
HOOK_API_DEFINITION(I64, "rollback", (I32, I32, I64), 100)
HOOK_API_DEFINITION(I64, "util_raddr", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "util_accid", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "util_verify", (I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "util_sha512h", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "util_keylet", (I32, I32, I32, I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "sto_validate", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "sto_subfield", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "sto_subarray", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "sto_emplace", (I32, I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "sto_erase", (I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "etxn_burden", (), 100)
HOOK_API_DEFINITION(I64, "etxn_details", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "etxn_fee_base", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "etxn_reserve", (I32), 100)
HOOK_API_DEFINITION(I64, "etxn_generation", (), 100)
HOOK_API_DEFINITION(I64, "etxn_nonce", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "emit", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "float_set", (I32, I64),0)
HOOK_API_DEFINITION(I64, "float_multiply", (I64, I64), 100)
HOOK_API_DEFINITION(I64, "float_mulratio", (I64, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "float_negate", (I64), 100)
HOOK_API_DEFINITION(I64, "float_compare", (I64, I64, I32), 100)
HOOK_API_DEFINITION(I64, "float_sum", (I64, I64), 100)
HOOK_API_DEFINITION(I64, "float_sto", (I32, I32, I32, I32, I32, I32, I64, I32), 100)
HOOK_API_DEFINITION(I64, "float_sto_set", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "float_invert", (I64), 100)
HOOK_API_DEFINITION(I64, "float_divide", (I64, I64), 100)
HOOK_API_DEFINITION(I64, "float_one", (), 100)
HOOK_API_DEFINITION(I64, "float_mantissa", (I64), 100)
HOOK_API_DEFINITION(I64, "float_sign", (I64), 100)
HOOK_API_DEFINITION(I64, "float_int", (I64, I32, I32), 100)
HOOK_API_DEFINITION(I64, "float_log", (I64), 100)
HOOK_API_DEFINITION(I64, "float_root", (I64, I32), 100)
HOOK_API_DEFINITION(I64, "fee_base", (), 100)
HOOK_API_DEFINITION(I64, "ledger_seq", (), 100)
HOOK_API_DEFINITION(I64, "ledger_last_time", (), 100)
HOOK_API_DEFINITION(I64, "ledger_last_hash", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "ledger_nonce", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "ledger_keylet", (I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "hook_account", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "hook_hash", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "hook_param_set", (I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "hook_param", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "hook_again", (), 100)
HOOK_API_DEFINITION(I64, "hook_skip", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "hook_pos", (), 100)
HOOK_API_DEFINITION(I64, "slot", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "slot_clear", (I32), 100)
HOOK_API_DEFINITION(I64, "slot_count", (I32), 100)
HOOK_API_DEFINITION(I64, "slot_set", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "slot_size", (I32), 100)
HOOK_API_DEFINITION(I64, "slot_subarray", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "slot_subfield", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "slot_type", (I32, I32), 100)
HOOK_API_DEFINITION(I64, "slot_float", (I32), 100)
HOOK_API_DEFINITION(I64, "state_set", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "state_foreign_set", (I32, I32, I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "state", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "state_foreign", (I32, I32, I32, I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "trace", (I32, I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "trace_num", (I32, I32, I64), 100)
HOOK_API_DEFINITION(I64, "trace_float", (I32, I32, I64), 100)
HOOK_API_DEFINITION(I64, "otxn_burden", (), 100)
HOOK_API_DEFINITION(I64, "otxn_field", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "otxn_generation", (), 100)
HOOK_API_DEFINITION(I64, "otxn_id", (I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "otxn_type", (), 100)
HOOK_API_DEFINITION(I64, "otxn_slot", (I32), 100)
HOOK_API_DEFINITION(I64, "otxn_param", (I32, I32, I32, I32), 100)
HOOK_API_DEFINITION(I64, "meta_slot", (I32), 100)
#ifndef GUARD_CHECKER_BUILD
std::map<std::string, uint256> amendments = {};
#endif
#ifndef GUARD_CHECKER_BUILD
if (rules.enabled(featureHooksUpdate1))
#endif
HOOK_API_DEFINITION(I64, "xpop_slot", (I32, I32), 100)
#pragma push_macro("HOOK_API_DEFINITION")
#undef HOOK_API_DEFINITION
#define int64_t 0x7EU
#define int32_t 0x7FU
#define uint32_t 0x7FU
#define HOOK_WRAP_PARAMS(...) __VA_ARGS__
#ifdef GUARD_CHECKER_BUILD
#define HOOK_API_DEFINITION( \
RETURN_TYPE, FUNCTION_NAME, PARAMS_TUPLE, AMENDMENT, COST) \
whitelist[#FUNCTION_NAME] = { \
{RETURN_TYPE, HOOK_WRAP_PARAMS PARAMS_TUPLE}, COST};
#else
#define HOOK_API_DEFINITION( \
RETURN_TYPE, FUNCTION_NAME, PARAMS_TUPLE, AMENDMENT, COST) \
if (AMENDMENT == uint256{} || rules.enabled(AMENDMENT)) \
whitelist[#FUNCTION_NAME] = { \
{RETURN_TYPE, HOOK_WRAP_PARAMS PARAMS_TUPLE}, COST};
#endif
#include "hook_api.macro"
#undef HOOK_API_DEFINITION
#undef HOOK_WRAP_PARAMS
#undef int64_t
#undef int32_t
#undef uint32_t
#pragma pop_macro("HOOK_API_DEFINITION")
return whitelist;
// clang-format on
}
#undef HOOK_API_DEFINITION
#undef I32
#undef I64
enum GuardRulesVersion : uint64_t {
GuardRuleFix20250131 = 0x00000001,
};
inline uint64_t
getGuardRulesVersion(
#ifndef GUARD_CHECKER_BUILD
Rules const& rules
#endif
)
{
uint64_t version = 0;
#ifndef GUARD_CHECKER_BUILD
if (rules.enabled(fix20250131))
version |= GuardRuleFix20250131;
#else
version = -1; // all bits set for guard checker
#endif
return version;
}
}; // namespace hook_api
#endif

View File

@@ -647,7 +647,7 @@ check_guard(
}
else if (fc_type == 10) // memory.copy
{
if (rulesVersion & 0x02U)
if (rulesVersion & hook_api::GuardRuleFix20250131)
GUARD_ERROR("Memory.copy instruction is not allowed.");
REQUIRE(2);
@@ -655,7 +655,7 @@ check_guard(
}
else if (fc_type == 11) // memory.fill
{
if (rulesVersion & 0x02U)
if (rulesVersion & hook_api::GuardRuleFix20250131)
GUARD_ERROR("Memory.fill instruction is not allowed.");
ADVANCE(1);
@@ -851,7 +851,7 @@ validateGuards(
* might have unforeseen consequences, without also rolling back further
* changes that are fine.
*/
uint64_t rulesVersion = 0)
uint64_t rulesVersion = 0x00)
{
uint64_t byteCount = wasm.size();

View File

@@ -88,18 +88,18 @@
#define WASM_VAL_TYPE(T, b) CAT2(TYP_, T)
#define DECLARE_HOOK_FUNCTION(R, F, ...) \
R F(hook::HookContext& hookCtx, \
WasmEdge_CallingFrameContext const& frameCtx, \
__VA_ARGS__); \
extern WasmEdge_Result WasmFunction##F( \
void* data_ptr, \
const WasmEdge_CallingFrameContext* frameCtx, \
const WasmEdge_Value* in, \
WasmEdge_Value* out); \
extern WasmEdge_ValType WasmFunctionParams##F[]; \
extern WasmEdge_ValType WasmFunctionResult##F[]; \
extern WasmEdge_FunctionTypeContext* WasmFunctionType##F; \
#define DECLARE_HOOK_FUNCTION(R, F, ...) \
R F(hook::HookContext& hookCtx, \
WasmEdge_CallingFrameContext const& frameCtx __VA_OPT__( \
, )##__VA_ARGS__); \
extern WasmEdge_Result WasmFunction##F( \
void* data_ptr, \
const WasmEdge_CallingFrameContext* frameCtx, \
const WasmEdge_Value* in, \
WasmEdge_Value* out); \
extern WasmEdge_ValType WasmFunctionParams##F[]; \
extern WasmEdge_ValType WasmFunctionResult##F[]; \
extern WasmEdge_FunctionTypeContext* WasmFunctionType##F; \
extern WasmEdge_String WasmFunctionName##F;
#define DECLARE_HOOK_FUNCNARG(R, F) \

View File

@@ -61,365 +61,20 @@ namespace hook_api {
if (HOOK_DBG) \
fprintf
DECLARE_HOOK_FUNCTION(int32_t, _g, uint32_t guard_id, uint32_t maxiter);
#pragma push_macro("HOOK_API_DEFINITION")
#undef HOOK_API_DEFINITION
DECLARE_HOOK_FUNCTION(
int64_t,
accept,
uint32_t read_ptr,
uint32_t read_len,
int64_t error_code);
DECLARE_HOOK_FUNCTION(
int64_t,
rollback,
uint32_t read_ptr,
uint32_t read_len,
int64_t error_code);
#define HOOK_WRAP_PARAMS(...) __VA_ARGS__
#define HOOK_API_DEFINITION(RETURN_TYPE, FUNCTION_NAME, PARAMS_TUPLE, ...) \
DECLARE_HOOK_FUNCTION( \
RETURN_TYPE, FUNCTION_NAME, HOOK_WRAP_PARAMS PARAMS_TUPLE);
DECLARE_HOOK_FUNCTION(
int64_t,
util_raddr,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(
int64_t,
util_accid,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(
int64_t,
util_verify,
uint32_t dread_ptr,
uint32_t dread_len,
uint32_t sread_ptr,
uint32_t sread_len,
uint32_t kread_ptr,
uint32_t kread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
util_sha512h,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(
int64_t,
util_keylet,
uint32_t write_ptr,
uint32_t write_len,
uint32_t keylet_type,
uint32_t a,
uint32_t b,
uint32_t c,
uint32_t d,
uint32_t e,
uint32_t f);
#include <ripple/app/hook/hook_api.macro>
DECLARE_HOOK_FUNCTION(
int64_t,
sto_validate,
uint32_t tread_ptr,
uint32_t tread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
sto_subfield,
uint32_t read_ptr,
uint32_t read_len,
uint32_t field_id);
DECLARE_HOOK_FUNCTION(
int64_t,
sto_subarray,
uint32_t read_ptr,
uint32_t read_len,
uint32_t array_id);
DECLARE_HOOK_FUNCTION(
int64_t,
sto_emplace,
uint32_t write_ptr,
uint32_t write_len,
uint32_t sread_ptr,
uint32_t sread_len,
uint32_t fread_ptr,
uint32_t fread_len,
uint32_t field_id);
DECLARE_HOOK_FUNCTION(
int64_t,
sto_erase,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len,
uint32_t field_id);
#undef HOOK_API_DEFINITION
#undef HOOK_WRAP_PARAMS
#pragma pop_macro("HOOK_API_DEFINITION")
DECLARE_HOOK_FUNCNARG(int64_t, etxn_burden);
DECLARE_HOOK_FUNCTION(
int64_t,
etxn_details,
uint32_t write_ptr,
uint32_t write_len);
DECLARE_HOOK_FUNCTION(
int64_t,
etxn_fee_base,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(int64_t, etxn_reserve, uint32_t count);
DECLARE_HOOK_FUNCNARG(int64_t, etxn_generation);
DECLARE_HOOK_FUNCTION(
int64_t,
etxn_nonce,
uint32_t write_ptr,
uint32_t write_len);
DECLARE_HOOK_FUNCTION(
int64_t,
emit,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(int64_t, float_set, int32_t exponent, int64_t mantissa);
DECLARE_HOOK_FUNCTION(int64_t, float_multiply, int64_t float1, int64_t float2);
DECLARE_HOOK_FUNCTION(
int64_t,
float_mulratio,
int64_t float1,
uint32_t round_up,
uint32_t numerator,
uint32_t denominator);
DECLARE_HOOK_FUNCTION(int64_t, float_negate, int64_t float1);
DECLARE_HOOK_FUNCTION(
int64_t,
float_compare,
int64_t float1,
int64_t float2,
uint32_t mode);
DECLARE_HOOK_FUNCTION(int64_t, float_sum, int64_t float1, int64_t float2);
DECLARE_HOOK_FUNCTION(
int64_t,
float_sto,
uint32_t write_ptr,
uint32_t write_len,
uint32_t cread_ptr,
uint32_t cread_len,
uint32_t iread_ptr,
uint32_t iread_len,
int64_t float1,
uint32_t field_code);
DECLARE_HOOK_FUNCTION(
int64_t,
float_sto_set,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(int64_t, float_invert, int64_t float1);
DECLARE_HOOK_FUNCTION(int64_t, float_divide, int64_t float1, int64_t float2);
DECLARE_HOOK_FUNCNARG(int64_t, float_one);
DECLARE_HOOK_FUNCTION(int64_t, float_mantissa, int64_t float1);
DECLARE_HOOK_FUNCTION(int64_t, float_sign, int64_t float1);
DECLARE_HOOK_FUNCTION(
int64_t,
float_int,
int64_t float1,
uint32_t decimal_places,
uint32_t abs);
DECLARE_HOOK_FUNCTION(int64_t, float_log, int64_t float1);
DECLARE_HOOK_FUNCTION(int64_t, float_root, int64_t float1, uint32_t n);
DECLARE_HOOK_FUNCNARG(int64_t, fee_base);
DECLARE_HOOK_FUNCNARG(int64_t, ledger_seq);
DECLARE_HOOK_FUNCNARG(int64_t, ledger_last_time);
DECLARE_HOOK_FUNCTION(
int64_t,
ledger_last_hash,
uint32_t write_ptr,
uint32_t write_len);
DECLARE_HOOK_FUNCTION(
int64_t,
ledger_nonce,
uint32_t write_ptr,
uint32_t write_len);
DECLARE_HOOK_FUNCTION(
int64_t,
ledger_keylet,
uint32_t write_ptr,
uint32_t write_len,
uint32_t lread_ptr,
uint32_t lread_len,
uint32_t hread_ptr,
uint32_t hread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
hook_account,
uint32_t write_ptr,
uint32_t write_len);
DECLARE_HOOK_FUNCTION(
int64_t,
hook_hash,
uint32_t write_ptr,
uint32_t write_len,
int32_t hook_no);
DECLARE_HOOK_FUNCTION(
int64_t,
hook_param_set,
uint32_t read_ptr,
uint32_t read_len,
uint32_t kread_ptr,
uint32_t kread_len,
uint32_t hread_ptr,
uint32_t hread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
hook_param,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCNARG(int64_t, hook_again);
DECLARE_HOOK_FUNCTION(
int64_t,
hook_skip,
uint32_t read_ptr,
uint32_t read_len,
uint32_t flags);
DECLARE_HOOK_FUNCNARG(int64_t, hook_pos);
DECLARE_HOOK_FUNCTION(
int64_t,
slot,
uint32_t write_ptr,
uint32_t write_len,
uint32_t slot);
DECLARE_HOOK_FUNCTION(int64_t, slot_clear, uint32_t slot);
DECLARE_HOOK_FUNCTION(int64_t, slot_count, uint32_t slot);
DECLARE_HOOK_FUNCTION(
int64_t,
slot_set,
uint32_t read_ptr,
uint32_t read_len,
uint32_t slot);
DECLARE_HOOK_FUNCTION(int64_t, slot_size, uint32_t slot);
DECLARE_HOOK_FUNCTION(
int64_t,
slot_subarray,
uint32_t parent_slot,
uint32_t array_id,
uint32_t new_slot);
DECLARE_HOOK_FUNCTION(
int64_t,
slot_subfield,
uint32_t parent_slot,
uint32_t field_id,
uint32_t new_slot);
DECLARE_HOOK_FUNCTION(int64_t, slot_type, uint32_t slot_no, uint32_t flags);
DECLARE_HOOK_FUNCTION(int64_t, slot_float, uint32_t slot_no);
DECLARE_HOOK_FUNCTION(
int64_t,
state_set,
uint32_t read_ptr,
uint32_t read_len,
uint32_t kread_ptr,
uint32_t kread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
state_foreign_set,
uint32_t read_ptr,
uint32_t read_len,
uint32_t kread_ptr,
uint32_t kread_len,
uint32_t nread_ptr,
uint32_t nread_len,
uint32_t aread_ptr,
uint32_t aread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
state,
uint32_t write_ptr,
uint32_t write_len,
uint32_t kread_ptr,
uint32_t kread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
state_foreign,
uint32_t write_ptr,
uint32_t write_len,
uint32_t kread_ptr,
uint32_t kread_len,
uint32_t nread_ptr,
uint32_t nread_len,
uint32_t aread_ptr,
uint32_t aread_len);
DECLARE_HOOK_FUNCTION(
int64_t,
trace,
uint32_t mread_ptr,
uint32_t mread_len,
uint32_t dread_ptr,
uint32_t dread_len,
uint32_t as_hex);
DECLARE_HOOK_FUNCTION(
int64_t,
trace_num,
uint32_t read_ptr,
uint32_t read_len,
int64_t number);
DECLARE_HOOK_FUNCTION(
int64_t,
trace_float,
uint32_t read_ptr,
uint32_t read_len,
int64_t float1);
DECLARE_HOOK_FUNCNARG(int64_t, otxn_burden);
DECLARE_HOOK_FUNCTION(
int64_t,
otxn_field,
uint32_t write_ptr,
uint32_t write_len,
uint32_t field_id);
DECLARE_HOOK_FUNCNARG(int64_t, otxn_generation);
DECLARE_HOOK_FUNCTION(
int64_t,
otxn_id,
uint32_t write_ptr,
uint32_t write_len,
uint32_t flags);
DECLARE_HOOK_FUNCNARG(int64_t, otxn_type);
DECLARE_HOOK_FUNCTION(int64_t, otxn_slot, uint32_t slot_no);
DECLARE_HOOK_FUNCTION(
int64_t,
otxn_param,
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len);
DECLARE_HOOK_FUNCTION(int64_t, meta_slot, uint32_t slot_no);
DECLARE_HOOK_FUNCTION(
int64_t,
xpop_slot,
uint32_t slot_no_tx,
uint32_t slot_no_meta);
/*
DECLARE_HOOK_FUNCTION(int64_t, str_find, uint32_t hread_ptr,
uint32_t hread_len, uint32_t nread_ptr, uint32_t nread_len, uint32_t mode,
uint32_t n); DECLARE_HOOK_FUNCTION(int64_t, str_replace, uint32_t
write_ptr, uint32_t write_len, uint32_t hread_ptr, uint32_t hread_len,
uint32_t nread_ptr,
uint32_t nread_len, uint32_t rread_ptr, uint32_t rread_len, uint32_t mode,
uint32_t n); DECLARE_HOOK_FUNCTION(int64_t, str_compare, uint32_t
fread_ptr, uint32_t fread_len, uint32_t sread_ptr, uint32_t sread_len,
uint32_t mode);
DECLARE_HOOK_FUNCTION(int64_t, str_concat, uint32_t write_ptr,
uint32_t write_len, uint32_t read_ptr, uint32_t read_len, uint64_t operand,
uint32_t operand_type);
*/
} /* end namespace hook_api */
namespace hook {
@@ -797,97 +452,18 @@ public:
WasmEdge_LogSetDebugLevel();
ADD_HOOK_FUNCTION(_g, ctx, 0);
ADD_HOOK_FUNCTION(accept, ctx, 0);
ADD_HOOK_FUNCTION(rollback, ctx, 0);
ADD_HOOK_FUNCTION(util_raddr, ctx, 0);
ADD_HOOK_FUNCTION(util_accid, ctx, 0);
ADD_HOOK_FUNCTION(util_verify, ctx, 0);
ADD_HOOK_FUNCTION(util_sha512h, ctx, 0);
ADD_HOOK_FUNCTION(sto_validate, ctx, 0);
ADD_HOOK_FUNCTION(sto_subfield, ctx, 0);
ADD_HOOK_FUNCTION(sto_subarray, ctx, 0);
ADD_HOOK_FUNCTION(sto_emplace, ctx, 0);
ADD_HOOK_FUNCTION(sto_erase, ctx, 0);
ADD_HOOK_FUNCTION(util_keylet, ctx, 0);
#pragma push_macro("HOOK_API_DEFINITION")
#undef HOOK_API_DEFINITION
ADD_HOOK_FUNCTION(emit, ctx, 0);
ADD_HOOK_FUNCTION(etxn_burden, ctx, 0);
ADD_HOOK_FUNCTION(etxn_fee_base, ctx, 0);
ADD_HOOK_FUNCTION(etxn_details, ctx, 0);
ADD_HOOK_FUNCTION(etxn_reserve, ctx, 0);
ADD_HOOK_FUNCTION(etxn_generation, ctx, 0);
ADD_HOOK_FUNCTION(etxn_nonce, ctx, 0);
#define HOOK_WRAP_PARAMS(...) __VA_ARGS__
#define HOOK_API_DEFINITION(RETURN_TYPE, FUNCTION_NAME, PARAMS_TUPLE, ...) \
ADD_HOOK_FUNCTION(FUNCTION_NAME, ctx, 0);
ADD_HOOK_FUNCTION(float_set, ctx, 0);
ADD_HOOK_FUNCTION(float_multiply, ctx, 0);
ADD_HOOK_FUNCTION(float_mulratio, ctx, 0);
ADD_HOOK_FUNCTION(float_negate, ctx, 0);
ADD_HOOK_FUNCTION(float_compare, ctx, 0);
ADD_HOOK_FUNCTION(float_sum, ctx, 0);
ADD_HOOK_FUNCTION(float_sto, ctx, 0);
ADD_HOOK_FUNCTION(float_sto_set, ctx, 0);
ADD_HOOK_FUNCTION(float_invert, ctx, 0);
#include <ripple/app/hook/hook_api.macro>
ADD_HOOK_FUNCTION(float_divide, ctx, 0);
ADD_HOOK_FUNCTION(float_one, ctx, 0);
ADD_HOOK_FUNCTION(float_mantissa, ctx, 0);
ADD_HOOK_FUNCTION(float_sign, ctx, 0);
ADD_HOOK_FUNCTION(float_int, ctx, 0);
ADD_HOOK_FUNCTION(float_log, ctx, 0);
ADD_HOOK_FUNCTION(float_root, ctx, 0);
ADD_HOOK_FUNCTION(otxn_burden, ctx, 0);
ADD_HOOK_FUNCTION(otxn_generation, ctx, 0);
ADD_HOOK_FUNCTION(otxn_field, ctx, 0);
ADD_HOOK_FUNCTION(otxn_id, ctx, 0);
ADD_HOOK_FUNCTION(otxn_type, ctx, 0);
ADD_HOOK_FUNCTION(otxn_slot, ctx, 0);
ADD_HOOK_FUNCTION(otxn_param, ctx, 0);
ADD_HOOK_FUNCTION(hook_account, ctx, 0);
ADD_HOOK_FUNCTION(hook_hash, ctx, 0);
ADD_HOOK_FUNCTION(hook_again, ctx, 0);
ADD_HOOK_FUNCTION(fee_base, ctx, 0);
ADD_HOOK_FUNCTION(ledger_seq, ctx, 0);
ADD_HOOK_FUNCTION(ledger_last_hash, ctx, 0);
ADD_HOOK_FUNCTION(ledger_last_time, ctx, 0);
ADD_HOOK_FUNCTION(ledger_nonce, ctx, 0);
ADD_HOOK_FUNCTION(ledger_keylet, ctx, 0);
ADD_HOOK_FUNCTION(hook_param, ctx, 0);
ADD_HOOK_FUNCTION(hook_param_set, ctx, 0);
ADD_HOOK_FUNCTION(hook_skip, ctx, 0);
ADD_HOOK_FUNCTION(hook_pos, ctx, 0);
ADD_HOOK_FUNCTION(state, ctx, 0);
ADD_HOOK_FUNCTION(state_foreign, ctx, 0);
ADD_HOOK_FUNCTION(state_set, ctx, 0);
ADD_HOOK_FUNCTION(state_foreign_set, ctx, 0);
ADD_HOOK_FUNCTION(slot, ctx, 0);
ADD_HOOK_FUNCTION(slot_clear, ctx, 0);
ADD_HOOK_FUNCTION(slot_count, ctx, 0);
ADD_HOOK_FUNCTION(slot_set, ctx, 0);
ADD_HOOK_FUNCTION(slot_size, ctx, 0);
ADD_HOOK_FUNCTION(slot_subarray, ctx, 0);
ADD_HOOK_FUNCTION(slot_subfield, ctx, 0);
ADD_HOOK_FUNCTION(slot_type, ctx, 0);
ADD_HOOK_FUNCTION(slot_float, ctx, 0);
ADD_HOOK_FUNCTION(trace, ctx, 0);
ADD_HOOK_FUNCTION(trace_num, ctx, 0);
ADD_HOOK_FUNCTION(trace_float, ctx, 0);
ADD_HOOK_FUNCTION(meta_slot, ctx, 0);
ADD_HOOK_FUNCTION(xpop_slot, ctx, 0);
/*
ADD_HOOK_FUNCTION(str_find, ctx, 0);
ADD_HOOK_FUNCTION(str_replace, ctx, 0);
ADD_HOOK_FUNCTION(str_compare, ctx, 0);
ADD_HOOK_FUNCTION(str_concat, ctx, 0);
*/
#undef HOOK_API_DEFINITION
#undef HOOK_WRAP_PARAMS
#pragma pop_macro("HOOK_API_DEFINITION")
WasmEdge_TableInstanceContext* hostTable =
WasmEdge_TableInstanceCreate(tableType);

View File

@@ -82,7 +82,12 @@ main(int argc, char** argv)
close(fd);
auto result = validateGuards(
hook, std::cout, "", false, hook_api::getImportWhitelist(), 3);
hook,
std::cout,
"",
false,
hook_api::getImportWhitelist(),
hook_api::getGuardRulesVersion());
if (!result)
{

View File

@@ -0,0 +1,221 @@
// int32_t _g(uint32_t guard_id, uint32_t maxiter);
HOOK_API_DEFINITION(int32_t, _g, (uint32_t, uint32_t), uint256{}, 100)
// int64_t accept(uint32_t read_ptr, uint32_t read_len, int64_t error_code);
HOOK_API_DEFINITION(int64_t, accept, (uint32_t, uint32_t, int64_t), uint256{}, 100)
// int64_t rollback(uint32_t read_ptr, uint32_t read_len, int64_t error_code);
HOOK_API_DEFINITION(int64_t, rollback, (uint32_t, uint32_t, int64_t), uint256{}, 100)
// int64_t util_raddr(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, util_raddr, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t util_accid(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, util_accid, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t util_verify(uint32_t dread_ptr, uint32_t dread_len, uint32_t sread_ptr, uint32_t sread_len, uint32_t kread_ptr, uint32_t kread_len);
HOOK_API_DEFINITION(int64_t, util_verify, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t util_sha512h(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, util_sha512h, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t util_keylet(uint32_t write_ptr, uint32_t write_len, uint32_t keylet_type, uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e, uint32_t f);
HOOK_API_DEFINITION(int64_t, util_keylet, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t sto_validate(uint32_t tread_ptr, uint32_t tread_len);
HOOK_API_DEFINITION(int64_t, sto_validate, (uint32_t, uint32_t), uint256{}, 100)
// int64_t sto_subfield(uint32_t read_ptr, uint32_t read_len, uint32_t field_id);
HOOK_API_DEFINITION(int64_t, sto_subfield, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t sto_subarray(uint32_t read_ptr, uint32_t read_len, uint32_t array_id);
HOOK_API_DEFINITION(int64_t, sto_subarray, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t sto_emplace(uint32_t write_ptr, uint32_t write_len, uint32_t sread_ptr, uint32_t sread_len, uint32_t fread_ptr, uint32_t fread_len, uint32_t field_id);
HOOK_API_DEFINITION(int64_t, sto_emplace, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t sto_erase(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len, uint32_t field_id);
HOOK_API_DEFINITION(int64_t, sto_erase, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t etxn_burden();
HOOK_API_DEFINITION(int64_t, etxn_burden, (), uint256{}, 100)
// int64_t etxn_details(uint32_t write_ptr, uint32_t write_len);
HOOK_API_DEFINITION(int64_t, etxn_details, (uint32_t, uint32_t), uint256{}, 100)
// int64_t etxn_fee_base(uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, etxn_fee_base, (uint32_t, uint32_t), uint256{}, 100)
// int64_t etxn_reserve(uint32_t count);
HOOK_API_DEFINITION(int64_t, etxn_reserve, (uint32_t), uint256{}, 100)
// int64_t etxn_generation();
HOOK_API_DEFINITION(int64_t, etxn_generation, (), uint256{}, 100)
// int64_t etxn_nonce(uint32_t write_ptr, uint32_t write_len);
HOOK_API_DEFINITION(int64_t, etxn_nonce, (uint32_t, uint32_t), uint256{}, 100)
// int64_t emit(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, emit, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t float_set(int32_t exponent, int64_t mantissa);
HOOK_API_DEFINITION(int64_t, float_set, (int32_t, int64_t), uint256{}, 100)
// int64_t float_multiply(int64_t float1, int64_t float2);
HOOK_API_DEFINITION(int64_t, float_multiply, (int64_t, int64_t), uint256{}, 100)
// int64_t float_mulratio(int64_t float1, uint32_t round_up, uint32_t numerator, uint32_t denominator);
HOOK_API_DEFINITION(int64_t, float_mulratio, (int64_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t float_negate(int64_t float1);
HOOK_API_DEFINITION(int64_t, float_negate, (int64_t), uint256{}, 100)
// int64_t float_compare(int64_t float1, int64_t float2, uint32_t mode);
HOOK_API_DEFINITION(int64_t, float_compare, (int64_t, int64_t, uint32_t), uint256{}, 100)
// int64_t float_sum(int64_t float1, int64_t float2);
HOOK_API_DEFINITION(int64_t, float_sum, (int64_t, int64_t), uint256{}, 100)
// int64_t float_sto(uint32_t write_ptr, uint32_t write_len, uint32_t cread_ptr, uint32_t cread_len, uint32_t iread_ptr, uint32_t iread_len, int64_t float1, uint32_t field_code);
HOOK_API_DEFINITION(int64_t, float_sto, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, int64_t, uint32_t), uint256{}, 100)
// int64_t float_sto_set(uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, float_sto_set, (uint32_t, uint32_t), uint256{}, 100)
// int64_t float_invert(int64_t float1);
HOOK_API_DEFINITION(int64_t, float_invert, (int64_t), uint256{}, 100)
// int64_t float_divide(int64_t float1, int64_t float2);
HOOK_API_DEFINITION(int64_t, float_divide, (int64_t, int64_t), uint256{}, 100)
// int64_t float_one();
HOOK_API_DEFINITION(int64_t, float_one, (), uint256{}, 100)
// int64_t float_mantissa(int64_t float1);
HOOK_API_DEFINITION(int64_t, float_mantissa, (int64_t), uint256{}, 100)
// int64_t float_sign(int64_t float1);
HOOK_API_DEFINITION(int64_t, float_sign, (int64_t), uint256{}, 100)
// int64_t float_int(int64_t float1, uint32_t decimal_places, uint32_t abs);
HOOK_API_DEFINITION(int64_t, float_int, (int64_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t float_log(int64_t float1);
HOOK_API_DEFINITION(int64_t, float_log, (int64_t), uint256{}, 100)
// int64_t float_root(int64_t float1, uint32_t n);
HOOK_API_DEFINITION(int64_t, float_root, (int64_t, uint32_t), uint256{}, 100)
// int64_t fee_base();
HOOK_API_DEFINITION(int64_t, fee_base, (), uint256{}, 100)
// int64_t ledger_seq();
HOOK_API_DEFINITION(int64_t, ledger_seq, (), uint256{}, 100)
// int64_t ledger_last_time();
HOOK_API_DEFINITION(int64_t, ledger_last_time, (), uint256{}, 100)
// int64_t ledger_last_hash(uint32_t write_ptr, uint32_t write_len);
HOOK_API_DEFINITION(int64_t, ledger_last_hash, (uint32_t, uint32_t), uint256{}, 100)
// int64_t ledger_nonce(uint32_t write_ptr, uint32_t write_len);
HOOK_API_DEFINITION(int64_t, ledger_nonce, (uint32_t, uint32_t), uint256{}, 100)
// int64_t ledger_keylet(uint32_t write_ptr, uint32_t write_len, uint32_t lread_ptr, uint32_t lread_len, uint32_t hread_ptr, uint32_t hread_len);
HOOK_API_DEFINITION(int64_t, ledger_keylet, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t hook_account(uint32_t write_ptr, uint32_t write_len);
HOOK_API_DEFINITION(int64_t, hook_account, (uint32_t, uint32_t), uint256{}, 100)
// int64_t hook_hash(uint32_t write_ptr, uint32_t write_len, int32_t hook_no);
HOOK_API_DEFINITION(int64_t, hook_hash, (uint32_t, uint32_t, int32_t), uint256{}, 100)
// int64_t hook_param_set(uint32_t read_ptr, uint32_t read_len, uint32_t kread_ptr, uint32_t kread_len, uint32_t hread_ptr, uint32_t hread_len);
HOOK_API_DEFINITION(int64_t, hook_param_set, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t hook_param(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, hook_param, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t hook_again();
HOOK_API_DEFINITION(int64_t, hook_again, (), uint256{}, 100)
// int64_t hook_skip(uint32_t read_ptr, uint32_t read_len, uint32_t flags);
HOOK_API_DEFINITION(int64_t, hook_skip, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t hook_pos();
HOOK_API_DEFINITION(int64_t, hook_pos, (), uint256{}, 100)
// int64_t slot(uint32_t write_ptr, uint32_t write_len, uint32_t slot);
HOOK_API_DEFINITION(int64_t, slot, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t slot_clear(uint32_t slot);
HOOK_API_DEFINITION(int64_t, slot_clear, (uint32_t), uint256{}, 100)
// int64_t slot_count(uint32_t slot);
HOOK_API_DEFINITION(int64_t, slot_count, (uint32_t), uint256{}, 100)
// int64_t slot_set(uint32_t read_ptr, uint32_t read_len, uint32_t slot);
HOOK_API_DEFINITION(int64_t, slot_set, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t slot_size(uint32_t slot);
HOOK_API_DEFINITION(int64_t, slot_size, (uint32_t), uint256{}, 100)
// int64_t slot_subarray(uint32_t parent_slot, uint32_t array_id, uint32_t new_slot);
HOOK_API_DEFINITION(int64_t, slot_subarray, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t slot_subfield(uint32_t parent_slot, uint32_t field_id, uint32_t new_slot);
HOOK_API_DEFINITION(int64_t, slot_subfield, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t slot_type(uint32_t slot_no, uint32_t flags);
HOOK_API_DEFINITION(int64_t, slot_type, (uint32_t, uint32_t), uint256{}, 100)
// int64_t slot_float(uint32_t slot_no);
HOOK_API_DEFINITION(int64_t, slot_float, (uint32_t), uint256{}, 100)
// int64_t state_set(uint32_t read_ptr, uint32_t read_len, uint32_t kread_ptr, uint32_t kread_len);
HOOK_API_DEFINITION(int64_t, state_set, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t state_foreign_set(uint32_t read_ptr, uint32_t read_len, uint32_t kread_ptr, uint32_t kread_len, uint32_t nread_ptr, uint32_t nread_len, uint32_t aread_ptr, uint32_t aread_len);
HOOK_API_DEFINITION(int64_t, state_foreign_set, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t state(uint32_t write_ptr, uint32_t write_len, uint32_t kread_ptr, uint32_t kread_len);
HOOK_API_DEFINITION(int64_t, state, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t state_foreign(uint32_t write_ptr, uint32_t write_len, uint32_t kread_ptr, uint32_t kread_len, uint32_t nread_ptr, uint32_t nread_len, uint32_t aread_ptr, uint32_t aread_len);
HOOK_API_DEFINITION(int64_t, state_foreign, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t trace(uint32_t mread_ptr, uint32_t mread_len, uint32_t dread_ptr, uint32_t dread_len, uint32_t as_hex);
HOOK_API_DEFINITION(int64_t, trace, (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t trace_num(uint32_t read_ptr, uint32_t read_len, int64_t number);
HOOK_API_DEFINITION(int64_t, trace_num, (uint32_t, uint32_t, int64_t), uint256{}, 100)
// int64_t trace_float(uint32_t read_ptr, uint32_t read_len, int64_t float1);
HOOK_API_DEFINITION(int64_t, trace_float, (uint32_t, uint32_t, int64_t), uint256{}, 100)
// int64_t otxn_burden();
HOOK_API_DEFINITION(int64_t, otxn_burden, (), uint256{}, 100)
// int64_t otxn_field(uint32_t write_ptr, uint32_t write_len, uint32_t field_id);
HOOK_API_DEFINITION(int64_t, otxn_field, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t otxn_generation();
HOOK_API_DEFINITION(int64_t, otxn_generation, (), uint256{}, 100)
// int64_t otxn_id(uint32_t write_ptr, uint32_t write_len, uint32_t flags);
HOOK_API_DEFINITION(int64_t, otxn_id, (uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t otxn_type();
HOOK_API_DEFINITION(int64_t, otxn_type, (), uint256{}, 100)
// int64_t otxn_slot(uint32_t slot_no);
HOOK_API_DEFINITION(int64_t, otxn_slot, (uint32_t), uint256{}, 100)
// int64_t otxn_param(uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);
HOOK_API_DEFINITION(int64_t, otxn_param, (uint32_t, uint32_t, uint32_t, uint32_t), uint256{}, 100)
// int64_t meta_slot(uint32_t slot_no);
HOOK_API_DEFINITION(int64_t, meta_slot, (uint32_t), uint256{}, 100)
// int64_t xpop_slot(uint32_t slot_no_tx, uint32_t slot_no_meta);
HOOK_API_DEFINITION(int64_t, xpop_slot, (uint32_t, uint32_t), featureHooksUpdate1, 100)

View File

@@ -608,7 +608,7 @@ Change::activateXahauGenesis()
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
false,
hook_api::getImportWhitelist(ctx_.view().rules()),
(ctx_.view().rules().enabled(fix20250131) ? 2 : 0));
hook_api::getGuardRulesVersion(ctx_.view().rules()));
if (!result)
{

View File

@@ -492,7 +492,7 @@ SetHook::validateHookSetEntry(SetHookCtx& ctx, STObject const& hookSetObj)
hsacc,
ctx.rules.enabled(featureHookFeeV2),
hook_api::getImportWhitelist(ctx.rules),
(ctx.rules.enabled(fix20250131) ? 2 : 0));
hook_api::getGuardRulesVersion(ctx.rules));
if (ctx.j.trace())
{

View File

@@ -23,6 +23,8 @@
#include <ripple/json/json_writer.h>
#include <ripple/protocol/TxFlags.h>
#include <ripple/protocol/jss.h>
#include "ripple/protocol/Feature.h"
#include "ripple/protocol/TER.h"
#include <test/app/Import_json.h>
#include <test/app/SetHook_wasm.h>
#include <test/jtx.h>
@@ -6896,7 +6898,10 @@ public:
std::vector<std::string> const keys = {
"ED74D4036C6591A4BDF9C54CEFA39B996A5DCE5F86D11FDA1874481CE9D5A1CDC"
"1"};
Env env{*this, network::makeNetworkVLConfig(21337, keys)};
Env env{
*this,
network::makeNetworkVLConfig(21337, keys),
features - featureHooksUpdate1};
auto const master = Account("masterpassphrase");
env(noop(master), fee(10'000'000'000), ter(tesSUCCESS));
@@ -6974,6 +6979,16 @@ public:
}
)[test.hook]"];
// before featureHooksUpdate1
env(ripple::test::jtx::hook(alice, {{hso(hook, overrideFlag)}}, 0),
M("set xpop_slot (disabled)"),
HSFEE,
ter(temMALFORMED));
env.close();
env.enableFeature(featureHooksUpdate1);
env.close();
// install the hook on alice
env(ripple::test::jtx::hook(alice, {{hso(hook, overrideFlag)}}, 0),
M("set xpop_slot"),