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

in cn •  7 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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!