看懂 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 知识,加油!