区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
131
0
0
* [& M: [0 {. @
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io6 Q6 x' Q4 S5 ?5 l# C* a. ?6 O8 d% c
6 u2 o1 W2 W- H0 G6 P. y' L8 N# X
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。( R! A* F& Z2 w3 A& b2 p2 F, A! F
所以才推出了一种以太坊代币的标准:ERC20标准。
ERC20标准涵盖了哪些内容?+ x4 A0 O+ U* ^+ i
; c! p7 W9 S7 u$ K6 G% \2 a
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
/ I! |' {9 B6 A; O. D% Q& v
Method8 n' T! E% C q& }: K
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。5 g4 H0 G; S7 @( f4 Q
/ d- I8 ~9 n8 x M1 u8 J; b& s$ x3 n
1.name j# Y. e2 z- Z( |% m i
$ g' W: {1 L; W3 c' Z d
functionname()constantreturns(stringname)2 l1 h+ G, p) F! Q* Q/ f0 W
& Q) W8 r0 P$ P) [" c
返回string类型的ERC20代币的名字,例如:StatusNetwork
* _) z/ M- Y3 e' v+ r$ ]* Y
2.symbol4 H( G' ?( T) E1 y
( X U# H" Y- W x! \
functionsymbol()constantreturns(stringsymbol)
. u7 C& G: i+ y2 o& h2 m" O1 n4 x
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。- ~7 D8 Y& S" m2 J/ ^) x
% N" v0 c$ |: O9 n3 t* r0 ]
3.decimals6 d& v: N3 {! H$ K, j
functiondecimals()constantreturns(uint8decimals)
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。8 Y6 K7 Z+ Z' A2 H5 R2 c
6 ]3 h+ C# D" c, G' Q( X
4.totalSupply
functiontotalSupply()constantreturns(uint256totalSupply); g& e/ s, c% c7 Q" C
9 ]; m+ H0 D/ ^$ ?& Y( y ]' R2 `
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
( v( e: c) O; p. l4 _
5.balanceOf$ M. K# \4 \. r3 Y( X( c+ b
3 l, U* I# H0 a# P" W
functionbalanceOf(address_owner)constantreturns(uint256balance)* J- D: z# Q8 h% \; i8 p
输入地址,可以获取该地址代币的余额。8 I4 B; |! i. O
6.transfer9 D7 O, I. L9 \2 r! S1 z
functiontransfer(address_to,uint256_value)returns(boolsuccess)
" N" O# L& @1 D$ y
调用transfer函数将自己的token转账给_to地址,_value为转账个数! v2 ~8 I( [' D) T
8 A7 s9 z9 }+ p# g9 i! ?/ J
7.approve
5 n' z2 D8 ?+ \2 O- R Q' \1 [
functionapprove(address_spender,uint256_value)returns(boolsuccess)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。- E& }3 Q# }7 q# {6 d9 T' {
" |; v- ?. G; v, m2 j
8.transferFrom
. [, F* I8 G! a; Q& G. y
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
' h# k% J4 _6 X$ `
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
9.allowance7 x; C- {% ~$ I) l" m; q
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
返回_spender还能提取token的个数。
approve、transferFrom及allowance解释:* H; x6 r7 Y/ \# O. [% {. A
0 q( M5 Q0 y' I; ^# l& U0 ?2 A$ C+ s
账户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。
Events" a: @+ R" f' b# K$ _0 `
5 ]5 g/ L! {3 e% V+ N
1.Transfer% l8 h; Y |! q' W7 K- R: Z" S
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)4 C, g! o# S6 o2 ]1 {* ?* H
当成功转移token时,一定要触发Transfer事件
2.Approval4 F2 A2 {5 {8 _
9 g9 t1 o) q+ T. l7 S
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
0 p/ ?) i" U; I% B
当调用approval函数成功时,一定要触发Approval事件
总结# Y. z0 J1 y0 j
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人