区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
132
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io6 X- d G- D; u9 m, W
" v0 l) U6 ?2 ?. s, A$ T% E& O
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
所以才推出了一种以太坊代币的标准:ERC20标准。' @$ J }% _* p) J' }
4 Z& `3 ?; h8 l3 f
ERC20标准涵盖了哪些内容?
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。) X3 I1 a( g4 t
Method p5 m" N; P$ f" H, W8 ]) W
. z* n, N! g1 K; ~- w
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。; r# i) s1 ^0 |
+ Q: z1 ?3 |) w* B0 U7 G* T, L1 m
1.name4 u, }8 U* h$ [: E7 C, T, G9 Y
functionname()constantreturns(stringname)
6 t% ^- t0 @/ q" i
返回string类型的ERC20代币的名字,例如:StatusNetwork5 \9 K" h, c; k" X: m8 @% N$ ?; B
7 U! X3 q# K; f& o$ v
2.symbol
functionsymbol()constantreturns(stringsymbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。+ }* `7 C F/ d9 ?' r( P: D( k( u
3.decimals% t) k' J9 [& n. m2 N. }
functiondecimals()constantreturns(uint8decimals)6 f5 Q9 |, N0 o
' c R8 [0 V8 y4 I0 o I
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
4.totalSupply
functiontotalSupply()constantreturns(uint256totalSupply)7 o, X- @' L. ~. E6 Y+ f
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。! Y. c" _. D% o, _8 A
5.balanceOf
functionbalanceOf(address_owner)constantreturns(uint256balance)
输入地址,可以获取该地址代币的余额。/ o, Y9 P3 `9 c& ^/ \- j# U1 N
& ~; P* x# _1 x5 f
6.transfer
functiontransfer(address_to,uint256_value)returns(boolsuccess)7 c, u1 I+ B8 V0 c7 w9 Y
9 ?0 m2 t$ s3 j( r
调用transfer函数将自己的token转账给_to地址,_value为转账个数, Z( O/ t2 m' C
$ W( N: D4 P- `, s$ n" a
7.approve
functionapprove(address_spender,uint256_value)returns(boolsuccess)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
$ K# r' |" O# N4 p- D% M
8.transferFrom: C3 y7 k4 W) E2 s4 ?
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)/ C! \* d9 n( [+ j7 a
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。/ N, R( O4 w5 Z: Z; }: t
) x% f0 q& j& c' v2 S1 Y
9.allowance
3 S `3 {; m% ]4 x, W- i( t8 m! H
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)7 H/ J Z* Y4 ~
返回_spender还能提取token的个数。! c6 X) C9 d: l) B8 N& z
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。4 o1 X. E' x1 d6 W3 u9 x
7 x8 n2 j) G1 ]- z1 V, H/ E# A
Events+ n# b8 f! ^* g2 Y
( I$ k. k; ]/ g. d5 u9 p8 ?
1.Transfer5 M J) E6 n7 p7 |! v7 C
' T" g2 D- E/ {# P; D6 N) g6 p
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)/ ^" N+ H* A2 B7 u% r3 ~5 [" P
2 @" _( r, P" V+ \
当成功转移token时,一定要触发Transfer事件# j3 i, E& D0 b
f5 [- p$ t% h% k8 p( d7 o
2.Approval% `' w0 J6 H9 h. N
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)3 a# I6 Y8 Q0 c5 i4 E0 T# b5 H
当调用approval函数成功时,一定要触发Approval事件2 t% q$ C" O- ~) M7 @" j! I
总结 [- ?3 l1 [: y2 n
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人