Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

星火车品
2376 0 0
在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?0 N: W) t; b& y4 h" \' N

4 _/ M3 a, M6 S( `9 O9 f& c    有三种方式:$ ?$ |# c+ }$ ]

8 l1 H9 K9 x; \0 r/ w/ z    部署合约时转账
% C- ]' k5 G4 J. C
  T* p- F7 Y$ c: c- Z* w* y* P    调用合约提供的方法' z0 {4 b" w; s3 v* |, m

  b* q/ D3 o7 B( W- S5 c    直接向合约地址进行转账
' \: K$ [: S! S2 m7 k) N& X
* Q5 R% A1 G! {    但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?- g3 z6 ^2 l, I2 q% p

5 f, c' S# d7 j! z    1、部署转账( I- z' ?! P; v
9 I5 s& g9 `. W" f- H
    在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。
' X) Z7 a- h- z9 l4 v6 v& `+ R$ V9 G8 V. p2 X/ q
    示例:
' F# `- t1 |2 O* b# a5 U1 O" I2 M7 c/ X
    contractTest{2 N( \7 A4 C/ P( U, I
% e2 b% f! E; H& ~' d3 }+ D
    //构造函数添加payable修饰符即可3 g" K6 H7 t; e+ k. K" u, P% o8 f

: }3 J( G+ {$ \6 w0 z" P+ U4 ]0 q. j. i    functionTest()payable{
, y2 A2 t% a4 C3 L8 O2 B
) p: K- y- r! Q! t0 q5 Y) B" o; @    //构造函数其他逻辑代码
" O% ]( `9 R* U4 D& v
, L& V0 _0 d% D( U2 ]2 V* ^    }' }0 i0 X. ?  B/ e. z2 t
3 x8 V3 k- B' J- l: K" V+ O
    }
" }, H! f; s: J$ b# U  K/ N
2 o. U1 i! ?& _0 k" ~    2、执行合约转账
& Y- C" E# s0 l# m
# S& C5 d0 x( f1 r! X8 |3 V    执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符  @' ^9 [5 n+ O5 W* F' w
& g, s2 s, F# z. O6 v
    示例:
+ x8 L( X* f& b" o+ k- i, B4 n0 {. N$ j
    contractTest{4 p) C- o; X( O( N2 H) h% h4 e( c8 g
) V4 G3 }2 `* }3 w4 j0 Y% V+ y
    functiongetBalance()payable{3 r) R& o4 P6 \3 A$ s. t/ a
: i+ M+ b& }- f3 L0 x, m7 @
    //其他逻辑
8 \7 b; I0 O0 B9 u3 I0 r; u( e& f, z2 ^; d
    }. F4 a' L1 g/ p/ Q; O& f! t
& [6 f. `1 h3 D8 G1 l% R
    }. `* I! e; l9 A9 _

. A$ ^' X+ k( E1 u7 h1 B9 @( s. ?    3、直接转账
" R6 f) ]8 O( N. Y* Z0 ~3 o. e  l. x; c4 z" ]) r- d& k5 S
    支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符) O0 a8 m; N4 w: K1 R# H" l

# ]. g/ V8 t* i9 J% T) X" R    示例:- E/ d- u8 S. q. i

' K; M  ~( m9 E- P6 j    contractTest{' ~) r: c( Q/ }. i6 [) _  K
' S8 T9 R: M$ ?9 _! g; I
    function()payable{5 [6 r* e/ m( K0 ^# C- a

3 t, O: D: O: b, P$ X    //其他逻辑% T6 Y, m0 ]0 B4 k6 G4 Z

: p. p) G% N2 m' T: F    }
4 q2 ?% j* c$ k6 o  C- P
' p. u* P' a1 A$ a1 [    }) e$ r% @! s: z/ ~. K. Q
/ M+ [0 s! m7 A
    附录
, V9 d4 ?2 l* }8 u: A# D% m7 i8 k6 F/ U& ^. I
    函数修饰符(FunctionModifiers)
; f8 d  S* x6 ^, q+ s: S
/ X% b) w3 ]% H0 _5 ?    内部修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

星火车品 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    12