/dot-crypto

Contracts and tools for .crypto

Primary LanguageJavaScript

.crypto

The repository is deprecated.

Unstoppable Domains Documentation CI

Crypto Registry Naming Service (CNS) is a naming service implemented using Ethereum Smart Contract Platform. Each name inside CNS has a format of a domain name in .crypto top level domain space. Like example.crypto.

CNS's goal is to be an alternative to classical domain names system (DNS) by fixing its core downsides:

  • Censorship Resistance
  • Ensure permanent ownership of the domain by the owner
  • Decentralized registration
  • Decentralized access

CNS documentation is available at docs.unstoppabledomains.com.

Getting started

If you're interested in contributing or compiling/testing the smart contracts, see our development guide.

Resolution libraries

Available domain resolution libraries to retrieve crypto registry data:

These libraries are only set to read data from crypto registry making them lightweight and fit for most application that do not require domain management compatibilities.

Deployed Smart Contracts addresses

Mainnet

Contract Source Ethereum Addresses
CNSRegistry 0xD1E5b0FF1287aA9f9A268759062E4Ab08b9Dacbe
SignatureController 0x82EF94294C95aD0930055f31e53A34509227c5f7
MintingController 0xb0EE56339C3253361730F50c08d3d7817ecD60Ca
WhitelistedMinter 0xd3fF3377b0ceade1303dAF9Db04068ef8a650757
URIPrefixController 0x09B091492759737C03da9dB7eDF1CD6BCC3A9d91
DomainZoneController 0xeA70777e28E00E81f58b8921fC47F78B8a72eFE7
Resolver 0xb66DcE2DA6afAAa98F2013446dBCB0f4B0ab2842
Resolver (legacy) 0xa1cac442be6673c49f8e74ffc7c4fd746f3cbd0d
0x878bc2f3f717766ab69c0a5f9a6144931e61aed3
ProxyReader 0x7ea9Ee21077F84339eDa9C80048ec6db678642B1
TwitterValidationOperator 0xbb486C6E9cF1faA86a6E3eAAFE2e5665C0507855
FreeMinter 0x1fC985cAc641ED5846b631f96F35d9b48Bc3b834

Pre-requirements

  • Solc compiler
brew install https://raw.githubusercontent.com/ethereum/homebrew-ethereum/4d13060698e7f0cdac9ec24627b6485122b8f1b6/solidity.rb

Coding guidelines

Common rules for smart contract development.

Metadata

It is useful to use Version of smart contracts, it helps analyzing deployed contract. Besides versions it is useful to receive Name of smart contract, when the contract is not verified.

string public constant NAME = 'Unstoppable Whitelisted Minter';
string public constant VERSION = '0.1.0';

We agreed to use three-part version number. Semantic - {major}.{minor}.{patch}

Each smart contract update should lead version change.

Error messages

As a good practice reverting transaction must be with a message. We agreed to use error codes with <contract_name>: <error_code> naming convention.

contract_name allows to understand place where the error were thrown (eg Reslover)

error_code should be in uppercase with underscores. It have next structure: {noun}_{verb} (eg RECEIVER_IS_EMPTY)

Example of reverting code:

require(receiver != address(0x0), "WhitelistedMinter: RECEIVER_IS_EMPTY");