ERC 以太坊征求意见
ERC 的全称是 Ethereum Request for Comments。顾名思义,它是一套技术标准或协议草案,专门用于在以太坊区块链上构建智能合约和去中心化应用。
您可以把它理解为互联网行业的 RFC 文档(例如定义 HTTP 协议的 RFC 2616),或者现实世界中的 行业标准(例如 USB-C 接口的规格)。它规定了如何编写代码,以确保不同的应用程序和合约能够相互兼容和交互。
总而言之,ERC 是以太坊生态系统的 "法律" 和 "建筑规范"。它确保了整个生态的各个部件能够有机地结合在一起,共同构建起一个强大而繁荣的去中心化世界。没有 ERC 标准,以太坊就不会有今天的成功。
ERC 标准概述
ERC 标准是以太坊上智能合约的一套通用规则,它们就像"技术蓝图",确保了不同代币和合约之间能够顺畅地交互和协作。
ERC 标准是以太坊上智能合约的一套通用规则,它们就像"技术蓝图",确保了不同代币和合约之间能够顺畅地交互和协作。下面这个表格整理了几个最常见和重要的 ERC 代币标准,帮你快速了解它们的核心特点和主要应用场景。
标准名称 | 核心特点 | 主要应用场景 |
---|---|---|
ERC-20 | 同质化代币,每个代币完全一样,可以分割。 | 稳定币(如USDT、USDC)、治理代币、Utility代币。 |
ERC-721 | 非同质化代币(NFT),每个代币独一无二,不可分割。 | 数字艺术品、收藏品(如CryptoPunks、BAYC)、游戏道具、链上凭证。 |
ERC-1155 | 多代币管理 ,单一合约可同时处理同质化和非同质化代币;支持批量操作,节省Gas费。 | 游戏经济体(同时管理游戏币和装备)、需要批量处理的复杂应用。 |
ERC-777 | 在ERC-20基础上增强,引入了"钩子"机制,允许更复杂的代币管理逻辑,并保持向后兼容。 | 受监管的代币、需要自动化逻辑的场景(如自动兑换)。 |
ERC-4626 | 收益金库标准 ,统一了收益型金库(Vault)的存、取和收益分配接口,旨在提升DeFi协议间的可组合性。 | 收益聚合器、借贷市场的利息代币。 |
ERC-20 标准
ERC-20 是一个技术标准,它规定了所有在以太坊区块链上发行的同质化代币必须遵守的一系列基本规则和功能。
您可以把它理解为 "代币的通用说明书" 。就像所有生产USB-C数据线的厂家都必须遵循同一套物理和电气规范一样,所有发行ERC-20代币的项目都必须实现标准中规定的特定函数和事件。
Ethereum: https://ethereum.org/zh/developers/docs/standards/tokens/erc-20/

ERC-20 methods
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
OpenZeppelin 智能合约库

OpenZeppelin 是一个用于构建安全智能合约的、开源的、经过严格审计的代码库和框架。它是以太坊和 EVM 兼容链(如 Polygon, Arbitrum, Avalanche 等)生态系统中最核心、最受信任的开发工具之一。
OpenZeppelin 生态系统
1. OpenZeppelin Contracts(合约库)
这是最核心、最著名的部分,提供了丰富的智能合约模块。
代币标准实现:
ERC20, ERC721, ERC1155, ERC777 等标准合约的实现。
还包括这些标准的扩展,例如 ERC20Burnable(可销毁), ERC721Enumerable(可枚举)等。
访问控制:
Ownable:简单的单所有者权限控制。
AccessControl:灵活的基于角色的权限管理系统。
安全工具:
SafeMath(Solidity 0.8+ 后内置,但早期版本必备):防止算术溢出和下溢。
ReentrancyGuard:防止重入攻击。
Pausable:允许在紧急情况下暂停合约功能。
实用工具:
Counters:提供只能递增或递减的计数器。
Arrays:提供数组相关的实用操作。
Escrow & ConditionalEscrow:托管合约。
2. OpenZeppelin Defender(防御者)
这是一个用于智能合约运维和安全的平台,帮助开发者在合约部署后对其进行管理和保护。
Admin:一个安全的网页面板,用于执行只有管理员才能调用的合约函数。
Relayer:一个自动化的系统,用于代表你签署和发送交易,实现定时任务或自动化流程。
Sentinel:监控合约的特定事件或函数调用,并在满足条件时通过邮件、Discord 等发送警报。
Automate:无需服务器即可创建自动化脚本,与你的合约交互。
3. OpenZeppelin Upgrades(可升级合约)
提供了一套工具和模式,使开发者能够部署可升级的智能合约。
允许你修复 Bug 或升级合约逻辑,而无需迁移合约状态和地址。
使用了 "代理模式" (如 Transparent Proxy 和 UUPS),将存储和逻辑分离。
OpenZeppelin ERC-20

// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.4.0
pragma solidity ^0.8.27;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract RainbowNight27 is ERC20 {
constructor(address recipient) ERC20("RainbowNight27", "Rn27") {
_mint(recipient, 10000 * 10 ** decimals());
}
}

编写原理

ERC 同质化货币模拟测试
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.4.0
pragma solidity ^0.8.27;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract RainbowNight27 is ERC20 {
constructor() ERC20("RainbowNight520", "Rn520") {
_mint(msg.sender, 10000 * 10 ** 18);
}
}

Remix 加载已部署合约
To interact with a deployed contract,either enter its address and compile itssource *sol file (with the same compilersettings) or select its .abi file in theeditor.
方法 | 适用前提 | 核心操作步骤 | 优点 | 缺点 |
---|---|---|---|---|
"At Address" (直接加载) | 拥有合约的源代码 或ABI ,且知道其部署地址。 | 1. 编译源代码或加载ABI。 2. 在 "Deploy & Run" 页面,地址框中输入合约地址。 3. 点击 "At Address" 按钮。 | 最直接、最常用的方法;可获取完整交互界面。 | 必须拥有正确版本的源代码或ABI。 |
加载 ABI 文件 | 没有源代码,但能获取到合约的 ABI (应用二进制接口)。 | 1. 在文件资源管理器创建 .abi 文件,粘贴ABI JSON。 2. 在 "Compiler" 页面点击 "Compile ABI" 。 3. 回到 "Deploy & Run" 页面,从合约下拉菜单选择该ABI文件。 4. 输入地址,点击 "At Address"。 |
无需源代码,仅凭ABI即可交互;适用于与已验证或第三方合约交互。 | ABI 需要准确;无法查看或修改源代码逻辑。 |
Etherscan 加载 | 合约在 Etherscan (或同类区块浏览器) 上已验证过源代码。 | 1. 打开Etherscan上该合约的页面。 2. 将网址中的域名(如etherscan.io )替换为 remix.ethereum.org 并回车。 3. Remix 将自动在新工作区打开并加载该合约。 |
极其便捷;自动获取源代码和编译器设置。 | 仅适用于已在Etherscan上验证的合约。 |
查看 Remix 部署历史 | 合约是在当前Remix会话环境中部署的。 | 在 "Deploy & Run" 页面的底部,"Deployed Contracts" 区域会自动列出已部署合约的列表,点击即可展开交互。 | 无需记忆地址;交互简单直接。 | 历史记录在刷新页面或切换环境后可能消失;非持久化存储。 |
注意事项
- **环境匹配**:无论使用哪种方法,请确保 Remix 左上角 "Environment" 选择的是合约所在的正确网络(例如,如果合约部署在 Sepolia 测试网,你需要通过 MetaMask 连接到 Sepolia)。
- **编译器设置**:使用方法1时,**务必使用与部署时相同的编译器设置**(特别是 Solidity 版本和优化次数),否则可能导致交互失败或数据错误。
- **函数调用**:成功加载合约后,你可以:
- **读取**:调用 `view` 或 `pure` 函数(通常是蓝色按钮),这是免费的,无需支付 Gas。
- **写入**:调用状态改变函数(通常是红色或橙色按钮),这需要签署交易并支付 Gas。