区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
86
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。0 k' B+ @+ Y/ T8 \6 v# t0 k
) Q3 w( X6 O y7 ^
所以才推出了一种以太坊代币的标准:ERC20标准。
ERC20标准涵盖了哪些内容?
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
1 b( H- j) ]: c) W
Method; }7 H9 K. f* X) c7 Y
q* b5 e! S1 g4 _3 Z" B3 P
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
1.name3 w; ]: J% v5 a! A+ Z
, e6 O! o+ I; _$ h
functionname()constantreturns(stringname)
! n+ s/ z2 S4 X7 d+ y7 W& B
返回string类型的ERC20代币的名字,例如:StatusNetwork- ]2 b/ a) R Y& l. x5 m* N
% G. x) l7 F* ]/ y$ _) R4 V* W+ X8 B
2.symbol
" S' m/ E. p* ~8 _2 }9 ~
functionsymbol()constantreturns(stringsymbol)3 i. ^" [- y8 O. w: J" ?9 a
0 _6 N0 g0 E. \ t
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
3.decimals
functiondecimals()constantreturns(uint8decimals)
7 }3 E! s4 E/ z' W8 a; x
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。7 Q" \: K c3 g( C2 Q
; B, R9 ^0 h& J0 V3 X; e
4.totalSupply
functiontotalSupply()constantreturns(uint256totalSupply)/ R; J6 H8 T, e Z
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
( l2 P$ \; x9 s, A/ U! b
5.balanceOf
functionbalanceOf(address_owner)constantreturns(uint256balance)
8 T+ [0 ?+ U8 O& \ B) s
输入地址,可以获取该地址代币的余额。
. Y" c2 m, R( i: V7 c* T, P
6.transfer
functiontransfer(address_to,uint256_value)returns(boolsuccess)
5 @& C* @9 A: ~
调用transfer函数将自己的token转账给_to地址,_value为转账个数5 n7 r; B0 R; c) `- J! o. h l
7.approve; _; w2 y8 ?" |3 V# w5 b
functionapprove(address_spender,uint256_value)returns(boolsuccess)+ C4 P- m: R! c9 r; t
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
8.transferFrom
: H* Q/ X( r* L, M; ~) ^- c, f
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
; z* h/ U2 E, ?9 e3 X O
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
9.allowance
* |5 P5 \# _# n0 B
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
* W+ Y, N! a+ d$ v3 l5 s* c
返回_spender还能提取token的个数。
5 U$ i/ K3 G( k2 C1 r
approve、transferFrom及allowance解释: {0 y/ g1 T7 U* @
9 ]% R* q! N& Z2 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。. M6 L' c1 ~ g" o+ f
! T; b7 X4 C' @& y8 l4 R, X. `
Events8 o$ G* l' b( E3 h) U
1.Transfer! G; C8 H& s5 `! x/ b
0 ]6 o0 D# g0 i. u6 J
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
1 C9 G, @( d& V" M3 h0 I1 w
当成功转移token时,一定要触发Transfer事件
2.Approval
% e$ n0 x4 s9 q' {+ E, C; x
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
当调用approval函数成功时,一定要触发Approval事件
4 y% h. v5 m+ b( k# y# W1 N
总结+ d& z2 {, ?& ]$ O5 P
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人