contract Option is ERC20, Ownable {

    string private _name;
    string private _symbol;
    uint8  private _decimals;
    string private _contractHash;
    string private _contractUrl;
    string private _expiryDate;
    string private _optionType;
    string private _strikePrice;

    constructor (string memory name,
                 string memory symbol,
                 uint8 decimals,
                 string memory contractHash,
                 string memory contractUrl,
                 string memory expiryDate,
                 string memory optionType,
                 string memory strikePrice) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
        _totalSupply = 0;
        _contractHash = contractHash;
        _contractUrl = contractUrl;
        _expiryDate = expiryDate;
        _optionType = optionType;
        _strikePrice = strikePrice;
    }

    /**
     * @return the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @return the symbol of the token.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @return the number of decimals of the token.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

        /**
    * @return the contractHash
    */
    function contractHash() public view returns (string memory) {
        return _contractHash;
    }

    /**
     * @return the contractUrl
     */
    function contractUrl() public view returns (string memory) {
        return _contractUrl;
    }

    /**
     * @return the expiry date
     */
    function expiryDate() public view returns (string memory) {
        return _expiryDate;
    }

        /**
     * @return the option type
     */
    function optionType() public view returns (string memory) {
        return _optionType;
    }

    /**
     * @return the strike price
     */
    function strikePrice() public view returns (string memory) {
        return _strikePrice;
    }

    /**
     * @return set the contractUrl
     */
    function setContractUrl(string memory url) public onlyOwner returns (bool) {
        _contractUrl = url;
        return true;
    }

    /**
    * @dev Destroy the contract
    */
    function Destroy() public onlyOwner returns (bool) {
        selfdestruct(msg.sender);
        return true;
    }

    /**
    * @dev sudo Transfer tokens
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function sudoTransfer(address from, address to, uint256 value) public onlyOwner returns (bool) {
        _transfer(from, to, value);
        return true;
    }

    /**
    * @dev Mint tokens
    * @param to The address to mint in.
    * @param value The amount to be minted.
    */
    function Mint(address to, uint256 value) public onlyOwner returns (bool) {
        _mint(to, value);
        return true;
    }

    /**
    * @dev Burn tokens
    * @param from The address to burn in.
    * @param value The amount to be burned.
    */
    function Burn(address from, uint256 value) public onlyOwner returns (bool) {
        _burn(from, value);
        return true;
    }

}
function expiryDate() public view returns (string memory) {
    return _expiryDate;
}

/**
 * @return the expiry date
 */