123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- pragma solidity ^0.4.18;
- import "../math/SafeMath.sol";
- import "../ownership/Ownable.sol";
- /**
- * @title RefundVault
- * @dev This contract is used for storing funds while a crowdsale
- * is in progress. Supports refunding the money if crowdsale fails,
- * and forwarding it if crowdsale is successful.
- */
- contract RefundVault is Ownable {
- using SafeMath for uint256;
- enum State { Active, Refunding, Closed }
- mapping (address => uint256) public deposited;
- address public wallet;
- State public state;
- event Closed();
- event RefundsEnabled();
- event Refunded(address indexed beneficiary, uint256 weiAmount);
- function RefundVault(address _wallet) public {
- require(_wallet != address(0));
- wallet = _wallet;
- state = State.Active;
- }
- function deposit(address investor) onlyOwner public payable {
- require(state == State.Active);
- deposited[investor] = deposited[investor].add(msg.value);
- }
- function close() onlyOwner public {
- require(state == State.Active);
- state = State.Closed;
- Closed();
- wallet.transfer(this.balance);
- }
- function enableRefunds() onlyOwner public {
- require(state == State.Active);
- state = State.Refunding;
- RefundsEnabled();
- }
- function refund(address investor) public {
- require(state == State.Refunding);
- uint256 depositedValue = deposited[investor];
- deposited[investor] = 0;
- investor.transfer(depositedValue);
- Refunded(investor, depositedValue);
- }
- }
|