区块链快速入门之:ERC20是什么?
落日余晖97
发表于 2022-11-29 19:08:40
129
0
0
接触过数字货币的人都应该知道,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约,我们可以在以太坊区块链浏览器中查看https://www.etherscan.io
2 A+ X# ?$ L' t r3 R' W" f
如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。+ }7 \! A8 w. M3 Z( |8 l3 F# 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。
Method1 @/ x8 v- \$ e2 I( }
在Method目录下面我们可以看到一些方法,所有的ERC20代币都是按照下面这些方法来定义的。下面我们讲解一下每个方法的作用。
1.name
2 ~% 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
9 k; h. @# o) O- L' b. q
2.symbol+ z) h( _2 \# j3 ]
! W# h9 V. U& z
functionsymbol()constantreturns(stringsymbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。6 v6 }$ U2 l! R
3.decimals
7 ]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表示。
4.totalSupply
! q$ q3 z8 G7 _7 t3 H9 i; W
functiontotalSupply()constantreturns(uint256totalSupply)+ P* j. V! N4 a! V" g
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。1 f, v# N% M$ l: W: F: E( j L. H$ e4 k
, U+ T; }( X+ I
5.balanceOf
1 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
输入地址,可以获取该地址代币的余额。
7 W& p, H' _# A m% F: l. n
6.transfer
: l3 [% X) Y# G" T |: M
functiontransfer(address_to,uint256_value)returns(boolsuccess)
调用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。可以分多次转移。
1 [6 Y0 p/ e$ x. l' d3 b
8.transferFrom6 O ?7 \4 Q1 [$ l9 k
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。
9.allowance
- 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的个数。
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
1.Transfer
eventTransfer(addressindexed_from,addressindexed_to,uint256_value)0 u; S6 q1 v3 F2 i Y2 W
当成功转移token时,一定要触发Transfer事件2 v/ B+ e+ }. W3 a3 ^) c) {( @
2.Approval
+ ?4 f( i9 J7 C% L6 r# J& C; W
eventApproval(addressindexed_owner,addressindexed_spender,uint256_value)
当调用approval函数成功时,一定要触发Approval事件
( k" W/ W+ i' w3 ]( W. n1 C
总结- w3 \* \0 M( v* u0 X
如果项目方要在以太坊上发行代币来进行融资,一定会按照这个标准来实现相应的函数。
成为第一个吐槽的人