mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-02 16:26:48 +00:00
Expand Number to support the full integer range (#6025)
- Refactor Number internals away from int64 to uint64 & a sign flag
- ctors and accessors use `rep`. Very few things expose
`internalrep`.
- An exception is "unchecked" and the new "normalized", which explicitly
take an internalrep. But with those special control flags, it's easier
to distinguish and control when they are used.
- For now, skip the larger mantissas in AMM transactions and tests
- Remove trailing zeros from scientific notation Number strings
- Update tests. This has the happy side effect of making some of the string
representations _more_ consistent between the small and large
mantissa ranges.
- Add semi-automatic rounding of STNumbers based on Asset types
- Create a new SField metadata enum, sMD_NeedsAsset, which indicates
the field should be associated with an Asset so it can be rounded.
- Add a new STTakesAsset intermediate class to handle the Asset
association to a derived ST class. Currently only used in STNumber,
but could be used by other types in the future.
- Add "associateAsset" which takes an SLE and an Asset, finds the
sMD_NeedsAsset fields, and associates the Asset to them. In the case
of STNumber, that both stores the Asset, and rounds the value
immediately.
- Transactors only need to add a call to associateAsset _after_ all of
the STNumbers have been set. Unfortunately, the inner workings of
STObject do not do the association correctly with uninitialized
fields.
- When serializing an STNumber that has an Asset, round it before
serializing.
- Add an override of roundToAsset, which rounds a Number value in place
to an Asset, but without any additional scale.
- Update and fix a bunch of Loan-related tests to accommodate the
expanded Number class.
---------
Co-authored-by: Vito <5780819+Tapanito@users.noreply.github.com>
This commit is contained in:
@@ -1594,7 +1594,7 @@ class MPToken_test : public beast::unit_test::suite
|
||||
jv[jss::secret] = alice.name();
|
||||
jv[jss::tx_json] = pay(alice, bob, mpt);
|
||||
jv[jss::tx_json][jss::Amount][jss::value] =
|
||||
to_string(maxMPTokenAmount + 1);
|
||||
std::to_string(maxMPTokenAmount + 1);
|
||||
auto const jrr = env.rpc("json", "submit", to_string(jv));
|
||||
BEAST_EXPECT(jrr[jss::result][jss::error] == "invalidParams");
|
||||
}
|
||||
@@ -2474,7 +2474,7 @@ class MPToken_test : public beast::unit_test::suite
|
||||
alice.name(), makeMptID(env.seq(alice), alice));
|
||||
|
||||
Json::Value jv = claw(alice, mpt(1), bob);
|
||||
jv[jss::Amount][jss::value] = to_string(maxMPTokenAmount + 1);
|
||||
jv[jss::Amount][jss::value] = std::to_string(maxMPTokenAmount + 1);
|
||||
Json::Value jv1;
|
||||
jv1[jss::secret] = alice.name();
|
||||
jv1[jss::tx_json] = jv;
|
||||
|
||||
Reference in New Issue
Block a user