Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
96 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
: N4 J- E5 Y% i  a3 q' ~* X- u, _' `8 d$ M
    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
6 W" o4 n* e" L* ~8 n; v' s
8 ^, X! }/ |  L1 n) V5 L, r    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。! ^2 U+ N5 C! \- H' @1 @
7 x$ g8 \, R6 D+ ]( a1 c$ n& \
    所以才推出了一种以太坊代币的标准:ERC20标准。' ^6 Y) U) n7 e1 j

" q  K' p( O& g: g0 `, O7 ]    ERC20标准涵盖了哪些内容?
$ ?" b1 }# B# ~: o2 W: y/ ~8 a/ Z. [4 D4 Q$ N2 d7 z
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。9 p- Z, k  y$ ^! i: Z& @+ U3 m

: v9 m! |/ B+ o* K5 {    Method
4 D. c! K1 S- y. W# B" J. i+ S5 U: `! W
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。) p( i" W8 k4 j' {( ~

2 }3 Q  `( b* s- h4 t9 ?; B    1.name  D: Z5 M7 s1 }2 K, w$ `6 S& d/ v
) ]/ r" z% A' T$ r' M
    functionname()constantreturns(stringname)
, i5 F1 |8 G9 p; r$ p  V+ D* e2 d/ u, B$ [, F' v
    返回string类型的ERC20代币的名字,例如:StatusNetwork
: p5 b9 L0 x3 ^$ [2 I9 m; ~
0 B" i/ K+ Q" M    2.symbol" P+ _& c+ \5 j* ]: T8 q
/ b; E! d3 s. a2 n
    functionsymbol()constantreturns(stringsymbol)
3 T9 k$ b1 ?9 @/ S8 U. H# ?2 r% @4 K0 d" l% q" e
    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。4 C( R% O4 O" t

0 s& X& b+ @+ T# B2 N: m    3.decimals( d5 p) H% t& g8 D* u
  ^; f0 _; ~" g6 b
    functiondecimals()constantreturns(uint8decimals)
) W8 I& K- d2 U; t. z4 |: x
' O3 G# a" C7 \4 H4 R    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。3 E1 ^3 k* n+ q: }& z
1 ~( s; I6 O3 l2 X
    4.totalSupply4 s( C: L- J* E  r6 C5 O  }" R

7 e8 H5 r8 z' `) \% l- q/ L    functiontotalSupply()constantreturns(uint256totalSupply): R; I5 J  v, `: a
) O1 B) J4 m1 w: h+ E
    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。( |# s/ N8 m- O( v& D7 a8 |
. b: g; j/ g5 w: n$ ^' e. y$ Y
    5.balanceOf
* w5 g& k8 I: {1 c' X, k4 ~( M- V* Q# `! `0 I( G3 ?0 r
    functionbalanceOf(address_owner)constantreturns(uint256balance), f0 E) f' f  F7 b& e) W" j1 F1 ^* A

. E1 J* O! y' O; V    输入地址,可以获取该地址代币的余额。
  k4 I0 B5 T& g. J: g2 H$ f" h! M$ K6 B9 _
    6.transfer
$ Z. c% ^: T9 f1 d3 h- V' o: `: b  Y( C
    functiontransfer(address_to,uint256_value)returns(boolsuccess)/ D3 ?2 d" ^, ~, c
5 v/ Q4 N! d) V. ^
    调用transfer函数将自己的token转账给_to地址,_value为转账个数
1 |' b; L0 ]6 t! q% O  W
0 t6 N$ m1 \- o8 J* ?    7.approve/ o/ k4 W  l' G' j4 m  @  D  B

$ H! |  m& k5 H  P    functionapprove(address_spender,uint256_value)returns(boolsuccess)- i+ {# _9 {) A' {* v2 b% G. _

; Y% H6 H( T2 Q* E& l    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
' G- L, K( |) V6 @+ c/ y; @; W  c5 _6 ?; W- n& A, U
    8.transferFrom' x* Q3 H( i/ A& F
7 C5 c' f, C" f/ O' J- E
    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)$ |8 C  y3 S% ?, V3 `$ V
0 E! D6 M5 M# C1 H" U+ Z' w5 z
    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
3 \: z' k  V& X3 f. A- a7 Z- d
# V, c$ X. ]# w6 i; V' S( n    9.allowance: Y1 s) X. y) [/ |2 y; r

" d, t) t9 R, F* c; T4 u6 S    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
8 _2 B# V1 U) I- ~
& u8 u! k. o8 {1 T- }- W/ \. X    返回_spender还能提取token的个数。- E' o# e3 A' m7 `( F

! P  L; J. I* w. s( I, Q8 B    approve、transferFrom及allowance解释:2 e2 @4 J& o* j! z" i; O4 @& K

* h( z! q& W2 ], x1 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。4 c; n5 U1 B9 y8 [

/ U/ G/ c7 w6 e/ k' l; F    Events2 C2 d- p3 y- U: s- _# i" R) U

0 y, p! Q4 F& I/ t    1.Transfer# V5 X8 W7 @/ B0 G8 S- s/ \
0 L* F. k' q) I- n
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
1 H+ \  t7 T& N# q+ g2 Q
! Q& e$ J) j2 @, y5 Q    当成功转移token时,一定要触发Transfer事件
  m) {& ~4 D0 J) B- t1 Y  ]4 D% V  K. [& H* B
    2.Approval
9 |$ ^8 s" i0 m+ x
2 f2 E; z+ {: s% g9 s4 J6 K8 ]. M    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)/ J/ R) u: r% \7 N) i* y% J9 @3 G

4 u$ E9 ]: e: W! D- B# w    当调用approval函数成功时,一定要触发Approval事件/ n6 P  y! v; ~

6 K& H8 X% p+ `, i+ @% `' i* F    总结6 Y* j0 k/ `. C8 L8 M$ q. U
4 [3 V/ ]$ p3 R5 ^( |$ E
    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22