Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

ERC20: 当我们转账时发生了什么?

卡哇伊嘉人
108 0 0
看一个转账函数的示例:
9 S1 m- R0 n7 b
; ?) `) m9 J8 q9 B7 z
  1.     functiontransfer(address_to,uint256_value)publicreturns(bool){+ I. W3 F2 r1 M- u/ B  ?* ]& Y* r- m
  2. & z* }4 M, H; h/ }; {
  3.     //avoidsendingtokenstothe0x0address0 c+ D# g$ w, R. O5 c- ?
  4. % M- I9 f$ {$ m7 n3 s' j# Q* {
  5.     require(_to!=address(0));- i& B. u" {- w
  6. & Z' `/ e+ N2 a$ \  V. m" ^
  7.     //makesurethesenderhasenoughtokens) M3 \: e' I6 u4 R( ?/ C# T. S
  8. + w& \" z  h4 D* G0 u# F
  9.     require(_value
复制代码

, S! E" [; C( R- r* c3 B& b& M6 C- o: i% }5 R8 n6 I
    在转账的时候只需要指定对方的地址,以及转账金额,而不需要指定转出的地址,因为可以使用smg.sender作为转出地址。: k; J/ S' z6 _2 B& L  m
6 `1 w! [- c" B
    转账的方法很简单,连数据库都不需要调用,直接更改balance[]键值对的值就好了,给msg.sender的balance扣掉转账金额,给_to的balance增加转账金额。balance[]键值对永久的保存在智能合约自己的存储空间里。/ o. }" y+ h) m! E0 M

$ F% p7 P$ j$ f0 ]* `    Thecontract’slong-termstorage,akey/valuestore.Unlikestackandmemory,whichresetaftercomputationends,storagepersistsforthelongterm.
4 Z+ G# g: i: o: j# ]" x7 S7 m& W
+ j) Q+ X# ]8 e0 G* W) i! ^    https://github.com/ethereum/wiki ... r#ethereum-accounts0 b& c) }" n& `
5 `$ y* I/ N4 W3 w3 x4 \' L  a) c% K1 H
    另外还有其他一些函数:6 n# B' q5 y* I4 G6 s

8 t# ~+ e: ~+ x    approve():让A地址可以调用B地址一定额度
5 e- V& j, `4 h* m8 }  Q- g8 f; [# R# V. b: H1 i. J$ g1 D3 h
    allownance():查看A地址可以从B地址调用的额度! ?) E% w" V* o8 n2 A
6 j- f7 k$ w# ~8 z7 V7 X
    transferFrom():使用B地址转账,和transfer()不同的是,transferFrom()需要制定转出地址& ]+ _7 d, h0 @
" Z+ d8 P$ V. Y; v1 @. {
    使用approve()函数有一个需要注意的问题,当需要更改额度,重新调用函数的时候,会有安全问题。因为区块链的操作不是实时的,而是作为等待被打包的交易,会有延迟,在更改额度的交易还没被打包之前。A地址可以将它权限范围的所有额度都用完,当更改额度的交易被打包后,A地址又可以将新的额度全部用完。
( V# g) t4 O) n9 @! Z* N* \) _, p2 b) E
    改进方案- w( ~9 b. o) W, Q# b
6 c4 [. B) X3 T. d. b# l( _) `8 O
    ERC20作为2015年提出的方案,实际使用中发现有些问题,然后也有人提出解决办法,比如ERC223和ERC777。. d# L  v7 u, E
& y: j: u2 T: t) G+ @
    但是升级ERC20标准非常困难,因为已有的ERC20标准已被广泛采纳,所有周边的生态都是使用这个标准——钱包、交易所。升级需要新建一个符合新的规范的智能合约,所有的交易所都需要更新智能合约地址。
! \# K. Y0 b% S
$ Q7 d, ~8 l0 p( J    ERC20有什么用?
  Q3 L, {: Q) g$ E5 c
' E7 A. n2 _5 Q7 @) R    它是个统一标准,便于第三方工具的开发,如果没有标准,mist,metamask这类钱包工具就很为难,它们需要为每一种币适配。但是如果都遵循同样的标准,执行同样的操作,那么钱包工具就可以明确的知道对每个用户的操作需要调用哪个智能合约函数。当大多数token都遵循ERC20标准,你不遵守,那么你的token就会无法被钱包识别。% Z) T* C) j1 B1 ]1 W  [$ D

1 {: ?! A- g8 O' k8 m
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

卡哇伊嘉人 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11