区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
133
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。
所以才推出了一种以太坊代币的标准:ERC20标准。9 e0 \$ l" @, w6 Y. X1 Y
" W5 J3 ^/ y" G O/ @
ERC20标准涵盖了哪些内容?0 M3 \1 v1 g- s! i' E' B
我们可以在https://github.com/ethereum/EIPs ... 0-token-standard.md查看ERC20代币的标准API。6 V/ j0 i: `, b8 F) O
4 W M# R2 Y {% P% R
Method5 w- K/ p5 q( _" P& E7 v' k/ ~
7 ]( \7 A4 o6 W
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
* @4 |' S' C, x5 U, f1 T
1.name$ W/ w3 D* ~1 O5 m; y, @" ~2 V6 \/ y! H* v
functionname()constantreturns(stringname)
返回string类型的ERC20代币的名字,例如:StatusNetwork
2.symbol
/ x9 x: z$ d, O; Z2 r$ t
functionsymbol()constantreturns(stringsymbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。" V" ]% r6 @; V& D
! O( N) V) u% F0 @8 l
3.decimals
3 e! Y" B- y+ [( U
functiondecimals()constantreturns(uint8decimals)/ K ~% }& O8 e5 y
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
4.totalSupply1 S2 j7 ` y+ W7 J' h4 t
$ S9 M7 F2 m' w9 p7 ]9 E# {* f
functiontotalSupply()constantreturns(uint256totalSupply)1 y- v6 Z8 M2 j5 Q! A
9 k. x3 W2 Q" ^" S- x; {
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
- ^" T! Z$ ?! Y d; {
5.balanceOf
functionbalanceOf(address_owner)constantreturns(uint256balance)! F! j0 ?) _2 W
, p( S# u v, T# ?" ?9 ~
输入地址,可以获取该地址代币的余额。
6.transfer+ H4 h7 v: J! [9 k7 Y
functiontransfer(address_to,uint256_value)returns(boolsuccess)" r& i5 A8 [3 D+ i$ w
调用transfer函数将自己的token转账给_to地址,_value为转账个数
7.approve
6 B* O$ J! t% P- F( h; ]
functionapprove(address_spender,uint256_value)returns(boolsuccess)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
8 ?0 o% M- _; b+ S
8.transferFrom
functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess)
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
9.allowance
functionallowance(address_owner,address_spender)constantreturns(uint256remaining)
- V* O! P$ p5 |( C! n) ?
返回_spender还能提取token的个数。; [- u: M& o8 z! e
approve、transferFrom及allowance解释:8 \2 b6 d! E; Z9 r% V
+ p6 C' u5 C+ S' e5 w: j
账户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。# `% @& Z8 A( J& ]
Events0 `, g& T# m2 H3 t9 L* U
\+ _& S7 Y! n
1.Transfer3 q0 R/ j3 o' H( ] K) ~# J! k" z& g$ l
: l) s1 m6 n+ A
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)2 }) J# W* X6 [2 t) L9 b" i
6 ^9 H& f0 N9 i( l) e+ A! P; m
当成功转移token时,一定要触发Transfer事件
; B# N; S' H9 b' w
2.Approval
7 j7 j5 [' t' z3 f) w7 \
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
当调用approval函数成功时,一定要触发Approval事件
; X! C- ^0 a6 y
总结 D2 ?$ p- E7 R2 x6 D( q
5 ]5 f; C& }! j! L2 ?* J, a
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人