A partial redemption on the first Trove drawn would cancel, and revert the whole call, on an
ordinary price move before it mines (MK-103).
The contract cancels a partial unless the Trove's resulting NICR, computed at the price when the
transaction MINES, sits inside a band about 600 seconds of interest wide (TroveManager.sol:1276-1306),
and a cancel on the first Trove drawn reverts the call (:406-408). The two tolerances on this
error are how far the price could move up and down, as 1e18 fractions, before that happens; the
required tolerance is the measured two block move (REDEMPTION_PRICE_MOVE_TOLERANCE).
Two ways forward. Redeem at least nextViableAmount, which consumes the first Trove whole and
is not priced against a hint at all (:1252). Or send anyway with
acceptPriceFragilePartial: true, knowing most such sends revert and cost gas.
A partial redemption on the first Trove drawn would cancel, and revert the whole call, on an ordinary price move before it mines (MK-103).
The contract cancels a partial unless the Trove's resulting NICR, computed at the price when the transaction MINES, sits inside a band about 600 seconds of interest wide (
TroveManager.sol:1276-1306), and a cancel on the first Trove drawn reverts the call (:406-408). The two tolerances on this error are how far the price could move up and down, as 1e18 fractions, before that happens; the required tolerance is the measured two block move (REDEMPTION_PRICE_MOVE_TOLERANCE).Two ways forward. Redeem at least
nextViableAmount, which consumes the first Trove whole and is not priced against a hint at all (:1252). Or send anyway withacceptPriceFragilePartial: true, knowing most such sends revert and cost gas.