```\\nfunction lock(\\n    uint128 lockId,\\n    address tokenAddress,\\n    bytes32 recipient,\\n    bytes4 destination,\\n    uint256 amount\\n) external isActive {\\n    (uint256 amountToLock, uint256 fee, TokenInfo memory tokenInfo) = _createLock(\\n        lockId,\\n        tokenAddress,\\n        amount,\\n        recipient,\\n        destination\\n    );\\n\\n    require(tokenInfo.tokenStatus == TokenStatus.Enabled, "Bridge: disabled token");\\n\\n    if (tokenInfo.tokenType == TokenType.Native) {\\n        // If token is native - transfer tokens from user to contract\\n        IERC20(tokenAddress).safeTransferFrom(\\n            msg.sender,\\n            address(this),\\n            amountToLock\\n        );\\n    } else if (tokenInfo.tokenType == TokenType.Wrapped) {\\n        // If wrapped then butn the token\\n        WrappedToken(tokenAddress).burn(msg.sender, amountToLock);\\n    } else if (tokenInfo.tokenType == TokenType.WrappedV0) {\\n        // Legacy wrapped tokens burn\\n        IWrappedTokenV0(tokenAddress).burn(msg.sender, amountToLock);\\n    } else {\\n        revert("Bridge: invalid token type");\\n    }\\n\\n    if (fee > 0) {\\n        // If there is fee - transfer it to fee collector address\\n        IERC20(tokenAddress).safeTransferFrom(\\n            msg.sender,\\n            feeCollector,\\n            fee\\n        );\\n    }\\n}\\n```\\n