区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
85
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io# n- J5 R/ p+ X5 K/ D" o
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
所以才推出了一种以太坊代币的标准:ERC20标准。
ERC20标准涵盖了哪些内容?
1 c5 |- \: v; b, }
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
Method
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。& |$ Y* U1 J8 P, y5 X* N1 H$ [5 D
& X1 W) D2 b' f, ~# W
1.name
% s. x. r# x0 t
functionname()constantreturns(stringname)8 N5 N+ A; F" Z- h
返回string类型的ERC20代币的名字,例如:StatusNetwork
2.symbol N+ x$ z& S t7 I
functionsymbol()constantreturns(stringsymbol)2 A+ J, z! x3 j
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
0 k5 P6 d( P" A g% h- D# d
3.decimals
functiondecimals()constantreturns(uint8decimals)
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。& Y+ v' ~& P$ o ?
7 s7 U; G: L/ [, R( b
4.totalSupply- [& {3 Z6 a1 g9 N T/ e
" j5 `4 ^6 H4 Y# [: w+ J. j
functiontotalSupply()constantreturns(uint256totalSupply)3 N$ x; ]% ]+ |( ^ ]. f
% V5 D/ n- f$ Q# k+ {) A- o4 G
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
5.balanceOf; i2 F9 W# V/ j
- b* M3 S2 E" L- I
functionbalanceOf(address_owner)constantreturns(uint256balance)
输入地址,可以获取该地址代币的余额。: Y6 `9 y1 X% u" i, a
) Z4 t/ x- w8 R: Y
6.transfer
6 s* z) P3 S' `: J4 Z6 Z4 r
functiontransfer(address_to,uint256_value)returns(boolsuccess)' C# a' K& h# ~# Y6 j
调用transfer函数将自己的token转账给_to地址,_value为转账个数
8 ?2 t7 a( B: o. M+ |4 J
7.approve1 t; Q, E2 z4 O+ C
- }; L3 B* c9 ]
functionapprove(address_spender,uint256_value)returns(boolsuccess); y- g0 F8 h5 P
4 a! W: _0 [! k( P3 S) |
批准_spender账户从自己的账户转移_value个token。可以分多次转移。, [* ^; ?# [) {0 r3 m
8.transferFrom
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)2 j9 Z. x5 A3 L
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。4 L+ L- h! v( g& p C' ]" R) y4 v- F
% h5 Z8 s% P: W* ]' I
9.allowance
% A8 r& w. m& k
functionallowance(address_owner,address_spender)constantreturns(uint256remaining), L0 o# W# w7 Q4 F
返回_spender还能提取token的个数。
# L {; t' P, n* Z0 f
approve、transferFrom及allowance解释:" v# L6 H' J$ g. x. r
账户A有1000个ETH,想允许B账户随意调用100个ETH。A账户按照以下形式调用approve函数approve(B,100)。当B账户想用这100个ETH中的10个ETH给C账户时,则调用transferFrom(A,C,10)。这时调用allowance(A,B)可以查看B账户还能够调用A账户多少个token。
' S: h# }( j F- h& o/ w
Events
7 P* e& E3 q6 G& s% G8 g0 j
1.Transfer; c- Y( c) E; u* @
; [* K! M' a/ v- L3 ]
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)0 E0 k! R& j- X2 M! Q' k
当成功转移token时,一定要触发Transfer事件
! N5 z) T- c* e J5 J4 I
2.Approval
7 w2 f; ~& O9 H1 r, B1 w6 }/ @
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
当调用approval函数成功时,一定要触发Approval事件! C) X5 Y0 j5 i. m9 X3 o
总结" z$ S- v! x N+ ^ s% I
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人