以太坊的EIP和ERC是什么,几大ERC解读

csdn erc

参考 1 参考 2 EIP 官方仓库 ERC 官方仓库

EIP

Ethereum Improvement Proposal(以太坊改进提案),EIP 是向以太坊社区提出新功能、流程或标准的正式文档。任何重大变更(如协议升级、新操作码、费用机制)都必须先提交 EIP,EIP 分为三大类:

  • Standard Track(标准轨道):涉及核心协议修改、网络层、接口层。

  • Meta(元提案):涉及流程、决策制定。

  • Informational(信息提案):非强制性的设计指南。

ERC

Ethereum Request for Comments(以太坊征求意见稿),属于“标准轨道”下的一个子分类(Interface 层),是针对智能合约和 DApp 开发者制定的应用层标准,确保不同项目之间的互操作性,是 EIP 的的一个子类,每个 ERC 都是 EIP,但不是每个 EIP 都是 ERC。

ERC-20 万链之基

ERC-20 是所有代币的“通用语言”,它定义了一套所有代币都必须遵循的规则,就像所有手机都必须有充电口一样。这使得任何支持 ERC-20 的交易所、钱包或 DApp 都能识别和处理任何 ERC-20 代币,极大地促进了生态的互联互通。

核心接口:

ERC-721 数字资产的确权标准

如果说 ERC-20 是“钱”,那么 ERC-721 就是“房产证”或“收藏品证书”。它为每一个代币(NFT)赋予一个独一无二的 ID,确保其不可复制、不可分割、不可替代。这使得它成为数字艺术、游戏道具、虚拟土地等独特资产的理想载体。

核心接口:

ERC-1155 半同质化资产的终极方案

ERC-1155 是 ERC-20 和 ERC-721 的“超级融合体”。它允许在一个智能合约中同时管理多种类型的资产,既可以是同质化的代币(如游戏金币),也可以是非同质化的 NFT(如稀有装备)。这极大地简化了开发流程,降低了 Gas 费用,是游戏和复杂应用的首选标准。

ERC-2612 签名授权机制

在 DeFi 世界里,用户每次转账或授权代币,都需要支付 Gas 费并进行一次链上交易。ERC-2612 引入“签名授权”机制,通过在合约中添加一个 permit 函数,允许用户在链下生成一个签名,然后在链上提交这个签名和相关参数,合约会验证签名的有效性,从而完成授权操作,即可在链上多次使用,极大地节省了 Gas 费用和操作步骤,提升了用户体验。但签名授权也意味着用户需要对签名内容有充分信任,一旦签名被恶意利用,可能导致资产损失。

ERC-777 自动触发的 Hook

ERC-777 是 ERC-20 的升级版,它引入了“Hook”(钩子)机制。这意味着在代币转账或接收时,合约可以自动触发一些预设的代码逻辑,比如自动将部分代币转入保险库,或者在接收代币时自动执行某些操作。

如果一个合约在接收代币时触发了另一个合约的函数,而这个函数又试图再次调用原合约,就可能造成“重入攻击”,导致资产被盗,这个“钩子函数” 却成了黑客重入攻击的温床,它的落幕告诉我们:在 Web3,安全和可控永远优先于优雅。

ERC-4626 收益金库的统一规范

比如你有多个银行账户,但每个银行的存取款流程、ATM 机、手机 App 都完全不同。每次操作都要重新学习,非常麻烦。ERC-4626 就是为了解决这个问题而生的,它为所有 DeFi 收益金库提供了一个统一的接口标准。无论是哪个协议的金库,用户都可以用同样的方式存入、取出、查看收益,极大地简化了操作流程,提高了互操作性。

核心接口:

  • deposit:用户向金库存入“底层资产”如 USDC、ETH,金库会按当前汇率,返回给用户等值的“份额代币”。就像把现金存进银行,银行给一张存单。

  • withdraw:用户用“份额代币”去金库按当前汇率兑换回“底层资 产”。就像拿着存单去银行取现金。举例:你对兑换所说:“你要 100 个金币”。兑换所会告诉你:“好的,你需要交回 95 张兑换券。” 你交回 95 张券,拿到 100 个金币。

  • redeem:用户用“份额代币”去金库“赎回”底层资产。这是 withdraw 的反向操作,逻辑相同。举例:你对兑换所说:“我要把这 100 张兑换券兑成金币”。兑换所会告诉你:“好的,你将得到 105 个金币。” 你交回 100 张券,拿到 105 个金币。

  • mint:用户输入“份额代币”,向金库“铸造”新的份额。这在某些特定场景下(如批量操作)会更高效。

redeem 和 withdraw 看起来有些像,但是前者是兑掉多少存单,后者是兑换多少资产!

由于金库合约可能被闪电贷攻击,因此需要**结合时间加权平均价格(TWAP)**等机制来防范价格操纵。

闪电贷攻击流程:

  • 第一步:借入巨资 – 攻击者通过闪电贷瞬间借入大量的资产作为操纵市场的“弹药”。
  • 第二步:扭曲汇率 – 在极短时间内用这笔巨资在 DEX 进行大额交易,人为拉高或压低目标资产的价格。
  • 第三步:套利收割 – 利用被操纵的虚假高价,向金库存入资产以获取更多份额,或在低价时赎回,完成套利并在**同一笔交易(以太坊出块时间是 12 秒)**中归还闪电贷。如果没有按时归还闪电贷,则整个交易原子性回滚,债务从未发生,但消耗的 gas 费不退还。

整个过程依赖的就是金库合约对瞬时价格的“信任”,时间加权平均价格的核心思想是不相信任何一个瞬间的价格,而是通过计算资产在一段较长时间窗口内的平均价格,来平滑掉由闪电贷等操作引起的瞬时剧烈波动。

时间加权平均:系统会记录每个区块的时间戳和对应的价格,将每个价格乘以其持续的时间长度,再将所有加权值相加后除以总时长,得到最终价格。公式:TWAP = Σ(价格_i × 时间间隔_i) / 总时间间隔

这意味着攻击者若想成功操纵 TWAP 价格,必须在一段较长的时间内维持异常价格,这需要很大的资金成本,使得攻击在经济上几乎不可行。

ERC-4337 账户、私钥的抽象

在 ERC-4337 之前,以太坊只有两种账户:

  1. EOA (外部拥有账户):由私钥控制(如 MetaMask)。

    • ❌ 必须用 ETH 支付 Gas:哪怕你想转账 USDC,钱包里也必须要有 ETH。
    • ❌ 助记词地狱:丢失助记词 = 资产永久丢失,无法找回。
    • ❌ 交易原子性差:不能在一个交易中完成“授权 + 转账”等多步操作。
    • ❌ 无社交恢复:没有“忘记密码”功能。
  2. 合约账户:由代码控制。

    • ❌ 不能主动发起交易:必须由 EOA 触发才能运行。

ERC-4337 的目标:让合约账户拥有 EOA 的所有功能,并在此基础上增加高级特性,同时不需要硬分叉以太坊主网。

用户看到的是一个“账户”,账户就拥有资产、可以执行交易,但这个账户的底层逻辑是由一个智能合约(而不是一个私钥)来控制的。这个智能合约可以被编程,实现各种高级功能,比如:

  • 社交恢复:用户丢失了“登录凭证”,可以通过预先设置的“好友”或“机构”来帮助恢复账户,就像忘记密码时可以通过邮箱或手机找回一样。

  • Gas 代付:用户可以授权一个“Gas 代付者”(比如一个 DApp 或一个朋友)来为自己的交易支付 Gas 费。

  • 多签:一个账户的交易需要多个“签名者”同意才能执行,非常适合公司、DAO 或家庭共同管理资产的场景,极大地提升了安全性。

ERC-2981 版税机制给创作者的持续收益

ERC-2981 为 NFT 引入了版税机制。核心函数是 royaltyInfo 函数,让 NFT 合约能够返回创作者的地址和版税比例,这使得 NFT 市场平台可以自动计算并支付版税,无需创作者手动干预。当一个 NFT 在二级市场被转售时,创作者可以自动获得一定比例的收益。这为创作者提供了一个可持续的收入来源,激励他们创作更多优质内容。

ERC-6551 NFT 独立的合约地址

ERC-6551 让每个 NFT 都拥有一个独立的合约地址,这个地址可以像普通钱包一样持有资产、执行交易。这使得 NFT 不再只是一个“图片”,而是一个可以拥有“装备”、“积分”、“凭证”的“角色”,极大地拓展了 NFT 的应用场景。

ERC-6551 的核心是“Token Bound Accounts”,它通过一个注册表来管理 NFT 与合约地址的绑定关系。每个 NFT 都可以绑定一个独立的合约地址,这个地址可以持有 ERC-20、ERC-721、ERC-1155 等资产,也可以执行任意的智能合约逻辑,使得 NFT 真正“活”了起来。

ERC-3643 RWA 的合规之门(原 T-REX)

ERC-3643(原 T-REX)是为现实世界资产(RWA)设计的合规化证券代币标准。核心功能是“KYC 验证、转账白名单/黑名单、监管冻结”,确保代币的发行和交易符合监管要求,使得机构投资者可以放心地将资金投入 RWA 项目,推动了 Web3 与传统金融的融合。

ERC-4907 可租赁 NFT 的基石

ERC-4907 是对 ERC-721 的扩展,它引入了“使用者(User)”角色,允许 NFT 的所有权与使用权分离。这一机制使得 NFT 可以被租赁或借用,而无需转移所有权,从而极大地提升了资产的流动性和实用性。

ERC-4907 通过两个关键属性实现租赁功能:

  • user:代表被授权使用 NFT 的地址。

  • expires:一个时间戳,表示 user 角色的授权何时自动失效。

ERC-1271 智能合约钱包的签名验证标准

ERC-1271 定义了一个标准化的函数 isValidSignature(bytes32 _messageHash, bytes _signature) ,智能合约钱包通过实现此函数来验证签名。当 DApp 需要验证一个智能合约钱包的签名时,它会首先检查该地址是否实现了 ERC-1271 接口。如果实现则调用 isValidSignature 函数进行验证,验证有效则返回一个预定义的值 0x1626ba7e;如果没有实现 1271 接口,则退回到传统的 ecrecover 方法。

EIP

EIP-712

解决 用户不知道自己在签什么,它让用户在钱包(如 MetaMask)中签名时,看到的不再是乱码般的十六进制字符串,而是清晰、可读的结构化数据。

没有 EIP-712 之前,当 DApp 请求你签名一段数据(比如授权转账、投票、登录)时,用户看到的内容是一串毫无意义的十六进制哈希值。用户完全不知道自己在签什么。恶意网站可以伪装成“登录”,实际让你签的是“授权转移所有资产”。这就是著名的 钓鱼攻击。

有了 EIP-712 之后,DApp 将数据按照 EIP-712 标准格式化后请求签名,用户能看到的可读的内容。

应用:

  • ERC-20 免 Gas 授权
  • NFT挂单交易
  • 身份验证

原理

  1. Domain Separator (域分离器)

用于隔离不同的应用、版本和链,防止重放攻击(Replay Attack)。

包含字段:

  • name: 应用名称 (e.g., “MyDApp”)
  • version: 版本号 (e.g., “1”)
  • chainId: 链 ID (e.g., 1 for Mainnet, 11155111 for Sepolia)
  • verifyingContract: 验证合约地址 (可选)

作用:确保 A 应用的签名,不能在 B 应用中使用。

  1. Types (类型定义)

定义数据的结构(类似 Solidity 的 struct)。

1
2
3
4
5
6
7
8
9
const types = {
	Permit: [
		{ name: 'owner', type: 'address' },
		{ name: 'spender', type: 'address' },
		{ name: 'value', type: 'uint256' },
		{ name: 'nonce', type: 'uint256' },
		{ name: 'deadline', type: 'uint256' },
	],
};
  1. Message (具体数据)
1
2
3
4
5
6
7
const message = {
	owner: '0x123...',
	spender: '0x456...',
	value: '1000000000000000000', // 1 ETH
	nonce: 0,
	deadline: 1735689600,
};

🧮 哈希计算流程

  • 对 Types 进行编码哈希 → 得到 typeHash。
  • 对 Message 中的数据进行编码哈希 → 得到 messageHash。
  • 对 Domain Separator 进行编码哈希 → 得到 domainSeparator。
  • 最终摘要:用户对 digest 进行签名(ECDSA)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计