# Conflicts: # include/xrpl/basics/CountedObject.h # include/xrpl/basics/Expected.h # include/xrpl/basics/IntrusivePointer.ipp # include/xrpl/basics/IntrusiveRefCounts.h # include/xrpl/basics/Log.h # include/xrpl/basics/Number.h # include/xrpl/basics/SlabAllocator.h # include/xrpl/basics/TaggedCache.h # include/xrpl/basics/TaggedCache.ipp # include/xrpl/basics/UptimeClock.h # include/xrpl/basics/base_uint.h # include/xrpl/basics/chrono.h # include/xrpl/basics/hardened_hash.h # include/xrpl/basics/partitioned_unordered_map.h # include/xrpl/basics/tagged_integer.h # include/xrpl/beast/clock/abstract_clock.h # include/xrpl/beast/clock/basic_seconds_clock.h # include/xrpl/beast/container/aged_unordered_map.h # include/xrpl/beast/container/detail/aged_container_iterator.h # include/xrpl/beast/container/detail/aged_unordered_container.h # include/xrpl/beast/core/List.h # include/xrpl/beast/core/LockFreeStack.h # include/xrpl/beast/hash/hash_append.h # include/xrpl/beast/insight/Counter.h # include/xrpl/beast/insight/Event.h # include/xrpl/beast/insight/Gauge.h # include/xrpl/beast/insight/Hook.h # include/xrpl/beast/insight/Meter.h # include/xrpl/beast/net/IPEndpoint.h # include/xrpl/beast/unit_test/detail/const_container.h # include/xrpl/beast/unit_test/global_suites.h # include/xrpl/beast/unit_test/match.h # include/xrpl/beast/unit_test/recorder.h # include/xrpl/beast/unit_test/reporter.h # include/xrpl/beast/unit_test/results.h # include/xrpl/beast/unit_test/suite.h # include/xrpl/beast/unit_test/suite_info.h # include/xrpl/beast/utility/Journal.h # include/xrpl/beast/utility/PropertyStream.h # include/xrpl/core/ClosureCounter.h # include/xrpl/core/Coro.ipp # include/xrpl/core/Job.h # include/xrpl/core/JobQueue.h # include/xrpl/core/JobTypeData.h # include/xrpl/core/JobTypeInfo.h # include/xrpl/core/JobTypes.h # include/xrpl/core/LoadMonitor.h # include/xrpl/core/detail/Workers.h # include/xrpl/core/detail/semaphore.h # include/xrpl/json/json_value.h # include/xrpl/json/json_writer.h # include/xrpl/ledger/Ledger.h # include/xrpl/ledger/helpers/TokenHelpers.h # include/xrpl/nodestore/NodeObject.h # include/xrpl/protocol/AmountConversions.h # include/xrpl/protocol/ApiVersion.h # include/xrpl/protocol/Book.h # include/xrpl/protocol/ErrorCodes.h # include/xrpl/protocol/Feature.h # include/xrpl/protocol/Indexes.h # include/xrpl/protocol/Quality.h # include/xrpl/protocol/SField.h # include/xrpl/protocol/STAmount.h # include/xrpl/protocol/STArray.h # include/xrpl/protocol/STBase.h # include/xrpl/protocol/STLedgerEntry.h # include/xrpl/protocol/STObject.h # include/xrpl/protocol/STPathSet.h # include/xrpl/protocol/STTx.h # include/xrpl/protocol/STValidation.h # include/xrpl/protocol/STVector256.h # include/xrpl/protocol/Serializer.h # include/xrpl/protocol/XRPAmount.h # include/xrpl/protocol/detail/features.macro # include/xrpl/protocol/json_get_or_throw.h # include/xrpl/resource/Charge.h # include/xrpl/resource/Consumer.h # include/xrpl/server/InfoSub.h # include/xrpl/shamap/FullBelowCache.h # include/xrpl/shamap/SHAMapAddNode.h # src/libxrpl/protocol/AMMCore.cpp # src/libxrpl/protocol/IOUAmount.cpp # src/libxrpl/protocol/STAmount.cpp # src/libxrpl/tx/Transactor.cpp # src/libxrpl/tx/applySteps.cpp # src/test/app/AMM_test.cpp # src/test/app/NFToken_test.cpp # src/test/app/OfferMPT_test.cpp # src/test/app/Offer_test.cpp # src/test/jtx/AMM.h # src/test/jtx/AMMTest.h # src/test/jtx/Env.h # src/test/jtx/Env_ss.h # src/test/jtx/JTx.h # src/test/jtx/PathSet.h # src/test/jtx/TestHelpers.h # src/test/jtx/amount.h # src/test/jtx/balance.h # src/test/jtx/batch.h # src/test/jtx/credentials.h # src/test/jtx/deposit.h # src/test/jtx/escrow.h # src/test/jtx/jtx_json.h # src/test/jtx/mpt.h # src/test/jtx/multisign.h # src/test/jtx/paths.h # src/test/jtx/prop.h # src/test/jtx/regkey.h # src/test/jtx/tags.h # src/xrpld/app/misc/TxQ.h # src/xrpld/app/misc/detail/TxQ.cpp # src/xrpld/rpc/detail/AssetCache.h # src/xrpld/rpc/detail/Pathfinder.h # src/xrpld/rpc/detail/TrustLine.h
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 thexrpldcodebase.- 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.
- As a consequence of this,
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.