Etherscan 查合约源码(Read Contract)|从 Verified Contract 完整读

Etherscan 上每个合约地址都有一个 Contract Tab。如果项目方提交了源码且通过 Etherscan 编译比对,就会显示绿色对勾的 Verified Contract 徽章,你能在浏览器里直接读完整 Solidity 源码。本文教你看 Read Contract / Write Contract 两栏。

发布于 2026-05-08 · 约 10 分钟 · Etherscan 用法

Etherscan 怎么查合约源码?直接答:输入合约地址 → 进入合约页 → 切到「Contract」Tab → 看是否显示绿色对勾的 Verified Contract 徽章 → 已验证的会显示完整 Solidity 源码、Read Contract(只读方法)、Write Contract(可调用方法)三栏 → 未验证的只显示 Bytecode。读源码不需要花钱,调用 Write Contract 方法需要钱包签名并花 Gas

如果你正在调研一个 DEX 或 DeFi 协议,并打算先把链上资产兑换成 USDT 出金到法币,可顺路准备 币安官网 的实名账号,并用 币安官方App 看充币地址。下载入口在 下载页

什么是「Verified Contract」

A:Verified Contract 表示项目方主动把合约 Solidity 源码、编译器版本、构造参数提交给 Etherscan,Etherscan 重新编译后比对生成的字节码与链上字节码一致——一致才会标记 Verified

比较项 Verified Unverified
是否能读源码 不能(只能读字节码)
是否能用 Read Contract 不能
是否能用 Write Contract 不能
项目可信度 较高 较低(但也有合理情况)
标识 绿色对勾

A:Verified ≠ 安全——验证只能保证「源码与链上字节码一致」,不能保证「合约逻辑无后门或漏洞」。安全审计是另一回事,由 OpenZeppelin、CertiK、Trail of Bits 等独立机构做。

第 1 步:拿到合约地址

合约地址也是 0x 开头 42 位 hex。常见来源:

来源
Token 项目方官网 通常在 footer「Token Contract」处
CoinGecko / CoinMarketCap 币种页有合约地址
钱包资产页点开某代币 MetaMask 等显示「Token Contract Address」
Etherscan Top Tokens 页 按市值排名

A:永远从项目方官方渠道拿合约地址,不要从聊天群、SEO 广告或不明 dApp 拿——仿冒 Token 是钓鱼最常见路径。

第 2 步:粘到 Etherscan 进入合约页

打开 etherscan.io,把合约地址粘到顶部搜索框。如果是合约,地址页右上角会显示「Contract」徽标。然后切到 Contract Tab。

第 3 步:看顶部 4 个子 Tab

合约 Tab 内有 4 个子 Tab:

子 Tab 内容
Code Solidity 源码 + 编译器版本 + 构造参数
Read Contract 所有 view/pure 方法(只读,不花 Gas)
Write Contract 所有 state-changing 方法(写操作,花 Gas)
Events 合约 emit 的所有事件历史

Verified 合约才会有 Read/Write 子 Tab——unverified 只有 Bytecode。

第 4 步:在 Code 子 Tab 读源码

页面会显示一个或多个 Solidity 文件。多文件项目(用 Hardhat / Foundry)会有 import 关系——Etherscan 把它们都展开扁平化呈现。

显示项 含义
Contract Name 主合约名
Compiler Version 编译器版本(如 v0.8.20)
Optimization Enabled 是否启用优化
Other Settings License、EVM 版本等
Constructor Arguments 部署时传入的构造参数

A:对普通用户来说,至少看清「合约里有没有 onlyOwner 修饰符的转账方法」「有没有 selfdestruct」「有没有 delegatecall 到外部地址」——这三类是常见后门信号。

第 5 步:用 Read Contract 读链上当前状态

Read Contract 子 Tab 列出所有 view / pure 方法,可以不花 Gas 直接调用——浏览器作为客户端,本地查节点。

常见 Read 方法 用途
name() 代币名
symbol() 代币符号
decimals() 小数位数
totalSupply() 总供应量
balanceOf(address) 查某地址持仓
allowance(owner, spender) 查某地址给某 spender 的授权额度
owner() 合约 owner(如有 Ownable)

输入参数后点 Query 即得结果,无需连接钱包。

A:Read Contract 是查授权额度最简单的方式——比如想查你给 Uniswap V2 Router 授权了多少 USDT,调 allowance(你地址, Router 地址) 即得真实数字。

第 6 步:用 Write Contract 调用方法(需签名)

Write Contract 子 Tab 列出所有可写方法。点击任一方法 → 输入参数 → 点「Connect to Web3」连接 MetaMask → 点 Write → MetaMask 弹签名 → 链上执行。

常见 Write 用法 场景
transfer(to, amount) 转账代币
approve(spender, 0) 撤销授权(amount=0)
revokeRole(role, account) 撤销角色(仅特殊合约)

A:撤销 Token 授权最稳的做法就是在 Etherscan 上调代币合约的 approve(spender, 0)——比 Revoke.cash 等第三方工具更直接(虽然慢一点)。详见 Token approval 分类的 Revoke 教程。

第 7 步:看 Events 历史

Events 子 Tab 显示该合约 emit 的所有历史事件,按区块倒序。这是看合约「真实做过什么」最权威的入口——不是看注释、不是看名字,而是看 emit 出来的事实。

常见事件 含义
Transfer(from, to, amount) 代币转账
Approval(owner, spender, amount) 授权变化
OwnershipTransferred(prev, new) owner 变更

实战:判断一个新 Token 是否是 rugpull 风险

检查项 红旗信号
Verified 未验证
Top 10 Holders 持仓 > 80% 集中
owner 是否放弃 否(owner != 0x0)
是否有 mint() 方法 有且 onlyOwner 可随时增发
是否有 blacklist 黑名单 有(owner 可冻结任意地址)
流动性是否锁仓 否或锁期 < 30 天

A:6 项命中 3 项以上就是高风险 rugpull 候选——不要交互、不要兑换。

用 OpenChain Trace 增强分析

Etherscan 的 Logs 可读性有限——复杂的合约调用链建议用 Tenderly 或 OpenChain(openchain.xyz/trace)做调用栈可视化。这两个工具都能从 TxHash 一键导入。详见 查交易 分类的 Trace 篇。

风险提示

读合约源码不会花钱也不会触发任何链上动作。但 Write Contract 一旦签名就真正生效——尤其approvesetApprovalForAll 的金额参数必须看清。写错参数没法撤回,只能再发一笔覆盖

如果链上资产想兑换法币,可借助 币安官网 完成 KYC 后走 C2C。

实操核对清单

  • [ ] 拿到合约地址(来自官方渠道)
  • [ ] 已确认 Verified Contract 徽章
  • [ ] 已浏览 Code 子 Tab 看主要逻辑
  • [ ] 已用 Read Contract 验证 totalSupply / balanceOf 等
  • [ ] 调用 Write Contract 前已确认所有参数
  • [ ] 已用 Events Tab 看历史事件

一站式回顾

A:Etherscan Contract Tab 是合约「公开档案」——源码、读方法、写方法、历史事件全部一屏可查Verified 是看源码的前提Read 不花 Gas、Write 花 Gas 必须签名——这两条是核心规则。

如果还要分析合约的安全等级,下一步建议看 Verified Contract 标识与风险篇。

常见问题

不是合约的地址也能进 Contract Tab 吗?

A:不能。普通钱包地址(EOA)的地址页没有 Contract Tab——只有合约地址才会显示。Etherscan 通过查询该地址是否有 codehash 区分两者。

一个合约能否事后改源码?

A:链上字节码不能改(合约部署后不可变),但 Etherscan 上的「Verified Source」是项目方提交的,理论上可以重新提交不同版本——不过 Etherscan 会比对一致性,不一致就不会标记 Verified。所以「换汤不换药」走不通。

用 Read Contract 查别人的余额合规吗?

A:合规。链上数据公开,任何人可读。Read Contract 不消耗 Gas、不留痕迹(除非你连了钱包)。这是区块链「透明账本」的核心特性

Write Contract 的 Gas 谁付?

A:连接钱包的当前账户付。Write Contract 实际上就是用你钱包发起一笔交易,Gas 从你钱包扣。如果钱包 ETH 不足支付 Gas,MetaMask 会提示余额不足。

我能在 Etherscan 上调用别人的合约方法吗?

A:调用没限制——任何人都能调任何 Public/External 方法。但合约里有权限检查(如 onlyOwner、onlyRole)的方法,不是 owner 调了会 revert。Gas 还是会扣(失败的 Gas 不退)。

合约 Verified 时间会不会比合约部署时间晚?

A:通常会晚。部署是发交易,验证是后续动作——项目方部署后才提交源码到 Etherscan 验证。差几小时到几天都正常。如果一个合约部署 3 个月还没验证,要警惕

多个合约能用同一份源码吗?

A:能,这就是 EIP-1167 Minimal Proxy / Clones 模式——一份逻辑合约对应 N 个轻量代理合约。Etherscan 会把代理合约标记为「Proxy」并一键跳转到逻辑合约源码

文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认 Etherscan Contract Tab 4 个子 Tab 与 Verified 标识规则未变)。