fix(amm): reject exact output at pool reserve

This commit is contained in:
Ricardo Guilherme Schmidt 2026-07-17 20:57:04 -03:00
parent a8de6b498c
commit a3bbcda7c2
No known key found for this signature in database
GPG Key ID: 1396EA17DE132FFE
2 changed files with 18 additions and 1 deletions

View File

@ -86,7 +86,7 @@ Rectangle {
readonly property bool tokensSelected: sellToken !== null && buyToken !== null
readonly property bool sameTokenSelected: isSameToken(sellToken, buyToken)
readonly property bool insufficientBalance: hasAmount && sellToken !== null && sellBalanceRequirement > (sellToken.balance || 0)
readonly property bool insufficientLiquidity: hasAmount && buyToken !== null && parsedBuyAmount > (buyToken.reserve || 0)
readonly property bool insufficientLiquidity: hasAmount && buyToken !== null && parsedBuyAmount >= (buyToken.reserve || 0)
readonly property bool canSubmit: tokensSelected && !sameTokenSelected && hasAmount && parsedSellAmount > 0 && parsedBuyAmount > 0 && !insufficientBalance && !insufficientLiquidity
readonly property string submitButtonText: {

View File

@ -127,6 +127,23 @@ Item {
compare(card.submitButtonText, "Insufficient balance")
}
function test_exactOutputCannotConsumeEntireReserve() {
const page = createTemporaryObject(pageComponent, root)
verify(page)
const card = findChild(page, "swapCard")
verify(card)
card.setToken("sell", page.tokens[0])
card.setToken("buy", page.tokens[1])
card.buyInput = String(card.buyToken.reserve)
card.editingSide = "buy"
compare(card.parsedBuyAmount, card.buyToken.reserve)
verify(card.insufficientLiquidity)
verify(!card.canSubmit)
compare(card.submitButtonText, "Insufficient liquidity")
}
function test_reselectingOppositeTokenSwapsPair() {
const page = createTemporaryObject(pageComponent, root)
verify(page)