Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
86 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。1 F' b8 U/ W+ N7 h# g1 N' f) Z

  ~' n4 h! @% A6 o: m! X    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
2 a% b. k+ }+ ?% {# t/ t
) J$ G0 s+ `" D    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。0 k' B+ @+ Y/ T8 \6 v# t0 k
) Q3 w( X6 O  y7 ^
    所以才推出了一种以太坊代币的标准:ERC20标准。
/ o/ r  v" Y7 {$ _' T
5 W- z1 Y: i# F1 k3 @    ERC20标准涵盖了哪些内容?
) `! a. O* Y4 k# t
4 `, @1 q% t5 W+ X+ S! o    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
5 h- w* n! J6 V& E1 b( H- j) ]: c) W
    Method; }7 H9 K. f* X) c7 Y
  q* b5 e! S1 g4 _3 Z" B3 P
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
# Q% a4 [. u; A. X  d2 d+ k
1 n6 l4 K' x* Z) V- Q- p    1.name3 w; ]: J% v5 a! A+ Z
, e6 O! o+ I; _$ h
    functionname()constantreturns(stringname)
0 l2 Z7 T/ y& w+ O2 X4 i  Y6 v9 g" r! 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
* t' ^# r& T; C" 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。
6 A" G. |- _4 r7 n5 B+ |2 d
: S% `4 d. Z- t    3.decimals
/ G0 m+ n0 J) Z8 z, f' P
8 g9 [4 M7 A/ T. y4 z$ |7 _    functiondecimals()constantreturns(uint8decimals)
3 ?8 u1 U: j/ ?% }. z7 }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
/ t! \/ P4 k9 j9 l/ F5 ?
5 S0 e1 M9 Z2 v8 s9 [  S' j    functiontotalSupply()constantreturns(uint256totalSupply)/ R; J6 H8 T, e  Z

) d  ]( y  ]8 s    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
6 J5 {/ U. \3 m+ N  S( l2 P$ \; x9 s, A/ U! b
    5.balanceOf
' |$ T* O- P6 I& [
, g5 _( d3 B6 x    functionbalanceOf(address_owner)constantreturns(uint256balance)
) l' A  }/ \: W) t8 T+ [0 ?+ U8 O& \  B) s
    输入地址,可以获取该地址代币的余额。
& k7 \; h- r/ B0 m1 {9 A& j8 n) X. Y" c2 m, R( i: V7 c* T, P
    6.transfer
+ m5 k; g) R: I6 \. k! k
2 ?0 A8 |  b# s" i    functiontransfer(address_to,uint256_value)returns(boolsuccess)
- N3 J/ \, v! l1 V. h5 @& C* @9 A: ~
    调用transfer函数将自己的token转账给_to地址,_value为转账个数5 n7 r; B0 R; c) `- J! o. h  l

* Q7 J% C8 l- q+ U6 L& r8 B    7.approve; _; w2 y8 ?" |3 V# w5 b

) n, a0 y5 B' [  \) @- ~    functionapprove(address_spender,uint256_value)returns(boolsuccess)+ C4 P- m: R! c9 r; t

( y0 B  c; b3 F5 z( r    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
$ {( v" S- J4 R5 C% s3 ~  ]
2 q! J! [1 `6 [0 }9 x    8.transferFrom
. }2 p8 H2 Y, w6 K( n* R2 R$ e% R: H* Q/ X( r* L, M; ~) ^- c, f
    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
" }' j5 y6 K7 s1 g& r0 V9 ^; z* h/ U2 E, ?9 e3 X  O
    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
# |- O1 a2 Q9 J7 K0 S
' Q  V' Y' |# i    9.allowance
. h, P) s$ u2 F% H0 m8 k* |5 P5 \# _# n0 B
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
5 }( c5 W* P/ b& P& ?* W+ Y, N! a+ d$ v3 l5 s* c
    返回_spender还能提取token的个数。
  a, |* Z& ^! p) s' `) r5 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

* s0 s( D6 e' s3 h    1.Transfer! G; C8 H& s5 `! x/ b
0 ]6 o0 D# g0 i. u6 J
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
: R5 Z$ f& y# R: H) Z9 K  j: d, d. a1 C9 G, @( d& V" M3 h0 I1 w
    当成功转移token时,一定要触发Transfer事件
9 E- M7 G/ ?" R6 |/ x0 ^1 v
  f' M7 P. F6 J  _. a* A    2.Approval
: E" C$ T, R* e* ?# d% e$ n0 x4 s9 q' {+ E, C; x
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
# D( J% p/ ], J; [
! q; A1 s; e3 q    当调用approval函数成功时,一定要触发Approval事件
* ^% z; @0 `: O. J. S7 z& J4 y% h. v5 m+ b( k# y# W1 N
    总结+ d& z2 {, ?& ]$ O5 P

9 o7 f0 X3 {9 j* ~" A    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22