Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
131 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。2 \7 S+ w5 N, E' W1 y
* [& M: [0 {. @
    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io6 Q6 x' Q4 S5 ?5 l# C* a. ?6 O8 d% c
6 u2 o1 W2 W- H0 G6 P. y' L8 N# X
    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。( R! A* F& Z2 w3 A& b2 p2 F, A! F

6 x( w7 y/ |3 h6 v0 S' F- p% P7 P/ }/ ~    所以才推出了一种以太坊代币的标准:ERC20标准。
4 X3 R8 n! N% Z. t' J
8 K. @7 _. n1 I    ERC20标准涵盖了哪些内容?+ x4 A0 O+ U* ^+ i
; c! p7 W9 S7 u$ K6 G% \2 a
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
! ~2 B0 W9 I" J% a) g/ I! |' {9 B6 A; O. D% Q& v
    Method8 n' T! E% C  q& }: K

. \3 @0 n, d# D: M    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。5 g4 H0 G; S7 @( f4 Q
/ d- I8 ~9 n8 x  M1 u8 J; b& s$ x3 n
    1.name  j# Y. e2 z- Z( |% m  i
$ g' W: {1 L; W3 c' Z  d
    functionname()constantreturns(stringname)2 l1 h+ G, p) F! Q* Q/ f0 W
& Q) W8 r0 P$ P) [" c
    返回string类型的ERC20代币的名字,例如:StatusNetwork
  ~/ a. s( e  X8 w) l* _) z/ M- Y3 e' v+ r$ ]* Y
    2.symbol4 H( G' ?( T) E1 y
( X  U# H" Y- W  x! \
    functionsymbol()constantreturns(stringsymbol)
7 e. @  a, u9 O7 r7 z' I. u7 C& G: i+ y2 o& h2 m" O1 n4 x
    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。- ~7 D8 Y& S" m2 J/ ^) x
% N" v0 c$ |: O9 n3 t* r0 ]
    3.decimals6 d& v: N3 {! H$ K, j

8 T' W5 N3 k+ d# t: r. _5 ]5 y8 f. _    functiondecimals()constantreturns(uint8decimals)
, S' [( n" J; L) X
# _- Z8 g% Q6 A    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。8 Y6 K7 Z+ Z' A2 H5 R2 c
6 ]3 h+ C# D" c, G' Q( X
    4.totalSupply
, ?  R- O( `! ]8 v! C2 f8 M/ a
7 c4 `2 q+ }, ?3 }( R! c% V5 N0 u    functiontotalSupply()constantreturns(uint256totalSupply); g& e/ s, c% c7 Q" C
9 ]; m+ H0 D/ ^$ ?& Y( y  ]' R2 `
    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
; r3 l6 k! [0 a) I( v( e: c) O; p. l4 _
    5.balanceOf$ M. K# \4 \. r3 Y( X( c+ b
3 l, U* I# H0 a# P" W
    functionbalanceOf(address_owner)constantreturns(uint256balance)* J- D: z# Q8 h% \; i8 p

8 Q1 q* B  x9 j9 }" E) d. p) i; [    输入地址,可以获取该地址代币的余额。8 I4 B; |! i. O

- f) u+ b+ Q" a( b. S* ?    6.transfer9 D7 O, I. L9 \2 r! S1 z

# `$ M4 T# B# o    functiontransfer(address_to,uint256_value)returns(boolsuccess)
8 M6 D$ @( m* M2 D5 w" N" O# L& @1 D$ y
    调用transfer函数将自己的token转账给_to地址,_value为转账个数! v2 ~8 I( [' D) T
8 A7 s9 z9 }+ p# g9 i! ?/ J
    7.approve
8 Q. T4 r* b; [- Q' X5 n' z2 D8 ?+ \2 O- R  Q' \1 [
    functionapprove(address_spender,uint256_value)returns(boolsuccess)
( o0 P( ]3 [' S3 P* X2 `
6 o2 V: P: N7 L+ ]$ Q    批准_spender账户从自己的账户转移_value个token。可以分多次转移。- E& }3 Q# }7 q# {6 d9 T' {
" |; v- ?. G; v, m2 j
    8.transferFrom
' N/ Z" x4 x* A# _7 N6 k. [, F* I8 G! a; Q& G. y
    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
  k2 x+ Z# \3 [! X* E: e( r* [' h# k% J4 _6 X$ `
    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
& a& w$ x' y) D# q
' e1 y; a( _# b0 n: l; b# i0 E    9.allowance7 x; C- {% ~$ I) l" m; q

$ E' F; y6 W2 S5 _    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
6 B5 p5 s* Z; A3 K3 X/ R
9 c2 J" }7 o0 g& o  ]    返回_spender还能提取token的个数。
8 v6 j7 j$ g3 x( C$ `5 D
% [2 t/ a. \: s" u    approve、transferFrom及allowance解释:* H; x6 r7 Y/ \# O. [% {. A
0 q( M5 Q0 y' I; ^# l& U0 ?2 A$ C+ s
    账户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。
1 H) o; A/ w4 m. C
/ s# L# D/ |# ]( u5 k2 p7 |    Events" a: @+ R" f' b# K$ _0 `
5 ]5 g/ L! {3 e% V+ N
    1.Transfer% l8 h; Y  |! q' W7 K- R: Z" S

3 m% c1 s% p4 r( Z1 f    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)4 C, g! o# S6 o2 ]1 {* ?* H

. x6 j- t- W: K/ Y: E    当成功转移token时,一定要触发Transfer事件
' A/ b6 @* z6 w* c7 x5 G" a) |
& c6 D: l6 \1 g' L    2.Approval4 F2 A2 {5 {8 _
9 g9 t1 o) q+ T. l7 S
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
+ @# {( ]( r2 i' m$ c8 c" W% ~0 p/ ?) i" U; I% B
    当调用approval函数成功时,一定要触发Approval事件
0 u$ D. [. E+ Q
  Q+ N/ W5 v# }0 q1 s. |# q    总结# Y. z0 J1 y0 j

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

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22