mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
45 lines
1.3 KiB
Solidity
45 lines
1.3 KiB
Solidity
|
pragma solidity ^0.4.11;
|
||
|
|
||
|
import "./Ownable.sol";
|
||
|
|
||
|
/**
|
||
|
* @title Contracts that should not own Ether
|
||
|
* @author Remco Bloemen <remco@2π.com>
|
||
|
* @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up
|
||
|
* in the contract, it will allow the owner to reclaim this ether.
|
||
|
* @notice Ether can still be send to this contract by:
|
||
|
* calling functions labeled `payable`
|
||
|
* `selfdestruct(contract_address)`
|
||
|
* mining directly to the contract address
|
||
|
*/
|
||
|
contract HasNoEther is Ownable {
|
||
|
|
||
|
/**
|
||
|
* @dev Constructor that rejects incoming Ether
|
||
|
* @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we
|
||
|
* leave out payable, then Solidity will allow inheriting contracts to implement a payable
|
||
|
* constructor. By doing it this way we prevent a payable constructor from working. Alternatively
|
||
|
* we could use assembly to access msg.value.
|
||
|
*/
|
||
|
function HasNoEther() payable {
|
||
|
if(msg.value > 0) {
|
||
|
throw;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dev Disallows direct send by settings a default function without the `payable` flag.
|
||
|
*/
|
||
|
function() external {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dev Transfer all Ether held by the contract to the owner.
|
||
|
*/
|
||
|
function reclaimEther() external onlyOwner {
|
||
|
if(!owner.send(this.balance)) {
|
||
|
throw;
|
||
|
}
|
||
|
}
|
||
|
}
|