/** * Source Code first verified at https://etherscan.io on Thursday, April 18, 2019 (UTC) */ pragma solidity ^0.5.7; // Voken Developers Fund // // More info: // https://vision.network // https://voken.io // // Contact us: // [email protected] // [email protected] /** * @title Ownable */ contract Ownable { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract * to the sender account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0)); _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } /** * @dev Rescue compatible ERC20 Token * * @param tokenAddr ERC20 The address of the ERC20 token contract * @param receiver The address of the receiver * @param amount uint256 */ function rescueTokens(address tokenAddr, address receiver, uint256 amount) external onlyOwner { IERC20 _token = IERC20(tokenAddr); require(receiver != address(0)); uint256 balance = _token.balanceOf(address(this)); require(balance >= amount); assert(_token.transfer(receiver, amount)); } /** * @dev Withdraw Ether */ function withdrawEther(address payable to, uint256 amount) external onlyOwner { require(to != address(0)); uint256 balance = address(this).balance; require(balance >= amount); to.transfer(amount); } } /** * @title ERC20 interface * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20{ function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); } /** * @title Voken Developers Fund */ contract VokenDevelopersFund is Ownable{ IERC20 public Voken; event Donate(address indexed account, uint256 amount); /** * @dev constructor */ constructor() public { Voken = IERC20(0x82070415FEe803f94Ce5617Be1878503e58F0a6a); } /** * @dev donate */ function () external payable { emit Donate(msg.sender, msg.value); } /** * @dev transfer Voken */ function transferVoken(address to, uint256 amount) external onlyOwner { assert(Voken.transfer(to, amount)); } /** * @dev batch transfer */ function batchTransfer(address[] memory accounts, uint256[] memory values) public onlyOwner { require(accounts.length == values.length); for (uint256 i = 0; i < accounts.length; i++) { assert(Voken.transfer(accounts[i], values[i])); } } }