2017-07-05 10:28:15 +00:00
|
|
|
pragma solidity ^0.4.11;
|
|
|
|
|
|
|
|
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) {
|
2018-06-12 09:05:49 +00:00
|
|
|
require(_wallet != address(0x0));
|
2017-07-05 10:28:15 +00:00
|
|
|
wallet = _wallet;
|
|
|
|
state = State.Active;
|
|
|
|
}
|
|
|
|
|
|
|
|
function deposit(address investor) onlyOwner payable {
|
|
|
|
require(state == State.Active);
|
|
|
|
deposited[investor] = deposited[investor].add(msg.value);
|
|
|
|
}
|
|
|
|
|
|
|
|
function close() onlyOwner {
|
|
|
|
require(state == State.Active);
|
|
|
|
state = State.Closed;
|
|
|
|
Closed();
|
|
|
|
wallet.transfer(this.balance);
|
|
|
|
}
|
|
|
|
|
|
|
|
function enableRefunds() onlyOwner {
|
|
|
|
require(state == State.Active);
|
|
|
|
state = State.Refunding;
|
|
|
|
RefundsEnabled();
|
|
|
|
}
|
|
|
|
|
|
|
|
function refund(address investor) {
|
|
|
|
require(state == State.Refunding);
|
|
|
|
uint256 depositedValue = deposited[investor];
|
|
|
|
deposited[investor] = 0;
|
|
|
|
investor.transfer(depositedValue);
|
|
|
|
Refunded(investor, depositedValue);
|
|
|
|
}
|
|
|
|
}
|