Compare commits

..

39 Commits

Author SHA1 Message Date
Bronek Kozicki
94a1facf7b Merge branch 'develop' into Bronek/vault_enable 2025-11-17 11:10:16 +00:00
Bronek Kozicki
b508d57112 Merge branch 'develop' into Bronek/vault_enable 2025-11-07 11:25:53 +00:00
Bronek Kozicki
a0896cb9d3 Merge branch 'develop' into Bronek/vault_enable 2025-11-05 09:55:46 +00:00
Bronek Kozicki
049cb0275c Merge branch 'develop' into Bronek/vault_enable 2025-10-25 08:28:10 +01:00
Bronek Kozicki
5844c59026 Merge branch 'develop' into Bronek/vault_enable 2025-10-21 14:38:19 +01:00
Bronek Kozicki
00ba58a5a8 Merge branch 'develop' into Bronek/vault_enable 2025-10-08 13:11:29 +01:00
Bronek Kozicki
2cad9460bd Merge branch 'develop' into Bronek/vault_enable 2025-10-06 10:32:39 +01:00
Bronek Kozicki
d502e56f83 Merge branch 'develop' into Bronek/vault_enable 2025-09-30 09:11:52 +01:00
Bronek Kozicki
52e311437c Merge branch 'develop' into Bronek/vault_enable 2025-09-29 10:59:02 +01:00
Bronek Kozicki
9942f62756 Merge branch 'develop' into Bronek/vault_enable 2025-09-26 16:27:57 +01:00
Bronek Kozicki
032c3c9a76 Merge branch 'develop' into Bronek/vault_enable 2025-09-23 20:40:10 +01:00
Bronek Kozicki
9d0a289686 Merge branch 'develop' into Bronek/vault_enable 2025-09-10 16:19:21 +01:00
Bronek Kozicki
863b3d74d8 Merge branch 'develop' into Bronek/vault_enable 2025-08-28 12:37:02 +01:00
Bronek Kozicki
5e3bcb1430 Merge branch 'develop' into Bronek/vault_enable 2025-08-18 11:35:27 +01:00
Bronek Kozicki
a6895505af Merge branch 'develop' into Bronek/vault_enable 2025-08-12 14:56:32 +01:00
Bronek Kozicki
9017860051 Merge branch 'develop' into Bronek/vault_enable 2025-08-11 09:33:02 +01:00
Bronek Kozicki
4aa471a4d5 Merge branch 'develop' into Bronek/vault_enable 2025-08-08 14:18:12 +01:00
Bronek Kozicki
73646bb758 Merge branch 'develop' into Bronek/vault_enable 2025-08-04 11:22:33 +01:00
Bronek Kozicki
96057c8aac Merge branch 'develop' into Bronek/vault_enable 2025-07-30 09:32:57 +01:00
Bronek Kozicki
db61c22c9b Merge branch 'develop' into Bronek/vault_enable 2025-07-29 17:34:34 +01:00
Bronek Kozicki
a355b1eb05 Merge branch 'develop' into Bronek/vault_enable 2025-07-25 17:20:17 +01:00
Bronek Kozicki
b87d6ecee5 Merge branch 'develop' into Bronek/vault_enable 2025-07-23 18:07:46 +01:00
Bronek Kozicki
0ff8c7e323 Merge branch 'develop' into Bronek/vault_enable 2025-07-23 11:53:30 +01:00
Bronek Kozicki
9037fcb374 Merge branch 'develop' into Bronek/vault_enable 2025-07-17 09:39:50 +01:00
Bronek Kozicki
37ada0c561 Merge branch 'develop' into Bronek/vault_enable 2025-07-16 11:26:56 +01:00
Bronek Kozicki
558d12c269 Merge branch 'develop' into Bronek/vault_enable 2025-07-14 09:46:28 +01:00
Bronek Kozicki
80a8f1cd9e Merge branch 'develop' into Bronek/vault_enable 2025-07-11 15:19:10 +01:00
Bronek Kozicki
077237f62a Merge branch 'develop' into Bronek/vault_enable 2025-07-07 12:17:34 +01:00
Bronek Kozicki
23fe3259b5 Merge branch 'develop' into Bronek/vault_enable 2025-06-27 10:40:03 +01:00
Bronek Kozicki
4cbe0d6fb6 Merge branch 'develop' into Bronek/vault_enable 2025-06-24 11:53:52 +01:00
Bronek Kozicki
3a37eae4fb Merge branch 'develop' into Bronek/vault_enable 2025-06-23 12:31:42 +01:00
Bronek Kozicki
4aff6e5d73 Merge branch 'develop' into Bronek/vault_enable 2025-06-05 10:59:14 +01:00
Bronek Kozicki
c1c3fb9ee8 Merge branch 'develop' into Bronek/vault_enable 2025-06-03 12:26:02 +01:00
Bronek Kozicki
8e678bfc70 Merge branch 'develop' into Bronek/vault_enable 2025-05-30 10:05:02 +01:00
Bronek Kozicki
11cb95d84a Merge branch 'develop' into Bronek/vault_enable 2025-05-28 17:34:27 +01:00
Bronek Kozicki
3883ca9790 Merge branch 'develop' into Bronek/vault_enable 2025-05-23 17:01:14 +01:00
Bronek Kozicki
7c1fafef85 Merge branch 'develop' into Bronek/vault_enable 2025-05-22 21:02:20 +01:00
Bronek Kozicki
295177c236 Merge branch 'develop' into Bronek/vault_enable 2025-05-22 10:40:02 +01:00
Bronek Kozicki
65e1c81746 Enable SingleAssetVault feature 2025-05-21 17:16:59 +01:00
11 changed files with 13 additions and 197 deletions

View File

@@ -13,28 +13,12 @@ class Number;
std::string
to_string(Number const& amount);
template <class T1, class T2>
concept ArithmeticWithNumber =
std::is_arithmetic_v<std::remove_reference_t<T1>> &&
std::is_convertible_v<T2, Number>;
template <class T1, class T2>
concept OneNumberParam =
ArithmeticWithNumber<T1, T2> || ArithmeticWithNumber<T2, T1>;
class Number
{
using rep = std::int64_t;
rep mantissa_{0};
int exponent_{std::numeric_limits<int>::lowest()};
using urep = std::make_unsigned_t<rep>;
template <class T>
rep
utoi(T mantissa)
requires std::is_unsigned_v<T>;
public:
// The range for the mantissa when normalized
constexpr static std::int64_t minMantissa = 1'000'000'000'000'000LL;
@@ -51,10 +35,7 @@ public:
explicit constexpr Number() = default;
template <class T>
explicit Number(T mantissa)
requires std::is_unsigned_v<T>;
explicit Number(rep mantissa);
Number(rep mantissa);
explicit Number(rep mantissa, int exponent);
explicit constexpr Number(rep mantissa, int exponent, unchecked) noexcept;
@@ -78,39 +59,13 @@ public:
Number&
operator+=(Number const& x);
template <class T>
Number&
operator+=(T x)
{
return operator+=(Number(x));
}
Number&
operator-=(Number const& x);
template <class T>
Number&
operator-=(T x)
{
return operator-=(Number(x));
}
Number&
operator*=(Number const& x);
template <class T>
Number&
operator*=(T x)
{
return operator*=(Number(x));
}
Number&
operator/=(Number const& x);
template <class T>
Number&
operator/=(T x)
{
return operator/=(Number(x));
}
static constexpr Number
min() noexcept;
@@ -132,26 +87,12 @@ public:
{
return x.mantissa_ == y.mantissa_ && x.exponent_ == y.exponent_;
}
template <class T1, class T2>
friend constexpr bool
operator==(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator==(Number(x), Number(y));
}
friend constexpr bool
operator!=(Number const& x, Number const& y) noexcept
{
return !(x == y);
}
template <class T1, class T2>
friend constexpr bool
operator!=(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator!=(Number(x), Number(y));
}
friend constexpr bool
operator<(Number const& x, Number const& y) noexcept
@@ -182,13 +123,6 @@ public:
// If equal exponents, compare mantissas
return x.mantissa_ < y.mantissa_;
}
template <class T1, class T2>
friend constexpr bool
operator<(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator<(Number(x), Number(y));
}
/** Return the sign of the amount */
constexpr int
@@ -220,39 +154,18 @@ public:
{
return y < x;
}
template <class T1, class T2>
friend constexpr bool
operator>(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator>(Number(x), Number(y));
}
friend constexpr bool
operator<=(Number const& x, Number const& y) noexcept
{
return !(y < x);
}
template <class T1, class T2>
friend constexpr bool
operator<=(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator<=(Number(x), Number(y));
}
friend constexpr bool
operator>=(Number const& x, Number const& y) noexcept
{
return !(x < y);
}
template <class T1, class T2>
friend constexpr bool
operator>=(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator>=(Number(x), Number(y));
}
friend std::ostream&
operator<<(std::ostream& os, Number const& x)
@@ -279,16 +192,6 @@ private:
class Guard;
};
template <class T>
Number::rep
Number::utoi(T mantissa)
requires std::is_unsigned_v<T>
{
if (mantissa > std::numeric_limits<rep>::max())
throw std::overflow_error("too high");
return static_cast<rep>(mantissa);
}
inline constexpr Number::Number(rep mantissa, int exponent, unchecked) noexcept
: mantissa_{mantissa}, exponent_{exponent}
{
@@ -304,13 +207,6 @@ inline Number::Number(rep mantissa) : Number{mantissa, 0}
{
}
template <class T>
Number::Number(T mantissa)
requires std::is_unsigned_v<T>
: Number{utoi(mantissa), 0}
{
}
inline constexpr Number::rep
Number::mantissa() const noexcept
{
@@ -381,14 +277,6 @@ operator+(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator+(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator+(Number(x), Number(y));
}
inline Number
operator-(Number const& x, Number const& y)
{
@@ -397,14 +285,6 @@ operator-(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator-(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator-(Number(x), Number(y));
}
inline Number
operator*(Number const& x, Number const& y)
{
@@ -413,14 +293,6 @@ operator*(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator*(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator*(Number(x), Number(y));
}
inline Number
operator/(Number const& x, Number const& y)
{
@@ -429,14 +301,6 @@ operator/(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator/(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator/(Number(x), Number(y));
}
inline constexpr Number
Number::min() noexcept
{

View File

@@ -29,9 +29,7 @@ struct Fees
XRPAmount
accountReserve(std::size_t ownerCount) const
{
auto const p = ownerCount * increment;
auto const s = reserve + p;
return s;
return reserve + ownerCount * increment;
}
};

View File

@@ -42,7 +42,7 @@ public:
IOUAmount() = default;
explicit IOUAmount(Number const& other);
IOUAmount(beast::Zero);
IOUAmount(std::int64_t mantissa, int exponent = 0);
IOUAmount(std::int64_t mantissa, int exponent);
IOUAmount& operator=(beast::Zero);

View File

@@ -64,7 +64,7 @@ public:
operator Number() const noexcept
{
return Number{value()};
return value();
}
/** Return the sign of the amount */

View File

@@ -20,9 +20,7 @@ namespace ripple {
class XRPAmount : private boost::totally_ordered<XRPAmount>,
private boost::additive<XRPAmount>,
private boost::equality_comparable<XRPAmount, std::int64_t>,
private boost::equality_comparable<XRPAmount, int>,
private boost::additive<XRPAmount, std::int64_t>,
private boost::additive<XRPAmount, int>
private boost::additive<XRPAmount, std::int64_t>
{
public:
using unit_type = unit::dropTag;
@@ -70,13 +68,11 @@ public:
return XRPAmount{drops_ * rhs};
}
template <class T>
friend constexpr XRPAmount
operator*(T lhs, XRPAmount const& rhs)
requires std::is_convertible_v<T, value_type>
operator*(value_type lhs, XRPAmount const& rhs)
{
// multiplication is commutative
return rhs.operator*(lhs);
return rhs * lhs;
}
XRPAmount&
@@ -131,12 +127,6 @@ public:
{
return drops_ == other;
}
friend bool
operator==(value_type lhs, XRPAmount const& rhs)
{
// multiplication is commutative
return rhs.operator==(lhs);
}
bool
operator<(XRPAmount const& other) const
@@ -153,7 +143,7 @@ public:
operator Number() const noexcept
{
return Number{drops()};
return drops();
}
/** Return the sign of the amount */

View File

@@ -27,7 +27,7 @@ XRPL_FIX (EnforceNFTokenTrustlineV2, Supported::yes, VoteBehavior::DefaultNo
XRPL_FIX (AMMv1_3, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(PermissionedDEX, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(Batch, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(SingleAssetVault, Supported::no, VoteBehavior::DefaultNo)
XRPL_FEATURE(SingleAssetVault, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FIX (PayChanCancelAfter, Supported::yes, VoteBehavior::DefaultNo)
// Check flags in Credential transactions
XRPL_FIX (InvalidTxFlags, Supported::yes, VoteBehavior::DefaultNo)

View File

@@ -2884,7 +2884,7 @@ assetsToSharesDeposit(
Number(assets.mantissa(), assets.exponent() + vault->at(sfScale))
.truncate()};
Number const shareTotal = Number{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
shares = ((shareTotal * assets) / assetTotal).truncate();
return shares;
}
@@ -2913,7 +2913,7 @@ sharesToAssetsDeposit(
shares.exponent() - vault->at(sfScale),
false};
Number const shareTotal{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
assets = (assetTotal * shares) / shareTotal;
return assets;
}
@@ -2939,7 +2939,7 @@ assetsToSharesWithdraw(
STAmount shares{vault->at(sfShareMPTID)};
if (assetTotal == 0)
return shares;
Number const shareTotal{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
Number result = (shareTotal * assets) / assetTotal;
if (truncate == TruncateShares::yes)
result = result.truncate();
@@ -2967,7 +2967,7 @@ sharesToAssetsWithdraw(
STAmount assets{vault->at(sfAsset)};
if (assetTotal == 0)
return assets;
Number const shareTotal{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
assets = (assetTotal * shares) / shareTotal;
return assets;
}

View File

@@ -16,12 +16,6 @@ QualityFunction::QualityFunction(
{
if (quality.rate() <= beast::zero)
Throw<std::runtime_error>("QualityFunction quality rate is 0.");
static_assert(std::is_arithmetic_v<std::remove_reference_t<int>>);
static_assert(std::is_convertible_v<ripple::STAmount, Number>);
static_assert(ripple::OneNumberParam<int, ripple::STAmount>);
static_assert(!ripple::OneNumberParam<Number, Number>);
b_ = 1 / quality.rate();
}

View File

@@ -142,34 +142,6 @@ public:
}
};
/*
template <class T1, class T2>
concept STAmountParams =
std::is_convertible_v<T1, STAmount> && std::is_convertible_v<T2, STAmount>;
template <class T1, class T2>
STAmount
operator-(T2&& lhs, T1&& rhs)
requires STAmountParams<T1, T2>
{
return STAmount(lhs) - STAmount(rhs);
}
*/
/*
STAmount
operator-(PrettyAmount&& lhs, STAmount const& rhs)
{
return STAmount(lhs) - rhs;
}
STAmount
operator-(STAmount const& lhs, PrettyAmount&& rhs)
{
return lhs - STAmount(rhs);
}
*/
inline bool
operator==(PrettyAmount const& lhs, PrettyAmount const& rhs)
{

View File

@@ -370,7 +370,6 @@ public:
env(pay(alice, bob, USD(1)), sendmax(USD(10)));
env.close();
auto const ten = USD(10);
env.require(balance(alice, USD(10) - amountWithRate));
env.require(balance(bob, USD(1)));
}

View File

@@ -731,7 +731,6 @@ class Simulate_test : public beast::unit_test::suite
{
auto validateOutput = [&](Json::Value const& resp,
Json::Value const& tx) {
static_assert(ArithmeticWithNumber<XRPAmount, int>);
auto result = resp[jss::result];
checkBasicReturnValidity(
result,