This article is a simple compilation of Paradigm's blog VRGDA. For more details, please read the original text.
VRGDA, short for Variable Rate Gradual Dutch Auctions, is a token issuance mechanism proposed by Paradigm. Its purpose is to achieve the effect of gradual Dutch auctions through a customizable token issuance model: when the market demand exceeds expectations, the price rises; conversely, when the market demand is below expectations, the price drops; and when the market demand meets expectations, the price equals the set target price.
In the Art Gobblers project, two types of NFTs are auctioned using VRGDA: Gobbler, with a fixed upper limit of 10,000, and Page, with no upper limit. The issuance rates of these two tokens are shown in the figure below:
To achieve the effect of Dutch auctions, a function of price
Many functions can meet the requirements, as mentioned in the GDA article by Paradigm:
Here, we choose the following function:
Where
Assume
The curve of price (vertical axis) vs. time (horizontal axis) is shown in the figure below:
Define the following parameters:
-
$p_0$ - Target price. If the NFTs are auctioned at the planned speed, which means market demand meets expectations, each NFT will be sold at this price. -
$k$ - If no NFTs are sold within the unit time, the NFT price decreases by this percentage. -
$f(t)$ - Token issuance model, indicating the expected number of NFTs to be issued within time$t$ .
We use
Assume
So far, equation (3) has achieved the effect of price decreasing with time.
To reflect market demand in the price, we use
We hope
- If the auction progress is faster than expected, the starting price of the next NFT is greater than
$p_0$ . - If the auction progress is slower than expected, the starting price of the next NFT is less than
$p_0$ . - If the auction progress matches the expectations, the starting price of the next NFT equals
$p_0$ .
Assume the auction progress matches the expectations, we can derive:
Thus
Where the token quantity and time function
Since
Especially, when the market is overheated, the auction price will rise rapidly to reduce market enthusiasm and prevent whales from auctioning in bulk.
This achieves the interaction between auction price and market enthusiasm.
The final formula of VRGDA is as follows:
Where,
-
$p_0$ - Target price. -
$k$ - Percentage of price decay per unit time. -
$f^{-1}(n)$ - Function of time and token quantity, i.e., the inverse function of the token issuance model$f(t)$ . -
$t$ - Time from the start of the auction to the present.
Next, we will introduce the VRGDA algorithm with several common token issuance models.
Assume the expected number of NFTs sold per day is
The corresponding curve is:
Its inverse function (function of time and token quantity) is:
Substitute into formula (6), the VRGDA formula for the linear issuance rate is:
Assume the expected time for the 1st NFT is the 1st day, the 2nd NFT on the 4th day, and the
The corresponding curve is:
Its inverse function is:
Substitute into formula (6):
The logistic function (Logistic Function) is an S-shaped function, simplified as:
It can compress any input into the range of
We can use the logistic function as an issuance model with an upper limit.
First, shift the function downward along the vertical axis by 0.5 (since
Assume we want the total number of tokens to be
When
Therefore,
The inverse function of
Substitute into formula (6), the VRGDA formula based on the logistic function is:
The corresponding token issuance curve is shown below:
In the Art Gobblers project, Gobbler and Page NFTs are auctioned using VRGDA, where:
- Gobbler uses the logistic function as the issuance model, with a fixed upper limit of 10,000.
- Page uses a combination of logistic and linear issuance models, switching to linear issuance after a certain period, with no upper limit.
Taking Gobbler as an example, let’s see how the VRGDA auction parameters are defined in the source code:
constructor(
// Mint config:
bytes32 _merkleRoot,
uint256 _mintStart,
// Addresses:
Goo _goo,
Pages _pages,
address _team,
address _community,
RandProvider _randProvider,
// URIs:
string memory _baseUri,
string memory _unrevealedUri
)
GobblersERC721("Art Gobblers", "GOBBLER")
Owned(msg.sender)
LogisticVRGDA(
69.42e18, // Target price.
0.31e18, // Price decay percent.
// Max gobblers mintable via VRGDA.
toWadUnsafe(MAX_MINTABLE),
0.0023e18 // Time scale.
)
Here, focus on the last few lines:
- 69.42e18: Target price (initial price)
$p_0$ . - 0.31e18: Indicates that if no auction is successful within a day, the price becomes
$1-0.31=69%$ of the previous day’s price. - MAX_MINTABLE: Maximum number of tokens that can be auctioned, i.e.,
$L - 1$ (note, not$L$ ). - 0.0023e18: Time multiplier
$s$ ,$\frac{1}{0.0023} \approx 435$ indicates that it is expected to auction 46% of the total tokens in 435 days, according to the Gobbler auction plan, reaching 46% of the auction volume around the 15th month (approximately 435 days).
VRGDA proposes a customizable gradual Dutch auction method for token models, allowing the market to participate in the pricing of auctioned tokens. In fact, this algorithm can be applied not only to NFT auctions but also to ERC20 token auctions. The essence of the VRGDA algorithm is an AMM that dynamically adjusts market prices through algorithms.
- Variable Rate GDAs: https://www.paradigm.xyz/2022/08/vrgda
- Gradual Dutch Auctions: https://www.paradigm.xyz/2022/04/gda
- Art Gobblers: https://www.paradigm.xyz/2022/09/artgobblers