Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

星火车品
2507 0 0
在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?
7 a" d1 I( e- S) `: N
6 @& m' P2 V# a# ^! g/ M0 M5 ?* T    有三种方式:
# p4 G" j( x) G( \- P: n- {: V& a0 |* ]5 Q
    部署合约时转账
0 r0 |( ^4 X# \) a3 c  c( [' D0 D% ^* }
    调用合约提供的方法
  L1 r5 Y( a# r9 o
. R% m1 }8 v: K& p    直接向合约地址进行转账
7 d  q/ l) h' h3 r0 V/ N) j% P! P9 E" v2 X2 A: M1 y, V( V, ]9 {/ u
    但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?
! S& b7 O1 b6 U6 {  G1 ^: Y+ k, G9 h4 L" W
    1、部署转账
* e: \* n: X  N' q
1 `  w" H* Y/ Q6 s    在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。
$ J2 O4 m& B/ |, U/ |+ ]' \/ r8 [7 b" q. e5 ~3 `! A5 N! L
    示例:- C# m9 R( s& U" e! x% W; R6 q6 t

- M0 f7 D+ a4 }4 U) _# y    contractTest{
  d1 @, y, D* G
3 I: I% W1 ^) V    //构造函数添加payable修饰符即可
; Y. u+ u: |( Z) x0 m6 ~
) |6 i* I, y0 S6 |2 x    functionTest()payable{
) X2 @* L  A- M
& ~% q6 q7 h( N9 o6 n+ s+ k0 ?    //构造函数其他逻辑代码, r* ]9 L5 R: D! F4 N4 u

0 e( p. l) w. U" F    }: v% d9 Q5 C1 a4 Q: v
! a+ H, k! x! [; B$ O! Y2 F2 l8 k+ w
    }
1 ^: I% l* Q2 l) a) @0 r# @  U6 D' b
    2、执行合约转账
9 m/ c5 Y& u* c, h+ `% Z0 ]; c) u5 y9 W( k% z# K
    执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符
1 g7 @8 L. p1 c0 D0 V  V5 W" o4 s+ A# N, Y( k  ?
    示例:
+ Q; r/ Y, {( `' o! C
8 g# T2 L& X1 O$ Z; G" C    contractTest{* Z2 f1 k8 c& l4 t
+ R+ u5 u: X9 _3 l9 S+ l7 b
    functiongetBalance()payable{
( P+ b5 s' q" m' J) D. f2 W& _5 t4 n7 C) v* i6 m3 P
    //其他逻辑
$ ~/ Y; s- o* T8 ]; N0 {" F( Q3 C$ r8 D& _6 N
    }6 p! n+ R. H7 R! `- K
- A; k, }1 ?; V" p7 Y5 K' z6 N
    }  V; ?% Y2 [7 P7 i" X
0 M, f/ P0 f* O6 ]- f, \
    3、直接转账
9 Z2 m) ~3 L9 U) |5 X: z' A1 M2 `4 d% _  i" x( \+ V9 h
    支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符( r# p) _2 ]- l7 s( P

+ E: q8 I* D4 u  @    示例:$ v5 ^, H! w2 J. s/ W* `  a3 h
% R7 j  D/ B2 ~
    contractTest{
# r* h: V+ ?2 q* {6 f9 {4 d  S1 J8 a4 b9 M& F% j
    function()payable{
( d8 q! P' ?9 b
2 j5 A/ Y4 m. P* y$ y9 c    //其他逻辑) q8 y1 a- i' m9 ?

2 r4 G* G* I7 `9 {# H# l    }# b" i6 S- r" H, h

3 c/ _- I6 a3 I5 m/ K# U" V7 F4 _4 V    }
: _; G7 N' u2 [. N6 n
2 j' u& `# e2 ?9 S3 r    附录
" W9 W* x# X* ?) V  B
0 ]& r9 h3 Y% b' b, z% w! V1 [: e3 G& Q    函数修饰符(FunctionModifiers)
  b2 D1 X# \" M0 b
4 G: A! r6 m& F/ Q* J    内部修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

星火车品 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    12