区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
122
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
6 ~0 w: C0 ^/ M; Z2 h8 R2 _
所以才推出了一种以太坊代币的标准:ERC20标准。; h, [/ H/ V9 X7 L
ERC20标准涵盖了哪些内容?
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。- X2 N [. @7 }# P
Method$ k" T+ ~; X0 ~+ m: f0 B6 s
' n7 h/ {# g& |1 I d! p
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。. G' X5 a0 W- Z
1.name' k) t7 k7 J" ?% j0 x3 N* b
functionname()constantreturns(stringname)
返回string类型的ERC20代币的名字,例如:StatusNetwork
2.symbol5 D: C0 H# X% W$ l
2 G9 y/ q6 c7 p3 o, ?. i7 Z- T
functionsymbol()constantreturns(stringsymbol)- u) M c i/ p9 d8 n7 h
9 B! r: m* ^% } \ C
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
3.decimals2 Y8 V+ c! Z. |3 d5 ?
functiondecimals()constantreturns(uint8decimals)# w$ t/ u: k3 Z2 `+ T
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。4 c- F: y/ I5 |9 E" o0 N) o
- C0 |4 `4 N$ w) }9 j
4.totalSupply
" D( U' m6 u3 a1 Q/ q% f& E/ H
functiontotalSupply()constantreturns(uint256totalSupply)
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。6 X9 e0 B. m4 H. r8 k
5.balanceOf4 C7 U, i+ `2 f) H) @% S$ I
' s+ P; b3 x! X* K9 H
functionbalanceOf(address_owner)constantreturns(uint256balance)
+ \. |7 y+ ?# @' M1 _4 e
输入地址,可以获取该地址代币的余额。
6.transfer6 r* ^/ B! K/ o7 k
" r6 `1 `: O# b P! z: v
functiontransfer(address_to,uint256_value)returns(boolsuccess)9 V1 A1 a1 D( k1 d: \
调用transfer函数将自己的token转账给_to地址,_value为转账个数; E, B6 w' t; c: ^% g$ r2 y
7.approve
functionapprove(address_spender,uint256_value)returns(boolsuccess)
- p* B" W7 ]3 S# a* R1 o
批准_spender账户从自己的账户转移_value个token。可以分多次转移。7 e5 c, F* g" z5 g+ L
8.transferFrom9 I: ~/ K/ ~9 V) h/ Y6 h5 O
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)+ Y% q2 b8 Z, B
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。5 Q$ L9 [3 k5 ^ j* B2 ~
9.allowance$ Y- h# Q. p) T4 X
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
返回_spender还能提取token的个数。
1 M; c+ k$ p* [: @8 ]) h
approve、transferFrom及allowance解释:
账户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( v) g$ y" c. }/ |2 q& n( x5 l
1.Transfer
3 [ Z% B% o1 j" B: d p. g
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
" K# L Q% _1 z) K9 Q9 U
当成功转移token时,一定要触发Transfer事件& }! l: N! {3 K% U' R% [
# j' e8 e1 w1 T; t# |7 U
2.Approval
N% p! R8 M* ?. o& X$ ?
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)$ v. |/ W: N1 |# T0 J @
当调用approval函数成功时,一定要触发Approval事件7 N+ } y6 t: m
$ \1 @/ [ l" S% N* ?; k: \
总结
$ q. r) c3 p6 T) O
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人