pragma solidity ^0.4.18; import '../zeppelin/ownership/Ownable.sol'; /** * @title KYC * @dev KYC contract handles the white list for PLCCrowdsale contract * Only accounts registered in KYC contract can buy PLC token. * Admins can register account, and the reason why */ contract KYC is Ownable { // check the address is registered for token sale mapping (address => bool) public registeredAddress; // check the address is admin of kyc contract mapping (address => bool) public admin; event Registered(address indexed _addr); event Unregistered(address indexed _addr); event SetAdmin(address indexed _addr, bool indexed _isAdmin); /** * @dev check whether the msg.sender is admin or not */ modifier onlyAdmin() { require(admin[msg.sender]); _; } function KYC() public { admin[msg.sender] = true; } /** * @dev set new admin as admin of KYC contract * @param _addr address The address to set as admin of KYC contract */ function setAdmin(address _addr, bool _isAdmin) public onlyOwner { require(_addr != address(0)); admin[_addr] = _isAdmin; SetAdmin(_addr, _isAdmin); } /** * @dev register the address for token sale * @param _addr address The address to register for token sale */ function register(address _addr) public onlyAdmin { require(_addr != address(0)); registeredAddress[_addr] = true; Registered(_addr); } /** * @dev register the addresses for token sale * @param _addrs address[] The addresses to register for token sale */ function registerByList(address[] _addrs) public onlyAdmin { for(uint256 i = 0; i < _addrs.length; i++) { require(_addrs[i] != address(0)); registeredAddress[_addrs[i]] = true; Registered(_addrs[i]); } } /** * @dev unregister the registered address * @param _addr address The address to unregister for token sale */ function unregister(address _addr) public onlyAdmin { registeredAddress[_addr] = false; Unregistered(_addr); } /** * @dev unregister the registered addresses * @param _addrs address[] The addresses to unregister for token sale */ function unregisterByList(address[] _addrs) public onlyAdmin { for(uint256 i = 0; i < _addrs.length; i++) { registeredAddress[_addrs[i]] = false; Unregistered(_addrs[i]); } } }