﻿<?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 (2)</title>
  <id>~/topic/25640/get-started-with-web3-development-easily-based-on-ethereum-using-fmz-(2)/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-17T08:23:35Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=25640" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/79960/</id>
    <title type="text">Send ETH In the previous course chapters, we have learned how to configure private keys. How do we k...</title>
    <published>2024-03-29T07:12:48Z</published>
    <updated>2024-03-29T07:12:48Z</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;Send ETH&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the previous course chapters, we have learned how to configure private keys. How do we know the wallet address corresponding to this private key for the configured exchange object? On FMZ, you can use the ```exchange.IO(&amp;quot;address&amp;quot;)``` function to obtain the wallet address corresponding to the configured private key.&lt;br /&gt;&lt;br /&gt;The following content in this chapter uses Goerli testnet environment, so the node I am using is: ```https://goerli.infura.io/v3/*******```, and Infura assigns different node addresses for each registered user. Here the ```*******``` hides specific content.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    Log(&amp;quot;Testnet goerli wallet address:&amp;quot;, walletAddress)&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;After knowing your wallet address, you can use Ethereum&amp;#39;s RPC method ```eth_getTransactionCount``` to query the transaction count of the wallet address. In Ethereum, this count is very common, and it&amp;#39;s actually the ```nonce``` parameter that needs to be passed in during transfer operations. In Ethereum, nonce is a unique number used to ensure that each transaction is unique. It is an increasing number, and it will automatically increase every time a new transaction is sent. Therefore, when you send a transaction to a smart contract, you need to provide a nonce to ensure that the transaction is unique and in the correct order. We can find this information in some materials and documents:&lt;br /&gt;&lt;br /&gt;&amp;gt; &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAAAU8ivLAm8kDh6AhOTPtRnisN-vATyP1RRq2wgVwVIsKw" title="https://goethereumbook.org/en/
"&gt;https://goethereumbook.org/en/
&lt;/a&gt;&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149802
" title="https://stocksharp.com/file/149802
"&gt;https://stocksharp.com/file/149802
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here, the ```PendingNonceAt``` function in the Ethereum library of Go language is actually calling the ```eth_getTransactionCount``` method. In previous courses, we have also learned how to call RPC methods. Here we use the ```exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, ...)``` function again.&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 walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    Log(&amp;quot;Testnet goerli wallet address:&amp;quot;, walletAddress)&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * eth_getTransactionCount&lt;br /&gt;    * @param address - string - The address from which the transaction count to be checked.&lt;br /&gt;    * @param blockNumber - string - The block number as a string in hexadecimal format or tags.&lt;br /&gt;    * @returns The integer of the number of transactions sent from an address encoded as hexadecimal.&lt;br /&gt;    */&lt;br /&gt;    let nonce: string = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getTransactionCount&amp;quot;, walletAddress, &amp;quot;pending&amp;quot;)&lt;br /&gt;    Log(&amp;quot;wallet address:&amp;quot;, walletAddress, &amp;quot;current nonce：&amp;quot;, nonce, &amp;quot;, convert to decimal:&amp;quot;, toAmount(nonce, 0))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Before explaining the transfer operation, let&amp;#39;s briefly understand some concepts. When transferring on Ethereum, a certain amount of ETH tokens will be consumed (as gas fees). The gas fee is determined by two parameters:&lt;br /&gt;&lt;br /&gt;- gasPrice&lt;br /&gt;&lt;br /&gt;    However, the gas fees on the Ethereum network always fluctuate according to market demand and the fees users are willing to pay, so writing a fixed gas fee in the code is sometimes not an ideal choice. We can use the ```eth_gasPrice``` method we learned before, which can obtain the average gas price.&lt;br /&gt;&lt;br /&gt;- gasLimit&lt;br /&gt;&lt;br /&gt;    A standard Ether transfer has a gas limit of 21,000 units.&lt;br /&gt;&lt;br /&gt;After understanding the concepts of ```nonce```, ```gasPrice```, and ```gasLimit```, you can test the transfer. FMZ provides a very simple and easy-to-use transfer function.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;send&amp;quot;, toAddress, toAmount)&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;When it&amp;#39;s used for transfers, the third parameter of ```exchange.IO``` is fixed as &amp;quot;send&amp;quot;, the ```toAddress``` parameter is the address receiving ETH during the transfer, and ```toAmount``` is the amount of ETH transferred.&lt;br /&gt;&lt;br /&gt;The parameters ```nonce```, ```gasPrice```, and ```gasLimit``` can all use system default values automatically obtained on FMZ. They can also be specified: &lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;send&amp;quot;, toAddress, toAmount, {gasPrice: 5000000000, gasLimit: 21000, nonce: 100})&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Next, we will transfer a certain amount of ETH to a specific address on the goerli test network:&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function toInnerAmount(s, decimals) {&lt;br /&gt;    return (BigDecimal(s)*BigDecimal(Math.pow(10, decimals))).toFixed(0)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    let walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    Log(&amp;quot;Testnet goerli wallet address:&amp;quot;, walletAddress)&lt;br /&gt;&lt;br /&gt;    let ret = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;send&amp;quot;, &amp;quot;0x4D75a08E870674E68cAE611f329A27f446A66813&amp;quot;, toInnerAmount(0.01, 18))&lt;br /&gt;    return ret // return Transaction Hash : 0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Because the unit of Ethereum transfer amount is ```wei```, a custom function ```toInnerAmount``` needs to be used to process the value in ```wei``` units.&lt;br /&gt;&lt;br /&gt;Query Transaction Hash: ```0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e``` on ```https://etherscan.io/```.&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149803
" title="https://stocksharp.com/file/149803
"&gt;https://stocksharp.com/file/149803
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can also write code to query transfer hash ```0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e```, using the ```eth_getTransactionReceipt``` method for queries.&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;function main() {&lt;br /&gt;    let transHash = &amp;quot;0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e&amp;quot;&lt;br /&gt;    let info = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getTransactionReceipt&amp;quot;, transHash)&lt;br /&gt;    return info&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Query result:&lt;br /&gt;&lt;br /&gt;```run&lt;br /&gt;{&lt;br /&gt;	&amp;quot;cumulativeGasUsed&amp;quot;: &amp;quot;0x200850&amp;quot;,&lt;br /&gt;	&amp;quot;effectiveGasPrice&amp;quot;: &amp;quot;0x1748774421&amp;quot;,&lt;br /&gt;	&amp;quot;transactionHash&amp;quot;: &amp;quot;0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e&amp;quot;,&lt;br /&gt;	&amp;quot;type&amp;quot;: &amp;quot;0x0&amp;quot;,&lt;br /&gt;	&amp;quot;blockHash&amp;quot;: &amp;quot;0x6bdde8b0f0453ecd24eecf7c634d65306f05511e0e8f09f9ed3f59eee2d06ac7&amp;quot;,&lt;br /&gt;	&amp;quot;contractAddress&amp;quot;: null,&lt;br /&gt;	&amp;quot;blockNumber&amp;quot;: &amp;quot;0x868a50&amp;quot;,&lt;br /&gt;	&amp;quot;logsBloom&amp;quot;: &amp;quot;0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000&amp;quot;,&lt;br /&gt;	&amp;quot;gasUsed&amp;quot;: &amp;quot;0x5208&amp;quot;,&lt;br /&gt;	&amp;quot;to&amp;quot;: &amp;quot;0x4d75a08e870674e68cae611f329a27f446a66813&amp;quot;,&lt;br /&gt;	&amp;quot;status&amp;quot;: &amp;quot;0x1&amp;quot;,&lt;br /&gt;	&amp;quot;transactionIndex&amp;quot;: &amp;quot;0x23&amp;quot;,&lt;br /&gt;	&amp;quot;from&amp;quot;: &amp;quot;0x6b3f11d807809b0b1e5e3243df04a280d9f94bf4&amp;quot;,&lt;br /&gt;	&amp;quot;logs&amp;quot;: []&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;Description corresponding to each field:&lt;br /&gt;&lt;br /&gt;```desc&lt;br /&gt;blockHash - The hash value of the block where the transaction is located.&lt;br /&gt;blockNumber - The block number of the block where the transaction is located, encoded in hexadecimal.&lt;br /&gt;contractAddress - If it&amp;#39;s a contract creation, the address of the contract; otherwise null.&lt;br /&gt;cumulativeGasUsed - The total gas used when executing this transaction in the block.&lt;br /&gt;effectiveGasPrice - Total base fee plus tip per unit of gas.&lt;br /&gt;from - Sender&amp;#39;s address.&lt;br /&gt;gasUsed - Gas used by this specific transaction.&lt;br /&gt;logs - Array of log objects generated by this transaction.&lt;br /&gt;  address - Address that generated this log.&lt;br /&gt;  topics - Data array with 0 to 4 indexed log parameters, each with 32 bytes. In Solidity, first topic is event signature hash (e.g., Deposit(address,bytes32,uint256)), unless you declare an event using anonymous specifier.&lt;br /&gt;  data - Non-indexed parameters for logs with length of 32 bytes.&lt;br /&gt;  blockNumber - The block number of the block where this log is located.&lt;br /&gt;  transactionHash - Transaction hash at time when log was created. Null if pending state.&lt;br /&gt;  transactionIndex - Index position during creation. Null if pending state.&lt;br /&gt;  blockHash - The hash value for containing block.&lt;br /&gt;  logIndex - Hexadecimal-encoded integer index position within containing block. Null if pending state.&lt;br /&gt;  removed - True if deleted due to chain reorganization; false for valid logs.&lt;br /&gt;logsBloom - Bloom filter for retrieving related logs.&lt;br /&gt;status - Hexadecimal-encoded value either being &amp;#39;1&amp;#39; (success) or &amp;#39;0&amp;#39; (failure).&lt;br /&gt;to - Receiving party&amp;#39;s address; null for contract creation transactions.&lt;br /&gt;transactionHash - The hash value associated with given transaction.&lt;br /&gt;transactionIndex - Hexadecimal-encoded index position within its respective containing-block.&lt;br /&gt;type - Type value.&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:140%"&gt;Call Ethereum Smart Contract&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;In the chapter on &amp;quot;Reading Contract Information&amp;quot;, we used a complete example to call the method of ENS contract deployed on Ethereum to obtain Vitalik Buterin&amp;#39;s wallet address. These methods belong to ```Read``` methods, and calling these methods does not require ```gas``` (remember what we talked about gas before?). In this chapter, we will call some ```Write``` methods of smart contracts on Ethereum and pay for ```gas```. These operations will be verified by each node and miner in the entire network and change the blockchain state.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ERC20&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For the ERC20 contract (ERC20 token contract), FMZ platform lists the ABI of the ERC20 contract ABI as a common ABI built directly into the system, eliminating the step of registering the ABI. We have also learned about ABI in previous tutorials when we registered ENS contract&amp;#39;s ABI before calling ENS contract methods.&lt;br /&gt;&lt;br /&gt;To better understand ABI, you can check it out before using it. Here is the ABI for ERC20 contracts:&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;[{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;outputs&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;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;guy&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approve&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;totalSupply&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;transferFrom&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;withdraw&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;name&amp;quot;:&amp;quot;decimals&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&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;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;balanceOf&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;name&amp;quot;:&amp;quot;symbol&amp;quot;,&amp;quot;outputs&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;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;transfer&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;deposit&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:true,&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&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;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&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;allowance&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;payable&amp;quot;:true,&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;fallback&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;guy&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Approval&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Transfer&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;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Deposit&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Withdrawal&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;}]&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;This section uses the ```Goerli``` testnet environment.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;balanceOf&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Next, let&amp;#39;s practice again how to call the ```Read``` method of a contract to read contract information, call the ```balanceOf``` method of ERC20 contract to query token balance, the balanceOf method has only one parameter, which is not named, but can be identified by its type as an address (i.e., the address of the token being queried). Since the returned data is not in units of one token, we also need the precision data of tokens for conversion. The precision of tokens can be obtained by using ```decimals``` method in ERC20 contracts. We will use Ethereum testnet ```goerli``` for testing. Please note that token contract addresses may vary on different chains.&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 walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    &lt;br /&gt;    // goerli WETH address &lt;br /&gt;    let wethAddress = &amp;quot;0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6&amp;quot;&lt;br /&gt;    // goerli LINK address &lt;br /&gt;    let linkAddress = &amp;quot;0x326C977E6efc84E512bB9C30f76E30c160eD06FB&amp;quot;&lt;br /&gt;&lt;br /&gt;    // Since it is an ERC20 contract, FMZ has built-in ABI registration, so there is no need to register ERC20 ABI here.&lt;br /&gt;    let wethDecimals = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;decimals&amp;quot;)&lt;br /&gt;    let linkDecimals = exchange.IO(&amp;quot;api&amp;quot;, linkAddress, &amp;quot;decimals&amp;quot;)&lt;br /&gt;&lt;br /&gt;    let wethBalance = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;balanceOf&amp;quot;, walletAddress)&lt;br /&gt;    let linkBalance = exchange.IO(&amp;quot;api&amp;quot;, linkAddress, &amp;quot;balanceOf&amp;quot;, walletAddress)&lt;br /&gt;    Log(&amp;quot;WETH precision:&amp;quot;, wethDecimals, &amp;quot;wethBalance:&amp;quot;, toAmount(wethBalance, wethDecimals))&lt;br /&gt;    Log(&amp;quot;LINK precision:&amp;quot;, linkDecimals, &amp;quot;linkBalance:&amp;quot;, toAmount(linkBalance, linkDecimals))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;By running the above code, you can query the current wallet&amp;#39;s WETH and LINK token balance:&lt;br /&gt;&lt;br /&gt;&amp;gt; WETH precision: 18 wethBalance: 0&lt;br /&gt;&amp;gt; LINK precision: 18 linkBalance: 51.41374973681053&lt;br /&gt;&lt;br /&gt;&lt;em&gt;deposit&lt;/em&gt;&lt;br /&gt;We can see that the balance of WETH tokens in the wallet is 0. Next, we will continue to interact with the ERC20 smart contract of WETH tokens, and this time we will call the Write type method: ```deposit```.&lt;br /&gt;The function of the ```deposit``` method is simply to exchange a certain amount of ETH for WETH. It should be noted that there are no parameters for the ```deposit``` method (which can be observed by checking ABI). The ```payable``` attribute of this method is ```true```, so when calling it, you need to set the transferable ETH (payableAmount) quantity to specify the amount of ETH deposited.&lt;br /&gt;&lt;br /&gt;&amp;gt; Pay attention when calling smart contract methods:&lt;br /&gt;&amp;gt; If the called method has a payable attribute, you need to add a transfer ETH value (the fourth parameter of the exchange.IO function) after the method name, which can be a numeric type or a string form of numeric value.&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 toInnerAmount(s, decimals) {&lt;br /&gt;    return (BigDecimal(s)*BigDecimal(Math.pow(10, decimals))).toFixed(0)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    let walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    &lt;br /&gt;    // goerli WETH address &lt;br /&gt;    let wethAddress = &amp;quot;0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6&amp;quot;&lt;br /&gt;&lt;br /&gt;    // Since it is an ERC20 contract, FMZ has built-in ABI registration, so there is no need to register ERC20 ABI here.&lt;br /&gt;    let wethDecimals = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;decimals&amp;quot;)&lt;br /&gt;&lt;br /&gt;    let wethBalance = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;balanceOf&amp;quot;, walletAddress)&lt;br /&gt;    Log(&amp;quot;WETH precision:&amp;quot;, wethDecimals, &amp;quot;wethBalance:&amp;quot;, toAmount(wethBalance, wethDecimals))&lt;br /&gt;    let ethBalance = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getBalance&amp;quot;, walletAddress, &amp;quot;latest&amp;quot;)&lt;br /&gt;    Log(&amp;quot;ETH precision:&amp;quot;, 18, &amp;quot;ethBalance:&amp;quot;, toAmount(ethBalance, 18))&lt;br /&gt;&lt;br /&gt;    // Call the deposit method, since deposit is a method outside of the ERC20 standard, we need to register the ABI for this method here&lt;br /&gt;    let abiWETH = `[{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;outputs&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;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;guy&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approve&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;totalSupply&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;transferFrom&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;withdraw&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;name&amp;quot;:&amp;quot;decimals&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&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;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;balanceOf&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;name&amp;quot;:&amp;quot;symbol&amp;quot;,&amp;quot;outputs&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;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;transfer&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;deposit&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:true,&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&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;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&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;allowance&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;payable&amp;quot;:true,&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;fallback&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;guy&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Approval&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Transfer&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;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Deposit&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Withdrawal&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;}]`&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, wethAddress, abiWETH)&lt;br /&gt;&lt;br /&gt;    let payableAmount = toInnerAmount(0.01, 18)&lt;br /&gt;    let ret = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;deposit&amp;quot;, payableAmount)&lt;br /&gt;    Log(&amp;quot;Transaction Hash:&amp;quot;, ret)&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;&amp;gt; WETH precision: 18 wethBalance: 0&lt;br /&gt;&amp;gt; ETH precision: 18 ethBalance: 0.14333094664072302&lt;br /&gt;&amp;gt; Transaction Hash: 0xaf15b0b0e25a81eda583295e82b249e2d02e4eafebecc906470ccc2c89e23563&lt;br /&gt;&lt;a href="https://stocksharp.com/file/149804
" title="https://stocksharp.com/file/149804
"&gt;https://stocksharp.com/file/149804
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check the balance of WETH and ETH again:&lt;br /&gt;&lt;br /&gt;&amp;gt; WETH precision: 18 wethBalance: 0.01&lt;br /&gt;&amp;gt; ETH precision: 18 ethBalance: 0.1333309358060905&lt;br /&gt;&lt;br /&gt;Before calling ```deposit```, ```WETH``` is 0 and ```ETH``` is 0.14333094664072302. After calling ```deposit```, ```WETH``` is 0.01 and ```ETH``` is 0.1333309358060905. It can be seen that it has exchanged 0.01```ETH``` for ```WETH``` successfully.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;transfer&lt;/em&gt;&lt;br /&gt;ERC20 tokens can also be transferred, using the ```transfer``` method to transfer 0.01 WETH tokens to the address ```0x4D75a08E870674E68cAE611f329A27f446A66813```. The ```transfer``` method has two parameters, the first parameter ```dst``` is the wallet address of the transfer recipient, and the second parameter ```wad``` is the transfer amount.&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 toInnerAmount(s, decimals) {&lt;br /&gt;    return (BigDecimal(s)*BigDecimal(Math.pow(10, decimals))).toFixed(0)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function waitMined (tx) {&lt;br /&gt;    for (var i = 0 ; i &amp;lt; 10 ; i++) {&lt;br /&gt;        Sleep(5000)&lt;br /&gt;        let info = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getTransactionReceipt&amp;quot;, tx)&lt;br /&gt;        if (info &amp;amp;&amp;amp; info.gasUsed) {&lt;br /&gt;            Log(info)&lt;br /&gt;            return true&lt;br /&gt;        }&lt;br /&gt;        Log(&amp;#39;Transaction not yet mined&amp;#39;, tx)&lt;br /&gt;    }&lt;br /&gt;    return false &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    let walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    &lt;br /&gt;    // goerli WETH address &lt;br /&gt;    let wethAddress = &amp;quot;0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6&amp;quot;&lt;br /&gt;&lt;br /&gt;    // Since it is an ERC20 contract, FMZ has built-in ABI registration, there is no need to register ERC20 ABI here.&lt;br /&gt;    let wethDecimals = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;decimals&amp;quot;)&lt;br /&gt;    let wethBalance = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;balanceOf&amp;quot;, walletAddress)&lt;br /&gt;    Log(&amp;quot;WETH precision:&amp;quot;, wethDecimals, &amp;quot;wethBalance:&amp;quot;, toAmount(wethBalance, wethDecimals))&lt;br /&gt;&lt;br /&gt;    let dst = &amp;quot;0x4D75a08E870674E68cAE611f329A27f446A66813&amp;quot;&lt;br /&gt;    let wad = toInnerAmount(0.01, wethDecimals)&lt;br /&gt;    let tx = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;transfer&amp;quot;, dst, wad)   &lt;br /&gt;    Log(&amp;quot;Transaction Hash:&amp;quot;, tx)&lt;br /&gt;    waitMined(tx)&lt;br /&gt;    &lt;br /&gt;    wethBalance = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;balanceOf&amp;quot;, walletAddress)&lt;br /&gt;    Log(&amp;quot;WETH precision:&amp;quot;, wethDecimals, &amp;quot;wethBalance:&amp;quot;, toAmount(wethBalance, wethDecimals))&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;In the above example, a custom function ```waitMined``` is used. In fact, we are not unfamiliar with the function of this function. Do you remember the ```eth_getTransactionReceipt``` method? The purpose of this waitMined custom function is to wait for the result of the passed Transaction Hash.&lt;br /&gt;&lt;br /&gt;For this WETH transfer, interested readers can also query the Transaction Hash ```0x2fafb62b548a1fffb0f3189429e3c5a4f57ddafb0acbc0678d8b3cf0a2f7c92c``` to view details (note that it is on testnet goerli).&lt;br /&gt;&lt;br /&gt;&lt;em&gt;withdraw&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This time we will exchange ```WETH``` back to ```ETH```, using the ```withdraw``` method, which has only one parameter ```wad```, simply put, it is used to set how much ETH to exchange back.&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 toInnerAmount(s, decimals) {&lt;br /&gt;    return (BigDecimal(s)*BigDecimal(Math.pow(10, decimals))).toFixed(0)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    let walletAddress = exchange.IO(&amp;quot;address&amp;quot;)&lt;br /&gt;    &lt;br /&gt;    // goerli WETH address &lt;br /&gt;    let wethAddress = &amp;quot;0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6&amp;quot;&lt;br /&gt;&lt;br /&gt;    // Since it is an ERC20 contract, FMZ has built-in ABI registration, there is no need to register ERC20 ABI here.&lt;br /&gt;    let wethDecimals = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;decimals&amp;quot;)&lt;br /&gt;&lt;br /&gt;    let wethBalance = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;balanceOf&amp;quot;, walletAddress)&lt;br /&gt;    Log(&amp;quot;WETH precision:&amp;quot;, wethDecimals, &amp;quot;wethBalance:&amp;quot;, toAmount(wethBalance, wethDecimals))&lt;br /&gt;    let ethBalance = exchange.IO(&amp;quot;api&amp;quot;, &amp;quot;eth&amp;quot;, &amp;quot;eth_getBalance&amp;quot;, walletAddress, &amp;quot;latest&amp;quot;)&lt;br /&gt;    Log(&amp;quot;ETH precision:&amp;quot;, 18, &amp;quot;ethBalance:&amp;quot;, toAmount(ethBalance, 18))&lt;br /&gt;&lt;br /&gt;    let abiWETH = `[{&amp;quot;constant&amp;quot;:true,&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;outputs&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;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;guy&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approve&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;totalSupply&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;transferFrom&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;withdraw&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;name&amp;quot;:&amp;quot;decimals&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&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;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;balanceOf&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;name&amp;quot;:&amp;quot;symbol&amp;quot;,&amp;quot;outputs&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;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;transfer&amp;quot;,&amp;quot;outputs&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;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;name&amp;quot;:&amp;quot;deposit&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;payable&amp;quot;:true,&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&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;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&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;allowance&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&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;payable&amp;quot;:true,&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;fallback&amp;quot;},{&amp;quot;anonymous&amp;quot;:false,&amp;quot;inputs&amp;quot;:[{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;guy&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Approval&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:true,&amp;quot;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Transfer&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;name&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Deposit&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;name&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;indexed&amp;quot;:false,&amp;quot;name&amp;quot;:&amp;quot;wad&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;Withdrawal&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;event&amp;quot;}]`&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, wethAddress, abiWETH)&lt;br /&gt;&lt;br /&gt;    let wad = toInnerAmount(0.01, 18)&lt;br /&gt;    let ret = exchange.IO(&amp;quot;api&amp;quot;, wethAddress, &amp;quot;withdraw&amp;quot;, wad)&lt;br /&gt;    Log(&amp;quot;Transaction Hash:&amp;quot;, ret)&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;&amp;gt; Transaction Hash: 0x446423c841451a8d04428a075b556eb5564186b09926da915f5da1c9837d2af4&lt;br /&gt;&lt;br /&gt;From the above code, it can be seen that it is basically the same as the previous example, except that the method called in the last step is changed to ```withdraw```, before calling:&lt;br /&gt;&lt;br /&gt;&amp;gt; WETH precision: 18 wethBalance: 0.01&lt;br /&gt;&amp;gt; ETH precision: 18 ethBalance: 0.11322979983231546&lt;br /&gt;&lt;br /&gt;Query again:&lt;br /&gt;&lt;br /&gt;&amp;gt; WETH precision: 18 wethBalance: 0&lt;br /&gt;&amp;gt; ETH precision: 18 ethBalance: 0.1231207156449464&lt;br /&gt;&lt;br /&gt;We can see that 0.01 ```WETH``` has been exchanged back to ```ETH```.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Uniswap V3&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;```Uniswap V3``` is a decentralized transaction protocol built on the Ethereum blockchain, used to facilitate cryptocurrency trading and liquidity provision. It consists of a series of smart contracts, including core contracts, pool contracts, factory contracts, router contracts, etc. &lt;br /&gt;&lt;br /&gt;The following contracts are mainly used when querying the current exchange price and performing exchange operations using ```Uniswap```:&lt;br /&gt;&lt;br /&gt;- ```Router``` (Router contract)&lt;br /&gt;  This is the contract used to execute transactions, allowing the user to perform a trade operation by specifying a trade path and parameters.&lt;br /&gt;- ```Pool``` (Pool contract)&lt;br /&gt;  Pool contracts are the key component in ```Uniswap``` for storing and managing the liquidity of a given asset pair. Each asset pair has a corresponding pool contract, which contains information about the funds, price range, fee settings, etc. provided by the liquidity provider. The pool contract is responsible for processing transactions, calculating the status of the pool, and ensuring the smooth execution of transactions.&lt;br /&gt;- ```Factory``` (Factory contract)&lt;br /&gt;  Factory contracts are the contracts used to create and manage ```Uniswap``` pool contracts. When users wish to create new asset pairs, they deploy new pool contracts by interacting with the factory contract. Factory contracts are responsible for coordinating the creation and initialization of pool contracts, enabling users to create new asset pairs dynamically.&lt;br /&gt;&lt;br /&gt;As we have learned in previous lessons, let&amp;#39;s review how to register the ```ABI``` of smart contracts in strategy code on the FMZ Quant Trading Platform. The process of obtaining the ABI of smart contracts has been discussed in previous lessons and will not be repeated here. &lt;br /&gt;Three ```Uniswap``` smart contract ```ABI```s need to be registered, using the Ethereum mainnet as an example:&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;var abiRoute = &amp;#39;[{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;_factoryV2&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;factoryV3&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;_positionManager&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;_WETH9&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;constructor&amp;quot;},{&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;WETH9&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;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approveMax&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approveMaxMinusOne&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approveZeroThenMax&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;approveZeroThenMaxMinusOne&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&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;callPositionManager&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;result&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;paths&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint128[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amounts&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint128[]&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;maximumTickDivergence&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;secondsAgo&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;checkOracleSlippage&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;maximumTickDivergence&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;secondsAgo&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;checkOracleSlippage&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;components&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountIn&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOutMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;internalType&amp;quot;:&amp;quot;struct IV3SwapRouter.ExactInputParams&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;params&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;tuple&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;exactInput&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;components&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tokenIn&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;tokenOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;fee&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountIn&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOutMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint160&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;sqrtPriceLimitX96&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint160&amp;quot;}],&amp;quot;internalType&amp;quot;:&amp;quot;struct IV3SwapRouter.ExactInputSingleParams&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;params&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;tuple&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;exactInputSingle&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;components&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountInMaximum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;internalType&amp;quot;:&amp;quot;struct IV3SwapRouter.ExactOutputParams&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;params&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;tuple&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;exactOutput&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountIn&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;components&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tokenIn&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;tokenOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;fee&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountInMaximum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint160&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;sqrtPriceLimitX96&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint160&amp;quot;}],&amp;quot;internalType&amp;quot;:&amp;quot;struct IV3SwapRouter.ExactOutputSingleParams&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;params&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;tuple&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;exactOutputSingle&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountIn&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;factory&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;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;factoryV2&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;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;getApprovalType&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;enum IApproveAndCall.ApprovalType&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;components&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token0&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;token1&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tokenId&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount0Min&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount1Min&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;internalType&amp;quot;:&amp;quot;struct IApproveAndCall.IncreaseLiquidityParams&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;params&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;tuple&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;increaseLiquidity&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;result&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;components&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token0&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;token1&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;fee&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;int24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tickLower&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;int24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;int24&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tickUpper&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;int24&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount0Min&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount1Min&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;internalType&amp;quot;:&amp;quot;struct IApproveAndCall.MintParams&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;params&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;tuple&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;mint&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;result&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;previousBlockhash&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;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;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;deadline&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;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;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes[]&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&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;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;positionManager&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;stateMutability&amp;quot;:&amp;quot;view&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;value&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;pull&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;refundETH&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;value&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;deadline&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint8&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;v&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;r&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;s&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;selfPermit&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;nonce&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;expiry&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint8&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;v&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;r&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;s&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;selfPermitAllowed&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;nonce&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;expiry&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint8&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;v&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;r&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;s&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;selfPermitAllowedIfNecessary&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;value&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;deadline&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint8&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;v&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint8&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;bytes32&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;r&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;s&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;bytes32&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;selfPermitIfNecessary&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountIn&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOutMin&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;path&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;to&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;swapExactTokensForTokens&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountOut&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountInMax&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address[]&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;path&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;to&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;swapTokensForExactTokens&amp;quot;,&amp;quot;outputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountIn&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;sweepToken&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;sweepToken&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeBips&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeRecipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;sweepTokenWithFee&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;token&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeBips&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeRecipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;sweepTokenWithFee&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;int256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount0Delta&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;int256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;int256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amount1Delta&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;int256&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;uniswapV3SwapCallback&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;nonpayable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;unwrapWETH9&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;unwrapWETH9&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;recipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeBips&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeRecipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;unwrapWETH9WithFee&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;amountMinimum&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeBips&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;},{&amp;quot;internalType&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;feeRecipient&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;address&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;unwrapWETH9WithFee&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;inputs&amp;quot;:[{&amp;quot;internalType&amp;quot;:&amp;quot;uint256&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;value&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;uint256&amp;quot;}],&amp;quot;name&amp;quot;:&amp;quot;wrapETH&amp;quot;,&amp;quot;outputs&amp;quot;:[],&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;function&amp;quot;},{&amp;quot;stateMutability&amp;quot;:&amp;quot;payable&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;receive&amp;quot;}]&amp;#39;;&lt;br /&gt;var abiPool = &amp;#39;[{\&amp;quot;inputs\&amp;quot;:[],\&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;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;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:true,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&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;amount0\&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;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;Burn\&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;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;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;recipient\&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;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:true,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;Collect\&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;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sender\&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;recipient\&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;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;CollectProtocol\&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;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sender\&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;recipient\&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;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&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;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&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;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;paid0\&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;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;paid1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;Flash\&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;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;observationCardinalityNextOld\&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;uint16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;observationCardinalityNextNew\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint16\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;IncreaseObservationCardinalityNext\&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;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sqrtPriceX96\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tick\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;Initialize\&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;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sender\&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;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;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:true,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&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;amount0\&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;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;Mint\&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;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol0Old\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol1Old\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol0New\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol1New\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;SetFeeProtocol\&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;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sender\&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;recipient\&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;int256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int256\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int256\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sqrtPriceX96\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;liquidity\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tick\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;Swap\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;event\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;burn\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;recipient\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0Requested\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1Requested\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;collect\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;recipient\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0Requested\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1Requested\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;collectProtocol\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;factory\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;fee\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;feeGrowthGlobal0X128\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;feeGrowthGlobal1X128\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;recipient\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&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;flash\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;observationCardinalityNext\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint16\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;increaseObservationCardinalityNext\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sqrtPriceX96\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;initialize\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;liquidity\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;maxLiquidityPerTick\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;recipient\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&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;mint\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&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;name\&amp;quot;:\&amp;quot;observations\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint32\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;blockTimestamp\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint32\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int56\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickCumulative\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int56\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsPerLiquidityCumulativeX128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;bool\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;initialized\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;bool\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint32[]\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsAgos\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint32[]\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;observe\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int56[]\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickCumulatives\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int56[]\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160[]\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsPerLiquidityCumulativeX128s\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160[]\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&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;name\&amp;quot;:\&amp;quot;positions\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;liquidity\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeGrowthInside0LastX128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeGrowthInside1LastX128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tokensOwed0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tokensOwed1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;protocolFees\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;token0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;token1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;setFeeProtocol\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;slot0\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sqrtPriceX96\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tick\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;observationIndex\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint16\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;observationCardinality\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint16\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;observationCardinalityNext\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint16\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint8\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeProtocol\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint8\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;bool\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;unlocked\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;bool\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickLower\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickUpper\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;snapshotCumulativesInside\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int56\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickCumulativeInside\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int56\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsPerLiquidityInsideX128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint32\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsInside\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint32\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;recipient\&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;zeroForOne\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;bool\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amountSpecified\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;sqrtPriceLimitX96\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&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;swap\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount0\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;amount1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int256\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int16\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int16\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;tickBitmap\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;tickSpacing\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;ticks\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;liquidityGross\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int128\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;liquidityNet\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int128\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeGrowthOutside0X128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint256\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;feeGrowthOutside1X128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint256\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int56\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickCumulativeOutside\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int56\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint160\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsPerLiquidityOutsideX128\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint160\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint32\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;secondsOutside\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint32\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;bool\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;initialized\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;bool\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;token0\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;token1\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;}]&amp;#39;&lt;br /&gt;var abiFactory = &amp;#39;[{\&amp;quot;inputs\&amp;quot;:[],\&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;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;fee\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:true,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickSpacing\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;FeeAmountEnabled\&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;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;oldOwner\&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;newOwner\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;OwnerChanged\&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;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;token0\&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;token1\&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;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;fee\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;},{\&amp;quot;indexed\&amp;quot;:false,\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickSpacing\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&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;pool\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;PoolCreated\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;event\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tokenA\&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;tokenB\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;fee\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;createPool\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;pool\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;fee\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickSpacing\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;enableFeeAmount\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;feeAmountTickSpacing\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&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;internalType\&amp;quot;:\&amp;quot;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;}],\&amp;quot;name\&amp;quot;:\&amp;quot;getPool\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;owner\&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;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[],\&amp;quot;name\&amp;quot;:\&amp;quot;parameters\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[{\&amp;quot;internalType\&amp;quot;:\&amp;quot;address\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;factory\&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;token0\&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;token1\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;address\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;uint24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;fee\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;uint24\&amp;quot;},{\&amp;quot;internalType\&amp;quot;:\&amp;quot;int24\&amp;quot;,\&amp;quot;name\&amp;quot;:\&amp;quot;tickSpacing\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;int24\&amp;quot;}],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;view\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;},{\&amp;quot;inputs\&amp;quot;:[{\&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;name\&amp;quot;:\&amp;quot;setOwner\&amp;quot;,\&amp;quot;outputs\&amp;quot;:[],\&amp;quot;stateMutability\&amp;quot;:\&amp;quot;nonpayable\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;function\&amp;quot;}]&amp;#39;&lt;br /&gt;&lt;br /&gt;var contractV3FactoryAddress = &amp;quot;0x1F98431c8aD98523631AE4a59f267346ea31F984&amp;quot;&lt;br /&gt;var contractV3SwapRouterV2Address = &amp;quot;0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45&amp;quot;&lt;br /&gt;&lt;br /&gt;function main() {&lt;br /&gt;    // ABI for registration of Uniswap factory contracts&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, contractV3FactoryAddress, abiFactory)&lt;br /&gt;    &lt;br /&gt;    // Test the owner method of the Factory contract&lt;br /&gt;    var owner = exchange.IO(&amp;quot;api&amp;quot;, contractV3FactoryAddress, &amp;quot;owner&amp;quot;)&lt;br /&gt;    Log(&amp;quot;owner:&amp;quot;, owner)   // The return value should be: 0x1a9C8182C09F50C8318d769245beA52c32BE35BC&lt;br /&gt;&lt;br /&gt;    // Register ABI for Uniswap router contracts&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, contractV3SwapRouterV2Address, abiRoute)&lt;br /&gt;&lt;br /&gt;    // Factory method for testing Uniswap V3 Router V2 contracts&lt;br /&gt;    var factoryOfRouter = exchange.IO(&amp;quot;api&amp;quot;, contractV3SwapRouterV2Address, &amp;quot;factory&amp;quot;)&lt;br /&gt;    Log(&amp;quot;factoryOfRouter:&amp;quot;, factoryOfRouter)  // The return value should be: 0x1F98431c8aD98523631AE4a59f267346ea31F984&lt;br /&gt;&lt;br /&gt;    // Get the pool address of the trading pair&lt;br /&gt;    var tokenIn = {name : &amp;quot;DAI&amp;quot;, address: &amp;quot;0x6b175474e89094c44da98b954eedeac495271d0f&amp;quot;}&lt;br /&gt;    var tokenOut = {name : &amp;quot;USDT&amp;quot;, address: &amp;quot;0xdac17f958d2ee523a2206206994597c13d831ec7&amp;quot;}&lt;br /&gt;    var poolAddress = exchange.IO(&amp;quot;api&amp;quot;, contractV3FactoryAddress, &amp;quot;getPool&amp;quot;, tokenIn.address, tokenOut.address, 3000)&lt;br /&gt;    var pair = &amp;quot;tokenIn:&amp;quot; + tokenIn.name + &amp;quot;, tokenOut:&amp;quot; + tokenOut.name + &amp;quot;, fee:&amp;quot; + 3000&lt;br /&gt;    Log(&amp;quot;Use the getPool method of the factory contract to get&amp;quot;, pair, &amp;quot;pool address:&amp;quot;, poolAddress)&lt;br /&gt;&lt;br /&gt;    // Registration pool contract ABI&lt;br /&gt;    exchange.IO(&amp;quot;abi&amp;quot;, poolAddress, abiPool)&lt;br /&gt;&lt;br /&gt;    // Test pool contract&lt;br /&gt;    var factoryOfPool = exchange.IO(&amp;quot;api&amp;quot;, poolAddress, &amp;quot;factory&amp;quot;)&lt;br /&gt;    Log(&amp;quot;factoryOfPool:&amp;quot;, factoryOfPool)   // The return value should be: 0x1F98431c8aD98523631AE4a59f267346ea31F984&lt;br /&gt;}&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;The above code registered the ABI of the factory contract, router contract and pool contract and did some tests. It can be observed that the ```factory``` method of both the router contract and the pool contract return the address ```0x1F98431c8aD98523631AE4a59f267346ea31F984```, which is the address of the Uniswap factory contract (variable ``` contractV3FactoryAddress``` in the code).&lt;br /&gt;&lt;br /&gt;```javascript&lt;br /&gt;var contractV3FactoryAddress = &amp;quot;0x1F98431c8aD98523631AE4a59f267346ea31F984&amp;quot;&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;After registering the ABI of the smart contract, next we look at the exchange operation using ```Uniswap V3``` first, and in the following we use the exchange of ```ERC20``` tokens (on the Ethereum mainnet) as a specific scenario.&lt;br /&gt;&lt;br /&gt;To be continued...</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>