Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

星火车品
2500 0 0
在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?
' V' b" b' ]9 N7 w* g2 Y  z* G8 D& Y' I
    有三种方式:5 H$ X; u8 @) t5 X4 `. q" D

7 L- W; _5 C: k) K9 ~# Z! e    部署合约时转账& t9 X* g* Z. n! R* o
, [3 o# [  u4 h5 |! ^" z4 G
    调用合约提供的方法
1 R8 _+ }2 o6 _  Y& o7 l! {3 l/ U  A% h1 S6 u3 u% f$ U, c
    直接向合约地址进行转账
5 V' b$ g% a0 c4 c
! C& ?2 j& m5 L4 }+ ?    但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?) n* M6 m, w: j

, W0 d' n+ g+ O! P    1、部署转账
. }# H2 q  e& v" p8 a! {  Y7 b# u
    在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。
9 }2 c2 R. E" Q2 b5 w: R) x' E6 W2 M- p
    示例:+ g2 q- N5 @) s# a2 ~: J

& I( B7 H+ [2 E# q    contractTest{+ v- m" V. u- C6 ]' m2 l7 h
  b) _4 p, {/ ?& l1 E
    //构造函数添加payable修饰符即可
% L) T( k1 C7 H: X1 j! q6 @
+ W) G# T3 r/ u1 L    functionTest()payable{
7 o  ]! c3 f, z  p7 F( f  W  P2 W: D, m- ^/ F
    //构造函数其他逻辑代码
( M1 W' ]! I0 f% b4 f- y3 A9 Q  X: q  h4 p- `+ j; C, R9 B
    }
8 B3 f3 O% K% K: i+ k
7 W* U% n( ^$ b4 W( K$ V  A4 L    }
: L1 Y* ^0 ~7 \* Q* t/ n. b3 e+ o
    2、执行合约转账
$ F6 o+ w% z! |, ~2 {$ H
/ P5 h& V1 G9 [; X' x8 M6 l! f    执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符
. F4 p) @. x; w& J$ }4 w+ i) }' r4 k2 H7 _9 C% V. }2 S) [' s* y
    示例:
4 }1 _7 K% Q4 v$ U* B9 s5 }: |! P, e& L
    contractTest{- F, \: H1 z! `  E
' g6 Z3 e; k3 A7 W
    functiongetBalance()payable{2 k$ `2 d: t, J- U3 @  S3 M
' D1 w% }+ D# ^0 {
    //其他逻辑
6 Z8 |- t$ C+ K! T* K- @1 V; s7 U2 G: }- O2 T/ P9 w+ Z- N
    }
! W2 ~$ u) [+ |/ I' A1 c" J( H9 o3 w; ?# N& u0 J) B! Z
    }
, k. \3 |# I) o: r0 {4 `$ O; b
) {8 A8 ^+ r, g2 K  I( p9 z    3、直接转账
3 U6 y; r9 e5 j9 A- U: D, y. k5 Z2 I) E& g- L
    支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符2 z: ]9 z! K; u8 W1 `

# h) A$ T  ]6 _/ c# c( j    示例:9 x9 T8 G, b% K' M, `
6 {! Z4 e" r4 X. e# r4 m
    contractTest{' W, B! ]. q( W# j

# W3 ^3 {  v, J# g1 a% n    function()payable{
& z/ z* }4 ]5 ^* P6 Z: @5 F
3 ^& x+ Z, e/ k7 M$ V& F    //其他逻辑
$ ]2 I0 H4 y# v3 g+ f
) z$ ~! {7 D7 O4 Q) M    }
. B, ~) V9 z. H; M( [  ^' r9 M9 j; t  p" [2 `, i  P
    }
7 ]1 F6 e$ X9 K! L6 v
5 s" f! E2 M4 a, j$ [    附录
/ M0 \/ `2 F1 a7 y( Q% a6 T0 l5 o! q' G/ Q, T
    函数修饰符(FunctionModifiers)
. V! x; w  d: L  q) N* j. S6 L
    内部修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

星火车品 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    12