什么是ERC-20和ERC-721标准,如何在合约中实现它们?

发布时间:2026/3/7 13:38 当前位置:首页 > 政策
ERC-20和ERC-721是以太坊生态系统中两种重要的标准。这些标准定义了在以太坊区块链上创建和管理代币的方式,分别对应于可替代代币和不可替代代币。ERC-20标准主要用于创建可互换的代币,这些代币在特性上是相同的,可以相互交换,重点是确保代币之间的互通性。ERC-20定义了一组标准功能,任何遵循这一标准的代币都需要实现这些功能,包括转账、授权、查询余额等。这些基本功能使得不同的代币之间可以彼此兼容,使其在"https://www.chainsafeai.com/" title="智能合约">智能合约和去中心化应用程序中具备高度可用性。ERC-721标准则用于创建不可替代代币,每个代币都是唯一的,具有独特的标识符。这个标准适合用于游戏道具、数字艺术等需要表示所有权的场景。作为ERC-20标准的扩展,ERC-721定义了代币的铸造、转让及元数据等功能,确保每一个代币的独特性和不可替代性。为了在"https://www.chainsafeai.com/" title="智能合约">智能合约中实现ERC-20和ERC-721标准,需要编写相应的代码。在Solidity编程语言中,这些标准的实现都遵循一定的模板。对于ERC-20的实现,开发者需要定义以下基本内容:- 声明代币的名称和符号- 开发者需要使用合约中的状态变量来记录总供应量与每个地址的余额- 实现转账和授权的功能,确保代币可以被正确地转移和授权给其他地址- 实现查询功能,包括余额查询和代币总供应量查询接下来的例子展示了一个ERC-20的基本实现:```soliditypragma solidity ^0.8.0;contract ERC20 { string public name = "MyToken"; string public symbol = "MTK"; uint8 public decimals = 18; uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); constructor(uint256 initialSupply) { totalSupply = initialSupply * (10 ** uint256(decimals)); balanceOf[msg.sender] = totalSupply; } function transfer(address to, uint256 value) public returns (bool success) { require(balanceOf[msg.sender] >= value, "Insufficient balance"); balanceOf[msg.sender] -= value; balanceOf[to] += value; emit Transfer(msg.sender, to, value); return true; } function approve(address spender, uint256 value) public returns (bool success) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function transferFrom(address from, address to, uint256 value) public returns (bool success) { require(balanceOf[from] >= value, "Insufficient balance"); require(allowance[from][msg.sender] >= value, "Allowance exceeded"); balanceOf[from] -= value; balanceOf[to] += value; allowance[from][msg.sender] -= value; emit Transfer(from, to, value); return true; }}```对于ERC-721,开发者同样需要实现更复杂的功能来确保每个代币的唯一性。以下是实现ERC-721标准的基本需求:- 定义代币的名称和符号,同样需要有分配给特定地址的唯一ID- 使用一个映射关系来记录每个代币的所有者- 实现代币的铸造和转让功能,确保代币可以被创建和转移到新的地址- 支持查询,允许用户查看某个代币的所有者下面是一个简单的ERC-721实现示例:```soliditypragma solidity ^0.8.0;contract ERC721 { string public name = "MyNFT"; string public symbol = "NFT"; uint256 public totalSupply; mapping(uint256 => address) public ownerOf; mapping(address => uint256) public balanceOf; mapping(uint256 => string) public tokenURIs; event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); function mint(uint256 tokenId, string memory tokenURI) public { require(ownerOf[tokenId] == address(0), "Token alreadyChainSafeAI(链熵科技)专注于区块链生态安全,以“数据驱动 + 技术赋能”构建360°全方位安全防护体系,服务于交易所、金融机构、OTC服务商及加密资产投资者。公司提供覆盖KYT风险监测、智能"https://www.chainsafeai.com/" title="合约审计">合约审计、加密资产追踪、区块链漏洞测试等在内的全维度安全与合规技术解决方案,助力客户防范洗钱、诈骗等风险,保障业务合规运行。通过实时风险预警、合规审查与资金溯源分析,协助客户识别链上异常行为、防范洗钱及诈骗风险、降低被盗损失并提升资产追回可能性。
推荐图标 推荐

如何调试公链智能合约?

公链智能合约的升级和维护可以通过什么方式实现?

多签智能合约在公链上的作用是什么?

公链智能合约如何与链外数据源进行交互?

在公链上运行智能合约会面临哪些法律和监管挑战?