The registrar smart contract is responsible for managing the top-level domains. It sells second-level domains to buyers and allows renewals and transfers of ownership.
Note that auctions are a planned functionality and not implemented in the current version.
Every domain is offered to users through auction first. The registrar implements an open ascending price auction model. It is an auction model most people are likely familiar with: all bids are openly visible and every new bid is required to be higher than the last bid. If there are no bids in a given period since the last bid, the auction ends with the highest bidder winning the auction.
Any account can submit a bid during an active auction and transfer associated funds along in the same transaction. If a bid is higher or equal to the current highest bid multiplied by minimum_increase_ratio, it becomes the new highest bid and the previous highest bid becomes refundable or available for future bids (on the same or a different domain). Otherwise, the transaction fails. The auction ends after bid_period seconds since the last bid, but not earlier than minimum_auction_period since the auction's start.
A special case is the first bid, which has to be greater or equal to min_bid_per_day. When a previously unregistered domain name is first bid on, the name is pre-registered in the name registry to ensure it's validity.
After the auction ends, there is a settlement period of the same length as minimum_registration_period. The highest bidder invokes the settlement process transferring the domain to a chosen address, which becomes the new owner. The domain is registered for the min_duration (the time spent in the settlement period counts towards that period). If the highest bidder doesn't invoke settlement, the domain is treated as expired after the settlement phase ends.
An expired domain becomes available for FIFS only after it's auction ended with no bids. In the FIFS model, all domains are sold for a flat fee equal to the starting_price. In the period after the launch of the smart contract, all domains are treated as recently expired.
For FIFS registration, the contract implements a commit & reveal scheme to avoid front-running of transactions.
Owners of domains can renew their domains at any time up until the domain expires. The chosen renewal period has to be greater or equal to min_duration. Renewals are priced proportionally to the price the domain was initially sold for - the formula is:
price_of_renewal = chosen_renewal_period * initial_price / initial_registration_period
The susceptibility to spoofing attacks using look-alike characters is reduced by limiting TLDs to predefined character scripts. Neither whole-script and mixed-script confusable names can be created under one TLD.
The top-level domains available are:
The standard TLD for names in Latin
TLDs for more character scripts will be likely made available in the future.
There are several parameters stored to configure this contract:
min_bid_per_day is the minimum amount that participants have to bid initially (in mutez)
minimum_increase_ratio is the minimum ratio of a new bid to the current highest bid
minimum_auction_period is the minimum auction period (in seconds)
bid_period is the period after which the auction ends measured since the last successful bid (in seconds)
initial_auction_start is the start of the initial auction period for all domains, i.e., the date the service was officially launched
min_duration is the minimum period anyone can register or renew a domain for (in seconds)
min_commitment_age is the minimum time for a buy commitment to be valid (in seconds)
max_commitment_age is the maximum time for a buy commitment to be valid (in seconds)