mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-03 08:46:46 +00:00
Merge branch 'develop' into gregtatcam/mpt/audit-attackathon-fixes
This commit is contained in:
@@ -128,7 +128,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTRequireAuth | kMPT_DEX_FLAGS,
|
||||
.flags = tfMPTRequireAuth | kMptDexFlags,
|
||||
.authHolder = true});
|
||||
AMM const ammAlice(env, alice_, USD(10'000), btc(10'000));
|
||||
}
|
||||
@@ -142,7 +142,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
usd.set({.flags = tfMPTLock});
|
||||
AMM const ammAliceFail(env, alice_, XRP(10'000), usd(10'000), Ter(tecFROZEN));
|
||||
usd.set({.flags = tfMPTUnlock});
|
||||
@@ -346,7 +346,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
btc.set({.flags = tfMPTLock});
|
||||
AMM const ammAlice(env, alice_, USD(10'000), btc(10'000), Ter(tecFROZEN));
|
||||
BEAST_EXPECT(!ammAlice.ammExists());
|
||||
@@ -361,7 +361,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
btc.set({.holder = alice_, .flags = tfMPTLock});
|
||||
|
||||
// alice's token is locked
|
||||
@@ -496,7 +496,7 @@ private:
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS,
|
||||
.flags = tfMPTCanLock | kMptDexFlags,
|
||||
.authHolder = true});
|
||||
|
||||
// Depositing mismatched token, invalid Asset1In.issue
|
||||
@@ -687,7 +687,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM ammAlice(env, alice_, USD(10'000), btc(10'000));
|
||||
btc.set({.flags = tfMPTLock});
|
||||
@@ -713,7 +713,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM ammAlice(env, alice_, USD(10'000), btc(10'000));
|
||||
|
||||
@@ -799,13 +799,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
MPTTester usd(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 40'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM ammAlice(env, alice_, usd(10'000), btc(10'000));
|
||||
|
||||
@@ -871,7 +871,7 @@ private:
|
||||
{.maxAmt = 1'000'000,
|
||||
.authorize = {{alice}},
|
||||
.pay = {{{alice}, 10'000}},
|
||||
.flags = tfMPTRequireAuth | kMPT_DEX_FLAGS,
|
||||
.flags = tfMPTRequireAuth | kMptDexFlags,
|
||||
.authHolder = true});
|
||||
|
||||
AMM amm(env, alice, XRP(10'000), btc(10'000));
|
||||
@@ -2036,7 +2036,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTRequireAuth | kMPT_DEX_FLAGS,
|
||||
.flags = tfMPTRequireAuth | kMptDexFlags,
|
||||
.authHolder = true});
|
||||
AMM ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
WithdrawArg const args{
|
||||
@@ -2054,7 +2054,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 2'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
// Invalid tokens
|
||||
ammAlice.withdraw(alice_, 0, std::nullopt, std::nullopt, Ter(temBAD_AMM_TOKENS));
|
||||
@@ -2225,7 +2225,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTRequireAuth | kMPT_DEX_FLAGS,
|
||||
.flags = tfMPTRequireAuth | kMptDexFlags,
|
||||
.authHolder = true});
|
||||
MPT const btc = btcm;
|
||||
|
||||
@@ -2276,7 +2276,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS,
|
||||
.flags = tfMPTCanLock | kMptDexFlags,
|
||||
.authHolder = true});
|
||||
|
||||
AMM ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
@@ -2300,13 +2300,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
MPTTester const usd(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 40'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM ammAlice(env, alice_, usd(10'000), btc(10'000));
|
||||
|
||||
@@ -2334,7 +2334,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM ammAlice(env, alice_, USD(10'000), btc(10'000));
|
||||
|
||||
@@ -3477,7 +3477,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 2'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM amm(env, gw_, XRP(1'000), btc(1'000), false, 1'000);
|
||||
|
||||
// auction slot is owned by the creator of the AMM i.e. gw
|
||||
@@ -3502,7 +3502,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 2'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM amm(env, gw_, XRP(1'000), btc(1'000), false, 1'000);
|
||||
|
||||
// auction slot is owned by the creator of the AMM i.e. gw
|
||||
@@ -3610,7 +3610,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_, bob_},
|
||||
.pay = 30'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
AMM ammAlice(env, alice_, btc(10'000'000'000), USD(10'000));
|
||||
ammAlice.deposit(carol_, 1'000'000);
|
||||
@@ -3646,7 +3646,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_},
|
||||
.pay = 1'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM amm(env, gw_, XRP(10), btc(1'000));
|
||||
auto const lpIssue = amm.lptIssue();
|
||||
env.trust(STAmount{lpIssue, 100}, alice_);
|
||||
@@ -3711,7 +3711,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_, bob_},
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
|
||||
ammAlice.deposit(carol_, 1'000'000);
|
||||
@@ -3756,7 +3756,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_, bob_},
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
|
||||
ammAlice.deposit(carol_, 1'000'000);
|
||||
@@ -3770,18 +3770,17 @@ private:
|
||||
|
||||
// 1st Interval after close, price for 0th interval.
|
||||
env(ammAlice.bid({.account = bob_}));
|
||||
env.close(seconds(kAUCTION_SLOT_INTERVAL_DURATION + 1));
|
||||
env.close(seconds(kAuctionSlotIntervalDuration + 1));
|
||||
BEAST_EXPECT(ammAlice.expectAuctionSlot(0, 1, IOUAmount{1'155, -1}));
|
||||
|
||||
// 10th Interval after close, price for 1st interval.
|
||||
env(ammAlice.bid({.account = carol_}));
|
||||
env.close(seconds((10 * kAUCTION_SLOT_INTERVAL_DURATION) + 1));
|
||||
env.close(seconds((10 * kAuctionSlotIntervalDuration) + 1));
|
||||
BEAST_EXPECT(ammAlice.expectAuctionSlot(0, 10, IOUAmount{121'275, -3}));
|
||||
|
||||
// 20th Interval (expired) after close, price for 10th interval.
|
||||
env(ammAlice.bid({.account = bob_}));
|
||||
env.close(
|
||||
seconds((kAUCTION_SLOT_TIME_INTERVALS * kAUCTION_SLOT_INTERVAL_DURATION) + 1));
|
||||
env.close(seconds((kAuctionSlotTimeIntervals * kAuctionSlotIntervalDuration) + 1));
|
||||
BEAST_EXPECT(ammAlice.expectAuctionSlot(0, std::nullopt, IOUAmount{127'33875, -5}));
|
||||
|
||||
// 0 Interval.
|
||||
@@ -3884,7 +3883,7 @@ private:
|
||||
btc(13'000'000'671), STAmount{USD, UINT64_C(13'114'03663044931), -11}, ammTokens));
|
||||
|
||||
// Auction slot expired, no discounted fee
|
||||
env.close(seconds(kTOTAL_TIME_SLOT_SECS + 1));
|
||||
env.close(seconds(kTotalTimeSlotSecs + 1));
|
||||
// clock is parent's based
|
||||
env.close();
|
||||
|
||||
@@ -3917,7 +3916,7 @@ private:
|
||||
testAMM(
|
||||
[&](AMM& ammAlice, Env& env) {
|
||||
// Bid a tiny amount
|
||||
auto const tiny = Number{STAmount::kMIN_VALUE, STAmount::kMIN_OFFSET};
|
||||
auto const tiny = Number{STAmount::kMinValue, STAmount::kMinOffset};
|
||||
env(ammAlice.bid({.account = alice_, .bidMin = IOUAmount{tiny}}));
|
||||
// Auction slot purchase price is equal to the tiny amount
|
||||
// since the minSlotPrice is 0 with no trading fee.
|
||||
@@ -3928,7 +3927,7 @@ private:
|
||||
// Bid the tiny amount
|
||||
env(ammAlice.bid({
|
||||
.account = alice_,
|
||||
.bidMin = IOUAmount{STAmount::kMIN_VALUE, STAmount::kMIN_OFFSET},
|
||||
.bidMin = IOUAmount{STAmount::kMinValue, STAmount::kMinOffset},
|
||||
}));
|
||||
// Pay slightly higher price
|
||||
BEAST_EXPECT(ammAlice.expectAuctionSlot(0, 0, IOUAmount{tiny * Number{105, -2}}));
|
||||
@@ -3971,7 +3970,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_},
|
||||
.pay = 2'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
fund(env, gw_, {alice_, bob_}, {USD(2'000)}, Fund::TokenOnly);
|
||||
AMM amm(env, gw_, btc(1'000'000'000), USD(1'010), false, 1'000);
|
||||
auto const lpIssue = amm.lptIssue();
|
||||
@@ -4007,7 +4006,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_},
|
||||
.pay = 2'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM amm(env, gw_, XRP(1'000), btc(1'010), false, 1'000);
|
||||
json::Value const tx = amm.bid({.account = alice_, .bidMin = 500});
|
||||
|
||||
@@ -4068,7 +4067,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
// to clawback from AMM account, must use AMMClawback instead of
|
||||
// Clawback
|
||||
@@ -4103,7 +4102,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 100,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
// XRP balance is below reserve
|
||||
AMM const ammAlice(env, acct, XRP(10), btc(10));
|
||||
// Pay below reserve
|
||||
@@ -4122,7 +4121,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 20'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
// XRP balance is above reserve
|
||||
AMM const ammAlice(env, acct, XRP(1'000'000), btc(10'000));
|
||||
// Pay below reserve
|
||||
@@ -4138,16 +4137,16 @@ private:
|
||||
testAMM(
|
||||
[&](AMM& ammAlice, Env& env) {
|
||||
env(escrow::create(carol_, ammAlice.ammAccount(), MPT(ammAlice[1])(1)),
|
||||
escrow::kCONDITION(escrow::kCB1),
|
||||
escrow::kFINISH_TIME(env.now() + 1s),
|
||||
escrow::kCANCEL_TIME(env.now() + 2s),
|
||||
escrow::kCondition(escrow::kCb1),
|
||||
escrow::kFinishTime(env.now() + 1s),
|
||||
escrow::kCancelTime(env.now() + 2s),
|
||||
Fee(1'500),
|
||||
Ter(tecNO_PERMISSION));
|
||||
|
||||
env(escrow::create(carol_, ammAlice.ammAccount(), XRP(1)),
|
||||
escrow::kCONDITION(escrow::kCB1),
|
||||
escrow::kFINISH_TIME(env.now() + 1s),
|
||||
escrow::kCANCEL_TIME(env.now() + 2s),
|
||||
escrow::kCondition(escrow::kCb1),
|
||||
escrow::kFinishTime(env.now() + 1s),
|
||||
escrow::kCancelTime(env.now() + 2s),
|
||||
Fee(1'500),
|
||||
Ter(tecNO_PERMISSION));
|
||||
},
|
||||
@@ -4232,7 +4231,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
btc.set({.flags = tfMPTLock});
|
||||
@@ -4258,7 +4257,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
btc.set({.holder = carol_, .flags = tfMPTLock});
|
||||
@@ -4279,7 +4278,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
btc.set({.holder = alice_, .flags = tfMPTLock});
|
||||
@@ -4300,13 +4299,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
MPTTester eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM const ammAlice(env, alice_, eth(10'000), btc(10'000));
|
||||
btc.set({.holder = carol_, .flags = tfMPTLock});
|
||||
@@ -4336,7 +4335,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
btc.set({.holder = ammAlice.ammAccount(), .flags = tfMPTLock});
|
||||
@@ -4635,7 +4634,7 @@ private:
|
||||
.holders = {alice_, carol_},
|
||||
.transferFee = 10'000,
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
auto ammAlice = AMM(env, alice_, XRP(10'000), btc(10'010'000'000'000'000));
|
||||
env.close();
|
||||
auto carolMPT = env.balance(carol_, MPT(btc));
|
||||
@@ -4763,13 +4762,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 3'000'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 3'000'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
env.fund(XRP(1'000), bob_);
|
||||
env.close();
|
||||
auto ammEthXrp = AMM(env, alice_, XRP(10'000), eth(1'000'000'000'000'000'000));
|
||||
@@ -4813,13 +4812,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 3'000'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 1'000'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
auto ammAlice = AMM(env, alice_, XRP(10'000), btc(1'000'000'000'000'000'000));
|
||||
env.fund(XRP(1'000), bob_);
|
||||
env.close();
|
||||
@@ -4861,7 +4860,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM ammAlice(env, alice_, XRP(10'000), btc(10'100'000'000'000'000));
|
||||
env(offer(bob_, XRP(100), MPT(ammAlice[1])(100'000'000'000'000)), Txflags(tfPassive));
|
||||
env.close();
|
||||
@@ -4896,7 +4895,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 2'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
env(offer(bob_, XRP(50), btc(150)), Txflags(tfPassive));
|
||||
env.close();
|
||||
AMM const ammAlice(env, alice_, XRP(1'000), btc(1'050));
|
||||
@@ -4915,7 +4914,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM ammAlice(env, alice_, XRP(10'000), btc(10'100));
|
||||
env(offer(bob_, MPT(ammAlice[1])(100), XRP(100)));
|
||||
env.close();
|
||||
@@ -4941,14 +4940,14 @@ private:
|
||||
.holders = {alice_, carol_},
|
||||
.transferFee = 25'000,
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.transferFee = 25'000,
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, btc(1'000'000'000'000'000), eth(1'100'000'000'000'000));
|
||||
// This offer succeeds to cross pre- and post-amendment
|
||||
// because the strand's out amount is small enough to match
|
||||
@@ -4977,7 +4976,7 @@ private:
|
||||
.holders = {alice_, carol_},
|
||||
.transferFee = 100,
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const amm(env, alice_, XRP(1'000), btc(500'000'000'000'000));
|
||||
env(offer(carol_, XRP(100), btc(55'000'000'000'000)));
|
||||
env.close();
|
||||
@@ -5000,7 +4999,7 @@ private:
|
||||
.holders = {alice_, carol_},
|
||||
.transferFee = 100,
|
||||
.pay = 3'000'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const amm(env, alice_, XRP(1'000), btc(50'000'000'000'000'000));
|
||||
env(offer(carol_, XRP(10), btc(5'500'000'000'000'000)));
|
||||
env.close();
|
||||
@@ -5020,14 +5019,14 @@ private:
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.transferFee = 25'000,
|
||||
.pay = 20'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.transferFee = 25'000,
|
||||
.pay = 20'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const ammAlice(
|
||||
env, alice_, btc(10'000'000'000'000'000), eth(11'000'000'000'000'000));
|
||||
|
||||
@@ -5067,14 +5066,14 @@ private:
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.transferFee = 25'000,
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.transferFee = 25'000,
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, btc(1'000), eth(1'100));
|
||||
env(rate(gw_, 1.25));
|
||||
env.close();
|
||||
@@ -5110,28 +5109,28 @@ private:
|
||||
.holders = {alice_, bob_, carol_, dan, ed},
|
||||
.transferFee = 25'000,
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, dan, ed},
|
||||
.transferFee = 25'000,
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const can(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, dan, ed},
|
||||
.transferFee = 25'000,
|
||||
.pay = 2'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const gbp(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, dan, ed},
|
||||
.transferFee = 25'000,
|
||||
.pay = 3'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, gbp(1'000'000), eth(10'125));
|
||||
env(pay(gw_, bob_, can(1'953'125)));
|
||||
env.close();
|
||||
@@ -5190,25 +5189,25 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 500'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 500'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const usd(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 500'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eur(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 500'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const xrpEur(env, alice_, XRP(10'100), eur(100'000'000'000'000'000));
|
||||
AMM const eurBtc(
|
||||
env, alice_, eur(100'000'000'000'000'000), btc(102'000'000'000'000'000));
|
||||
@@ -5263,25 +5262,25 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 50'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 50'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const usd(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 50'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eur(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 50'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const xrpEur(env, alice_, XRP(10'100), eur(10'000'000'000'000'000));
|
||||
AMM const eurBtc(env, alice_, eur(10'000'000'000'000'000), btc(10'200'000'000'000'000));
|
||||
AMM const btcUsd(env, alice_, btc(10'100'000'000'000'000), usd(10'000'000'000'000'000));
|
||||
@@ -5316,13 +5315,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 400'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000'000'000'000'000));
|
||||
|
||||
for (int i = 0; i < 30; ++i)
|
||||
@@ -5352,13 +5351,13 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester const eth(
|
||||
{.env = env,
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 400'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000'000'000'000'000));
|
||||
|
||||
for (int i = 0; i < 29; ++i)
|
||||
@@ -5389,7 +5388,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 30'000'000'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(bob_, XRP(100), btc(100'001'000'000'000)));
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'100'000'000'000'000));
|
||||
@@ -5412,7 +5411,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
|
||||
btc.set({.holder = carol_, .flags = tfMPTLock});
|
||||
@@ -5433,7 +5432,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
AMM const ammAlice(env, alice_, XRP(10'000), btc(10'000));
|
||||
|
||||
btc.set({.holder = alice_, .flags = tfMPTLock});
|
||||
@@ -5604,7 +5603,7 @@ private:
|
||||
env.fund(XRP(10'000), lP1);
|
||||
env.fund(XRP(10'000), lP2);
|
||||
MPTTester const tst(
|
||||
{.env = env, .issuer = gw, .holders = {lP1, lP2}, .flags = kMPT_DEX_FLAGS});
|
||||
{.env = env, .issuer = gw, .holders = {lP1, lP2}, .flags = kMptDexFlags});
|
||||
|
||||
env(offer(gw, XRP(11'500'000'000), tst(1'000'000'000'000'000)));
|
||||
|
||||
@@ -5901,7 +5900,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_},
|
||||
.pay = 30'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
auto const usd = gw_["USD"];
|
||||
env.trust(usd(30'000), alice_);
|
||||
@@ -6024,7 +6023,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.pay = 30'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(carol_, btc(5'000000), USD(5)));
|
||||
AMM const ammAlice(env, alice_, USD(1'005), btc(1'000'000000));
|
||||
@@ -6053,7 +6052,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.pay = 30'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(carol_, btc(5'000000), USD(5)));
|
||||
// Set 0.25% fee
|
||||
@@ -6080,7 +6079,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.pay = 30'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(carol_, btc(10'000000), USD(10)));
|
||||
// Set 1% fee
|
||||
@@ -6108,7 +6107,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.pay = 30'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(carol_, btc(9'000000), USD(9)));
|
||||
// Set 1% fee
|
||||
@@ -6154,7 +6153,7 @@ private:
|
||||
.issuer = gw,
|
||||
.holders = holders,
|
||||
.pay = 40'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
auto const usd = gw["USD"];
|
||||
for (auto const& holder : holders)
|
||||
@@ -6245,7 +6244,7 @@ private:
|
||||
.issuer = gw,
|
||||
.holders = holders,
|
||||
.pay = 40'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
auto const usd = gw["USD"];
|
||||
for (auto const& holder : holders)
|
||||
@@ -6394,21 +6393,21 @@ private:
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.transferFee = gwTransferFee,
|
||||
.pay = 2'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester eth(
|
||||
{.env = env,
|
||||
.issuer = gw1,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.transferFee = gw1TransferFee,
|
||||
.pay = 2'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
MPTTester can(
|
||||
{.env = env,
|
||||
.issuer = gw1,
|
||||
.holders = {alice_, bob_, carol_, ed},
|
||||
.transferFee = gw1TransferFee,
|
||||
.pay = 2'000'000'000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
env.close();
|
||||
|
||||
return MPTList{
|
||||
@@ -6418,10 +6417,10 @@ private:
|
||||
};
|
||||
};
|
||||
|
||||
std::uint32_t constexpr kLOW_RATE = 10'000;
|
||||
std::uint32_t constexpr kHIGH_RATE = 50'000;
|
||||
static constexpr std::uint32_t kLowRate = 10'000;
|
||||
static constexpr std::uint32_t kHighRate = 50'000;
|
||||
for (auto const& rates :
|
||||
{std::make_pair(kLOW_RATE, kHIGH_RATE), std::make_pair(kHIGH_RATE, kLOW_RATE)})
|
||||
{std::make_pair(kLowRate, kHighRate), std::make_pair(kHighRate, kLowRate)})
|
||||
{
|
||||
// Offer Selection
|
||||
|
||||
@@ -6555,7 +6554,7 @@ private:
|
||||
|
||||
if (i == 2)
|
||||
{
|
||||
if (rates.first == kLOW_RATE)
|
||||
if (rates.first == kLowRate)
|
||||
{
|
||||
BEAST_EXPECT(expectOffers(
|
||||
env,
|
||||
@@ -6620,7 +6619,7 @@ private:
|
||||
// limitQuality
|
||||
if (i == 2)
|
||||
{
|
||||
if (rates.first == kLOW_RATE)
|
||||
if (rates.first == kLowRate)
|
||||
{
|
||||
// Ed offer is partially crossed.
|
||||
// The updated rounding makes limitQuality
|
||||
@@ -6699,7 +6698,7 @@ private:
|
||||
{
|
||||
// NOLINTBEGIN(bugprone-unchecked-optional-access) i==2 implies amm is
|
||||
// emplaced (i>0)
|
||||
if (rates.first == kLOW_RATE)
|
||||
if (rates.first == kLowRate)
|
||||
{
|
||||
// Liquidity is consumed from AMM strand only
|
||||
BEAST_EXPECT(amm->expectBalances(
|
||||
@@ -6789,7 +6788,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 2'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
WithdrawArg const args{
|
||||
.asset1Out = XRP(100),
|
||||
.asset2Out = btc(100),
|
||||
@@ -6812,7 +6811,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 2'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
btc(100).value().setJson(jv[jss::EPrice]);
|
||||
env(jv, Ter(telENV_RPC_FAILED));
|
||||
},
|
||||
@@ -6837,7 +6836,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 40'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(alice_, btc(1), USD(0.01)));
|
||||
env.close();
|
||||
@@ -6871,7 +6870,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_, carol_},
|
||||
.pay = 40'000'000000,
|
||||
.flags = kMPT_DEX_FLAGS});
|
||||
.flags = kMptDexFlags});
|
||||
|
||||
env(offer(alice_, btc(1), XRP(0.01)));
|
||||
env.close();
|
||||
@@ -6921,7 +6920,7 @@ private:
|
||||
.issuer = gw,
|
||||
.holders = {alice, bob},
|
||||
.pay = 40'000'000000,
|
||||
.flags = tfMPTCanClawback | tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanClawback | tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM amm(env, alice, btc(2), usd(1));
|
||||
amm.deposit(alice, IOUAmount{1'876123487565916, -15});
|
||||
@@ -6960,7 +6959,7 @@ private:
|
||||
.issuer = gw_,
|
||||
.holders = {alice_},
|
||||
.pay = 30'000,
|
||||
.flags = tfMPTCanLock | kMPT_DEX_FLAGS});
|
||||
.flags = tfMPTCanLock | kMptDexFlags});
|
||||
|
||||
AMM amm(env, alice_, btc(100), XRP(100));
|
||||
env.close();
|
||||
@@ -7019,7 +7018,7 @@ private:
|
||||
MPTTester const usd({.env = env, .issuer = gw_, .holders = {alice_}, .pay = 20'000});
|
||||
MPTTester const btc({.env = env, .issuer = gw_, .holders = {alice_}, .pay = 20'000});
|
||||
AMM amm(env, gw_, usd(10'000), btc(10'000));
|
||||
for (auto i = 0; i < kMAX_DELETABLE_AMM_TRUST_LINES + 10; ++i)
|
||||
for (auto i = 0; i < kMaxDeletableAmmTrustLines + 10; ++i)
|
||||
{
|
||||
Account const a{std::to_string(i)};
|
||||
env.fund(XRP(1'000), a);
|
||||
@@ -7073,7 +7072,7 @@ private:
|
||||
MPTTester const usd({.env = env, .issuer = gw_, .holders = {alice_}, .pay = 20'000});
|
||||
MPTTester const btc({.env = env, .issuer = gw_, .holders = {alice_}, .pay = 20'000});
|
||||
AMM amm(env, gw_, usd(10'000), btc(10'000));
|
||||
for (auto i = 0; i < (kMAX_DELETABLE_AMM_TRUST_LINES * 2) + 10; ++i)
|
||||
for (auto i = 0; i < (kMaxDeletableAmmTrustLines * 2) + 10; ++i)
|
||||
{
|
||||
Account const a{std::to_string(i)};
|
||||
env.fund(XRP(1'000), a);
|
||||
@@ -7119,7 +7118,7 @@ private:
|
||||
}
|
||||
|
||||
// This test validates both invariant changes work together for
|
||||
// the specific case of MPT/MPT pools with > maxDeletableAMMTrustLines.
|
||||
// the specific case of MPT/MPT pools with > kMaxDeletableAmmTrustLines.
|
||||
{
|
||||
Env env(
|
||||
*this,
|
||||
@@ -7137,7 +7136,7 @@ private:
|
||||
|
||||
// MPT/MPT pool with MANY trustlines
|
||||
AMM amm(env, gw_, usd(10'000), btc(10'000));
|
||||
for (auto i = 0; i < (kMAX_DELETABLE_AMM_TRUST_LINES * 2) + 10; ++i)
|
||||
for (auto i = 0; i < (kMaxDeletableAmmTrustLines * 2) + 10; ++i)
|
||||
{
|
||||
Account const a{std::to_string(i)};
|
||||
env.fund(XRP(1'000), a);
|
||||
|
||||
Reference in New Issue
Block a user