Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
84 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。0 C5 W8 D3 y5 Y# \. f5 H, x3 O

: g3 X7 n, D: r+ F' R) B) y2 `4 h    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
- x; l" r7 R( H$ \
/ S) a2 P4 c9 ~8 o4 R    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。, b4 H% m; W; C4 }: X
( o3 T1 ^, w0 z
    所以才推出了一种以太坊代币的标准:ERC20标准。
/ F* u3 I% A/ Q9 N- y/ ^0 D/ L( l6 W' ^* n
    ERC20标准涵盖了哪些内容?
4 c+ }5 `, ]0 ]  N$ u4 n- n! x7 V2 C) ~: R7 ]: E* o% ~* f
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
( p% c, N9 l! r2 w5 n: [* ]0 p: F" w' g, x' n. G
    Method
- ^& }8 ~/ ^, k2 ^  A5 f! x! Y9 ?2 o1 a
    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
$ j3 o+ t7 N% x0 U! N) h
4 b6 H5 Y( `3 N( X7 p/ V    1.name6 m# e2 p" w, g7 d
  w3 ^) d  x" t# F! U; {
    functionname()constantreturns(stringname)
  J# }0 }' A/ R# l: L
9 \' a4 Q2 W4 ]$ n6 I4 k    返回string类型的ERC20代币的名字,例如:StatusNetwork! a- n0 a% b0 e6 K3 m2 b' o. B
8 }# M# @( N3 B' Y
    2.symbol; m' t  z$ p: h' V8 M" X
0 K* f  X$ H1 C2 y' M& ~4 z
    functionsymbol()constantreturns(stringsymbol)+ U" u2 G# L9 z; V9 ~/ R: i: d: n

0 h6 i+ b/ h+ d    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。8 e0 U. _0 X+ g9 l. m
9 @. F  d8 f7 |0 N2 _9 v- N
    3.decimals
% P' L( Q% d; u1 e. v7 h
' d/ R) ]$ \& u    functiondecimals()constantreturns(uint8decimals)
& [  n' t0 l0 `1 \0 }9 K6 v7 Q' ^" z: R6 @5 h; w- B
    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。8 Z* q2 a; f1 G) m2 e* I  @) n
: V- w) F+ ^5 d& [0 C( X1 b( w
    4.totalSupply
  C+ g+ O( ]% Q9 Q) i  o/ a& d
+ R2 ~# l  r, T    functiontotalSupply()constantreturns(uint256totalSupply)
# j$ p: p3 f- ^' {( q+ T' Y9 n6 f$ |' p- ~1 s% ~  ^
    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。2 P, B4 F' v* {$ O/ X* o9 \, F, Q
- |% r2 x. L4 n6 f8 y9 u( Z
    5.balanceOf# \! W' B8 F9 w  v3 p
' I3 O3 s9 b( T) \# y
    functionbalanceOf(address_owner)constantreturns(uint256balance)
, a) L% Y$ b3 D4 R% Y/ a9 q) d+ O/ v5 w
    输入地址,可以获取该地址代币的余额。
1 x. I9 T- u$ y* x0 v5 y) Z
+ \4 c; M" v0 O8 z+ j& {( ^! ^    6.transfer. e3 ~6 v* J5 l' U& O6 G$ Q

2 ?7 s7 K) H! I7 V    functiontransfer(address_to,uint256_value)returns(boolsuccess)
. z, A) n, \1 r5 c( y3 s, i* ^$ C! Y& A# A' S4 I
    调用transfer函数将自己的token转账给_to地址,_value为转账个数/ z9 y6 W9 O8 ^8 ^4 A2 B
$ w8 d7 U5 _$ C7 ~6 f* Z
    7.approve
3 @) M. j1 E' _4 t# B/ p" J; `  h. g- K2 s+ Y: N1 [8 ]! J, v
    functionapprove(address_spender,uint256_value)returns(boolsuccess)
! H8 Z! Q$ O0 f, P5 d7 _
+ {: z% K* E! P  Z2 L+ J+ E' U    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
, E0 O  p( [, m4 e
+ m/ R3 O$ j9 z# n! \    8.transferFrom+ ]7 a% C- d/ R6 x0 ]1 ?" A- _

- s2 W3 z7 A1 _    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
6 M  g1 o4 d% Y2 y0 z
5 D# N, W' ~3 f. p    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。; U( N$ i2 I2 a* I* d9 N1 r
4 f0 z0 i9 C  _: x, o( T2 b: V  y
    9.allowance# p9 ]2 x0 ]7 x% p: u6 S
- ]9 L2 G# R& J4 v
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining), D$ b$ u: m) J0 o6 {

8 ~0 I8 Y+ G) Z$ ^) F    返回_spender还能提取token的个数。
; t% T6 [( |: P3 `' g5 s8 m9 K8 z( f; _! t) N  K5 i6 }
    approve、transferFrom及allowance解释:- W* i8 _6 Q! t# P0 {; U: A  O; q
8 \6 m) }: H2 J" f
    账户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。0 O0 a9 w* ?4 W: D& F
6 O* O7 N  F, p$ c% }
    Events5 _; G9 v+ ?; y! M5 K, o
5 m) O7 ]& t( f0 T$ v/ g
    1.Transfer
6 P* Y+ P5 Y  |- c9 E" a  D: I" D8 l- w3 I- Y! g6 ?% u" j0 [
    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
+ `! v* }. Y1 `" H5 o; _+ |5 w, [8 ~# h7 }+ P6 M$ g- f0 `$ i. o/ ~
    当成功转移token时,一定要触发Transfer事件
& ~6 k+ w  c, }6 ^( u! }! n
# B! _$ l6 n0 P. {    2.Approval) d, k5 I, N  V. n
/ O0 A3 d4 y; J& G* C3 R+ N& Y8 ~
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
8 M4 m; c- b% E( Y: h0 m" s* p( t7 J1 ~0 [9 `, i
    当调用approval函数成功时,一定要触发Approval事件
* P, u: Q8 m/ H: h, `) B0 Q" v/ v8 @; V; i5 f
    总结
9 M3 ?* G* \8 P& W# ^* E( o7 K: F( a- Z" d+ X# E& C4 o
    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22