mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Add Scale to SingleAssetVault (#5652)
* Add and Scale to VaultCreate * Add round-trip calculation to VaultDeposit VaultWithdraw and VaultClawback * Implement Number::truncate() for VaultClawback * Add rounding to DepositWithdraw * Disallow zero shares withdraw or deposit with tecPRECISION_LOSS * Return tecPATH_DRY on overflow when converting shares/assets * Remove empty shares MPToken in clawback or withdraw (except for vault owner) * Implicitly create shares MPToken for vault owner in VaultCreate * Review feedback: defensive checks in shares/assets calculations --------- Co-authored-by: Ed Hennis <ed@ripple.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -720,6 +720,30 @@ public:
|
||||
BEAST_EXPECT(res2 == STAmount{7518784});
|
||||
}
|
||||
|
||||
void
|
||||
test_truncate()
|
||||
{
|
||||
BEAST_EXPECT(Number(25, +1).truncate() == Number(250, 0));
|
||||
BEAST_EXPECT(Number(25, 0).truncate() == Number(25, 0));
|
||||
BEAST_EXPECT(Number(25, -1).truncate() == Number(2, 0));
|
||||
BEAST_EXPECT(Number(25, -2).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(99, -2).truncate() == Number(0, 0));
|
||||
|
||||
BEAST_EXPECT(Number(-25, +1).truncate() == Number(-250, 0));
|
||||
BEAST_EXPECT(Number(-25, 0).truncate() == Number(-25, 0));
|
||||
BEAST_EXPECT(Number(-25, -1).truncate() == Number(-2, 0));
|
||||
BEAST_EXPECT(Number(-25, -2).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(-99, -2).truncate() == Number(0, 0));
|
||||
|
||||
BEAST_EXPECT(Number(0, 0).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(0, 30000).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(0, -30000).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(100, -30000).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(100, -30000).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(-100, -30000).truncate() == Number(0, 0));
|
||||
BEAST_EXPECT(Number(-100, -30000).truncate() == Number(0, 0));
|
||||
}
|
||||
|
||||
void
|
||||
run() override
|
||||
{
|
||||
@@ -740,6 +764,7 @@ public:
|
||||
test_stream();
|
||||
test_inc_dec();
|
||||
test_toSTAmount();
|
||||
test_truncate();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -74,6 +74,10 @@ public:
|
||||
|
||||
/** @} */
|
||||
|
||||
/** Create an Account from an account ID. Should only be used when the
|
||||
* secret key is unavailable, such as for pseudo-accounts. */
|
||||
explicit Account(std::string name, AccountID const& id);
|
||||
|
||||
enum AcctStringType { base58Seed, other };
|
||||
/** Create an account from a base58 seed string. Throws on invalid seed. */
|
||||
Account(AcctStringType stringType, std::string base58SeedStr);
|
||||
|
||||
@@ -86,6 +86,14 @@ Account::Account(AcctStringType stringType, std::string base58SeedStr)
|
||||
{
|
||||
}
|
||||
|
||||
Account::Account(std::string name, AccountID const& id)
|
||||
: Account(name, randomKeyPair(KeyType::secp256k1), privateCtorTag{})
|
||||
{
|
||||
// override the randomly generated values
|
||||
id_ = id;
|
||||
human_ = toBase58(id_);
|
||||
}
|
||||
|
||||
IOU
|
||||
Account::operator[](std::string const& s) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user