* Basic idea * Fine tuning idea * Add comments / tidy up Crowdsale base class * fixed TimedCrowdsale constructor * added simple crowdsale test * added HODL directory under home to store unused contracts. ugly hack to solve Crowdsale selection in tests, better way? * Capped no longer inherits from Timed, added capReached() method (replacing hasEnded()) * added SafeMath in TimedCrowdsale for safety, CHECK whether it is inherited from Crowdsale * several fixes related to separating Capped from Timed. functions renamed, mocks changed. Capped tests passing * added TimedCrowdsaleImpl.sol, TimedCrowdsale tests, passed * added Whitelisted implementation and test, passed. * removed unnecessary super constructor call in WhitelistedCrowdsale, removed unused dependencies in tests * renamed UserCappedCrowdsale to IndividuallyCappedCrowdsale, implemented IndividuallyCappedCrowdsaleImpl.sol and corresponding tests, passed. * homogeneized use of using SafeMath for uint256 across validation crowdsales. checked that it IS indeed inherited, but leaving it there as per Frans suggestion. * adding questions.md where I track questions, bugs and progress * modified VariablePriceCrowdsale, added Impl. * finished VariablePrice, fixed sign, added test, passing. * changed VariablePrice to IncreasingPrice, added corresponding require() * MintedCrowdsale done, mock implemented, test passing * PremintedCrowdsale done, mocks, tests passing * checked FinalizableCrowdsale * PostDeliveryCrowdsale done, mock, tests passing. * RefundableCrowdsale done. Detached Vault. modified mock and test, passing * renamed crowdsale-refactor to crowdsale in contracts and test * deleted HODL old contracts * polished variable names in tests * fixed typos and removed comments in tests * Renamed 'crowdsale-refactor' to 'crowdsale' in all imports * Fix minor param naming issues in Crowdsale functions and added documentation to Crowdsale.sol * Added documentation to Crowdsale extensions * removed residual comments and progress tracking files * added docs for validation crowdsales * Made user promises in PostDeliveryCrowdsale public so that users can query their promised token balance. * added docs for distribution crowdsales * renamed PremintedCrowdsale to AllowanceCrowdsale * added allowance check function and corresponding test. fixed filename in AllowanceCrowdsale mock. * spilt Crowdsale _postValidatePurchase in _postValidatePurchase and _updatePurchasingState. changed IndividuallyCappedCrowdsale accordingly. * polished tests for linter, salve Travis * polished IncreasingPriceCrowdsale.sol for linter. * renamed and polished for linter WhitelistedCrowdsale test. * fixed indentation in IncreasingPriceCrowdsaleImpl.sol for linter * fixed ignoring token.mint return value in MintedCrowdsale.sol * expanded docs throughout, fixed minor issues * extended test coverage for IndividuallyCappedCrowdsale * Extended WhitelistedCrwodsale test coverage * roll back decoupling of RefundVault in RefundableCrowdsale * moved cap exceedance checks in Capped and IndividuallyCapped crowdsales to _preValidatePurchase to save gas * revert name change, IndividuallyCapped to UserCapped * extended docs. * added crowd whitelisting with tests * added group capping, plus tests * added modifiers in TimedCrowdsale and WhitelistedCrowdsale * polished tests for linter * moved check of whitelisted to modifier, mainly for testing coverage * fixed minor ordering/polishingafter review * modified TimedCrowdsale modifier/constructor ordering * unchanged truffle-config.js * changed indentation of visibility modifier in mocks * changed naming of modifier and function to use Open/Closed for TimedCrowdsale * changed ordering of constructor calls in SampleCrowdsale * changed startTime and endTime to openingTime and closingTime throughout * fixed exceeding line lenght for linter * renamed _emitTokens to _deliverTokens * renamed addCrowdToWhitelist to addManyToWhitelist * renamed UserCappedCrowdsale to IndividuallyCappedCrowdsale
67 lines
1.6 KiB
Solidity
67 lines
1.6 KiB
Solidity
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);
|
|
|
|
/**
|
|
* @param _wallet Vault address
|
|
*/
|
|
function RefundVault(address _wallet) public {
|
|
require(_wallet != address(0));
|
|
wallet = _wallet;
|
|
state = State.Active;
|
|
}
|
|
|
|
/**
|
|
* @param investor Investor address
|
|
*/
|
|
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();
|
|
}
|
|
|
|
/**
|
|
* @param investor Investor address
|
|
*/
|
|
function refund(address investor) public {
|
|
require(state == State.Refunding);
|
|
uint256 depositedValue = deposited[investor];
|
|
deposited[investor] = 0;
|
|
investor.transfer(depositedValue);
|
|
Refunded(investor, depositedValue);
|
|
}
|
|
}
|