# Library for FNS

**FNS** is Filecoin Name Service based on FEVM, developed by **Filfox Team**.  

**Homepage**: [https://fns.space](https://fns.space)  
**App**: [https://app.fns.space](https://app.fns.space)  
**Doc**: [https://fns-dao.gitbook.io/fns-doc](https://fns-dao.gitbook.io/fns-doc)

## Installation

```
yarn add @filfox/fnsjs ethers
```

## Getting Started

```
import FNS from '@filfox/fnsjs'
import { ethers } from 'ethers'

const fns = new FNS('calibration') // or 'mainnet'

// The fns instance has a default read-only provider, but of course, you can set your own provider :
const provider = new ethers.providers.JsonRpcProvider(RPC)
fns.setProvider(provider)

// If you are in a pure node script environment, you may need to use it like the following :
const FNS = require('@filfox/fnsjs')
const fns = new FNS('calibration') // or 'mainnet'
```

## fns methods

+ setProvider(provider: any)
+ getProvider()
+ setSigner(signer: any)
+ getSigner()
+ name(name: string): Name
+ address(address: string): Address
+ lookupAddress(addr: string): Promise<string>
+ getResolver(): string
+ getNameBase(name: string): Promise<object>
+ getNameAddrs(name: string): Promise<object>
+ getNameTexts(name: string): Promise<object>
+ getNameInfo(name: string): Promise<object>
+ getAvailable(name: string): Promise<boolean>
+ getPrice(name: string, months = 12, unit?: 'fil' | 'usd'): Promise<BigNumberish | string>
+ getRegistrant(name: string): Promise<string>
+ getExpires(name: string, format?: string): Promise<any>
+ getExpired(name: string): Promise<boolean>
+ getController(name: string): Promise<string>
+ getContent(name: string): Promise<string>
+ getText(name: string, key: string): Promise<object>
+ getAddrOf(name: string, coin: string): Promise<string>
+ getPrimaryName(addr: string): Promise<string>
+ getOwnershipNames(addr: string): Promise<string []>
+ register(name: string, owner: string, months: number): Promise<object>
+ renew(name: string, months: number): Promise<object>
+ transferControl(name: string, addr: string): Promise<object>
+ transferOwnership(name: string, to: string): Promise<object>
+ setController(name: string, addr: string): Promise<object>
+ setContent(name: string, content: string)
+ setText(name: string, key: string, val: string): Promise<object>
+ setTexts(name: string, texts: Record<string, string>): Promise<object>
+ setAddrOf(name: string, coin: string, addr: string): Promise<object>
+ setAddrs(name: string, addrMap: Record<string, string>): Promise<object>
+ setPrimaryName(name: string): Promise<object>
+ setSubName(name: string, subname: string, owner: string): Promise<object>

## fns.name() methods

+ getBase()  
+ getInfo()  
+ getText()  
+ getTexts()  
+ getAvailable()  
+ getPrice()  
+ getRegistrant()  
+ getController()  
+ getExpires()  
+ getExpired()  
+ getContent()  
+ getAddr()  
+ getAddrs()  
+ getAddrOf()  
+ setController()  
+ setContent()  
+ setText()  
+ setTexts()  
+ setAddrOf()  
+ setAddrs()  
+ setPrimaryName()  
+ setSubName()  
+ register()  
+ renew()  
+ transferControlTo()  
+ transferOwnershipTo()  

### getBase()

Method: getBase()  
Return: Promise&lt;object&gt;, get name base information

```
Example: 
fns.name('yamy.fil').getBase()
or
fns.getBase('yamy.fil')

Result: 
{
    name: 'yamy.fil',
    available: false,
    expires: '2024-05-04 07:21',
    expired: false,
    registrant: '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35',
    controller: '0x7e5b29792F4cAF463A7faADd028fCA53b6a2241F',
    resolver: '0xb28f7372f27dC2Ef104F2a3347FdcAaA86D2d3Cc'
}
```

### getInfo()

Method: getInfo()  
Return: Promise&lt;object&gt;, get name detail information

```
Example: 
fns.name('web3.fil').getInfo()
or
fns.getInfo('web3.fil')

Result: 
{
    name: 'yamy.fil',
    available: false,
    expires: '2024-05-04 07:21',
    expired: false,
    registrant: '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35',
    controller: '0x7e5b29792F4cAF463A7faADd028fCA53b6a2241F',
    resolver: '0xb28f7372f27dC2Ef104F2a3347FdcAaA86D2d3Cc',
    addrs: { 
    	fil: 'f4kxv6m7a7uoe6d3qsjokw4pzkogf6ojadqdn3dhi', 
    	eth: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', 
    	btc: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2', 
    	ltc: 'LdNFQrJLsCHW1zZKjGyPcqpiMuNvry7BUh', 
    	doge: 'D9yU9D8zqcRfvJSNXFfHefYnuPVaQA5M2N'
	},
    texts: {
            projectname: '',
            banner: '',
		filecoincid: 'bafybeigxj6o4gpyw5c3rhxbllyudkbld3ztt7kfq3qbrjjejbunevyd3zm',
		email: 'example@gmail.com',
		url: 'https://example.com',
		avatar: 'https://example.com/avatar.png',
		description: 'I am a software engineer with experience in blockchain development.',
		'com.twitter': '@example',
		'com.discord': 'example#1234',
		'com.reddit': 'u/example',
		'com.telegram': '@example',
		'com.github': 'example'
	},
    content: 'CONTENT'
}
```

### getAddrs()

Method: getAddrs()  
Return: Promise&lt;object&gt;, get all coins addresses

```
Example: 
fns.name('yamy.fil').getAddrs()
or
fns.getAddrs('yamy.fil')

Result:
{ 
    fil: 'f4kxv6m7a7uoe6d3qsjokw4pzkogf6ojadqdn3dhi', 
    eth: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', 
    btc: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2', 
    ltc: 'LdNFQrJLsCHW1zZKjGyPcqpiMuNvry7BUh', 
    doge: 'D9yU9D8zqcRfvJSNXFfHefYnuPVaQA5M2N'
}
```

### getTexts()

Method: getTexts()  
Return: Promise&lt;object&gt;, get all text informations

```
Example: 
fns.name('yamy.fil').getTexts()
or
fns.getTexts('yamy.fil')

Result:
{
      projectname: '',
      banner: '',
	filecoincid: 'bafybeigxj6o4gpyw5c3rhxbllyudkbld3ztt7kfq3qbrjjejbunevyd3zm',
	email: 'example@gmail.com',
	url: 'https://example.com',
	avatar: 'https://example.com/avatar.png',
	description: 'I am a software engineer with experience in blockchain development.',
	'com.twitter': '@example',
	'com.discord': 'example#1234',
	'com.reddit': 'u/example',
	'com.telegram': '@example',
	'com.github': 'example'
}
```

### getAvailable()

Method: getAvailable()  
Return: Promise&lt;boolean&gt;, get if available of the name

```
Example: 
fns.name('yamy.fil').getAvailable()
or
fns.getAvailable('yamy.fil')

Result:
false
```

### getPrice(months?: number)

Method: getPrice(months?: number, unit?: 'fil' | 'usd')  
Params: months: register or renew months, default by 12  
Return: Promise&lt;BigNumberish|string&gt;, get register or renew price

```
Example: 

fns.name('yamy.fil').getPrice(12)
or
fns.getPrice('yamy.fil', 12)

=> BigNumber { _hex: '0x0daef6dd95ac0000', _isBigNumber: true }

fns.name('yamy.fil').getPrice(12, 'fil')
or
fns.getPrice('yamy.fil', 12, 'fil')

=> 0.9859968

fns.name('yamy.fil').getPrice(12, 'usd')
or
fns.getPrice('yamy.fil', 12, 'usd')

=> 3.5241
```

### getRegistrant()

Method: getRegistrant()  
Return: Promise&lt;string&gt; get registrant of the name

```
Example:

fns.name('yamy.fil').getRegistrant()
or
fns.getRegistrant('yamy.fil')

Result:
0xf70f118432221a98fca961e65dd7303a8ba1fc76
```

### getExpires(format?: string)

Method: getExpires(format?: string)  
Params: format: time format, default by none  
Return: Promise&lt;string|number&gt; get expires time

```
Example:

fns.name('yamy.fil').getExpires()
or
fns.getExpires('yamy.fil')

=> 1719991260

fns.name('yamy.fil').getExpires('YYYY-MM-DD HH:mm')
or
fns.getExpires('yamy.fil', 'YYYY-MM-DD HH:mm')

=> 2024-07-03 07:21
```

### getExpired()

Method: getExpired()  
Return: Promise&lt;string&gt; get if a name has expired

```
Example:

fns.name('yamy.fil').getExpired()
or
fns.getExpired('yamy.fil')

Result:
false
```


### getController()

Method: getController()  
Return: Promise&lt;string&gt; get controller address

```
Example:

fns.name('yamy.fil').getController()
or
fns.getController('yamy.fil')

Result:
0x00ab1c3f84a2c48f1a2d3b7fca69445c39bc6883
```

### getContent()

Method: getContent()  
Return: Promise&lt;string&gt; get content stirng

```
Example:

fns.name('yamy.fil').getContent()
or
fns.getContent('yamy.fil')

Result:
CONTENT123
```

### getText(key: string)

Method: getText(key: string)  
Params: key: text key  
Return: Promise&lt;string&gt;, get text value of the key

```
Example:

fns.name('yamy.fil').getText('email')
or
fns.getText('yamy.fil', 'email')

Result:
470032665@web3.com
```

### getAddr()

Method: getAddr()  
Return: Promise&lt;string&gt; get fil address

```
Example:

fns.name('yamy.fil').getAddr()
or
fns.getAddr('yamy.fil')

Result:
f4kxv6m7a7uoe6d3qsjokw4pzkogf6ojadqdn3dhi
```

### getAddrOf(coin: string)

Method: getAddrOf(coin: string)  
Params: coin: The coin you want to query  
Return: Promise&lt;string&gt;, get coin address

```
Example:

fns.name('yamy.fil').getAddrOf('eth')
or
fns.getAddrOf('yamy.fil', 'eth')

Result:
0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35
```

### register(owner: string, months: number)

Method: register(owner: string, months: number)  
Params: owner: owner, months: number of months  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').register('0x00ab1c3f84a2c48f1a2d3b7fca69445c39bc6883', 1)
or
fns.getAddrOf('yamy.fil', '0x00ab1c3f84a2c48f1a2d3b7fca69445c39bc6883', 1)

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 334,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x0b791bd8', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x3a03af47530000', _isBigNumber: true },
      data: '0x5692a2cf00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000ab1c3f84a2c48f1a2d3b7fca69445c39bc68830000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000b28f7372f27dc2ef104f2a3347fdcaaa86d2d3cc00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000779616d79393939000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0x3268d7a2233bd6a43886ba21009427e40cb73568d5a3ceff17db356b50869815',
      v: 1,
      r: '0x5879adb69264352c6dc0cc420fdb61464771cbf935643fe40642eeb749d91638',
      s: '0x31a97c08bf0622f4efb642330749a3634d6297396dbd0be5f9bc9e1e8564c3a8',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### renew(months: number)

Method: renew(months: number)  
Params: months: the number of months you want to renew your name  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').renew(1)
or
fns.getAddrOf('yamy.fil', 1)

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### transferControlTo(addr: string)

Method: transferControlTo(addr: string)  
Params: addr: new controller  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').transferControlTo('0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')
or
fns.transferControl('yamy.fil', '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}

Tips:
- The purpose of this method is to transfer the controller of a name
- The method can only be called by registrant, otherwise an error will be thrown
```

### transferOwnershipTo(to: string)

Method: transferOwnershipTo(to: string)  
Params: to: new owner  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').transferOwnershipTo('0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')
or
fns.transferOwnership('yamy.fil', '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}

Tips:
- The purpose of this method is to transfer the ownership of a name 721 token
- The method can only be called by registrant, otherwise an error will be thrown
```

### setController(addr: string)

Method: setController(addr: string)  
Params: addr: controller address  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setController('0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')
or
fns.setController('yamy.fil', '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}

Tips:
- The purpose of this method is to transfer the controller of a name
- The method can only be called by controller, otherwise an error will be thrown
```

### setContent(content: string)

Method: setContent(content: string)  
Params: content: content you want to set  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setContent('CONTENT123')
or
fns.setContent('yamy.fil', 'CONTENT123')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### setText(key: string, val: string)

Method: setText(key: string, val: string)  
Params: key: the key to update | val: the value of the key  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setText('email', '470023552@web3.com')
or
fns.setText('yamy.fil', 'email', '470023552@web3.com')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```


### setTexts(texts: Record&lt;string, string&gt;)

Method: setTexts(texts: Record&lt;string, string&gt;)  
Params: texts: texts of object  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setTexts({ email: '470023552@web3.com', url: 'example.com', ... })
or
fns.setTexts('yamy.fil', { email: '470023552@web3.com', url: 'example.com', ... })

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### setAddrOf(coin: string, addr: string)

Method: setAddrOf(coin: string, addr: string)  
Params: coin: coin type name | addr: coin address  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setAddrOf('eth', '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')
or
fns.setAddrOf('yamy.fil', 'eth', '0x6FBfd1ee64Ae1c027eDa61c2e1FB975E18F68F35')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### setAddrs(addrMap: Record&lt;string, string&gt;)

Method: setAddrs(addrMap: Record&lt;string, string&gt;)  
Params: addrMap: addresses of coins  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setAddrs({ 
    fil: 'f4kxv6m7a7uoe6d3qsjokw4pzkogf6ojadqdn3dhi', 
    eth: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', 
    btc: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2', 
    ltc: 'LdNFQrJLsCHW1zZKjGyPcqpiMuNvry7BUh', 
    doge: 'D9yU9D8zqcRfvJSNXFfHefYnuPVaQA5M2N'
})
or
fns.setAddrs('yamy.fil', { 
    fil: 'f4kxv6m7a7uoe6d3qsjokw4pzkogf6ojadqdn3dhi', 
    eth: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', 
    btc: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2', 
    ltc: 'LdNFQrJLsCHW1zZKjGyPcqpiMuNvry7BUh', 
    doge: 'D9yU9D8zqcRfvJSNXFfHefYnuPVaQA5M2N'
})

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### setSubName(subname: string, owner: string)

Method: setSubName(subname: string, owner: string)  
Params: subname: subname | owner: name controller  
Return: Promise&lt;object&gt;

```
Example:

fns.name('yamy.fil').setSubName('api', '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883') => api.yamy.fil
or
fns.setSubName('yamy.fil', 'api', '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

### setPrimaryName()

Method: setPrimaryName()  
Return: Promise&lt;tx&gt;

```
Example:

fns.name('yamy.fil').setPrimaryName()
or
fns.setPrimaryName('yamy.fil')

Result:
{
      type: 2,
      chainId: 3141,
      nonce: 333,
      maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x59682fc8', _isBigNumber: true },
      gasPrice: null,
      gasLimit: BigNumber { _hex: '0x02ae6daa', _isBigNumber: true },
      to: '0xcf38A805f2F5f0b9E96cE6Cfb1059D5CDEDa5cf0',
      value: BigNumber { _hex: '0x0123e9e7cc790000', _isBigNumber: true },
      data: '0xacf1a84100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000000000479616d7900000000000000000000000000000000000000000000000000000000',
      accessList: [],
      hash: '0xe70413acde387ae543c33fcf4f3ee932e884129a07d3bfc039605fc0d67280f4',
      v: 0,
      r: '0x70967dd5779c2c3c3118a8be53858181e1e146f50f904903640d75d303fec31c',
      s: '0x44cefa8da2dc7a5cece13583b49a468610ebfd5fca9aef7a034d4d4a37e5d98d',
      from: '0x00AB1C3F84a2c48F1a2D3b7FcA69445c39bC6883',
      confirmations: 0,
      wait: [Function (anonymous)]
}
```

## fns.address() methods

+ getName()
+ getPrimaryName()
+ getOwnershipNames()

### getName()

Method: getName()  
Return: Promise&lt;string&gt;, get reverse resolve

```
Example: 
fns.address('0x00ab1c3f84a2c48f1a2d3b7fca69445c39bc6883').getName()
or
fns.address('f410facvryp4eulci6grnhn74u2kelq43y2edsyvmoca').getName()
or
fns.lookupAddress('0x00ab1c3f84a2c48f1a2d3b7fca69445c39bc6883')
or
fns.lookupAddress('f410facvryp4eulci6grnhn74u2kelq43y2edsyvmoca')

Result: 
web999.fil
```

### getPrimaryName()

Method: getPrimaryName()  
Return: Promise&lt;string&gt;, get primary name

```
Example: 
fns.address('0xf70f118432221a98fca961e65dd7303a8ba1fc76').getPrimaryName()
or
fns.getPrimaryName('0xf70f118432221a98fca961e65dd7303a8ba1fc76')

Result: 
testcontroller.fil
```

### getOwnershipNames()

Method: getOwnershipNames()  
Return: Promise&lt;string[]&gt;, get all ownership names 

```
Example:
fns.address('0xf70f118432221a98fca961e65dd7303a8ba1fc76').getOwnershipNames()
or
fns.getOwnershipNames('0xf70f118432221a98fca961e65dd7303a8ba1fc76')

Result:
[
    'testapps.fil',
    'helloc.fil',
    'hellod.fil',
    'hellof.fil',
    'ghfjkddfhjksajd.fil',
    'hellog.fil',
    'hahsdhhasd.fil',
    'hahsdhhasdsdasd.fil',
    'hahsdhhasdsdsdsdawdwds.fil'
]
```