We divided the world into zones represented by a geohash of 6 characters (we will call them "geohash6"). Before being able to advertise their willingness to buy or sell crypto, a teller must own a zone by staking DTH tokens. When a zone is free, tellers need to stake the licensing fees (the minimum being 100 DTH). Or the teller can choose to stake more than the minimum in order to discourage other competitors from opening an auction to get the zone (the auction mechanism is developed below in the documentation). When a zone is already owned by a teller, a competitor can open an auction at any time in order to get the zone. When opening an auction, the competitor has to stake more DTH tokens than the current owner of the zone to become the new owner and get the associated benefits from the zone.
The geohash6 for tellers and shops
The system is entirely built on top of this zoning system. We chose to use geohash6 as it represents a zone of 1km^2: it represents a zone that an individual can cross by foot in less than 10 minutes. Imagining that all zones will be owned by tellers in major cities, it would mean that individuals will have a crypto teller accessible in less than 10 minutes by foot.
Here is a view of some geohash of 6 characters in Berlin
And here a view in the detherApp (running on the protocol), with a view of the same geohash when you want to own a zone.
This system is also built to give enough financial incentives to actors willing to actively buy and sell crypto for cash. They have the exclusivity to advertise their offer on their zone. Only the teller that owns the zone can appear on the Dether map on his zone to attract buyers.
From a solidity perspective, we created a ZoneFactory.sol, that lists all created zones.
Retailers (called "shops" in our documentation) can also register directly on the Dether map by providing a geohash of 12 characters. While shops don't need to own a zone to be visible on the map, they do have to stake DTH tokens to advertise their shop.
If the zone where the shop is located is owned by a teller, the shop pays daily fees as taxes (1/42th of what the shop has staked in DTH) to the zone owner to stay visible on the protocol. More information about that is available on the Shops documentation.
On top of the geohash6 mechanism, we have a GeoRegistry.sol contract to represent the country.
Providing services for selling and buying crypto can be a grey area from a legal perspective in some jurisdictions. That's the reason why we have created a system to be able to verify from a solidity level where the geohash6 is created. For that, we created objects of geohash of 4 characters representing countries.
Here is an example of how is represented a country.
Belgium in geohash of size 4:
The represented version of this country can be find in Be.json.You can find the entire list of countries here. To enable the verification of a country from a solidity level, we just add those geohash of 4 characters associated with the iso country code of 2 characters, into the GeoRegistry.sol contract. Every time a user wants to create a zone, a verification is made through this contract. We compare the first 4 characters of the geohash6 of all first 4 geohash characters representing a country. If there's a match, the position is well located on the country. If not, the zone creation is impossible. To enable this verification, a country must be added on the protocol. The Dether team, on its own, opened countries where they were willing to operate. But developers are free to open any other country and operate on its own on the protocol in these countries. The script to open a country is available (here)[https://github.com/dethertech/detherJS/tree/develop/examples].
Getting a zone
To get a zone, a user must provide:
-Iso country code of the zone (see here)
-Geohash of 6 characters representing the zone
-Must not already own a zone
-Provide enough DTH to stake on
If the zone was never owned, a new instance of Zone.sol will be created by ZoneFactory.sol. If the zone was already owned in the past but is not owned anymore, there's only a change of ownership of the old Zone.sol that will occur. And if the zone is already occupied, the user must go through the proposed auction system to get it.
Once a zone is owned, the user will be able to advertise his willingness to buy/sell crypto by adding its information through the addTeller function of the Teller.sol contract.
The auction system was built in order to maintain a fair mechanism where zones are efficiently owned. Users that show the highest degree of interest for a zone will be able to get it, to operate on it and get benefits from it. As a consequence, a zone is permanently opened for an auction. Inspired by the Harberger tax mechanism, each zone can have a new owner every day. The zone is owned by the user that stakes the highest amount of DTH tokens. Moreover, in order to avoid a network takeover, we added a mechanism where a zone owner pays taxes to keep it throughout time.
The auction system has the following characteristics:
- To open or join an auction, you must pay an entry fee of 4% of the DTH tokens staked by the current owner.
- To open or join an auction, you must always bid at least 6% more than the current highest bid.
- The auction lasts 48 hours.
- Once an auction is open, any Ethereum address can bid (the address must not own a zone yet)
- Once the 48 hours period is over, the zone ownership goes to the highest bidder. After that, there's a 24 hours cool down period during which no auction can occur for the same zone.
Example of an auction for a zone located in Berlin with geohash of u33dc1.