区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
83
0
0
( N2 S+ G2 Y2 W
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io7 W4 {) B3 Y1 b) a
0 }4 e) P3 B/ ]$ ?, |4 H& y
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。# ?( R1 ~* e* y) c$ d4 Q, w; j
# k% m9 {9 r" P4 p
所以才推出了一种以太坊代币的标准:ERC20标准。
( }; g% O& f2 O2 ~3 b; m
ERC20标准涵盖了哪些内容?
$ i+ q; ?4 k. j) ^
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。; Q$ t* v! ^5 a4 Q! T! m1 Y5 m9 ~
: X; @: f, L3 c4 Z5 p
Method- T$ n* Z* s' k" }
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
( d) }8 g, ^7 z3 j' v/ r
1.name
functionname()constantreturns(stringname)
返回string类型的ERC20代币的名字,例如:StatusNetwork! S* r& u# Z8 \2 w- S
( P/ I- c5 i' K* f8 `, k. ~: _
2.symbol+ g* M5 K* T1 q1 n, x; x, E
1 U( s- S9 N" s z- b
functionsymbol()constantreturns(stringsymbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。/ [' ~% F% d( q4 C2 z- s
3.decimals* u8 K1 _1 O1 M" E
' _" p# {$ a! @8 Z0 @
functiondecimals()constantreturns(uint8decimals)2 \- K' ~1 f" _, W! ~
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
4.totalSupply( j: o7 ~& m9 e0 V) Q9 r. S
functiontotalSupply()constantreturns(uint256totalSupply)
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
5.balanceOf
functionbalanceOf(address_owner)constantreturns(uint256balance)
8 @: N. [. \% F
输入地址,可以获取该地址代币的余额。5 u1 \% H: i6 v& I, {: J; A& W
& u8 B0 d) B2 R5 g
6.transfer* c8 t+ N* }2 {) B
$ @! g. F+ w; @& c
functiontransfer(address_to,uint256_value)returns(boolsuccess)
$ i* O. N7 _9 k0 h( U% i1 p/ w
调用transfer函数将自己的token转账给_to地址,_value为转账个数; T \( d5 j" R/ C" S+ U, S
X6 f2 H& ?( Z* P+ L$ v J4 v) U
7.approve
functionapprove(address_spender,uint256_value)returns(boolsuccess)$ t% T/ M* v( e+ L
批准_spender账户从自己的账户转移_value个token。可以分多次转移。4 [$ Q+ l+ W: D
7 i/ ]2 {- O1 r* h8 B7 b
8.transferFrom
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
! x+ B; }$ J7 T& ?* S
9.allowance
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
返回_spender还能提取token的个数。
' u+ k/ V/ I% p8 A
approve、transferFrom及allowance解释: k' H; o3 @9 `
0 e6 g$ h, g7 Y& {
账户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。
, e( p& m2 g2 m& V
Events( u; k$ t; G6 U
1.Transfer6 p/ b) Z8 I8 ~) |0 f5 `4 j1 b
- F B. X( ?, {1 a7 D9 s4 c) m
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
, r) r/ m( l% T3 K# q
当成功转移token时,一定要触发Transfer事件
; v- A" u y8 H" w. g7 c* p; D
2.Approval0 L1 o- `! H; X" g/ k9 O
# w% j1 B( [) n( [
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)8 R: q1 |) b7 q \2 u" v4 T
当调用approval函数成功时,一定要触发Approval事件, p3 o4 b6 T/ \, F$ J8 }2 T
总结
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人