Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

区块链快速入门之:ERC20是什么?

落日余晖97
122 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
; n2 ^2 Z* C3 ]# Q' \; s
7 r. a1 Y# u/ R+ Y, K, d$ Z7 I    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
3 Y. k! M0 D0 u8 `* E$ F
& h# P* _6 z; ]8 R5 o6 F' T    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
. O" H" ]0 g7 U$ |6 ~0 w: C0 ^/ M; Z2 h8 R2 _
    所以才推出了一种以太坊代币的标准:ERC20标准。; h, [/ H/ V9 X7 L

2 A. X. j- m. h: O. m    ERC20标准涵盖了哪些内容?
- E1 p/ q9 B% f2 i( S- Z
- L) O4 w" v( o- i8 z' Z( X" O/ Y8 s  X/ F    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。- X2 N  [. @7 }# P

6 g1 p' [' d0 z    Method$ k" T+ ~; X0 ~+ m: f0 B6 s
' n7 h/ {# g& |1 I  d! p
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。. G' X5 a0 W- Z

; R7 _, _2 j& @& j" q+ r4 t, t. z    1.name' k) t7 k7 J" ?% j0 x3 N* b

% _0 A& c& }; Q+ ^3 V6 u    functionname()constantreturns(stringname)
5 H: \; M; T, o; i$ a% ]! @/ }
% @) ?: i$ B, L3 }9 Q    返回string类型的ERC20代币的名字,例如:StatusNetwork
$ _! V& I( p" P- V. F. s
9 E( o: F% k( w, o+ o3 N$ f9 d    2.symbol5 D: C0 H# X% W$ l
2 G9 y/ q6 c7 p3 o, ?. i7 Z- T
    functionsymbol()constantreturns(stringsymbol)- u) M  c  i/ p9 d8 n7 h
9 B! r: m* ^% }  \  C
    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
. Y1 R2 @- D* l7 \
& i7 L: ?+ R+ }    3.decimals2 Y8 V+ c! Z. |3 d5 ?

2 k. ]+ }# X- b$ s1 i- G    functiondecimals()constantreturns(uint8decimals)# w$ t/ u: k3 Z2 `+ T

! X; g; J: k/ d$ Z% n) b    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。4 c- F: y/ I5 |9 E" o0 N) o
- C0 |4 `4 N$ w) }9 j
    4.totalSupply
' W7 A* C0 s; m: ?. ]; r" D( U' m6 u3 a1 Q/ q% f& E/ H
    functiontotalSupply()constantreturns(uint256totalSupply)
' {9 S& k1 {( Y9 `/ \
8 B2 n. o& e6 n" h0 q) p, S    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。6 X9 e0 B. m4 H. r8 k

8 S+ h! l) ?& \5 v, Q% v+ {' {    5.balanceOf4 C7 U, i+ `2 f) H) @% S$ I
' s+ P; b3 x! X* K9 H
    functionbalanceOf(address_owner)constantreturns(uint256balance)
$ ~; p0 N' D8 A! J. d2 D% v+ \. |7 y+ ?# @' M1 _4 e
    输入地址,可以获取该地址代币的余额。
4 u; m8 w$ y$ T6 C
2 c# @/ b% a$ b  o6 c: A; R    6.transfer6 r* ^/ B! K/ o7 k
" r6 `1 `: O# b  P! z: v
    functiontransfer(address_to,uint256_value)returns(boolsuccess)9 V1 A1 a1 D( k1 d: \

! a; x8 N! n6 K, y7 v    调用transfer函数将自己的token转账给_to地址,_value为转账个数; E, B6 w' t; c: ^% g$ r2 y

- g, _5 ^+ F3 }  B4 J( I$ x# l' @    7.approve
( Y9 d6 z* D6 g- _, v+ D( Z
& u' w4 M. b# b3 k    functionapprove(address_spender,uint256_value)returns(boolsuccess)
$ U! `# ~  Y( y0 B6 M8 F0 J4 E- p* B" W7 ]3 S# a* R1 o
    批准_spender账户从自己的账户转移_value个token。可以分多次转移。7 e5 c, F* g" z5 g+ L

6 J7 ^- r9 T! ]5 l9 p" A    8.transferFrom9 I: ~/ K/ ~9 V) h/ Y6 h5 O

0 b2 R- c; c# j3 n% [    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)+ Y% q2 b8 Z, B

) V/ E& i9 h6 m, E: C    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。5 Q$ L9 [3 k5 ^  j* B2 ~

; x' o" N, y2 r& G+ e8 B7 a$ l8 A/ c, v    9.allowance$ Y- h# Q. p) T4 X

: N, `2 t6 p; ~9 {    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
, Z% w, I8 P  \, {
/ F& J- {0 u$ o7 _    返回_spender还能提取token的个数。
2 S. E( n' j1 h1 {1 M; c+ k$ p* [: @8 ]) h
    approve、transferFrom及allowance解释:
* e. W( J1 a4 ?; ~8 D$ R
( E: M+ @  p6 ^' E    账户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。
+ J* J1 {  s0 B& k9 `2 p
* g. L" j/ Z% m% J$ K/ v    Events( v) g$ y" c. }/ |2 q& n( x5 l

* N/ P( I5 x/ u# h9 A: |$ s6 X( ^    1.Transfer
7 g( z% Q7 q+ |1 l* O3 A" B  d3 [  Z% B% o1 j" B: d  p. g
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
3 E4 j7 E: K( H, t" K# L  Q% _1 z) K9 Q9 U
    当成功转移token时,一定要触发Transfer事件& }! l: N! {3 K% U' R% [
# j' e8 e1 w1 T; t# |7 U
    2.Approval
7 b8 j" _, Q! D  N% p! R8 M* ?. o& X$ ?
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)$ v. |/ W: N1 |# T0 J  @

: s$ F$ E. F: T* p, [: h+ g! H    当调用approval函数成功时,一定要触发Approval事件7 N+ }  y6 t: m
$ \1 @/ [  l" S% N* ?; k: \
    总结
: C+ j  ^# c7 L4 T$ q. r) c3 p6 T) O
    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22