Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
132 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。: J! ^3 h; ~! }

' \, R: c2 Z, w0 g( m! ]. d/ j    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io6 X- d  G- D; u9 m, W
" v0 l) U6 ?2 ?. s, A$ T% E& O
    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
; y/ G4 N, ]) B6 @* w7 I: x
0 {0 x4 y, I* {' j# F  ^2 h2 i    所以才推出了一种以太坊代币的标准:ERC20标准。' @$ J  }% _* p) J' }
4 Z& `3 ?; h8 l3 f
    ERC20标准涵盖了哪些内容?
) d! l" g: _' y5 j
' X+ X- f4 |0 T    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。) X3 I1 a( g4 t

3 ]  q6 U3 ^; ^) F1 Y" X" h    Method  p5 m" N; P$ f" H, W8 ]) W
. z* n, N! g1 K; ~- w
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。; r# i) s1 ^0 |
+ Q: z1 ?3 |) w* B0 U7 G* T, L1 m
    1.name4 u, }8 U* h$ [: E7 C, T, G9 Y

% o2 h  ]4 M8 i    functionname()constantreturns(stringname)
  e1 S% U/ I/ A% Z6 t% ^- t0 @/ q" i
    返回string类型的ERC20代币的名字,例如:StatusNetwork5 \9 K" h, c; k" X: m8 @% N$ ?; B
7 U! X3 q# K; f& o$ v
    2.symbol
% i6 L, J1 g! ]: \4 v
- g) z1 a7 f7 q& v6 [0 X    functionsymbol()constantreturns(stringsymbol)
& a& \! f1 r( p" p" c
' x" o# F& z$ D& ^    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。+ }* `7 C  F/ d9 ?' r( P: D( k( u

1 F! L( X! L9 }) C7 q6 b# t    3.decimals% t) k' J9 [& n. m2 N. }

3 |8 m+ C( N' O2 D! n- n    functiondecimals()constantreturns(uint8decimals)6 f5 Q9 |, N0 o
' c  R8 [0 V8 y4 I0 o  I
    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
9 O9 C0 A" ^, k7 `& P) r8 C+ x% K
6 R) `; s- O& f9 b( ~' I* q    4.totalSupply
6 X1 }1 B/ r! z% U  v" ~; x+ q1 i4 d
2 [2 @6 G) Q$ W' \+ ?    functiontotalSupply()constantreturns(uint256totalSupply)7 o, X- @' L. ~. E6 Y+ f

2 w* `: B) z" n4 D# k    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。! Y. c" _. D% o, _8 A

, G/ f+ t, M( t: B    5.balanceOf
( W" W8 m: \- G5 f' ^
% k7 Q( i+ f9 H0 n  F    functionbalanceOf(address_owner)constantreturns(uint256balance)
  d  |) i, Z9 n3 I
6 Y2 [6 h& B- w/ V+ h    输入地址,可以获取该地址代币的余额。/ o, Y9 P3 `9 c& ^/ \- j# U1 N
& ~; P* x# _1 x5 f
    6.transfer
9 O# u' v6 c( y3 e$ s
1 H' ~3 }/ w) i$ w  Z" ~    functiontransfer(address_to,uint256_value)returns(boolsuccess)7 c, u1 I+ B8 V0 c7 w9 Y
9 ?0 m2 t$ s3 j( r
    调用transfer函数将自己的token转账给_to地址,_value为转账个数, Z( O/ t2 m' C
$ W( N: D4 P- `, s$ n" a
    7.approve
  {6 W; U& a9 b3 X( f
- h+ R: Z( _" U$ S: _7 P    functionapprove(address_spender,uint256_value)returns(boolsuccess)
+ n' t2 @! V  Z4 P/ Z8 J( h0 ]
8 g( Z0 a% \5 `    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
/ X: k6 @! z+ u2 D9 O$ K# r' |" O# N4 p- D% M
    8.transferFrom: C3 y7 k4 W) E2 s4 ?

% X0 S, n' a4 p7 T% k    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)/ C! \* d9 n( [+ j7 a

( A. D+ _% `4 u. T- t; A    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。/ N, R( O4 w5 Z: Z; }: t
) x% f0 q& j& c' v2 S1 Y
    9.allowance
) [* T& \+ Y1 u4 n) w3 S  `3 {; m% ]4 x, W- i( t8 m! H
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)7 H/ J  Z* Y4 ~

! X* f1 ~' ~3 A' F8 i# o: y1 \    返回_spender还能提取token的个数。! c6 X) C9 d: l) B8 N& z

# L; E# s" |  ^' b  e* E6 I    approve、transferFrom及allowance解释:
/ D, r5 @% t; \# r" {' n
" L' X3 o+ x  H2 A    账户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。4 o1 X. E' x1 d6 W3 u9 x
7 x8 n2 j) G1 ]- z1 V, H/ E# A
    Events+ n# b8 f! ^* g2 Y
( I$ k. k; ]/ g. d5 u9 p8 ?
    1.Transfer5 M  J) E6 n7 p7 |! v7 C
' T" g2 D- E/ {# P; D6 N) g6 p
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)/ ^" N+ H* A2 B7 u% r3 ~5 [" P
2 @" _( r, P" V+ \
    当成功转移token时,一定要触发Transfer事件# j3 i, E& D0 b
  f5 [- p$ t% h% k8 p( d7 o
    2.Approval% `' w0 J6 H9 h. N

2 y& L, }- w/ M; T. }( `    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)3 a# I6 Y8 Q0 c5 i4 E0 T# b5 H

1 U; E; D# J: w! f1 J    当调用approval函数成功时,一定要触发Approval事件2 t% q$ C" O- ~) M7 @" j! I

1 a$ n2 H! K, G    总结  [- ?3 l1 [: y2 n

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

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22