Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

星火车品
2520 0 0
在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?7 T- f1 }. I' E) E! D# q
5 o* ]2 n( L- l& r2 b/ e) x
    有三种方式:  p9 ]  O5 \7 i$ {+ Q8 _/ g

; ^( E& x, c* p" ^9 V* J    部署合约时转账  w+ s6 n3 F* L, K
% l( o2 T7 N/ K8 b1 r
    调用合约提供的方法
( C& q% X% P0 Y0 ^- U- L, i, e" l7 p4 Y% K( p! Y8 s5 B
    直接向合约地址进行转账$ D, t; ~4 f: y9 I
+ ~4 E; o* I: `
    但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?
. T$ @/ e+ E& x% `6 y* k: I/ w
* C) l: o- P  o. N! O    1、部署转账# G6 {% r/ {0 G% u; U

" u' d% b# I6 A3 a/ C7 A    在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。' c9 f% g0 B; ]/ y4 y( z& p
/ H$ d8 x! O" f' K
    示例:" L% `6 {* x" d3 Y
+ P3 V5 p6 i" h8 V
    contractTest{
; A5 {  H! U8 P$ g9 b% p* l9 b- I% e( p7 H$ N
    //构造函数添加payable修饰符即可3 x7 S% p/ Y% |7 l
: o! q! a: `8 K
    functionTest()payable{$ p  V4 d3 T$ Q
, v* c8 d5 a+ r$ A. R' e
    //构造函数其他逻辑代码6 p' O0 Z7 ^) j- t

0 o& T$ t' {3 l- K    }0 B- ?% ^+ K! w1 _; [

! {0 e: n* t1 H8 A. d- h+ d. X$ C    }! d3 Q2 k. x0 j6 c  x$ U1 d1 d$ H

+ {' R7 W# ], _$ [1 L4 u    2、执行合约转账
, T2 b1 G1 K" f' w% O( ~
, ?, z& @, X) l  `( K3 u8 @    执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符( \5 v8 u+ J& q' a
% Y8 I$ P2 W9 c$ r; t
    示例:
2 I* m: E/ _. o+ w
) x: s$ U. Y2 a1 U3 g# w    contractTest{
2 Q5 {; O1 C$ j' l
* V" L8 \8 t' A  S4 I8 n    functiongetBalance()payable{
' p4 q$ g+ D& F4 T
6 {2 J0 s6 b. d4 I    //其他逻辑
% R( U7 N: \, r
2 I: g8 h7 g# Z    }8 ?% e0 \- O! q
7 G3 ?; h2 _3 l
    }
7 ~. {7 t, ]3 P+ j4 C9 v7 a( y2 O$ s1 g& Z
    3、直接转账+ _( ~9 V$ P5 n
( ]* G9 d) Y' }5 V4 L2 p
    支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符
' F4 q; p  T9 @2 A' X8 z  H5 m; i# |7 q' ?, b, N9 J2 L- w
    示例:
+ w* ~2 c7 n* s$ K9 A) p! Z1 n& i7 g; m. b
    contractTest{
7 L0 L$ K, A; I% y3 F
- M3 G/ L7 X: u6 o' r4 [    function()payable{; F! |9 A! C. q& u6 p/ y
* }! U7 I+ t+ D
    //其他逻辑1 U8 L" E  I& ^/ p
+ I  F! f! u+ q2 _1 t, m  f( F
    }( ^" Y$ i# e8 V( x9 J

1 d: g: |% j3 A, ]    }3 n' b; N2 n$ J3 M
5 [( F7 `9 _0 V, G! S* L
    附录# f' q0 Z1 z" v& c) @* ?

8 W1 V1 D6 U/ d/ K6 ]# B    函数修饰符(FunctionModifiers)
* z7 i9 u3 X/ X4 C( w/ L' n7 ?7 J. Y- u  Z
    内部修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

星火车品 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    12