Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
83 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
$ \0 }3 y. x8 H; `( N2 S+ G2 Y2 W
    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io7 W4 {) B3 Y1 b) a
0 }4 e) P3 B/ ]$ ?, |4 H& y
    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。# ?( R1 ~* e* y) c$ d4 Q, w; j
# k% m9 {9 r" P4 p
    所以才推出了一种以太坊代币的标准:ERC20标准。
/ z- j4 L! n7 U1 M3 ~( }; g% O& f2 O2 ~3 b; m
    ERC20标准涵盖了哪些内容?
8 S2 M) b7 `; E9 q9 _4 [$ i+ q; ?4 k. j) ^
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。; Q$ t* v! ^5 a4 Q! T! m1 Y5 m9 ~
: X; @: f, L3 c4 Z5 p
    Method- T$ n* Z* s' k" }

5 C- i1 x; K; R" y8 g& z    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
( }" l1 I3 g  J3 o' h( d) }8 g, ^7 z3 j' v/ r
    1.name
  y" ?; f) d+ r+ J1 U
' N3 I6 q1 d  r: a    functionname()constantreturns(stringname)
$ d' ^$ n. _' M" E' N4 A, O
$ @( }9 w8 w6 U  r- r    返回string类型的ERC20代币的名字,例如:StatusNetwork! S* r& u# Z8 \2 w- S
( P/ I- c5 i' K* f8 `, k. ~: _
    2.symbol+ g* M5 K* T1 q1 n, x; x, E
1 U( s- S9 N" s  z- b
    functionsymbol()constantreturns(stringsymbol)
( h9 S4 T/ T/ u9 @  d, s
8 p' O* m% P. Q" V- t: [    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。/ [' ~% F% d( q4 C2 z- s

: o+ ~3 D- v. L: m% d& [* C    3.decimals* u8 K1 _1 O1 M" E
' _" p# {$ a! @8 Z0 @
    functiondecimals()constantreturns(uint8decimals)2 \- K' ~1 f" _, W! ~

  _. G" K& G. p; K  q1 Y5 K1 H    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
' `# G- H( @+ K8 q5 E, r+ h) Q
9 {$ n' Q* }+ Q1 S    4.totalSupply( j: o7 ~& m9 e0 V) Q9 r. S

1 B( P9 H3 M! d7 p- _$ u* j    functiontotalSupply()constantreturns(uint256totalSupply)
' ]6 f# I, a' a" }# _# d0 }- c
5 y8 N# t6 g" i: @6 @    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
' ~- E4 m% f. [  Q7 h
; w8 P% n- J9 d    5.balanceOf
* w+ A. _* a$ K5 W1 y- y. E0 ?
" m, i' I- o" }; J, b' f6 s    functionbalanceOf(address_owner)constantreturns(uint256balance)
* V- j- q* h; ?: {5 P+ ^8 @: N. [. \% F
    输入地址,可以获取该地址代币的余额。5 u1 \% H: i6 v& I, {: J; A& W
& u8 B0 d) B2 R5 g
    6.transfer* c8 t+ N* }2 {) B
$ @! g. F+ w; @& c
    functiontransfer(address_to,uint256_value)returns(boolsuccess)
. C  P: z( q7 D$ i* O. N7 _9 k0 h( U% i1 p/ w
    调用transfer函数将自己的token转账给_to地址,_value为转账个数; T  \( d5 j" R/ C" S+ U, S
  X6 f2 H& ?( Z* P+ L$ v  J4 v) U
    7.approve
& O8 Q$ @8 a  A0 E% m+ ]9 L0 b
& {+ r+ ]' C& S9 n% Y* N- {    functionapprove(address_spender,uint256_value)returns(boolsuccess)$ t% T/ M* v( e+ L

$ l" _. a" m8 i: X' U    批准_spender账户从自己的账户转移_value个token。可以分多次转移。4 [$ Q+ l+ W: D
7 i/ ]2 {- O1 r* h8 B7 b
    8.transferFrom
* w* o6 U% {! u% t( u
! K- D+ B8 C6 l0 [( u" S    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
' X9 o: ~3 g# E& _2 n, f
- Z. R+ N1 r) W* V- |. {" Z    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
1 u  O0 H7 q8 V5 A! x+ B; }$ J7 T& ?* S
    9.allowance
" t* d' ~1 @0 u2 G" O0 d9 b
5 I4 v  s- n. V2 v/ P: Q# n    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
5 m4 W( D9 s( r
: o3 c4 P& V; T6 {: t% n/ b    返回_spender还能提取token的个数。
9 z& [+ O% _9 D/ O. _' u+ k/ V/ I% p8 A
    approve、transferFrom及allowance解释:  k' H; o3 @9 `
0 e6 g$ h, g7 Y& {
    账户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。
) B& C$ O+ k9 o! S$ V, e( p& m2 g2 m& V
    Events( u; k$ t; G6 U

# M  i0 k9 S. z6 C" ]/ x% S    1.Transfer6 p/ b) Z8 I8 ~) |0 f5 `4 j1 b
- F  B. X( ?, {1 a7 D9 s4 c) m
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
1 X/ O! E6 v/ l: q) _* M: K% T, r) r/ m( l% T3 K# q
    当成功转移token时,一定要触发Transfer事件
4 x! `# I' i) ^; v- A" u  y8 H" w. g7 c* p; D
    2.Approval0 L1 o- `! H; X" g/ k9 O
# w% j1 B( [) n( [
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)8 R: q1 |) b7 q  \2 u" v4 T

# K3 S3 a8 [" B0 I: T5 L- k6 }    当调用approval函数成功时,一定要触发Approval事件, p3 o4 b6 T/ \, F$ J8 }2 T

8 H2 Z# A9 g( ^2 P    总结
! T) V& p! U( i( |. R7 s, }* l8 l. G
, |3 }5 q7 N+ Z! {* l8 r    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22