{"contractName":"MaxAmountValidator","abi":[{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"moduleName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_maxAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"maxAmount","type":"uint256"}],"name":"LogChangeMaxAmount","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"canSend","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxAmount","type":"uint256"}],"name":"setMaxAmount","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getType","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"bytecode":"0x608060405260008060146101000a81548160ff02191690831515021790555034801561002a57600080fd5b50604051602080610adc83398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018190555050610a38806100a46000396000f3006080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806315dae03e146100bf57806317d7de7c146100f05780633f4ba83a146101235780634d8b483f1461013a5780634fe47f70146101df5780635c975abb146102245780635f48f39314610253578063715018a61461027e5780638456cb59146102955780638da5cb5b146102ac57806393f0899a14610303578063f2fde38b14610336575b600080fd5b3480156100cb57600080fd5b506100d4610379565b604051808260ff1660ff16815260200191505060405180910390f35b3480156100fc57600080fd5b50610105610382565b60405180826000191660001916815260200191505060405180910390f35b34801561012f57600080fd5b506101386103aa565b005b34801561014657600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610468565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b5061020a60048036038101908080359060200190929190505050610571565b604051808215151515815260200191505060405180910390f35b34801561023057600080fd5b50610239610667565b604051808215151515815260200191505060405180910390f35b34801561025f57600080fd5b5061026861067a565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b50610293610684565b005b3480156102a157600080fd5b506102aa610786565b005b3480156102b857600080fd5b506102c1610846565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561030f57600080fd5b5061031861086b565b60405180826000191660001916815260200191505060405180910390f35b34801561034257600080fd5b50610377600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061088f565b005b60006001905090565b60007f4d6178416d6f756e7456616c696461746f720000000000000000000000000000905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561040557600080fd5b600060149054906101000a900460ff16151561042057600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000806000808792508273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561050c57600080fd5b505af1158015610520573d6000803e3d6000fd5b505050506040513d602081101561053657600080fd5b8101908080519060200190929190505050915061055c85836108f690919063ffffffff16565b90508060015410159350505050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105ce57600080fd5b600060149054906101000a900460ff161515156105ea57600080fd5b816001819055507fbba5d03b7e1e4c1d683d889af8ddd559d0c7010f302933c90bc88a948f14224e33600154604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160019050919050565b600060149054906101000a900460ff1681565b6000600154905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106df57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107e157600080fd5b600060149054906101000a900460ff161515156107fd57600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f4d6178416d6f756e7456616c696461746f72000000000000000000000000000081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108ea57600080fd5b6108f381610912565b50565b6000818301905082811015151561090957fe5b80905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561094e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582015872db958bcbd916ae0375efb8669184538521d1842b7a3e0f382f5f88bf42f0029","deployedBytecode":"0x6080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806315dae03e146100bf57806317d7de7c146100f05780633f4ba83a146101235780634d8b483f1461013a5780634fe47f70146101df5780635c975abb146102245780635f48f39314610253578063715018a61461027e5780638456cb59146102955780638da5cb5b146102ac57806393f0899a14610303578063f2fde38b14610336575b600080fd5b3480156100cb57600080fd5b506100d4610379565b604051808260ff1660ff16815260200191505060405180910390f35b3480156100fc57600080fd5b50610105610382565b60405180826000191660001916815260200191505060405180910390f35b34801561012f57600080fd5b506101386103aa565b005b34801561014657600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610468565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b5061020a60048036038101908080359060200190929190505050610571565b604051808215151515815260200191505060405180910390f35b34801561023057600080fd5b50610239610667565b604051808215151515815260200191505060405180910390f35b34801561025f57600080fd5b5061026861067a565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b50610293610684565b005b3480156102a157600080fd5b506102aa610786565b005b3480156102b857600080fd5b506102c1610846565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561030f57600080fd5b5061031861086b565b60405180826000191660001916815260200191505060405180910390f35b34801561034257600080fd5b50610377600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061088f565b005b60006001905090565b60007f4d6178416d6f756e7456616c696461746f720000000000000000000000000000905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561040557600080fd5b600060149054906101000a900460ff16151561042057600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000806000808792508273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561050c57600080fd5b505af1158015610520573d6000803e3d6000fd5b505050506040513d602081101561053657600080fd5b8101908080519060200190929190505050915061055c85836108f690919063ffffffff16565b90508060015410159350505050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105ce57600080fd5b600060149054906101000a900460ff161515156105ea57600080fd5b816001819055507fbba5d03b7e1e4c1d683d889af8ddd559d0c7010f302933c90bc88a948f14224e33600154604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160019050919050565b600060149054906101000a900460ff1681565b6000600154905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106df57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107e157600080fd5b600060149054906101000a900460ff161515156107fd57600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f4d6178416d6f756e7456616c696461746f72000000000000000000000000000081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108ea57600080fd5b6108f381610912565b50565b6000818301905082811015151561090957fe5b80905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561094e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582015872db958bcbd916ae0375efb8669184538521d1842b7a3e0f382f5f88bf42f0029","source":"pragma solidity 0.4.24;\n\nimport \"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"../interfaces/IModuleContract.sol\";\nimport \"../inheritables/TransferValidator.sol\";\nimport \"../interfaces/IERC20.sol\";\n\n/**\n * @title Transfer Validator that checks if the trade will increase the to address above a max number of tokens\n */\n\ncontract MaxAmountValidator is TransferValidator, IModuleContract, Pausable {\n    using SafeMath for uint256;\n\n    /*----------- Constants -----------*/\n    bytes32 public constant moduleName = \"MaxAmountValidator\";\n\n    /*----------- Globals -----------*/\n    uint internal maxAmount_;\n\n    /*----------- Events -----------*/\n    event LogChangeMaxAmount(address sender, uint maxAmount);\n\n    /**\n    * @dev Constructor for contract\n    * @param _maxAmount maximum number of tokens an address can own\n    */\n    constructor(\n        uint _maxAmount\n    ) public {\n        maxAmount_ = _maxAmount;\n    }\n\n    /*----------- Validator Methods -----------*/\n    /**\n    * @dev Validate whether an address is not on the blacklist\n    * @param _token address Unused for this validation\n    * @param _to address The address which you want to transfer to\n    * @param _from address unused for this validation\n    * @param _amount uint256 unused for this validation\n    * @return bool\n    */\n    function canSend(address _token, address _from, address _to, uint256 _amount)\n        external\n        returns(bool)\n    {\n        IERC20 token = IERC20(_token);\n        uint toBalance = token.balanceOf(_to);\n        uint newTotal = toBalance.add(_amount);\n        return (maxAmount_ >= newTotal);\n    }\n\n\n    /*----------- Setter Methods -----------*/\n    function setMaxAmount(uint _maxAmount)\n        external\n        onlyOwner\n        whenNotPaused\n        returns (bool success)\n    {\n        maxAmount_ = _maxAmount;\n        emit LogChangeMaxAmount(msg.sender, maxAmount_);\n        return true;\n    }\n    \n    /*----------- Getter Methods -----------*/\n    /**\n    * @dev Returns the name of the validator\n    * @return bytes32\n    */\n    function getName()\n        external\n        view\n        returns(bytes32)\n    {\n        return moduleName;\n    }\n\n    /**\n    * @dev Returns the type of the validator\n    * @return uint8\n    */\n    function getType()\n        external\n        view\n        returns(uint8)\n    {\n        return moduleType;\n    }\n\n    /**\n    * @dev Returns the maxAmount of the validator\n    * @return uint\n    */\n    function maxAmount()\n        external\n        view\n        returns(uint)\n    {\n        return maxAmount_;\n    }\n}\n","compiler":{"name":"solc","version":"0.4.24+commit.e67f0147.Emscripten.clang"},"networks":{},"schemaVersion":"2.0.1","updatedAt":"2019-01-09T15:51:14.594Z"}