0.3.2 • Published 3 months ago

@web3-name-sdk/core v0.3.2

Weekly downloads
-
License
MIT
Repository
-
Last release
3 months ago

web3-name-sdk

Web3 Name SDK is an universal web3 identity solution for domain name resolution. Developers can easily get access to .eth, .bnb, .arb, .lens, .crypto names and more.

Get Started

Developers can resolve web3 domain name or reverse resolve address with web3 name SDK with zero configuration.

Install

npm install @web3-name-sdk/core viem@^2.15.1

If you are using next.js, please add the following configuration in your next.config.js in order to transpile commonjs dependencies:

const nextConfig = {
  transpilePackages: ['@web3-name-sdk/core'],
}

Quick Start

1. Setup client

import { createWeb3Name } from '@web3-name-sdk/core'

const web3name = createWeb3Name()

2. Resolve a domain name

You can get address from domain name with a single request:

const address = await web3name.getAddress('spaceid.bnb')
// expect: '0xb5932a6b7d50a966aec6c74c97385412fb497540'

const address = await web3name.getAddress('bts_official.lens')
// expect: '0xd80efa68b50d21e548b9cdb092ebc6e5bca113e7'

const address = await web3name.getAddress('beresnev.crypto')
// expect: '0x6ec0deed30605bcd19342f3c30201db263291589'

const address = await web3name.getAddress('registry.gno')
// expect: '0x2886D6792503e04b19640C1f1430d23219AF177F'
Multichain address resolution

Domain resolution for other chains can be provided by adding coinType param to getAddress().

import { convertEVMChainIdToCoinType } from '@ensdomains/address-encoder'
const address = await web3name.getAddress('gnome.gno', {coinType: convertEVMChainIdToCoinType(1)})
// expect: 0x4348d45967552d0176d465170b7375ed22dc627b

3. Resolve an address

There are optional parameters in the method to select your target chain or TLD (top-level domain).

By providing chain IDs, you can resolve addresses on selected chains and get an available domain name from all TLDs deployed on these chains.

// Resolve an address from Gnosis
const name = await web3name.getDomainName({
  address: '0xfceec24912535a47c0cba436977537ad225a2562',
  queryChainIdList: [100],
})
// expect: genome.gno
// Batch resolve address from Gnosis
const names = await web3name.batchGetDomainName({
  addressList: ['0x2886D6792503e04b19640C1f1430d23219AF177F','0xfceec24912535a47c0cba436977537ad225a2562'],
  queryChainIdList: [100],
})

By providing TLDs, address can be resolved from the selected TLDs and get an available TLD primary name.

// Resolve an address from .gno TLD
const name = await web3name.getDomainName({
  address: '0x2886D6792503e04b19640C1f1430d23219AF177F',
  queryTldList: ['gno'],
})
// expect: gnosischains.gno
// Batch resolve address from .gno TLD
const names = await web3name.batchGetDomainName({
  addressList: ['0x2886D6792503e04b19640C1f1430d23219AF177F','0xfceec24912535a47c0cba436977537ad225a2562'],
  queryChainIdList: ['gno'],
})

4. Batch resolve addresses

You need to provide your target chain client and then provide optional parameters in the method. The method returns an list containing the address and its corresponding domain.

const res = await web3Name.batchGetDomainNameByTld({
  addressList: ['0x2886d6792503e04b19640c1f1430d23219af177f', '0xb5932a6b7d50a966aec6c74c97385412fb497540'],
  queryTld: 'bnb',
})
// expect: [{address: '0x2886d6792503e04b19640c1f1430d23219af177f', domain: 'goodh.bnb'}, {address: '0xb5932a6b7d50a966aec6c74c97385412fb497540', domain: 'spaceid.bnb'}]

const res = await web3Name.batchGetDomainNameByChainId({
  addressList: ['0x77777775b611f0f3d90ccb69ef425a62b35afa7c', '0x3506fbe85e19bf025b228ec58f143ba342c3c608'],
  queryChainId: 42_161,
})
// expect: [{address: '0x77777775b611f0f3d90ccb69ef425a62b35afa7c', domain: 'megantrhopus.arb'}, {address: '0x3506fbe85e19bf025b228ec58f143ba342c3c608', domain: 'idgue.arb'}]

5. Record

Domain text records can be fetched by providing domain name and the key. For example, the avatar record of spaceid.bnb is returned from this method given key name avatar:

const record = await web3name.getDomainRecord({ name: 'spaceid.bnb', key: 'avatar' })

6. Metadata

Domain metadata can be fetched by SDK directly.

// requesting
const metadata = await web3Name.getMetadata({ name: 'public.gno' })

Non-EVM name services

As an all-in-one domain name SDK, non-EVM web3 domain name services are also included. Now we support SNS (Solana Name Service, .sol), Sei Name Service (.sei) and Injective Name Service (.inj).

1. Solana Name Service (.sol)

Install additional corresponding dependencies for Solana environment:

npm install @solana/web3 @bonfida/spl-name-service

Create client and query domains:

import { createSolName } from '@web3-name-sdk/core/solName'

// recommended to provide a private Solana RPC, as the official one is prone to restrictions.
const web3Name = createSolName({rpcUrl: 'http://....'})
const domain = await web3Name.getDomainName({
  address: 'HKKp49qGWXd639QsuH7JiLijfVW5UtCVY4s1n2HANwEA',
}) // expect: bonfida

2. Sei Name Service (.sei)

Install additional corresponding dependencies for Sei environment:

npm install @sei-js/core @siddomains/sei-sidjs

Create client and query domains:

import { createSeiName } from '@web3-name-sdk/core/seiName'

const web3Name = createSeiName()
const domain = await web3Name.getDomainName({
  address: 'sei1tmew60aj394kdfff0t54lfaelu3p8j8lz93pmf',
}) // expect: allen.sei

3. Injective Name Service (.inj)

Install additional corresponding dependencies for Injective environment:

npm install @siddomains/injective-sidjs '@injectivelabs/networks' '@injectivelabs/ts-types'

Create client and query domains:

import { createInjName } from '@web3-name-sdk/core/injName'

const web3Name = createInjName()
const domain = await web3Name.getDomainName({
  address: 'inj10zvhv2a2mam8w7lhy96zgg2v8d800xcs7hf2tf',
}) // expect: testtest.inj

Use your own RPC

We are using popular public RPC services by default to make it easier to use. But in some cases developers may prefer to use arbitrary RPC, so we provide optional parameter rpcUrl for each function that allows developers to use their own RPC to make requests.

For example, you can put custom rpcUrl as a parameter in getAddress function.

const web3name = createWeb3Name({rpcUrl: 'eth mainnet rpc url'})

// Use custom RPC url (https://arb1.arbitrum.io/rpc)
const address = await web3name.getAddress('registry.arb', {
  rpcUrl: 'https://arb1.arbitrum.io/rpc',
})
// expect: '0x8d27d6235d9d8EFc9Eef0505e745dB67D5cD2918'

For other functions, it's also possible to have a custom rpcUrl in the request.

// Use custom RPC url (https://arb1.arbitrum.io/rpc)
const address = await web3name.getMetaData('registry.arb', {
  rpcUrl: 'https://arb1.arbitrum.io/rpc',
})
// expect: '0x8d27d6235d9d8EFc9Eef0505e745dB67D5cD2918'
0.3.3-beta.9

3 months ago

0.3.3-beta.7

3 months ago

0.3.3-beta.8

3 months ago

0.3.3-beta.1

3 months ago

0.3.3-beta.2

3 months ago

0.3.3-beta.0

3 months ago

0.3.3-beta.5

3 months ago

0.3.3-beta.6

3 months ago

0.3.3-beta.3

3 months ago

0.3.3-beta.4

3 months ago

0.3.2

6 months ago

0.3.1

6 months ago

0.3.0-beta3

7 months ago

0.3.0

7 months ago

0.3.0-beta

7 months ago

0.3.0-beta2

7 months ago

0.2.1-beta

11 months ago

0.2.0-beta

11 months ago

0.2.2-beta3

11 months ago

0.2.2-beta2

11 months ago

0.2.0

11 months ago

0.2.2-beta

11 months ago

0.1.18

1 year ago

0.1.17

1 year ago

0.1.16

1 year ago

0.1.14

1 year ago

0.1.15

1 year ago

0.1.13

2 years ago

0.1.11

2 years ago

0.1.12

2 years ago

0.1.10

2 years ago

0.1.9

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.0.1-beta.15

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.1-beta.14

2 years ago

0.0.1-beta.13

2 years ago

0.0.1-beta.12

2 years ago

0.0.1-beta.11

2 years ago

0.0.1-beta.10

2 years ago

0.0.1-beta.9

2 years ago

0.0.1-beta.8

2 years ago

0.0.1-beta.7

2 years ago

0.0.1-beta.6

2 years ago

0.0.1-beta.5

2 years ago

0.0.1-beta.4

2 years ago

0.0.1-beta.3

2 years ago

0.0.1-beta-3

2 years ago

0.0.1-beta.2

2 years ago

0.0.1-beta.1

2 years ago

0.0.1-beta.0

2 years ago