以太坊智能合约开发:让合约接受转账
星火车品
发表于 2022-11-21 23:46:48
2507
0
0
有三种方式:
- {: V& a0 |* ]5 Q
部署合约时转账
3 c c( [' D0 D% ^* }
调用合约提供的方法
直接向合约地址进行转账
% P! P9 E" v2 X2 A: M1 y, V( V, ]9 {/ u
但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?
: Y+ k, G9 h4 L" W
1、部署转账
在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。
/ r8 [7 b" q. e5 ~3 `! A5 N! L
示例:- C# m9 R( s& U" e! x% W; R6 q6 t
contractTest{
//构造函数添加payable修饰符即可
functionTest()payable{
//构造函数其他逻辑代码, r* ]9 L5 R: D! F4 N4 u
}: v% d9 Q5 C1 a4 Q: v
! a+ H, k! x! [; B$ O! Y2 F2 l8 k+ w
}
0 r# @ U6 D' b
2、执行合约转账
0 ]; c) u5 y9 W( k% z# K
执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符
" o4 s+ A# N, Y( k ?
示例:
contractTest{* Z2 f1 k8 c& l4 t
+ R+ u5 u: X9 _3 l9 S+ l7 b
functiongetBalance()payable{
. f2 W& _5 t4 n7 C) v* i6 m3 P
//其他逻辑
; 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、直接转账
' A1 M2 `4 d% _ i" x( \+ V9 h
支持直接转账,需要借助后备函数(fallbackfunction),只需要为后备函数添加payable修饰符( r# p) _2 ]- l7 s( P
示例:$ v5 ^, H! w2 J. s/ W* ` a3 h
% R7 j D/ B2 ~
contractTest{
9 {4 d S1 J8 a4 b9 M& F% j
function()payable{
//其他逻辑) q8 y1 a- i' m9 ?
}# b" i6 S- r" H, h
}
附录
函数修饰符(FunctionModifiers)
内部修饰符
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
成为第一个吐槽的人