fix final dest amount

This commit is contained in:
Denis Angell
2023-01-29 23:52:38 -05:00
committed by Richard Holland
parent f8591d0fd6
commit 448258f861

View File

@@ -826,28 +826,23 @@ trustTransferLockedBalance(
return result; return result;
} }
// dstLow XNOR srcLow tells us if we need to flip the balance amount
// on the destination line
bool flipDstAmt = !((dstHigh && srcHigh) || (!dstHigh && !srcHigh));
// default dstAmount to amount // default dstAmount to amount
auto dstAmt = amount; auto dstAmt = amount;
// if tx acct not source issuer or dest issuer // if tx acct not source issuer or dest issuer
// and xfer rate is not parity // and xfer rate is not parity
if ((!srcIssuer || !dstIssuer) && lXferRate != parityRate) if ((!srcIssuer && !dstIssuer) && lXferRate != parityRate)
{ {
// compute transfer fee, if any // compute transfer fee, if any
auto const xferFee = amount.value() - auto const xferFee = amount.value() -
divideRound( divideRound(
amount, amount,
lXferRate, lXferRate,
amount.issue(), amount.issue(),
true); true);
// compute balance to transfer // compute balance to transfer
dstAmt = amount.value() - xferFee; dstAmt = amount.value() - xferFee;
} }
// ensure source line exists // ensure source line exists
Keylet klSrcLine{keylet::line(srcAccID, issuerAccID, currency)}; Keylet klSrcLine{keylet::line(srcAccID, issuerAccID, currency)};
SLEPtr sleSrcLine = peek(klSrcLine); SLEPtr sleSrcLine = peek(klSrcLine);
@@ -961,8 +956,6 @@ trustTransferLockedBalance(
dstBalanceDrops < view.fees().accountReserve(ownerCount + 1)) dstBalanceDrops < view.fees().accountReserve(ownerCount + 1))
return tecNO_LINE_INSUF_RESERVE; return tecNO_LINE_INSUF_RESERVE;
// compute final destination amount
auto const finalDstAmt = flipDstAmt ? -dstAmt : dstAmt;
// create destination trust line // create destination trust line
if constexpr (!dryRun) if constexpr (!dryRun)
{ {
@@ -977,7 +970,7 @@ trustTransferLockedBalance(
false, // authorize account false, // authorize account
(sleDstAcc->getFlags() & lsfDefaultRipple) == 0, (sleDstAcc->getFlags() & lsfDefaultRipple) == 0,
false, // freeze trust line false, // freeze trust line
finalDstAmt, // initial balance dstAmt, // initial balance
Issue(currency, dstAccID), // limit of zero Issue(currency, dstAccID), // limit of zero
0, // quality in 0, // quality in
0, // quality out 0, // quality out