Featured image of post 常见 EVM 提案速查:ERC 与 EIP 的核心标准

常见 EVM 提案速查:ERC 与 EIP 的核心标准

ERC-20、721、1155、777、165、1820、712、2981、1559……Web3 标准眼花缭乱。本文给一份能查的清单

写在前面

Web3 生态里 ERC 和 EIP 提案多到眼花缭乱——

  • ERC-20 / 721 / 1155 是耳熟能详的代币标准
  • EIP-1559 改变了以太坊的费用模型
  • EIP-712 让钱包能展示可读签名
  • ERC-2981 解决了版税问题

新人看到这些数字号就头疼——每个具体在做什么?哪些重要哪些次要?

本文给一份能查的清单——按用途分类,每个标准用一段讲清楚是什么、为什么重要、典型用法。适合放到 Notion / Obsidian 里作为日常查询。


一、ERC vs EIP

先把概念分清:

  • EIP(Ethereum Improvement Proposal):以太坊改进提案——任何关于以太坊的改进都是 EIP
  • ERC(Ethereum Request for Comments):EIP 的一类子集,专门用于应用层标准(代币、签名、接口等)

简单理解:所有 ERC 都是 EIP,但不是所有 EIP 都是 ERC


二、代币标准

ERC-20:可替代代币

最经典的代币标准。USDC、USDT、UNI、所有 DeFi 代币都是 ERC-20。

核心接口:

1
2
3
4
5
6
7
8
9
function totalSupply() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function transferFrom(address from, address to, uint256 value) external returns (bool);

event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);

最重要的标准——不可替代

ERC-721:非同质化代币(NFT)

每个 token 唯一。CryptoPunks、BAYC、CryptoKitties 都是 ERC-721。

1
2
3
4
5
function ownerOf(uint256 tokenId) external view returns (address);
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool approved) external;
function tokenURI(uint256 tokenId) external view returns (string);

每个 tokenId 一段独立元数据。

ERC-1155:多代币标准

一个合约管理多种 token,每种可以有多份。游戏道具、批量场景的事实标准。

1
2
3
function balanceOf(address account, uint256 id) external view returns (uint256);
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data) external;
function safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data) external;

支持批量操作——比 ERC-721 在多 token 场景下省 40 倍 Gas。

ERC-777:增强版 ERC-20(争议)

试图改进 ERC-20——支持 hooks(接收方能拦截转账)、operator 等。

重入攻击风险高——一些项目(imBTC)因为它被攻击。社区主流是不用 ERC-777——直接 ERC-20 + ERC-2612 更安全。

ERC-4626:代币化金库(Tokenized Vault)

标准化"存款进 vault 拿 share token"的接口。Yearn、Aave V3 等收益策略合约用它。

1
2
3
4
function asset() external view returns (address);
function totalAssets() external view returns (uint256);
function deposit(uint256 assets, address receiver) external returns (uint256 shares);
function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);

所有 yield aggregator / lending protocol 都应该实现 ERC-4626——可组合性大增。


三、接口与发现

ERC-165:标准接口检测

让合约能查询"另一个合约是否实现某个接口"。

1
2
3
4
5
6
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// 用法
IERC165(addr).supportsInterface(0x80ac58cd);   // 是否是 ERC-721

interfaceId 是接口所有函数 selector 的 XOR——编译时计算

ERC-721、ERC-1155 都强制实现 ERC-165。

ERC-1820:通用注册表

像 ERC-165 但更通用——支持"为某地址绑定接口实现"。

1
ERC1820Registry.setInterfaceImplementer(addr, interfaceHash, implementer);

ERC-777 用它做 hook 注册——但因为 777 不流行,1820 也只在少数场景用


四、签名标准

EIP-712:结构化数据签名

让钱包能显示可读的签名内容,而不是一串十六进制 hash。

老的 eth_sign

1
请签名:0xa1b2c3d4e5f6...

EIP-712:

1
2
3
4
5
6
请签名:
  Permit:
    owner: 0xAlice...
    spender: 0xUniswap...
    value: 100 USDC
    deadline: 2026-12-31

所有现代 dapp 的签名都用 EIP-712——不仅可读,还防钓鱼。

EIP-2612:Permit(无 Gas approve)

用 EIP-712 签名替代 ERC-20 的 approve 调用——用户不付 approve 的 Gas

1
2
3
4
function permit(
    address owner, address spender, uint256 value,
    uint256 deadline, uint8 v, bytes32 r, bytes32 s
) external;

用户线下签 permit,dapp 把签名 + 操作打包成一笔 tx——省一笔 approve Gas + 改善体验

新代币几乎都实现 EIP-2612。

EIP-1271:合约签名验证

让"智能账户合约"也能"签名"——isValidSignature 让合约模拟 EOA 签名。

1
function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4);

ERC-4337 智能账户、Safe 多签都用它。


五、版税与市场

EIP-2981:NFT 版税标准

标准化 NFT 二级市场的版税分配。

1
function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount);

OpenSea、Blur、LooksRare 等市场调用这个接口确定版税收款方和金额。

新 NFT 项目必实现 EIP-2981——否则只能依赖每个市场各自的版税设置。


六、Gas 与费用

EIP-1559:基础费 + 优先费

2021 年伦敦升级——改变了以太坊的费用模型

老模型:完全拍卖,gasPrice 用户出多少都行——网络拥堵时 gas 飙升不可预测

EIP-1559 模型:

  • baseFee:每个 block 由协议算出,会被 burn 销毁
  • priorityFee(tip):用户给矿工的小费
1
2
3
4
5
// 现代以太坊 tx
{
    maxFeePerGas: ...,            // 用户愿意付的最高总 fee
    maxPriorityFeePerGas: ...    // 给矿工的小费
}

好处:费用更可预测、ETH 经济学进入通缩。

EIP-1283 / 2200 / 2929:Gas 调整

历史上多次调整 SSTORE / SLOAD 的 Gas 成本,主要影响合约 gas 估算与底层操作成本。经典副作用是 EIP-2929(Berlin,2021-04)抬高 SLOAD/CALL 成本后,依赖固定 2300 gas 的 transfer / send 在接收方为合约时不再可靠——这是真实改变了应用层的可用性,并不只是"算 gas 时数字变了"。

EIP-3074 / EIP-7702:让 EOA 也能"批量执行"

让 EOA 也能像智能账户一样"批量执行"。EIP-3074(AUTH / AUTHCALL)方向几次评审后被放弃,由更轻量的 EIP-7702 取代——后者已随 Pectra 升级(2025-05)上线主网。EIP-7702 让 EOA 在一笔交易内"临时"挂上一段合约代码,从而原子地批量调用、付费代付(gas sponsor)、与 ERC-4337 形成互补。

EIP-4844:Proto-Danksharding(2024 年上线)

引入 blob transaction——L2 发数据成本大降。

L2(Optimism、Arbitrum、zkSync 等)用 blob 替代 calldata 提交批数据——Gas 成本降到原来 10%


七、账户抽象

ERC-4337:账户抽象

智能合约账户标准——不需要修改 Layer1 协议

让用户的"账户"是一个智能合约——可以:

  • 多签(不只是私钥控制)
  • 社交恢复(朋友帮你恢复账户)
  • 付 Gas 不需要 ETH(用 USDC 付 Gas)
  • 批量交易

ERC-4337 的核心是 EntryPoint 合约 + UserOperation 数据结构 + Bundler 角色。

这是 Web3 走向主流的关键基础设施之一——降低普通用户的使用门槛。


八、合约升级与可拥有

EIP-1967:标准 Proxy Storage Slots

标准化 Proxy 合约的存储槽位置,避免槽位冲突。

1
2
implementation: keccak256("eip1967.proxy.implementation") - 1
admin:          keccak256("eip1967.proxy.admin") - 1

OpenZeppelin Upgrades 用的就是这个。

EIP-1822:UUPS 代理

把"升级逻辑"放进 implementation 合约——proxy 更精简、Gas 更省。

OpenZeppelin 现在推荐 UUPS 而不是 Transparent Proxy。

EIP-2535:Diamond 标准

一个 proxy + 多个 facet——绕开合约 24KB 字节码上限

适合超大型协议(Aavegotchi 是典型案例)。


九、其他常用提案

ERC-2470:Singleton Factory

部署在所有链上的"单例工厂"——通过 CREATE2 让你的合约在所有链上有相同地址

ERC-3156:Flash Loan 标准

闪电贷标准。Aave、dYdX、Maker 都实现。

1
function flashLoan(IERC3156FlashBorrower receiver, address token, uint256 amount, bytes data) external returns (bool);

EIP-1167:Minimal Proxy(克隆合约)

用 EVM bytecode 技巧把 proxy 合约压缩到 ~60 字节——部署成本极低

适合"工厂部署大量同类合约"场景(如 Uniswap pair、Compound cToken)。

EIP-3675:The Merge

2022 年的合并——POW 转 POS。

不影响应用层 API,但让以太坊能耗降低 99%

EIP-4626(再提一下)

代币化 vault 标准——已经成事实标准。

EIP-3855:PUSH0 操作码

添加 PUSH0 操作码(替代 PUSH1 0)——Solidity 0.8.20+ 利用,编译产物更小


十、根据用途的速查

做代币

  • 同质化 → ERC-20 + EIP-2612(permit)
  • NFT → ERC-721 + EIP-2981(版税)
  • 游戏 / 多种 → ERC-1155

做 DeFi

  • 借贷 / Vault → ERC-4626
  • 闪电贷 → ERC-3156
  • 自动批准 → EIP-2612

做 NFT 市场

  • 标准支持 → ERC-721 + ERC-1155 + ERC-2981
  • 接口检测 → ERC-165

做钱包

  • 签名 → EIP-712(必须)
  • 智能合约签名 → EIP-1271
  • 账户抽象 → ERC-4337

做 L2 / Rollup

  • 数据可用性 → EIP-4844 (blobs)
  • 跨链一致地址 → ERC-2470

做可升级合约

  • 标准槽位 → EIP-1967
  • UUPS 代理 → EIP-1822
  • 大合约模块化 → EIP-2535

十一、追踪新提案

主要资源:

新提案出来时关注 status 是否 Final——只有 Final 才算"标准"。Draft / Review 阶段的提案随时可能改。


小结

把全文压一句:

ERC / EIP 不是"考点"——是 Web3 协议设计的实战手册。掌握核心标准让你能站在巨人的肩膀上做事,而不是重新发明轮子。

工程纪律:

  • 代币必看 ERC-20/721/1155
  • 签名必看 EIP-712 / EIP-2612
  • 可升级必看 EIP-1967
  • 追新关注 ERC-4337 / EIP-4844
  • 不要造已有标准的轮子——用 OpenZeppelin

收藏本文作为速查——下次遇到陌生编号时不用再 Google 半天。

使用 Hugo 构建
主题 StackJimmy 设计