区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
64
0
0
$ X+ R n6 `+ E+ ]% }9 G* z1 ~
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io1 _& b! J1 J" G/ S: |9 M/ t2 C; u. I/ s
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
所以才推出了一种以太坊代币的标准:ERC20标准。( R- K5 I* o& U4 ^, B# j h
7 [6 w1 s+ v, V* f; M
ERC20标准涵盖了哪些内容?
9 U U: X. \ C# z3 X8 m0 K% X
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。* ?! p; m5 o0 S p. m
Method
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
1.name
functionname()constantreturns(stringname)
@9 o2 W% X9 w* S+ ~
返回string类型的ERC20代币的名字,例如:StatusNetwork V+ K+ j6 ]+ F. B, }8 `
" _: r6 m$ P5 | V
2.symbol
functionsymbol()constantreturns(stringsymbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
3.decimals
4 w7 X; m. ?6 K& H) V
functiondecimals()constantreturns(uint8decimals)
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
- c- ]3 \: z! H
4.totalSupply3 }$ C# p1 x' Y, N9 T
g- f* }0 k( I& |" Z
functiontotalSupply()constantreturns(uint256totalSupply)
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。0 q4 P! U$ `$ ]) L( F9 ]1 W7 M
5.balanceOf( M; `1 N l& ]& \( ~
functionbalanceOf(address_owner)constantreturns(uint256balance)
输入地址,可以获取该地址代币的余额。
6.transfer
6 L4 x0 @, c' c) t6 r; \1 [
functiontransfer(address_to,uint256_value)returns(boolsuccess)' K) q# C/ T) V Y- S9 B# \' v1 w
: {5 l% S6 c( T! D
调用transfer函数将自己的token转账给_to地址,_value为转账个数
7.approve/ R, j( Z& ]' l2 j& G6 ?+ s, |, t
0 C+ o% b- \' \
functionapprove(address_spender,uint256_value)returns(boolsuccess)2 r5 V9 ^' F X! D3 V6 F' {/ S) R" S# b
批准_spender账户从自己的账户转移_value个token。可以分多次转移。* B* C# R# D8 N$ t* o2 W
8.transferFrom
2 ], P5 x7 X' h* v$ s
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
8 p% F( ^ e1 v* K1 i
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
. U0 E, k( O I. b, X
9.allowance
' {$ o( q0 J4 M% i) B+ L" G9 O6 u
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
返回_spender还能提取token的个数。9 A, i* J% T; U7 I. O9 J! p
+ _/ l6 K' Y" T) c+ \; Y4 {
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。9 m- n0 v' _: }9 A8 D
Events; h$ r. h. [$ r8 Q
1.Transfer
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)- p* R, L7 D5 R9 M
当成功转移token时,一定要触发Transfer事件
2.Approval
; l9 |3 v: d' U( z0 H
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value); c/ g" Z8 ]1 ^5 t" y
; i8 a* k: D, u7 |7 J
当调用approval函数成功时,一定要触发Approval事件4 Q- s" m6 ]8 {5 q" }5 Q
" N& t l- f8 U L4 m4 C, q
总结9 j, y* j/ i8 Y
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人