```\nDepositVault.sol\n    function withdraw(uint256 amount, uint256 nonce, bytes memory signature, address payable recipient) public {\n        require(nonce < deposits.length, "Invalid deposit index");\n        Deposit storage depositToWithdraw = deposits[nonce];//@audit-info non aligned with common understanding of nonce\n        bytes32 withdrawalHash = getWithdrawalHash(Withdrawal(amount, nonce));\n        address signer = withdrawalHash.recover(signature);\n        require(signer == depositToWithdraw.depositor, "Invalid signature");\n        require(!usedWithdrawalHashes[withdrawalHash], "Withdrawal has already been executed");\n        require(amount == depositToWithdraw.amount, "Withdrawal amount must match deposit amount");\n        usedWithdrawalHashes[withdrawalHash] = true;\n        depositToWithdraw.amount = 0;\n        if(depositToWithdraw.tokenAddress == address(0)){\n            recipient.transfer(amount);\n        } else {\n            IERC20 token = IERC20(depositToWithdraw.tokenAddress);\n            token.safeTransfer(recipient, amount);\n        }\n        emit WithdrawalMade(recipient, amount);\n    }\n```\n