Resolution
Resolution is a library for interacting with blockchain domain names. It can be
used to retrieve
payment addresses,
IPFS hashes for
decentralized websites,
and GunDB usernames for
decentralized chat.
Resolution is primarily built and maintained by
Unstoppable Domains.
Resolution supports decentralized domains across three main zones:
For more information, see our detailed
API Referrence.
Installing Resolution
Resolution can be installed with either yarn
or npm
.
yarn add @unstoppabledomains/resolution
npm install @unstoppabledomains/resolution --save
If you're interested in resolving domains via the command line, see our
CLI section.
Using Resolution
Create a new project.
mkdir resolution && cd $_
yarn init -y
yarn add @unstoppabledomains/resolution
Look up a domain's crypto address
Create a new file in your project, address.js
.
const {default: Resolution} = require('@unstoppabledomains/resolution');
const resolution = new Resolution();
function resolve(domain, currency) {
resolution
.addr(domain, currency)
.then((address) => console.log(domain, 'resolves to', address))
.catch(console.error);
}
function resolveMultiChain(domain, currency, chain) {
resolution
.multiChainAddr(domain, currency, chain)
.then((address) => console.log(domain, 'resolves to', address, version))
.catch(console.error);
}
resolve('brad.crypto', 'ETH');
resolve('brad.zil', 'ZIL');
resolveMultiChain('brad.crypto', 'USDT', 'ERC20');
resolveMultiChain('brad.crypto', 'USDT', 'OMNI');
Execute the script.
$ node address.js
brad.crypto resolves to 0x8aaD44321A86b170879d7A244c1e8d360c99DdA8
brad.zil resolves to zil1yu5u4hegy9v3xgluweg4en54zm8f8auwxu0xxj
Find the IPFS hash for a decentralized website
Create a new file in your project, ipfs_hash.js
.
const {default: Resolution} = require('@unstoppabledomains/resolution');
const resolution = new Resolution();
function resolveIpfsHash(domain) {
resolution
.ipfsHash(domain)
.then((hash) =>
console.log(
`You can access this website via a public IPFS gateway: https://gateway.ipfs.io/ipfs/${hash}`,
),
)
.catch(console.error);
}
resolveIpfsHash('homecakes.crypto');
Execute the script.
$ node ipfs_hash.js
You can access this website via a public IPFS gateway: https://gateway.ipfs.io/ipfs/QmVJ26hBrwwNAPVmLavEFXDUunNDXeFSeMPmHuPxKe6dJv
Find a custom record
Create a new file in your project, custom-resolution.js
.
const {default: Resolution} = require('@unstoppabledomains/resolution');
const resolution = new Resolution();
function resolveCustomRecord(domain, record) {
resolution
.records(domain, [record])
.then((value) => console.log(`Domain ${domain} ${record} is: ${value}`))
.catch(console.error);
}
resolveCustomRecord('homecakes.crypto', 'custom.record.value');
Command Line Interface
CLI support was removed from the Resolution library starting from version 6.0. Please use the standalone CLI tool.
Default Ethereum Providers
Resolution provides zero-configuration experience by using built-in
production-ready Infura endpoint by default.
Default Ethereum provider is free to use without restrictions and rate-limits
for UNS
resolution.
Default provider can be changed by changing constructor options
new Resolution(options)
or by using one of the factory methods:
Resolution.infura()
Resolution.fromWeb3Version1Provider()
Resolution.fromEthersProvider()
- etc.
To see all constructor options and factory methods check
Unstoppable API reference.
Autoconfiguration of blockchain network
In some scenarios system might not be flexible enough to easy distinguish
between various Ethereum testnets on compile time. For this case Resolution
library provide a special async constructor which should be waited for
await Resolution.autonetwork(options)
. This method makes a JSON RPC
"net_version" call to the provider to get the network id.
This method configures only Uns. Zns is supported only on Zilliqa mainnet which
is going to be used in any cases. You can provide a configured provider or a
blockchain url as in the following example:
await Resolution.autonetwork({
uns: {provider},
});
Error Handling
When resolution encounters an error it returns the error code instead of
stopping the process. Keep an eye out for return values like RECORD_NOT_FOUND
.
Development
Use these commands to set up a local development environment (macOS Terminal
or Linux shell).
-
Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.36.0/install.sh | bash
-
Install concrete version of node.js
nvm install 12.12.0
-
Install yarn
npm install -g yarn
-
Clone the repository
git clone https://github.com/unstoppabledomains/resolution.git
cd resolution
-
Install dependencies
yarn install
Internal config
To update:
- Network config:
$ yarn network-config:pull
- Resolver keys:
$ yarn resolver-keys:pull
- Both configs:
$ yarn config:pull
Free advertising for integrated apps
Once your app has a working Unstoppable Domains integration,
register it here. Registered
apps appear on the Unstoppable Domains
homepage and
Applications page — putting your app in
front of tens of thousands of potential customers per day.
Also, every week we select a newly-integrated app to feature in the Unstoppable
Update newsletter. This newsletter is delivered to straight into the inbox of
~100,000 crypto fanatics — all of whom could be new customers to grow your
business.
Get help
Join our discord community and ask
questions.