Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
85 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。# O0 m1 ?) l- W% _$ E

- a, _! }4 O* a/ L    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io# n- J5 R/ p+ X5 K/ D" o

- ]. c% q; V" {5 j! a3 l2 |# r8 I    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
# F' v6 z6 e# W0 |, n7 D/ p. k" n
& r2 s6 i" o6 D  r% L2 }# g    所以才推出了一种以太坊代币的标准:ERC20标准。
6 v( }# B! v/ j9 o; k% a
* P( p; m8 w* n3 D$ z" M% R    ERC20标准涵盖了哪些内容?
. A# ]) j6 ^  r- D& L" U5 B1 c5 |- \: v; b, }
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
) q/ n- F  I& D3 J, i. b  ~/ P
2 P( i) e9 i0 S4 \: }% c% M    Method
9 \( r: m( q6 ^4 _, ^
! J% A5 _7 q1 S% l    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。& |$ Y* U1 J8 P, y5 X* N1 H$ [5 D
& X1 W) D2 b' f, ~# W
    1.name
, Y) N$ w5 X# H( }+ r4 N! @; R8 M% s. x. r# x0 t
    functionname()constantreturns(stringname)8 N5 N+ A; F" Z- h

1 ]- t- n& k2 m! t    返回string类型的ERC20代币的名字,例如:StatusNetwork
3 y  s2 e. }/ K$ @
0 j) i" {7 p1 t! u; U    2.symbol  N+ x$ z& S  t7 I

9 P; s9 {% m0 E3 e% j    functionsymbol()constantreturns(stringsymbol)2 A+ J, z! x3 j

$ X! ^) I8 s  D' V# b    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
2 S: h1 f! [2 I0 k5 P6 d( P" A  g% h- D# d
    3.decimals
7 I1 |* O2 p, x9 N$ Z
: E9 B- c) U0 }& \    functiondecimals()constantreturns(uint8decimals)
4 R9 ?; b3 S6 p% M7 |$ V
; l, k, H0 `- ~* @( _* \    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。& Y+ v' ~& P$ o  ?
7 s7 U; G: L/ [, R( b
    4.totalSupply- [& {3 Z6 a1 g9 N  T/ e
" j5 `4 ^6 H4 Y# [: w+ J. j
    functiontotalSupply()constantreturns(uint256totalSupply)3 N$ x; ]% ]+ |( ^  ]. f
% V5 D/ n- f$ Q# k+ {) A- o4 G
    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
# @. U4 U- R  |* p3 Y) d
2 h( D5 T! \& n# {7 G/ f1 r    5.balanceOf; i2 F9 W# V/ j
- b* M3 S2 E" L- I
    functionbalanceOf(address_owner)constantreturns(uint256balance)
+ U% d. C- |. f# |# J* P
5 q6 l& |, E* p; b0 u7 ]) t1 K' }    输入地址,可以获取该地址代币的余额。: Y6 `9 y1 X% u" i, a
) Z4 t/ x- w8 R: Y
    6.transfer
" u8 c! B; {/ {7 p0 ], Q2 i6 s* z) P3 S' `: J4 Z6 Z4 r
    functiontransfer(address_to,uint256_value)returns(boolsuccess)' C# a' K& h# ~# Y6 j

9 K! ?. q1 `1 Q0 ^, [- C    调用transfer函数将自己的token转账给_to地址,_value为转账个数
7 H7 }2 r4 ]& A8 B! n8 ?2 t7 a( B: o. M+ |4 J
    7.approve1 t; Q, E2 z4 O+ C
- }; L3 B* c9 ]
    functionapprove(address_spender,uint256_value)returns(boolsuccess); y- g0 F8 h5 P
4 a! W: _0 [! k( P3 S) |
    批准_spender账户从自己的账户转移_value个token。可以分多次转移。, [* ^; ?# [) {0 r3 m

. W* {+ H6 o! O+ ^1 s! l    8.transferFrom
% K0 d% e: u9 w  [) ~
; r1 y5 _2 ^9 L5 `    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)2 j9 Z. x5 A3 L

# _8 m* L/ J7 }    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。4 L+ L- h! v( g& p  C' ]" R) y4 v- F
% h5 Z8 s% P: W* ]' I
    9.allowance
+ R3 r) @: z' _% B/ Z& y5 D% A8 r& w. m& k
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining), L0 o# W# w7 Q4 F

% ]5 g, l6 G  p  A    返回_spender还能提取token的个数。
9 w5 J% P4 F2 O0 P0 k- n3 R0 @# L  {; t' P, n* Z0 f
    approve、transferFrom及allowance解释:" v# L6 H' J$ g. x. r

+ Z4 X% F- h3 h' l! r: Z# t    账户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。
8 q+ `/ H  c: @) S* g' l' S: h# }( j  F- h& o/ w
    Events
' s' X& p. F: s7 P* e& E3 q6 G& s% G8 g0 j
    1.Transfer; c- Y( c) E; u* @
; [* K! M' a/ v- L3 ]
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)0 E0 k! R& j- X2 M! Q' k

3 P) [& v% V* \' R8 h: V! y0 Q    当成功转移token时,一定要触发Transfer事件
( B: d& r2 d% m- ^# h  I9 I; N! N5 z) T- c* e  J5 J4 I
    2.Approval
. ~: D( Q" W! A# R* v1 Q5 ]) C7 w2 f; ~& O9 H1 r, B1 w6 }/ @
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
! h) D/ ?& e1 }
) ~# }* o6 ], M5 D    当调用approval函数成功时,一定要触发Approval事件! C) X5 Y0 j5 i. m9 X3 o

/ |  Y- h  q# r% {    总结" z$ S- v! x  N+ ^  s% I

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

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22