#include #include #include #include #include #include #include #include #include #include namespace hook { using namespace ripple; using HookReturnCode = hook_api::hook_return_code; using Bytes = std::vector; struct HookContext; // defined in applyHook.h class HookAPI { public: explicit HookAPI(HookContext& ctx) : hookCtx(ctx) { } /// control APIs // _g // accept // rollback /// util APIs // util_raddr // util_accid // util_verify // util_sha512h // util_keylet /// sto APIs // sto_validate // sto_subfield // sto_subarray // sto_emplace // sto_erase /// etxn APIs Expected, HookReturnCode> emit(Slice txBlob); Expected etxn_burden() const; Expected etxn_fee_base(Slice txBlob) const; Expected etxn_details(uint8_t* out_ptr) const; Expected etxn_reserve(uint64_t count) const; uint32_t etxn_generation() const; Expected etxn_nonce() const; /// float APIs Expected float_set(int32_t exponent, int64_t mantissa) const; Expected float_multiply(uint64_t float1, uint64_t float2) const; Expected float_mulratio( uint64_t float1, uint32_t round_up, uint32_t numerator, uint32_t denominator) const; uint64_t float_negate(uint64_t float1) const; Expected float_compare(uint64_t float1, uint64_t float2, uint32_t mode) const; Expected float_sum(uint64_t float1, uint64_t float2) const; // float_sto // float_sto_set Expected float_invert(uint64_t float1) const; Expected float_divide(uint64_t float1, uint64_t float2) const; uint64_t float_one() const; Expected float_mantissa(uint64_t float1) const; uint64_t float_sign(uint64_t float1) const; Expected float_int(uint64_t float1, uint32_t decimal_places, uint32_t absolute) const; Expected float_log(uint64_t float1) const; Expected float_root(uint64_t float1, uint32_t n) const; /// otxn APIs uint64_t otxn_burden() const; uint32_t otxn_generation() const; Expected otxn_field(uint32_t field_id) const; Expected otxn_id(uint32_t flags) const; TxType otxn_type() const; Expected otxn_slot(uint32_t slot_into) const; Expected otxn_param(Bytes param_name) const; /// hook APIs // hook_account // hook_hash // hook_again // hook_param // hook_param_set // hook_skip // hook_pos /// ledger APIs // fee_base // ledger_seq // ledger_last_hash // ledger_last_time // ledger_nonce // ledger_keylet /// state APIs // state // state_foreign // state_set // state_foreign_set /// slot APIs // slot // slot_clear // slot_count // slot_set // slot_size // slot_subarray // slot_subfield // slot_type // slot_float /// trace APIs // trace // trace_num // trace_float // meta_slot // xpop_slot private: HookContext& hookCtx; inline int32_t no_free_slots() const; inline std::optional get_free_slot() const; inline Expected float_multiply_internal_parts( uint64_t man1, int32_t exp1, bool neg1, uint64_t man2, int32_t exp2, bool neg2) const; inline Expected mulratio_internal( int64_t& man1, int32_t& exp1, bool round_up, uint32_t numerator, uint32_t denominator) const; inline Expected float_divide_internal(uint64_t float1, uint64_t float2) const; inline Expected double_to_xfl(double x) const; }; } // namespace hook