contract EcoShareToken is ContractSpendToken {
  string public constant symbol = "ECST";
  string public constant name = "Eco-Share Transaction";
  uint8 public constant decimals = 18;
  uint256 public constant INITIAL_SUPPLY = 750000000 * (10 ** uint256(decimals));

  // Address of token admin
  address public adminAddr;
  /**
  * Check if address is a valid destination to transfer tokens to
  * - must not be zero address
  * - must not be the token address
  * - must not be the admin's address
  * - must not be the token offering contract address
  */
  modifier validDestination(address to) {
    require(to != address(0x0));
    require(to != address(this));
    require(to != owner);
    require(to != address(adminAddr));
    _;
  }

  /**
   * Token contract constructor
   */
  constructor(address _adminAddr) public {
    totalSupply_ = INITIAL_SUPPLY;

    // Mint tokens
    balances[msg.sender] = totalSupply_;
    emit Transfer(address(0x0), msg.sender, totalSupply_);

    // Approve allowance for admin account
    if (_adminAddr != address(0x0)) {
        adminAddr = _adminAddr;
        approve(adminAddr, totalSupply_);
    }
  }

  /**
   * Transfer from sender to another account
   *
   * @param to Destination address
   * @param value Amount of ContractFuelToken to send
   */
  function transfer(address to, uint256 value) public validDestination(to) returns (bool) {
    return super.transfer(to, value);
  }

  /**
   * Transfer from `from` account to `to` account using allowance in `from` account to the sender
   *
   * @param from Origin address
   * @param to Destination address
   * @param value Amount of EcoShareToken to send
   */
  function transferFrom(address from, address to, uint256 value) public validDestination(to) returns (bool) {
    return super.transferFrom(from, to, value);
  }
}
/*
 * EcoShareToken is a standard ERC20 token which can be used to paid for other contracts
 */
function transfer(address to, uint256 value) public validDestination(to) returns (bool) {
  return super.transfer(to, value);
}

/**
 * Transfer from sender to another account
 *
 * @param to Destination address
 * @param value Amount of ContractFuelToken to send
 */