Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

以太坊智能合约开发:让合约接受转账

星火车品
2512 0 0
在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?: Q+ g8 f( s' k2 Y% P4 V
/ o4 s% f# r" n2 n3 N, }; m
    有三种方式:
0 a# q- C& M9 d  ?
- m* I& Q5 q" M& D    部署合约时转账
9 E* n  }2 [( y+ c) G" n$ n- R* \4 ^' o5 n9 q
    调用合约提供的方法
: t  H, o4 {# D) a3 u, H+ C' V  s" `" ^( G1 i7 N( W3 b
    直接向合约地址进行转账
+ S9 `$ {4 r4 \+ o
/ t! }+ J( l7 U0 Z* H  i: V  _    但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?
7 e  m* i5 C" Y; o( z
, d6 V" e: O0 ]* r    1、部署转账
' u' ], i* L. v/ _3 R" T
) \+ y9 ~8 ~8 Q1 w* F    在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。
6 H$ [' U/ f9 Y4 V% e& C6 s: m! r2 ^3 |
    示例:& l! ^: o) R( }

  }+ W4 v2 C- v    contractTest{& O- K. I5 F4 o7 V5 n
! J* u3 g9 g+ _
    //构造函数添加payable修饰符即可3 |4 Z$ u+ }. \% g

) U/ u, D. I; N* ]1 _    functionTest()payable{# i$ C. Y5 Q, }0 ?

0 Y; ]6 u0 k7 o    //构造函数其他逻辑代码
! J! m9 n; j% Q8 @9 i% y& W2 a" `  p% ~
    }
. i" E* O$ I; I5 f, S9 @
% z% P. i+ q5 t4 g6 g    }" U+ w4 W8 d6 H

# k+ E  {9 l4 o; k4 o    2、执行合约转账/ |! t2 q8 c% a* F: J$ H( U5 y
" Z. I& p8 b8 r$ \5 g4 L6 d
    执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符3 p( `- P7 r. z  r8 u# B7 s2 |
+ j6 F$ z- G1 z( W2 _$ X
    示例:
2 h7 ~8 L, B8 I9 m9 p( z! H1 b0 d
+ `( k5 p. J" ^; U* z5 B$ Z9 I    contractTest{3 ]( A/ e( v5 N! _8 \3 S1 t& V9 i  k

: o$ Y& k2 P/ w: K    functiongetBalance()payable{/ e6 O' ?( L6 D) _! ^) A
9 |: a8 u9 _4 A# w) {
    //其他逻辑* j2 |+ X9 @1 N0 j

) b# b0 m0 Z  M  h2 y3 R& }; j+ I    }& ]- s+ y: ]8 d0 p
0 R# [6 W. ?# y2 p' K- I
    }
! \; x3 t. L' f5 t% q6 \7 N- X# z; l; M- z
    3、直接转账
# l; K% h# u: Q+ R7 }: G; j* X3 G) j* p3 S9 `
    支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符! Q' j/ p& X0 R4 l

8 }# y5 \, A. y+ f    示例:  T" Z& i' t9 E( q) `0 D2 w, o" V
* S6 N* K" B& y. f5 ^9 i
    contractTest{
/ k/ Y* t' \% V& {8 U7 `7 ?2 z5 d4 j& S' V
    function()payable{+ p$ e+ W& o, O. ?
6 l' `* K+ `. d. b2 j
    //其他逻辑
, X% J, M% X: ^
$ [( x4 [2 z$ i* n1 e/ ]    }9 L7 ]( s2 s+ @# T2 X
6 [! o. d2 M3 I
    }* Z6 L3 _& S* k+ @

2 X& K3 P& P8 m    附录
* p7 u) ]: o$ _# U2 E8 v2 x
- T$ n$ p3 z+ P$ i4 L    函数修饰符(FunctionModifiers)
. M( e/ i6 }  c6 C
3 m4 X# ?& Q$ S% U3 D3 ?# w    内部修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

星火车品 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    12