Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

星火车品
2418 0 0
在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?
1 I: G% Q3 m. J" ]- o0 H  ?2 d3 q- ]" Q9 P0 U4 q6 ]. C0 {
    有三种方式:
% R2 v. r; y/ Z9 B' x# [, n) s# z( C- C
    部署合约时转账
/ y9 @' u, P8 a# A, Y# u: F1 E8 v  Y( ?' P6 w- [
    调用合约提供的方法+ i2 O) c" E3 F

0 t" h' ~  k4 n! g* c- x) J    直接向合约地址进行转账
2 k# n7 G5 ]( Q6 s* [0 W- @
7 [) b$ L" e" P    但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?9 {* j, X, T& f& R

" U# k) Y' W9 s/ q5 ?    1、部署转账
' |8 V" T+ C9 w# t% X7 H# h
, S& _+ }5 o( h% U& Y, s; p    在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。( i( g! h0 p% a) d9 `( f, t

8 t0 b- z7 W0 U* H    示例:
' I: ^/ q* J8 T
3 E1 o  N  l' r' h    contractTest{
3 D$ w3 \" t/ G$ a2 i
. z: [7 F& n8 B    //构造函数添加payable修饰符即可/ f: R$ v' ~, W9 I) E+ N7 l5 S  [
8 b* b# ?9 j% s; }! m& \
    functionTest()payable{9 p2 q8 e, @4 D% N' L/ s

) `) D& D2 b5 j8 X$ P9 Y7 V' c    //构造函数其他逻辑代码
* a4 F/ S0 N5 I+ h
, f3 |* g' g7 E5 ~! ?" _5 K    }* @1 V3 u" G3 N( @  X2 v; z
$ [, M6 u. |& F" c* v
    }
0 j; l9 y3 j# J, i3 Y7 a7 H5 R7 J9 h
    2、执行合约转账* ^" ^+ t7 R7 a9 S+ C

, u& [8 {( a! k' p    执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符4 |: _& o4 g) ]/ y2 a, k
- P+ w$ y2 Z' {- C0 Q
    示例:' k- Y/ ~. b% V, V
8 j& k! H5 K8 ]4 b$ X) G. p5 q
    contractTest{* U! L# n0 `4 }3 t# Q2 f

+ k2 ?" ?3 m4 D+ o    functiongetBalance()payable{2 g+ R; g. r, _3 Y' |1 Q8 Z

# |  t; Y# i, T/ j/ w: v    //其他逻辑" V$ I% o5 ^7 R5 K  C

8 q; _' `4 M5 d6 o: a    }
$ @* v* L8 O1 M
& t/ @  _( H+ ?6 z- r+ m6 @. u    }
3 X" j2 L1 V& {0 _9 y, T4 T( L5 B0 H) @9 ^+ ]
    3、直接转账
' S4 y; B( p2 A7 u; x& t, U7 Q  ~# a# z2 X. h( w3 l6 V) r
    支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符
; k, d% {1 s. H7 o
. R0 I3 x% I9 E7 e' [+ \7 N    示例:
2 q" [5 N9 h* {5 U8 U* ]) T' u, P
" ^$ v! A2 j3 M, \! W1 B& N$ N    contractTest{
  T" b" k; T  @9 E2 V+ u  \
- l7 R, q% d) c1 v$ `) }: I    function()payable{
/ c. C3 o  L' {0 S2 r3 E/ |  N  p2 @6 S9 @* T$ T  y* F
    //其他逻辑
, C$ a) u+ _7 Z8 _. A; |
( n; r" @2 G0 k& r6 M  U0 \    }* O: q3 e3 B" _. ]4 y; O0 R# u6 I

; n$ u3 E6 F7 |' Y) v; ^    }0 E9 K0 m) }% g- U/ T, w: L5 C5 C

! z. `3 \# \9 X    附录! f# H& Y) Q6 V0 C9 c
5 i/ `, t- b( j
    函数修饰符(FunctionModifiers)
0 C& _8 ^' z6 T! g6 R, `" `% a9 e4 [4 J% ~0 Q' o+ Q
    内部修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

星火车品 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    12