Files
rippled/include/xrpl/protocol
Ed Hennis 03ea1deed1 Merge remote-tracking branch 'upstream/develop' into ximinez/lending-rebased
* upstream/develop:
  chore: Set version 3.1.0-b0 (5986)
  ci: Clean workspace on Windows self-hosted runners (6024)
  docs: fix spelling in comments (6002)
  fix: floating point representation errors in vault (5997)
  ci: Specify bash as the default shell in workflows (6021)
  refactor: Add `XRPL_RETIRE_FIX` and `XRPL_RETIRE_FEATURE` macros (6014)
  refactor: Retire DepositPreAuth and DepositAuth amendments (5978)
  chore: Move running of unit tests out of coverage target (6018)
  refactor: Retire PayChanRecipientOwnerDir amendment (5946)
  ci: Update Conan to 2.22.2 (6019)
  refactor: Update RocksDB, SQLite, Doctest (6015)
  fix: JSON parsing of negative `STNumber` and `STAmount` (5990)
  chore: Make CMake improvements (6010)
  refactor: Retire CheckCashMakesTrustLine amendment (5974)
  chore: Unify build & test, add ctest to coverage (6013)
  chore: Point xrpld symlink to rippled (6012)
  chore: Removes unnecessary creation of symlink in CMake install file (6009)
  fix: domain order book insertion 5998
  refactor: Retire fixTrustLinesToSelf amendment (5989)
2025-11-12 18:54:49 -05:00
..

protocol

Classes and functions for handling data and values associated with the XRP Ledger protocol.

Serialized Objects

Objects transmitted over the network must be serialized into a canonical format. The prefix "ST" refers to classes that deal with the serialized format.

The term "Tx" or "tx" is an abbreviation for "Transaction", a commonly occurring object type.

Optional Fields

Our serialized fields have some "type magic" to make optional fields easier to read:

  • The operation x[sfFoo] means "return the value of 'Foo' if it exists, or the default value if it doesn't."
  • The operation x[~sfFoo] means "return the value of 'Foo' if it exists, or nothing if it doesn't." This usage of the tilde/bitwise NOT operator is not standard outside of the rippled codebase.
    • As a consequence of this, x[~sfFoo] = y[~sfFoo] assigns the value of Foo from y to x, including omitting Foo from x if it doesn't exist in y.

Typically, for things that are guaranteed to exist, you use x[sfFoo] and avoid having to deal with a container that may or may not hold a value. For things not guaranteed to exist, you use x[~sfFoo] because you want such a container. It avoids having to look something up twice, once just to see if it exists and a second time to get/set its value. (Real example)

The source of this "type magic" is in SField.h.