`Goldilend.lock()` will always revert
In `lock()`, it calls `_refreshiBGT()` before pulling `iBGT` from the user and will revert while calling `iBGTVault(ibgtVault).stake()`.\\n```\\n  function lock(uint256 amount) external {\\n    uint256 mintAmount = _GiBGTMintAmount(amount);\\n    poolSize += amount;\\n    _refreshiBGT(amount); //@audit should call after depositing funds\\n    SafeTransferLib.safeTransferFrom(ibgt, msg.sender, address(this), amount);\\n    _mint(msg.sender, mintAmount);\\n    emit iBGTLock(msg.sender, amount);\\n  }\\n// rest of code\\n  function _refreshiBGT(uint256 ibgtAmount) internal {\\n    ERC20(ibgt).approve(ibgtVault, ibgtAmount);\\n    iBGTVault(ibgtVault).stake(ibgtAmount); //@audit will revert here\\n  }\\n```\\n
`_refreshiBGT()` should be called after pulling funds from the user.
Users can't lock `iBGT` as `lock()` always reverts.
```\\n  function lock(uint256 amount) external {\\n    uint256 mintAmount = _GiBGTMintAmount(amount);\\n    poolSize += amount;\\n    _refreshiBGT(amount); //@audit should call after depositing funds\\n    SafeTransferLib.safeTransferFrom(ibgt, msg.sender, address(this), amount);\\n    _mint(msg.sender, mintAmount);\\n    emit iBGTLock(msg.sender, amount);\\n  }\\n// rest of code\\n  function _refreshiBGT(uint256 ibgtAmount) internal {\\n    ERC20(ibgt).approve(ibgtVault, ibgtAmount);\\n    iBGTVault(ibgtVault).stake(ibgtAmount); //@audit will revert here\\n  }\\n```\\n