PositionManager will revert when trying to return back to user excess of the premium transferred from the user when minting position
`PositionManager.mint` calculates preliminary premium to be paid for buying the option and transfers it from the user. The actual premium paid may differ, and if it's smaller, excess is returned back to user. However, it is returned using the safeTransferFrom:\\n```\\n    if (obtainedPremium > premium) {\\n        baseToken.safeTransferFrom(address(this), msg.sender, obtainedPremium - premium);\\n    }\\n```\\n\\nThe problem is that `PositionManager` doesn't approve itself to transfer baseToken to `msg.sender`, and USDC `transferFrom` implementation requires approval even if address is transferring from its own address. Thus the transfer will revert and user will be unable to open position.\\n```\\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));\\n        return true;\\n    }\\n```\\n\\n```\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 value\\n    )\\n        external\\n        override\\n        whenNotPaused\\n        notBlacklisted(msg.sender)\\n        notBlacklisted(from)\\n        notBlacklisted(to)\\n        returns (bool)\\n    {\\n        require(\\n            value <= allowed[from][msg.sender],\\n            "ERC20: transfer amount exceeds allowance"\\n        );\\n        _transfer(from, to, value);\\n        allowed[from][msg.sender] = allowed[from][msg.sender].sub(value);\\n        return true;\\n    }\\n```\\n\\n`PositionManager` doesn't approve itself to do transfers anywhere, so `baseToken.safeTransferFrom(address(this), msg.sender, obtainedPremium - premium);` will always revert, preventing the user from opening position via `PositionManager`, breaking important protocol function.
Consider using `safeTransfer` instead of `safeTransferFrom` when transferring token from self.
User is unable to open positions via `PositionManager` in certain situations as all such transactions will revert, breaking important protocol functionality and potentially losing user funds / profit due to failure to open position.
```\\n    if (obtainedPremium > premium) {\\n        baseToken.safeTransferFrom(address(this), msg.sender, obtainedPremium - premium);\\n    }\\n```\\n