Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
130 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
! _: ~" H+ P6 H  }7 }8 m
4 E6 ?5 B) y9 R" j( V* X* R- f    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
/ F" p2 ^& i4 O) y3 I. p! p. n+ ~0 s4 B% l* [
    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。! {: w/ E! F6 q7 l- i7 n9 j

0 |2 e/ K0 O9 [) C    所以才推出了一种以太坊代币的标准:ERC20标准。0 P; g+ n% e; x6 w; H# e0 [; D
2 E' x" u3 z/ l6 v
    ERC20标准涵盖了哪些内容?7 A- x7 N7 p8 I" l0 y/ z6 s" z: L

- V( O$ k9 O) C7 M    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。* }9 @' P7 ~  j+ p; P' Y

1 t3 ^4 O. g3 _2 y    Method
1 @$ S. K- w& P" x+ ^9 Q5 ?* A1 B0 m3 Z2 E) R0 m
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。1 D3 Q$ u0 x8 a* a8 F7 s8 p* s, f
! c8 c3 ?$ [  C: _; f2 @
    1.name
# a" l+ @' G" L" b7 P( b
  z4 p) e' J: M8 E* [    functionname()constantreturns(stringname)
" A; Q4 M1 }2 I, q1 }; s5 f2 e9 [  s$ I& q
    返回string类型的ERC20代币的名字,例如:StatusNetwork! x* ~% ~' L! C3 j

6 [4 W$ \4 x$ T2 N% p7 Y    2.symbol
) ]. Q9 S* ~- s% @# e1 h, n% O+ C" x7 \$ F' @. Y
    functionsymbol()constantreturns(stringsymbol)
3 s  h- l$ B$ M1 T7 t% o- o  C3 H# C. T: N6 ^
    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。5 p7 D4 u, o, T( ~$ |# N5 p
7 M9 p; T; h: D4 q' v4 B; D& x
    3.decimals
2 ^( z2 p- W8 k+ R6 Y' K9 b$ c# w3 [1 w) p
    functiondecimals()constantreturns(uint8decimals)) {- W7 _6 T8 i4 H) n3 t
( n4 U, Z! u5 b' W
    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。$ W$ \9 q" f: b4 {; @2 m
' @; ~+ X, B8 \: P& k
    4.totalSupply
) b7 q. H  ?" p! G) W' _2 ~* S- P* h% c, ]( b7 `3 M- d
    functiontotalSupply()constantreturns(uint256totalSupply). T7 o5 M5 ~8 @3 L1 X9 y- f

& E) _* I, _, d+ m" }- a; v+ _3 z/ r6 a    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。7 p! o1 v2 b( d( ?1 j; i

5 v: F; q: O# @' \    5.balanceOf
- m8 d7 Q8 n. H# I* A' d1 D0 b
/ k6 }' Q, W: h    functionbalanceOf(address_owner)constantreturns(uint256balance), h6 y9 K) \, N2 h5 H1 S
6 m  W! ]% \' U, R
    输入地址,可以获取该地址代币的余额。
: s$ n% Z( d+ p# X6 A9 P, V: @0 ?- q6 W6 q$ Z5 t
    6.transfer
: \8 V" e- O9 k: s8 C7 g! A8 P  u7 `+ x% \% f* x4 g1 |* {
    functiontransfer(address_to,uint256_value)returns(boolsuccess)  V9 g2 B; D" D- J
- l$ }2 [* i* D5 w( B. q
    调用transfer函数将自己的token转账给_to地址,_value为转账个数2 P1 {, r( X. x3 {

; r' v$ c" J: a" l! b    7.approve
$ d: h9 Y7 S4 I% f$ S
, {. t2 n7 q' r7 P    functionapprove(address_spender,uint256_value)returns(boolsuccess)
! z; v1 ?9 _7 V! h
9 Y# o9 f2 h! p# `1 l6 \0 B; ]1 p    批准_spender账户从自己的账户转移_value个token。可以分多次转移。) O5 I6 z. t9 X$ S8 i  h2 c

: v+ `& S7 W0 I; F  _4 K- N  a    8.transferFrom
0 K9 T; E3 q, @7 g" r6 k# J8 n) j
6 O# W) _. F3 R  @! l    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
( p: U0 O7 j- P* c8 h- F
' b0 T* g; v4 ]+ ]0 M    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
" G. q% \# u2 r
1 n. H1 t* ]( _) H3 u' g* D    9.allowance  C, L; X5 W8 _, Z+ y2 a; q5 P

2 h9 {2 g2 [& @5 S. q+ u    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
* i! D4 y2 g! P" `6 m7 D- m" v* p1 N: }: J7 v2 l
    返回_spender还能提取token的个数。
) |' ]) v) y% F) r
8 b( q/ Z* G$ ?) |- N: G# F6 i% s    approve、transferFrom及allowance解释:  Z4 I) s  C# H  T1 N( G1 A
* Y1 f- \3 _. T5 A( B6 Z( r  l/ 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。: Q3 b- ?4 h- h, F( g1 f. f- [* v

+ s: @1 I! T( g( Y& k% o: D1 G& x. a    Events: {0 w# Z6 z5 `4 N5 @$ Z6 {

8 [2 P- y% Q/ W$ ~2 X$ T* N; ~    1.Transfer! e! i* S! ~, c
+ h6 _3 H9 w- M' X0 E1 g/ H
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
$ \6 i& N2 F! q0 h
/ N" L2 z+ Q$ V1 ]  F3 ?& u0 u    当成功转移token时,一定要触发Transfer事件! K3 o0 B, z' k# i) _% v
3 w+ G+ R+ _: U; {4 w4 w2 S1 K" f5 a( ~
    2.Approval
5 h. n. p* K& \. L0 I2 `: K9 L2 H3 j' J1 K
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
8 ~- H) S# d' |7 A6 p2 m" J* _# X5 Q; w, o- w
    当调用approval函数成功时,一定要触发Approval事件
) N* i" n( K" V. v2 Y1 N7 G3 L6 w3 k3 x& O; ?
    总结: t: ]5 K) s) Q$ i) I

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

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22