twodam.eth

Posted on Feb 22, 2022Read on Mirror.xyz

【教程】Etherscan 查看账户类型、资产数据、合约以及交易

Etherscan 可以说是目前以太坊事实上的基础设施,查询链上地址和交易信息,在此基础之上,他们还利用这些海量的数据实现各种好用的功能,今天在这篇文章简单描述一些。 同时也希望帮助到更多非开发者的用户,让大家能够知道如何通过区块链浏览器去查询确认一些数据,知道自己在做什么,也知道项目方承诺的是否与链上行为相符等。

账户类型

以太坊上有两种账户:EOA 以及合约,EOA 也就是一般大家使用的普通地址,通过私钥控制;而合约就比较特殊,没有私钥,所有功能都通过写在智能合约内的代码执行,不能自主运行,一定要由 EOA 地址发送交易才能触发合约。

怎么识别呢?Etherscan 上会显示对应地址的类型以及一些标签:

PolyNetwork 攻击者

Uniswap V3 交易路由合约

可以看到左上方地址详情会显示前缀 “Address“ 或 “Contract“,对应的就是普通地址跟合约的区别了,普通地址是只要有私钥就可以发起交易,而合约则要看情况,不同类型的实现版本会有不同的约束。 有的合约出现漏洞会影响所有用户,有的合约则安全性良好,推特上一般也会有人去研究各种热门合约,不懂开发的用户也可以多看看报告,重视资产风险。 这些标签都是可以点进去查看的,例如 Heist 是那些盗取了很多 ETH 或 Token 的地址/交易,Blocked 是被托管稳定币提供商(例如 USDT 和 USDC )屏蔽。

资产数据

目前 Etherscan 已经对 ERC20 / ERC721 / ERC1155 这三种标准有了很好地支持,前两种对应的就是我们常见的 Token 和 NFT,ERC 1155 是一种相对较新的协议,可以说是融合了 Token 和 NFT 的特性,支持一个合约多种类型代币。

地址详情页

资产详情

相比之前下拉菜单中简略的余额展示,这个详情页面还会列出合约地址、价格和 24h 价格变动,对于流动性仓位以及 NFT 类资产,Etherscan 也能分类展示其资料。

流动性仓位及 NFT 类资产

最近 Etherscan 针对 NFT 的详情页做了更新,可以看到当前图像、拥有者并通过 Blockscan 进行通信。在 NFT 交易的最后点击 View NFT 就可以进入这个页面

ERC721 交易列表

NFT 详情页

账户分析

Etherscan 上可以查询 ETH 或 Token 的余额以及转入转出的趋势数据,也可以看到作为发送方和接收方时所使用的 Gas 费用。

账户分析

合约

智能合约是以太坊上很重要的一个组成部分,基于 EVM 编写的代码形成链上合约,是如今链上各种应用的基础。智能合约的应用如 Gnosis 多签用于管理资产,Uniswap 路由用于去中心化交易,Token 和 NFT 作为治理和会员凭证以及资产的上链等。

链上资产越来越多样化,形形色色的应用越来越多,作为链上逻辑层的智能合约,安全性是一个很大的问题。提交给专门的机构去做合约审计是一个基本的保障,但有审计报告不意味着绝对安全,是否安全很大程度上取决于背后开发团队的能力和安全意识。

下面用 Uniswap V3 的路由合约来举例说明:

合约信息

代码查看与定位

开发者应该熟悉 GitHub 这个开源代码协作平台,每个项目都会自己的代码仓库。

以太坊上的智能合约是编译成 EVM 指令,以字节码形式存储的。为了公开给所有人查看,确认以及审计,Etherscan 提供了验证合约的方法,源代码编译后符合链上数据,就可以通过验证。

可以使用搜索框和 Ctrl + F 网页搜索关键字快速定位到指定代码片段。

查询与执行合约

一般的项目都是智能合约搭配网站页面,其实如果知道执行什么方法和传递什么参数,直接在 Etherscan 上也是可以连接钱包执行合约指定方法的。

我看有些教程会教怎么绕过网页,直接去铸造一些 NFT,这也是一个使用场景。进阶一点,可以去搭配各种工具如使用 Flashbot 提交隐私交易(避免被抢跑等)等。

多签钱包也是一种智能合约,之前写过一篇详细教程,这里不再赘述。

执行合约方法

交易

区块链上的一个重要概念就是 Transaction 交易了,一笔交易包含发送方、接收方、区块信息、Gas 费用、传递的数据、触发的事件以及各种内部交易。

还是拿 Uniswap V3: Router 2 举例,在交易列表可以根据交易是否确认,该地址作为发起方还是接收方等信息来过滤交易信息。

交易列表

接下来我们看一个具体的交易

交易详情

常见的数据大家应该都熟悉,消耗多少 Gas,交易是否成功,交易对象是谁。

这里注意下,大家平时使用 MetaMask 等钱包是可以看到地址和交易 ID 的,推特上有些人会推荐每次都新建钱包去尝试新的协议,如果大家懂的话,在交易前后也可以在钱包或区块浏览器上检查:

  • 交易对象地址是否正确,会不会出现明明应该跟合约交互,但实际收款对象却是一个普通地址?
  • 交易是否成功?当然有时钱包提示确认,区块浏览器却还在索引,这个是正常现象,节点同步需要时间。
  • 这笔交易实际执行的是合约的什么方法?参数对不对?会不会张冠李戴,最终受益方是其他人?

不过执行的方法这点有时候很难看出来,尤其是 Uniswap 这种 multicall 的方式:

Multicall


Don’t trust, verify.

这篇文章到这里就告一段落啦,最近意识到并不是所有用户都是开发者,也不是所有人都有能力去验证合约逻辑和交易数据。再加上行业早期,这种造福效应以及 FOMO 情绪,很多时候人们可能并不在乎项目是否真的有价值,有机会赚到钱才是动力,不一定会花时间验证。

让交易/签名这种交互更加具有可读性,是钱包、区块浏览器以及各种协议正在努力的方向。