aboutsummaryrefslogblamecommitdiffstats
path: root/test/compilationTests/zeppelin/lifecycle/TokenDestructible.sol
blob: eb1415879a67cc4dbc3de0b861656b7e9b3b44ca (plain) (tree)
1
2
3
4
5
6
7





                                  
   






                                                                                     
                                  
 
     





                                                                                 
                                                              



                                                
                                                       






                                                   
pragma solidity ^0.4.11;


import "../ownership/Ownable.sol";
import "../token/ERC20Basic.sol";

/**
 * @title TokenDestructible:
 * @author Remco Bloemen <remco@2π.com>
 * @dev Base contract that can be destroyed by owner. All funds in contract including
 * listed tokens will be sent to the owner.
 */
contract TokenDestructible is Ownable {

  constructor() public payable { }

  /**
   * @notice Terminate contract and refund to owner
   * @param tokens List of addresses of ERC20 or ERC20Basic token contracts to
   refund.
   * @notice The called token contracts could try to re-enter this contract. Only
   supply token contracts you trust.
   */
  function destroy(address[] memory tokens) public onlyOwner {

    // Transfer tokens to owner
    for(uint256 i = 0; i < tokens.length; i++) {
      ERC20Basic token = ERC20Basic(tokens[i]);
      uint256 balance = token.balanceOf(address(this));
      token.transfer(owner, balance);
    }

    // Transfer Eth to owner and terminate contract
    selfdestruct(owner);
  }
}