Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

落日余晖97
87 0 0
许多人应该都听过代码即法律(CodeIsLaw),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。7 z$ Z. q; @" _  Z! E3 F

2 G; w" I; I# }7 v  Q- f    接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io  J8 t& h+ q1 i2 f/ X1 a

/ u$ S* H0 L( ~    如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
9 b0 |$ ]+ {4 T! b) N6 w, Y6 Y
' j% j# `5 ]" e- u, L    所以才推出了一种以太坊代币的标准:ERC20标准。+ a, J9 B' N: ]& w9 f( ^9 [
1 |( ~( ^1 x" o+ g. u9 G% r
    ERC20标准涵盖了哪些内容?
! C0 n# ]( o7 [+ D
* A7 l: M4 c+ ]4 v7 O2 A. Z    我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。
0 Z8 r0 U3 S4 U8 |! W% |, d" }& T& A4 y5 k5 E, {/ A& r
    Method3 M  _7 R6 i/ u9 P) ~

! ?! k5 t' l/ E/ P# c    在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。- b0 `7 B( Y9 ^. o

7 w# [; a3 m5 a3 J* _8 j    1.name2 K2 F0 C; q+ P

! k- o4 L' P) u5 E& j8 v    functionname()constantreturns(stringname)2 N6 h, W1 [6 n! l! p
  J7 R) W" R/ C: b: c/ A! w; Y, ~
    返回string类型的ERC20代币的名字,例如:StatusNetwork
3 E& B2 k2 r8 |& @! f, u. {
/ x1 @7 `0 ~1 |& w) y    2.symbol
& B7 L" k( Q3 I
0 J6 l% s3 ?5 H4 X    functionsymbol()constantreturns(stringsymbol)
3 u! W/ P/ U! ]. h3 n, J$ I. Q
  s7 e4 L5 |2 h' N5 N    返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
; |* M/ F! c; B* a$ N$ M5 K+ ?) G, t! b) x; w5 S
    3.decimals
5 o( P% E2 }4 _8 L3 \- W6 X' \% U: W7 X& y; z# |2 D, r8 D
    functiondecimals()constantreturns(uint8decimals)
: W' Y# d, t( M4 Y# c: {7 u0 Z6 {, D0 W/ U: @
    支持几位小数点后几位。如果设置为3。也就是支持0.001表示。% j9 x/ o& _. i: H* E7 W0 s% Y
- o/ ^  i( ~' l( ~4 v- W1 ^
    4.totalSupply
9 a" n& K. I& A2 _6 F
1 s& {+ r& H! f8 q: R9 d9 J    functiontotalSupply()constantreturns(uint256totalSupply)# d8 A; C) K* U) I0 w' ]

9 V4 j& K" W2 x# t( o  [1 _    发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
) G' c' S4 _* |" V1 E& K2 |( t1 O8 L1 q* ?7 r5 }; {
    5.balanceOf
& K. p1 x8 I9 G( w$ _
' }9 W: J. \+ q9 G: q. H0 y* c    functionbalanceOf(address_owner)constantreturns(uint256balance)
# k# W* g* t  Y8 _5 Y) [
0 U* M) r4 p" o/ u  |9 h/ o8 t    输入地址,可以获取该地址代币的余额。* x2 y  Q, k( T! M/ [

" }2 B  o0 q7 T* X5 ~6 m    6.transfer1 f  I9 j4 ~  ?. ?
& I4 a, X5 Y6 F" w
    functiontransfer(address_to,uint256_value)returns(boolsuccess)2 l; {, Z/ B0 \8 K- z. C
1 X; \  E$ @6 x+ V! a. k
    调用transfer函数将自己的token转账给_to地址,_value为转账个数
6 {* i. H* d/ c5 _% I
$ ?2 j: g! H1 t. X- x    7.approve
  g& Y/ `+ ?" Z. A' m" Z# f
1 \2 u5 _( {* i" ]    functionapprove(address_spender,uint256_value)returns(boolsuccess)
( Q  T' k) B+ D  n" i2 [/ ?9 v  v# C/ N* M
    批准_spender账户从自己的账户转移_value个token。可以分多次转移。
/ v5 W3 P, Q4 k+ s* ]" T2 o/ X' k+ ?2 {& O! i: Z1 p4 B8 v6 z
    8.transferFrom6 S  S# F" @* \8 O* ]2 s9 F

# F& h& Y3 }7 n1 p    functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
, P: q- r, J$ W5 [
+ l' _6 K, X' t) C, l    与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
, v2 P1 F0 r/ P
  {. B" I. i4 x1 x    9.allowance
' M: B) C, j* Y" E7 c- G
$ U3 o" }3 T% k; `    functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
8 p9 Q/ v1 b4 B, c# ~
% w$ A( N* q$ z6 u- A    返回_spender还能提取token的个数。
+ C5 ]$ e9 \+ T* n7 {. x1 s( f, O: n; l8 J& R2 V
    approve、transferFrom及allowance解释:( Q/ f5 h: z( B" j

" O4 Y6 k- f% U- 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。
+ C; M) a: |* z! W$ ?* m% P& L
+ M5 U9 b3 {7 f" M  O; Z" a5 y    Events8 v0 U( R9 |" d1 W2 \7 z' A6 a
& d4 `9 @( a8 @7 B
    1.Transfer
! W* k! ]/ L4 W* I. r3 ^
! y9 l; }5 o, V, X+ ?. H    eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
& ?, x: v$ l/ v) {) ]( {+ d1 i9 G5 l5 N  {1 p) a' P% l
    当成功转移token时,一定要触发Transfer事件
9 A/ n" h" B5 G& u: _" N# H
$ ]0 l1 n+ d8 z7 v3 B1 d3 F1 h    2.Approval3 J! C% y* O( T1 [* ^. q' d6 u- w
" f( s  @; a0 W) I* M
    eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
. w8 y. k/ o, ?9 ]; |9 N" ?
  e+ F+ G" K, }" w; t% S2 C9 I    当调用approval函数成功时,一定要触发Approval事件& j3 ?) H0 }4 r8 U8 U( a0 [- j
. g7 i( f; R) a1 Y5 n& ?$ u
    总结
7 [$ C8 E0 W) \: L2 m. U1 C4 f6 e8 B: b
    如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

落日余晖97 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22