ERC20 协议

2023-11-18

https://www.jb51.net/blockchain/797814.html

https://blog.csdn.net/bareape/article/details/124275062

代币标准–ERC20协议源码解析

我们在买入USDT时,就会看到ERC20、TRC20、Omni这三个选项,那么这些究竟代表了什么呢。其实这都是代币协议,TRC20是基于TRON网络中的一种代币协议,存储在TRON的地址当中,充值、提现都是通过TRON网络进行的,Omni是一种在比特币地址上的代币协议,所以每次转账(链上转账)时,都需要支付少量的比特币作为矿工费。

1、ERC20协议是什么

ERC-20标准中定义了一些函数接口。ERC20标准规定了各个代币的基本功能,它可以快速发币,而且使用又方便,因此空投币和大部分基于以太坊合约的代币基本上就是利用ERC-20标准开发的;

除了ERC20之外,还有ERC721,ERC223,ERC621,ERC827, 具体不做累述,但是对ERC721顺便说一下,ERC721是主要用于区块链游戏的协议,大家经常看到的区块链游戏基本上是基于ERC721。

简单来说,ERC-20就是一套基于以太坊网络的标准代币发行协议。有了ERC-20,开发者们得以高效、可靠、低成本地创造专属自己项目的代币

2、ERC-20协议技术详解

ERC20的标准接口是这样的:

contract ERC20 {
      function name() constant returns (string name)
      
      function symbol() constant returns (string symbol)
      
      function decimals() constant returns (uint8 decimals)
      
      function totalSupply() constant returns (uint totalSupply);
      
      function balanceOf(address _owner) constant returns (uint balance);
      
      function transfer(address _to, uint _value) returns (bool success);
      
      function transferFrom(address _from, address _to, uint _value) returns (bool success);
      
      function approve(address _spender, uint _value) returns (bool success);
      
      function allowance(address _owner, address _spender) constant returns (uint remaining);
      
      event Transfer(address indexed _from, address indexed _to, uint _value);
      
      event Approval(address indexed _owner, address indexed _spender, uint _value);

2.1 name

返回ERC20代币的名字,例如”BNB”。

2.2 symbol

返回代币的简称,例如:MTT,这个也是我们一般在代币交易所看到的名字。

2.3 decimals

返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示。

2.4 totalSupply

function totalSupply() constant returns (uint totalSupply);

返回token的总供应量。
展示了目前该token的流通总量,可以被所有函数调取。每当有新token被通过挖矿的方式加入到流通市场,该逻辑就会更新内部变量totalSupply_的值

2.5 balanceOf

function balanceOf(address _owner) constant returns (uint balance);

返回某个地址(账户)的账户余额

2.6 transfer

function transfer(address _to, uint _value) returns (bool success);

从代币合约的调用者地址上转移_value的数量token到的地址_to,并且必须触发Transfer事件。
token转账是需要消耗gas的,因为转账将导致以太坊智能合约中一个状态的变化。

2.7 transferFrom

function transferFrom(address _from, address _to, uint _value) returns (bool success);

从地址_from发送数量为_value的token到地址_to,必须触发Transfer事件。transferFrom方法用于允许合同代理某人转移token。条件是from账户必须经过了approve。

2.8 approve

function approve(address _spender, uint _value) returns (bool success);

允许_spender多次取回您的帐户,最高达_value金额。 如果再次调用此函数,它将以_value覆盖当前的余量。

2.9 allowance

function allowance(address _owner, address _spender) constant returns (uint remaining);

返回_spender仍然被允许从_owner提取的金额。

2.10 event Transfer

event Transfer(address indexed _from, address indexed _to, uint _value);

在发生交易转移时触发。Solidity event在 EVM 的日志记录功能之上提供了一个抽象。应用程序可以通过以太坊客户端的 RPC 接口订阅和监听这些事件

2.11 event Approval

event Approval(address indexed _owner, address indexed _spender, uint _value);

在发生代币授权时触发该事件

3、一些概念

3.1 什么是ERC

ERC(EthereumRequest for Comment)即以太坊通用征求意见协议。每一个开源的社区都需要一个系统来处理成员提出的请求和对请求的采纳。ERC就在以太坊网络中行使这样的一个职能,ERC为开发者提供了技术指导,也对以太坊网络的发展提供了建议。

开发者可以通过提交EIP(Ethereum Improvement Proposal以太坊改进建议),向以太坊社区提交新的ERC标准提案。提交内容包括协议规范和合约标准。一旦该EIP获得以太坊委员会的批准并最终定型,它就会成为一个新的ERC。

新的ERC为以太坊开发者提供了一套可实施的标准。开发者就可以使用这些标准搭建智能合约。

3.2 什么是非同质化?

同质化的加密代币遵循相同的同质化协议,这意味着这些代币可以进行交易置换。就像是在一个游乐场,我们都需要把现金换成游戏币才能用这些游戏币去使用各种设施,你我的游戏币可以自由交换,因为我们两个的游戏币本质是相同的,我们交换时只会产生数量的变化,而质没有变。在区块链上,这些可置换的加密货币被称为同质化货币。

这些同质化货币具有一个特性——他们可以与其他基于相同协议的代币交换。比较流行的有以太坊的 ERC 20 协议。ERC 20 是较早的代币规格协议,若有两个代币都在以太坊平台上以 ERC 20 协议发行,那这两个代币之间就可以自由置换。

同质化代币的另一个特性是它们的可分割性,意思是他们可以被分为最小单位来进行交换。就好比我们国家的法定货币最小单位是“分”,而比特币可以被分到最小单位satoshi(聪)(1聪=0.00000001比特币)。
同质化的规则固然好用,但是在某种程度来说,非同质化的概念对区块链技术更有创新意义。通过非同质化协议发行的代币都有自己独有的基因,这让每一枚代币的价值都不相同,因而无法进行两个币交换。同时非同质化代币也是不可分割的。你只能使用一整个代币,而无法将其拆分成更小的单位去使用。

在区块链里,非同质化的概念正在成为一种新的趋势。以太坊区块链最近开发的 ERC 721 协议允许在区块链上创建非同质化资产,即非同质化代币(简称NFT(Non-Fungible Token))。以太坊养猫(CryptoKitties)游戏就是基于 ERC 721 协议开发出来的,里面每一只猫都有独立且唯一的编号。

各种区块链平台对非同质化代币采用不同的协议标准。比如以太坊用的是 ERC 721 协议,而 Metaverse 使用 MIT(Metaverse Identifiable Token)协议。

3.3 NFT

NFT,全称为Non-Fungible Token,指非同质化通证,实质是区块链网络里具有唯一性特点的可信数字权益凭证,是一种可在区块链上记录和处理多维、复杂属性的数据对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ERC20 协议 的相关文章

随机推荐

  • MySQL数据库 之 插入、更新与删除数据

    欢迎大家扫码关注我的微信公众号 一 插入数据 MySQL 中使用 insert 语句来向数据库表中插入新的数据记录 为表的所有字段插入数据 insert into tb name col list values value list 创建一
  • 蓝桥杯-排列序数

    题目 标题 排列序数 如果用a b c d这4个字母组成一个串 有4 24种 如果把它们排个序 每个串都对应一个序号 abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bacd 6 badc 7 bcad
  • 关于HFile的存储结构梳理以及快速定位rowkey

    为什么80 的码农都做不了架构师 gt gt gt 一 HFile结构介绍 为了支持数据的随机查询 HFile结构分为六个部分 1 数据块 保存表中的数据 每一个数据块由块头和一些keyValue record 组成 key的值是严格按照顺
  • Ubuntu18.04安装CUDA11.3和cuDNN8.2.0

    今天在服务器上跑代码 发现报错 说是CUDA版本不对 然后看了一下服务器的版本 发现是9 0 这就有问题了啊 3090的显卡得用11 0上的版本啊 所以接着配置一下深度学的环境 记录一下方便以后查阅 Ubuntu18 04安装CUDA11
  • cocos2dx跨平台直播实例-ffmpeg-ios篇

    一 环境 mac 10 12 2 cocos2dx 3 13 1 ffmpeg 3 0 二 新建项目和编译库 cocos2dx按照官网新建一个实例 ffmpeg编译ios库http blog csdn net u013654125 arti
  • delphi取得文件图标并在TListView中显示

    delphi取得文件图标并在TListView中显示 技术要点 一 使用SHGetFileInfo函数获取指定扩展名的文件图标 需要引用ShellAPI单元 二 使用TStringList来保存扩展名与其图标的索引号 当添加一个文件名至TL
  • Linux 虚拟化网络技术 — 虚拟网络协议栈

    前言 本文通过 OpenStack Neutron L3 Agent 实现的 Linux 虚拟路由器来描述 Linux 的虚拟网络协议栈 Neutron L3 agent 概述 Neutron L3 agent 服务 运行在 OpenSta
  • ubutun18.04安装Ros-melodic

    在Mac下使用虚拟机VMware Fusion安装了Ubuntu18 04系统 并在Ubuntu系统安装Ros 按照版本要求18系统对应Ros melodic 鉴于在网上很少在Mac上装Ros melodic 以该文章以记录安装的过程 一
  • 数组的对数器

    原创是某客的左程云老师 我只是加了点自己的注释记个笔记 package basic class 01 import java util Arrays 对数器的作用 对数器可以验证算法是否正确 在比赛或者笔试的时候 如果需要大量的测试用例 而
  • 正则表达式的相关用法

    正则表达式 又称规则表达式 英语 Regular Expression 在代码中常简写为regex regexp或RE 计算机科学的一个概念 正则表通常被用来检索 替换那些符合某个模式 规则 的文本 大家在写正则表达式的过程中 可利用开源中
  • postgresql 数据库的备份与恢复(命令模式)

    Postgresql备份和恢复 SQL转储篇 Postgresql备份和恢复 SQL转储篇 作者 小P来自 LinuxSir Org摘要 和任何包含珍贵数据的东西一样 PostgreSQL 数据库也应该经常备份 备份PostgreSQL数据
  • git的命令操作,gitee的使用,详细图片教程

    目录 Git的区域概念图 Git的 Git Bash Here 命令操作 Gitee操作 SSH公钥注册流程 创建和操作版本库 Git的区域概念图 Git的 Git Bash Here 命令操作 1 创建一个普通文件夹 进入文件夹后 右键选
  • MultipartFile报No such file or directory

    原因 当使用MultipartFile做上传操作时 1 spring是先将上传文件存放在一个临时地址 默认 tmp目录下 2 进入controller进行业务操作 linux环境中 tmp目录是存放临时文件的 当这个目录下的子目录10天之内
  • canvas.drawBitmap(bitmap, src, dst, paint)

    GameView drawImage canvas mBitDestTop miDTX mBitQQ getHeight mBitDestTop getWidth mBitDestTop getHeight 2 0 0 public sta
  • DBeaver连接阿里云mysql步骤

    DBeaver连接阿里云mysql步骤 dbeaver是免费和开源 GPL 为开发人员和数据库管理员通用数据库工具 重点是免费并且很好用 本人因为navicat收费而经网友推荐发现这个软件 这个真是个宝藏软件 由于这个过程也是我慢慢摸索的
  • java项目与web项目中lib包

    lib包 一 java项目 1 过程 2 注意 二 web项目 1 过程 2 不自动加载问题解决方法 一 java项目 1 过程 1 在java项目下建一个lib的Folder 2 复制相关jar包到lib中 3 全选 点第一个jar包 按
  • 双层for循环时间复杂度_时间复杂度的表示、分析、计算方法……一文带你看懂时间复杂度

    作者 OverRedMaple 责编 Carol 来源 CSDN 博客 封图 CSDN付费下载于东方 IC 如果你还在发愁究竟怎么计算时间复杂度和空间复杂度 那你是来对地方了 名词解释 在计算机科学中 时间复杂性 又称时间复杂度 算法的时间
  • 路面监控服务器怎么维修,路面监控服务器怎么维修

    路面监控服务器怎么维修 内容精选 换一换 用户云服务器基本网络功能异常 无法完成基本通信 从弹性云服务器内部ping所在子网的网关 无法ping通 则需首先排查二三层网络问题 本问题请按照以下思路进行排查处理 检查弹性云服务器是否获取到IP
  • vue---------商城pc端 购物车模块

    目录 uuid some 与 every switch语句 HTTP的8种请求方式 Promise all的用法及其细节 uuid uuid生成随机id npm install uuid 下载 生成随机且唯一的游客身份 import v4
  • ERC20 协议

    https www jb51 net blockchain 797814 html https blog csdn net bareape article details 124275062 代币标准 ERC20协议源码解析 我们在买入US