How the bid escrow works
In plain language, with no Solidity. What a deposit is, what happens when you take the lead, what happens when you win, what happens when you lose, and how you get your money back out.
On deployments where it is enabled, bidding at Minthouse is collateralised. Instead of the house taking your word that you will pay if you win, you put the money up front, into a smart contract, from your own wallet, and the contract, not the house, decides what can happen to it.
This page is the account for somebody who wants to understand the arrangement before using it. If you want to check the arrangement rather than understand it, the two pages that do that are Guarantees and limits and the contract reference.
Why it exists#
An auction has a collection problem. A bidder who wins and then does not pay has cost the consignor a sale, cost the underbidder the lot, and cost the house the fee, and chasing them afterwards recovers none of that quickly. Traditional salerooms answer this with registration deposits, credit checks and legal process.
Minthouse answers it with collateral that is posted before the bid and released the moment the bid stops standing. The trade is explicit: a bidder gives up the free use of that money for as long as they are winning, and in exchange the house can let them bid without a credit relationship and can settle a won lot without waiting on them.
The three states your money can be in#
lock and release move no tokens at all, and settle has exactly one destination, fixed when the contract was deployed.Free#
Money you have deposited that is not backing anything. It is yours, it earns nothing, it is not lent or deployed anywhere, and you can start withdrawing it at any moment. The house cannot transfer it. The house can lock it against a lot you are leading: that is the next state, but it cannot send it anywhere.
Locked#
Money backing a bid you are currently winning. The house locks it when you take the lead and releases it when you stop leading. While it is locked you cannot withdraw it, and the house still cannot send it anywhere except to settle the lot it is locked against.
Pending withdrawal#
Money you have asked to take out, waiting out the timelock. It does not count toward your bidding power the moment you request it, which is the point of the delay, and it becomes yours to take when the delay is up and you claim it.
Depositing#
You sign a transaction from your own wallet that moves USDC into the contract and credits it to your address. There are two ways to do it and they differ only in convenience:
- Approve, then deposit. Two transactions. Works with any wallet and any ERC-20.
- Deposit with permit. One signature and one transaction, using the token's own permit feature. This is the path the site uses by default, because Base USDC supports it.
The contract checks that the amount it actually received equals the amount credited, so a token that takes a fee on transfer is refused rather than silently crediting you less than you sent.
There is no function by which Minthouse pulls funds from your wallet. A deposit begins with your signature and there is no other way for it to begin.
Taking the lead#
When your bid puts you in front, the house locks collateral against that lot. Two details are worth knowing because both surprise people:
The lock is your maximum plus the fee, not the current price#
If you set a maximum of $5,000, the lock is $5,000 plus the auction house fee on $5,000, not the $1,200 the lot currently stands at. The house locks what you might have to pay, because that is what it might have to collect.
The alternative, locking only the public price, leaves the rest of your maximum withdrawable. A bidder could then take the lead at $1,200, withdraw everything above it, and the proxy would later answer at $4,800 against collateral that had walked out. The lot would go to a bidder the house could not collect from.
The lock amount is on a public blockchain, and it equals your maximum plus a published fee schedule, so anyone can work backwards to your maximum. The house does not deny this and does not treat it as a footnote: it is the price of the collateral being sufficient. If your maximum is information you need to keep, this is the mechanism that will not keep it. See What is revealed.
Raising your own bid adjusts the same lock#
Raising your maximum does not open a second lock. It moves the existing one to the new amount, and it restarts two clocks: the one that says how soon the lot can settle, and the one that says how long the lock can stand before anyone may cancel it. Both restart together, so a raise can never become cancellable before the house is allowed to collect it.
Being outbid#
The house releases the lock. Your money moves from locked back to free, no tokens go anywhere, and you can withdraw it or bid with it again. If the house fails to release it: the server is down, a transaction never lands: the lock expires on its own clock after 30 days and anyone at all can cancel it on your behalf, without a signature from Minthouse. That is the backstop, and it is why the 30-day constant exists.
Winning#
The locked amount settles to the house's treasury in payment of your invoice, and anything locked above the invoice total is released back to you in the same transaction. Three constraints apply, all enforced by the contract rather than by the server:
- Only up to the locked amount. The house cannot settle more than it locked, and cannot reach your free balance to top it up.
- Only to the treasury. The destination is fixed at deployment and there is no function that takes a different one.
- Not immediately. A lock must stand for two minutes before any of it can settle, and every raise restarts that two minutes.
That last one exists so that locking and settling cannot happen in a single transaction. If they could, a stolen house key could lock and drain every balance in the escrow before anyone could react. Two minutes is enough for the guardian's brake to be reachable, and short enough that no ordinary close is delayed by it.
Getting your money out#
Two steps, both signed by you.
-
Request. Name an amount of free balance. The clock starts, one hour on this deployment, and the amount stops counting toward your bidding power immediately.
-
Claim. After the hour, take it. This transaction cannot be paused, cannot be blocked, and needs nothing from Minthouse.
You can cancel a pending withdrawal at any time and put the money back to work as bidding power. A second request adds to the pending amount and restarts the clock on the whole of it.
Why there is a delay at all#
Without it, a bidder could take the lead on a lot and withdraw their collateral in the next block, leaving a standing bid with nothing behind it. The delay, combined with the fact that a pending withdrawal stops counting as bidding power the moment it is requested, closes that.
Until you claim, the tokens are still in the contract, and a lock can draw them back into collateral. That includes a request that has fully ripened and is sitting there unclaimed. Finishing the delay is not what makes the money safe. Claiming it is. If you have decided to take money out, take it out; do not leave it ripened and unclaimed.
The contract emits its own event when this happens, so you can see the moment a pending amount was reduced rather than having to infer it.
What the house can never do#
- Move your free balance. Not to itself, not to anyone. No function does this.
- Send a settlement anywhere but the one treasury address fixed when the contract was deployed.
- Settle more than it locked against the specific lot it locked it against.
- Block, pause, or delay your claim once the timelock has run.
- Change any of the above. There is no proxy, no upgrade path, and no admin function. New rules mean a new contract and a public migration.
And what it can#
A page that stopped at the box above would be a marketing page. Three things are true that a bidder should know before depositing, and each is bounded:
- The house can encumber your free balance by locking it against a lot. That is what collateral is. The bound: your total encumbrance episode cannot exceed roughly 60 days, after which the house cannot add more, and any individual lock dies at 30 days.
- The house can draw back a requested-but-unclaimed withdrawal into a lock. The bound: the same clocks, plus the fact that an expired lock buys you a cooling-off period in which no new lock can rise against you.
- A pause freezes your locked balance, though never your free balance. The bound: locks still expire on their own 30-day clocks during a pause, and
expireLockis not pausable, so a pause cannot hold collateral indefinitely.
Each of those is stated exactly, with the code that enforces the bound, on Guarantees and limits. Read that page before depositing rather than this one.
If Minthouse disappears#
Free balance: request, wait an hour, claim. Straight against the contract from any wallet or block explorer. Neither function needs the house.
Locked balance: wait for the lock's 30-day clock, then anyone (you, a stranger, a script) can call expireLock and hand it back to your free balance, after which the paragraph above applies. If the guardian key is still in friendly hands, revoking the settler makes every lock immediately expirable and removes the wait.