Canon
Close any Monad position: price moved, block moved, profit smaller than the fee
A close is a sell of a coin you already hold. The official docs tell you how a swap is encoded. They do not tell you what to do when the next 300 millisecond block has already walked the price, or when the gain is smaller than the pool fee and a cautious program refuses to sign. This is that missing page.
MONAF Blog · 27 October 2026 · 28 min
Monad’s own pages are excellent on the machine and thin on the moment you want out. Gas pricing tells you the fee is the gas used, priced from the base fee. The execution pages tell you transactions in one block can run side by side. None of them tell a person holding WBTC, WETH, cbBTC or USDCm what to do when Close does nothing. The failure modes are ordinary. The price on the card was marked from slot0 a moment ago. The leader has already proposed another block. The minimum you asked the router to honour is now above what the pool will pay. The wallet shows “Transaction failed for 0 MON”, because a token sell sends no native value, and the router reverted. Or, quieter and worse, the program decides the move does not clear the fee and never asks the wallet at all. Both are blocks. A close the owner asked for is not allowed to be one of them.
What the card is actually offering
Read the line before you tap. “In 50 MON · back 49.79 MON” is not a promise and it is not a second quote. In is what the fill recorded as spent. Back is the pool’s spot, applied to the quantity the fill claims, after the desk has refused a quantity that is more than one and a half times what that spend buys at the current sqrt price. The difference is the mark. On a 50 MON clip a loss of 0.21 MON is about four tenths of one percent. A gain of 0.03 MON on a 99 MON USDCm position is about three hundredths of one percent. Neither number is a reason to stay in the trade if you have decided to leave. It is a description of the pool at the last read.
The docs’ current-facts page, which they tell agents to prefer over old blog numbers, puts the block at 300 milliseconds observed and full finality at two slots, 600 milliseconds. Between the read that painted “back” and the inclusion of your sell, several slots can pass if the wallet is slow, the RPC is slow, or you hesitated. A floor set 1 percent under the mark survives a quiet pool. A floor set 3 percent under the mark was still reverting on this desk, because the mark itself can be a little rich: slot0 is the mid, the pool fee comes off, and a 50 MON clip in a thinner book walks the tick. The wallet then reports a failed transaction for 0 MON. The position is still yours. The card comes back. That is the bug people feel as “it did not let me close”.
The mark is a reading. The floor is permission for the pool to have moved. A close uses a wide floor, then checks the call, then signs.
The floor, in MON, not in a slogan
Take a mark of 49.79 MON. One percent under it is 49.29. Three percent under it is 48.30. Half of it is 24.90. Twenty percent of it is 9.96. Five percent of it is 2.49. A 0.05 percent pool fee on the way out is about 0.025 MON. Price impact on a deep WETH or WBTC pool, at this size, is ticks. None of those are 1.5 MON, let alone half the position. So a floor at half the spot does not “give the trade away” on a liquid pool. It means a one-block move, a slightly stale mark, or a fee the mark forgot, cannot revert the router. You still receive the pool’s actual output. The floor is a minimum, not a target. The sandwich risk on a 50 MON clip, with a public mempool and a half-spot floor, is real and should be named: a searcher can push the price and sell you a worse fill down to that floor. On this size, in WETH, WBTC, cbBTC and USDCm against WMON, the cost of a revert loop has been larger than that risk. The desk now starts at half, then 20 percent, then 5 percent.
Before the wallet sees the transaction, the desk simulates it from your address. A clean eth_call is what gets signed. If the first floor would revert, it rebuilds with the next wider floor and simulates again. If the node itself errors, the widest floor is still sent, because a flaky simulation must not trap a coin you have asked to sell. If you reject the wallet, nothing was sold. If you sign, the hash is the close.
The fee is not a lock
A USDCm position that is up 0.03 percent, against a round trip near 0.12 percent, looks like a bad sale if the only question is “does this profit clear the fee?”. That question is the right one for a bot that is deciding whether to rotate. It is the wrong one for a button a person pressed. The person has already decided. Keeping the asset “because the swap is expensive” is how a 99 MON stable position sits on the screen while the owner taps Close and watches nothing happen. The desk no longer applies that rule to a close. A small gain, a small loss, a flat mark, and a wallet balance of USDC that was never a “trade” in the romantic sense all sell. The USDC button on a position that is already USDC stays off, because selling USDC into USDC is not an exit. Close sells it back to MON.
Quantity, allowance, fee tier
Three other reverts wear the same wallet banner, and none of them are the price. The quantity must not exceed the token balance. The desk reads balanceOf and caps the sell. If that read is slow it waits, rather than firing a transfer the token will refuse. The router must be approved for at least that quantity. The first close of a token sends the approval, then waits until allowance is visible, then sells. It does not mark the token approved in the browser and hope. The pool fee on the path is the fee of the pool the asset was listed with, not a fee remembered from an old fill. A path through the wrong tier has no pool, and no floor, however wide, will save it. WETH, WBTC, cbBTC and USDCm on this desk use the 500 tier against WMON unless the asset record says otherwise.
After you sign
A hash means the node accepted the transaction. On this chain the receipt is one or two slots away when the leader is healthy, and a public RPC will still time out waiting for it. A timeout is not a revert. The position leaves when the hash exists. Open the hash on MonadVision if you want the receipt. Status success means the coin is gone and the MON, or the USDC if you chose that exit on a wallet position, is yours. Status reverted means the coin is still there and you close once more. You do not send a second sell while the first hash is unconfirmed. The nonce would order them, and you would sell twice if the first had not actually reverted.
A checklist you can do in one minute
Read In and back, and decide you want out anyway. Tap Close once. Sign the approval if it is the first time for that token, then the sell. Ignore a timeout that names a hash. Paste the hash. If it succeeded, the MON is in the wallet or the vault that held the position, and a vault still needs the explicit return if you want it spendable in the wallet. If it reverted, close again. Do not add a second product, a second spender, or a typed destination. The contract already knows the owner.