以太坊智能合约开发:实现转账退费
在以太坊智能合约开发时,可能会有以下需求:
仅接受用户转入指定价值的eth,如果用户转入eth较少,则直接返回异常,当用户转入eth较多,则将用户多转入的eth退回。
在这里我们可以借助 fallback function
,也就是后备函数进行转入金额的限定,示例如下:
代码示例
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)
:给指定地址<address>
进行转账
send
和 transfer
的区别
<address>.transfer(uint256 amount)
发送给定数量的wei给指定地址,错误时抛出异常
<address>.send(uint256 amount) returns (bool)
发送给定数量的wei给指定地址,错误时返回false