Skip to content

Commit

Permalink
[FOLD] Address reviewers feedback.
Browse files Browse the repository at this point in the history
  • Loading branch information
gregtatcam committed Oct 18, 2023
1 parent a98ebed commit c7c6e96
Show file tree
Hide file tree
Showing 15 changed files with 44 additions and 53 deletions.
2 changes: 1 addition & 1 deletion src/ripple/app/paths/Flow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ flow(
bool defaultPaths,
bool partialPayment,
bool ownerPaysTransferFee,
bool offerCrossing,
OfferCrossing offerCrossing,
std::optional<Quality> const& limitQuality,
std::optional<STAmount> const& sendMax,
beast::Journal j,
Expand Down
4 changes: 2 additions & 2 deletions src/ripple/app/paths/Flow.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ struct FlowDebugInfo;
@param partialPayment If the payment cannot deliver the entire
requested amount, deliver as much as possible, given the constraints
@param ownerPaysTransferFee If true then owner, not sender, pays fee
@param offerCrossing If true then flow is executing offer crossing, not
@param offerCrossing If Yes or Sell then flow is executing offer crossing, not
payments
@param limitQuality Do not use liquidity below this quality threshold
@param sendMax Do not spend more than this amount
Expand All @@ -62,7 +62,7 @@ flow(
bool defaultPaths,
bool partialPayment,
bool ownerPaysTransferFee,
bool offerCrossing,
OfferCrossing offerCrossing,
std::optional<Quality> const& limitQuality,
std::optional<STAmount> const& sendMax,
beast::Journal j,
Expand Down
2 changes: 1 addition & 1 deletion src/ripple/app/paths/RippleCalc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ RippleCalc::rippleCalculate(
defaultPaths,
partialPayment,
ownerPaysTransferFee,
/* offerCrossing */ false,
OfferCrossing::No,
limitQuality,
sendMax,
j,
Expand Down
6 changes: 3 additions & 3 deletions src/ripple/app/paths/impl/PaySteps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ toStrand(
std::optional<Issue> const& sendMaxIssue,
STPath const& path,
bool ownerPaysTransferFee,
bool offerCrossing,
OfferCrossing offerCrossing,
AMMContext& ammContext,
beast::Journal j)
{
Expand Down Expand Up @@ -475,7 +475,7 @@ toStrands(
STPathSet const& paths,
bool addDefaultPath,
bool ownerPaysTransferFee,
bool offerCrossing,
OfferCrossing offerCrossing,
AMMContext& ammContext,
beast::Journal j)
{
Expand Down Expand Up @@ -588,7 +588,7 @@ StrandContext::StrandContext(
std::optional<Quality> const& limitQuality_,
bool isLast_,
bool ownerPaysTransferFee_,
bool offerCrossing_,
OfferCrossing offerCrossing_,
bool isDefaultPath_,
std::array<boost::container::flat_set<Issue>, 2>& seenDirectIssues_,
boost::container::flat_set<Issue>& seenBookOuts_,
Expand Down
14 changes: 8 additions & 6 deletions src/ripple/app/paths/impl/Steps.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class AMMContext;
enum class DebtDirection { issues, redeems };
enum class QualityDirection { in, out };
enum class StrandDirection { forward, reverse };
enum OfferCrossing { No = 0, Yes = 1, Sell = 2 };

inline bool
redeems(DebtDirection dir)
Expand Down Expand Up @@ -398,7 +399,7 @@ toStrand(
std::optional<Issue> const& sendMaxIssue,
STPath const& path,
bool ownerPaysTransferFee,
bool offerCrossing,
OfferCrossing offerCrossing,
AMMContext& ammContext,
beast::Journal j);

Expand Down Expand Up @@ -438,7 +439,7 @@ toStrands(
STPathSet const& paths,
bool addDefaultPath,
bool ownerPaysTransferFee,
bool offerCrossing,
OfferCrossing offerCrossing,
AMMContext& ammContext,
beast::Journal j);

Expand Down Expand Up @@ -531,9 +532,10 @@ struct StrandContext
bool const isFirst; ///< true if Step is first in Strand
bool const isLast = false; ///< true if Step is last in Strand
bool const ownerPaysTransferFee; ///< true if owner, not sender, pays fee
bool const offerCrossing; ///< true if offer crossing, not payment
bool const isDefaultPath; ///< true if Strand is default path
size_t const strandSize; ///< Length of Strand
OfferCrossing const
offerCrossing; ///< Yes/Sell if offer crossing, not payment
bool const isDefaultPath; ///< true if Strand is default path
size_t const strandSize; ///< Length of Strand
/** The previous step in the strand. Needed to check the no ripple
constraint
*/
Expand Down Expand Up @@ -563,7 +565,7 @@ struct StrandContext
std::optional<Quality> const& limitQuality_,
bool isLast_,
bool ownerPaysTransferFee_,
bool offerCrossing_,
OfferCrossing offerCrossing_,
bool isDefaultPath_,
std::array<boost::container::flat_set<Issue>, 2>&
seenDirectIssues_, ///< For detecting currency loops
Expand Down
27 changes: 7 additions & 20 deletions src/ripple/app/paths/impl/StrandFlow.h
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ flow(
std::vector<Strand> const& strands,
TOutAmt const& outReq,
bool partialPayment,
bool offerCrossing,
OfferCrossing offerCrossing,
std::optional<Quality> const& limitQuality,
std::optional<STAmount> const& sendMaxST,
beast::Journal j,
Expand Down Expand Up @@ -828,23 +828,7 @@ flow(
* even if it means obtaining more than TakerPays. Since the pays and gets
* are reversed, the owner must send the entire TakerGets.
*/
bool const fixFillOrKill =
baseView.rules().enabled(fixFillOrKillOnFlowCross);
// tfSell is handled by setting the deliver amount to max
auto const sell = [&]() -> bool {
if constexpr (std::is_same_v<TOutAmt, XRPAmount>)
{
static auto max = XRPAmount{STAmount::cMaxNative};
return outReq == max;
}
else if constexpr (std::is_same_v<TOutAmt, IOUAmount>)
{
static auto max =
IOUAmount{STAmount::cMaxValue / 2, STAmount::cMaxOffset};
return outReq == max;
}
return false;
}();
bool const fillOrKillEnabled = baseView.rules().enabled(fixFillOrKill);

if (actualOut != outReq)
{
Expand All @@ -862,7 +846,8 @@ flow(
// fixFillOrKill amendment:
// That case is handled here if tfSell is also not set; i.e,
// case 1.
if (!offerCrossing || (fixFillOrKill && !sell))
if (!offerCrossing ||
(fillOrKillEnabled && offerCrossing != OfferCrossing::Sell))
return {
tecPATH_PARTIAL,
actualIn,
Expand All @@ -874,7 +859,9 @@ flow(
return {tecPATH_DRY, std::move(ofrsToRmOnFail)};
}
}
if (offerCrossing && (!partialPayment && (!fixFillOrKill || sell)))
if (offerCrossing &&
(!partialPayment &&
(!fillOrKillEnabled || offerCrossing == OfferCrossing::Sell)))
{
// If we're offer crossing and partialPayment is *not* true, then
// we're handling a FillOrKill offer. In this case remainingIn must
Expand Down
2 changes: 1 addition & 1 deletion src/ripple/app/tx/impl/CashCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,7 @@ CashCheck::doApply()
true, // default path
static_cast<bool>(optDeliverMin), // partial payment
true, // owner pays transfer fee
false, // offer crossing
OfferCrossing::No,
std::nullopt,
sleCheck->getFieldAmount(sfSendMax),
viewJ);
Expand Down
4 changes: 3 additions & 1 deletion src/ripple/app/tx/impl/CreateOffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -736,8 +736,10 @@ CreateOffer::flowCross(
}
// Special handling for the tfSell flag.
STAmount deliver = takerAmount.out;
OfferCrossing offerCrossing = OfferCrossing::Yes;
if (txFlags & tfSell)
{
offerCrossing = OfferCrossing::Sell;
// We are selling, so we will accept *more* than the offer
// specified. Since we don't know how much they might offer,
// we allow delivery of the largest possible amount.
Expand All @@ -764,7 +766,7 @@ CreateOffer::flowCross(
true, // default path
!(txFlags & tfFillOrKill), // partial payment
true, // owner pays transfer fee
true, // offer crossing
offerCrossing,
threshold,
sendMax,
j_);
Expand Down
2 changes: 1 addition & 1 deletion src/ripple/protocol/Feature.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ extern uint256 const fixNonFungibleTokensV1_2;
extern uint256 const fixNFTokenRemint;
extern uint256 const fixReducedOffersV1;
extern uint256 const featureClawback;
extern uint256 const fixFillOrKillOnFlowCross;
extern uint256 const fixFillOrKill;

} // namespace ripple

Expand Down
2 changes: 1 addition & 1 deletion src/ripple/protocol/impl/Feature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ REGISTER_FIX (fixNFTokenRemint, Supported::yes, VoteBehavior::De
REGISTER_FIX (fixReducedOffersV1, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(Clawback, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(AMM, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX(fixFillOrKillOnFlowCross, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX(fixFillOrKill, Supported::yes, VoteBehavior::DefaultNo);

// The following amendments are obsolete, but must remain supported
// because they could potentially get enabled.
Expand Down
2 changes: 1 addition & 1 deletion src/test/app/AMMExtended_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2103,7 +2103,7 @@ struct AMMExtended_test : public jtx::AMMTest
false,
false,
true,
false,
OfferCrossing::No,
std::nullopt,
smax,
flowJournal);
Expand Down
2 changes: 1 addition & 1 deletion src/test/app/Flow_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ struct Flow_test : public beast::unit_test::suite
false,
false,
true,
false,
OfferCrossing::No,
std::nullopt,
smax,
flowJournal);
Expand Down
10 changes: 5 additions & 5 deletions src/test/app/Offer_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5084,7 +5084,7 @@ class Offer_test : public beast::unit_test::suite
void
testFillOrKill(FeatureBitset features)
{
testcase("fixFillOrKillOnFlowCross");
testcase("fixFillOrKill");
using namespace jtx;
Env env(*this, features);
Account const issuer("issuer");
Expand Down Expand Up @@ -5115,8 +5115,8 @@ class Offer_test : public beast::unit_test::suite

// tfFillOrKill, TakerPays must be filled
{
TER const err = features[fixFillOrKillOnFlowCross] ||
!features[featureFlowCross]
TER const err =
features[fixFillOrKill] || !features[featureFlowCross]
? TER(tesSUCCESS)
: tecKILLED;

Expand Down Expand Up @@ -5222,7 +5222,7 @@ class Offer_test : public beast::unit_test::suite
BEAST_EXPECT(expectOffers(env, taker, 0));
}

// Fail regardless of fixFillOrKillOnFlowCross amendment
// Fail regardless of fixFillOrKill amendment
for (auto const flags : {tfFillOrKill, tfFillOrKill + tfSell})
{
env(offer(maker, XRP(100), USD(100)));
Expand Down Expand Up @@ -5344,7 +5344,7 @@ class Offer_test : public beast::unit_test::suite
FeatureBitset const takerDryOffer{fixTakerDryOfferRemoval};
FeatureBitset const rmSmallIncreasedQOffers{fixRmSmallIncreasedQOffers};
FeatureBitset const immediateOfferKilled{featureImmediateOfferKilled};
FeatureBitset const fixFillOrKill{fixFillOrKillOnFlowCross};
FeatureBitset const fixFillOrKill{fixFillOrKill};

testAll(all - takerDryOffer - immediateOfferKilled);
testAll(all - flowCross - takerDryOffer - immediateOfferKilled);
Expand Down
16 changes: 8 additions & 8 deletions src/test/app/PayStrand_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,7 @@ struct PayStrand_test : public beast::unit_test::suite
sendMaxIssue,
path,
true,
false,
OfferCrossing::No,
ammContext,
env.app().logs().journal("Flow"));
BEAST_EXPECT(ter == expTer);
Expand Down Expand Up @@ -684,7 +684,7 @@ struct PayStrand_test : public beast::unit_test::suite
/*sendMaxIssue*/ EUR.issue(),
path,
true,
false,
OfferCrossing::No,
ammContext,
env.app().logs().journal("Flow"));
(void)_;
Expand All @@ -701,7 +701,7 @@ struct PayStrand_test : public beast::unit_test::suite
/*sendMaxIssue*/ EUR.issue(),
path,
true,
false,
OfferCrossing::No,
ammContext,
env.app().logs().journal("Flow"));
(void)_;
Expand Down Expand Up @@ -821,7 +821,7 @@ struct PayStrand_test : public beast::unit_test::suite
USD.issue(),
STPath(),
true,
false,
OfferCrossing::No,
ammContext,
flowJournal);
BEAST_EXPECT(r.first == temBAD_PATH);
Expand All @@ -837,7 +837,7 @@ struct PayStrand_test : public beast::unit_test::suite
std::nullopt,
STPath(),
true,
false,
OfferCrossing::No,
ammContext,
flowJournal);
BEAST_EXPECT(r.first == temBAD_PATH);
Expand All @@ -853,7 +853,7 @@ struct PayStrand_test : public beast::unit_test::suite
std::nullopt,
STPath(),
true,
false,
OfferCrossing::No,
ammContext,
flowJournal);
BEAST_EXPECT(r.first == temBAD_PATH);
Expand Down Expand Up @@ -990,7 +990,7 @@ struct PayStrand_test : public beast::unit_test::suite
std::nullopt,
STPath(),
true,
false,
OfferCrossing::No,
ammContext,
env.app().logs().journal("Flow"));
BEAST_EXPECT(ter == tesSUCCESS);
Expand All @@ -1017,7 +1017,7 @@ struct PayStrand_test : public beast::unit_test::suite
USD.issue(),
path,
false,
false,
OfferCrossing::No,
ammContext,
env.app().logs().journal("Flow"));
BEAST_EXPECT(ter == tesSUCCESS);
Expand Down
2 changes: 1 addition & 1 deletion src/test/app/TheoreticalQuality_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ class TheoreticalQuality_test : public beast::unit_test::suite
rcp.paths,
/*defaultPaths*/ rcp.paths.empty(),
sb.rules().enabled(featureOwnerPaysFee),
/*offerCrossing*/ false,
OfferCrossing::No,
ammContext,
dummyJ);

Expand Down

0 comments on commit c7c6e96

Please sign in to comment.