<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Pototo.my3amclub</title>
        <link>https://paragraph.com/@potot</link>
        <description>undefined</description>
        <lastBuildDate>Sun, 12 Apr 2026 06:16:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Pototo.my3amclub</title>
            <url>https://storage.googleapis.com/papyrus_images/7d24cebb330571837171602efadb81b6fc81efbb9eb8213a033daacc26a957a6.png</url>
            <link>https://paragraph.com/@potot</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[carv 5000busd 撸毛]]></title>
            <link>https://paragraph.com/@potot/carv-5000busd</link>
            <guid>JIWJeN5NUuTinPIKvzcA</guid>
            <pubDate>Sun, 27 Nov 2022 20:02:11 GMT</pubDate>
            <description><![CDATA[背景 CARV 与 30 多家优秀游戏和生态系统合作伙伴一起推出了 BNB Game CARVnival 5500 BUSD 和 20,000 ARC （未来carv代币）要点 这里的撸点在于邀请+领取First carv NFT 的积分榜 单号 邀请（3分）+ 领取NFT （5分）排行奖金操作方法步骤：1.进入carv https://carv.io?invite_code=UJR 2.获取NFT获取NFT 方法3.到DC #🔖｜verify-your-nft 频道进行认证获得 frist carver 的role https://discord.gg/XNpuTEss 4.结尾 除了最后结算的排名奖励以外，项目方会根据每日排名发放busd奖金并且抽取5名幸运人员空投busd获奖幸运者PS：毛虽然不多，单还算是个大号鸡腿饭吧。祝大家好运。 另外carv 已经种子轮获得400w的投资，估值4000万]]></description>
            <content:encoded><![CDATA[<ul><li><p>背景</p><p>CARV 与 30 多家优秀游戏和生态系统合作伙伴一起推出了 BNB Game CARVnival</p><p>5500 BUSD 和 20,000 ARC （未来carv代币）</p></li><li><p>要点</p><p>这里的撸点在于邀请+领取First carv NFT 的积分榜</p><p>单号 邀请（3分）+ 领取NFT （5分）</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/40db2aa0d0c1ef4eb29f6d48a9157a66a132140da4859b4670ac47a5a9989363.png" alt="排行奖金" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">排行奖金</figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">操作方法</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">步骤：</h3><p>1.进入carv</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://carv.io?invite_code=UJR">https://carv.io?invite_code=UJR</a></p><p>2.获取NFT</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bcc4b5f8630b3ed79c5bd65185cbd14c28872a8a21feb20c18e6018b90d53931.png" alt="获取NFT 方法" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">获取NFT 方法</figcaption></figure><p>3.到DC</p><p>#🔖｜verify-your-nft 频道进行认证获得 frist carver 的role</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/XNpuTEss">https://discord.gg/XNpuTEss</a></p><p>4.结尾</p><p>除了最后结算的排名奖励以外，项目方会根据每日排名发放busd奖金并且抽取5名幸运人员空投busd</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/150ca069811a98440b2d7af8e2c32a13d913cf0366e5997b0c9bae2711883399.png" alt="获奖幸运者" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">获奖幸运者</figcaption></figure><p>PS：毛虽然不多，单还算是个大号鸡腿饭吧。祝大家好运。</p><p>另外carv 已经种子轮获得400w的投资，估值4000万</p>]]></content:encoded>
            <author>potot@newsletter.paragraph.com (Pototo.my3amclub)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/fe8490df526dc8100ad3bacb995a9a7fafb11da4c34dde968d26910bc623567c.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[     ZETA测试网BTC testnet教程]]></title>
            <link>https://paragraph.com/@potot/zeta-btc-testnet</link>
            <guid>Mk8jypsmlunYHLfR1laI</guid>
            <pubDate>Sat, 19 Nov 2022 08:44:22 GMT</pubDate>
            <description><![CDATA[测试网改动内容： 1.从每天交互获得1000分改为一周交互一次获得7000分 2.增加BTC 测试链 教程： 此次教程主要教大家如何交互BTC testnet的交互 传送门： https://labs.zetachain.com/leaderboard?code=J392K7sOyUPYkJJrbnx9W 准备工具： XDEFI钱包: https://www.xdefi.io/zh-hans/ 1.常规创建钱包地址 2.领水网址： https://coinfaucet.eu/ 方法：至此领水成功，回到zeta交互网页至此交互完成 韭菜第一次做mirro，有问题可以私信我 我的推特是@an47140244 谢谢大家]]></description>
            <content:encoded><![CDATA[<p>测试网改动内容：</p><p>1.从每天交互获得1000分改为一周交互一次获得7000分</p><p>2.增加BTC 测试链</p><p>教程：</p><p>此次教程主要教大家如何交互BTC testnet的交互</p><p>传送门：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://labs.zetachain.com/leaderboard?code=J392K7sOyUPYkJJrbnx9W">https://labs.zetachain.com/leaderboard?code=J392K7sOyUPYkJJrbnx9W</a></p><p>准备工具：</p><p>XDEFI钱包:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.xdefi.io/zh-hans/">https://www.xdefi.io/zh-hans/</a></p><p>1.常规创建钱包地址</p><p>2.领水网址：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://coinfaucet.eu/">https://coinfaucet.eu/</a></p><p>方法：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d30d9a8e442a75c9253adf4f047775045f581a263b4a5a4f96c0d7f606fe31cc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a33c220b3924f15782fdc4f856e74f310eda64758858c60824dd512bbdf46c3b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7bf1e598c77fe5ff106c94d19ee58cb6ceadbe3e8a08c2d03755d7877be0fff3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af6cc8072c684ea6327f167eb8ef5e1903395ca6bcb91ffa9bb7ae3cc2ebed92.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>至此领水成功，回到zeta交互网页</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/23d48e6f6ff1f2deb787f7b4d42c960949eb027295d004e9ee90771e2ba7ddc2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe860ff126fadfac4e814d8fc3cf78c93fa490d798a0fe5a2c47dc3a7575804e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>至此交互完成</p><p>韭菜第一次做mirro，有问题可以私信我</p><p>我的推特是@an47140244</p><p>谢谢大家</p>]]></content:encoded>
            <author>potot@newsletter.paragraph.com (Pototo.my3amclub)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c281a9d3cf2fe4b63088a41c42e287e2a672abf9e9ffe670d2d4400826cc277b.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Road to Web3 第九周 创建一个Swap Dapp]]></title>
            <link>https://paragraph.com/@potot/road-to-web3-swap-dapp</link>
            <guid>KwZDrQaA8Hke3JUxcHKJ</guid>
            <pubDate>Sun, 21 Aug 2022 17:24:50 GMT</pubDate>
            <description><![CDATA[原文地址 ：https://docs.alchemy.com/docs/how-to-build-a-token-swap-dapp-with-0x-ap准备工作进入 https://github.com/0xProject/swap-demo-tutorial ，点击fork，把代码复制到我们自己的Github。然后会转跳到我们自己的Github地址，选择 swap-demo-tutorial-part-9 进入。进入以后，我们复制这个链接地址。然后登录 https://gitpod.io/workspaces，点击 “New workspace”，然后把我们刚才拿到的地址复制进去。复制进去以后，点击下面那块灰色区域，进行加载编辑项目。进入项目以后，我们在Terminal里面输入下面的命令，切换我们的工作目录。cd swap-demo-tutorial-part-9 然后我们找到 Extensions菜单点击，在搜索框里输入Live Server，记得是图中红框里的那个，然后点击Install安装。然后我们在Terminal里面输入下面的代码安装browserify。npm i...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5ab8319f1b76cd61ab1dcd558f0a8b4a2f9bf4909c20bc268aa4c9a42abd39a0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>原文地址 ：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.alchemy.com/docs/how-to-build-a-token-swap-dapp-with-0x-api">https://docs.alchemy.com/docs/how-to-build-a-token-swap-dapp-with-0x-ap</a></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">准备工作</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/333d5d625fa80d34af99f6676c2bcd64efe120371380cd52594b7e620d52160d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/68d296542f72f57680822ae74e7679842037f86b9cfae8daae4095d7fe20e958.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>进入 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/0xProject/swap-demo-tutorial">https://github.com/0xProject/swap-demo-tutorial</a> ，点击fork，把代码复制到我们自己的Github。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/83f7c4297e3161435f55cc0a649f5c8db4cb8ec64cd307247eff47eec772351f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后会转跳到我们自己的Github地址，选择 swap-demo-tutorial-part-9 进入。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b3cf5fe9ade13a2669fa3833641fe19c2588db6c74fb29c18ae01d9fd9903908.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>进入以后，我们复制这个链接地址。然后登录 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gitpod.io/workspaces%EF%BC%8C%E7%82%B9%E5%87%BB">https://gitpod.io/workspaces，点击</a> “New workspace”，然后把我们刚才拿到的地址复制进去。复制进去以后，点击下面那块灰色区域，进行加载编辑项目。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8831f472a0130b240883e9851bf76e83b06d11cc0b6bdfadb39f0ec55da7c66b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>进入项目以后，我们在Terminal里面输入下面的命令，切换我们的工作目录。</p><pre data-type="codeBlock" text="cd swap-demo-tutorial-part-9
"><code>cd swap<span class="hljs-operator">-</span>demo<span class="hljs-operator">-</span>tutorial<span class="hljs-operator">-</span>part<span class="hljs-number">-9</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/14809dd3617d72c743718b3e11bdd7dffcc7ff0952eeb75a847effa0d7effa75.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们找到 Extensions菜单点击，在搜索框里输入Live Server，记得是图中红框里的那个，然后点击Install安装。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1eab2b52154a86ec73141a8ecf671f6e358c24d2bffd1e036bc04a99e11442b9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们在Terminal里面输入下面的代码安装browserify。</p><pre data-type="codeBlock" text="npm install -g browserify
"><code>npm install <span class="hljs-operator">-</span>g browserify
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d1f7d4fb73957addac5654b36e8dcf37cdb5d2805265328c39049374a7e3d09b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后在Termianl里面分别输入(不要一起输入)下面的每一行代码，分别安装 qs，bignumber，web3</p><pre data-type="codeBlock" text="npm i qs
npm i bignumber
npm i web3
"><code>npm <span class="hljs-selector-tag">i</span> qs
npm <span class="hljs-selector-tag">i</span> bignumber
npm <span class="hljs-selector-tag">i</span> web3
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a99756df5914d2070eabe5783d8d510dff12c084a2aa426d31a905c964c89bc5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>找到index.html文件夹，如图所示的地方，添加“Select A Token” 文字。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/43da8a37256a991f1fdb0455411df0dc6e09a7f141c732af8ca70564baa70447.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>找到index.js文件，用以下的内容替换文件的所有内容</p><pre data-type="codeBlock" text="const qs = require(&apos;qs&apos;);
const Web3 = require(&apos;web3&apos;);
const { default: BigNumber } = require(&apos;bignumber.js&apos;);

let currentTrade = {};
let currentSelectSide;
let tokens;

async function init() {
    await listAvailableTokens();
}

async function listAvailableTokens() {
    console.log(&quot;initializing&quot;);
    // let response = await fetch(&apos;https://tokens.coingecko.com/uniswap/all.json&apos;);
    // let tokenListJSON = await response.json();
    let response=&apos;{&quot;name&quot;:&quot;CoinGecko&quot;,&quot;logoURI&quot;:&quot;https://www.coingecko.com/assets/thumbnail-007177f3eca19695592f0b8b0eabbdae282b54154e1be912285c9034ea6cbaf2.png&quot;,&quot;keywords&quot;:[&quot;defi&quot;],&quot;timestamp&quot;:&quot;2022-08-17T04:08:12.925+00:00&quot;,&quot;tokens&quot;:[{&quot;chainId&quot;:56,&quot;address&quot;:&quot;0x55d398326f99059fF775485246999027B3197955&quot;,&quot;name&quot;:&quot;busd&quot;,&quot;symbol&quot;:&quot;busd&quot;,&quot;decimals&quot;:18,&quot;logoURI&quot;:&quot;https://assets.coingecko.com/coins/images/9956/thumb/4943.png?1636636734&quot;},{&quot;chainId&quot;:56,&quot;address&quot;:&quot;0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c&quot;,&quot;name&quot;:&quot;bnb&quot;,&quot;symbol&quot;:&quot;bnb&quot;,&quot;decimals&quot;:18,&quot;logoURI&quot;:&quot;https://assets.coingecko.com/coins/images/9956/thumb/4943.png?1636636734&quot;}],&quot;version&quot;:{&quot;major&quot;:975,&quot;minor&quot;:1,&quot;patch&quot;:0}}&apos;;
    let tokenListJSON = JSON.parse(response);
    console.log(&quot;Listing available tokens: &quot;, tokenListJSON);
    tokens = tokenListJSON.tokens;
    console.log(&quot;tokens: &quot;, tokens);

    let parent = document.getElementById(&quot;token_list&quot;);
    for(const i in tokens) {
        let div = document.createElement(&quot;div&quot;);
        div.className = &quot;token_row&quot;;

        let html = 
            `&lt;img class=&quot;token_list_img&quot; src=&quot;${tokens[i].logoURI}&quot;&gt;
                &lt;span class=&quot;token_list_text&quot;&gt;${tokens[i].symbol}&lt;/span&gt;`;
        div.innerHTML = html;
        div.onclick = () =&gt; {
            selectToken(tokens[i]);
        }
        parent.appendChild(div);       
    }
}

function selectToken(token) {
    closeModal();
    currentTrade[currentSelectSide] = token;
    console.log(&quot;currentTrade: &quot;, currentTrade);
    renderInterface();
}

function renderInterface() {
    if(currentTrade.from) {
        document.getElementById(&quot;from_token_img&quot;).src = currentTrade.from.logoURI;
        document.getElementById(&quot;from_token_text&quot;).innerHTML = currentTrade.from.symbol;
    }
    if(currentTrade.to) {
        document.getElementById(&quot;to_token_img&quot;).src = currentTrade.to.logoURI;
        document.getElementById(&quot;to_token_text&quot;).innerHTML = currentTrade.to.symbol;
    }
}

async function connect() {
    if (typeof window.ethereum !== &quot;undefined&quot;) {
        try {
            console.log(&quot;Connecting&quot;);
            await ethereum.request({ method: &quot;eth_requestAccounts&quot; });
        } catch (error) {
            console.log(error);
        }
        document.getElementById(&quot;login_button&quot;).innerHTML = &quot;Connected&quot;;
        document.getElementById(&quot;swap_button&quot;).disabled = false;
    } else {
        document.getElementById(&quot;login_button&quot;).innerHTML = 
            &quot;Please install Metamask&quot;;
    }
}

async function getPrice() {
    console.log(&quot;Getting Price&quot;);

    if(!currentTrade.from || !currentTrade.to || !document.getElementById(&quot;from_amount&quot;).value) return;
    let amount = Number(document.getElementById(&quot;from_amount&quot;).value * 10 ** currentTrade.from.decimals);

    const params = {
        sellToken: currentTrade.from.address,
        buyToken: currentTrade.to.address,
        sellAmount: amount,
    }

    // Fetch the swap price
    const response = await fetch(`https://bsc.api.0x.org/swap/v1/price?${qs.stringify(params)}`);

    swapPriceJSON = await response.json();
    console.log(&quot;Price: &quot;, swapPriceJSON);

    document.getElementById(&quot;to_amount&quot;).value = swapPriceJSON.buyAmount / (10 ** currentTrade.to.decimals);
    document.getElementById(&quot;gas_estimate&quot;).innerHTML = swapPriceJSON.estimatedGas;
}

async function getQuote(account) {
    console.log(&quot;Getting Quote&quot;);

    if(!currentTrade.from || !currentTrade.to || !document.getElementById(&quot;from_amount&quot;).value) return;
    let amount = Number(document.getElementById(&quot;from_amount&quot;).value * 10 ** currentTrade.from.decimals);

    const params = {
        sellToken: currentTrade.from.symbol,
        buyToken: currentTrade.to.symbol,
        sellAmount: amount,
        takerAddress: account,
        slippagePercentage: 0.05
    }; 

    // Fetch the swap price
    const response = await fetch(`https://bsc.api.0x.org/swap/v1/quote?${qs.stringify(params)}`);

    swapQuoteJSON = await response.json();
    console.log(&quot;Quote: &quot;, swapQuoteJSON);

    // document.getElementById(&quot;to_amount&quot;).value = swapQuoteJSON.price;
    document.getElementById(&quot;gas_estimate&quot;).innerHTML = swapQuoteJSON.estimatedGas;

    return swapQuoteJSON;
}

async function trySwap() {

    let accounts = await ethereum.request({ method: &quot;eth_accounts&quot; });
    let takerAddress = accounts[0];

    console.log(&quot;takerAddress:&quot;, takerAddress);

    const swapQuoteJSON = await getQuote(takerAddress);

    // Set Token Allowance
    // Interact with ERC20TokenContract
    const web3 = new Web3(Web3.givenProvider);
    const fromTokenAddress = currentTrade.from.address;
    const erc20abi = [{ &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;string&quot;, &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot; }, { &quot;internalType&quot;: &quot;string&quot;, &quot;name&quot;: &quot;symbol&quot;, &quot;type&quot;: &quot;string&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;max_supply&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;constructor&quot; }, { &quot;anonymous&quot;: false, &quot;inputs&quot;: [ { &quot;indexed&quot;: true, &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;owner&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;indexed&quot;: true, &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;spender&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;indexed&quot;: false, &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;value&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;Approval&quot;, &quot;type&quot;: &quot;event&quot; }, { &quot;anonymous&quot;: false, &quot;inputs&quot;: [ { &quot;indexed&quot;: true, &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;from&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;indexed&quot;: true, &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;to&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;indexed&quot;: false, &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;value&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;Transfer&quot;, &quot;type&quot;: &quot;event&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;owner&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;spender&quot;, &quot;type&quot;: &quot;address&quot; } ], &quot;name&quot;: &quot;allowance&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;spender&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;approve&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;bool&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;bool&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;account&quot;, &quot;type&quot;: &quot;address&quot; } ], &quot;name&quot;: &quot;balanceOf&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;burn&quot;, &quot;outputs&quot;: [], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;account&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;burnFrom&quot;, &quot;outputs&quot;: [], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;decimals&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint8&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;uint8&quot; } ], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;spender&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;subtractedValue&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;decreaseAllowance&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;bool&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;bool&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;spender&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;addedValue&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;increaseAllowance&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;bool&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;bool&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;name&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;string&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;string&quot; } ], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;symbol&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;string&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;string&quot; } ], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;totalSupply&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;recipient&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;transfer&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;bool&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;bool&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;sender&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;recipient&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;transferFrom&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;bool&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;bool&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }]
    console.log(&quot;trying swap&quot;); 

    const ERC20TokenContract = new web3.eth.Contract(erc20abi, fromTokenAddress);
    console.log(&quot;setup ERC20TokenContract: &quot;, ERC20TokenContract);

    const maxApproval = new BigNumber(2).pow(256).minus(1);
    console.log(&quot;approval amount: &quot;, maxApproval);

    const tx = await ERC20TokenContract.methods
        .approve(swapQuoteJSON.allowanceTarget, maxApproval)
        .send({ from: takerAddress })
        .then((tx) =&gt; {
            console.log(&quot;tx: &quot;, tx)
        });

    const receipt = await web3.eth.sendTransaction(swapQuoteJSON);
    console.log(&quot;receipt: &quot;, receipt);
}

init();

function openModal(side) {
    currentSelectSide = side;
    document.getElementById(&quot;token_modal&quot;).style.display = &quot;block&quot;;
}

function closeModal() {
    document.getElementById(&quot;token_modal&quot;).style.display = &quot;none&quot;;
}

document.getElementById(&quot;login_button&quot;).onclick = connect;
document.getElementById(&quot;from_token_select&quot;).onclick = () =&gt; {
     openModal(&quot;from&quot;);
};
document.getElementById(&quot;to_token_select&quot;).onclick = () =&gt; {
    openModal(&quot;to&quot;);
};
document.getElementById(&quot;modal_close&quot;).onclick = closeModal;
document.getElementById(&quot;from_amount&quot;).onblur = getPrice;
document.getElementById(&quot;swap_button&quot;).onclick = trySwap;
"><code>const qs <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'qs'</span>);
const Web3 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'web3'</span>);
const { default: BigNumber } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'bignumber.js'</span>);

let currentTrade <span class="hljs-operator">=</span> {};
let currentSelectSide;
let tokens;

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">init</span>(<span class="hljs-params"></span>) </span>{
    await listAvailableTokens();
}

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">listAvailableTokens</span>(<span class="hljs-params"></span>) </span>{
    console.log(<span class="hljs-string">"initializing"</span>);
    <span class="hljs-comment">// let response = await fetch('https://tokens.coingecko.com/uniswap/all.json');</span>
    <span class="hljs-comment">// let tokenListJSON = await response.json();</span>
    let response<span class="hljs-operator">=</span><span class="hljs-string">'{"name":"CoinGecko","logoURI":"https://www.coingecko.com/assets/thumbnail-007177f3eca19695592f0b8b0eabbdae282b54154e1be912285c9034ea6cbaf2.png","keywords":["defi"],"timestamp":"2022-08-17T04:08:12.925+00:00","tokens":[{"chainId":56,"address":"0x55d398326f99059fF775485246999027B3197955","name":"busd","symbol":"busd","decimals":18,"logoURI":"https://assets.coingecko.com/coins/images/9956/thumb/4943.png?1636636734"},{"chainId":56,"address":"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","name":"bnb","symbol":"bnb","decimals":18,"logoURI":"https://assets.coingecko.com/coins/images/9956/thumb/4943.png?1636636734"}],"version":{"major":975,"minor":1,"patch":0}}'</span>;
    let tokenListJSON <span class="hljs-operator">=</span> JSON.parse(response);
    console.log(<span class="hljs-string">"Listing available tokens: "</span>, tokenListJSON);
    tokens <span class="hljs-operator">=</span> tokenListJSON.tokens;
    console.log(<span class="hljs-string">"tokens: "</span>, tokens);

    let parent <span class="hljs-operator">=</span> document.getElementById(<span class="hljs-string">"token_list"</span>);
    <span class="hljs-keyword">for</span>(const i in tokens) {
        let div <span class="hljs-operator">=</span> document.createElement(<span class="hljs-string">"div"</span>);
        div.className <span class="hljs-operator">=</span> <span class="hljs-string">"token_row"</span>;

        let html <span class="hljs-operator">=</span> 
            `<span class="hljs-operator">&#x3C;</span>img class<span class="hljs-operator">=</span><span class="hljs-string">"token_list_img"</span> src<span class="hljs-operator">=</span><span class="hljs-string">"${tokens[i].logoURI}"</span><span class="hljs-operator">></span>
                <span class="hljs-operator">&#x3C;</span>span class<span class="hljs-operator">=</span><span class="hljs-string">"token_list_text"</span><span class="hljs-operator">></span>${tokens[i].symbol}<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">></span>`;
        div.innerHTML <span class="hljs-operator">=</span> html;
        div.onclick <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            selectToken(tokens[i]);
        }
        parent.appendChild(div);       
    }
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">selectToken</span>(<span class="hljs-params">token</span>) </span>{
    closeModal();
    currentTrade[currentSelectSide] <span class="hljs-operator">=</span> token;
    console.log(<span class="hljs-string">"currentTrade: "</span>, currentTrade);
    renderInterface();
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">renderInterface</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">if</span>(currentTrade.from) {
        document.getElementById(<span class="hljs-string">"from_token_img"</span>).src <span class="hljs-operator">=</span> currentTrade.from.logoURI;
        document.getElementById(<span class="hljs-string">"from_token_text"</span>).innerHTML <span class="hljs-operator">=</span> currentTrade.from.symbol;
    }
    <span class="hljs-keyword">if</span>(currentTrade.to) {
        document.getElementById(<span class="hljs-string">"to_token_img"</span>).src <span class="hljs-operator">=</span> currentTrade.to.logoURI;
        document.getElementById(<span class="hljs-string">"to_token_text"</span>).innerHTML <span class="hljs-operator">=</span> currentTrade.to.symbol;
    }
}

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">connect</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">if</span> (typeof window.ethereum <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"undefined"</span>) {
        <span class="hljs-keyword">try</span> {
            console.log(<span class="hljs-string">"Connecting"</span>);
            await ethereum.request({ method: <span class="hljs-string">"eth_requestAccounts"</span> });
        } <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
            console.log(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
        }
        document.getElementById(<span class="hljs-string">"login_button"</span>).innerHTML <span class="hljs-operator">=</span> <span class="hljs-string">"Connected"</span>;
        document.getElementById(<span class="hljs-string">"swap_button"</span>).disabled <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
    } <span class="hljs-keyword">else</span> {
        document.getElementById(<span class="hljs-string">"login_button"</span>).innerHTML <span class="hljs-operator">=</span> 
            <span class="hljs-string">"Please install Metamask"</span>;
    }
}

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getPrice</span>(<span class="hljs-params"></span>) </span>{
    console.log(<span class="hljs-string">"Getting Price"</span>);

    <span class="hljs-keyword">if</span>(<span class="hljs-operator">!</span>currentTrade.from <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">!</span>currentTrade.to <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">!</span>document.getElementById(<span class="hljs-string">"from_amount"</span>).<span class="hljs-built_in">value</span>) <span class="hljs-keyword">return</span>;
    let amount <span class="hljs-operator">=</span> Number(document.getElementById(<span class="hljs-string">"from_amount"</span>).<span class="hljs-built_in">value</span> <span class="hljs-operator">*</span> <span class="hljs-number">10</span> <span class="hljs-operator">*</span><span class="hljs-operator">*</span> currentTrade.from.decimals);

    const params <span class="hljs-operator">=</span> {
        sellToken: currentTrade.from.<span class="hljs-built_in">address</span>,
        buyToken: currentTrade.to.<span class="hljs-built_in">address</span>,
        sellAmount: amount,
    }

    <span class="hljs-comment">// Fetch the swap price</span>
    const response <span class="hljs-operator">=</span> await fetch(`https:<span class="hljs-comment">//bsc.api.0x.org/swap/v1/price?${qs.stringify(params)}`);</span>

    swapPriceJSON <span class="hljs-operator">=</span> await response.json();
    console.log(<span class="hljs-string">"Price: "</span>, swapPriceJSON);

    document.getElementById(<span class="hljs-string">"to_amount"</span>).<span class="hljs-built_in">value</span> <span class="hljs-operator">=</span> swapPriceJSON.buyAmount <span class="hljs-operator">/</span> (<span class="hljs-number">10</span> <span class="hljs-operator">*</span><span class="hljs-operator">*</span> currentTrade.to.decimals);
    document.getElementById(<span class="hljs-string">"gas_estimate"</span>).innerHTML <span class="hljs-operator">=</span> swapPriceJSON.estimatedGas;
}

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getQuote</span>(<span class="hljs-params">account</span>) </span>{
    console.log(<span class="hljs-string">"Getting Quote"</span>);

    <span class="hljs-keyword">if</span>(<span class="hljs-operator">!</span>currentTrade.from <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">!</span>currentTrade.to <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">!</span>document.getElementById(<span class="hljs-string">"from_amount"</span>).<span class="hljs-built_in">value</span>) <span class="hljs-keyword">return</span>;
    let amount <span class="hljs-operator">=</span> Number(document.getElementById(<span class="hljs-string">"from_amount"</span>).<span class="hljs-built_in">value</span> <span class="hljs-operator">*</span> <span class="hljs-number">10</span> <span class="hljs-operator">*</span><span class="hljs-operator">*</span> currentTrade.from.decimals);

    const params <span class="hljs-operator">=</span> {
        sellToken: currentTrade.from.symbol,
        buyToken: currentTrade.to.symbol,
        sellAmount: amount,
        takerAddress: account,
        slippagePercentage: <span class="hljs-number">0</span><span class="hljs-number">.05</span>
    }; 

    <span class="hljs-comment">// Fetch the swap price</span>
    const response <span class="hljs-operator">=</span> await fetch(`https:<span class="hljs-comment">//bsc.api.0x.org/swap/v1/quote?${qs.stringify(params)}`);</span>

    swapQuoteJSON <span class="hljs-operator">=</span> await response.json();
    console.log(<span class="hljs-string">"Quote: "</span>, swapQuoteJSON);

    <span class="hljs-comment">// document.getElementById("to_amount").value = swapQuoteJSON.price;</span>
    document.getElementById(<span class="hljs-string">"gas_estimate"</span>).innerHTML <span class="hljs-operator">=</span> swapQuoteJSON.estimatedGas;

    <span class="hljs-keyword">return</span> swapQuoteJSON;
}

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">trySwap</span>(<span class="hljs-params"></span>) </span>{

    let accounts <span class="hljs-operator">=</span> await ethereum.request({ method: <span class="hljs-string">"eth_accounts"</span> });
    let takerAddress <span class="hljs-operator">=</span> accounts[<span class="hljs-number">0</span>];

    console.log(<span class="hljs-string">"takerAddress:"</span>, takerAddress);

    const swapQuoteJSON <span class="hljs-operator">=</span> await getQuote(takerAddress);

    <span class="hljs-comment">// Set Token Allowance</span>
    <span class="hljs-comment">// Interact with ERC20TokenContract</span>
    const web3 <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Web3(Web3.givenProvider);
    const fromTokenAddress <span class="hljs-operator">=</span> currentTrade.from.<span class="hljs-built_in">address</span>;
    const erc20abi <span class="hljs-operator">=</span> [{ <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"name"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"string"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"symbol"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"string"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"max_supply"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"constructor"</span> }, { <span class="hljs-string">"anonymous"</span>: <span class="hljs-literal">false</span>, <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"indexed"</span>: <span class="hljs-literal">true</span>, <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"owner"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"indexed"</span>: <span class="hljs-literal">true</span>, <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"spender"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"indexed"</span>: <span class="hljs-literal">false</span>, <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"value"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"Approval"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"event"</span> }, { <span class="hljs-string">"anonymous"</span>: <span class="hljs-literal">false</span>, <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"indexed"</span>: <span class="hljs-literal">true</span>, <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"from"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"indexed"</span>: <span class="hljs-literal">true</span>, <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"to"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"indexed"</span>: <span class="hljs-literal">false</span>, <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"value"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"Transfer"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"event"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"owner"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"spender"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"allowance"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"spender"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"amount"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"approve"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"bool"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"bool"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"account"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"balanceOf"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"amount"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"burn"</span>, <span class="hljs-string">"outputs"</span>: [], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"account"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"amount"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"burnFrom"</span>, <span class="hljs-string">"outputs"</span>: [], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [], <span class="hljs-string">"name"</span>: <span class="hljs-string">"decimals"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint8"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint8"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"spender"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"subtractedValue"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"decreaseAllowance"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"bool"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"bool"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"spender"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"addedValue"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"increaseAllowance"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"bool"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"bool"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [], <span class="hljs-string">"name"</span>: <span class="hljs-string">"name"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"string"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [], <span class="hljs-string">"name"</span>: <span class="hljs-string">"symbol"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"string"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [], <span class="hljs-string">"name"</span>: <span class="hljs-string">"totalSupply"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"recipient"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"amount"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"transfer"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"bool"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"bool"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }, { <span class="hljs-string">"inputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"sender"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"address"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"recipient"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"address"</span> }, { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"amount"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> } ], <span class="hljs-string">"name"</span>: <span class="hljs-string">"transferFrom"</span>, <span class="hljs-string">"outputs"</span>: [ { <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"bool"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"bool"</span> } ], <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span> }]
    console.log(<span class="hljs-string">"trying swap"</span>); 

    const ERC20TokenContract <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> web3.eth.Contract(erc20abi, fromTokenAddress);
    console.log(<span class="hljs-string">"setup ERC20TokenContract: "</span>, ERC20TokenContract);

    const maxApproval <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> BigNumber(<span class="hljs-number">2</span>).pow(<span class="hljs-number">256</span>).minus(<span class="hljs-number">1</span>);
    console.log(<span class="hljs-string">"approval amount: "</span>, maxApproval);

    const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await ERC20TokenContract.methods
        .approve(swapQuoteJSON.allowanceTarget, maxApproval)
        .<span class="hljs-built_in">send</span>({ <span class="hljs-keyword">from</span>: takerAddress })
        .then((<span class="hljs-built_in">tx</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            console.log(<span class="hljs-string">"tx: "</span>, <span class="hljs-built_in">tx</span>)
        });

    const receipt <span class="hljs-operator">=</span> await web3.eth.sendTransaction(swapQuoteJSON);
    console.log(<span class="hljs-string">"receipt: "</span>, receipt);
}

init();

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">openModal</span>(<span class="hljs-params">side</span>) </span>{
    currentSelectSide <span class="hljs-operator">=</span> side;
    document.getElementById(<span class="hljs-string">"token_modal"</span>).style.display <span class="hljs-operator">=</span> <span class="hljs-string">"block"</span>;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">closeModal</span>(<span class="hljs-params"></span>) </span>{
    document.getElementById(<span class="hljs-string">"token_modal"</span>).style.display <span class="hljs-operator">=</span> <span class="hljs-string">"none"</span>;
}

document.getElementById(<span class="hljs-string">"login_button"</span>).onclick <span class="hljs-operator">=</span> connect;
document.getElementById(<span class="hljs-string">"from_token_select"</span>).onclick <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
     openModal(<span class="hljs-string">"from"</span>);
};
document.getElementById(<span class="hljs-string">"to_token_select"</span>).onclick <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
    openModal(<span class="hljs-string">"to"</span>);
};
document.getElementById(<span class="hljs-string">"modal_close"</span>).onclick <span class="hljs-operator">=</span> closeModal;
document.getElementById(<span class="hljs-string">"from_amount"</span>).onblur <span class="hljs-operator">=</span> getPrice;
document.getElementById(<span class="hljs-string">"swap_button"</span>).onclick <span class="hljs-operator">=</span> trySwap;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a901b00c589e883f99811961499114de8f479f71c8ea6f39eee3a5926ff82ea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们在Terminal里面输入下面的代码，之后我们会看到创建了一个新的 bundle.js文件。</p><pre data-type="codeBlock" text="browserify index.js --standalone bundle -o bundle.js
"><code>browserify index.js <span class="hljs-operator">-</span><span class="hljs-operator">-</span>standalone bundle <span class="hljs-operator">-</span>o bundle.js
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e12acc2ab21907d24812aa3498845a454810ffc27fbaf1dc4bff7927e8a20254.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们鼠标放到index.html页面，右键点击“Open with Live Server”，过一会就会进入到我们做的swap页面，选择Token的时候应该只有bnb和busd两个token选择，则说明代码没问题了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e62f5b1f875b996e3c7323b00c09e25d64c9c3a01623ccc8993f169b75da3c9c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们把Metamask切换到币安链，然后点击Sign in with MetaMask登录。选择用BNB交换BUSD，这里需要在你的钱包里有一些币安币，用的是正式网，不是测试网。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b65c0c78ff1f4309b3c9295472f81140a40493be31f7e4eb18016d3268675278.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们点击swap，会出来一个授权，让我们授权程序可以交换BNB，我们点击确定，等待主网确定。等确定完，会自动在Metamask弹出交易窗口，然后我们点击确定，就可以成功把0.001bnb交换成Busd了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ac1cd6d96546f4b677939df721e0e943c28ac9e967a2cf3af608a2fafc369c57.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们在Metamask里面找到这个交易记录，把交易记录的地址复制出来，到时候填到提交表单里。</p><p>交易成功以后，为了安全，我们可以去（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bscscan.com/tokenapprovalchecker%EF%BC%89%EF%BC%8C%E6%89%BE%E5%88%B0%E6%88%91%E4%BB%AC%E5%88%9A%E6%89%8D%E6%8E%88%E6%9D%83%E7%9A%84%E5%BA%94%E7%94%A8%EF%BC%8C%E5%8F%96%E6%B6%88%E6%8E%88%E6%9D%83%E3%80%82">https://bscscan.com/tokenapprovalchecker），找到我们刚才授权的应用，取消授权。</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/50d6b314337f17eb4d97d22308161e2a64eacf895b5fd9e4ae7bfb74fd64daf2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们在 swap-demo-tutorial-part-9 文件夹下面，新建一个 .gitignore的文件，添加内容 node_modules，这样我们就不用上传无用的node_modules文件夹了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/44a668417780ede3eb7aa6f1230b91498bbbdd087a2f7962fb755e76dcb7a195.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后我们在Source Control 里填写备注信息，点击Commit按钮右边的小三角，点击 Commit&amp;Push 把代码提交到我们的Github。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">提交表单</h2><p>链接：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alchemyapi.typeform.com/roadtoweek9">https://alchemyapi.typeform.com/roadtoweek9</a></p><p>表单最后填写，项目的Github地址（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/%E4%BD%A0%E7%9A%84Github%E5%90%8D%E5%AD%97/swap-demo-tutorial/tree/main/swap-demo-tutorial-part-9%EF%BC%89%E5%92%8C%E4%BD%A0%E5%9C%A8%E5%89%8D%E9%9D%A2%E5%A4%8D%E5%88%B6%E7%9A%84%E4%BA%A4%E6%98%93%E8%AE%B0%E5%BD%95%EF%BC%88https://bscscan.com/tx/%E4%BD%A0%E7%9A%84%E4%BA%A4%E6%98%93%E8%AE%B0%E5%BD%95tx%EF%BC%89%E3%80%82">https://github.com/你的Github名字/swap-demo-tutorial/tree/main/swap-demo-tutorial-part-9）和你在前面复制的交易记录（https://bscscan.com/tx/你的交易记录tx）。</a></p>]]></content:encoded>
            <author>potot@newsletter.paragraph.com (Pototo.my3amclub)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/143c6532f4b44dc3ddb3e8f86f16ca85314512a741fda2576f3040c39ee691b5.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>