@decentdotland/ANS

? the ultimate web3 identity ?

Arweave Names Service

a Domain Names Service & De-Gravatar hybrid on the Arweave network

the protocol has no token yet, any associated token’s smart contract address is for testing purposes only

Motivation

Using and adopting names service accross Arweave ecosystem has several benefits:

  • faciliate of sharing addresses and sending AR/PSTs
  • create an economic cycle through domains financial activities (trading)
  • the ability to be used as social profiles contructors in Arweave based social networks (e.g. decent.land users)
  • a decentralized gravatar-like use-case

Terminology

  • label: equivalent to domain’s name in DNS, such as “decent” in decent.ar
  • user: the controller of the label
  • name: full ANS identifier such as “decent.ar” (label and ‘ar’ TLD sepperated by a dot)

Label’s string handling

ANS registry contract uses the NFKC (Normalization Form Compatibility Composition) unicode normalization algorithm and case folding to normalize the label’s string before comparing its length and allowed unicodes that are predefined in the contract. Then, the label get minted and stored according to its processed format (after normalization), following a Nameprep-like methodology.

Allowed unicodes The allowed unicode are those of the lowercase alphabetical characters in addition to integers from 0 to 9. Thus, usernames as known as labels are alphanumeric. The supported UTF-16 code units range from 48 to 57 (0 -> 9) and from 27 to 122 (a -> z).

The usage of the NFKC algorithm allows to reduce the visual security issues like:

  • visual spoofing
  • reduce visual confuses. examples
  • Punnycode and Script spoofing

Available Labels

ANS labels minting is based and limited using the arrangement without repitition of the conditional probability

Knowing that p is that arbitrary label string entered by the user that may be alphanumerical, and n is the total number of allowed characters which is 36 (26 characters from alphabetical characters and 10 characters from the allowed integers). For a better UX, labels of length equal to one are disallowed and cannot be minted, hence, that total number of labels that can ever exist is more than 43B labels. Breakdown:

label type label length label supply
ni 2 1260
san 3 42,840
yon 4 1,413,720
go 5 45,239,040
roku 6 1,402,410,240
nana 7 42,072,307,200
hachi 8 1,220,096,908,800
ku 9 34,162,713,446,400
juu 10 922,393,263,052,800
juuichi 11 23,982,224,839,372,800
juuni 12 599,555,620,984,320,000
juusan 13 14,389,334,903,623,680,000
juuyon 14 330,954,702,783,344,640,000
juugo 15 7,281,003,461,233,582,080,000

Label scarcity is determined by its length, the lower length it has, the more scarce it is. No renewal fees.

Label Asset Type

ANS labels are digital properties fully owned and managed by the user (aka label’s owner post-minting). ANS spec introduces a new asset / tokenized mechanism to the Arweave ecosystem that applies the profit sharing concept introduced in PSCs and PSTs.

ANS-labels are Profit Sharing Domains (PSD) for having the following features:

  • Basic token functionalities: ownership, transferability, & trade-ability.
  • The first in-contract, on-chain profit sharing mechanism through the PoR incentives model.
  • Domain Name Service: address resolving & DeGravatar.

Genesis Launch

ANS testnet has been launched distributing domains for hundred of addresses during the Genesis phase. Learn more about the airdrop here.

Interacting With ANS Contract

The docs.decent.land contains a set of guide and documentations explaining how to interact with the ANS smart contract.

ANS Metrics API

The ans-stats repository is an API for ANS data and statistics. API endpoint: ans-stats.decent.land

ANS-FOR-ALL

ans-for-all is a drop in module to utilize the ANS protocol in React apps. Check repo

Contributing

If you have a suggestion that would make this protocol or the API better, please fork the repository and create a pull request.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/xyz)
  3. Commit your Changes (git commit -m 'feat: abc-xyz')
  4. Push to the Branch (git push origin feature/xyz)
  5. Open a Pull Request

Contributions are greatly appreciated !

License

The project is licensed under the MIT license.

GitHub

View Github