Mechanism & Technology
Harnessing AMM for Auction Dynamics
At bid.fun, we incorporate the Automated Market Maker (AMM) model into our auction framework, allowing token prices to adjust in real-time according to market demand. By leveraging the inherent liquidity curve of AMM, we set the final auction price automatically, reflecting true market conditions without the need for manual intervention.
Adaptive Price Adjustments
The AMM operates using the constant product formula π=π₯Γπ¦, where π₯ represents the ETH in the liquidity pool and π¦ indicates the token quantity. As users place their bids, the ETH-to-token ratio shifts, causing prices to change along the AMM curve. Increased demand results in higher prices, ensuring that all bids reflect current market rates. This ongoing adjustment minimizes drastic price swings during the auction, keeping valuations in line with real-time interest.
Optimized Pricing for Successful Bids
To enhance auction outcomes and improve bid success rates, bid.fun introduces a tailored auction price multiplier that modifies the standard AMM formula. This multiplier responds dynamically to the number of bidders and overall demand, aiming to find an ideal price that encourages maximum participation. At the end of the auction, all qualifying bids are executed at the same final price, fostering both fairness and efficiency. This specialized AMM approach aligns pricing with market conditions while increasing usersβ chances of winning their bids.
Built-in Protection Against Manipulation
The automated nature of our AMM model effectively eliminates the risk of price manipulation, as prices are determined exclusively by market demand. Neither the project teams nor the platform has the ability to interfere with pricing, resulting in a fully transparent auction setting. This framework ensures that every participant competes under uniform market conditions, reinforcing trust and fairness throughout the auction experience.
Implementation
# Process each participant individually
for i, participant in enumerate(participants, start=1):
bid = participant["bid"]
units = participant["units"]
upt_needed = units * upt_per_unit
# Calculate the ETH required for the purchase
new_upt_pool = current_upt_pool - upt_needed
if new_upt_pool <= 0:
results.append({
"participant": i,
"bid": bid,
"units_requested": units,
"successful_units": 0,
"cost": 0.0,
"refund": bid
})
continue
# Calculate the ETH required for the purchase
new_eth_pool = k / new_upt_pool
eth_needed_base = new_eth_pool - current_eth_pool
# Determine if the bid is successful
if eth_needed <= bid:
# Successful purchase
results.append({
"participant": i,
"bid": bid,
"units_requested": units,
"successful_units": units,
"cost": round(eth_needed, 4),
"refund": round(bid - eth_needed, 4)
})
successful_bids += 1
# Update pool status
current_eth_pool += eth_needed_base # Update base ETH pool (not multiplied by price_multiplier)
current_upt_pool = new_upt_pool
else:
# Bidding failed
results.append({
"participant": i,
"bid": bid,
"units_requested": units,
"successful_units": 0,
"cost": 0.0,
"refund": bid
})
Last updated