Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
64 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。6 O9 c1 h, o. S- T- J; _5 e
$ X+ R  n6 `+ E+ ]% }9 G* z1 ~
    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io1 _& b! J1 J" G/ S: |9 M/ t2 C; u. I/ s

% E! f0 ?1 W! l    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
- |) d, ~+ v( f& b9 ^2 z
6 L. c! f) H: @. T5 b    所以才推出了一种以太坊代币的标准:ERC20标准。( R- K5 I* o& U4 ^, B# j  h
7 [6 w1 s+ v, V* f; M
    ERC20标准涵盖了哪些内容?
7 R, H5 o: B, z9 U  U: X. \  C# z3 X8 m0 K% X
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。* ?! p; m5 o0 S  p. m

8 ?! H+ ?5 R/ z' c; E    Method
# ~$ F7 U: z0 M2 u, Q
, s' j% z3 E1 |1 ~    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
5 e6 i% L% u/ b) d; Z" }1 x! T0 N
; I, T9 [# k7 H( ?2 ^; C4 n    1.name
7 i" s$ {* f$ J) ^1 m# v0 {
! V! ~) n$ _9 O% j    functionname()constantreturns(stringname)
. I/ J) `0 \6 E  W3 `  @9 o2 W% X9 w* S+ ~
    返回string类型的ERC20代币的名字,例如:StatusNetwork  V+ K+ j6 ]+ F. B, }8 `
" _: r6 m$ P5 |  V
    2.symbol
- d% o7 w9 W2 W' s: V( n9 u
9 q( x0 ]# {2 h% i    functionsymbol()constantreturns(stringsymbol)
' N" R( O& S4 O+ ]- P
( V  n5 Q' t+ }    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
9 }* ^8 E) D: u9 m' V
( a' p# y- d6 z# R  G; u& _$ K  d    3.decimals
( x$ i1 J* L- I4 w7 X; m. ?6 K& H) V
    functiondecimals()constantreturns(uint8decimals)
. s7 U: ]9 r2 b+ ^6 g0 Q2 P  ^1 x% b+ s
: O) u, ]7 N! o    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
% i6 o$ g( z, ~( j& L  {5 o- c- ]3 \: z! H
    4.totalSupply3 }$ C# p1 x' Y, N9 T
  g- f* }0 k( I& |" Z
    functiontotalSupply()constantreturns(uint256totalSupply)
6 r$ h" U" ^! ~  t0 d' M* p
; ~+ g! T6 Y5 p0 l    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。0 q4 P! U$ `$ ]) L( F9 ]1 W7 M

, A/ y4 W$ q' K: x& n  {) G: d2 d- L    5.balanceOf( M; `1 N  l& ]& \( ~

* G: c% O8 I9 a' T/ L    functionbalanceOf(address_owner)constantreturns(uint256balance)
. K( u* [5 [( Y6 k7 c
+ G7 r. f% Y" s5 z, P5 r/ F    输入地址,可以获取该地址代币的余额。
" R" I& |& D) o4 Q4 y, o
" n& ]+ N8 a# L* N0 a2 a    6.transfer
7 S' Z* _+ w6 L. J+ V6 L4 x0 @, c' c) t6 r; \1 [
    functiontransfer(address_to,uint256_value)returns(boolsuccess)' K) q# C/ T) V  Y- S9 B# \' v1 w
: {5 l% S6 c( T! D
    调用transfer函数将自己的token转账给_to地址,_value为转账个数
2 l( D) i( E5 J5 {: J9 i* Q
7 u7 d: i5 I0 }  g5 N8 D    7.approve/ R, j( Z& ]' l2 j& G6 ?+ s, |, t
0 C+ o% b- \' \
    functionapprove(address_spender,uint256_value)returns(boolsuccess)2 r5 V9 ^' F  X! D3 V6 F' {/ S) R" S# b

% ~6 A* L$ I  w( e6 D( g- v4 J    批准_spender账户从自己的账户转移_value个token。可以分多次转移。* B* C# R# D8 N$ t* o2 W

1 {( L" l2 |( T9 x* J    8.transferFrom
/ P% O+ C) r; }2 ]. z2 S2 ], P5 x7 X' h* v$ s
    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
0 i# w! M0 O6 H3 J7 @; z8 p% F( ^  e1 v* K1 i
    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
: Y9 |% T5 q- s$ \3 Z! _8 l0 [; s. U0 E, k( O  I. b, X
    9.allowance
; u4 R9 c, v: Q8 l" b2 d' {$ o( q0 J4 M% i) B+ L" G9 O6 u
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
% o; w0 C$ X+ f6 K
! O9 y5 E1 o) _8 o/ T    返回_spender还能提取token的个数。9 A, i* J% T; U7 I. O9 J! p
+ _/ l6 K' Y" T) c+ \; Y4 {
    approve、transferFrom及allowance解释:
  Y" X* r+ a, _  C# H4 d
& V2 i. y$ z$ k( `# g/ p( P    账户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。9 m- n0 v' _: }9 A8 D

, Y8 [+ J! t/ k1 D0 x* J" ]3 [    Events; h$ r. h. [$ r8 Q

$ k- P  Q8 u3 S9 K  a, l# q    1.Transfer
' m' G8 U( P$ B# ?( C* W
( ~; F9 v5 L& U% [$ J' w    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)- p* R, L7 D5 R9 M

' t7 {, j0 Z  i    当成功转移token时,一定要触发Transfer事件
, b; }' ?' U- f8 B
4 v. l; k# v3 D    2.Approval
- ~5 |& w" l* q2 M+ H7 x; l9 |3 v: d' U( z0 H
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value); c/ g" Z8 ]1 ^5 t" y
; i8 a* k: D, u7 |7 J
    当调用approval函数成功时,一定要触发Approval事件4 Q- s" m6 ]8 {5 q" }5 Q
" N& t  l- f8 U  L4 m4 C, q
    总结9 j, y* j/ i8 Y

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

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22