<?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>tp</title>
        <link>https://paragraph.com/@tpwallet</link>
        <description>undefined</description>
        <lastBuildDate>Mon, 27 Jul 2026 18:53:18 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>tp</title>
            <url>https://storage.googleapis.com/papyrus_images/0f16a66159b2bb33a0ae0e139e9453a80ef7177657e82be9b2a5940fd8728884.png</url>
            <link>https://paragraph.com/@tpwallet</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[调用未开源合约（搬运）]]></title>
            <link>https://paragraph.com/@tpwallet/c4XmrxRF8DleRqsHio4S</link>
            <guid>c4XmrxRF8DleRqsHio4S</guid>
            <pubDate>Wed, 16 Feb 2022 15:59:30 GMT</pubDate>
            <description><![CDATA[源起 前几天，回答了一个问题，感觉还可以，写成一篇文章记录一下。 问题在： 如何用web3py调用闭源合约 | 登链社区 | 技术问答 (learnblockchain.cn) 问题中提到的交易记录在 Binance Transaction Hash (Txhash) Details | BscScan 首先查看交易记录，bscscan不能解析出来函数名，也就是abi没有公开。 确定函数调用签名也就是0xb45112b2 区块链中合约代码执行，需要指定某个合约地址的某个函数，其中这个执行的函数是使用Keccak-256(SHA-3)编码后的散列，取散列的前四个字节作为函数签名。官方定义："签名被定义为没有数据位置说明符的基本原型规范表达式，即具有带括号的参数类型列表的函数名称"。通俗的说就是：将函数名，带顺序的变量类型以及参数括号进行Keccak-256编码后，取前四个字节的二进制字符串，即以太坊的合约函数签名。 1，搜索网上的签名数据库： https://www.4byte.directory/signatures/ 搜索结果如下：说明还没有上传函数的abi定义 2，没有函数的...]]></description>
            <content:encoded><![CDATA[<p>源起 前几天，回答了一个问题，感觉还可以，写成一篇文章记录一下。 问题在： 如何用web3py调用闭源合约 | 登链社区 | 技术问答 (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://learnblockchain.cn">learnblockchain.cn</a>)</p><p>问题中提到的交易记录在 Binance Transaction Hash (Txhash) Details | BscScan</p><p>首先查看交易记录，bscscan不能解析出来函数名，也就是abi没有公开。</p><p>确定函数调用签名</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/77569a06bc066ee43fecf0ca0f72bf5d8a33267f0544d4073b73efb8a9017dbe.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>也就是0xb45112b2</p><p>区块链中合约代码执行，需要指定某个合约地址的某个函数，其中这个执行的函数是使用Keccak-256(SHA-3)编码后的散列，取散列的前四个字节作为函数签名。官方定义：&quot;签名被定义为没有数据位置说明符的基本原型规范表达式，即具有带括号的参数类型列表的函数名称&quot;。通俗的说就是：将函数名，带顺序的变量类型以及参数括号进行Keccak-256编码后，取前四个字节的二进制字符串，即以太坊的合约函数签名。</p><p>1，搜索网上的签名数据库： <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.4byte.directory/signatures/">https://www.4byte.directory/signatures/</a> 搜索结果如下：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/38e58668a649b7baba8827f849412592961760e807ea91509be82c01e67f3a93.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>说明还没有上传函数的abi定义 2，没有函数的abi信息，就没办法调用了吗？ 当然不是！ 只需要找到函数的定义，就相当于，你定义一个函数指针，签名只是这个函数指针，函数的参数保证调用堆栈不出错，而函数签名我们是有的。 3，找到函数原型，找到合约 点击合约地址 0x217这个</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f045bf5499db83dffe0c376ebd1972d3f6ddc5beb5db6bf51279d68f6027f45b.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><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3ccc75674facf1b8c6f51d8e0478ecbecf0a6dd690233d85ffb81b3705c4a1a2.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>点击 bytecode-decompiler，得到这样的代码：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f719a8d904b8a3ebdf6e98aeb29b91b9cb50764fb93f6bec291840f16d0cdab5.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>16435433551.png 搜索函数签名，得到函数原型</p><p>def unknownb45112b2(uint256 _param1): # not payable require calldata.size - 4 &gt;=′ 32 require _param1 == _param1 require ext_code.size(heroContractAddress) 4，构建函数名不一样，函数参数一样的函数 这个函数有返回值，只是为了方便演示效果</p><p>function greet3(uint256 num) public view returns (string memory) { return &quot;greet3&quot;; } 用你的合约生成调用接口 在使用的时候，address为合约地址</p><p>greeter = w3.eth.contract( address=&apos;0xB5816B1C17ce9386019ac42310dB523749F5f2c3&apos;, abi=jsobjs[&apos;abi&apos;] ) 再就是调用方法</p><p>搞定问题 1，查看webpy的代码，显然这样的调用是不支持的。 2，自己修改webpy的代码，支持签名替换 我开源的代码里面提供了，修改过的，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://contract.py">contract.py</a> 替换即可使用。github上有修改说明。 代码里面有个例子，一个合约里面提供2个函数，函数签名</p><p>function greet2(uint256 num) public view returns (string memory) { return &quot;greet2&quot;; }</p><pre data-type="codeBlock" text="function greet3(uint256 num) public view returns (string memory) {
    return &quot;greet3&quot;;
}
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">greet3</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> num</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">"greet3"</span>;
}
</code></pre><ul><li><p>greet2 函数签名 &apos;0xf9220889&apos;</p></li><li><p>greet3 函数签名 &apos;0x02d355dc&apos; print(greeter.functions.greet3(456).call(sigfn=&quot;0xf9220889&quot;)) 打印</p></li></ul><p>greet2 开源代码在： daodao2007/e001: call smart contract method without abi file (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://github.com">github.com</a>)</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://emn178.github.io/online-tool">emn178.github.io/online-tool</a>s/keccak_256.html 解码工具网站</p>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[小幽灵复盘]]></title>
            <link>https://paragraph.com/@tpwallet/JtsB1ZreRQJQfP6DGg2C</link>
            <guid>JtsB1ZreRQJQfP6DGg2C</guid>
            <pubDate>Fri, 11 Feb 2022 13:52:23 GMT</pubDate>
            <description><![CDATA[我们直接开始，先从前端找到API，可以看到publicSale相关的这两个，通过阅读js代码我们知道要先获取问题，然后再输入答案即可得到salt和signature。获取问题的api#获取随机问题的Post请求，参数为自己的地址 def posttest(): proxie = {"http": "http://127.0.0.1:24213", "https": "https://127.0.0.1:24213"} header = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36", } data = { "address":"your address", #"anwser":"able" } url = "https://weirdoghost.com/ghostApi/publicSale/...]]></description>
            <content:encoded><![CDATA[<p>我们直接开始，先从前端找到API，可以看到publicSale相关的这两个，通过阅读js代码我们知道要先获取问题，然后再输入答案即可得到salt和signature。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/44d39975172c681b984b470b26a4c53993a9942b151037dbe679456169369592.png" alt="获取问题的api" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">获取问题的api</figcaption></figure><pre data-type="codeBlock" text="#获取随机问题的Post请求，参数为自己的地址
def posttest():
    proxie = {&quot;http&quot;: &quot;http://127.0.0.1:24213&quot;, &quot;https&quot;: &quot;https://127.0.0.1:24213&quot;}
    header = {
        &quot;Content-Type&quot;: &quot;application/json&quot;,
        &quot;User-Agent&quot;: &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36&quot;,
    }
    data = {
        &quot;address&quot;:&quot;your address&quot;,
        #&quot;anwser&quot;:&quot;able&quot;

    }
    url = &quot;https://weirdoghost.com/ghostApi/publicSale/getRandom&quot;

    res = requests.post(url=url, headers=header, proxies=proxie, verify=False)
"><code>#获取随机问题的Post请求，参数为自己的地址
def posttest():
    proxie <span class="hljs-operator">=</span> {<span class="hljs-string">"http"</span>: <span class="hljs-string">"http://127.0.0.1:24213"</span>, <span class="hljs-string">"https"</span>: <span class="hljs-string">"https://127.0.0.1:24213"</span>}
    header <span class="hljs-operator">=</span> {
        <span class="hljs-string">"Content-Type"</span>: <span class="hljs-string">"application/json"</span>,
        <span class="hljs-string">"User-Agent"</span>: <span class="hljs-string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"</span>,
    }
    data <span class="hljs-operator">=</span> {
        <span class="hljs-string">"address"</span>:<span class="hljs-string">"your address"</span>,
        #<span class="hljs-string">"anwser"</span>:<span class="hljs-string">"able"</span>

    }
    url <span class="hljs-operator">=</span> <span class="hljs-string">"https://weirdoghost.com/ghostApi/publicSale/getRandom"</span>

    res <span class="hljs-operator">=</span> requests.post(url<span class="hljs-operator">=</span>url, headers<span class="hljs-operator">=</span>header, proxies<span class="hljs-operator">=</span>proxie, verify<span class="hljs-operator">=</span>False)
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eb690127c43a478f29b1c7db18b90d6c15be3f7d853c4b33d1a5ca1d91ba8bde.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><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://weirdoghost.com/img/X16BiYx5tbFgyaloLcaMsdEchkCKtu7p.png">https://weirdoghost.com/img/X16BiYx5tbFgyaloLcaMsdEchkCKtu7p.png</a></p><p>去这个链接获得自己问题的图片，得到答案。（在Mint前接口是没有更新的，如果提前更新那你就可以提前准备好，如果到Mint时在更新那你就要像下图一样做图片识别来最快获得答案）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6c01051131512803121b702e2f4ef4b75b787984b4503911842cc8fe5cb4c67b.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>以答案为able为例则再构建一个post请求获得salt和signature</p><pre data-type="codeBlock" text="def posttest():
    proxie = {&quot;http&quot;: &quot;http://127.0.0.1:24213&quot;, &quot;https&quot;: &quot;https://127.0.0.1:24213&quot;}
    header = {
        &quot;Content-Type&quot;: &quot;application/json&quot;,
        &quot;User-Agent&quot;: &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36&quot;,
    }
    data = {
        &quot;address&quot;:&quot;your address&quot;,
        &quot;anwser&quot;:&quot;able&quot;

    }
    url = &quot;https://weirdoghost.com/ghostApi/publicSale/&quot;

    res = requests.post(url=url, headers=header, proxies=proxie, verify=False)
"><code>def posttest():
    proxie <span class="hljs-operator">=</span> {<span class="hljs-string">"http"</span>: <span class="hljs-string">"http://127.0.0.1:24213"</span>, <span class="hljs-string">"https"</span>: <span class="hljs-string">"https://127.0.0.1:24213"</span>}
    header <span class="hljs-operator">=</span> {
        <span class="hljs-string">"Content-Type"</span>: <span class="hljs-string">"application/json"</span>,
        <span class="hljs-string">"User-Agent"</span>: <span class="hljs-string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"</span>,
    }
    data <span class="hljs-operator">=</span> {
        <span class="hljs-string">"address"</span>:<span class="hljs-string">"your address"</span>,
        <span class="hljs-string">"anwser"</span>:<span class="hljs-string">"able"</span>

    }
    url <span class="hljs-operator">=</span> <span class="hljs-string">"https://weirdoghost.com/ghostApi/publicSale/"</span>

    res <span class="hljs-operator">=</span> requests.post(url<span class="hljs-operator">=</span>url, headers<span class="hljs-operator">=</span>header, proxies<span class="hljs-operator">=</span>proxie, verify<span class="hljs-operator">=</span>False)
</code></pre><p>得到我们需要的数据</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8bc08f7d4f4ad922caa973f3a518819b5786ad2fd64bae53655c819d36e5a857.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>最后去合约填写就好啦或者写个mint函数就好啦</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/270fa9aaf158ec0e20cd89a1035aac67ac34b3ab76df963e6a5c10094a30d2e1.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><strong>如果你看到这里，那么恭喜你看了一篇完全没用上的文章，最后还是要拼网，能加载出来图片的随便Mint，加载不出来的怎么折腾也没用</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/14a0da154cfac93863cf26a2cdb466732f6e374960599cc54eca330495549256.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>本文来自<s>抽奖</s>学习社区DFarm Club</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/dfarm.eth">https://mirror.xyz/dfarm.eth</a></p>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[NFT合约交互基础篇]]></title>
            <link>https://paragraph.com/@tpwallet/nft</link>
            <guid>3CC9Rxk3tSXKBkGZ9cbL</guid>
            <pubDate>Tue, 25 Jan 2022 15:50:42 GMT</pubDate>
            <description><![CDATA[新手发文，有错误欢迎指出 NTF合约交互 一、寻找到合约，我知道的有两种方法 1.直接在官方网站上按f12打开开发者模式，然后shift+f查找关键字address,contract等，这里以apemfers.com为例（此方法同样适用于寻找未开源合约的ABI） 你也可以在这里查找抽奖的逻辑，如果查到只是在前端js验证的则可用新钱包参与抽奖，当然这需要一定代码阅读能力，此处不细说了2.通过etherscan来查找，可以在此处查找合约（需要特别注意，此次可能会找到假合约，请注意自行鉴别）我们以查找LilHeros为例，0xd78b76fcc33cd416da9d3d42f72649a23d7ac647是合约地址。我们通过名字查找（也可通过其他查找，例如总数，价格等），可以看到此处有两个合约。分辨真假个人看这些方面:供应总数，价格，时间是否与官方一致，以及是否有交易（通常会有测试）。当然如果无法判断建议等官方通知就好，不要冒不必要的风险。 注：有时可能主网合约还没有部署，可去Rinkeby测试网查找，查找方法同主网一样。二、与合约交互 1.仍以LilHeros为例，点击Contrac...]]></description>
            <content:encoded><![CDATA[<p>新手发文，有错误欢迎指出</p><p>NTF合约交互</p><p>一、寻找到合约，我知道的有两种方法</p><p>1.直接在官方网站上按f12打开开发者模式，然后shift+f查找关键字address,contract等，这里以apemfers.com为例（此方法同样适用于寻找未开源合约的ABI）</p><p>你也可以在这里查找抽奖的逻辑，如果查到只是在前端js验证的则可用新钱包参与抽奖，当然这需要一定代码阅读能力，此处不细说了</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/88e16cb3727581593c302036f36dd0ac3967aea714af449e4b8d0b6f7e743b2b.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>2.通过etherscan来查找，可以在此处查找合约（需要特别注意，此次可能会找到假合约，请注意自行鉴别）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e1a2fd7770255d45ef6e0c1b29ab7a1ff2ec284a33db62730298e1d58c4aabbb.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>我们以查找LilHeros为例，0xd78b76fcc33cd416da9d3d42f72649a23d7ac647是合约地址。我们通过名字查找（也可通过其他查找，例如总数，价格等），可以看到此处有两个合约。分辨真假个人看这些方面:供应总数，价格，时间是否与官方一致，以及是否有交易（通常会有测试）。当然如果无法判断建议等官方通知就好，不要冒不必要的风险。</p><p>注：有时可能主网合约还没有部署，可去Rinkeby测试网查找，查找方法同主网一样。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b1483c4953d659bd376e88a4f9c14d6f8406e1952b220f5940caf37bfe33a256.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>1.仍以LilHeros为例，点击Contract，Code页面我们只需关注源代码部分即可（最上面的），看不懂源码直接看Read,Write部分即可。个人认为Read,Write部分较简单，理解英语单词即可了解各函数的作用。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/94173ee9d2eaf0d65150a3f84cb351b920c412cf74f9b2a04699d6e54ae472df.png" alt="。Code页面" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">。Code页面</figcaption></figure><p>Read页面只可读取不可操作，大致分两种，一种不需要填参数可直接查看，如第11项，另一种需要填写参数，如第1项就需要填写地址来查询此地址拥有的token数量。</p><p>通过英文意思我们猜测这些函数的功能从上到下为：查询数量，查询是否授权（看参数可知特指某一tokenId的授权），查询是否全部授权，最大数量，名称，合约拥有者，某tokenid拥有者，暂停，价格，私有mint数量，私有Mint是否开启，每笔私有mint交易最大mint数量，每个钱包私有Mint最大数量，私有Mint开始时间，公共Mint是否开启。</p><p>需要注意的是这些读取到的数值是可能被改变的，如果你想第一时间抢，关注StartTime,setActive,Pause之类的关键字函数就好，让我们接着看Write页面</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/89b37a0fc65262ff454846c986ad20b55b1935c7cc5dbc2152b2cd6d73fba2e1.png" alt="Read页面" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Read页面</figcaption></figure><p>Write页面则是我们需要操作的地方，要操作首先需要点击Connect to Web3链接你的钱包。一般我们只需关注带Mint的函数即可（如果着急卖也可提前授权OPENSEA，可以让你比他人更快一些上架），其他函数大多为合约拥有者才可执行。这里我们以mintPublic为例（为什么以这个为例？因为其他函数还需要一个签名的参数我不会）。看到参数是有提示的，第一个参数是价格，即ETH的数量，第二个参数是你要Mint的数量，假设mint价格是0.4，你要mint两个，则第一个参数填写0.8，第二个参数填写2。一般的mint函数都是这两个参数，遇到需要其他参数的自行研究</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f31f5f35db3297345a07057f26863099f6583a9edfeb8d674b82ead96cd1b861.png" alt="Write页面" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Write页面</figcaption></figure><p>需要注意的是如果你错误地执行这些函数小狐狸会提示你错误并且给你一个比较高的GAS，导致这种情况的原因很多，直接拒绝即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/790c8ccc82f1616ae929a6b63624929af5397b917c32398923f1fd2bf81994c3.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>三、进阶应用</p><p>仍以LilHeros为例，通过阅读合约源码我们可以看到mintPrivate这个函数的验证和白名单一样，所以只要你有白名单你就可以通过调用这个方法mint到50个</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/49427966d91cb0064b95a1c1ee2c70c36e1f5645f465d872399f27ef7706711f.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>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[冷兔复盘]]></title>
            <link>https://paragraph.com/@tpwallet/Goese3S0oTy50I49RHLw</link>
            <guid>Goese3S0oTy50I49RHLw</guid>
            <pubDate>Wed, 19 Jan 2022 08:31:04 GMT</pubDate>
            <description><![CDATA[转自 https://yixinrock.notion.site/XRC-Public-Sale-c1a4d178fabb43dcb0535448ae0134df复盘管理员在 14020984 14020997 区块操作两次 setStatus管理员在 14020984 区块设置开始抢购、14020997 设置抢购结束管理员的 setStatus 请求，被科学家打包进 bundle 执行十个请求在 14020987 14020986 中成功执行管理员请求在区块 index 位置，区块 456 笔请求，必须在同一个区块中才能抢到以下账号抢到很多https://etherscan.io/address/0x0bf8422f0a124e664f4ac2ec42cfe50afe8b8906请求数 14020984: 456; 14020985: 900; 14020986: 130; 14020987: 418参考https://etherscan.io/block/14020997https://etherscan.io/address/0x6f8139116b64b7fa056F14...]]></description>
            <content:encoded><![CDATA[<p>转自</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://yixinrock.notion.site/XRC-Public-Sale-c1a4d178fabb43dcb0535448ae0134df">https://yixinrock.notion.site/XRC-Public-Sale-c1a4d178fabb43dcb0535448ae0134df</a></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">复盘</h2><ul><li><p>管理员在 14020984 14020997 区块操作两次 <code>setStatus</code></p></li><li><p>管理员在 14020984 区块设置开始抢购、14020997 设置抢购结束</p></li><li><p>管理员的 setStatus 请求，被科学家打包进 bundle 执行</p></li><li><p>十个请求在 14020987 14020986 中成功执行</p></li><li><p>管理员请求在区块 index 位置，区块 456 笔请求，必须在同一个区块中才能抢到</p></li><li><p>以下账号抢到很多</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x0bf8422f0a124e664f4ac2ec42cfe50afe8b8906">https://etherscan.io/address/0x0bf8422f0a124e664f4ac2ec42cfe50afe8b8906</a></p></li></ul></li><li><p>请求数 14020984: 456; 14020985: 900; 14020986: 130; 14020987: 418</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">参考</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/block/14020997">https://etherscan.io/block/14020997</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x6f8139116b64b7fa056F141d0a3F3002eeb359Bc">https://etherscan.io/address/0x6f8139116b64b7fa056F141d0a3F3002eeb359Bc</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://flashbots-explorer.marto.lol/?block=14020984">https://flashbots-explorer.marto.lol/?block=14020984</a></p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">总结</h2><ul><li><p>区块排名前 12 的，<strong>科学家从 mempool 池将 setStatus 请求和自己的请求打包成 bundle</strong> 给 flashbot</p></li><li><p>后面的这位科学家，使用的可能是鸟枪法（开始之后、不断的发请求，如果抢购结束就取消）</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">步骤</h2><ol><li><p>批量给自己的地址转 ETH，如果不调整代码中的 gas price &amp; gas limit，给个地址 0.2E 就够了</p></li><li><p>自己去 blocknative 注册一个账号，免费账号延迟比较高（2S）</p><ol><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.blocknative.com/webhook-api/rate-limits">https://docs.blocknative.com/webhook-api/rate-limits</a></p></li></ol></li><li><p>步骤 1 中的私钥填入 <code>xrc.js</code> 70 行，格式 [’1’, ‘2’, ‘3’]</p></li><li><p>步骤 2 中的私钥填入 <code>xrc.js</code> 43 行，<strong>务必替换掉，我用的免费账号，限额很小，别卷我！</strong></p></li><li><p><code>process.env.PROVIDER_WSS_URL</code> 也替换成自己的 rpc</p></li><li><p>运行代码 ☕️</p></li></ol><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">如何运行</h2><pre data-type="codeBlock" text="yarn add ethers underscore bnc-sdk ws

// 提前三分钟运行
node xrc.js
"><code>yarn add ethers underscore bnc<span class="hljs-operator">-</span>sdk ws

<span class="hljs-comment">// 提前三分钟运行</span>
node xrc.js
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">代码</h2><p>// mainnet // <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x534d37c630b7e4d2a6c1e064f3a2632739e9ee04">https://etherscan.io/address/0x534d37c630b7e4d2a6c1e064f3a2632739e9ee04</a> // ownership // <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x6f8139116b64b7fa056F141d0a3F3002eeb359Bc">https://etherscan.io/address/0x6f8139116b64b7fa056F141d0a3F3002eeb359Bc</a> - mempool 监听这个地址</p><p>// rinkeby // <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rinkeby.etherscan.io/address/0xe4f85223c4c81856988508d210fc62480de5352b#code">https://rinkeby.etherscan.io/address/0xe4f85223c4c81856988508d210fc62480de5352b#code</a></p><p>/**</p><ul><li><p>监听合约的 setStatus 操作，批量下单 */</p></li></ul><p>/* TODO:</p><ul><li><p>10 个地址每个转 0.2</p></li><li><p>source ~/.env_main</p></li><li><p>结束后统计成功率</p></li><li><p>删除私钥 */</p></li></ul><p>import { ethers } from &apos;ethers&apos; import _ from &apos;underscore&apos; import BlocknativeSdk from &apos;bnc-sdk&apos;; import WebSocket from &apos;ws&apos;; import { abi } from &apos;./abi.js&apos;;</p><p>if (process.env.PROVIDER_WSS_URL === undefined) { console.error(&quot;Please provide PROVIDER_WSS_URL env&quot;) process.exit(1) }</p><p>const contractAddress = &apos;0x534d37c630b7e4d2a6c1e064f3a2632739e9ee04&apos; const xrc_abi = [ &apos;function mint() payable&apos;, &apos;function balanceOf(address owner) view returns (uint256)&apos; ]</p><p>// rinkeby // replace networkId to 1 // replace admin_address to 0x6f8139116b64b7fa056F141d0a3F3002eeb359Bc const ADMIN_ADDRESS = &quot;0x6f8139116b64b7fa056F141d0a3F3002eeb359Bc&quot; const options = { dappId: &apos;fe96be23-dee0-4b98-b2a0-b6450886588b&apos;, networkId: 1, system: &apos;ethereum&apos;, ws: WebSocket, transactionHandlers: [async (event) =&gt; await go(event.transaction)], onerror: (error) =&gt; {console.error(&apos;error!!! &apos;, error)} }</p><p>// replace mint to setStatus const main = async () =&gt; { const sdk = new BlocknativeSdk(options) console.log(&apos;listening until error msg is seen...&apos;) await sdk.configuration({ scope: contractAddress, abi: abi, filters: [ { from: ADMIN_ADDRESS }, { &quot;contractCall.methodName&quot;: &quot;setStatus&quot; }, { status: &quot;confirmed&quot; } // { status: &quot;pending&quot; } ], watchAddress: true }) }</p><p>const go = async (txData) =&gt; { const arr = [</p><p>]</p><p>await Promise.all(arr.map(async v =&gt; await mintByPvKey(v))) }</p><p>const mintByPvKey = async (privateKey) =&gt; { const provider = new ethers.providers.WebSocketProvider(process.env.PROVIDER_WSS_URL) const wallet = new ethers.Wallet(privateKey, provider) const account = wallet.connect(provider) const address = wallet.address</p><p>console.log(<code>now processssssing account ${address}...</code>)</p><p>const spacex = new ethers.Contract( contractAddress, xrc_abi, account )</p><p>const balance = async (address) =&gt; { const out = await spacex.balanceOf(address) console.log(<code>debug: address ${address} has ${out} cnt of xrc</code>) return out }</p><p>const mint = async () =&gt; { const gasPrice = ethers.utils.parseUnits(&quot;900&quot;, &quot;gwei&quot;) const address = wallet.address const gasLimit = 150000 const value = ethers.utils.parseEther(&quot;0.0502&quot;) const cost = ethers.utils.formatEther(gasPrice.mul(gasLimit).add(value))</p><pre data-type="codeBlock" text="console.log(`!!!!!!! address: ${address} will spent ${cost} ETH, and gasPrice is: ${gasPrice}`)

try {
  const ba = await balance(address)
  if (ba &gt; 0) {
    console.log(`address ${address} already got one!!!`) 
    return
  }

  const tx = await spacex.mint({
    gasPrice,
    gasLimit,
    value,
  })

  const res = await tx.wait()
  if (res.status) {
    console.log(`Transaction receipt : https://www.etherscan.io/tx/${res.logs[1].transactionHash}\n`);
  }

} catch (e) {
  console.log(e.message)
}
return
"><code>console.log(`<span class="hljs-operator">!</span><span class="hljs-operator">!</span><span class="hljs-operator">!</span><span class="hljs-operator">!</span><span class="hljs-operator">!</span><span class="hljs-operator">!</span><span class="hljs-operator">!</span> <span class="hljs-keyword">address</span>: ${<span class="hljs-keyword">address</span>} will spent ${cost} ETH, and gasPrice <span class="hljs-keyword">is</span>: ${gasPrice}`)

<span class="hljs-keyword">try</span> {
  const ba <span class="hljs-operator">=</span> await balance(<span class="hljs-keyword">address</span>)
  <span class="hljs-keyword">if</span> (ba <span class="hljs-operator">></span> <span class="hljs-number">0</span>) {
    console.log(`<span class="hljs-keyword">address</span> ${<span class="hljs-keyword">address</span>} already got one<span class="hljs-operator">!</span><span class="hljs-operator">!</span><span class="hljs-operator">!</span>`) 
    <span class="hljs-keyword">return</span>
  }

  const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await spacex.mint({
    gasPrice,
    gasLimit,
    value,
  })

  const res <span class="hljs-operator">=</span> await <span class="hljs-built_in">tx</span>.wait()
  <span class="hljs-keyword">if</span> (res.status) {
    console.log(`Transaction receipt : https:<span class="hljs-comment">//www.etherscan.io/tx/${res.logs[1].transactionHash}\n`);</span>
  }

} <span class="hljs-keyword">catch</span> (e) {
  console.log(e.message)
}
<span class="hljs-keyword">return</span>
</code></pre><p>}</p><p>await mint() }</p><p>await main() // process.exit(0)</p><h2 id="h-export-const-abi-inputsinternaltypestringnameinitbaseuritypestringinternaltypeaddressnamesignertypeaddressinternaltypeuint256namemaxbatchsizetypeuint256internaltypeuint256namecollectionsizetypeuint256internaltypeuint256namereserveamounttypeuint256statemutabilitynonpayabletypeconstructoranonymousfalseinputsindexedtrueinternaltypeaddressnameownertypeaddressindexedtrueinternaltypeaddressnameapprovedtypeaddressindexedtrueinternaltypeuint256nametokenidtypeuint256nameapprovaltypeeventanonymousfalseinputsindexedtrueinternaltypeaddressnameownertypeaddressindexedtrueinternaltypeaddressnameoperatortypeaddressindexedfalseinternaltypeboolnameapprovedtypeboolnameapprovalforalltypeeventanonymousfalseinputsindexedfalseinternaltypestringnamenewbaseuritypestringnamebaseurichangedtypeeventanonymousfalseinputsindexedfalseinternaltypeaddressnamemintertypeaddressindexedfalseinternaltypeuint256nameamounttypeuint256namemintedtypeeventanonymousfalseinputsindexedtrueinternaltypeaddressnamepreviousownertypeaddressindexedtrueinternaltypeaddressnamenewownertypeaddressnameownershiptransferredtypeeventanonymousfalseinputsindexedfalseinternaltypeaddressnamemintertypeaddressindexedfalseinternaltypeaddressnamerecipienttypeaddressindexedfalseinternaltypeuint256nameamounttypeuint256namereservedtokentypeeventanonymousfalseinputsindexedfalseinternaltypeaddressnamesignertypeaddressnamesignerchangedtypeeventanonymousfalseinputsindexedfalseinternaltypeenum-xrcstatusnamestatustypeuint8namestatuschangedtypeeventanonymousfalseinputsindexedtrueinternaltypeaddressnamefromtypeaddressindexedtrueinternaltypeaddressnametotypeaddressindexedtrueinternaltypeuint256nametokenidtypeuint256nametransfertypeeventinputsnamepriceoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsinternaltypeaddressnametotypeaddressinternaltypeuint256nametokenidtypeuint256nameapproveoutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeaddressnameownertypeaddressnamebalanceofoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsnamebalancewithdrawnoutputsinternaltypeboolnametypeboolstatemutabilityviewtypefunctioninputsnamebaseurioutputsinternaltypestringnametypestringstatemutabilityviewtypefunctioninputsinternaltypeuint256nametokenidtypeuint256namegetapprovedoutputsinternaltypeaddressnametypeaddressstatemutabilityviewtypefunctioninputsinternaltypeuint256nametokenidtypeuint256namegetownershipdataoutputscomponentsinternaltypeaddressnameaddrtypeaddressinternaltypeuint64namestarttimestamptypeuint64internaltypestruct-erc721atokenownershipnametypetuplestatemutabilityviewtypefunctioninputsinternaltypeaddressnameownertypeaddressinternaltypeaddressnameoperatortypeaddressnameisapprovedforalloutputsinternaltypeboolnametypeboolstatemutabilityviewtypefunctioninputsnamemaxmintoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsnamemaxsupplyoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsnamemintoutputsstatemutabilitypayabletypefunctioninputsnamenameoutputsinternaltypestringnametypestringstatemutabilityviewtypefunctioninputsnamenextownertoexplicitlysetoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsinternaltypeaddressnameownertypeaddressnamenumbermintedoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsnameowneroutputsinternaltypeaddressnametypeaddressstatemutabilityviewtypefunctioninputsinternaltypeuint256nametokenidtypeuint256nameownerofoutputsinternaltypeaddressnametypeaddressstatemutabilityviewtypefunctioninputsinternaltypeuint256nameamounttypeuint256internaltypestringnamesalttypestringinternaltypebytesnametokentypebytesnamepresalemintoutputsstatemutabilitypayabletypefunctioninputsinternaltypeaddressnametypeaddressnamepublicmintedoutputsinternaltypeboolnametypeboolstatemutabilityviewtypefunctioninputsnamerenounceownershipoutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeaddressnamerecipienttypeaddressinternaltypeuint256nameamounttypeuint256namereserveoutputsstatemutabilitynonpayabletypefunctioninputsnamereserveamountoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsinternaltypeaddressnamefromtypeaddressinternaltypeaddressnametotypeaddressinternaltypeuint256nametokenidtypeuint256namesafetransferfromoutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeaddressnamefromtypeaddressinternaltypeaddressnametotypeaddressinternaltypeuint256nametokenidtypeuint256internaltypebytesnamedatatypebytesnamesafetransferfromoutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeaddressnameoperatortypeaddressinternaltypeboolnameapprovedtypeboolnamesetapprovalforalloutputsstatemutabilitynonpayabletypefunctioninputsinternaltypestringnamenewbaseuritypestringnamesetbaseurioutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeuint256namequantitytypeuint256namesetownersexplicitoutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeaddressnamesignertypeaddressnamesetsigneroutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeenum-xrcstatusnamestatustypeuint8namesetstatusoutputsstatemutabilitynonpayabletypefunctioninputsnamestatusoutputsinternaltypeenum-xrcstatusnametypeuint8statemutabilityviewtypefunctioninputsinternaltypebytes4nameinterfaceidtypebytes4namesupportsinterfaceoutputsinternaltypeboolnametypeboolstatemutabilityviewtypefunctioninputsnamesymboloutputsinternaltypestringnametypestringstatemutabilityviewtypefunctioninputsinternaltypeuint256nameindextypeuint256nametokenbyindexoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsinternaltypeaddressnameownertypeaddressinternaltypeuint256nameindextypeuint256nametokenofownerbyindexoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsinternaltypeuint256nametokenidtypeuint256nametokenurioutputsinternaltypestringnametypestringstatemutabilityviewtypefunctioninputsnametokensreservedoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsnametotalsupplyoutputsinternaltypeuint256nametypeuint256statemutabilityviewtypefunctioninputsinternaltypeaddressnamefromtypeaddressinternaltypeaddressnametotypeaddressinternaltypeuint256nametokenidtypeuint256nametransferfromoutputsstatemutabilitynonpayabletypefunctioninputsinternaltypeaddressnamenewownertypeaddressnametransferownershipoutputsstatemutabilitynonpayabletypefunctioninputsnamewithdrawoutputsstatemutabilitynonpayabletypefunction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">export const abi = [{&quot;inputs&quot;:[{&quot;internalType&quot;:&quot;string&quot;,&quot;name&quot;:&quot;initBaseURI&quot;,&quot;type&quot;:&quot;string&quot;},{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;signer&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;_maxBatchSize&quot;,&quot;type&quot;:&quot;uint256&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;_collectionSize&quot;,&quot;type&quot;:&quot;uint256&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;_reserveAmount&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;approved&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:true,&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&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;owner&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:true,&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;operator&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;bool&quot;,&quot;name&quot;:&quot;approved&quot;,&quot;type&quot;:&quot;bool&quot;}],&quot;name&quot;:&quot;ApprovalForAll&quot;,&quot;type&quot;:&quot;event&quot;},{&quot;anonymous&quot;:false,&quot;inputs&quot;:[{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;string&quot;,&quot;name&quot;:&quot;newBaseURI&quot;,&quot;type&quot;:&quot;string&quot;}],&quot;name&quot;:&quot;BaseURIChanged&quot;,&quot;type&quot;:&quot;event&quot;},{&quot;anonymous&quot;:false,&quot;inputs&quot;:[{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;minter&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;amount&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;Minted&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;previousOwner&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:true,&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;newOwner&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;OwnershipTransferred&quot;,&quot;type&quot;:&quot;event&quot;},{&quot;anonymous&quot;:false,&quot;inputs&quot;:[{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;minter&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;recipient&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;amount&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;ReservedToken&quot;,&quot;type&quot;:&quot;event&quot;},{&quot;anonymous&quot;:false,&quot;inputs&quot;:[{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;signer&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;SignerChanged&quot;,&quot;type&quot;:&quot;event&quot;},{&quot;anonymous&quot;:false,&quot;inputs&quot;:[{&quot;indexed&quot;:false,&quot;internalType&quot;:&quot;enum XRC.Status&quot;,&quot;name&quot;:&quot;status&quot;,&quot;type&quot;:&quot;uint8&quot;}],&quot;name&quot;:&quot;StatusChanged&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;:true,&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;Transfer&quot;,&quot;type&quot;:&quot;event&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;PRICE&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;to&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;approve&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;owner&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;name&quot;:&quot;balanceWithdrawn&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;view&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;baseURI&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;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;getApproved&quot;,&quot;outputs&quot;:[{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;&quot;,&quot;type&quot;:&quot;address&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;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;getOwnershipData&quot;,&quot;outputs&quot;:[{&quot;components&quot;:[{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;addr&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint64&quot;,&quot;name&quot;:&quot;startTimestamp&quot;,&quot;type&quot;:&quot;uint64&quot;}],&quot;internalType&quot;:&quot;struct ERC721A.TokenOwnership&quot;,&quot;name&quot;:&quot;&quot;,&quot;type&quot;:&quot;tuple&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;owner&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;operator&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;isApprovedForAll&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;view&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;maxMint&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;name&quot;:&quot;maxSupply&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;name&quot;:&quot;mint&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;payable&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;nextOwnerToExplicitlySet&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;owner&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;numberMinted&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;name&quot;:&quot;owner&quot;,&quot;outputs&quot;:[{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;&quot;,&quot;type&quot;:&quot;address&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;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;ownerOf&quot;,&quot;outputs&quot;:[{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;&quot;,&quot;type&quot;:&quot;address&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;internalType&quot;:&quot;string&quot;,&quot;name&quot;:&quot;salt&quot;,&quot;type&quot;:&quot;string&quot;},{&quot;internalType&quot;:&quot;bytes&quot;,&quot;name&quot;:&quot;token&quot;,&quot;type&quot;:&quot;bytes&quot;}],&quot;name&quot;:&quot;presaleMint&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;payable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;publicMinted&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;view&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;renounceOwnership&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;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;reserve&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;reserveAmount&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;from&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;to&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;safeTransferFrom&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;from&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;to&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;},{&quot;internalType&quot;:&quot;bytes&quot;,&quot;name&quot;:&quot;_data&quot;,&quot;type&quot;:&quot;bytes&quot;}],&quot;name&quot;:&quot;safeTransferFrom&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;operator&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;bool&quot;,&quot;name&quot;:&quot;approved&quot;,&quot;type&quot;:&quot;bool&quot;}],&quot;name&quot;:&quot;setApprovalForAll&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[{&quot;internalType&quot;:&quot;string&quot;,&quot;name&quot;:&quot;newBaseURI&quot;,&quot;type&quot;:&quot;string&quot;}],&quot;name&quot;:&quot;setBaseURI&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;quantity&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;setOwnersExplicit&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;signer&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;setSigner&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[{&quot;internalType&quot;:&quot;enum XRC.Status&quot;,&quot;name&quot;:&quot;_status&quot;,&quot;type&quot;:&quot;uint8&quot;}],&quot;name&quot;:&quot;setStatus&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;status&quot;,&quot;outputs&quot;:[{&quot;internalType&quot;:&quot;enum XRC.Status&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;bytes4&quot;,&quot;name&quot;:&quot;interfaceId&quot;,&quot;type&quot;:&quot;bytes4&quot;}],&quot;name&quot;:&quot;supportsInterface&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;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;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;index&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;tokenByIndex&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;owner&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;index&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;tokenOfOwnerByIndex&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;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;tokenURI&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;tokensReserved&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;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;from&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;address&quot;,&quot;name&quot;:&quot;to&quot;,&quot;type&quot;:&quot;address&quot;},{&quot;internalType&quot;:&quot;uint256&quot;,&quot;name&quot;:&quot;tokenId&quot;,&quot;type&quot;:&quot;uint256&quot;}],&quot;name&quot;:&quot;transferFrom&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;newOwner&quot;,&quot;type&quot;:&quot;address&quot;}],&quot;name&quot;:&quot;transferOwnership&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;},{&quot;inputs&quot;:[],&quot;name&quot;:&quot;withdraw&quot;,&quot;outputs&quot;:[],&quot;stateMutability&quot;:&quot;nonpayable&quot;,&quot;type&quot;:&quot;function&quot;}]</h2>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[工具整理]]></title>
            <link>https://paragraph.com/@tpwallet/lyhFVNz1l7AbzTIiGWL7</link>
            <guid>lyhFVNz1l7AbzTIiGWL7</guid>
            <pubDate>Mon, 10 Jan 2022 22:31:32 GMT</pubDate>
            <description><![CDATA[来自鲨鱼群组： 鏈上：查詢Gas Fee : https://www.blocknative.com/gas-estimator查詢Block發車： https://txstreet.com/v/eth-btc查詢各鏈上資產Portfolio、交易歷史、可以取消授權過的交易：https://debank.com/幫使用者的錢包新增正確的鏈：https://chainlist.org/ 5. 查詢鏈上交易對行情、交易對流動性、Swap交易對：https://www.dextools.io/app/ 6.智能合约消耗了大量的Gas个数据看板 https://dune.xyz/0xBi/0xBiGas-Fee-Dashboard查看是哪个项目在大量消耗Gas，网站可视化 https://ultrasound.money/#join-the-fam 8.针对消耗大量 Gas 的 NFT 合约/账户的排名 https://nftscan.com/analytics/tracker 9鏈上數據統計及可視化:https://dune.xyz/ 10.基本審視智能合約(BSC,ETH):http...]]></description>
            <content:encoded><![CDATA[<p>来自鲨鱼群组：</p><p>鏈上：</p><ol><li><p>查詢Gas Fee : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.blocknative.com/gas-estimator">https://www.blocknative.com/gas-estimator</a></p></li><li><p>查詢Block發車： <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://txstreet.com/v/eth-btc">https://txstreet.com/v/eth-btc</a></p></li><li><p>查詢各鏈上資產Portfolio、交易歷史、可以取消授權過的交易：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://debank.com/">https://debank.com/</a></p></li><li><p>幫使用者的錢包新增正確的鏈：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chainlist.org/">https://chainlist.org/</a>   5. 查詢鏈上交易對行情、交易對流動性、Swap交易對：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.dextools.io/app/">https://www.dextools.io/app/</a>  <br>6.智能合约消耗了大量的Gas个数据看板 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.xyz/0xBi/0xBiGas-Fee-Dashboard">https://dune.xyz/0xBi/0xBiGas-Fee-Dashboard</a></p></li><li><p>查看是哪个项目在大量消耗Gas，网站可视化 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ultrasound.money/#join-the-fam">https://ultrasound.money/#join-the-fam</a> 8.针对消耗大量 Gas 的 NFT 合约/账户的排名 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nftscan.com/analytics/tracker">https://nftscan.com/analytics/tracker</a> 9鏈上數據統計及可視化:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.xyz/">https://dune.xyz/</a> 10.基本審視智能合約(BSC,ETH):<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ceye.bitying.cn/">https://ceye.bitying.cn/</a> 11.整合多個錢包管理nft(需付費0.1eth)：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wgmi.io/">https://wgmi.io/</a>  <br>項目：   1. 幣種項目團隊查詢:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.cypherhunter.com/zh-hans/search/">https://www.cypherhunter.com/zh-hans/search/</a>   2. 查詢項目投資機構參與額度、項目目前融資進度 : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.dovemetrics.com/">https://www.dovemetrics.com/</a>   3. 查詢聲量最高的幣：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lunarcrush.com/">https://lunarcrush.com/</a></p></li><li><p>查詢錢包地址用戶勝率（幣&amp;NFT)：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://beta.prysm.xyz/">https://beta.prysm.xyz/</a>  <br>5.查詢稀有度、销售量、Mint热度、白名单项目、鲸鱼动向：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.niftyriver.io/sales/et">https://www.niftyriver.io/sales/et</a>  <br>6.列出每天發行SOL鏈上NFT的項目:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://howrare.is/drops">https://howrare.is/drops</a> 7.觀察Token的有上的交易所和各項指標:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.tokenterminal.com/terminal/projects/ethereum">https://www.tokenterminal.com/terminal/projects/ethereum</a> 8.早期大項目mint钱包（前100）做了一个聚合觀察最新mint項目：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.xyz/0xBi/BAYC">https://dune.xyz/0xBi/BAYC</a>  9.一站視覺化觀察自己錢包的NFT:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://flooredape.io/">https://flooredape.io/</a></p></li></ol><p>Telegram工具：   1. cex有幣的消息會用Tg通知(包括上新幣）：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/coin_listing">https://t.me/coin_listing</a>  <br>2.    Google插件：   1.OS上直接看到稀有排名：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chrome.google.com/webstore/detail/traitsniper/acaonckckmmakfgjfkgbfeepdhmajkeg">https://chrome.google.com/webstore/detail/traitsniper/acaonckckmmakfgjfkgbfeepdhmajkeg</a></p><p>Discord插件： <br>1.英文翻譯：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eth.antcave.club/gong-ju-shi-yong-zhi-nan/discord-zhong-wen-cha-jian-an-zhuang-ji-shi-yong-jie-jue-ying-wen-kun-nan">https://eth.antcave.club/gong-ju-shi-yong-zhi-nan/discord-zhong-wen-cha-jian-an-zhuang-ji-shi-yong-jie-jue-ying-wen-kun-nan</a></p><p>好東西還是跟大家分享一下，以下出自於自己好兄弟 Bitman B大 aka 台灣最帥/歐KOL aka 人生勝利組</p><p>#NFT #Tool 幾個NFT常用工具分享：</p><ol><li><p>綜合分析工具 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nftgo.io/">https://nftgo.io/</a> (免費好用) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://moby.gg/">https://moby.gg/</a> (便宜) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nansen.ai/">https://nansen.ai/</a> (貴，可能11/26黑五有折扣?)</p></li><li><p>即將發售的NFT <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nextdrop.is/">https://nextdrop.is/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rarity.tools/upcoming/">https://rarity.tools/upcoming/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nftcatcher.io/drops">https://nftcatcher.io/drops</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/nftcalendar">https://discord.com/invite/nftcalendar</a></p></li><li><p>稀有度查詢 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rarity.tools/">https://rarity.tools/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://raritysniffer.com/">https://raritysniffer.com/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/raritysniper">https://discord.com/invite/raritysniper</a></p></li><li><p>查看gas <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereumprice.org/gas/">https://ethereumprice.org/gas/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blocknative.com/gas-estimator#">https://blocknative.com/gas-estimator#</a></p></li><li><p>其他 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nftbank.ai/">https://nftbank.ai/</a> (查看自己NFT的資產價值&amp;花過的tax) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wgmi.io/">https://wgmi.io/</a> (地板價和交易量查詢) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://context.app/feed">https://context.app/feed</a> (類似在使用IG追蹤大戶動向) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/nftwhalealert">https://twitter.com/nftwhalealert</a> (即時交易量排名、異常高價交易通知) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ninjalerts.com/">https://www.ninjalerts.com/</a> (要買NFT並下載app設定通知）</p></li></ol><p>附上他的討論群：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/bitmantwchannel/174">https://t.me/bitmantwchannel/174</a></p>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[2021待做列表]]></title>
            <link>https://paragraph.com/@tpwallet/2021</link>
            <guid>3qWLMzjXenbMWPjESoXU</guid>
            <pubDate>Mon, 03 Jan 2022 00:49:45 GMT</pubDate>
            <description><![CDATA[1.solana链（其他链）学习 2.主流链的交互 3.nft抢购学习 4.套利的学习 5.监控地址，寻找地址 6.批量撸空头，poap，gamefi等]]></description>
            <content:encoded><![CDATA[<p>1.solana链（其他链）学习</p><p>2.主流链的交互</p><p>3.nft抢购学习</p><p>4.套利的学习</p><p>5.监控地址，寻找地址</p><p>6.批量撸空头，poap，gamefi等</p>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[mirror一些作者]]></title>
            <link>https://paragraph.com/@tpwallet/mirror</link>
            <guid>UeIUKAaRJq0pcqgQGedC</guid>
            <pubDate>Wed, 22 Dec 2021 09:53:24 GMT</pubDate>
            <description><![CDATA[1）http://mirror.xyz/nbblockchain.eth… 空投详细教程技巧 2）http://mirror.xyz/0xE4Bf88FaAEc9e55F9450709cF86Fc4E97B9a3307… 套利交易技巧/协议分析 3）http://mirror.xyz/0xsoros.eth DAO的分享/协议学习分析 4）http://mirror.xyz/0xfAd631c21cD293eE714b56198182817ba768B158… GAMEFI打金/套利技巧/DAO研究 5）http://mirror.xyz/raccooncrypto.eth… 搬砖经验分享/新协议介绍分析 6）http://mirror.xyz/dfarm.eth 各种交易技巧，学习如何做币圈科学家 7）http://mirror.xyz/0x410a0887cC91cCf1e8Db56422b9a5D8B078c2200… 很多详细的币圈钱包等教程，比较细致 8）http://mirror.xyz/0x21955b6635b67B19Ee0472b8a4Ac4E1d89521c...]]></description>
            <content:encoded><![CDATA[<p>1）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/1rxZSM0Mj8">http://mirror.xyz/nbblockchain.eth…</a> 空投详细教程技巧</p><p>2）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/G4pc9hpHxV">http://mirror.xyz/0xE4Bf88FaAEc9e55F9450709cF86Fc4E97B9a3307…</a> 套利交易技巧/协议分析</p><p>3）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/BthpDIuTkv">http://mirror.xyz/0xsoros.eth</a> DAO的分享/协议学习分析</p><p>4）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/dTRhgffhr0">http://mirror.xyz/0xfAd631c21cD293eE714b56198182817ba768B158…</a> GAMEFI打金/套利技巧/DAO研究</p><p>5）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/KUJ7Q9m47I">http://mirror.xyz/raccooncrypto.eth…</a> 搬砖经验分享/新协议介绍分析</p><p>6）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/a2buFaWJaG">http://mirror.xyz/dfarm.eth</a> 各种交易技巧，学习如何做币圈科学家</p><p>7）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/ASGzitrIJ1">http://mirror.xyz/0x410a0887cC91cCf1e8Db56422b9a5D8B078c2200…</a> 很多详细的币圈钱包等教程，比较细致</p><p>8）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/sJcCioFgFf">http://mirror.xyz/0x21955b6635b67B19Ee0472b8a4Ac4E1d89521cbe…</a> 新协议分析 9）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/XvmDB0Nv3q">http://mirror.xyz/0xAEa29c04E32EBCE118ea8cee975a3317190cCCdd…</a> 空投教程较多</p><p>10）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/lryMsrlGga">http://mirror.xyz/0xE43a21Ee76b591fe6E479da8a8a388FCfea6F77F…</a> 行业分析</p><p>翻了几个，就…很一般，先堆这以后再筛选吧</p>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
        <item>
            <title><![CDATA[各类测试网领水]]></title>
            <link>https://paragraph.com/@tpwallet/VHEBQeTPcuB80wLncaGU</link>
            <guid>VHEBQeTPcuB80wLncaGU</guid>
            <pubDate>Tue, 21 Dec 2021 13:17:14 GMT</pubDate>
            <description><![CDATA[一、Ropsten测试网 1：https://faucet.dimensions.network/ 2:https://faucet.ropsten.be/ 二、Kovan测试网 1：https://gitter.im/kovan-testnet/faucet 2：https://faucet.kovan.network/ https://linkfaucet.protofire.io/kovan并填写您的ETH钱包地址，点击“发送”在Kovan网络上选择ETH代币。 3:https://enjin.io/software/kovan-faucet 4、https://app.pods.finance/faucet 领水https://faucet.kovan.network/ https://faucet.routerprotocol.com/ 三、Rinkeby测试网 1：https://faucet.rinkeby.io/ 四：Goerli测试网 1：https://faucet.goerli.mudit.blog/ 五：xDai 1：https://xdai-faucet...]]></description>
            <content:encoded><![CDATA[<p>一、Ropsten测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.dimensions.network/">https://faucet.dimensions.network/</a> 2:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.ropsten.be/">https://faucet.ropsten.be/</a> 二、Kovan测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gitter.im/kovan-testnet/faucet">https://gitter.im/kovan-testnet/faucet</a> 2：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.kovan.network/">https://faucet.kovan.network/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linkfaucet.protofire.io/kovan%E5%B9%B6%E5%A1%AB%E5%86%99%E6%82%A8%E7%9A%84ETH%E9%92%B1%E5%8C%85%E5%9C%B0%E5%9D%80%EF%BC%8C%E7%82%B9%E5%87%BB%E2%80%9C%E5%8F%91%E9%80%81%E2%80%9D%E5%9C%A8Kovan%E7%BD%91%E7%BB%9C%E4%B8%8A%E9%80%89%E6%8B%A9ETH%E4%BB%A3%E5%B8%81%E3%80%82">https://linkfaucet.protofire.io/kovan并填写您的ETH钱包地址，点击“发送”在Kovan网络上选择ETH代币。</a> 3:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://enjin.io/software/kovan-faucet">https://enjin.io/software/kovan-faucet</a> 4、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.pods.finance/faucet">https://app.pods.finance/faucet</a> 领水<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.kovan.network/">https://faucet.kovan.network/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.routerprotocol.com/">https://faucet.routerprotocol.com/</a></p><p>三、Rinkeby测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.rinkeby.io/">https://faucet.rinkeby.io/</a></p><p>四：Goerli测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.goerli.mudit.blog/">https://faucet.goerli.mudit.blog/</a></p><p>五：xDai 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://xdai-faucet.top/">https://xdai-faucet.top/</a> 2：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bridge.xdaichain.com/">https://bridge.xdaichain.com/</a> 3:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blockscout.com/xdai/mainnet/faucet">https://blockscout.com/xdai/mainnet/faucet</a></p><p>六：kovan3测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.arbitrum.io/">https://faucet.arbitrum.io/</a></p><p>七：币安BSC测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.binance.org/faucet-smart">https://testnet.binance.org/faucet-smart</a></p><p>八：欧易OKExChain测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gitter.im/kovan-testnet/faucet">https://gitter.im/kovan-testnet/faucet</a> 2：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.okexcn.com/drawdex">https://www.okexcn.com/drawdex</a> 3：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.kswap.finance/help/gitter">https://docs.kswap.finance/help/gitter</a></p><p>九：火币Heco测试网 1：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scan-testnet.hecochain.com/faucet">https://scan-testnet.hecochain.com/faucet</a></p><p>添加matic测试网 在领水：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.matic.network/">https://faucet.matic.network/</a></p><p>Harmony Testnet领水：1.explorer.pops.one 2.faucet.pops.one</p><p>PlatON Testnet领水 faucet.platon.network/faucet</p>]]></content:encoded>
            <author>tpwallet@newsletter.paragraph.com (tp)</author>
        </item>
    </channel>
</rss>