NFT打狗随笔(二):链上跟单、合约分析
July 30th, 2022

大家好,我是大老鸽。我们今天来讲一下手动操作去跟单的方法以及如何简单地自行根据代码评估合约。市面上有很多集成监控、分析合约、一键跟单的工具。相对于这些自动工具,手动肯定是非常慢的。这篇文章主要是说一下相关代码和操作的原理,让读者们对对这些知识有个简单的了解,真正去打狗的时候建议还是结合工具,效率更高。

链上跟单

上一篇文章我们讲到了使用Boto监控聪明钱包地址。在监控报警之后,我们需要取出Minted byContract两个字段的值。然后打开区块链浏览器https://etherscan.io/,搜索地址**Minted by这个字段的地址,找到之后再从Transactions里搜索Contract**的地址,就可以定位到那次交易。

以Mike小号的这次mint为例,我们首先复制出0x771c4364973093a00f910fd179acc3bda901f25f他的钱包地址,去搜索出他的交易列表,然后再搜索0xbe8b39e38fe4442a5a56c4f1947eb0dae62cfde8这个合约地址,很快就能定位到那一条tx了。这时候我们需要点进去这笔交易看一下方法和传参。

拉到最下面点击Click to see More,展开Input Data,如下图所示:

第一行的Function表示调用了mint方法,下面的[0]代表_mintAmount参数传的是16进制的2(mint一次数量为2)。其实NFT铸造的方法大部分无外乎都是mint、mintToMultiple、freeMint、publicMint之类的,在使用区块链浏览器调用的时候基本也都是一个eth单价和mint数量两个参数,有的合约也会加一个接收地址的参数。

我们找到了方法和参数,下面我们就可以去调用这个方法。首先搜索合约地址0xbe8b39e38fe4442a5a56c4f1947eb0dae62cfde8。

点击tab栏上的Contract,然后点击Write Contract按钮。再点击Connect to Web3按钮连接钱包。

链接上钱包之后我们就可以调用mint方法了。展开mint这一栏,填入两个参数,第一个参数是mint每个所需要的eth,我们是freemint,所以这里都是填0。第二个参数是单词mint的数量,这个数量不可以超过合约规定的单次mint最大数量或者单钱包总持有量的最大数量。一般我们跟着跟单地址的参数填就行,基本就是可mint的最大数量了。

填完之后点击Write,如果小狐狸的gas没有异常,确认之后Write按钮旁边没有红字报错,显示View your transition按钮,就说明交易成功发送等待打包上链啦。

以上就是使用你自己的监控频道来手动跟单的全部流程,相对来说还是有点麻烦的,有的金狗总量很少,手动可能会来不及,所以最好有工具来辅助跟单。

合约分析

接下来我们聊一下简单的合约分析,这里主要针对打狗时可能会遇到的一些问题来说。我会写的尽量白话一点,不用太多专业术语,尽量让没有代码基础的人也能看懂。不过我还是强烈建议读者先看看这篇 Solidity进修之路(一) ,对合约开发稍微有一些了解之后再来继续阅读本文以下的部分。

最大供应量

除了从Opensea项目介绍、官网或推特之类给出的信息能知道最大供应量之外,我们也可以在合约中迅速找到。可以从源码中搜索一下"supply"关键字,一般最大供应量都会起maxSupply、max_supply之类的变量名。

单钱包最大mint数量

单钱包最大mint数量的变量起名不是那么的统一,这类变量名里可能会包括max、mint、limit、per、wallet之类的关键字,一般也都会在最大供应量附近定义。

或者去mint方法或者mint方法的修饰器(modifier关键字)里找找:

如果实在找不到,很有可能是合约允许单钱包无限打,这种项目要小心。

超发问题

一些土狗,尤其是正规项目的盗版货,都会有超发开关。那么如何从合约中看出是否可以超发呢?

我们在找到最大供应量的变量之后,可以全局搜索:

如果能够找到一个只允许合约创建者调用,并且在内部修改最大供应量值的方法,那么这个项目就是有超发开关。

一般项目的超发方法都是叫setMaxSupply这个名,我们也可以直接去Write Contract里看看能不能找到这个方法。

当然,除了这种手动调用方法去修改供应量的超发,也有合约写的不严谨的超发。例如在mint方法时对判断当前供应量和最大供应量判断失误,也可能有超发风险。

下图这个是个正常的供应量判断,在调用mint的方法传入的数量+当前供应量小于总供应量时,函数调用不会成功并提示"Max supply exceeded!"

Gas问题以及ERC721A

在红豆的ERC721A出现之前,市面上大部分流通的NFT都是基于OpenZeppelinERC721合约实现。使用ERC721合约实现的NFT在mint多个NFT时,会成倍的消耗gas。

简单来说,ERC721A从存储类型、mint调用次数以及、token铸造者对tokenid的保存方式三个方面优化,在mint多个NFT的时候可以节省大量的gas。具体的合约分析比较复杂,我们这篇文章先不展开讲。这里也算是个小预告,Solidity进修之路系列马上出第二篇—ERC721与ERC721A相关内容,有兴趣学习的同学可以期待一下~

现在的NFT基本都是基于ERC721A的了,不用太担心因为合约导致的gas问题。当然图狗圈子鱼龙混杂,什么水平的开发者都有,有些可能什么都不懂直接随便复制了一套代码就发图了,所以大家在打狗的时候还是稍微注意下这个地方,全局搜一下合约里有没有"ERC721A"关键字就好。

上面提到的很多问题,市面一些工具是直接能自动分析出来的,比自己看合约要方便得多,后面我也会专门开一篇文章介绍一下常用的NFT工具。

关于跟单、合约的一些问题今天就讲到这里,基本都是些比较简单的分析,接下来我会写一篇文章来系统的讲一下ERC721合约,让大家能够自己写代码来开发一个NFT。

欢迎关注我的推特:

邮箱:dalaoge@outlook.com

Subscribe to dalaoge.eth
Receive the latest updates directly to your inbox.
Nft graphic
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from dalaoge.eth

Skeleton

Skeleton

Skeleton