快速了解以太坊多种代币标准

devtools/2025/3/31 22:40:18/

前言

本文主要介绍以太坊ERC20、ERC721、RC1155三种代币标准相关介绍以及特点;

ERC20代币标准

概念:同质化代币标准(等值)

核心方法

  • name(): 代币名称
  • symbol(): 代币简写
  • decimals(): 代币可以分割到的小数位数
  • totalSupply(): 代币的总供应量
  • balanceOf(address _owner): 特定地址所有者的代币余额
  • transfer(address _to, uint256 _value): 从调用者的地址转移 指定量的代币到地址
  • transferFrom(address _from, address _to, uint256 _value): 允许支出者 从账号1转移一定量的代币到账号2
  • approve(address _spender, uint256 _value): 允许 支出者 从调用者的账户多次取回总共定量的代币
  • allowance(address _owner, address _spender): 返回支出者仍然被允许从所有者提取的代币数量

核心事件

  • Transfer(address indexed _from, address indexed _to, uint256 _value):在代币被转移时触发
  • Approval(address indexed _owner, address indexed _spender, uint256 _value):调用 approve 方法时触发

补充:OpenZeppelin库中的ERC20已经非常全面可以在此基础上扩展

ERC721代币标准

概念:非同质化代币(唯一性)

核心方法

  • balanceOf(address _owner):该地址拥有的代币数量
  • ownerOf(uint256 _tokenId):拥有此代币的地址
  • safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data):安全地将代币从一个地址转移到另一个地址
  • transferFrom(address _from, address _to, uint256 _tokenId):将代币从一个地址转移到另一个地址
  • approve(address _approved, uint256 _tokenId):授权某个地址管理特定的ERC721代币
  • getApproved(uint256 _tokenId):获取被授权管理特定代币的地址
  • setApprovalForAll(address _operator, bool _approved):将一个操作者地址设置为被批准或取消批准管理所有代币的权利
  • isApprovedForAll(address _owner, address _operator):查询一个操作者是否被批准管理某个所有者的所有代币
  • ERC721Metadata是 ERC721 标准的一个非常重要的扩展 :增加了名字(name)”、“符号(symbol)”和“元数据(tokenURI)”三个方法

核心事件

  • Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId):在代币被转移时触发
  • Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId):在一个地址被授权管理另一个地址的特定代币时触发
  • ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved):当一个操作者被授权或取消授权管理某个所有者的所有代币时触发

补充说明 :
一般情况下借助OpenZeppelin库中的ERC721,在开发nft合约时候需要配合ipfs去中心化服务用来存储元数据

ERC1155代币标准

概念:管理多种类型的代币(包含了同质化代币和非同质化)
主要函数

  • balanceOf(account, id):查询帐户对于特定代币 id 的余额
  • balanceOfBatch(accounts, ids):同时查询多个账户对于多个代币 id 的余额
  • safeTransferFrom(from, to, id, amount, data):安全地从一个账户向另一个账户转移特定 id 的代币
  • safeBatchTransferFrom(from, to, ids, amounts, data):批量转移多种代币从一个账号到另一个账号
  • setApprovalForAll(address _operator, bool _approved):将一个操作者地址设置为被批准或取消批准管理所有代币的权利
  • isApprovedForAll(address _owner, address _operator):查询一个操作者是否被批准管理某个所有者的所有代币

元数据扩展

  • uri(uint256 _id):一个代币的 ID 来获得一个 URI
    元数据结构:非同质代币的描述文件,存储在例如ipfs上;
  • name: 代币的名称
  • description: 代币的描述
  • image: 代表代币的图片链接
  • properties: 一个包含额外信息的对象,例如代币的稀有度、或代币具体的属性数值等
# json文件
{  
"name": "Magic Sword", // 代币的名称
"description": "A rare sword imbued with magical powers.", // 代币的描述
"image": "https://images.example/magicsword.png",  //代币的图片链接可以通过ipfs上传文件生成
"properties": {  
"damage": 35,  
"magic": 50  
}  //额外信息的对象
}

补充说明:开发一般使用OpenZeppelin库中的ERC1155的库来开发

代币标准特点

ERC20:

Ethereum 网络上最出名且应用最广的代币标准

ERC721特征
  1. 非同质化:每个代币都有独特的属性
  2. 所有权追踪:智能合约能准确记录每个代币的所有者
  3. 元数据可选性:合约可以包含一个可选的 URL,指向代币的元数据,如图片、文本等
ERC1155特点
  • 灵活性: 合约可以支持多种代币类型,包括但不限于可替代代币、不可替代代币等。
  • 节省交易成本: ERC1155 允许用户在单个交易中转移多种代币,大幅减少交易成本,并提高效率。

教程到此结束,更多相关,,https://t.me/+_QibemQqIIg1OTY1


http://www.ppmy.cn/devtools/169011.html

相关文章

ResNet改进(9):添加 DepthwiseSeparableConv深度可分离卷积模块

本专栏代码均经过测试,可以直接替换项目中的模型,一键运行! 采用最新的即插即用模块,有效涨点!! 1.DepthwiseSeparableConv 深度可分离卷积(Depthwise Separable Convolution)是一种高效的卷积操作,广泛应用于轻量级神经网络(如 MobileNet)。它将标准卷积分解为两个…

Linux中vscode编程,小白入门喂饭级教程

确保Ubuntu联网 因为后面安装VScode需要从互联网下载。 安装GCC 在桌面空白处右键->打开终端 执行命令:gcc -v 在最后一行可以看到gcc version 7.5.0 如果提示Command ‘gcc’ not found,就查一下如何安装gcc,先把gcc安装好。 安装VS…

VSCode C/C++ 环境搭建指南

一、前言 Visual Studio Code(简称 VSCode)是一款轻量级且功能强大的跨平台代码编辑器,凭借丰富的插件生态和高度的可定制性,深受开发者喜爱。对于 C/C 开发者而言,在 VSCode 中搭建开发环境,能够获得灵活…

centos 7误删/bash 拯救方法

进入救援模式 1. 插入CentOS 7安装光盘,重启系统。在开机时按BIOS设置对应的按键(通常是F2等),将启动顺序调整为CD - ROM优先。 2. 系统从光盘启动后,选择“Troubleshooting”,然后选择“Rescue a Cent…

Unity动画片段丢失(AnimationClip),如何进行重新绑定

从外部导入的AnimationClip存在黄色丢失的missing提示,这时候不需要重新制作动画,只需要重新绑定动画即可。 我们以第一条Intro1:Anchored Position(缺失!)为例 第一步:双击动画中的Intro1条目,可以查看片段存储该动画的对应路径…

C++中,什么时候析构函数要是virtual

析构函数应该是virtual的,特别是在以下情况下: 多态基类如果一个类是作为多态基类使用,即打算通过基类指针或引用来删除派生类对象,那么该基类的析构函数应该被声明为virtual。这是为了确保当通过基类指针删除派生类对象时&#…

CSS 选择器详解:类型、用法与示例

文章目录 引言1. 基本选择器1.1 元素选择器(Type Selector)语法示例 1.2 类选择器(Class Selector)语法示例 1.3 ID 选择器(ID Selector)语法示例 1.4 通配符选择器(Universal Selector&#xf…

自然语言处理|让AI更聪明:如何用百科知识喂饱语言模型

一、引言 在自然语言处理(NLP)领域,语言模型的发展经历了从简单统计模型到复杂深度学习模型的演变历程。早期的 N-gram 模型仅能基于局部上下文预测单词,而如今的预训练语言模型,如 GPT 系列、BERT 等,凭借…