# Protect NFT Borrowers and Lenders via Dutch Auction Liquidations

We balance competing interests in a borrower liquidation auction via Dutch Auction with novel characteristics to solve key problems for our collateralized borrowing protocol.

As a collateralized lending platform Para Space will need to create and enforce efficient liquidation methods in order to protect lenders and protocol solvency. Of course no one wants to liquidate a borrower's NFT's, and in doing so we need to ensure we achieve maximum value for the same in order to return any excess proceeds to the borrower.

With Non-Fungible Tokens (i.e. ERC-721's) this represents a challenge given their

*non-fungible*nature which makes price discovery difficult. We have nonetheless devised a Dutch Auction with a blend of pricing models which we believe will maximize the likelihood we achieve a high selling price for the given NFT.- 1.As a liquidity providing user to the protocol (and member of the protocol) I want to earn yield on my capital with low risk. As a key part of this risk I want to eliminate the risk of losses if the borrower goes into liquidation. And indeed I should be able to more than cover the value of the loan if forced to sell an NFT as collateral.
- 2.As a borrower I want to borrow high amounts of capital at low rates in order to improve my capital efficiency against my valuable but illiquid assets such as NFT’s. I want to avoid losing my assets, but if forced into liquidation I want to maximize the value returned to me.

NB: liquidity providers and borrowers are likely the same people at different points in time. Also it is critical to note that in times of sharp market declines we must keep in mind time is short; if we wait too long to conduct an auction prices may have moved lower thereafter.

A Dutch Auction is distinct from a traditional auction in which bidders place ascending bids and the highest bid wins. In a Dutch auction, the seller/auctioneer instead announces the highest ask price at the start and that ask price drops until a buyer accepts the ask price which in turn becomes the market clearing price.

Notable examples of Dutch Auctions in NFT’s include the Art Blocks collection which offers Dutch auctions in which the ask price decays linearly or exponentially.

At time

$t_0$

the auctioneer lists the highest ask price for the good at price $p_0$

. At each time interval that price decreases by constant step $s$

. The minimum could be 0 in the general sense, but we would clearly never run an auction without a floor. We’ll call this $p_{min}$

The minimum price is then defined as the interval

$t$

such that $p_{min} = p_0 - s \cdot (t-t_0)$

with which it is trivial to solve for the length of the auction $t$

. **The upshot**: this is a model easy to understand though potentially slow in price discovery if we go at regular increments.

By definition price will decay by an exponent as time progresses. We will use a function of exponents with

$\lambda$

to set the rate of exponential decay. (NB: for smaller values, $\lambda \approx \% \ change$

between $p_t$

and $p_{t+1}$

)

$\lambda$

determines the rate of price decay as a function of time $t$

. It is of course still possible to set a minimum price with the exponential decay where $p_{min} = \frac{p_0}{p_0 \cdot e^{-\lambda (t-t_0)} }$

. At time

$t_{min}$

price will remain stable at $p_{min}$

until there is a successful bid. If there is no successful bid the auction will fail.**The upshot**: price can converge to

$p_{min}$

faster in the Exponential decay function than in the case of the linear decay. Given the time-sensitivity of the auction this may indeed be preferable.See below for the varying shapes and rates of price decay according to different inputs of

$\lambda$

. Measuring Price Decay as a function of lambda

Let’s remember our goal: maximize value derived from an auction to satisfy the user’s outstanding debt to the protocol/lenders such that the borrower may likewise receive the excess capital received by the auction. Or in short:

*we want to maximize price received.*The key challenge is price discovery in NFT’s, and our proposal is thus to begin with an exponential decay auction in order to put a high starting price

$p_0$

at which price will decline exponentially until a $p_{minexp}$

at which point the decay will become linear. We would do this in order to quickly go through the lower-probability/high-reward ‘Ask’ prices.Moving beyond the general case and specifically into NFT's, we will define

$F(t)$

as a function of $floor$

price multiples, or $m$

. This allows us to normalize prices across NFT collections where $Price \ at \ time \ t= floor \cdot m_t$

. By definition the $floor$

of an NFT collection is the minimum 'Ask' price of any token within the collection. Notably the

$floor$

value on Para Space comes from the Time Weighted Average Price (TWAP) on-chain oracle used in the collateralized borrow calculation. Read more on our TWAP in our documentation here as measured by our TWAP oracle.Let’s start with these inputs as an illustration:

If

$t$

represents 15-minute intervals, we would reach the $m_{minexp}$

with $t = 16$

, or 240 minutes—4 hours. And the auction would reach $m_{min}$

within $t=38$

or 9.5 hours.Clearly the shape of this graph would change according to different values for each of these inputs.

Sample blended Dutch Auction price decay.

We could steepen or flatten the exponential decay function according to different inputs, but the upshot is straightforward: we can cover more potential clearing prices and allow for greater price maximization if we kick off our Dutch auction with exponential decay

We always want to ground ourselves in the data. To that end we want to see the distribution of token sale prices as a function of multipliers of the floor price. Using the same NFT sales price methodology as in this paper we derive the multipliers of floor prices for the supported collections. In this case we will limit our data to the most recent 90 days of trading in order to calibrate our model for current market conditions.

Below is a box plot with the top and bottom quartiles captured by the edges of the box, the median by the line in the center of the box. The top ‘whisker’ represents the 99th percentile and the bottom ‘whisker’ the 1st percentile of all transactions.

Distribution of NFT sales as a function of floor price

A brief look at the chart above emphasizes the distribution of NFT sales varies widely even among top-tier collections. Bored Ape Yacht Club NFT’s tend to trade within a fairly narrow distribution, but Otherdeeds from the Otherside NFT’s see a much wider trading range relative to the collection floor price. And indeed we will have to set custom parameters to improve our chances of efficiently finding the market-clearing price.

Our Dutch Auction will begin with a high starting price

$m_0$

which will represent the 99th percentile of multiples of $floor$

in the sales distribution. For $m_{minexp}$

we will in turn take the 75th percentile the remaining inputs. And for $m_{min}$

we will assume we drop to the worst 1st percentile of multiples of $floor$

.The Dutch auction price will decay exponentially between

$m_0$

and $m_{minexp}$

values while decaying linearly between $m_{minexp}$

and $m_{min}$

. Or in short—we will cycle through the more speculative top-end of the price distribution relatively quickly and switch to a slower price decay through the remainder.Again each

$m$

value represents the multiplier of the $floor$

price as measured by our TWAP oracle. As such our Dutch auction will by design react to any significant changes in the floor price of an NFT collection throughout the duration of the auction.We have a strong sense for maximum and minimum prices for our auctions, but we need to establish the length and rates of price decay of our auction to maximize likelihood we find the best market-clearing price.

With minimum and maximum multiples set we can in turn calculate exponential price decay

$\lambda$

and linear price increment $s$

reached across specific periods of time $t$

. We want to give the auction participants sufficient time to consider and be able to transact at each individual price, and in order to do so we’ll use a time increment of 15 minutes for each increment of $t$

. Given that these calculations will be done on-chain we will in turn translate this into certain block numbers.With an average Ethereum block time of 12 seconds, each increment of 15 minutes represents approximately 75 blocks per

$t$

. Or in short, every price decline will happen after 75 blocks.But how many 15-minute intervals should we support? We dive back into real transaction data to set our benchmarks. Let’s look at how many transactions these top collections have seen in recent history. Once again we look at the past 90 days such that we accurately adapt to recent market conditions.

Text | Total Sales | Hours Per Sale | First Sale | Last Sale | Total Hours |
---|---|---|---|---|---|

BAYC | 1,177 | 1.8144 | 5/12/22 20:10 | 8/9/22 19:45 | 2,135.58 |

CryptoPunks | 1,219 | 1.7402 | 5/13/22 10:15 | 8/9/22 19:36 | 2,121.35 |

Otherdeed | 20,928 | 0.1099 | 5/12/22 19:15 | 8/16/22 14:20 | 2,299.07 |

Azuki | 2,531 | 0.8453 | 5/12/22 19:15 | 8/9/22 22:50 | 2,139.58 |

Doodles | 1,813 | 1.1871 | 5/12/22 19:19 | 8/10/22 11:26 | 2,152.13 |

MAYC | 1,969 | 1.0927 | 5/12/22 19:37 | 8/10/22 11:08 | 2,151.52 |

Clone X | 1,592 | 1.3545 | 5/12/22 19:24 | 8/10/22 15:43 | 2,156.31 |

Moonbirds | 1,636 | 1.3201 | 5/12/22 19:37 | 8/10/22 19:14 | 2,159.62 |

In total we see these major NFT collections sell approximately once per 1-2 hours in the past 90 days. This gives us an approximate baseline for how quickly an NFT might sell in the context of an auction. A major caveat is of course that the above includes sales across OpenSea, LooksRare, x2y2, Larva Labs (for CryptoPunks), and other marketplaces.

We will make the conservative assumption that it will take a minimum of 10 to 15 times as long for the same tokens to sell within our auction, giving us a target auction time of 10-15x the NFT collection’s “Hours per Sale”. Notably this leaves the 100,000-NFT Otherdeed collection at a very low “Hours per Sale”. And as such we’ll set a duration minimum of 8 hours for our Dutch auctions.

We will target a roughly even split for our Dutch auction between Exponential decay and Linear decay. And since this will be an on-chain auction we will calculate our 15-minute increments in terms of Ethereum blocks by the approximate average block time of 12 seconds.

NFT Collection | Hours Per Sale | Auction Length (Hours) | 15min Increments (i) | Ethereum Blocks |
---|---|---|---|---|

Azuki | 0.85 | 12.68 | 51 | 3261 |

BAYC | 1.81 | 18.14 | 73 | 4666 |

CryptoPunks | 1.74 | 17.40 | 70 | 4475 |

Otherdeed | 0.11 | 8.00 | 32 | 2057 |

Doodles | 1.19 | 17.81 | 72 | 4579 |

MAYC | 1.09 | 16.39 | 66 | 4215 |

Clone X | 1.35 | 13.54 | 55 | 3483 |

Moonbirds | 1.32 | 13.20 | 53 | 3394 |

One final piece of the puzzle remains—setting a reserve such that we help protect lenders and the protocol in the case of failed auctions. Here we introduce a borrower’s penalty on the final sale price of the auction which in turn goes to the Para Space protocol’s reserve.

The proceeds of the auction would thus first go to the protocol to pay off the outstanding debt

$d$

. If the final purchase price $p_{purchase}$

as defined by $m_{purchase} \cdot floor$

covers the full debt, the protocol will subtract the liquidation penalty $lp$

which then goes to the protocol safety reserve. Any excess would in turn go to the borrower.We do this such that if

$p_{purchase}$

is below the outstanding debt, the protocol can cover the loan with the combination of the auction proceeds and its safety reserve in order to protect liquidity providers.The liquidation penalty (

$lp$

) will be set on a per-NFT collection basis to help account for different levels of liquidation risks by collection with a starting value of 5% across the board.With all of the necessary parameters in place we can now establish models for each of our supported auctions. And indeed we can easily use the same methodology to expand coverage to new NFT collections as conditions warrant.

As a protocol we want to support borrowers to the best of our ability, and fundamentally we would like to reward those borrowers who—after liquidation is triggered—bring their account Health Factor (

$HF$

) back above what we will call the recovery Health Factor: $HF_{recovery}$

.A user can always keep their

$HF$

above 1 by repaying some of their Borrows and/or simply add more Collateral to their account and thus keep their account from liquidation. Of course we recognize there may be instances in which a borrower may only have the means to top up their account after liquidation has already begun.In these instances we will allow the borrower to free their NFT assets from liquidation if they bring their

$HF$

back above $HF_{recovery}$

which will be set to 1.5. In the future protocol governance may revisit this threshold if deemed inappropriate, but this will add further protection to the borrower who successfully returns their account to a higher $HF$

.View the full flow of the auction below as well as the FAQ’s and Appendix thereafter.

Full flow of the Para Space Dutch Auction

NFT Collection | m_0 | m_min | m_minexp | lambda | s | 15min increments (i) | Auction Length (Hours) | Ethereum Blocks | Liquidation Penalty |
---|---|---|---|---|---|---|---|---|---|

Azuki | 300% | 70% | 120% | 0.036 | 0.020 | 51 | 12.68 | 13,114 | 5% |

BAYC | 250% | 80% | 120% | 0.147 | 0.080 | 10 | 18.14 | 2,571 | 5% |

CryptoPunks | 500% | 80% | 120% | 0.041 | 0.011 | 70 | 17.40 | 18,000 | 5% |

Otherdeed | 1100% | 80% | 190% | 0.110 | 0.069 | 32 | 8.00 | 8,229 | 5% |

Doodles | 350% | 70% | 120% | 0.030 | 0.014 | 72 | 17.81 | 18,514 | 5% |

MAYC | 200% | 80% | 120% | 0.015 | 0.012 | 66 | 16.39 | 16,971 | 5% |

Clone X | 300% | 80% | 150% | 0.025 | 0.025 | 55 | 13.54 | 14,143 | 5% |

Moonbirds | 200% | 80% | 110% | 0.023 | 0.011 | 53 | 13.20 | 13,629 | 5% |

If there is no successful purchase at

$p_{min}$

and the auction has failed, the protocol will seek to cover any shortfall in outstanding loan balances from its safety reserve. One protection against a failed auction is the fact that $p_{min}$

is a multiple of the NFT collection $floor$

price as reported by our TWAP oracle. This should act as a way to move $p$

lower on any sharp declines in $floor$

.Through governance, the Para Space protocol may use its reserve fund to purchase the NFT at the

$p_{min}$

and subsequently sell the NFT for the best available bid across top NFT marketplaces. If no such bid exists it will list the NFT at the prevailing market price across the same marketplaces.Any funds recovered would replenish the amount spent out of the safety reserve and thus help protect the protocol in the face of any shortfalls. Though we of course hope this will not prove necessary, Para Space the company and/or its team may use their own funds to purchase the NFT and perform the same functions as above.

No. Any outstanding auctions will become inactive if the borrower brings their account above

$HF_{recovery}$

, and the Para Space website will reflect as much. Further any of the borrower’s NFT’s available for auction will be removed from the list.The Para Space website will show the status of the auction, and the smart contract itself will confirm the user’s

$HF$

remains below $HF_{recovery}$

before selling the NFT at the Dutch Auction price.

$m_0 = 3; \ m_{min} = 0.7$

$m_0 = 2.5 ; \ m_{min} = 0.8$

$m_0 = 2.0 ; \ m_{min} = 0.8$

$m_0 = 5 ; \ m_{min} = 0.8$

Otherdeeds for Otherside have a bimodal distribution — approximately 10% of tokens sell significantly above floor price. As such this will be a wider range than with other collections

$m_0 = 11 ; \ m_{min} = 0.8$

$m_0 = 3.5; \ m_{min} = 0.7$

$m0 = 3 ; \ m_{min} = 0.8$

$m_0 = 2 ; \ m_{min} = 0.8$