ERC-20与ERC-721:区块链代币标准的双星解析

一、代币标准的诞生背景

在以太坊生态中,代币标准是构建去中心化应用(DApps)的基石。ERC-20ERC-721分别代表同质化与非同质化代币的两大核心标准,前者支撑着90%以上的加密资产流通,后者则开启了数字资产唯一性的新时代。


二、ERC-20:同质化代币的黄金标准

1. 核心特性

作为以太坊首个主流代币标准,ERC-20定义了代币的六大基础功能

  • 总量控制totalSupply()获取总发行量

  • 余额查询balanceOf()查看地址余额

  • 转账机制transfer()实现点对点转移

  • 授权体系approve()+transferFrom()支持代理转账

  • 元数据:名称(name)、符号(symbol)、精度(decimals)

  • 事件通知:转账与授权事件触发

2. 技术优势

  • 互操作性:兼容MetaMask、Uniswap等主流工具

  • 低成本发行:通过OpenZeppelin库10分钟即可创建代币

  • 生态成熟:支撑USDT、UNI等主流代币,管理资产超千亿美元

3. 典型应用场景

场景案例核心作用
稳定币USDT、DAI价值锚定与支付媒介
治理代币UNI、COMP社区决策与协议控制
DeFi底层资产Aave的aToken抵押借贷与收益凭证
项目融资ICO/IEO代币发行资金募集与权益分配

4. 局限性

  • 转账风险:误转至未实现tokensReceived的合约地址将导致资产永久丢失(ERC-223已修复)

  • 元数据缺失:名称/符号非强制字段,部分代币显示异常

  • 批量操作低效:需多次调用transfer,Gas成本高


三、ERC-721:非同质化代币的革命

1. 核心突破

ERC-721通过唯一tokenID实现资产的不可替代性,关键接口包括:

  • 所有权验证ownerOf()查询NFT归属

  • 安全转移safeTransferFrom()防止资产丢失

  • 多层授权setApprovalForAll()实现批量权限管理

  • 元数据扩展:通过tokenURI关联链下数据(如图像、属性)

2. 技术亮点

  • 唯一性证明:每个tokenID对应独立数字指纹

  • 所有权链:通过事件日志构建完整的流转历史

  • 跨合约交互:实现NFT与其他DApp的复杂交互(如游戏装备升级)

3. 创新应用

领域典型案例价值体现
数字艺术Beeple作品拍卖版权确权与稀缺性证明
游戏资产Axie Infinity宠物道具交易与跨游戏复用
虚拟地产Decentraland土地空间所有权与租赁经济
身份认证POAP成就徽章经历凭证与社区准入

4. 发展挑战

  • Gas成本高企:单个NFT的铸造与转移成本显著高于ERC-20

  • 标准化不足:元数据格式尚未统一,跨平台兼容性待提升

  • 法律确权争议:链上所有权与现实法律体系的衔接难题


四、核心差异对比

维度ERC-20ERC-721
代币性质同质化(1 ETH = 1 ETH)非同质化(每枚NFT唯一)
数据结构余额映射(address→amount)所有权映射(tokenID→owner)
使用场景货币、权益凭证收藏品、虚拟资产
交易模式数量拆分(可转0.1个)整单位转移(1个NFT)
典型应用USDT、UNICryptoPunks、BAYC

五、开发实践指南

1. ERC-20代币开发(基于OpenZeppelin)

solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract GameCoin is ERC20 {constructor(uint256 initialSupply) ERC20("GameCoin", "GC") {_mint(msg.sender, initialSupply * 10**decimals());}
}

功能扩展

  • 代币销毁:实现_burn函数

  • 交易税费:重写transfer添加手续费逻辑

  • 流动性锁定:通过时间锁合约限制大额转账46

2. ERC-721 NFT开发

solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";class Artwork is ERC721 {using Strings for uint256;mapping(uint256 => string) private _tokenURIs;constructor() ERC721("DigitalArt", "DART") {}function mint(address to, uint256 tokenId, string memory uri) public {_safeMint(to, tokenId);_setTokenURI(tokenId, uri);}function tokenURI(uint256 tokenId) public view override returns (string memory) {require(_exists(tokenId), "URI query for nonexistent token");return _tokenURIs[tokenId];}
}

进阶功能

  • 版税机制:实现EIP-2981标准

  • 动态元数据:通过Oracle连接链下数据源

  • 组合NFT:ERC-1155实现多代币混合包57


六、安全防护要点

通用原则

  • 使用SafeMath库防止算术溢出

  • 严格权限控制(如OpenZeppelin的Ownable合约)

  • 完整的事件日志记录

ERC-20专项

  • 防重入攻击:采用"检查-生效-交互"模式

  • 白名单机制:限制可疑地址交易

ERC-721专项

  • 元数据验证:确保tokenURI有效性

  • 转移回调:实现ERC721TokenReceiver接口防止资产丢失510


七、未来演进方向

  1. 混合标准:ERC-1155支持同质化与非同质化代币共存,降低Gas消耗7

  2. 跨链互操作:通过Layer2和跨链桥实现多链NFT流通

  3. 动态NFT:结合Chainlink预言机实现实时属性更新

  4. 合规化改造:嵌入KYC/AML模块满足监管要求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++入门小馆 :多态

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…

【NextPilot日志移植】整体功能概要

整体日志系统的实现功能 该日志系统主要实现了飞行日志的记录功能,支持多种日志记录模式,可将日志存储到文件或通过 MAVLink 协议传输,同时具备日志加密、空间管理、事件记录等功能。具体如下: 日志记录模式:支持按武…

数字化转型:概念性名词浅谈(第二十五讲)

大家好,今天接着介绍数字化转型的概念性名词系列。 (1)SOP(标准作业程序) 标准作业程序(Standard Operating Procedure, SOPs)是在有限时间与资源内,为了执行复杂的日常事务所设计的内部程序。从管理学的…

交叉编译 opencv-4.10

编译说明 opencv 下包含很多模块,各个模块的作用可以参考Opencv—模块概览. 嵌入式考虑有限存储等因素会对模块进行裁剪,我这里主要保留图像拼接(stitching)图片编解码(imgcodecs)与特征点匹配&#xff08…

Python cv2对象检测与跟踪:从基础到进阶实战

在计算机视觉领域,对象检测(定位目标位置)与对象跟踪(持续追踪目标运动)是视频分析、自动驾驶、智能监控等应用的核心技术。本文将结合OpenCV的cv2库,系统讲解其原理与Python实现方法。 一、对象检测 vs 对…

亚马逊推出新型仓储机器人 Vulcan:具备“触觉”但不会取代人类工人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

缓存套餐-03.功能测试

一.功能测试 点击小程序,就会触发根据分类id查询套餐方法,根据分类id查询套餐。 第一次查询,redis中没有数据,就会发sql进行sql数据库查询。 redis当中就有了对应的缓存。 再次点击,发现sql根本没有执行,…

WebFlux与HttpStreamable关系解析

1-Streamable 1-WebFlux与HttpStreamable关系解析2-MCP协议Streamable HTTP 2-参考网址 MCP协议Streamable HTTPMCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案 3-WebFlux与HttpStreamable关系解析 WebFlux 和 HttpStreamabl…

顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%

导读:顺丰科技引入 Doris 替换 Presto,在内部可视化数据自助分析工具丰景台场景广泛应用。目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W。并实现 P95 性能提升近 3 倍&…

如何在Jmeter中调用C程序?

在JMeter中调用C语言程序可以通过以下几种方式实现: 方法一:使用OS Process Sampler JMeter的“OS Process Sampler”可以用来调用外部程序,包括C语言编写的可执行文件。 步骤: 准备C语言程序: 编写C语言代码并编译…

python 中的单例

在 Python 里,单例模式指的是一个类仅有一个实例,并且提供一个全局访问点来获取该实例。下面为你介绍几种实现单例模式的常见方法。 1. 使用模块 在 Python 里,模块天然就是单例模式。当模块被导入时,Python 会对其进行一次加载…

Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址

判断为NAT模式网卡 能ping 通外网 ens34为仅主机模式网卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…

web 自动化之 selenium+webdriver 环境搭建及原理讲解

文章目录 一、web 自动化测试学习说明二、什么 web 自动化测试三、selenium 简介四、web自动化测试环境搭建五、web 自动化测试第一个脚本六、selenium 原理及源码讲解 一、web 自动化测试学习说明 进阶 web 自动化测试学习:掌握 python 编程基础 二、什么 web 自…

Linux 网络命名空间:从内核资源管理到容器网络隔离

1. 网络命名空间是什么? 网络命名空间(Network Namespace) 是 Linux 内核提供的一种网络资源隔离机制,用于为进程或容器创建完全独立的网络环境。它并非物理或虚拟的网络接口(如网卡、veth pair 等),而是一个虚拟容器,包含以下资源的独立实例: 网络接口(物理或虚拟)…

SQL知识点总结

总结的知识点主要来源于前段时间在牛客刷SQL题目中遇到的错误 目录 1.WHERE字句不能与高级函数连用 2.去重——distinct 3.不等于某个值 4.查多个范围内的值 5. 升/降序排序 6.占位符 7.统计某类别总数计算平均值 8.合并查询——UNION (ALL) 9…

【软考-高级】【信息系统项目管理师】【论文基础】采购管理过程输入输出及工具技术的使用方法

采购管理概念 项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程。项目采购管理包括编制和管理协议所需的管理和控制过程,例如合同、订购单、协议备忘录(MOA)和服务水平协议(SLA)。 采购管理…

C++ 手写一个内存池

内存池是一种内存管理技术,它预先分配一大块内存,之后将其按需分割成多个小块供程序使用。下面将详细阐述它的好处以及适用场景。 内存池的好处 减少内存碎片:在动态内存分配时,频繁地分配和释放不同大小的内存块,会…

LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述

【LetMeFly】3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述 力扣题目链接:https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一个地窖,地窖中有 n x m 个房间…

学习Linux的第四天

今天我们来学习Linux的网络配置,以及链表的知识开个小头 三种网络配置模式 桥接模式(用的最多) 2.Nat模式 3. 仅主机模式(Nat模式的功能外,只能在局域网通信,不能访问外网) 桥接模式&#xf…

【 window.addEventListener(‘message‘, handleMessage)无效的问题】

在react native加载中可能出现 window.addEventListener(‘message’, handleMessage)无效,无法监听到在react-native-webview中通过postMessage发送的消息,可以通过下面的方法来处理 window.addEventListener(message, handleMessage);document.addEven…