How Force Buy Works
The Force Buy mechanism is one of the core innovation of WildDNS, designed to prevent domain hoarding and ensure fair access to valuable domain names. It operates on time-based windows and dynamic pricing to create a balanced ecosystem.
🛡️
Force Buy Active Window (default 14 days)
Initial period after owner minted a domain where domain can still be bought at premium prices by anyone else.
⚡
Dynamic Pricing
Prices adjust based on domain state, length, and time elapsed since last activity
💰
Fair Compensation
Previous owners receive 70% of the force buy price, ensuring fair value transfer. Default force buy multiplier is 2x, meanig that the domain owner will receive 1.4x of the paid price.
🔄
Refresh Window (default ~1 year)
Owners can refresh their domains to reset protection and maintain ownership, while the domain is in the refresh window force buy can not be used.
sequenceDiagram
participant Buyer as 🧑💼 Buyer
participant Contract as 📋 WildDNS Contract
participant Owner as 👤 Current Owner
participant System as 💰 Payment System
Note over Buyer, System: Force Buy Process Timeline
Buyer->>Contract: 1. Call forceBuy(tokenId)
Contract->>Contract: 2. Validate token exists
Contract->>Contract: 3. Check global force buy enabled
alt Domain Type Check
Contract->>Contract: Is Subdomain?
Note over Contract: Check parent domain policies
Contract->>Contract: Evaluate subdomain force buy rules
else Top-level Domain
Contract->>Contract: Use global force buy rules
end
Contract->>Contract: 4. Calculate time windows
Note over Contract: Protection Period vs Refresh Period
alt Time Window Validation
Contract->>Contract: Current time < Protection Period End?
Note over Contract: Force buy ALLOWED (premium pricing)
else
Contract->>Contract: Current time > Refresh Period End?
Note over Contract: Force buy ALLOWED (expired domain)
else
Contract->>Contract: In between periods?
Note over Contract: Force buy BLOCKED
Contract-->>Buyer: ❌ "Force buy restricted"
end
Contract->>Contract: 5. Calculate required price
alt Price Calculation
Note over Contract: If domain expired (past refresh period)
Contract->>Contract: Use base mint price × multiplier
else
Note over Contract: If in protection period
Contract->>Contract: Use current forceBuyPrice
end
Contract->>Contract: 6. Validate payment amount
alt Payment Validation
Contract->>Contract: msg.value >= requiredPrice?
Contract->>Contract: msg.value < requiredPrice × multiplier?
else
Contract-->>Buyer: ❌ "Payment amount invalid"
end
Contract->>Contract: 7. Update token state
Note over Contract: New force buy price = payment × multiplier
Contract->>Contract: Reset lastForceBuyTime = now
Contract->>System: 8. Distribute payment
alt Payment Distribution - Subdomain
System->>Owner: 70% to previous owner
System->>Contract: 24% to parent domain owner
System->>Contract: 6% to contract
else Payment Distribution - Top Level
System->>Owner: 70% to previous owner (configurable)
System->>Contract: 30% to contract
end
alt Transfer Ownership
Contract->>Contract: Transfer NFT to buyer
Contract->>Contract: Clear/update main domain mappings
Contract->>Contract: Reset resolve & payment addresses
end
Contract->>Contract: 9. Emit TokenActivity event
Contract-->>Buyer: ✅ Force buy successful
Note over Buyer, System: Key Innovation: Anti-hoarding mechanism
Note over Buyer, System: Ensures domains remain actively used or available
Technical Implementation Details
- Force buy eligibility depends on time elapsed since last activity (mint, refresh, or previous force buy)
- Protection period (default 14 days) offers security but allows premium-priced acquisitions
- Refresh period (default ~1 year) provides window for owners to maintain their domains
- Expired domains can be acquired at base price + multiplier (typically 2x)
- Payment distribution varies between top-level domains and subdomains
- Failed payment transfers are automatically routed to the contract for later recovery
- All force buy activities are logged via events for transparency