Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
133 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
8 S# t$ g1 z, ?* Q. J
2 V8 ^! x5 O$ n4 e    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
/ ~8 L+ ?$ j1 h' L, c
7 `/ A; D! l/ c2 a    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
# c: j! B( m1 p5 o3 r, z7 H& S7 U
; E; [- u) X( @/ ]; H! S# f    所以才推出了一种以太坊代币的标准:ERC20标准。9 e0 \$ l" @, w6 Y. X1 Y
" W5 J3 ^/ y" G  O/ @
    ERC20标准涵盖了哪些内容?0 M3 \1 v1 g- s! i' E' B

+ `1 e# M$ c5 n. G2 E    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。6 V/ j0 i: `, b8 F) O
4 W  M# R2 Y  {% P% R
    Method5 w- K/ p5 q( _" P& E7 v' k/ ~
7 ]( \7 A4 o6 W
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
0 |& H8 v9 X% R# ^3 ?, S* @4 |' S' C, x5 U, f1 T
    1.name$ W/ w3 D* ~1 O5 m; y, @" ~2 V6 \/ y! H* v

% N4 K$ \: Z; g  W. i2 ^' A    functionname()constantreturns(stringname)
# P8 ~6 g  o- X- F4 I
* s/ Z& a9 r! L2 k4 k9 {    返回string类型的ERC20代币的名字,例如:StatusNetwork
: G/ |, c; }% d, i5 J; Q) t: R
; A) t* R- R. m: |& l- p6 h    2.symbol
1 o2 v% Z7 h5 k3 H) i/ x9 x: z$ d, O; Z2 r$ t
    functionsymbol()constantreturns(stringsymbol)
; S& X# Y% U! V- g' U0 V  I
3 I4 ]" U& h' ?9 H* e# q    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。" V" ]% r6 @; V& D
! O( N) V) u% F0 @8 l
    3.decimals
8 k/ a2 G# W6 @' c. k3 e! Y" B- y+ [( U
    functiondecimals()constantreturns(uint8decimals)/ K  ~% }& O8 e5 y

0 V( j8 `+ S: J. f2 a    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
: B$ {# `6 x- `/ b9 U. `* D) W. r
' V4 Y% `" y8 G2 r. R" S, M! g" q* D# O    4.totalSupply1 S2 j7 `  y+ W7 J' h4 t
$ S9 M7 F2 m' w9 p7 ]9 E# {* f
    functiontotalSupply()constantreturns(uint256totalSupply)1 y- v6 Z8 M2 j5 Q! A
9 k. x3 W2 Q" ^" S- x; {
    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
0 a- X; O7 }0 ~4 z! |, R# X$ y$ h- ^" T! Z$ ?! Y  d; {
    5.balanceOf
9 l+ J) j/ r0 h" W5 G# \0 r! Q
5 W' i) F+ s7 E# ^' g! Y- Q4 l    functionbalanceOf(address_owner)constantreturns(uint256balance)! F! j0 ?) _2 W
, p( S# u  v, T# ?" ?9 ~
    输入地址,可以获取该地址代币的余额。
3 g2 N* q! [2 D: F. o
. ]; ]: d/ {5 B) @) M. A1 h    6.transfer+ H4 h7 v: J! [9 k7 Y

& a. j$ d  _( l    functiontransfer(address_to,uint256_value)returns(boolsuccess)" r& i5 A8 [3 D+ i$ w

9 {* w" g5 e! O3 ~    调用transfer函数将自己的token转账给_to地址,_value为转账个数
( Q& q2 S+ B7 e* N( ?) x. f* |
& g7 ?1 G3 G6 a2 ]! M- F9 d    7.approve
' W* M- ^8 o0 R) a1 {; S6 B* O$ J! t% P- F( h; ]
    functionapprove(address_spender,uint256_value)returns(boolsuccess)
9 E! w- O' _! T' }0 A
8 t) e: f1 q- P. n  Q, b    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
/ W) O7 P7 W( j' i6 k. h, _8 ?0 o% M- _; b+ S
    8.transferFrom
3 T: U! Y( B. f
# @* M4 T1 H2 K. t6 ~    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
" e% F3 }/ q4 g8 C
  f3 t% A5 _5 ~    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
+ [( p  O* K6 t& _& M8 o9 _
1 n+ i: L9 t' w    9.allowance
' p  o* R4 V- v9 {# @0 r
1 _) D, D: p* P( q) q    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
1 T8 G4 y6 G9 o% J& z& P5 L- V* O! P$ p5 |( C! n) ?
    返回_spender还能提取token的个数。; [- u: M& o8 z! e

* \7 B7 V# }: k2 z+ }6 x/ R: D% [- D    approve、transferFrom及allowance解释:8 \2 b6 d! E; Z9 r% V
+ p6 C' u5 C+ S' e5 w: j
    账户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。# `% @& Z8 A( J& ]

/ W  p& ?! \; I2 G& b    Events0 `, g& T# m2 H3 t9 L* U
  \+ _& S7 Y! n
    1.Transfer3 q0 R/ j3 o' H( ]  K) ~# J! k" z& g$ l
: l) s1 m6 n+ A
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)2 }) J# W* X6 [2 t) L9 b" i
6 ^9 H& f0 N9 i( l) e+ A! P; m
    当成功转移token时,一定要触发Transfer事件
7 h! L; S9 V# Y4 b% @7 \4 H0 o; B# N; S' H9 b' w
    2.Approval
! H! V* \* e4 _8 S9 z2 B1 c; ]7 j7 j5 [' t' z3 f) w7 \
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
) J- q' x& ~8 T! X. R0 B% ~' \
# ~8 s* D; U! m; m0 b    当调用approval函数成功时,一定要触发Approval事件
) N( W9 x& R: O3 ]; X! C- ^0 a6 y
    总结  D2 ?$ p- E7 R2 x6 D( q
5 ]5 f; C& }! j! L2 ?* J, a
    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22