FinalizableCrowdsale.sol 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. pragma solidity ^0.5.0;
  2. import "../../math/SafeMath.sol";
  3. import "../validation/TimedCrowdsale.sol";
  4. /**
  5. * @title FinalizableCrowdsale
  6. * @dev Extension of TimedCrowdsale with a one-off finalization action, where one
  7. * can do extra work after finishing.
  8. */
  9. contract FinalizableCrowdsale is TimedCrowdsale {
  10. using SafeMath for uint256;
  11. bool private _finalized;
  12. event CrowdsaleFinalized();
  13. constructor () internal {
  14. _finalized = false;
  15. }
  16. /**
  17. * @return true if the crowdsale is finalized, false otherwise.
  18. */
  19. function finalized() public view returns (bool) {
  20. return _finalized;
  21. }
  22. /**
  23. * @dev Must be called after crowdsale ends, to do some extra finalization
  24. * work. Calls the contract's finalization function.
  25. */
  26. function finalize() public {
  27. require(!_finalized, "FinalizableCrowdsale: already finalized");
  28. require(hasClosed(), "FinalizableCrowdsale: not closed");
  29. _finalized = true;
  30. _finalization();
  31. emit CrowdsaleFinalized();
  32. }
  33. /**
  34. * @dev Can be overridden to add finalization logic. The overriding function
  35. * should call super._finalization() to ensure the chain of finalization is
  36. * executed entirely.
  37. */
  38. function _finalization() internal {
  39. // solhint-disable-previous-line no-empty-blocks
  40. }
  41. }