区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
130
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
3 I. p! p. n+ ~0 s4 B% l* [
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。! {: w/ E! F6 q7 l- i7 n9 j
所以才推出了一种以太坊代币的标准:ERC20标准。0 P; g+ n% e; x6 w; H# e0 [; D
2 E' x" u3 z/ l6 v
ERC20标准涵盖了哪些内容?7 A- x7 N7 p8 I" l0 y/ z6 s" z: L
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。* }9 @' P7 ~ j+ p; P' Y
Method
1 B0 m3 Z2 E) R0 m
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。1 D3 Q$ u0 x8 a* a8 F7 s8 p* s, f
! c8 c3 ?$ [ C: _; f2 @
1.name
functionname()constantreturns(stringname)
; s5 f2 e9 [ s$ I& q
返回string类型的ERC20代币的名字,例如:StatusNetwork! x* ~% ~' L! C3 j
2.symbol
% O+ C" x7 \$ F' @. Y
functionsymbol()constantreturns(stringsymbol)
C3 H# C. T: N6 ^
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。5 p7 D4 u, o, T( ~$ |# N5 p
7 M9 p; T; h: D4 q' v4 B; D& x
3.decimals
6 Y' K9 b$ c# w3 [1 w) p
functiondecimals()constantreturns(uint8decimals)) {- W7 _6 T8 i4 H) n3 t
( n4 U, Z! u5 b' W
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。$ W$ \9 q" f: b4 {; @2 m
' @; ~+ X, B8 \: P& k
4.totalSupply
* S- P* h% c, ]( b7 `3 M- d
functiontotalSupply()constantreturns(uint256totalSupply). T7 o5 M5 ~8 @3 L1 X9 y- f
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。7 p! o1 v2 b( d( ?1 j; i
5.balanceOf
functionbalanceOf(address_owner)constantreturns(uint256balance), h6 y9 K) \, N2 h5 H1 S
6 m W! ]% \' U, R
输入地址,可以获取该地址代币的余额。
6 A9 P, V: @0 ?- q6 W6 q$ Z5 t
6.transfer
u7 `+ x% \% f* x4 g1 |* {
functiontransfer(address_to,uint256_value)returns(boolsuccess) V9 g2 B; D" D- J
- l$ }2 [* i* D5 w( B. q
调用transfer函数将自己的token转账给_to地址,_value为转账个数2 P1 {, r( X. x3 {
7.approve
functionapprove(address_spender,uint256_value)returns(boolsuccess)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。) O5 I6 z. t9 X$ S8 i h2 c
8.transferFrom
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
9.allowance C, L; X5 W8 _, Z+ y2 a; q5 P
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
7 D- m" v* p1 N: }: J7 v2 l
返回_spender还能提取token的个数。
approve、transferFrom及allowance解释: Z4 I) s C# H T1 N( G1 A
* Y1 f- \3 _. T5 A( B6 Z( r l/ j
账户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。: Q3 b- ?4 h- h, F( g1 f. f- [* v
Events: {0 w# Z6 z5 `4 N5 @$ Z6 {
1.Transfer! e! i* S! ~, c
+ h6 _3 H9 w- M' X0 E1 g/ H
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
当成功转移token时,一定要触发Transfer事件! K3 o0 B, z' k# i) _% v
3 w+ G+ R+ _: U; {4 w4 w2 S1 K" f5 a( ~
2.Approval
2 `: K9 L2 H3 j' J1 K
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
2 m" J* _# X5 Q; w, o- w
当调用approval函数成功时,一定要触发Approval事件
7 G3 L6 w3 k3 x& O; ?
总结: t: ]5 K) s) Q$ i) I
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人