区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
82
0
0
7 }: @1 z0 E3 T" p
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io0 k8 d5 Y+ q/ W0 h
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
所以才推出了一种以太坊代币的标准:ERC20标准。, f% f [. |& A0 b; y
ERC20标准涵盖了哪些内容?/ D2 S2 j: M9 d7 H
" y. Q" h" f4 h; \" R
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。0 H6 C) @3 l2 I: a2 g7 c" A
Method/ c; x( ]# m: i |9 Q8 p8 d8 o
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。! q8 G! [ J0 V' W* v' h
1.name2 T" c) P- Q5 E" O; [( Q3 j
functionname()constantreturns(stringname)8 p3 s7 x- i$ B, O
k3 n- l' E+ H- K+ y8 y* @0 \
返回string类型的ERC20代币的名字,例如:StatusNetwork
2.symbol, z' o9 q5 e, C2 A( W( E
functionsymbol()constantreturns(stringsymbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
3.decimals5 T- \$ m% `. i4 D$ T9 G
1 t( m+ E% z1 ~4 b" Q' P
functiondecimals()constantreturns(uint8decimals)
* Y3 E, i' X* t+ E- b3 G" `( I
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
4.totalSupply- c. k" |- K* O3 x
0 H8 C, D% d5 i. L
functiontotalSupply()constantreturns(uint256totalSupply)
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。3 H: c2 g" V' y- j8 X
3 w4 o/ j* y- C5 b
5.balanceOf
functionbalanceOf(address_owner)constantreturns(uint256balance)9 i3 W# Y- H& X$ g
输入地址,可以获取该地址代币的余额。1 Z! [: l8 w5 o/ ~! F
6.transfer( l' S$ z) s% Z6 c1 }
8 e% b7 Y, a( q0 f, v* K8 C
functiontransfer(address_to,uint256_value)returns(boolsuccess)9 ?) Y1 Q8 @ f) s
调用transfer函数将自己的token转账给_to地址,_value为转账个数
: P* Z G# Y, B3 J! M
7.approve6 F% E1 c& M" F; N. B! L; _7 ?
! B/ u" w$ G# d0 ~! {7 T G
functionapprove(address_spender,uint256_value)returns(boolsuccess)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。. w$ h7 S: z5 |
8.transferFrom
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
9 c" _$ E3 X# y# _( q3 A
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。, {. U; K6 C, R7 y m3 ?* d
* z8 x% @5 H; Z
9.allowance
, l% n2 \; ]; m3 s7 ^
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)$ @$ d: F! N0 D7 v
返回_spender还能提取token的个数。5 B' K: i, b4 Z* o- b9 e ~
approve、transferFrom及allowance解释:
账户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。; T/ O% x9 @" {+ m$ M
]! S; e8 `- {3 J6 [
Events8 l) r* i5 N5 F9 a/ E/ v
$ M4 @8 B! S! Y: u1 q- l
1.Transfer
) X, B7 u; ?4 j+ s: @8 ^
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)
7 \) c6 [% I/ a! p5 C+ N
当成功转移token时,一定要触发Transfer事件3 N4 ~) D, Y( `+ z+ V. @6 u
2.Approval, r: d8 d b9 [( h7 M3 p: E
" w0 X w# g8 y( K/ Z
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)/ K, ^ w A5 W f+ L8 k6 d
当调用approval函数成功时,一定要触发Approval事件5 f# {9 }2 @! f
* M/ ]4 Z, x+ @% [' P4 x' x4 H+ h
总结- G7 l# y' X! Z$ m& \9 m
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人