区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
84
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。, b4 H% m; W; C4 }: X
( o3 T1 ^, w0 z
所以才推出了一种以太坊代币的标准:ERC20标准。
/ ^0 D/ L( l6 W' ^* n
ERC20标准涵盖了哪些内容?
7 V2 C) ~: R7 ]: E* o% ~* f
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
: F" w' g, x' n. G
Method
5 f! x! Y9 ?2 o1 a
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
1.name6 m# e2 p" w, g7 d
w3 ^) d x" t# F! U; {
functionname()constantreturns(stringname)
返回string类型的ERC20代币的名字,例如:StatusNetwork! a- n0 a% b0 e6 K3 m2 b' o. B
8 }# M# @( N3 B' Y
2.symbol; m' t z$ p: h' V8 M" X
0 K* f X$ H1 C2 y' M& ~4 z
functionsymbol()constantreturns(stringsymbol)+ U" u2 G# L9 z; V9 ~/ R: i: d: n
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。8 e0 U. _0 X+ g9 l. m
9 @. F d8 f7 |0 N2 _9 v- N
3.decimals
functiondecimals()constantreturns(uint8decimals)
0 }9 K6 v7 Q' ^" z: R6 @5 h; w- B
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。8 Z* q2 a; f1 G) m2 e* I @) n
: V- w) F+ ^5 d& [0 C( X1 b( w
4.totalSupply
functiontotalSupply()constantreturns(uint256totalSupply)
+ T' Y9 n6 f$ |' p- ~1 s% ~ ^
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。2 P, B4 F' v* {$ O/ X* o9 \, F, Q
- |% r2 x. L4 n6 f8 y9 u( Z
5.balanceOf# \! W' B8 F9 w v3 p
' I3 O3 s9 b( T) \# y
functionbalanceOf(address_owner)constantreturns(uint256balance)
% Y/ a9 q) d+ O/ v5 w
输入地址,可以获取该地址代币的余额。
6.transfer. e3 ~6 v* J5 l' U& O6 G$ Q
functiontransfer(address_to,uint256_value)returns(boolsuccess)
3 s, i* ^$ C! Y& A# A' S4 I
调用transfer函数将自己的token转账给_to地址,_value为转账个数/ z9 y6 W9 O8 ^8 ^4 A2 B
$ w8 d7 U5 _$ C7 ~6 f* Z
7.approve
. g- K2 s+ Y: N1 [8 ]! J, v
functionapprove(address_spender,uint256_value)returns(boolsuccess)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
8.transferFrom+ ]7 a% C- d/ R6 x0 ]1 ?" A- _
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。; U( N$ i2 I2 a* I* d9 N1 r
4 f0 z0 i9 C _: x, o( T2 b: V y
9.allowance# p9 ]2 x0 ]7 x% p: u6 S
- ]9 L2 G# R& J4 v
functionallowance(address_owner,address_spender)constantreturns(uint256remaining), D$ b$ u: m) J0 o6 {
返回_spender还能提取token的个数。
9 K8 z( f; _! t) N K5 i6 }
approve、transferFrom及allowance解释:- W* i8 _6 Q! t# P0 {; U: A O; q
8 \6 m) }: H2 J" f
账户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。0 O0 a9 w* ?4 W: D& F
6 O* O7 N F, p$ c% }
Events5 _; G9 v+ ?; y! M5 K, o
5 m) O7 ]& t( f0 T$ v/ g
1.Transfer
- w3 I- Y! g6 ?% u" j0 [
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
5 w, [8 ~# h7 }+ P6 M$ g- f0 `$ i. o/ ~
当成功转移token时,一定要触发Transfer事件
2.Approval) d, k5 I, N V. n
/ O0 A3 d4 y; J& G* C3 R+ N& Y8 ~
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
" s* p( t7 J1 ~0 [9 `, i
当调用approval函数成功时,一定要触发Approval事件
" v/ v8 @; V; i5 f
总结
# ^* E( o7 K: F( a- Z" d+ X# E& C4 o
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人