相关阅读:一文回顾2021 年 Etherscan 新增的 21 个功能
加密攻略是PANews推出的,供加密老司机公开分享他在加密世界的知识,经验,见解的栏目,欢迎创作者投稿此类型主题的文章。
作者|twodam.eth
来源|【教程】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 情绪,很多时候人们可能并不在乎项目是否真的有价值,有机会赚到钱才是动力,不一定会花时间验证。
让交易/签名这种交互更加具有可读性,是钱包、区块浏览器以及各种协议正在努力的方向。