mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 15:28:03 +00:00
Upstream rewrote the wasm VM and host-function system (Rust `crates/` bridged via cxx), collapsed `transactions.macro` onto `TxSettings`, and moved invariant running from `ApplyContext` to `Transactor`. This merge resolves those conflicts and the breaks that carried no conflict marker. Conflict resolutions of note: - transactions.macro: took upstream's 5-argument `TxSettings` form and re-expressed our `emitable` column as `TxSettings::emittance`, a new scoped `Emittance` enum in TxSettings.h. `Emitable.cpp` and the transaction code generator read the new member. - sfields.macro: upstream claimed UINT32 75-80, so `sfParameterFlag` moves from 80 to 86. The amendment is not live, so no wire break. - HostFunc.h: took upstream's version, which drops `floatRoot`, and re-added the 15 contract virtuals. `setDataNestedObjectField`'s parameters are renamed to `(account, key, nestedKey, value)` to match the implementation; the wire order is unchanged. - WasmCommon.h: `SubmitTxnFailure` (-21) and `InvalidState` (-22) join upstream's enum and the Rust `host_errors!` table. `Success` is gone; the helpers that compared against it now return `expected<void, ...>`. - Transactor.cpp: kept the emitted-transaction pass, now using `checkInvariants(result, fee, InvariantScope::ProtocolOnly)`. Breaks with no conflict marker: - `Emitable.cpp` used the 8-argument TRANSACTION macro. - `STTx::getSeqValue` is gone; use `getSeqProxy().value()`. - `NetworkOPsImp::subLock_` is now `streamLock_`, held with `scoped_lock`. - The `LedgerEntryHelpers` namespace is now `ledger_entry_helpers`. - `keylet::vault` takes a `SeqProxy`. The three contract `ledger_entry` parsers were copy-pasted from the vault one and returned vault keylets; they now build contract, contract source and contract data keylets from their own fields. `contract_hash` is added to jss. The 15 contract host functions still register through the deleted C++ wrapper layer, so contract bytecode does not run yet. Porting them to the Rust-declared ABI is the next commit.
78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <xrpl/protocol/Rules.h>
|
|
#include <xrpl/protocol/TER.h>
|
|
#include <xrpl/protocol/TxFormats.h>
|
|
#include <xrpl/protocol/TxSettings.h>
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
namespace xrpl {
|
|
/**
|
|
* We have both transaction type emitables and granular type emitables.
|
|
* Since we will reuse the TransactionFormats to parse the Transaction
|
|
* Emitables, only the GranularEmitableType is defined here. To prevent
|
|
* conflicts with TxType, the GranularEmitableType is always set to a value
|
|
* greater than the maximum value of uint16.
|
|
*/
|
|
enum GranularEmitableType : std::uint32_t {
|
|
#pragma push_macro("EMITABLE")
|
|
#undef EMITABLE
|
|
|
|
#define EMITABLE(type, txType, value) type = value,
|
|
|
|
#include <xrpl/protocol/detail/emitable.macro>
|
|
|
|
#undef EMITABLE
|
|
#pragma pop_macro("EMITABLE")
|
|
};
|
|
|
|
class Emitable
|
|
{
|
|
private:
|
|
Emitable();
|
|
|
|
std::unordered_map<std::uint16_t, Emittance> emitableTx_;
|
|
|
|
std::unordered_map<std::string, GranularEmitableType> granularEmitableMap_;
|
|
|
|
std::unordered_map<GranularEmitableType, std::string> granularNameMap_;
|
|
|
|
std::unordered_map<GranularEmitableType, TxType> granularTxTypeMap_;
|
|
|
|
public:
|
|
static Emitable const&
|
|
getInstance();
|
|
|
|
Emitable(Emitable const&) = delete;
|
|
Emitable&
|
|
operator=(Emitable const&) = delete;
|
|
|
|
std::optional<std::string>
|
|
getEmitableName(std::uint32_t const value) const;
|
|
|
|
std::optional<std::uint32_t>
|
|
getGranularValue(std::string const& name) const;
|
|
|
|
std::optional<std::string>
|
|
getGranularName(GranularEmitableType const& value) const;
|
|
|
|
std::optional<TxType>
|
|
getGranularTxType(GranularEmitableType const& gpType) const;
|
|
|
|
bool
|
|
isEmitable(std::uint32_t const& emitableValue) const;
|
|
|
|
// for tx level emitable, emitable value is equal to tx type plus one
|
|
uint32_t
|
|
txToEmitableType(TxType const& type) const;
|
|
|
|
// tx type value is emitable value minus one
|
|
TxType
|
|
emitableToTxType(uint32_t const& value) const;
|
|
};
|
|
|
|
} // namespace xrpl
|