The Black Thursday incident at MakerDAO showed that even a top protocol can lose millions due to an architectural flaw in its liquidation system. The English auction (bidding up) required a 6-hour wait and was vulnerable to gas wars. In response, MakerDAO introduced the Dutch-style auction (Clip) — the price starts above market and decreases exponentially; anyone can buy the collateral at any moment. Our team, with 10+ years of proven DeFi experience, offers guaranteed, audited end-to-end development: from parameter design to deployment and monitoring. At 300k gas and 50 gwei, one liquidation costs 0.015 ETH, and proper calibration can save up to 0.01 ETH per liquidation. For a protocol with a $10M debt ceiling, fine-tuning saves up to $5,000 per month in bad debt and gas. Development cost starts from $10,000.
How the Dutch Auction Works in a CDP Liquidation System
Collateralization Ratio and Trigger Moment
A CDP is a position with collateral and debt in a synthetic asset. The position is liquidatable when:
CR = (collateral_value / debt_value) < liquidation_ratio Liquidation ratio depends on the asset: typically 150% for ETH, 175-200% for more volatile assets, and 105-110% for stablecoins. Choosing the right liquidation ratio is a balance between protocol protection and bad debt risk.
Liquidation is triggered when anyone (permissionless) calls the liquidate function. The caller receives a kick reward — a small incentive for initiating the auction.
Dutch Auction (Clip): Why It's Better than English Auction
The English auction (bidding up) requires waiting for the auction to end (up to 6 hours) and is subject to gas wars. The Dutch auction (Clip) starts above the market price and decreases exponentially. Auction parameters:
| Parameter | Description | Typical Value |
|---|---|---|
| buf | Initial price multiplier | 1.2 (20% above market) |
| tail | Maximum duration | 3600 seconds |
| cusp | Maximum price drop | 0.4 (40% from start) |
| chip | % of collateral as kick reward | 0.02% (2 bps) |
| tip | Fixed flat incentive | 300 DAI |
If the auction reaches tail or the price falls to cusp without completion, a reset occurs: the price is set to market * buf. This protects against the Liquidations 1.0 scenario.
Flash Loan Liquidations via take()
Clip.take() supports a callback: the liquidator receives collateral, sells it via a DEX, and repays the debt in one transaction — a standard flash loan pattern.
interface ClipperCallee { function clipperCall( address sender, uint256 owe, uint256 slice, bytes calldata data ) external; } Integration with Uniswap V3 or 1inch inside clipperCall is standard practice for liquidation bots.
Why Modular Architecture Is Critical for Liquidations
Components
| Component | Function |
|---|---|
| Dog.sol | Registry of active CDPs, triggers liquidations |
| Clip.sol | Dutch auction engine |
| Abacus.sol | Price calculation (exponential/linear drop) |
| Spotter.sol | Oracle adapter, feeds price to Dog |
| Vat.sol | Core accounting, stores all CDPs and debts |
We implement a similar modular architecture adapted to your specific protocol. Key point: Vat is the single source of truth for balances; other contracts only write to Vat via authorized calls.
Oracle Security
Dog receives prices through Spotter from OSM (Oracle Security Module) — with a 1-hour delay, plus the current price for emergency liquidations. The delay gives users time to add collateral during a sharp drop. For volatile assets, we choose a 30-60 minute delay; for stablecoins, no delay.
Liquidator Incentive Calibration
Optimal incentive = gas cost + risk premium + profit margin. At 300k gas and 50 gwei = 0.015 ETH. The kick reward covers gas, and chip provides profit margin. For example, for ETH at $2000 and a $10M debt ceiling, the optimal incentive is 0.02 ETH, which incentivizes liquidators without excessive discount.
What's Included in the Work
- Analytics: auction parameters for each collateral type, modeling incentive structure
- Development: Dog, Clip, Abacus, oracle integration, liquidator bot (off-chain)
- Testing: fork tests of stress scenarios (simulating Black Thursday), unit tests of edge cases
- Deployment: first testnet with mainnet fork, then mainnet with a limited debt ceiling
- Documentation: architecture description, parameters, instructions for liquidators
- Support: 2 weeks of monitoring after launch, training for your team
As a result, you receive full documentation, repository access, training, and 2-week post-deployment support. Contact us to discuss the details.
Testing: What You Can't Skip
Simulation of a Black Thursday-like scenario via Foundry fork:
forge test --fork-url $ETH_MAINNET_RPC --fork-block-number 9763200 --match-test testBlackThursdayScenario Test: collateral drops 40% in 100 blocks. Verify: all CDPs with CR < LR go to auction, auctions complete, bad debt = 0, reset triggers when no liquidators.
Echidna property: totalSystemDebt <= totalSystemCollateralValue * (1 / minimumCR) for any sequence of operations.
Timeline Estimates
Basic CDP liquidation system with Dutch auction for 1-3 collateral types — 1-2 weeks. Extended system with NFT collateral and custom auction mechanism — 3-4 weeks. Cost is calculated individually — contact us for a project estimate. Our experience guarantees reliability and protection against bad debt.
Order development of a CDP liquidation system — get a consultation from engineers with 10+ years of DeFi experience.







