Ethereum Name Service

The Ethereum Name Service (ENS) provides a human readable names to identify addresses on the Ethereum network. It is similar to the internet’s domain name service (DNS) which provides human-readable domain names which are mapped to IP addresses.

In the case of ENS, the addresses are either wallet or smart contract addresses.

E.g. instead of using the wallet address 0x19e03255f667bdfd50a32722df860b1eeaf4d635, you can use web3j.eth.

Usage in web3j

You can use ENS names anywhere you wish to transact in web3j. In practice this means, in smart contract wrappers, when you load them, such as:

YourSmartContract contract = YourSmartContract.load(
        "0x<address>|<ensName>", web3j, credentials, GAS_PRICE, GAS_LIMIT);

Also, when performing Ether transfers, such as using the command line tools:

$ web3j wallet send <walletfile> 0x<address>|<ensName>

web3j implementation

Behind the scenes, whenever you using web3j’s transaction managers (which are derived from the ManagedTransaction class), the EnsResolver is invoked to perform an ENS lookup if applicable.

The resolution process is as follows:

  • Check to see if our Ethereum node is fully synced

  • If not fail

  • If it is synced, check the timestamp on the most recent block it has.
    • If it’s more than 3 minutes old, fail.
    • Otherwise perform the lookup

If you need to change the threshold parameter of what constitutes being synced to something other then 3 minutes, this can be done via the setSyncThreshold method in the ManagedTransaction class.

Unicode Technical Standard (UTS) #46

UTS #46 is the standard used to sanitise input on domain names. The web3j ENS implementation peforms this santisation on all inputs before attempting resolution. For details of the implementation, refer to the NameHash class.

Registering domain names

Currently, web3j only supports the resolution of ENS domains. It does not support the registration. For instructions on how to do this, refer to the ENS quickstart.