mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-04 09:16:47 +00:00
add MaxFee test
This commit is contained in:
@@ -118,24 +118,25 @@ public:
|
||||
env(sponsor::set(sponsor, sponsor, 0), ter(temMALFORMED));
|
||||
|
||||
// Invalid feeAmount
|
||||
env(sponsor::set(
|
||||
sponsor, alice, tfSponsorshipClearRequireSignForFee, 0, XRP(1)),
|
||||
env(sponsor::set_fee(
|
||||
sponsor, alice, tfSponsorshipClearRequireSignForFee, XRP(1)),
|
||||
ter(temMALFORMED));
|
||||
|
||||
for (auto amt : {XRP(-1), XRP(0), USD(1)})
|
||||
{
|
||||
env(sponsor::set(sponsor, alice, 0, 1, amt), ter(temBAD_AMOUNT));
|
||||
env(sponsor::set_fee(sponsor, alice, 0, amt), ter(temBAD_AMOUNT));
|
||||
}
|
||||
|
||||
// Invalid reserveCount
|
||||
env(sponsor::set(
|
||||
env(sponsor::set_reserve(
|
||||
sponsor, alice, tfSponsorshipClearRequireSignForReserve, 1),
|
||||
ter(temMALFORMED));
|
||||
env(sponsor::set(sponsor, alice, 0, 0), ter(temMALFORMED));
|
||||
env(sponsor::set_reserve(sponsor, alice, 0, 0), ter(temMALFORMED));
|
||||
|
||||
// Invalid Delete operation
|
||||
env(sponsor::set(sponsor, alice, tfDeleteObject, 1), ter(temMALFORMED));
|
||||
env(sponsor::set(sponsor, alice, tfDeleteObject, std::nullopt, XRP(1)),
|
||||
env(sponsor::set_reserve(sponsor, alice, tfDeleteObject, 1),
|
||||
ter(temMALFORMED));
|
||||
env(sponsor::set_fee(sponsor, alice, tfDeleteObject, XRP(1)),
|
||||
ter(temMALFORMED));
|
||||
// TODO: test MaxFee with tfDeleteObject
|
||||
|
||||
@@ -590,7 +591,7 @@ public:
|
||||
BEAST_EXPECT(env.balance(sponsor) == sponsorBalance);
|
||||
}
|
||||
|
||||
env(sponsor::set(sponsor, alice, 0, std::nullopt, XRP(100)));
|
||||
env(sponsor::set_fee(sponsor, alice, 0, XRP(100)));
|
||||
env.close();
|
||||
|
||||
{
|
||||
@@ -616,21 +617,51 @@ public:
|
||||
|
||||
{
|
||||
// insufficient balance to pay fee
|
||||
auto aliceBalance = env.balance(alice);
|
||||
auto bobBalance = env.balance(bob);
|
||||
auto sponsorBalance = env.balance(sponsor);
|
||||
auto sponsorFee = sponsorFeeBalance(sponsor, alice);
|
||||
{
|
||||
// > FeeAmount
|
||||
auto aliceBalance = env.balance(alice);
|
||||
auto bobBalance = env.balance(bob);
|
||||
auto sponsorBalance = env.balance(sponsor);
|
||||
auto sponsorFee = sponsorFeeBalance(sponsor, alice);
|
||||
|
||||
env(pay(alice, bob, XRP(100)),
|
||||
fee(XRP(2000)),
|
||||
sponsor::as(sponsor, tfSponsorFee),
|
||||
ter(terINSUF_FEE_B));
|
||||
env(pay(alice, bob, XRP(100)),
|
||||
fee(XRP(100) + drops(1)),
|
||||
sponsor::as(sponsor, tfSponsorFee),
|
||||
ter(terINSUF_FEE_B));
|
||||
env.close();
|
||||
|
||||
BEAST_EXPECT(env.balance(alice) == aliceBalance);
|
||||
BEAST_EXPECT(env.balance(bob) == bobBalance);
|
||||
BEAST_EXPECT(env.balance(sponsor) == sponsorBalance);
|
||||
BEAST_EXPECT(
|
||||
sponsorFeeBalance(sponsor, alice) == sponsorFee);
|
||||
}
|
||||
|
||||
// reset FeeAmount and MaxFee
|
||||
env(sponsor::del(sponsor, alice));
|
||||
env.close();
|
||||
env(sponsor::set_fee(sponsor, alice, 0, XRP(10), XRP(1)));
|
||||
env.close();
|
||||
|
||||
BEAST_EXPECT(env.balance(alice) == aliceBalance);
|
||||
BEAST_EXPECT(env.balance(bob) == bobBalance);
|
||||
BEAST_EXPECT(env.balance(sponsor) == sponsorBalance);
|
||||
BEAST_EXPECT(sponsorFeeBalance(sponsor, alice) == sponsorFee);
|
||||
{
|
||||
// > MaxFee
|
||||
auto aliceBalance = env.balance(alice);
|
||||
auto bobBalance = env.balance(bob);
|
||||
auto sponsorBalance = env.balance(sponsor);
|
||||
auto sponsorFee = sponsorFeeBalance(sponsor, alice);
|
||||
|
||||
env(pay(alice, bob, XRP(100)),
|
||||
fee(XRP(1) + drops(1)),
|
||||
sponsor::as(sponsor, tfSponsorFee),
|
||||
ter(terINSUF_FEE_B));
|
||||
env.close();
|
||||
|
||||
BEAST_EXPECT(env.balance(alice) == aliceBalance);
|
||||
BEAST_EXPECT(env.balance(bob) == bobBalance);
|
||||
BEAST_EXPECT(env.balance(sponsor) == sponsorBalance);
|
||||
BEAST_EXPECT(
|
||||
sponsorFeeBalance(sponsor, alice) == sponsorFee);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
@@ -640,7 +671,7 @@ public:
|
||||
auto bobBalance = env.balance(bob);
|
||||
auto sponsorBalance = env.balance(sponsor);
|
||||
auto sponsorFee = sponsorFeeBalance(sponsor, alice);
|
||||
auto const feeAmt = XRP(10);
|
||||
auto const feeAmt = XRP(1);
|
||||
|
||||
env(pay(alice, bob, XRP(20000)),
|
||||
fee(feeAmt),
|
||||
|
||||
@@ -36,7 +36,8 @@ set(jtx::Account const& account,
|
||||
jtx::Account const& sponsee,
|
||||
uint32_t flags,
|
||||
std::optional<uint32_t> reserveCount,
|
||||
std::optional<STAmount> feeAmount)
|
||||
std::optional<STAmount> feeAmount,
|
||||
std::optional<STAmount> maxFee)
|
||||
{
|
||||
Json::Value jv;
|
||||
jv[jss::TransactionType] = jss::SponsorshipSet;
|
||||
@@ -47,6 +48,43 @@ set(jtx::Account const& account,
|
||||
jv[sfReserveCount.jsonName] = *reserveCount;
|
||||
if (feeAmount)
|
||||
jv[sfFeeAmount.jsonName] = feeAmount->getJson(JsonOptions::none);
|
||||
if (maxFee)
|
||||
jv[sfMaxFee.jsonName] = maxFee->getJson(JsonOptions::none);
|
||||
return jv;
|
||||
}
|
||||
|
||||
Json::Value
|
||||
set_fee(
|
||||
jtx::Account const& account,
|
||||
jtx::Account const& sponsee,
|
||||
uint32_t flags,
|
||||
STAmount feeAmount,
|
||||
std::optional<STAmount> maxFee)
|
||||
{
|
||||
Json::Value jv;
|
||||
jv[jss::TransactionType] = jss::SponsorshipSet;
|
||||
jv[jss::Account] = account.human();
|
||||
jv[sfSponsee.jsonName] = sponsee.human();
|
||||
jv[sfFlags.jsonName] = flags;
|
||||
jv[sfFeeAmount.jsonName] = feeAmount.getJson(JsonOptions::none);
|
||||
if (maxFee)
|
||||
jv[sfMaxFee.jsonName] = maxFee->getJson(JsonOptions::none);
|
||||
return jv;
|
||||
}
|
||||
|
||||
Json::Value
|
||||
set_reserve(
|
||||
jtx::Account const& account,
|
||||
jtx::Account const& sponsee,
|
||||
uint32_t flags,
|
||||
uint32_t reserveCount)
|
||||
{
|
||||
Json::Value jv;
|
||||
jv[jss::TransactionType] = jss::SponsorshipSet;
|
||||
jv[jss::Account] = account.human();
|
||||
jv[sfSponsee.jsonName] = sponsee.human();
|
||||
jv[sfFlags.jsonName] = flags;
|
||||
jv[sfReserveCount.jsonName] = reserveCount;
|
||||
return jv;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,23 @@ set(jtx::Account const& account,
|
||||
jtx::Account const& sponsee,
|
||||
std::uint32_t flags,
|
||||
std::optional<std::uint32_t> reserveCount = std::nullopt,
|
||||
std::optional<STAmount> feeAmount = std::nullopt);
|
||||
std::optional<STAmount> feeAmount = std::nullopt,
|
||||
std::optional<STAmount> maxFee = std::nullopt);
|
||||
|
||||
Json::Value
|
||||
set_fee(
|
||||
jtx::Account const& account,
|
||||
jtx::Account const& sponsee,
|
||||
std::uint32_t flags,
|
||||
STAmount feeAmount,
|
||||
std::optional<STAmount> maxFee = std::nullopt);
|
||||
|
||||
Json::Value
|
||||
set_reserve(
|
||||
jtx::Account const& account,
|
||||
jtx::Account const& sponsee,
|
||||
std::uint32_t flags,
|
||||
std::uint32_t reserveCount);
|
||||
|
||||
Json::Value
|
||||
del(jtx::Account const& account, jtx::Account const& sponsee);
|
||||
|
||||
Reference in New Issue
Block a user