﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Get Started with web3 Development Easily Based on Ethereum Using FMZ (1)</title>
  <id>~/topic/25639/get-started-with-web3-development-easily-based-on-ethereum-using-fmz-(1)/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T10:55:21Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=25639" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/79959/</id>
    <title type="text">EtherEaseWithFMZ Tutorial &amp;gt; Get started with web3 development based on Ethereum using FMZ easily Eth...</title>
    <published>2024-03-29T05:14:50Z</published>
    <updated>2024-03-29T05:14:50Z</updated>
    <author>
      <name>FMZ Quant</name>
      <uri>https://stocksharp.com/users/185929/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;b&gt;&lt;span style="font-size:140%"&gt;EtherEaseWithFMZ Tutorial&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;gt; Get started with web3 development based on Ethereum using FMZ easily&lt;br /&gt;&lt;br /&gt;Ethereum is a smart contract platform based on blockchain technology, which provides a decentralized way to write and deploy smart contracts. Smart contracts are a special type of computer program that can automatically execute on the blockchain and implement various business logic without the need for trusting third parties.&lt;br /&gt;&lt;br /&gt;FMZ Quant Trading Platform (FMZ.COM) provides an easy-to-use API, allowing developers to interact more easily with the Ethereum blockchain and its ecosystem. It achieves access to decentralized exchanges (DEX), obtains on-chain data, sends transactions, and other functions.&lt;br /&gt;&lt;br /&gt;In this tutorial, the examples are written in ```JavaScript``` language, the testing environment uses both **Ethereum mainnet** and **Goerli testnet**. And you can also view the API interfaces and related descriptions, code examples used in the tutorial in FMZ platform&amp;#39;s API documentation.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;b&gt;FMZ Getting Started&lt;/b&gt;&lt;br /&gt;Before learning to use the FMZ Quant Trading Platform, we need to familiarize ourselves with a few basic concepts:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1. FMZ Quant Trading Platform Architecture&lt;/em&gt;&lt;br /&gt;After registering and logging in on the FMZ Quant Trading Platform official website (https://www.fmz.com), you can use various functions of the platform. The FMZ website is the management end of the whole system, and user-written programs run on the docker actually. The docker software program can be deployed on various devices, such as servers, computers, etc. When a user writes a program and creates a running instance on the FMZ website, the FMZ platform will communicate with the docker and start a program instance on it.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;2. Docker&lt;/em&gt;&lt;br /&gt;If you want to run a program instance, you must deploy a docker. The deployment of the docker is also very simple, and there are deployment tutorials on the platform. You can also use the &amp;#39;One-click Deployment&amp;#39; provided by FMZ to deploy automatically on servers rented on behalf of FMZ.&lt;br /&gt;&lt;br /&gt;- Deploy docker on personal devices&lt;br /&gt;&lt;br /&gt;You can deploy and run the docker program on servers, personal computers and other devices, as long as the network is normal (need to be able to access the corresponding target, such as a certain exchange interface, node address, etc.). The main steps of deployment are:&lt;br /&gt;&lt;br /&gt;  1. Log in or open the device where the docker program is to be deployed, such as **logging into a server** or **turning on a computer to enter the operating system**.&lt;br /&gt;  2. Download the corresponding version of the docker program (depending on the device operating system), download page: &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADHZKb-RfbDOdB_w3dJgQKtJmF1mN-qSlvrIMuHUnqFcA" title="https://www.fmz.com/m/add-node
"&gt;https://www.fmz.com/m/add-node
&lt;/a&gt;&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149788
" title="https://stocksharp.com/file/149788
"&gt;https://stocksharp.com/file/149788
&lt;/a&gt;&lt;br /&gt;  3. What you downloaded is a compressed package, need to decompress.&lt;br /&gt;  4. Run the docker program, the docker program is an executable file called ```robot```. Configure the docker communication address, which is unique to each FMZ account, after logging in to FMZ, you can view your own address at ```https://www.fmz.com/m/add-node``` page (i.e., ```./robot -s node.fmz.com/xxxxx``` this string of addresses, where the content at ```xxxxx``` position is different for each FMZ account). Finally, you need to enter the password of your FMZ account. After configuring these settings, run the docker program.&lt;br /&gt;&lt;br /&gt;- Use FMZ platform&amp;#39;s &amp;quot;One-Click Deployment&amp;quot; function&lt;br /&gt;&lt;br /&gt;  Add a docker page on the FMZ platform, address: ```https://www.fmz.com/m/add-node```&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149789
" title="https://stocksharp.com/file/149789
"&gt;https://stocksharp.com/file/149789
&lt;/a&gt;&lt;br /&gt;&lt;em&gt;3. Debugging Tool&lt;/em&gt;&lt;br /&gt;FMZ Quant Trading Platform provides a free debugging tool that supports ```JavaScript```, ```TypeScript```, and the page is: &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADHZKb-RfbDOdB_w3dJgQKtljPQEcZ_t05nTZclK3sRzA" title="https://www.fmz.com/m/debug. "&gt;https://www.fmz.com/m/debug. &lt;/a&gt;Because creating instances to run is billed. During the initial learning period, you can use this debugging tool for testing and learning. Except for the maximum running time limit of 3 minutes, there is no difference between using the debugging tool and creating an instance to run.&lt;br /&gt;&lt;br /&gt;When using the ```TypeScript``` language, you need to write ```// @ts-check``` on the first line of code to switch to ```TypeScript``` mode; if not switched, the default is ```JavaScript``` language.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;4. Platforms&lt;/em&gt;&lt;br /&gt;On FMZ, &amp;quot;Platform&amp;quot; is a general concept. For CEX exchanges, it refers to a specific exchange account configuration. For web3, this exchange refers to a configuration information that includes node address and private key configuration.&lt;br /&gt;&lt;br /&gt;In the logged-in state of FMZ platform, at ```https://www.fmz.com/m/add-platform``` page, you can configure exchange information, where the exchange is a general concept.&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149793
" title="https://stocksharp.com/file/149793
"&gt;https://stocksharp.com/file/149793
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select ```Web3```, configure RPC node address, configure private key, you can click the lower right corner &amp;quot;Sensitive information will be stored encrypted&amp;quot; to view the security mechanism.&lt;br /&gt;&lt;br /&gt;Nodes can be self-built nodes or nodes provided by node service providers. There are many node service providers, such as: [Infura](https://app.infura.io/login). After registration, you can view the node address of your own account. Both mainnet and testnet are available, which is quite convenient. Configure this node address in the ```Rpc Address``` control shown in the above figure. The label can be named by yourself to distinguish between configured exchange objects.&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149792
" title="https://stocksharp.com/file/149792
"&gt;https://stocksharp.com/file/149792
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the picture, ```https://mainnet.infura.io/v3/xxxxxxxxxxxxx``` is the private Infura ETH mainnet RPC node address.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:140%"&gt;Interact with Ethereum by using FMZ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;After deploying the docker program and configuring the exchange object, you can use FMZ.COM&amp;#39;s &amp;quot;Debugging Tool&amp;quot; for testing. Call Ethereum RPC methods and interact with Ethereum, in addition to the several RPC methods listed and introduced in this chapter, other RPC methods can be found by consulting materials, such as &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAAAZ4raNq6xr84KUx1fvz_vBeb-t1iwMMyvn0IqJb5nCZm44MQa1gJJuJ8C2wUz9P0M" title="https://www.quicknode.com/docs.
"&gt;https://www.quicknode.com/docs.
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We list a few simple examples, starting from the basics. For various languages ​​and tools, there are ways to access web3, as shown in the picture:&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149790
" title="https://stocksharp.com/file/149790
"&gt;https://stocksharp.com/file/149790
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On FMZ, RPC method calls are also encapsulated, and these functions are encapsulated in the FMZ API function ```exchange.IO```. The calling method is ```exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, ...)```. The first parameter is fixed to ```&amp;quot;api&amp;quot;```, the second parameter is fixed to ```&amp;quot;eth&amp;quot;```, and other parameters depend on the specific RPC method being called.&lt;br /&gt;&lt;br /&gt;For output information, we will use the ```Log``` function of the FMZ platform. The ```Log``` function can accept multiple parameters and then output them in the log area of ​​the &amp;quot;Debug Tool&amp;quot; or &amp;quot;Bot&amp;quot; page on the FMZ platform. The &amp;quot;Debug Tool&amp;quot; page will be our main testing tool.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;eth_getBalance&lt;/b&gt;&lt;br /&gt;The ```eth_getBalance``` method of Ethereum is used to query the ETH balance of an address on Ethereum, and this method requires two parameters.&lt;br /&gt;&lt;br /&gt;- Address to be queried.&lt;br /&gt;- Label, we usually use &amp;quot;latest&amp;quot;.&lt;br /&gt;Let&amp;#39;s check the Ethereum founder ```Vitalik Buterin```&amp;#39;s ETH wallet address, the known address is: ```0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045```.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let ethBalance = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getBalance&amp;quot;, &amp;quot;0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&amp;quot;, &amp;quot;latest&amp;quot;)&lt;br /&gt;    Log(&amp;quot;ethBalance:&amp;quot;, ethBalance)&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Already deployed the docker (in the picture: linux/amd64 ...) and configured the exchange object (in the picture: Web3 test), testing code in debugging tool:&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149791
" title="https://stocksharp.com/file/149791
"&gt;https://stocksharp.com/file/149791
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click the &amp;quot;Execute&amp;quot;&amp;#39; button to run the code and display the results:&lt;br /&gt;&lt;br /&gt;&amp;gt; ethBalance: 0x117296558f185bbc4c6&lt;br /&gt;&lt;br /&gt;The ```log``` function prints out the ```ethBalance``` variable value as: ```0x117296558f185bbc4c6```, which is a string type. It is **the hexadecimal value of the ETH balance** in ```wei``` units, with ```1e18 wei``` being equal to 1```ETH```. Therefore, it needs to be converted to become a readable decimal ETH balance.&lt;br /&gt;&lt;br /&gt;Converting ```ethBalance``` into readable data:&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let ethBalance = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getBalance&amp;quot;, &amp;quot;0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&amp;quot;, &amp;quot;latest&amp;quot;)&lt;br /&gt;    Log(&amp;quot;ethBalance:&amp;quot;, ethBalance)&lt;br /&gt;    &lt;br /&gt;    // Converting ethBalance into readable data&lt;br /&gt;    let vitalikEthBalance = parseInt(ethBalance.substring(2), 16) / 1e18&lt;br /&gt;    Log(&amp;quot;vitalikEthBalance:&amp;quot;, vitalikEthBalance)&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Search on ```https://etherscan.io/```: &lt;br /&gt;&lt;a href="https://stocksharp.com/file/149796
" title="https://stocksharp.com/file/149796
"&gt;https://stocksharp.com/file/149796
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, due to the precision problem of the language itself, there will be deviations in this way of processing. Therefore, FMZ platform has built-in two functions for data processing:&lt;br /&gt;&lt;br /&gt;- BigInt : Convert hexadecimal string to BigInt object.&lt;br /&gt;- BigDecimal : Convert numeric type objects into computable BigDecimal objects.&lt;br /&gt;&lt;br /&gt;Adjust the code again:&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let ethBalance = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getBalance&amp;quot;, &amp;quot;0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&amp;quot;, &amp;quot;latest&amp;quot;)&lt;br /&gt;&lt;br /&gt;    // The precision unit of ETH is 1e18&lt;br /&gt;    let ethDecimal = 18&lt;br /&gt;    Log(&amp;quot;vitalikEthBalance:&amp;quot;, Number((BigDecimal(BigInt(ethBalance)) / BigDecimal(Math.pow(10, ethDecimal))).toString()))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;&amp;gt; vitalikEthBalance: 5149.6244846875215&lt;br /&gt;&lt;br /&gt;&lt;b&gt;eth_chainId&lt;/b&gt;&lt;br /&gt;```eth_chainId``` and ```net_version``` have similar purposes, so they are tested together. Both of these functions return the Id of the blockchain that the current RPC node is connected to, with the difference being that ```net_version``` returns a decimal Id and ```eth_chainId``` returns a hexadecimal Id.&lt;br /&gt;&lt;br /&gt;Network name corresponding to chainId&lt;br /&gt;&lt;br /&gt;```&lt;br /&gt;1 - ethereum mainnet&lt;br /&gt;2 - morden testnet (deprecated)&lt;br /&gt;3 - ropsten testnet&lt;br /&gt;4 - rinkeby testnet&lt;br /&gt;5 - goerli testnet&lt;br /&gt;11155111 - sepolia testnet&lt;br /&gt;10 - optimism mainnet&lt;br /&gt;69 - optimism kovan testnet&lt;br /&gt;42 - kovan testnet&lt;br /&gt;137 - matic/polygon mainnet&lt;br /&gt;80001 - matic/polygon mumbai testnet&lt;br /&gt;250 - fantom mainnet&lt;br /&gt;100 - xdai mainnet&lt;br /&gt;56 - bsc mainnet&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Test with the configured Ethereum testnet ```goerli``` node:&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let netVersionId = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;net_version&amp;quot;)&lt;br /&gt;    let ethChainId = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_chainId&amp;quot;)&lt;br /&gt;&lt;br /&gt;    Log(&amp;quot;netVersionId:&amp;quot;, netVersionId)&lt;br /&gt;    Log(&amp;quot;ethChainId:&amp;quot;, ethChainId, &amp;quot; , conversion:&amp;quot;, parseInt(ethChainId.substring(2), 16))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;&lt;b&gt;eth_gasPrice&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Call the ```eth_gasPrice``` method to query the current ```gas price``` on the chain.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function toAmount(s, decimals) {&lt;br /&gt;    return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    let gasPrice = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_gasPrice&amp;quot;)&lt;br /&gt;    Log(&amp;quot;gasPrice:&amp;quot;, gasPrice, &amp;quot; , conversion:&amp;quot;, toAmount(gasPrice, 0))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;Here we write a function to convert the hexadecimal string into a readable numerical value: ```toAmount```. In addition, note that the unit of ```gasPrice``` is ```wei```, so pass the value 0 to the real parameter corresponding to the formal parameter ```decimals```.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;eth_blockNumber&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;```&amp;quot;eth_blockNumber``` is used to query the block height.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function toAmount(s, decimals) {&lt;br /&gt;    return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    let blockNumber = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_blockNumber&amp;quot;)&lt;br /&gt;    Log(toAmount(blockNumber, 0))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Run in debugging tool:&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149794
" title="https://stocksharp.com/file/149794
"&gt;https://stocksharp.com/file/149794
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Search on ```https://etherscan.io/```:&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149795
" title="https://stocksharp.com/file/149795
"&gt;https://stocksharp.com/file/149795
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;eth_getBlockByNumber&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Query block information.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let blockNumber = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_blockNumber&amp;quot;)    &lt;br /&gt;    Log(blockNumber)&lt;br /&gt;    let blockMsg = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getBlockByNumber&amp;quot;, blockNumber, true)&lt;br /&gt;    Log(typeof(blockMsg), blockMsg)&lt;br /&gt;    &lt;br /&gt;    // Due to the excessive content of Log output, it will be truncated automatically, so traverse each field of the returned block information and print them one by one&lt;br /&gt;    for (let key in blockMsg) {&lt;br /&gt;        Log(&amp;quot;key:&amp;quot;, key, &amp;quot;, val:&amp;quot;, blockMsg[key])&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Executing in the &amp;quot;Debugging Tool&amp;quot; can obtain the following information:&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149797
" title="https://stocksharp.com/file/149797
"&gt;https://stocksharp.com/file/149797
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:140%"&gt;Read contract information&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Many smart contract applications run on Ethereum, and ```ENS``` is one of them. ```ENS```, or Ethereum Name Service, is a decentralized domain name resolution service based on the Ethereum blockchain.&lt;br /&gt;Do you remember the example in the tutorial where we checked the balance of Ethereum founder Vitalik Buterin&amp;#39;s wallet? One of Vitalik Buterin&amp;#39;s wallet addresses is: ```0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045```. So how do we know the address? In fact, it can be queried through the ```ENS``` smart contract using an intuitive name ```vitalik.eth```.&lt;br /&gt;&lt;br /&gt;The following content in this chapter uses Ethereum mainnet environment, according to the ```ENS``` documentation, ```Hashing Names``` are required for querying Ethereum domain names. Use the following code to process ```vitalik.eth```.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function nameHash(name) {&lt;br /&gt;    if (name == &amp;quot;&amp;quot;) {&lt;br /&gt;        return &amp;quot;0000000000000000000000000000000000000000000000000000000000000000&amp;quot;&lt;br /&gt;    } else {&lt;br /&gt;        let arr = name.split(&amp;quot;.&amp;quot;)&lt;br /&gt;        let label = arr[0]&lt;br /&gt;        &lt;br /&gt;        arr.shift()&lt;br /&gt;        let remainder = arr.join(&amp;quot;.&amp;quot;)&lt;br /&gt;        return Encode(&amp;quot;sha3.keccak256&amp;quot;, &amp;quot;hex&amp;quot;, &amp;quot;hex&amp;quot;, nameHash(remainder) + Encode(&amp;quot;sha3.keccak256&amp;quot;, &amp;quot;raw&amp;quot;, &amp;quot;hex&amp;quot;, label))&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;In the above code example, we saw another unfamiliar function ```Encode```. This function is an API function of the FMZ platform and is specifically used for encoding operations on the FMZ platform. The function supports multiple encoding methods and various hash algorithms.&lt;br /&gt;```&lt;br /&gt;Encode(algo, inputFormat, outputFormat, data, keyFormat, key string)&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;According to the description in the ENS document, use the ```sha3.keccak256``` algorithm to process data.&lt;br /&gt;&lt;br /&gt;Call the ```nameHash``` function, for example: ```Log(nameHash(&amp;quot;vitalik.eth&amp;quot;))```, you can get: ```ee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835```, and you need to add the &amp;quot;0x&amp;quot; prefix. ```0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835``` is used as the parameter of the ```resolver``` method in ENS smart contract.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;let ensNode = &amp;quot;0x&amp;quot; + nameHash(&amp;quot;vitalik.eth&amp;quot;)    // Prepare the parameters ensNode for calling the resolver method&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;According to the ENS documentation, the contract address for ENS smart contract applications is: ```0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e```. Before calling the ```resolver``` method of the smart contract, we also need to prepare the ```ABI``` of the contract.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href='https://stocksharp.com/file/149799/28e52c418abac1d9e03ba.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.com/file/149799/28e52c418abac1d9e03ba.png?size=800x800" alt="28e52c418abac1d9e03ba.png" title="28e52c418abac1d9e03ba.png" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Upon learning this, you may ask: what is the ```ABI``` of a smart contract?&lt;br /&gt;&lt;br /&gt;```desc&lt;br /&gt;ABI, or Application Binary Interface, is the interface standard for smart contracts to communicate with the external world.&lt;br /&gt;The ABI of a smart contract defines the contract&amp;#39;s function interfaces, parameter types, return values, and other information, as well as specifications for calling the contract and passing parameters.&lt;br /&gt;&lt;br /&gt;The ABI of a smart contract is usually stored in JSON format and contains the following information:&lt;br /&gt;&lt;br /&gt;Contract function interfaces: function names, parameter lists, return values, etc.&lt;br /&gt;Function parameter types: such as uint256, bool, string etc.&lt;br /&gt;Encoding methods for input and output parameters of functions: Smart contracts use an encoding method called Solidity ABI to encode input and output parameters of functions so that they can interact with Ethereum network.&lt;br /&gt;In Ethereum network ,the ABI of a smart contract is used to call its functions. When you need to call a contract function, you need to provide the name of the function, its parameters, and bytecode encoded according to ABI encoding method.&lt;br /&gt;Ethereum nodes will package this information into transactions and send them out on Ethereum network for execution.&lt;br /&gt;&lt;br /&gt;In Solidity language,the keyword &amp;#39;interface&amp;#39; can be used define ABIs for smart contracts. Ethereum development tools like Remix IDE ,Truffle also provide editing &amp;amp; generation tools making it easier developers create &amp;amp; use ABIs.&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Extract the ```resolver``` method part from ENS&amp;#39;s ABI, or you can use the complete ABI. You can query the contract&amp;#39;s ABI on ```https://etherscan.io/``` or obtain the ABI through other channels (e.g., relevant project documentation).&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149799
" title="https://stocksharp.com/file/149799
"&gt;https://stocksharp.com/file/149799
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;let abiENS_resolver = `[{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;resolver&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;}]`&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Here we are going to learn a new invocation method on the FMZ platform, ```exchange.IO(&amp;quot;abi&amp;quot;, address, abiContent)```, which is used to register ABI. The ```address``` parameter is the smart contract address and the ```abiContent``` parameter is the corresponding smart contract ABI (string).&lt;br /&gt;&lt;br /&gt;```&lt;br /&gt;let abiENS_resolver = `[{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;resolver&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;}]`&lt;br /&gt;exchange.IO(&amp;quot;abi&amp;quot;, &amp;quot;0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e&amp;quot;, abiENS_resolver)  // 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e is the address of the ENS smart contract deployed on the Ethereum mainnet&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Methods for Calling Smart Contracts&lt;/b&gt;&lt;br /&gt;Next, you can call the ```resolver``` method of the ENS smart contract, which returns the address of the ```ENS: Public Resolver``` contract.&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149800
" title="https://stocksharp.com/file/149800
"&gt;https://stocksharp.com/file/149800
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;```&lt;br /&gt;let resolverAddress = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e&amp;quot;, &amp;quot;resolver&amp;quot;, ensNode)&lt;br /&gt;```&lt;br /&gt;Use the ```ENS: Public Resolver``` contract&amp;#39;s ```addr``` method to obtain Vitalik Buterin&amp;#39;s wallet address. To call the ```ENS: Public Resolver``` contract, you still need to register the ABI first. The ABI information for this smart contract can still be obtained from ```https://etherscan.io/```.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;let abiENSPublicResolver = `[{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;contract ENS&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;_ens&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;constructor&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;contentType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;ABIChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;AddrChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;coinType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;newAddress&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;AddressChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;owner&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;target&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;isAuthorised&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;AuthorisationChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;hash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;ContenthashChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;uint16&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;resource&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint16&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;record&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;DNSRecordChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;uint16&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;resource&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint16&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;DNSRecordDeleted&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;DNSZoneCleared&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;implementer&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;InterfaceChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;NameChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;PubkeyChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;indexedKey&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;key&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;TextChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;contentTypes&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;ABI&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;addr&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address payable&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;coinType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;addr&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;authorisations&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;clearDNSZone&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;contenthash&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint16&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;resource&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint16&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;dnsRecord&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;hasDNSRecords&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;interfaceImplementer&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;data&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;multicall&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;results&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;pubkey&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;contentType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;data&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setABI&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;coinType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setAddr&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setAddr&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;target&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;isAuthorised&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setAuthorisation&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;hash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setContenthash&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;data&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setDNSRecords&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;implementer&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setInterface&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setName&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setPubkey&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;key&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;value&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setText&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;supportsInterface&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;pure&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;key&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;text&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;}]`&lt;br /&gt;exchange.IO(&amp;quot;abi&amp;quot;, resolverAddress, abiENSPublicResolver)&lt;br /&gt;```&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149801
" title="https://stocksharp.com/file/149801
"&gt;https://stocksharp.com/file/149801
&lt;/a&gt;&lt;br /&gt;Finally, call the ```ENS: Public Resolver``` contract&amp;#39;s ```addr``` method, with the parameter still being ```ensNode```.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;let vitalikAddress = exchange.IO(&amp;quot;api&amp;quot;, resolverAddress, &amp;quot;addr&amp;quot;, ensNode)&lt;br /&gt;Log(&amp;quot;vitalikAddress:&amp;quot;, vitalikAddress)&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Log function output:&lt;br /&gt;&lt;br /&gt;```run&lt;br /&gt;vitalikAddress: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Call the Complete Code of ENS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function nameHash(name) {&lt;br /&gt;    if (name == &amp;quot;&amp;quot;) {&lt;br /&gt;        return &amp;quot;0000000000000000000000000000000000000000000000000000000000000000&amp;quot;&lt;br /&gt;    } else {&lt;br /&gt;        let arr = name.split(&amp;quot;.&amp;quot;)&lt;br /&gt;        let label = arr[0]&lt;br /&gt;        &lt;br /&gt;        arr.shift()&lt;br /&gt;        let remainder = arr.join(&amp;quot;.&amp;quot;)&lt;br /&gt;        return Encode(&amp;quot;sha3.keccak256&amp;quot;, &amp;quot;hex&amp;quot;, &amp;quot;hex&amp;quot;, nameHash(remainder) + Encode(&amp;quot;sha3.keccak256&amp;quot;, &amp;quot;raw&amp;quot;, &amp;quot;hex&amp;quot;, label))&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    // Calculate the name&lt;br /&gt;    let ensNode = &amp;quot;0x&amp;quot; + nameHash(&amp;quot;vitalik.eth&amp;quot;)    &lt;br /&gt;&lt;br /&gt;    // Register ENS contract&lt;br /&gt;    let abiENS_resolver = `[{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;resolver&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;}]`&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, &amp;quot;0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e&amp;quot;, abiENS_resolver)&lt;br /&gt;    let resolverAddress = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e&amp;quot;, &amp;quot;resolver&amp;quot;, ensNode)&lt;br /&gt;    &lt;br /&gt;    // Register ENS Public Resolver contract&lt;br /&gt;    let abiENSPublicResolver = `[{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;contract ENS&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;_ens&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;constructor&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;contentType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;ABIChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;AddrChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;coinType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;newAddress&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;AddressChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;owner&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;target&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;isAuthorised&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;AuthorisationChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;hash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;ContenthashChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;uint16&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;resource&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint16&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;record&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;DNSRecordChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;uint16&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;resource&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint16&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;DNSRecordDeleted&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;DNSZoneCleared&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;implementer&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;InterfaceChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;NameChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;PubkeyChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;indexedKey&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;key&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;TextChanged&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;contentTypes&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;ABI&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;addr&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address payable&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;coinType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;addr&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;authorisations&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;clearDNSZone&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;contenthash&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint16&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;resource&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint16&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;dnsRecord&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;hasDNSRecords&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;interfaceImplementer&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;data&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;multicall&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;results&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;pubkey&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;contentType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;data&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setABI&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;coinType&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setAddr&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setAddr&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;target&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;isAuthorised&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setAuthorisation&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;hash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setContenthash&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;data&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setDNSRecords&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;implementer&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setInterface&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setName&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setPubkey&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;key&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;value&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;setText&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes4&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;interfaceID&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes4&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;supportsInterface&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bool&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bool&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;pure&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;key&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;text&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}],&amp;quot;payable&amp;quot;:false,&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;}]`&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, resolverAddress, abiENSPublicResolver)&lt;br /&gt;    let vitalikAddress = exchange.IO(&amp;quot;api&amp;quot;, resolverAddress, &amp;quot;addr&amp;quot;, ensNode)&lt;br /&gt;    Log(&amp;quot;vitalikAddress:&amp;quot;, vitalikAddress)&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;To be continued...</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>