Commit Graph

14027 Commits

Author SHA1 Message Date
Valentin Balaschenko
068cea41b6 Track latencies of certain code blocks, and log if they take too long 2025-06-15 22:01:36 +09:00
John Freeman
4cf97ad212 Use error codes throughout fast Base58 implementation 2025-06-15 21:59:37 +09:00
Mayukha Vadari
a0e19f9dcd Improve error handling in some RPC commands 2025-06-15 21:59:24 +09:00
Alex Kremer
28a0d88e5c Add xrpl.libpp as an exported lib in conan (#5022) 2025-06-15 21:30:47 +09:00
Gregory Tsipenyuk
7755a03c1f Fix Oracle's token pair deterministic order: (#5021)
Price Oracle data-series logic uses `unordered_map` to update the Oracle object.
This results in different servers disagreeing on the order of that hash table.
Consequently, the generated ledgers will have different hashes.
The fix uses `map` instead to guarantee the order of the token pairs
in the data-series.
2025-06-15 21:30:38 +09:00
Gregory Tsipenyuk
06606c124e Fix last Liquidity Provider withdrawal:
Due to the rounding, LPTokenBalance of the last
Liquidity Provider (LP), might not match this LP's
trustline balance. This fix sets LPTokenBalance on
last LP withdrawal to this LP's LPToken trustline
balance.
2025-06-15 21:29:28 +09:00
Gregory Tsipenyuk
abd0621fef Fix offer crossing via single path AMM with transfer fee:
Single path AMM offer has to factor in the transfer in rate
when calculating the upper bound quality and the quality function
because single path AMM's offer quality is not constant.
This fix factors in the transfer fee in
BookStep::adjustQualityWithFees().
2025-06-15 21:29:12 +09:00
Gregory Tsipenyuk
0609949d25 Fix adjustAmountsByLPTokens():
The fix is to return the actual adjusted lp tokens and amounts
by the function.
2025-06-15 21:29:03 +09:00
Gregory Tsipenyuk
cac001b826 Add the fixAMMOfferRounding amendment: (#4983)
* Fix AMM offer rounding and low quality LOB offer blocking AMM:

A single-path AMM offer with account offer on DEX, is always generated
starting with the takerPays first, which is rounded up, and then
the takerGets, which is rounded down. This rounding ensures that the pool's
product invariant is maintained. However, when one of the offer's side
is XRP, this rounding can result in the AMM offer having a lower
quality, potentially causing offer generation to fail if the quality
is lower than the account's offer quality.

To address this issue, the proposed fix adjusts the offer generation process
to start with the XRP side first and always rounds it down. This results
in a smaller offer size, improving the offer's quality. Regardless if the offer
has XRP or not, the rounding is done so that the offer size is minimized.
This change still ensures the product invariant, as the other generated
side is the exact result of the swap-in or swap-out equations.

If a liquidity can be provided by both AMM and LOB offer on offer crossing
then AMM offer is generated so that it matches LOB offer quality. If LOB
offer quality is less than limit quality then generated AMM offer quality
is also less than limit quality and the offer doesn't cross. To address
this issue, if LOB quality is better than limit quality then use LOB
quality to generate AMM offer. Otherwise, don't use the quality to generate
AMM offer. In this case, limitOut() function in StrandFlow limits
the out amount to match strand's quality to limit quality and consume
maximum AMM liquidity.
2025-06-15 21:28:21 +09:00
Gregory Tsipenyuk
0601fd4916 Price Oracle: validate input parameters and extend test coverage: (#5013)
* Price Oracle: validate input parameters and extend test coverage:

Validate trim, time_threshold, document_id are valid
Int, UInt, or string convertible to UInt. Validate base_asset
and quote_asset are valid currency. Update error codes.
Extend Oracle and GetAggregatePrice unit-tests.
Denote unreachable coverage code.

* Set one-line LCOV_EXCL_LINE

* Move ledger_entry tests to LedgerRPC_test.cpp

* Add constants for "None"

* Fix LedgerRPC test

---------

Co-authored-by: Scott Determan <scott.determan@yahoo.com>
2025-06-15 21:27:12 +09:00
Michael Legleux
b6285bfda2 Add external directory to Conan recipe's exports (#5006) 2025-06-15 21:27:01 +09:00
John Freeman
88ccbecc87 Add missing includes (#5011) 2025-06-15 21:26:51 +09:00
seelabs
6adce3f703 Remove flow assert: (#5009)
Rounding in the payment engine is causing an assert to sometimes fire
with "dust" amounts. This is causing issues when running debug builds of
rippled. This issue will be addressed, but the assert is no longer
serving its purpose.
2025-06-15 21:26:39 +09:00
seelabs
ad5a1d2385 fix amendment: AMM swap should honor invariants: (#5002)
The AMM has an invariant for swaps where:
new_balance_1*new_balance_2 >= old_balance_1*old_balance_2

Due to rounding, this invariant could sometimes be violated (although by
very small amounts).

This patch introduces an amendment `fixAMMRounding` that changes the
rounding to always favor the AMM. Doing this should maintain the
invariant.

Co-authored-by: Bronek Kozicki
Co-authored-by: thejohnfreeman
2025-06-15 21:26:10 +09:00
seelabs
00f2e28a7b Add global access to the current ledger rules:
It can be difficult to make transaction breaking changes to low level
code because the low level code does not have access to a ledger and the
current activated amendments in that ledger (the "rules"). This patch
adds global access to the current ledger rules as a `std::optional`. If
the optional is not seated, then there is no active transaction.
2025-06-15 21:20:55 +09:00
Snoppy
05618c9b98 chore: fix typos (#4958) 2025-06-15 21:20:45 +09:00
Ed Hennis
09cb6a884a test: Add RPC error checking support to unit tests (#4987) 2025-06-15 21:20:23 +09:00
John Freeman
1caf3f0fee Ignore more commits 2025-06-15 21:13:18 +09:00
John Freeman
796ca637d6 Address compiler warnings 2025-06-15 21:13:08 +09:00
John Freeman
946d34b25d Add markers around source lists 2025-06-15 21:12:57 +09:00
John Freeman
f3be6e8a73 Fix source lists 2025-06-15 21:12:30 +09:00
Pretty Printer
47ddb288e6 Rewrite includes
$ find src/ripple/ src/test/ -type f -exec sed -i 's:include\s*["<]ripple/\(.*\)\.h\(pp\)\?[">]:include <ripple/\1.h>:' {} +
2025-06-15 21:08:08 +09:00
Pretty Printer
c9898416bc Format formerly .hpp files 2025-06-15 21:07:53 +09:00
Pretty Printer
f7f6e019bf Rename .hpp to .h 2025-06-15 21:07:42 +09:00
John Freeman
13ea38bcbb Simplify protobuf generation 2025-06-15 21:07:29 +09:00
Pretty Printer
3bf1229b42 Consolidate external libraries 2025-06-06 16:07:10 +09:00
John Freeman
4f476237c0 Remove unused files 2025-06-06 15:46:57 +09:00
Ed Hennis
0c34036549 fix: Remove redundant STAmount conversion in test (#4996) 2025-06-06 15:46:54 +09:00
Scott Determan
ef7ac442e6 fix: resolve database deadlock: (#4989)
The `rotateWithLock` function holds a lock while it calls a callback
function that's passed in by the caller. This is a problematic design
that needs to be used very carefully. In this case, at least one caller
passed in a callback that eventually relocks the mutex on the same
thread, causing UB (a deadlock was observed). The caller was from
SHAMapStoreImpl, and it called `clearCaches`. This `clearCaches` can
potentially call `fetchNodeObject`, which tried to relock the mutex.

This patch resolves the issue by changing the mutex type to a
`recursive_mutex`. Ideally, the code should be rewritten so it doesn't
hold the mutex during the callback and the mutex should be changed back
to a regular mutex.

Co-authored-by: Ed Hennis <ed@ripple.com>
2025-06-06 15:46:51 +09:00
Michael Legleux
0d6f8afeac fix Conan component reference typo 2025-06-06 15:46:47 +09:00
Bronek Kozicki
fe71d30665 Remove unused lambdas from MultiApiJson_test 2025-06-06 15:46:36 +09:00
Chenna Keshava B S
0f86e7ad54 test: verify the rounding behavior of equal-asset AMM deposits (#4982)
* Specifically, test using tfLPToken flag
2025-06-06 15:46:27 +09:00
John Freeman
4d03f30571 test: Add tests to raise coverage of AMM (#4971)
---------

Co-authored-by: Howard Hinnant <howard.hinnant@gmail.com>
Co-authored-by: Mark Travis <mtravis@ripple.com>
Co-authored-by: Bronek Kozicki <brok@incorrekt.com>
Co-authored-by: Mayukha Vadari <mvadari@gmail.com>
Co-authored-by: Chenna Keshava <ckeshavabs@gmail.com>
2025-06-06 15:46:13 +09:00
John Freeman
415ef13480 test: Add tests to raise coverage of AMM (#4971)
---------

Co-authored-by: Howard Hinnant <howard.hinnant@gmail.com>
Co-authored-by: Mark Travis <mtravis@ripple.com>
Co-authored-by: Bronek Kozicki <brok@incorrekt.com>
Co-authored-by: Mayukha Vadari <mvadari@gmail.com>
Co-authored-by: Chenna Keshava <ckeshavabs@gmail.com>
2025-06-06 15:44:24 +09:00
Bronek Kozicki
632c2982a4 test: Unit test for AMM offer overflow (#4986) 2025-06-06 14:48:00 +09:00
Mayukha Vadari
c97148218f fix amendment to add PreviousTxnID/PreviousTxnLgrSequence (#4751)
This amendment, `fixPreviousTxnID`, adds `PreviousTxnID` and
`PreviousTxnLgrSequence` as fields to all ledger objects that did
not already have them included (`DirectoryNode`, `Amendments`,
`FeeSettings`, `NegativeUNL`, and `AMM`). This makes it much easier
to go through the history of these ledger objects.
2025-06-06 14:47:47 +09:00
Ed Hennis
6bbd3cd9e0 chore: Default validator-keys-tool to master branch: (#4943)
* master is the default branch for that project. There's no point in
  using develop.
2025-06-06 13:09:45 +09:00
Scott Determan
df6da572d0 fixXChainRewardRounding: round reward shares down: (#4933)
When calculating reward shares, the amount should always be rounded
down. If the `fixUniversalNumber` amendment is not active, this works
correctly. If it is not active, then the amount is incorrectly rounded
up. This patch introduces an amendment so it will be rounded down.
2025-06-06 13:08:48 +09:00
Mark Travis
e2f562ae91 Don't reach consensus as quickly if no other proposals seen: (#4763)
This fixes a case where a peer can desync under a certain timing
circumstance--if it reaches a certain point in consensus before it receives
proposals. 

This was noticed under high transaction volumes. Namely, when we arrive at the
point of deciding whether consensus is reached after minimum establish phase
duration but before having received any proposals. This could be caused by
finishing the previous round slightly faster and/or having some delay in
receiving proposals. Existing behavior arrives at consensus immediately after
the minimum establish duration with no proposals. This causes us to desync
because we then close a non-validated ledger. The change in this PR causes us to
wait for a configured threshold before making the decision to arrive at
consensus with no proposals. This allows validators to catch up and for brief
delays in receiving proposals to be absorbed. There should be no drawback since,
with no proposals coming in, we needn't be in a huge rush to jump ahead.
2025-06-06 13:07:46 +09:00
Bronek Kozicki
97fb26f491 Write improved forAllApiVersions used in NetworkOPs (#4833) 2025-06-06 13:07:19 +09:00
Bronek Kozicki
7c89952537 Enforce no duplicate slots from incoming connections: (#4944)
We do not currently enforce that incoming peer connection does not have
remote_endpoint which is already used (either by incoming or outgoing
connection), hence already stored in slots_. If we happen to receive a
connection from such a duplicate remote_endpoint, it will eventually result in a
crash (when disconnecting) or weird behavior (when updating slot state), as a
result of an apparently matching remote_endpoint in slots_ being used by a
different connection.
2025-06-06 13:01:11 +09:00
Mayukha Vadari
d66b67fccb fixEmptyDID: fix amendment to handle empty DID edge case: (#4950)
This amendment fixes an edge case where an empty DID object can be
created. It adds an additional check to ensure that DIDs are
non-empty when created, and returns a `tecEMPTY_DID` error if the DID
would be empty.
2025-06-06 13:00:47 +09:00
Ed Hennis
12fb3abb13 test: Env unit test RPC errors return a unique result: (#4877)
* telENV_RPC_FAILED is a new code, reserved exclusively
  for unit tests when RPC fails. This will
  make those types of errors distinct and easier to test
  for when expected and/or diagnose when not.
* Output RPC command result when result is not expected.
2025-06-06 12:53:00 +09:00
Bronek Kozicki
2a509960c5 Upgrade to xxhash 0.8.2 as a Conan requirement, enable SIMD hashing (#4893)
We are currently using old version 0.6.2 of `xxhash`, as a verbatim copy and paste of its header file `xxhash.h`. Switch to the more recent version 0.8.2. Since this version is in Conan Center (and properly protects its ABI by keeping the state object incomplete), add it as a Conan requirement. Switch to the SIMD instructions (in the new `XXH3` family) supported by the new version.
2025-06-06 12:41:55 +09:00
Michael Legleux
dbeca5a2ee Install more public headers (#4940)
Fixes some mistakes in #4885
2025-06-06 12:30:28 +09:00
Scott Determan
646fb1a860 fix: order book update variable swap: (#4890)
This is likely the result of a typo when the code was simplified.
2025-06-06 12:21:02 +09:00
John Freeman
7f2ddf431b Embed patched recipe for RocksDB 6.29.5 (#4947) 2025-06-06 12:20:45 +09:00
Gregory Tsipenyuk
9d5b013b34 build: add STCurrency.h to xrpl_core to fix clio build (#4939) 2025-06-06 12:10:58 +09:00
Mayukha Vadari
266e2a26fc feat: add user version of feature RPC (#4781)
* uses same formatting as admin RPC
* hides potentially sensitive data
2025-06-06 12:10:42 +09:00
Scott Determan
c8373de952 Fast base58 codec: (#4327)
This algorithm is about an order of magnitude faster than the existing
algorithm (about 10x faster for encoding and about 15x faster for
decoding - including the double hash for the checksum). The algorithms
use gcc's int128 (fast MS version will have to wait, in the meantime MS
falls back to the slow code).
2025-06-06 12:01:35 +09:00