- contractERC20Interface{
- stringpublicconstantname="TokenName";& H: z; Q# ]0 V
- stringpublicconstantsymbol="SYM";
- uint8publicconstantdecimals=18;//18isthemostcommonnumberofdecimalplaces
- functiontotalSupply()publicconstantreturns(uint);0 O p |* r- j3 X
- functionbalanceOf(addresstokenOwner)publicconstantreturns(uintbalance);2 H7 P. g3 z( \+ |. F
- functionallowance(addresstokenOwner,addressspender)publicconstantreturns(uintremaining);
- functiontransfer(addressto,uinttokens)publicreturns(boolsuccess);4 E# p. w8 O! A; X
- functionapprove(addressspender,uinttokens)publicreturns(boolsuccess);
- functiontransferFrom(addressfrom,addressto,uinttokens)publicreturns(boolsuccess);4 J( u! o0 M0 v9 V" J' ~4 b
- eventTransfer(addressindexedfrom,addressindexedto,uinttokens);
- eventApproval(addressindexedtokenOwner,addressindexedspender,uinttokens);
- }
- pragmasolidity^0.4.16;5 x( F. ^! w! d7 M, O2 i+ O4 j
- <div> interfacetokenRecipient{functionreceiveApproval(address_from,uint256_value,address_token,bytes_extraData)public;} [$ y9 c4 Q3 \3 q6 n! \4 }% N8 ]
- contractTokenERC20{
- stringpublicname;4 n8 v5 a9 Q( `( P: r- v; e* Q& o5 l2 N
- stringpublicsymbol;: T; J7 B1 d1 G. R$ R
- uint8publicdecimals=18;//18是建议的默认值
- uint256publictotalSupply;
- mapping(address=>uint256)publicbalanceOf;//* M. _2 K+ |3 J" A/ _
- mapping(address=>mapping(address=>uint256))publicallowance;
- eventTransfer(addressindexedfrom,addressindexedto,uint256value);
- eventBurn(addressindexedfrom,uint256value);
- functionTokenERC20(uint256initialSupply,stringtokenName,stringtokenSymbol)public{
- totalSupply=initialSupply*10**uint256(decimals);4 G, d- d4 E" l
- balanceOf[msg.sender]=totalSupply;. Z7 o( {& V! S$ k2 O: Y; J6 O
- name=tokenName;
- symbol=tokenSymbol;
- }5 M, D( P& w* f$ |
- function_transfer(address_from,address_to,uint_value)internal{0 \; q6 H$ U9 q8 N+ a7 H
- require(_to!=0x0);$ X* M$ ?4 i; E3 o e; V
- require(balanceOf[_from]>=_value);+ _3 \4 ]& M) P/ p8 I0 [
- require(balanceOf[_to]+_value>balanceOf[_to]);
- uintpreviousBalances=balanceOf[_from]+balanceOf[_to];
- balanceOf[_from]-=_value;9 G+ C* c6 @6 V: F4 d2 d7 f3 c
- balanceOf[_to]+=_value;6 G+ q+ n6 z2 Q. g7 C+ I, }
- Transfer(_from,_to,_value);7 Y. G! d/ s* g d! Z8 B% u
- assert(balanceOf[_from]+balanceOf[_to]==previousBalances);
- }/ z; |1 z0 ?$ P) F6 I
- functiontransfer(address_to,uint256_value)public{
- _transfer(msg.sender,_to,_value);
- }8 w7 v3 Y1 X& d
- functiontransferFrom(address_from,address_to,uint256_value)publicreturns(boolsuccess){- E# K8 U3 v; F5 ^' D: f
- require(_value=_value);9 g b Q; Z; x- w8 z
- balanceOf[msg.sender]-=_value;
- totalSupply-=_value;" [* K6 g9 o6 }5 M2 L
- Burn(msg.sender,_value);6 R/ x, q* R4 u; V1 C# O
- returntrue;- _ V" v5 h7 s' p! v7 [4 i
- }</div>