FinalizableCrowdsale.sol 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. pragma solidity ^0.4.24;
  2. import "../../math/SafeMath.sol";
  3. import "../../ownership/Ownable.sol";
  4. import "../validation/TimedCrowdsale.sol";
  5. /**
  6. * @title FinalizableCrowdsale
  7. * @dev Extension of Crowdsale where an owner can do extra work
  8. * after finishing.
  9. */
  10. contract FinalizableCrowdsale is Ownable, TimedCrowdsale {
  11. using SafeMath for uint256;
  12. bool private finalized_ = false;
  13. event CrowdsaleFinalized();
  14. /**
  15. * @return true if the crowdsale is finalized, false otherwise.
  16. */
  17. function finalized() public view returns(bool) {
  18. return finalized_;
  19. }
  20. /**
  21. * @dev Must be called after crowdsale ends, to do some extra finalization
  22. * work. Calls the contract's finalization function.
  23. */
  24. function finalize() public onlyOwner {
  25. require(!finalized_);
  26. require(hasClosed());
  27. _finalization();
  28. emit CrowdsaleFinalized();
  29. finalized_ = true;
  30. }
  31. /**
  32. * @dev Can be overridden to add finalization logic. The overriding function
  33. * should call super._finalization() to ensure the chain of finalization is
  34. * executed entirely.
  35. */
  36. function _finalization() internal {
  37. }
  38. }