Contract 0x17C2B1D239e5F5A5bb29E295aD4Ba831090aB4a2 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf0984ceea1851f34267e4fa76526c1da60f17ae4c46fcd02b892af731a8bb470Approve374618392022-05-03 14:19:4997 days 7 hrs ago0x9cedbcf71a599d4c6f8978da71c4d1eb6b26327a IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.010993563826
0x0829b2e101ff6bad4c869f6e58db6ebc09427dccc30232998b31819d2aa7af5eTransfer373835442022-05-02 9:15:4198 days 12 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.010551722904
0x6c8c1bc0a7a954b7399a4760e27470610e69255646a750b3d4bcf17bebe6bfedTransfer372287672022-04-29 17:33:19101 days 4 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.029714308272
0x72c177a19b9b29afa3e033746a13a4864db1abfc6add74ce392762fef8bae160Transfer372079412022-04-29 9:30:46101 days 12 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.040858782804
0x00f0f1ddec48df7cdd7dd5b142d13129bfce8a80a3252c4c32d73e1b63ee683aApprove359821502022-04-13 20:30:12117 days 1 hr ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.010155255942
0xe2510b3f8ea5455336b6ffc1afbc19ebda92293e4bfa55774b4cf9a0ed58908dApprove359819742022-04-13 20:26:13117 days 1 hr ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.011366861367
0x280d4adfa2a9c0def4b611fba82e07f3b8720efac78448b674189d4dbab836c4Transfer355997282022-04-09 3:53:28121 days 17 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.007224200439
0x1be80331b7527ff2d1cddfaeb989f9b294053cfa1e320de8514dbd7c380e8468Transfer355996982022-04-09 3:52:58121 days 17 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.007224200439
0x9cab5f7274937078174310417f26261027e791b51e71004ee7fecc56016b8641Transfer355996522022-04-09 3:52:11121 days 17 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.007260506604
0xfda5a5c64185cf1b76eba23b3862ca8ae07d510b032e135c0cd51256da9ffd63Transfer355996092022-04-09 3:51:33121 days 17 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.007260506604
0x2010ad36270dcfcb598e36b6d76c38a312061e393fcf94f7e5aee70c8b2f7243Approve354585242022-04-07 12:00:54123 days 9 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.023659693809
0x4882086a48d4f1e18a3813eb314e4cc9ffd47a3d13f7c97c86d1a87a99db0338Approve354529212022-04-07 10:18:39123 days 11 hrs ago0xd588292f53b07047261eb48cbdf41ed179e35528 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.012149284848
0xa753f023c6aa2a1a2473e8db13c8dbb8bd2ca751c10e1a5015ec693e4983bf30Approve354529012022-04-07 10:18:09123 days 11 hrs ago0xd588292f53b07047261eb48cbdf41ed179e35528 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.013534507806
0xf733ca4e7c00e4247514bbe55aaf47224228c51bd04a2c69c38957e798ac77d7Approve354512942022-04-07 9:42:07123 days 12 hrs ago0xd588292f53b07047261eb48cbdf41ed179e35528 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.006005423985
0x057681705761aa5eaee60cf97f7b5ce64aa283b3d227f2d039ad44cc38cdbb4bApprove354511032022-04-07 9:38:43123 days 12 hrs ago0xd588292f53b07047261eb48cbdf41ed179e35528 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.007322817313
0x4df46d384daf4c666d6cf4a1deb51152bec41c81ecc7d500c74014a5f7b61cebApprove354509012022-04-07 9:35:30123 days 12 hrs ago0xd588292f53b07047261eb48cbdf41ed179e35528 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.007676099056
0xcd2e69743a3fed92eca50391a75012f8f599a3df78d80ce6d792eed48519ccf3Transfer348884612022-03-31 15:48:30130 days 5 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.058153961553
0x00409836a15d6a02c8ff68055c532babdacf3e425f8ff3654f6dc10f6a3e3306Approve347067142022-03-29 12:35:39132 days 9 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.008664378423
0x012d59aaf721aefe5f1eddf7f09889b351e51d51d43060feab5ce71973c0a917Approve347054832022-03-29 12:16:26132 days 9 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.005769274016
0x13372d5e477dcc52e75ee9e9a13c4e451b740052f8a5a7385241028a9b7f5b5dApprove346971342022-03-29 10:02:45132 days 11 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.008040073767
0x9e87b655de8c81e9ec308a8332858030f4019394e25d666d873909404bc5237aApprove346415372022-03-28 19:01:33133 days 2 hrs ago0xd588292f53b07047261eb48cbdf41ed179e35528 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.015184959266
0x36940c300669f2ac472bc60da6e6c7e4c562800ad979b8d3c5ea6cab48de822fTransfer346413192022-03-28 18:57:59133 days 2 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.018444221229
0x05ed1ba7f65f06ab0f26ecbdb6648ad375c1d19c403c87f9f5e0b48826fe8691Transfer346412182022-03-28 18:56:29133 days 2 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.012920965601
0x8511b015b3974b9f78fd8a79ad00eb6e18b5038b70680c76146e789737252dcaApprove346408392022-03-28 18:49:47133 days 2 hrs ago0x2fe6594fcbf67cd3edf5ac529d6002a49c6d5e07 IN  0x17c2b1d239e5f5a5bb29e295ad4ba831090ab4a20 FTM0.015815747967
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x102081dea68a8cd87ae42902e474231fcac23cd67552b13f3e3402aaf752d466346381412022-03-28 18:00:20133 days 3 hrs ago 0x28ca2691308565c7c9f7c545d6e8777de5b3ab2d  Contract Creation3.02 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xDa3a78fEAa6350148332F59B0b29D464a34C3F85

Contract Name:
ERC20Chocolate

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 200 runs

Other Settings:
petersburg EvmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : Chocolate.sol
// SPDX-License-Identifier: MIT

/**

██╗    ██╗██████╗ ███████╗███╗   ███╗ █████╗ ██████╗ ████████╗ ██████╗ ██████╗ ███╗   ██╗████████╗██████╗  █████╗  ██████╗████████╗███████╗    ██████╗ ██████╗ ███╗   ███╗
██║    ██║██╔══██╗██╔════╝████╗ ████║██╔══██╗██╔══██╗╚══██╔══╝██╔════╝██╔═══██╗████╗  ██║╚══██╔══╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝██╔════╝   ██╔════╝██╔═══██╗████╗ ████║
██║ █╗ ██║██████╔╝███████╗██╔████╔██║███████║██████╔╝   ██║   ██║     ██║   ██║██╔██╗ ██║   ██║   ██████╔╝███████║██║        ██║   ███████╗   ██║     ██║   ██║██╔████╔██║
██║███╗██║██╔═══╝ ╚════██║██║╚██╔╝██║██╔══██║██╔══██╗   ██║   ██║     ██║   ██║██║╚██╗██║   ██║   ██╔══██╗██╔══██║██║        ██║   ╚════██║   ██║     ██║   ██║██║╚██╔╝██║
╚███╔███╔╝██║     ███████║██║ ╚═╝ ██║██║  ██║██║  ██║   ██║   ╚██████╗╚██████╔╝██║ ╚████║   ██║   ██║  ██║██║  ██║╚██████╗   ██║   ███████║██╗╚██████╗╚██████╔╝██║ ╚═╝ ██║
 ╚══╝╚══╝ ╚═╝     ╚══════╝╚═╝     ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝    ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝   ╚═╝   ╚══════╝╚═╝ ╚═════╝ ╚═════╝ ╚═╝     ╚═╝

Blockchain Made Easy

http://wpsmartcontracts.com/

*/

pragma solidity ^0.5.7;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {
    
    int256 constant private INT256_MIN = -2**255;

    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Multiplies two signed integers, reverts on overflow.
    */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below

        int256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
    */
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0); // Solidity only automatically asserts when dividing by 0
        require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow

        int256 c = a / b;

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Subtracts two signed integers, reverts on overflow.
    */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Adds two signed integers, reverts on overflow.
    */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ERC20 is IERC20 {

    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowed;

    uint256 private _totalSupply;

    /**
    * @dev Public parameters to define the token
    */

    // Token symbol (short)
    string public symbol;

    // Token name (Long)
    string public  name;

    // Decimals (18 maximum)
    uint8 public decimals;

    /**
    * @dev Public functions to make the contract accesible
    */
    constructor (address initialAccount, string memory _tokenSymbol, string memory _tokenName, uint256 initialBalance) public {

        // Initialize Contract Parameters
        symbol = _tokenSymbol;
        name = _tokenName;
        decimals = 18;  // default decimals is going to be 18 always

        _mint(initialAccount, initialBalance);

    }

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param owner The address to query the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }

    /**
    * @dev Transfer token for a specified address
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * Note that while this function emits an Approval event, this is not required as per the specification,
     * and other compliant implementations may not emit the event.
     * @param from address The address which you want to send tokens from
     * @param to address The address which you want to transfer to
     * @param value uint256 the amount of tokens to be transferred
     */
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
    * @dev Transfer token for a specified addresses
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    /**
     * @dev Internal function that mints an amount of the token and assigns it to
     * an account. This encapsulates the modification of balances such that the
     * proper events are emitted.
     * @param account The account that will receive the created tokens.
     * @param value The amount that will be created.
     */
    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account.
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account, deducting from the sender's allowance for said account. Uses the
     * internal burn function.
     * Emits an Approval event (reflecting the reduced allowance).
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
        emit Approval(account, msg.sender, _allowed[account][msg.sender]);
    }

}

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract ERC20Burnable is ERC20 {

    bool private _burnableActive;

    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of token to be burned.
     */
    function burn(uint256 value) public whenBurnableActive {
        _burn(msg.sender, value);
    }

    /**
     * @dev Burns a specific amount of tokens from the target address and decrements allowance
     * @param from address The address which you want to send tokens from
     * @param value uint256 The amount of token to be burned
     */
    function burnFrom(address from, uint256 value) public whenBurnableActive {
        _burnFrom(from, value);
    }

    /**
     * @dev Options to activate or deactivate Burn ability
     */

    function _setBurnableActive(bool _active) internal {
        _burnableActive = _active;
    }

    modifier whenBurnableActive() {
        require(_burnableActive);
        _;
    }

}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender));
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

/**
 * @title ERC20Mintable
 * @dev ERC20 minting logic
 */
contract ERC20Mintable is ERC20, MinterRole {

    bool private _mintableActive;
    /**
     * @dev Function to mint tokens
     * @param to The address that will receive the minted tokens.
     * @param value The amount of tokens to mint.
     * @return A boolean that indicates if the operation was successful.
     */
    function mint(address to, uint256 value) public onlyMinter whenMintableActive returns (bool) {
        _mint(to, value);
        return true;
    }

    /**
     * @dev Options to activate or deactivate Burn ability
     */

    function _setMintableActive(bool _active) internal {
        _mintableActive = _active;
    }

    modifier whenMintableActive() {
        require(_mintableActive);
        _;
    }

}

contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender));
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is PauserRole {
    event Paused(address account);
    event Unpaused(address account);

    bool private _pausableActive;
    bool private _paused;

    constructor () internal {
        _paused = false;
    }

    /**
     * @return true if the contract is paused, false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyPauser whenNotPaused whenPausableActive {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyPauser whenPaused whenPausableActive {
        _paused = false;
        emit Unpaused(msg.sender);
    }

    /**
     * @dev Options to activate or deactivate Pausable ability
     */

    function _setPausableActive(bool _active) internal {
        _pausableActive = _active;
    }

    modifier whenPausableActive() {
        require(_pausableActive);
        _;
    }

}

/**
 * @title Advanced ERC20 token
 *
 * @dev Implementation of the basic standard token plus mint and burn public functions.
 *
 * Version 2. This version delegates the minter and pauser renounce to parent-factory contract
 * that allows ICOs to be minter for token selling
 *
 */
contract ERC20Chocolate is ERC20, ERC20Burnable, ERC20Mintable, Pausable {

    // maximum capital, if defined > 0
    uint256 private _cap;

    constructor (
        address initialAccount, string memory _tokenSymbol, string memory _tokenName, uint256 initialBalance, uint256 cap,
        bool _burnableOption, bool _mintableOption, bool _pausableOption
    ) public
        ERC20(initialAccount, _tokenSymbol, _tokenName, initialBalance) {

        // we must add customer account as the first minter
        addMinter(initialAccount);

        // add customer as pauser
        addPauser(initialAccount);

        if (cap > 0) {
            _cap = cap; // maximum capitalization limited
        } else {
            _cap = 0; // unlimited capitalization
        }

        // activate or deactivate options
        _setBurnableActive(_burnableOption);
        _setMintableActive(_mintableOption);
        _setPausableActive(_pausableOption);

    }

    /**
     * @return the cap for the token minting.
     */
    function cap() public view returns (uint256) {
        return _cap;
    }

    /**
     * limit the mint to a maximum cap only if cap is defined
     */
    function _mint(address account, uint256 value) internal {
        if (_cap > 0) {
            require(totalSupply().add(value) <= _cap);
        }
        super._mint(account, value);
    }

    /**
     * Pausable options
     */
    function transfer(address to, uint256 value) public whenNotPaused returns (bool) {
        return super.transfer(to, value);
    }

    function transferFrom(address from,address to, uint256 value) public whenNotPaused returns (bool) {
        return super.transferFrom(from, to, value);
    }

    function approve(address spender, uint256 value) public whenNotPaused returns (bool) {
        return super.approve(spender, value);
    }

    function increaseAllowance(address spender, uint addedValue) public whenNotPaused returns (bool success) {
        return super.increaseAllowance(spender, addedValue);
    }

    function decreaseAllowance(address spender, uint subtractedValue) public whenNotPaused returns (bool success) {
        return super.decreaseAllowance(spender, subtractedValue);
    }

}

Settings
{
  "evmVersion": "petersburg",
  "libraries": {},
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initialAccount","type":"address"},{"name":"_tokenSymbol","type":"string"},{"name":"_tokenName","type":"string"},{"name":"initialBalance","type":"uint256"},{"name":"cap","type":"uint256"},{"name":"_burnableOption","type":"bool"},{"name":"_mintableOption","type":"bool"},{"name":"_pausableOption","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040523480156200001157600080fd5b50604051620015f2380380620015f283398101806040526101008110156200003857600080fd5b8151602083018051919392830192916401000000008111156200005a57600080fd5b820160208101848111156200006e57600080fd5b81516401000000008111828201871017156200008957600080fd5b50509291906020018051640100000000811115620000a657600080fd5b82016020810184811115620000ba57600080fd5b8151640100000000811182820187101715620000d557600080fd5b505060208083015160408401516060850151608086015160a0909601518951959850929650909490939092899189918991899162000119916003918601906200053e565b5081516200012f9060049060208501906200053e565b506005805460ff19166012179055620001508482620001fd602090811b901c565b5050505062000165336200025960201b60201c565b6200017633620002ab60201b60201c565b6009805461ff00191690556200019388620002fd602090811b901c565b620001a4886200032c60201b60201c565b8315620001b657600a849055620001bc565b6000600a555b620001cd836200035860201b60201c565b620001de826200037260201b60201c565b620001ef816200038560201b60201c565b5050505050505050620005e0565b600a54156200023e57600a5462000232826200021e6200039860201b60201c565b6200039f60201b62000e681790919060201c565b11156200023e57600080fd5b620002558282620003b960201b62000e7a1760201c565b5050565b620002748160066200047260201b62000f6a1790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620002c68160086200047260201b62000f6a1790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6200030e33620004c860201b60201c565b6200031857600080fd5b62000329816200025960201b60201c565b50565b6200033d33620004eb60201b60201c565b6200034757600080fd5b6200032981620002ab60201b60201c565b600580549115156101000261ff0019909216919091179055565b6007805460ff1916911515919091179055565b6009805460ff1916911515919091179055565b6002545b90565b600082820183811015620003b257600080fd5b9392505050565b6001600160a01b038216620003cd57600080fd5b620003e9816002546200039f60201b62000e681790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200041c91839062000e686200039f821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0381166200048657600080fd5b6200049882826200050860201b60201c565b15620004a357600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000620004e58260066200050860201b62000b2d1790919060201c565b92915050565b6000620004e58260086200050860201b62000b2d1790919060201c565b60006001600160a01b0382166200051e57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200058157805160ff1916838001178555620005b1565b82800160010185558215620005b1579182015b82811115620005b157825182559160200191906001019062000594565b50620005bf929150620005c3565b5090565b6200039c91905b80821115620005bf5760008155600101620005ca565b61100280620005f06000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80636ef8d66d116100c3578063983b2d561161007c578063983b2d56146103cd57806398650275146103f3578063a457c2d7146103fb578063a9059cbb14610427578063aa271e1a14610453578063dd62ed3e1461047957610158565b80636ef8d66d1461033d57806370a082311461034557806379cc67901461036b57806382dc1ec4146103975780638456cb59146103bd57806395d89b41146103c557610158565b8063395093511161011557806339509351146102905780633f4ba83a146102bc57806340c10f19146102c657806342966c68146102f257806346fbf68e1461030f5780635c975abb1461033557610158565b806306fdde031461015d578063095ea7b3146101da57806318160ddd1461021a57806323b872dd14610234578063313ce5671461026a578063355274ea14610288575b600080fd5b6101656104a7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019f578181015183820152602001610187565b50505050905090810190601f1680156101cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610206600480360360408110156101f057600080fd5b506001600160a01b038135169060200135610535565b604080519115158252519081900360200190f35b61022261055e565b60408051918252519081900360200190f35b6102066004803603606081101561024a57600080fd5b506001600160a01b03813581169160208101359091169060400135610564565b61027261058f565b6040805160ff9092168252519081900360200190f35b610222610598565b610206600480360360408110156102a657600080fd5b506001600160a01b03813516906020013561059e565b6102c46105c0565b005b610206600480360360408110156102dc57600080fd5b506001600160a01b038135169060200135610635565b6102c46004803603602081101561030857600080fd5b503561066b565b6102066004803603602081101561032557600080fd5b50356001600160a01b031661068c565b6102066106a5565b6102c46106b3565b6102226004803603602081101561035b57600080fd5b50356001600160a01b03166106be565b6102c46004803603604081101561038157600080fd5b506001600160a01b0381351690602001356106d9565b6102c4600480360360208110156103ad57600080fd5b50356001600160a01b03166106fb565b6102c4610716565b610165610790565b6102c4600480360360208110156103e357600080fd5b50356001600160a01b03166107eb565b6102c4610806565b6102066004803603604081101561041157600080fd5b506001600160a01b03813516906020013561080f565b6102066004803603604081101561043d57600080fd5b506001600160a01b038135169060200135610831565b6102066004803603602081101561046957600080fd5b50356001600160a01b0316610853565b6102226004803603604081101561048f57600080fd5b506001600160a01b0381358116916020013516610866565b6004805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b505050505081565b600954600090610100900460ff161561054d57600080fd5b6105578383610891565b9392505050565b60025490565b600954600090610100900460ff161561057c57600080fd5b6105878484846108fb565b949350505050565b60055460ff1681565b600a5490565b600954600090610100900460ff16156105b657600080fd5b61055783836109b2565b6105c93361068c565b6105d257600080fd5b600954610100900460ff166105e657600080fd5b60095460ff166105f557600080fd5b6009805461ff00191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b600061064033610853565b61064957600080fd5b60075460ff1661065857600080fd5b6106628383610a4e565b50600192915050565b600554610100900460ff1661067f57600080fd5b6106893382610a86565b50565b600061069f60088363ffffffff610b2d16565b92915050565b600954610100900460ff1690565b6106bc33610b62565b565b6001600160a01b031660009081526020819052604090205490565b600554610100900460ff166106ed57600080fd5b6106f78282610baa565b5050565b6107043361068c565b61070d57600080fd5b61068981610c5a565b61071f3361068c565b61072857600080fd5b600954610100900460ff161561073d57600080fd5b60095460ff1661074c57600080fd5b6009805461ff0019166101001790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561052d5780601f106105025761010080835404028352916020019161052d565b6107f433610853565b6107fd57600080fd5b61068981610ca2565b6106bc33610cea565b600954600090610100900460ff161561082757600080fd5b6105578383610d32565b600954600090610100900460ff161561084957600080fd5b6105578383610d7b565b600061069f60068363ffffffff610b2d16565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006001600160a01b0383166108a657600080fd5b3360008181526001602090815260408083206001600160a01b0388168085529083529281902086905580518681529051929392600080516020610fb7833981519152929181900390910190a350600192915050565b6001600160a01b038316600090815260016020908152604080832033845290915281205461092f908363ffffffff610d8816565b6001600160a01b038516600090815260016020908152604080832033845290915290205561095e848484610d9d565b6001600160a01b038416600081815260016020908152604080832033808552908352928190205481519081529051929392600080516020610fb7833981519152929181900390910190a35060019392505050565b60006001600160a01b0383166109c757600080fd5b3360009081526001602090815260408083206001600160a01b03871684529091529020546109fb908363ffffffff610e6816565b3360008181526001602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020610fb7833981519152929081900390910190a350600192915050565b600a5415610a7c57600a54610a7182610a6561055e565b9063ffffffff610e6816565b1115610a7c57600080fd5b6106f78282610e7a565b6001600160a01b038216610a9957600080fd5b600254610aac908263ffffffff610d8816565b6002556001600160a01b038216600090815260208190526040902054610ad8908263ffffffff610d8816565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b60006001600160a01b038216610b4257600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b610b7360088263ffffffff610f2216565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b6001600160a01b0382166000908152600160209081526040808320338452909152902054610bde908263ffffffff610d8816565b6001600160a01b0383166000908152600160209081526040808320338452909152902055610c0c8282610a86565b6001600160a01b038216600081815260016020908152604080832033808552908352928190205481519081529051929392600080516020610fb7833981519152929181900390910190a35050565b610c6b60088263ffffffff610f6a16565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b610cb360068263ffffffff610f6a16565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b610cfb60068263ffffffff610f2216565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b038316610d4757600080fd5b3360009081526001602090815260408083206001600160a01b03871684529091529020546109fb908363ffffffff610d8816565b6000610662338484610d9d565b600082821115610d9757600080fd5b50900390565b6001600160a01b038216610db057600080fd5b6001600160a01b038316600090815260208190526040902054610dd9908263ffffffff610d8816565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610e0e908263ffffffff610e6816565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561055757600080fd5b6001600160a01b038216610e8d57600080fd5b600254610ea0908263ffffffff610e6816565b6002556001600160a01b038216600090815260208190526040902054610ecc908263ffffffff610e6816565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116610f3557600080fd5b610f3f8282610b2d565b610f4857600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116610f7d57600080fd5b610f878282610b2d565b15610f9157600080fd5b6001600160a01b0316600090815260209190915260409020805460ff1916600117905556fe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a72305820d03d7aecc5161b6e63a56f085bd0a03db52d5d1427cca2a75970798b5d4d02610029000000000000000000000000e1440fde576eaa0f4cbc2ab3d063225c3b5c701e0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000024d5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d7920546f6b656e320000000000000000000000000000000000000000000000

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.