以太坊智能合約開發:實現轉帳退費

在以太坊智能合約開發時,可能會有如下需求:javascript

僅接受用戶轉入指訂價值的eth,若是用戶轉入eth較少,則直接返回異常,當用戶轉入eth較多,則將用戶多轉入的eth退回。java

在這裏咱們能夠藉助 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 : 函數可見性ui

payable :可支付的函數修飾符,沒有該修飾符沒法接受轉帳操做。code

msg.value :執行合約時,轉帳的eth數量,以wei爲單位。ip

msg.sender : 執行合約的地址 開發

<address>.transfer(uint256):給指定地址<address>進行轉帳部署

sendtransfer 的區別

<address>.transfer(uint256 amount)io

發送給定數量的wei給指定地址,錯誤時拋出異常function

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

發送給定數量的wei給指定地址,錯誤時返回false

相關文章
相關標籤/搜索