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

in #cn7 years ago

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

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

仅接受用户转入指定价值的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>进行转账

sendtransfer 的区别

<address>.transfer(uint256 amount)

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

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

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