How to resolve a .sol domain cross-chain?
The Solana Name Service (SNS) going cross-chain means that it is expanding its functionality beyond the Solana ecosystem, enabling users to export their domain names to alternative blockchains using the Wormhole bridge. This move aims to increase the utility and adoption of SNS, while also fostering collaboration and interoperability between different blockchain networks. By allowing SNS domains to be resolved on supported chains like EVM-based chains and Injective, SNS becomes more accessible to a wider range of developers and users, promoting the growth of the Solana ecosystem and showcasing its capabilities beyond its native environment.
EVM Chains
The Solana Name Service has been bridged to the following EVM chains:
-
BNB Testnet (deployed at
0x4d50e149bb3d8c889f4ccdfffba0ef8016168d92
) -
BNB Mainnet (deployed at
0xd1Ae42Ce34E6b7ab5B41dcc851424F3cF410BF16
) -
BASESepolia (deployed at
0xc0B286f45d2D5D825aD42DcF49CB9eA39899E2c3
) -
BASE (deployed at
0x63E2FADb57BEd8A4c9c3C5a4937e7611ec88421F
)
Solana domain names bridged on EVM chains can be resolved using the NPM package @bonfida/sns-warp-evm.
Installation
With Yarn:
yarn add @bonfida/sns-warp-evm
With NPM
npm i @bonfida/sns-warp-evm
Resolving a .sol domain
The following code can be used to resolve .sol domains on EVM chains
import { SupportedChains, SNS } from "@bonfida/sns-warp-evm";
/**
*
* BNB Example
*
**/
// The domain name to resolve
const domain = "mock3.sol";
// The chain on which to resolve the domain
const targetChain = SupportedChains.BNBMainnet;
const sns = new SNS(SupportedChains.BNBMainnet);
const resolved = await sns.resolveName(domain);
console.log(resolved); // <- 0x1D719d2dB763f905b1924F46a5185e001Dd93786
/**
*
* BASE Example
*
**/
const sns = new SNS(SupportedChains.BASESepolia);
const resolved = await sns.resolveName("12c8566b3e8ab8b9edac2ceab89be3bd.sol");
console.log(resolved); // <- 0x5f8901Aa3a42BCB53792CfCeDa66a7cf735Af6Db
Reverse look up
import { SupportedChains, SNS } from "@bonfida/sns-warp-evm";
import { namehash } from "@ethersproject/hash";
// The chain on which to perform the reverse lookup
const targetChain = SupportedChains.BNBMainnet;
const sns = new SNS(targetChain);
const nameHash = namehash("mock3.sol");
const resolved = await sns.resolveReverse(nameHash);
console.log(resolved); // <- mock3
Injective
The Solana Name Service has also been bridged to Injective.
- Injective Testnet (deployed at
inj1q79ujqyh72p43mhr2ldaly3x6d50rzp3354at3
) - Injective Mainnet (deployed at
inj1v7chmgm7vmuwldjt80utmw9c95jkrch979ps8z
)
Solana domain names bridged to Injective can be resolved using the NPM package @bonfida/sns-warp-injective.
SNS is also supported by the Leap Wallet Name Match package.
Installation
With Yarn:
yarn add @bonfida/sns-warp-injective
With NPM
npm i @bonfida/sns-warp-injective
Resolving a .sol domain
The following code can be used to resolve .sol domains on Injective
import { resolveName } from "@bonfida/sns-warp-injective";
import { Network } from "@injectivelabs/networks";
// The domain name to resolve
const domain = "bonfida.sol";
// The network on which to resolve the domain
const network = Network.Mainnet;
const resolved = await resolveName(domain, network);
console.log(resolved); // <- inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49