Jason chen

Posted on Apr 11, 2022Read on Mirror.xyz

怎么通过看懂etherscan了解NFT项目情况?

看懂etherscan是成为区块链老炮入门的必要条件。

etherscan区块链浏览器包含了交易、区块、钱包地址、智能合约等所有区块链公开数据,通过这些信息你可以明白谁在什么时候做了什么事情。

我们今天以doodles为案例,带领大家走一遍分析doodles数据的全流程。

首先打开etherscan官网,可以在输入框中输入地址进行检索。

如果你知道doodles的地址可以直接粘贴进去,如果不知道可以打开opensea进入doodles的某个具体NFT主页后,在左侧的details中点击contract address跳转至etherscan详情页。

详情页如下图所示,一般你只需要关注合约余额、合约交互记录和合约代码三部分就足以了解该项目的大部分信息。

balance表示该地址所存放的ETH数额,我们在mint某个NFT项目的时候,缴纳的费用实际上是先到了NFT合约地址,然后再由项目方进行一步提款的动作将ETH转移至自己的个人地址,通过它你可以知道项目方赚了多少钱,是否进行了提款。

transactions存储了这个地址从诞生至今所有与智能合约交互的行为记录,通过它你可以知道项目方、用户在什么时间进行了什么操作。

若项目方将合约进行开源,你可以在contract中查看到智能合约代码,以及可以对智能合约进行读写操作,其中写操作是需要owner权限才可进行。

首先从transactions开始,先看一下表头这些字段的含义:

  • Txn Hash:交易哈希,这一次交易的唯一标识
  • Method:本次交易执行的动作
  • Block:当前交易所属的区块
  • Age:交易时间
  • From:发起交易的账户
  • to:接收交易的账户
  • Value:该交易中包含的ETH
  • Txn fee:交易中使用的gas费

我们先来看排在最上面最新的一次交易,可见其执行了SafeTransferFrom动作,该动作意味着持有人将其NFT转移给另外一个人,交易已经被打包进第11434814区块中,是在50分钟前进行的,交易发起者的地址是0x002...,这次交易中没有包含ETH,gas费为0.0015。

到这里你已经读懂了一行交易信息在表达什么,但是这还不够,我们点击Txn hash下钻该交易详细数据。

进入新的页面后,你需要关注的有价值的信息是 Transaction Action,右侧这句话表示“一个tokenId为108的DoodlesNFT从0x002...转移到了0x271...” ,所以现在你知道了这一次交易具体是谁把哪个NFT在什么时候转移给了谁。

我们再点击发起者的地址下钻到其详情页,可以看到他的余额有0.1个ETH,小户。

我们再看一下他的交易记录,可以看到他所有的NFT与虚拟币的交易情况,其中out表示卖出,in表示买入。

刚才分析了转移NFT的一个交易记录,我们再看一个类型叫 setApproveForAll,它代表的是授权某个地址可以转移走你的NFT,我们在opensea对自己的NFT卖出时,就是使用了这个接口,将自己的NFT的转移权授权给opensea,当有人在opensea购买时,opensea拥有转移权限可以将你的NFT转移给购买者。

如下图所示,大家在opensea出售NFT的时候,会显示 set approval for all,所以大家一定要注意如果有在某个非权威网站进行操作时,如果出现了这个显示要非常谨慎,因为同意之后对方就可以转移走你的NFT。

我们翻到最早的第一条交易,看看它做了什么。

可以看到它执行的方法名不是可读的而是一串字符,这是因为这个函数操作没有被识别不是标准函数,那它是什么呢,我们再看最右边的gas费很高0.3ETH,合约部署时或者其他需要写入大量数据才需要这么多gas费,这是第一条交易,所以可以得出这是部署合约的操作。

我们再点击Txn hash进入详情,可以看到地址为0x2b3的人备注为Deployer,他就是doodles项目的合约部署人,现在应该已经自由了吧...

doodles合约部署之后又发生了什么呢?第二个交易是set provenance,这个稍微解释一下,之前的文章中当你在买NFT时,你买到的究竟是什么?我讲过每个NFT的表现层是外部存储的,项目方具有修改的权限,set provenance 则是将表现层的数据生成hash存储进链中,并且只能存一次,从而保障后续不可能再进行数据更改,因为hash的原数据只要有变更所产生新的hasf也会完全不同,从而实现校验项目方是否修改过matedata,可见doodles还是很良心的用这个方法保证自己不会动数据。

然后我们可以看到进行了Set Base URI,即设置了NFT的matedata元数据,所以是先将元数据生成hash存进去,然后再将matedata的uri存了进去。

接着他使用Set Allow List设置了3次白名单。

然后产生了几个mint操作,但是都没有成功,这是咋回事呢?

我们点进交易详情看到说 Sale必须要打开才可以mint

这里我们要提前透支一下后面的课程了,先看doodles的代码,可以看到在mint函数中有一个saleIsActive参数校验,这个参数若为false则无法进行mint,所以这是管理员开启mint的参数,现在知道为什么那些mint失败了吗,因为管理员还没有开启mint,所以交易被拦截了。

然后我们一直向上翻,看到有一个交易叫 Set Is Allow List Active,这意味着管理员开启了mint。

至此doodles产生了一望无际的mint交易,开始了印钱模式 ......

相信你现在已经学会如何读懂一个项目方的交易信息了,并能从中读出一些自己的理解出来,其实多看看有些项目方的交易数据还是很有趣的,尤其是一开始的数据,比如能发现很多项目方偷鸡摸狗的行为哈哈。

这篇文章有点长,还有合约部分没讲,请耐心继续往下看。

我们进入Contract,可以看到该项目的合约代码,这里我就不再带着大家读代码了,后面有机会单独出栏目带大家阅读合约代码。

Read Contract表示读取合约数据,即合约代码对外暴露出的读取接口军科院在这里进行查询。

数量太多了,我挑几个重要的给大家讲讲,如下图,每个接口分为接口名和具体的值,接口名大家根据语义直接理解就可以,比如MAX PUBLIC MINT表示每个人最多可以mint的数量,那数量是多少呢?下面显示了5。

部分接口是需要写入参数的,比如balanceOf表示查询某个人持有的NFT数量,我们随便输入一个地址进去,得到的结果是0,即没有持有doodles。

剩下的太多了就不一一给大家演示了,请大家打开页面后自己试着点一点,琢磨理解其中的含义。

然后我们点击Write Contract,这里的接口都是对合约进行写入操作的,即改变合约数据,其中部分接口是需要校验管理员权限才可以执行的,比如开启mint、设置mint价格,如果你不是管理员则无法执行,部分接口如mint则是不需要校验权限的。

部分项目方代码会出现漏洞,把一些需要权限的接口忘了设置权限,比如我听说一个项目方把转移管理员权限这个接口没有设置管理员权限....导致自己的合约可以被所有人转移权限,这种错误犯了整个项目都哭了。

以上就是本篇文章的内容,有点长,如果你看到了这里说明很有耐心并且愿意花费时间学习web3知识,加油!

欢迎添加我的微信:cj350306878 一起交流学习探讨,请备注姓名 公司和职位,谢谢。

其他文章:

NFT