区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
96
0
0
3 q' ~* X- u, _' `8 d$ M
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。! ^2 U+ N5 C! \- H' @1 @
7 x$ g8 \, R6 D+ ]( a1 c$ n& \
所以才推出了一种以太坊代币的标准:ERC20标准。' ^6 Y) U) n7 e1 j
ERC20标准涵盖了哪些内容?
: y/ ~8 a/ Z. [4 D4 Q$ N2 d7 z
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。9 p- Z, k y$ ^! i: Z& @+ U3 m
Method
# B" J. i+ S5 U: `! W
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。) p( i" W8 k4 j' {( ~
1.name D: Z5 M7 s1 }2 K, w$ `6 S& d/ v
) ]/ r" z% A' T$ r' M
functionname()constantreturns(stringname)
V+ D* e2 d/ u, B$ [, F' v
返回string类型的ERC20代币的名字,例如:StatusNetwork
2.symbol" P+ _& c+ \5 j* ]: T8 q
/ b; E! d3 s. a2 n
functionsymbol()constantreturns(stringsymbol)
. H# ?2 r% @4 K0 d" l% q" e
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。4 C( R% O4 O" t
3.decimals( d5 p) H% t& g8 D* u
^; f0 _; ~" g6 b
functiondecimals()constantreturns(uint8decimals)
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。3 E1 ^3 k* n+ q: }& z
1 ~( s; I6 O3 l2 X
4.totalSupply4 s( C: L- J* E r6 C5 O }" R
functiontotalSupply()constantreturns(uint256totalSupply): R; I5 J v, `: a
) O1 B) J4 m1 w: h+ E
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。( |# s/ N8 m- O( v& D7 a8 |
. b: g; j/ g5 w: n$ ^' e. y$ Y
5.balanceOf
* Q# `! `0 I( G3 ?0 r
functionbalanceOf(address_owner)constantreturns(uint256balance), f0 E) f' f F7 b& e) W" j1 F1 ^* A
输入地址,可以获取该地址代币的余额。
$ f" h! M$ K6 B9 _
6.transfer
- V' o: `: b Y( C
functiontransfer(address_to,uint256_value)returns(boolsuccess)/ D3 ?2 d" ^, ~, c
5 v/ Q4 N! d) V. ^
调用transfer函数将自己的token转账给_to地址,_value为转账个数
7.approve/ o/ k4 W l' G' j4 m @ D B
functionapprove(address_spender,uint256_value)returns(boolsuccess)- i+ {# _9 {) A' {* v2 b% G. _
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
; @; W c5 _6 ?; W- n& A, U
8.transferFrom' x* Q3 H( i/ A& F
7 C5 c' f, C" f/ O' J- E
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)$ |8 C y3 S% ?, V3 `$ V
0 E! D6 M5 M# C1 H" U+ Z' w5 z
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
9.allowance: Y1 s) X. y) [/ |2 y; r
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
返回_spender还能提取token的个数。- E' o# e3 A' m7 `( F
approve、transferFrom及allowance解释:2 e2 @4 J& o* j! z" i; O4 @& K
账户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。4 c; n5 U1 B9 y8 [
Events2 C2 d- p3 y- U: s- _# i" R) U
1.Transfer# V5 X8 W7 @/ B0 G8 S- s/ \
0 L* F. k' q) I- n
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
当成功转移token时,一定要触发Transfer事件
- t1 Y ]4 D% V K. [& H* B
2.Approval
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)/ J/ R) u: r% \7 N) i* y% J9 @3 G
当调用approval函数成功时,一定要触发Approval事件/ n6 P y! v; ~
总结6 Y* j0 k/ `. C8 L8 M$ q. U
4 [3 V/ ]$ p3 R5 ^( |$ E
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人