以太坊智能合约开发:实现转账退费

以太坊智能合约开发:实现转账退费

在以太坊智能合约开发时,可能会有以下需求:

仅接受用户转入指定价值的eth,如果用户转入eth较少,则直接返回异常,当用户转入eth较多,则将用户多转入的eth退回。

在这里我们可以借助 fallback function,也就是后备函数进行转入金额的限定,示例如下:

代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
contract Refund {

address owner = 0x0;

uint256 ticket = 1 ether; // 一个eth

// 合约构造函数
// 第一次部署合约时,会调用该方法。
// 之后执行合约不会调用。
function Refund() public payable {
// 将部署合约的地址作为合约拥有者
owner = msg.sender;
}

// 后备函数
function () public payable {
require(msg.value >= ticket);
if (msg.value > ticket) {
var refundFee = msg.value - ticket;
msg.sender.transfer(refundFee);
}
}
}
代码解释

public : 函数可见性

payable :可支付的函数修饰符,没有该修饰符无法接受转账操作。

msg.value :执行合约时,转账的eth数量,以wei为单位。

msg.sender : 执行合约的地址

<address>.transfer(uint256):给指定地址

进行转账

sendtransfer 的区别

<address>.transfer(uint256 amount)

发送给定数量的wei给指定地址,错误时抛出异常

<address>.send(uint256 amount) returns (bool)

发送给定数量的wei给指定地址,错误时返回false