Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
82 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
1 u' o5 T+ {- `7 z# R. l' S' ?: U7 }: @1 z0 E3 T" p
    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io0 k8 d5 Y+ q/ W0 h

' r8 l1 j+ f9 A- O2 P    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
' A9 y( ]- a* O
8 V8 k: q4 P8 T9 U( a1 I+ J    所以才推出了一种以太坊代币的标准:ERC20标准。, f% f  [. |& A0 b; y

# u: u! l* X* A. c, z    ERC20标准涵盖了哪些内容?/ D2 S2 j: M9 d7 H
" y. Q" h" f4 h; \" R
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。0 H6 C) @3 l2 I: a2 g7 c" A

  N. {5 h  U" x( i    Method/ c; x( ]# m: i  |9 Q8 p8 d8 o

6 x" [7 p( A* Y8 n8 y0 J3 W% H    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。! q8 G! [  J0 V' W* v' h

# P8 `& {8 v) b* O    1.name2 T" c) P- Q5 E" O; [( Q3 j

. ^& e& h% d; |0 J, K3 Z6 f    functionname()constantreturns(stringname)8 p3 s7 x- i$ B, O
  k3 n- l' E+ H- K+ y8 y* @0 \
    返回string类型的ERC20代币的名字,例如:StatusNetwork
& M/ Z; E( u7 V. }8 x: c' Z' B
' V, H1 e+ z( {+ g; T+ q) r! V    2.symbol, z' o9 q5 e, C2 A( W( E

5 T, `6 e/ O' x" @, e    functionsymbol()constantreturns(stringsymbol)
0 z1 p% t& F9 ?0 ~7 |& |
6 Z7 N  R2 V* j0 O( {2 M4 p5 q    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
  Z) Z7 \  @& ?- N! A# ~$ u5 }5 }( Y1 ^
& y8 B2 V. H9 Q5 c" k- Z    3.decimals5 T- \$ m% `. i4 D$ T9 G
1 t( m+ E% z1 ~4 b" Q' P
    functiondecimals()constantreturns(uint8decimals)
6 V- \  d' L' }& A) c1 q6 C* Y3 E, i' X* t+ E- b3 G" `( I
    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
- \4 F) i3 s7 K  L! i
1 I, h% |$ F" ?& Y8 I" A    4.totalSupply- c. k" |- K* O3 x
0 H8 C, D% d5 i. L
    functiontotalSupply()constantreturns(uint256totalSupply)
; X$ E  h" W+ q& R  ~3 T
# t: z9 y9 t% _8 D' u7 s    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。3 H: c2 g" V' y- j8 X
3 w4 o/ j* y- C5 b
    5.balanceOf
) i8 }# k% [- l. o# r3 P! C% k
6 S* R5 B: r6 r8 V$ N    functionbalanceOf(address_owner)constantreturns(uint256balance)9 i3 W# Y- H& X$ g

  U. r- \3 R0 N  Q    输入地址,可以获取该地址代币的余额。1 Z! [: l8 w5 o/ ~! F

5 H8 V* B& l, u; q    6.transfer( l' S$ z) s% Z6 c1 }
8 e% b7 Y, a( q0 f, v* K8 C
    functiontransfer(address_to,uint256_value)returns(boolsuccess)9 ?) Y1 Q8 @  f) s

5 X+ u" n" ^/ b! c    调用transfer函数将自己的token转账给_to地址,_value为转账个数
$ V* q# j' Z1 R' b& B, a# |: P* Z  G# Y, B3 J! M
    7.approve6 F% E1 c& M" F; N. B! L; _7 ?
! B/ u" w$ G# d0 ~! {7 T  G
    functionapprove(address_spender,uint256_value)returns(boolsuccess)
5 J1 Y  W+ \) q$ b2 ~2 @
$ _3 y/ T5 m' w4 e8 K( a3 \" T    批准_spender账户从自己的账户转移_value个token。可以分多次转移。. w$ h7 S: z5 |

, G( `7 M$ Z& u; ?+ X    8.transferFrom
* }4 ]+ y9 @2 X8 w8 x
- a) t+ t; d) {# ^& l* `$ a. H( w" D    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
; {% E( x) M: r9 u) |! n5 M8 J2 c9 c" _$ E3 X# y# _( q3 A
    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。, {. U; K6 C, R7 y  m3 ?* d
* z8 x% @5 H; Z
    9.allowance
6 B" ]' Q9 x9 R' E* o, l% n2 \; ]; m3 s7 ^
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)$ @$ d: F! N0 D7 v

  g5 _2 |: _9 M    返回_spender还能提取token的个数。5 B' K: i, b4 Z* o- b9 e  ~

6 ]+ Y2 _. u+ e" p6 ~    approve、transferFrom及allowance解释:
9 m% w8 c1 O* y+ B6 a
0 n6 L: u' {$ ^# [! L! d- k5 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。; T/ O% x9 @" {+ m$ M
  ]! S; e8 `- {3 J6 [
    Events8 l) r* i5 N5 F9 a/ E/ v
$ M4 @8 B! S! Y: u1 q- l
    1.Transfer
- z* q! k$ F$ B$ Z/ U( L) X, B7 u; ?4 j+ s: @8 ^
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
- `( H! s5 x* C8 k7 \) c6 [% I/ a! p5 C+ N
    当成功转移token时,一定要触发Transfer事件3 N4 ~) D, Y( `+ z+ V. @6 u

9 M! D2 K* B; B$ L    2.Approval, r: d8 d  b9 [( h7 M3 p: E
" w0 X  w# g8 y( K/ Z
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)/ K, ^  w  A5 W  f+ L8 k6 d

5 U; r2 u% m5 ~+ t* R9 S9 C* z    当调用approval函数成功时,一定要触发Approval事件5 f# {9 }2 @! f
* M/ ]4 Z, x+ @% [' P4 x' x4 H+ h
    总结- G7 l# y' X! Z$ m& \9 m

3 ?2 l1 H$ q) r( i) ?+ p% e6 h# `    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22