Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
129 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。
5 D5 p) }3 F, [; z, Y0 ^( N
: l1 b' j! m- p8 U. [/ k9 r    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
* U, P' @+ m- N* K) W1 h& d5 q3 i2 A+ X# ?$ L' t  r3 R' W" f
    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。+ }7 \! A8 w. M3 Z( |8 l3 F# t

0 X+ N1 [+ d4 Z) A* `) t    所以才推出了一种以太坊代币的标准:ERC20标准。5 m! ~9 {- N5 I" a3 {4 ~; I
, X, Q% X0 }0 o7 h( N( q
    ERC20标准涵盖了哪些内容?! ]/ [9 b5 w# v/ g: K9 Y
$ x. g8 m5 K8 X, X
    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
0 Q8 i/ Z' o, w  j9 i, ?. B
! Z0 t! F' f# P) [% h& y& m; [    Method1 @/ x8 v- \$ e2 I( }

9 k& t8 t, m. f  B    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
6 d' \8 I. s6 d3 u" d
9 _3 d  U% v" p4 E( O. @6 K    1.name
4 y/ R( H9 e0 v2 ~% p( W2 I; v* h& _* K1 g& S
    functionname()constantreturns(stringname). U5 ^9 G; q% n& r1 o5 a# K* V
$ i, k: B" I2 h6 Q# ?: q, \9 S
    返回string类型的ERC20代币的名字,例如:StatusNetwork
" @5 ^; }8 s' M) u3 T$ [9 k; h. @# o) O- L' b. q
    2.symbol+ z) h( _2 \# j3 ]
! W# h9 V. U& z
    functionsymbol()constantreturns(stringsymbol)
3 r7 z+ f  r7 \. E9 O6 D  Q
/ X0 R) e) d1 N2 M$ x, @    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。6 v6 }$ U2 l! R

0 O! L* z3 F/ |7 |4 k0 |    3.decimals
  R/ j: U+ ?4 M7 D( R! E) g' Q' @& G7 ]4 G8 F, S+ w* T
    functiondecimals()constantreturns(uint8decimals)/ l. @" A2 v6 j# ^: Z0 H
/ \* z6 r! w4 t2 k8 ~! a' a9 O
    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
2 M) }& Y7 b! K  L, r* p
/ _  I. {- n, r% s- i    4.totalSupply
5 I7 o5 {5 X2 L! q$ q3 z8 G7 _7 t3 H9 i; W
    functiontotalSupply()constantreturns(uint256totalSupply)+ P* j. V! N4 a! V" g

; i% w  j! X0 }    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。1 f, v# N% M$ l: W: F: E( j  L. H$ e4 k
, U+ T; }( X+ I
    5.balanceOf
: f0 B9 E8 }1 M1 j; U& a- X/ v: Z$ d" M; J
    functionbalanceOf(address_owner)constantreturns(uint256balance)$ @# J0 G' A1 A; X9 d8 S6 a
( u+ l# u# `$ s. |) T8 K) Z
    输入地址,可以获取该地址代币的余额。
0 T7 D) N6 |! Q4 Z+ h7 W& p, H' _# A  m% F: l. n
    6.transfer
8 R8 L# O3 S# S* i) a3 L: l3 [% X) Y# G" T  |: M
    functiontransfer(address_to,uint256_value)returns(boolsuccess)
" f. \9 R; r4 v2 q
& v/ L7 _% @; D, }* B$ I    调用transfer函数将自己的token转账给_to地址,_value为转账个数! x* k9 H! L" C
5 D: Q+ a# E; l5 Y
    7.approve( r& ^! F% w) @* G8 A* Q1 I
3 m# [. r7 L4 O0 w1 E8 V9 y
    functionapprove(address_spender,uint256_value)returns(boolsuccess). L0 s& e1 @5 @) P# ^, Z
8 D6 {6 Y0 E+ c6 s: F8 K! V
    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
' P. q) i6 q. O' h0 l# N1 [6 Y0 p/ e$ x. l' d3 b
    8.transferFrom6 O  ?7 \4 Q1 [$ l9 k

' ?. ^8 ^$ M/ b. B# X    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)+ J9 |- J7 V1 h# J0 U" F8 z
( {1 G- a3 t, C# e+ [
    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
! P" \" b5 _( b
1 ]" J/ l: Z, Z. E# i6 d8 K; A    9.allowance
- b1 q  f- g# k0 C$ H- Q4 L9 \2 n, B( D/ d
    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)3 G  F: d9 k3 E, Q; l
" d  h  M8 \8 m% u0 M5 P$ `
    返回_spender还能提取token的个数。
7 I4 B0 K8 w( F  Y- c  \
- C' d2 K$ m1 M, o- @4 e    approve、transferFrom及allowance解释:9 X! m9 c% C* S( l
5 s/ B; h9 u) d- s( ]0 m
    账户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。" t6 C% U  h" b0 n7 ]: Q
* e6 I3 T3 e3 I% F& S; X" z
    Events
% K# o2 z3 l7 x% y# b! V/ J
* g/ u0 J" D/ U- J    1.Transfer
8 A9 E1 l1 z& A) c
$ K# c. x  a* G' L0 g0 H    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)0 u; S6 q1 v3 F2 i  Y2 W

, J: s! n# v) a9 m; s  W    当成功转移token时,一定要触发Transfer事件2 v/ B+ e+ }. W3 a3 ^) c) {( @

- }% F$ a, s9 F: G% d    2.Approval
2 w% c. ~4 B# S7 B: q+ ?4 f( i9 J7 C% L6 r# J& C; W
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
2 h; a3 \( ^/ a, g7 `/ i8 C
! t$ c+ O0 Q+ ^6 Z0 x8 D    当调用approval函数成功时,一定要触发Approval事件
* [) ?" g/ e8 p. J- p( k" W/ W+ i' w3 ]( W. n1 C
    总结- w3 \* \0 M( v* u0 X

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

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22