在以太坊智能合約開發時,可能會有如下需求: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>進行轉帳部署
send
和 transfer
的區別<address>.transfer(uint256 amount)
io
發送給定數量的wei給指定地址,錯誤時拋出異常function
<address>.send(uint256 amount) returns (bool)
發送給定數量的wei給指定地址,錯誤時返回false