contract CommodityERC20 is MinterRole, ERC20Burnable, ERC20Pausable {
    string public _name;
    string public _symbol;
    uint8 public _decimals;
    address public _owner;

    /**
     * @dev Sets the values for `name`, `symbol`, 'init', 'owner'. All four of
     * these values are immutable: they can only be set once during
     * construction. Decimals are defaulted to '18', per ERC20 norms, imitating 
     * the relationship between Ether and Wei.
     */
    constructor (string memory name, string memory symbol, uint256 init, address owner) public {
        _name = name;
        _symbol = symbol;
        _decimals = 0; // makes token nondivisible
        _owner = owner;
        _balances[_owner] = init; // provides initial deposit to owner set by constructor
        _totalSupply = init; // initializes totalSupply with initial deposit
        _addMinter(_owner);
        _addPauser(_owner);
        emit Transfer(address(0), _owner, _totalSupply);
    }
    
    /**
     * @dev See `ERC20._mint`.
     *
     * Requirements:
     *
     * - the caller must have the `MinterRole`.
     */
    function mint(address account, uint256 amount) public onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }
}
/**
 * @dev Extension of ERC20 standard designed for simple 'commodity token' deployments with 1:1 redemption.
 */
function mint(address account, uint256 amount) public onlyMinter returns (bool) {
    _mint(account, amount);
    return true;
}

/**
 * @dev See `ERC20._mint`.
 *
 * Requirements:
 *
 * - the caller must have the `MinterRole`.
 */