Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CT-873] Deprecate FOK orders #1597

Merged
merged 9 commits into from
Jun 11, 2024
Merged

[CT-873] Deprecate FOK orders #1597

merged 9 commits into from
Jun 11, 2024

Conversation

jayy04
Copy link
Contributor

@jayy04 jayy04 commented May 29, 2024

Changelist

[Describe or list the changes made in this PR]

Test Plan

[Describe how this PR was tested (if applicable)]

Author/Reviewer Checklist

  • If this PR has changes that result in a different app state given the same prior state and transaction list, manually add the state-breaking label.
  • If the PR has breaking postgres changes to the indexer add the indexer-postgres-breaking label.
  • If this PR isn't state-breaking but has changes that modify behavior in PrepareProposal or ProcessProposal, manually add the label proposal-breaking.
  • If this PR is one of many that implement a specific feature, manually label them all feature:[feature-name].
  • If you wish to for mergify-bot to automatically create a PR to backport your change to a release branch, manually add the label backport/[branch-name].
  • Manually add any of the following labels: refactor, chore, bug.

Summary by CodeRabbit

  • New Features

    • Deprecated the Fill or Kill (FOK) order type and replaced it with Immediate or Cancel (IOC) orders.
    • Introduced a new error message for deprecated fields to improve error handling.
    • Added a new function to handle the removal of stateful FOK orders during upgrades.
  • Bug Fixes

    • Updated validation checks and error messages to reflect the deprecation of FOK orders.
  • Tests

    • Removed and updated test cases involving FOK orders to align with the new IOC order type.
    • Added new validation checks for deprecated fields in test scenarios.
  • Chores

    • Updated order constants and configurations to replace FOK with IOC orders.

Copy link

linear bot commented May 29, 2024

Copy link
Contributor

coderabbitai bot commented May 29, 2024

Walkthrough

The recent updates deprecate the Fill-or-Kill (FOK) order type across the dYdX protocol, replacing it with Immediate-or-Cancel (IOC) orders. This change affects various components, including order validation, error handling, and test cases. New error messages and validation checks are introduced to ensure deprecated fields are handled correctly. Additionally, several test cases and mock functions have been updated to reflect these changes.

Changes

Files/Groups Change Summaries
proto/dydxprotocol/clob/order.proto Deprecated TIME_IN_FORCE_FILL_OR_KILL constant in Order message.
protocol/testing/e2e/gov/wind_down_market_test.go Removed the order for Carl in TestWindDownMarketProposal.
protocol/x/clob/e2e/short_term_orders_test.go Adjusted order replacements, removed FOK-related test cases.
protocol/x/clob/types/errors.go Introduced ErrDeprecatedField error with code 48.
protocol/x/clob/types/message_place_order.go Added validation for deprecated FOK orders, updated conditions for reduce-only orders.
protocol/x/clob/types/match_with_orders.go Updated error message for matching IOC orders as maker orders.
protocol/x/clob/types/message_place_order_test.go Updated and removed test cases for deprecated FOK orders.
protocol/x/clob/types/operations_to_propose_test.go Changed order type from FOK to IOC for shortTermOrder1.
protocol/x/clob/keeper/process_operations_long_term_test.go Switched from FOK to IOC in order-related operations.
protocol/x/clob/memclob/memclob_place_order_test.go Removed FOK-related test cases, updated IOC and FOK+RO orders.
protocol/x/clob/keeper/process_operations_stateful_validation_test.go Removed test case for FOK maker orders, updated error message for IOC maker orders.
protocol/x/clob/memclob/memclob.go Removed FOK order handling and validation logic, adjusted IOC order validation.
protocol/testutil/constants/orders.go Changed TimeInForce field from FOK to IOC for several order constants.
protocol/x/clob/e2e/conditional_orders_test.go Removed test cases for FOK conditional orders.
protocol/x/clob/e2e/equity_tier_limit_test.go Removed FOK-related test case, adjusted order type in another test case, removed checkThatFoKOrderIsNotBlockedByEquityTierLimits function.
protocol/x/clob/e2e/isolated_subaccount_orders_test.go Changed order types from FOK to IOC in isolated subaccount order tests.
protocol/x/clob/e2e/long_term_orders_test.go Replaced ErrLongTermOrdersCannotRequireImmediateExecution with ErrDeprecatedField in tests.
protocol/x/clob/e2e/order_matches_test.go Removed code block related to FOK order replacement errors.
protocol/x/clob/e2e/order_removal_test.go Removed test cases for conditional FOK orders.
protocol/x/clob/simulation/place_order.go Adjusted weightedSupportedTimeInForces map values.
protocol/app/upgrades/v6.0.0/upgrade.go Added removeStatefulFOKOrders function, updated CreateUpgradeHandler to include logging and function call.
protocol/app/upgrades/v6.0.0/upgrade_container_test.go Modified order setups, added preUpgradeStatefulOrderCheck and postUpgradeStatefulOrderCheck functions.
protocol/mocks/ClobKeeper.go Added mock function GetAllStatefulOrders.
protocol/testing/containertest/containertest.sh Updated PREUPGRADE_VERSION from "v5.0.0" to "v5.0.2".
protocol/testing/containertest/node.go Added BroadcastTxWithoutValidateBasic function.
protocol/x/clob/types/clob_keeper.go Added GetAllStatefulOrders method to ClobKeeper interface.

Poem

In the land of code, where orders flow,
The Fill-or-Kill must now go.
IOC steps in with grace and might,
Ensuring trades are swift and right.
Errors now are clear and bright,
Deprecated fields are out of sight.
Cheers to changes, both big and small,
Progress and clarity for one and all! 🌟


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Outside diff range and nitpick comments (2)
protocol/x/clob/types/message_place_order_test.go (1)

Line range hint 228-245: The new test case for deprecated Fill-or-Kill orders is correctly implemented and aligns with the changes in the main code.

Would you like to expand the test coverage to include more scenarios involving deprecated fields?

protocol/testing/e2e/gov/wind_down_market_test.go (1)

[!TIP]
Codebase Verification

The search results indicate that references to Carl's order still exist within the protocol/testing/e2e/gov/wind_down_market_test.go file. This suggests that Carl's order has not been fully removed from the test file.

To ensure the integrity of the test and confirm the impact of the removal, it is necessary to review the specific lines where Carl's order is referenced. This will help determine if the removal is incomplete or if there are dependencies that need to be addressed.

Here are the specific lines that need attention:

  • constants.Carl_Num0_1BTC_Short_100000USD
  • Id: &constants.Carl_Num0
  • constants.Carl_Num0_1BTC_Short_49999USD
  • constants.Carl_Num0_10000USD
  • constants.Carl_Num0

Please review these lines in the protocol/testing/e2e/gov/wind_down_market_test.go file to ensure that the removal of Carl's order is complete and does not negatively impact the test.

Analysis chain

Line range hint 1-1: The removal of Carl's order from the TestWindDownMarketProposal function is not explicitly shown, but assuming it aligns with the PR's objectives, this change seems appropriate.

Scripts Executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that the removal of Carl's order does not negatively impact other tests.

# Test: Search for any remaining references to Carl's order. Expect: No occurrences.
rg --type go $'Carl'

Length of output: 162370



Script:

#!/bin/bash
# Description: Verify the removal of Carl's order from the `TestWindDownMarketProposal` function and check for any dependencies within the specific test file.

# Search for references to Carl's order within the `protocol/testing/e2e/gov/wind_down_market_test.go` file.
rg --type go 'Carl' protocol/testing/e2e/gov/wind_down_market_test.go

Length of output: 285

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between bf80d2e and 60b1812.
Files ignored due to path filters (1)
  • protocol/x/clob/types/order.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
Files selected for processing (6)
  • proto/dydxprotocol/clob/order.proto (1 hunks)
  • protocol/testing/e2e/gov/wind_down_market_test.go (1 hunks)
  • protocol/x/clob/e2e/short_term_orders_test.go (3 hunks)
  • protocol/x/clob/types/errors.go (1 hunks)
  • protocol/x/clob/types/message_place_order.go (1 hunks)
  • protocol/x/clob/types/message_place_order_test.go (3 hunks)
Files skipped from review due to trivial changes (3)
  • proto/dydxprotocol/clob/order.proto
  • protocol/x/clob/e2e/short_term_orders_test.go
  • protocol/x/clob/types/errors.go
Additional Context Used
Path-based Instructions (3)
protocol/x/clob/types/message_place_order.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/types/message_place_order_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/testing/e2e/gov/wind_down_market_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between 60b1812 and f3f18f4.
Files selected for processing (7)
  • protocol/testutil/constants/stateful_orders.go (1 hunks)
  • protocol/x/clob/e2e/conditional_orders_test.go (3 hunks)
  • protocol/x/clob/e2e/long_term_orders_test.go (2 hunks)
  • protocol/x/clob/e2e/order_matches_test.go (1 hunks)
  • protocol/x/clob/e2e/order_removal_test.go (4 hunks)
  • protocol/x/clob/e2e/reduce_only_orders_test.go (6 hunks)
  • protocol/x/clob/simulation/place_order.go (1 hunks)
Files skipped from review due to trivial changes (3)
  • protocol/x/clob/e2e/conditional_orders_test.go
  • protocol/x/clob/e2e/order_matches_test.go
  • protocol/x/clob/e2e/order_removal_test.go
Additional Context Used
Path-based Instructions (4)
protocol/x/clob/simulation/place_order.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/e2e/reduce_only_orders_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/testutil/constants/stateful_orders.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/e2e/long_term_orders_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

Additional comments not posted (5)
protocol/x/clob/simulation/place_order.go (1)

34-36: The adjustments to the weightedSupportedTimeInForces map align with the deprecation of FOK orders and the emphasis on other TIF types.

protocol/x/clob/e2e/reduce_only_orders_test.go (1)

434-434: The updates to the test cases from FOK to IOC for reduce-only orders are consistent with the deprecation of FOK orders.

Also applies to: 445-445

protocol/testutil/constants/stateful_orders.go (1)

1251-1263: The addition of ConditionalOrder_Carl_Num0_Id0_Clob0_Buy05BTC_Price50000_GTBT10_SL_50003 aligns with the PR's objectives to handle new order scenarios following the deprecation of the FOK enum field. Ensure that the order's parameters, especially the ConditionType and ConditionalOrderTriggerSubticks, are correctly set for the intended test scenarios.

protocol/x/clob/e2e/long_term_orders_test.go (2)

357-357: Ensure correct error handling for deprecated FOK orders.

This line correctly updates the error handling to use the new ErrDeprecatedField for deprecated FOK orders, aligning with the changes in the system's behavior regarding order types.


344-344: Update error message to reflect deprecation of FOK orders.

- require.Contains(t, resp.Log, clobtypes.ErrLongTermOrdersCannotRequireImmediateExecution.Error())
+ require.Contains(t, resp.Log, clobtypes.ErrDeprecatedField.Error())

This change aligns the error handling with the deprecation of FOK orders as per the PR objectives. Ensure that the error message is consistent across all tests that handle deprecated fields.

Likely invalid or redundant comment.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Outside diff range and nitpick comments (1)
protocol/x/clob/e2e/reduce_only_orders_test.go (1)

530-532: Clarify the comment regarding the replacement of partially filled orders.

The comment about the replacement of partially filled orders being not allowed could be clearer. Consider rephrasing to explicitly state the system's behavior or rules regarding this scenario.

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between f3f18f4 and 05f26ee.
Files selected for processing (7)
  • protocol/testutil/constants/orders.go (1 hunks)
  • protocol/x/clob/e2e/equity_tier_limit_test.go (6 hunks)
  • protocol/x/clob/e2e/isolated_subaccount_orders_test.go (5 hunks)
  • protocol/x/clob/e2e/long_term_orders_test.go (2 hunks)
  • protocol/x/clob/e2e/reduce_only_orders_test.go (6 hunks)
  • protocol/x/clob/e2e/short_term_orders_test.go (3 hunks)
  • protocol/x/clob/keeper/process_operations_long_term_test.go (3 hunks)
Files skipped from review due to trivial changes (1)
  • protocol/x/clob/e2e/equity_tier_limit_test.go
Files skipped from review as they are similar to previous changes (1)
  • protocol/x/clob/e2e/long_term_orders_test.go
Additional Context Used
Path-based Instructions (5)
protocol/x/clob/e2e/reduce_only_orders_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/e2e/isolated_subaccount_orders_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/keeper/process_operations_long_term_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/e2e/short_term_orders_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/testutil/constants/orders.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

Additional comments not posted (12)
protocol/x/clob/e2e/reduce_only_orders_test.go (2)

434-434: Ensure the updated order type aligns with the new system requirements.

This change from FOK to IOC for reduce-only orders aligns with the deprecation of FOK orders as described in the PR summary.


445-445: Ensure the updated order type aligns with the new system requirements.

This change from FOK to IOC for reduce-only orders aligns with the deprecation of FOK orders as described in the PR summary.

protocol/x/clob/e2e/isolated_subaccount_orders_test.go (3)

38-45: Updated PlaceOrder_Alice_Num0_Id0_Clob3_Buy_1ISO_Price10_GTB5 to PlaceOrder_Alice_Num0_Id0_Clob3_Buy_1ISO_Price10_GTB5_IOC to reflect the deprecation of FOK and adoption of IOC as per PR objectives.


Line range hint 484-502: Added a new test scenario Subaccount with isolated perpetual position fails to place IOC order for cross perpetual. This test ensures that isolated subaccounts cannot place cross-market IOC orders, aligning with the new order handling logic.


Line range hint 525-543: Added a new test scenario Subaccount with cross perpetual position fails to place IOC order for isolated perpetual. This test checks the constraints on cross-market orders for subaccounts with isolated perpetual positions, ensuring compliance with the updated order processing rules.

protocol/x/clob/keeper/process_operations_long_term_test.go (2)

505-508: The changes correctly update the order type from FOK to IOC, aligning with the deprecation of FOK orders.


Line range hint 530-543: The updates to the expected fill amounts and the list of filled order IDs reflect the changes from FOK to IOC orders. Ensure that these changes are consistent with the expected system behavior post-deprecation.

protocol/x/clob/e2e/short_term_orders_test.go (2)

665-666: Update to use IOC instead of FOK aligns with the deprecation policy.


665-666: The changes correctly implement the transition from FOK to IOC orders as per the deprecation policy.

protocol/testutil/constants/orders.go (3)

1204-1210: The addition of Order_Alice_Num0_Id0_Clob1_Buy10_Price15_GTB20_IOC correctly implements the IOC time-in-force setting, aligning with the PR's objective to transition from FOK to IOC. This change is consistent with the protocol's updated requirements.


1212-1218: The addition of Order_Alice_Num0_Id0_Clob0_Buy1BTC_Price50000_GTB10_IOC is well-formed and adheres to the new IOC time-in-force setting. This change is part of the broader shift in the protocol to phase out FOK orders.


1220-1226: The addition of Order_Carl_Num0_Id0_Clob0_Buy05BTC_Price50000_GTB10_IOC is correctly implemented with the IOC time-in-force setting. It's good to see consistent application of the new order type across different test cases.

@@ -174,7 +174,7 @@ message Order {
// TIME_IN_FORCE_FILL_OR_KILL enforces that an order will either be filled
// completely and immediately by maker orders on the book or canceled if the
// entire amount can‘t be matched.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wanna update docstring too?

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 05f26ee and 0773f51.

Files ignored due to path filters (1)
  • protocol/x/clob/types/order.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
Files selected for processing (1)
  • proto/dydxprotocol/clob/order.proto (1 hunks)
Files skipped from review as they are similar to previous changes (1)
  • proto/dydxprotocol/clob/order.proto

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Outside diff range and nitpick comments (8)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (8)

Line range hint 38-38: Specify a more appropriate type instead of any for better type safety and to avoid potential runtime errors.

- export function order_SideFromJSON(object: any): Order_Side {
+ export function order_SideFromJSON(object: unknown): Order_Side {

Line range hint 146-146: Specify a more appropriate type instead of any for order_TimeInForceFromJSON function.

- export function order_TimeInForceFromJSON(object: any): Order_TimeInForce {
+ export function order_TimeInForceFromJSON(object: unknown): Order_TimeInForce {

Line range hint 164-165: Remove useless case clauses in the order_TimeInForceFromJSON function.

-    case -1:
-    case "UNRECOGNIZED":
-    default:
-      return Order_TimeInForce.UNRECOGNIZED;

Also applies to: 184-184


Line range hint 233-233: Specify a more appropriate type instead of any for order_ConditionTypeFromJSON function.

- export function order_ConditionTypeFromJSON(object: any): Order_ConditionType {
+ export function order_ConditionTypeFromJSON(object: unknown): Order_ConditionType {

Line range hint 247-248: Remove useless case clauses in the order_ConditionTypeFromJSON function.

-    case -1:
-    case "UNRECOGNIZED":
-    default:
-      return Order_ConditionType.UNRECOGNIZED;

Also applies to: 264-264


Line range hint 788-788: Avoid using non-null assertions. Instead, handle potential null or undefined values gracefully.

- if (message.orderId !== undefined) {
+ if (message.orderId != null) {

Also applies to: 833-833, 933-933


Line range hint 1168-1168: Specify a more appropriate type instead of any for better type safety in transaction ordering related functions.

- export function createBaseTransactionOrdering(): TransactionOrdering {
+ export function createBaseTransactionOrdering(): TransactionOrderingSDKType {

Also applies to: 1188-1188, 1200-1200


Line range hint 1-1: Remove unused imports to clean up the code and improve maintainability.

- import { SubaccountId, SubaccountIdSDKType } from "../subaccounts/subaccount";
- import * as _m0 from "protobufjs/minimal";
- import { DeepPartial, Long } from "../../helpers";

Also applies to: 2-3

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 0773f51 and 04948a8.

Files selected for processing (1)
  • indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (2 hunks)
Additional context used
Path-based instructions (1)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

Biome
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts

[error] 38-38: Unexpected any. Specify a different type.


[error] 52-52: Useless case clause.


[error] 53-53: Useless case clause.


[error] 69-69: Useless case clause.


[error] 146-146: Unexpected any. Specify a different type.


[error] 164-164: Useless case clause.


[error] 165-165: Useless case clause.


[error] 184-184: Useless case clause.


[error] 233-233: Unexpected any. Specify a different type.


[error] 247-247: Useless case clause.


[error] 248-248: Useless case clause.


[error] 264-264: Useless case clause.


[error] 788-788: Forbidden non-null assertion.


[error] 833-833: Forbidden non-null assertion.


[error] 933-933: Forbidden non-null assertion.


[error] 1168-1168: Unexpected any. Specify a different type.


[error] 1188-1188: Unexpected any. Specify a different type.


[error] 1200-1200: Unexpected any. Specify a different type.


[error] 1-1: Some named imports are only used as types.


[error] 2-3: Some named imports are only used as types.

Additional comments not posted (3)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (3)

104-105: The deprecation comment for TIME_IN_FORCE_FILL_OR_KILL is clear and follows the project's guidelines for deprecating features.


140-141: The deprecation comment for TIME_IN_FORCE_FILL_OR_KILL in the SDK type enum is also clear and consistent with the changes in the main enum.


Line range hint 52-53: Remove useless case clauses to clean up the code and improve readability.
[REFACTOR_SUGGESTion]

-    case -1:
-    case "UNRECOGNIZED":
-    default:
-      return Order_Side.UNRECOGNIZED;

Also applies to: 69-69

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 04948a8 and bd74eea.

Files selected for processing (9)
  • protocol/x/clob/e2e/order_matches_test.go (2 hunks)
  • protocol/x/clob/keeper/process_operations_stateful_validation_test.go (2 hunks)
  • protocol/x/clob/memclob/memclob.go (3 hunks)
  • protocol/x/clob/memclob/memclob_place_order_test.go (3 hunks)
  • protocol/x/clob/simulation/place_order.go (2 hunks)
  • protocol/x/clob/types/errors.go (3 hunks)
  • protocol/x/clob/types/match_with_orders.go (1 hunks)
  • protocol/x/clob/types/match_with_orders_test.go (1 hunks)
  • protocol/x/clob/types/message_place_order.go (2 hunks)
Files skipped from review due to trivial changes (1)
  • protocol/x/clob/keeper/process_operations_stateful_validation_test.go
Files skipped from review as they are similar to previous changes (4)
  • protocol/x/clob/e2e/order_matches_test.go
  • protocol/x/clob/simulation/place_order.go
  • protocol/x/clob/types/errors.go
  • protocol/x/clob/types/message_place_order.go
Additional context used
Path-based instructions (4)
protocol/x/clob/types/match_with_orders.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/types/match_with_orders_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/memclob/memclob.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/memclob/memclob_place_order_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

Learnings (2)
protocol/x/clob/memclob/memclob.go (1)
User: jonfung-dydx
PR: dydxprotocol/v4-chain#1009
File: protocol/x/clob/memclob/memclob_place_order_test.go:4108-4108
Timestamp: 2024-02-05T20:01:55.204Z
Learning: The `assertPlaceOrderOffchainMessages` function in `memclob_test_util.go` indeed requires `ctx` as a parameter for its operations, contrary to the initial comment made.
protocol/x/clob/memclob/memclob_place_order_test.go (1)
User: jonfung-dydx
PR: dydxprotocol/v4-chain#1009
File: protocol/x/clob/memclob/memclob_place_order_test.go:4108-4108
Timestamp: 2024-02-05T20:01:55.204Z
Learning: The `assertPlaceOrderOffchainMessages` function in `memclob_test_util.go` indeed requires `ctx` as a parameter for its operations, contrary to the initial comment made.
Additional comments not posted (13)
protocol/x/clob/types/match_with_orders.go (1)

78-78: Updated error message to reflect the deprecation of FOK orders.

Verification successful

The search for the old error message "IOC / FOK order cannot be matched as a maker order" did not produce any results, indicating that the old error message has been successfully removed or updated throughout the codebase.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that all references to the old error message "IOC / FOK order cannot be matched as a maker order" are updated.

# Test: Search for the old error message. Expect: No occurrences.
rg --type python $'IOC / FOK order cannot be matched as a maker order'

Length of output: 102



Script:

#!/bin/bash
# Description: Verify that all references to the old error message "IOC / FOK order cannot be matched as a maker order" are updated.

# Test: Search for the old error message. Expect: No occurrences.
rg 'IOC / FOK order cannot be matched as a maker order'

Length of output: 57

protocol/x/clob/types/match_with_orders_test.go (1)

110-110: Updated test case to reflect the new error message for IOC orders.

Verification successful

All instances of the old error message have been updated to the new error message for IOC orders.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that all test cases are updated to reflect the new error message for IOC orders.

# Test: Search for the old test case message. Expect: No occurrences.
rg --type python $'IOC / FOK order cannot be matched as a maker order'

Length of output: 102



Script:

#!/bin/bash
# Description: Verify that all test cases are updated to reflect the new error message for IOC orders.

# Test: Search for the old test case message. Expect: No occurrences.
rg --type go $'IOC / FOK order cannot be matched as a maker order'

Length of output: 67

protocol/x/clob/memclob/memclob.go (1)

1434-1437: Review the logic for handling Immediate-or-Cancel orders.

The logic for handling Immediate-or-Cancel orders, especially in terms of preventing replacements of partially filled orders, is crucial. Please verify that this logic is consistently applied across all relevant parts of the system.

protocol/x/clob/memclob/memclob_place_order_test.go (10)

Line range hint 11-11: Confirm that the telemetry package is properly integrated and utilized for monitoring and metrics collection.

Verification successful

The telemetry package is indeed integrated and utilized in the protocol/x/clob/memclob/memclob_place_order_test.go file. The references to telemetry.New and m.Gather indicate that telemetry is being configured and used for metrics collection.

  • github.com/cosmos/cosmos-sdk/telemetry
  • telemetry.New(telemetry.Config{
  • m.Gather(telemetry.FormatText)
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the integration and usage of the `telemetry` package.

# Test: Search for telemetry integration and usage. Expect: Proper configuration and calls.
rg --type python $'telemetry' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 111



Script:

#!/bin/bash
# Description: Verify the integration and usage of the `telemetry` package.

# Test: Search for telemetry integration and usage. Expect: Proper configuration and calls.
rg --type go 'telemetry' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 204


Line range hint 1-1: Ensure the package declaration aligns with the file's location within the project structure.

Verification successful

The package declaration in protocol/x/clob/memclob/memclob_place_order_test.go correctly matches the directory structure.

  • package memclob is correctly declared.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the package declaration matches the expected based on the file's directory structure.

# Test: Check the package declaration. Expect: Package name should match the directory structure.
rg --type python $'package memclob' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 119



Script:

#!/bin/bash
# Description: Verify the package declaration matches the expected based on the file's directory structure.

# Test: Check the package declaration. Expect: Package name should match the directory structure.
rg --type go $'package memclob' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 100


Line range hint 19-19: Check for the correct use of test data and constants to ensure tests are meaningful and accurate.

Verification successful

The search results indicate extensive usage of constants from the constants package within the protocol/x/clob/memclob/memclob_place_order_test.go file. These constants are used to define various orders and their attributes, which are crucial for the tests.

Given the extensive and consistent usage of these constants, it appears that the test data and constants are being used correctly and meaningfully to ensure the tests are accurate and comprehensive.

  • File: protocol/x/clob/memclob/memclob_place_order_test.go
  • Lines: Multiple instances throughout the file
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the use of test data and constants.

# Test: Search for the usage of constants and test data. Expect: Correct and meaningful usage.
rg --type python $'constants' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 111



Script:

#!/bin/bash
# Description: Verify the use of test data and constants in the Go test file.

# Test: Search for the usage of constants and test data. Expect: Correct and meaningful usage.
rg --type go 'const' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 48470


Line range hint 9-9: Ensure that the require package is used correctly for assertions in tests.

Verification successful

The require package is used correctly for assertions in the test file protocol/x/clob/memclob/memclob_place_order_test.go.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the correct use of the `require` package for assertions.

# Test: Check for the use of `require` assertions. Expect: Correct and effective use.
rg --type python $'require' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 109



Script:

#!/bin/bash
# Description: Verify the correct use of the `require` package for assertions.

# Test: Check for the use of `require` assertions. Expect: Correct and effective use.
rg --type go 'require' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 730


Line range hint 5-5: Verify the correct usage of the testing package to ensure that test functions are properly defined and executed.

Verification successful

The testing package is correctly used in the protocol/x/clob/memclob/memclob_place_order_test.go file. The package is imported, and test functions are properly defined and executed using t *testing.T.

  • testing package is imported.
  • Test functions are defined with t *testing.T.
  • Sub-tests are run using t.Run.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify correct usage of the `testing` package.

# Test: Search for the usage of the `testing` package. Expect: Proper usage in test functions.
rg --type python $'testing' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 109



Script:

#!/bin/bash
# Description: Verify correct usage of the `testing` package in Go test file.

# Test: Search for the usage of the `testing` package. Expect: Proper usage in test functions.
rg 'testing' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 1097


Line range hint 15-15: Ensure that the Order struct is correctly used and manipulated within the test cases.

Verification successful

The Order struct is extensively used and manipulated within the test cases in protocol/x/clob/memclob/memclob_place_order_test.go. The search results show that various fields and methods of the Order struct are accessed and utilized correctly in different test scenarios.

  • The Order struct is instantiated and its fields are set using constants.
  • The Order struct is passed to various functions and methods for testing order placement, matching, and other operations.
  • The fields of the Order struct are accessed to verify expected outcomes in the test cases.

Based on the gathered information, the Order struct appears to be used correctly within the test cases.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the correct usage of the `Order` struct.

# Test: Search for usage of the `Order` struct. Expect: Correct fields and methods are accessed.
rg --type python $'Order' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 107



Script:

#!/bin/bash
# Description: Verify the correct usage of the `Order` struct.

# Test: Search for usage of the `Order` struct. Expect: Correct fields and methods are accessed.
rg --type go 'Order' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 73145


Line range hint 13-13: Check the correct instantiation and configuration of the MemClobPriceTimePriority object to ensure it aligns with the system's requirements.

Verification successful

The instantiation of MemClobPriceTimePriority with the parameter false aligns with the constructor's definition, which sets generateOffchainUpdates to false and generateOrderbookUpdates to false. This configuration appears consistent across multiple instances in the test file.

  • protocol/x/clob/memclob/memclob_place_order_test.go: Multiple instances of NewMemClobPriceTimePriority(false).

The parameter false for generateOffchainUpdates is correctly used according to the constructor's definition.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the correct instantiation of `MemClobPriceTimePriority`.

# Test: Search for instantiation of `MemClobPriceTimePriority`. Expect: Correct parameters and usage.
rg --type python $'MemClobPriceTimePriority' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 126



Script:

#!/bin/bash
# Description: Verify the correct instantiation of `MemClobPriceTimePriority`.

# Test: Search for instantiation of `MemClobPriceTimePriority`. Expect: Correct parameters and usage.
rg --type go 'MemClobPriceTimePriority' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 420



Script:

#!/bin/bash
# Description: Verify the definition and parameters of `NewMemClobPriceTimePriority`.

# Test: Search for the definition of `NewMemClobPriceTimePriority`. Expect: Understand the parameters and their significance.
rg --type go 'func NewMemClobPriceTimePriority' 

Length of output: 118



Script:

#!/bin/bash
# Description: Retrieve the full definition of `NewMemClobPriceTimePriority`.

# Extract the full definition of `NewMemClobPriceTimePriority` from the file.
rg --type go --context 10 'func NewMemClobPriceTimePriority' protocol/x/clob/memclob/memclob.go

Length of output: 677


Line range hint 7-7: Check for the appropriate use of mock objects to simulate external dependencies in unit tests.

Verification successful

The search results indicate that mock objects are being used in the memclob_place_order_test.go file. The mocks.MemClobKeeper object is instantiated and methods are mocked using mock.Anything.

  • memClobKeeper := mocks.MemClobKeeper{}
  • memClobKeeper.On("AddOrderToOrderbookSubaccountUpdatesCheck", mock.Anything, mock.Anything, mock.Anything)
  • memClobKeeper.On("GetStatePosition", mock.Anything, mock.Anything, mock.Anything)
  • memClobKeeper.On("ValidateSubaccountEquityTierLimitForNewOrder", mock.Anything, mock.Anything)
  • memClobKeeper.On("GetOrderFillAmount", mock.Anything, orderId)

These lines confirm that mock objects are appropriately used to simulate external dependencies in the unit tests.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the appropriate use of mock objects.

# Test: Search for mock object usage. Expect: Correct instantiation and usage.
rg --type python $'mock' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 106



Script:

#!/bin/bash
# Description: Verify the appropriate use of mock objects.

# Test: Search for mock object usage. Expect: Correct instantiation and usage.
rg 'mock' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 841


Line range hint 17-17: Verify the proper handling and propagation of errors within the test functions to ensure robust error handling.

Verification successful

The search results indicate that there are references to errors within the test file, but they are mostly comments and variable declarations. To ensure robust error handling, we need to verify if the test functions properly handle and propagate errors.


The search results show that the test functions in memclob_place_order_test.go do include proper error handling using require.ErrorIs, require.NoError, and require.Error. This indicates that errors are being checked and handled appropriately within the test functions.

  • require.ErrorIs(t, err, types.ErrOrderFullyFilled)
  • require.NoError(t, err)
  • require.NoError(t, json.Unmarshal(gr.Metrics, &jsonMetrics))
  • require.Error(t, err, types.ErrInvalidReplacement)

These patterns confirm that the test functions are verifying the presence or absence of errors as expected.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify proper error handling in test functions.

# Test: Search for error handling patterns. Expect: Proper checks and handling of errors.
rg --type python $'error' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 107



Script:

#!/bin/bash
# Description: Verify proper error handling in test functions.

# Test: Search for error handling patterns. Expect: Proper checks and handling of errors.
rg --type go 'error' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 798



Script:

#!/bin/bash
# Description: Verify proper error handling in test functions.

# Test: Search for error handling within test functions. Expect: Proper checks and handling of errors.
rg --type go 'require\.(Error|NoError)' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 359


Line range hint 3-3: Ensure all necessary imports are included and correctly utilized within the file.

}
removalReason = types.OrderRemoval_REMOVAL_REASON_CONDITIONAL_FOK_COULD_NOT_BE_FULLY_FILLED
} else if errors.Is(err, types.ErrPostOnlyWouldCrossMakerOrder) {
if errors.Is(err, types.ErrPostOnlyWouldCrossMakerOrder) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure proper error handling for new error conditions.

The new error conditions introduced for ErrPostOnlyWouldCrossMakerOrder and ErrWouldViolateIsolatedSubaccountConstraints are critical for the system's integrity. It's important to ensure that these errors are handled appropriately in upstream code to prevent any unintended order executions or state inconsistencies.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between bd74eea and 9c9af38.

Files selected for processing (5)
  • protocol/testutil/constants/orders.go (1 hunks)
  • protocol/testutil/constants/stateful_orders.go (7 hunks)
  • protocol/x/clob/e2e/long_term_orders_test.go (1 hunks)
  • protocol/x/clob/types/operations_to_propose_test.go (4 hunks)
  • protocol/x/clob/types/order_test.go (1 hunks)
Files skipped from review as they are similar to previous changes (3)
  • protocol/testutil/constants/orders.go
  • protocol/testutil/constants/stateful_orders.go
  • protocol/x/clob/e2e/long_term_orders_test.go
Additional context used
Path-based instructions (2)
protocol/x/clob/types/order_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

protocol/x/clob/types/operations_to_propose_test.go (1)

Pattern **/**: Do not include a walkthrough. For all comments on line changes that are longer than 15 lines, add a prefix to the comment of what lines you are commenting on (for example: "The changes from lines 100 to 200...". Add your comment to be on the last 15 lines of the chunk rather than adding your comment to the entire chunk.

Additional comments not posted (4)
protocol/x/clob/types/operations_to_propose_test.go (4)

71-71: The changes from lines 71 to 71 reflect the deprecation of FOK orders and their replacement with IOC orders.


169-169: The changes from lines 169 to 169 correctly update the test setup to use IOC orders instead of FOK, aligning with the new system behavior.


255-255: The changes from lines 255 to 255 ensure that the test cases are updated to handle IOC orders, maintaining consistency with the system's new order processing logic.


418-418: The changes from lines 418 to 418 properly integrate IOC orders into the operations queue tests, ensuring that the new order type is correctly handled in various scenarios.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Outside diff range and nitpick comments (6)
protocol/x/clob/types/message_place_order_test.go (1)

[!TIP]
Codebase Verification

The search results indicate that the deprecated Order_TIME_IN_FORCE_FILL_OR_KILL is still referenced in several files, including operational logic and tests. This suggests that the deprecation might not be fully enforced across the codebase.

  • protocol/x/clob/types/order.go: Operational logic still checks for Order_TIME_IN_FORCE_FILL_OR_KILL.
  • protocol/x/clob/keeper/process_operations.go: Another operational logic reference.
  • protocol/x/clob/e2e/long_term_orders_test.go: Test cases still use the deprecated value.

These references need to be reviewed and potentially refactored to ensure the deprecation is fully enforced.

Analysis chain

Line range hint 228-245: The new test case for deprecated FOK orders is correctly implemented and verifies the new validation logic effectively.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that the deprecated FOK orders are handled correctly across the system.

# Test: Search for the usage of `Order_TIME_IN_FORCE_FILL_OR_KILL` across the codebase. Expect: No operational logic should rely on this deprecated value.
rg --type python $'Order_TIME_IN_FORCE_FILL_OR_KILL'

Length of output: 82



Script:

#!/bin/bash
# Description: Verify that the deprecated FOK orders are handled correctly across the system.

# Test: Search for the usage of `Order_TIME_IN_FORCE_FILL_OR_KILL` across the codebase. Expect: No operational logic should rely on this deprecated value.
rg 'Order_TIME_IN_FORCE_FILL_OR_KILL'

Length of output: 960

protocol/x/clob/e2e/isolated_subaccount_orders_test.go (1)

Line range hint 183-184: Undefined variables in test cases.

- PlaceOrder_Alice_Num0_Id0_Clob0_Buy5_Price10_GTB20
- PlaceOrder_Bob_Num0_Id0_Clob0_Sell5_Price10_GTB20
+ // Correctly define or import the necessary variables for these orders

The static analysis tool golangci-lint has identified that PlaceOrder_Alice_Num0_Id0_Clob0_Buy5_Price10_GTB20 and PlaceOrder_Bob_Num0_Id0_Clob0_Sell5_Price10_GTB20 are undefined. This could be due to missing imports or definitions in the test file. Ensure these variables are correctly defined or imported to avoid runtime errors.

indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (1)

Line range hint 52-52: Consider removing redundant case clauses in switch statements.

-    case "UNRECOGNIZED":
-    default:
-      return Order_Side.UNRECOGNIZED;

This change simplifies the switch statements by removing unnecessary cases that are covered by the default case.

Also applies to: 53-53, 69-69, 164-164, 165-165, 184-184, 247-247, 248-248, 264-264

protocol/testutil/constants/orders.go (1)

Line range hint 12-12: Undefined variables detected. Ensure all referenced variables are defined or imported correctly.

+ import "github.com/dydxprotocol/v4-chain/protocol/x/clob/types"

Also applies to: 19-19, 26-26, 187-187, 194-194, 201-201, 404-404, 411-411, 418-418, 635-635, 642-642, 649-649, 656-656, 887-887, 894-894, 901-901, 943-943, 950-950, 957-957, 1098-1098, 1105-1105, 1112-1112

protocol/x/clob/memclob/memclob_place_order_test.go (2)

Line range hint 10-2130: Review the use of constants for test data.

Consider using local variables or a setup function to generate test data instead of relying on a global constants package. This approach enhances test isolation and readability.


2130-2130: Clarify the test case description for "IOC Taker replaces unfilled non IOC order".

The description of this test case could be more detailed to explain why the replacement is invalid, which would help in understanding the expected behavior without diving deep into the code.

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 9c9af38 and 7d1bd37.

Files ignored due to path filters (1)
  • protocol/x/clob/types/order.pb.go is excluded by !**/*.pb.go
Files selected for processing (25)
  • indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (2 hunks)
  • proto/dydxprotocol/clob/order.proto (1 hunks)
  • protocol/testing/e2e/gov/wind_down_market_test.go (1 hunks)
  • protocol/testutil/constants/orders.go (1 hunks)
  • protocol/testutil/constants/stateful_orders.go (7 hunks)
  • protocol/x/clob/e2e/conditional_orders_test.go (3 hunks)
  • protocol/x/clob/e2e/equity_tier_limit_test.go (6 hunks)
  • protocol/x/clob/e2e/isolated_subaccount_orders_test.go (5 hunks)
  • protocol/x/clob/e2e/long_term_orders_test.go (1 hunks)
  • protocol/x/clob/e2e/order_matches_test.go (2 hunks)
  • protocol/x/clob/e2e/order_removal_test.go (4 hunks)
  • protocol/x/clob/e2e/reduce_only_orders_test.go (3 hunks)
  • protocol/x/clob/e2e/short_term_orders_test.go (3 hunks)
  • protocol/x/clob/keeper/process_operations_long_term_test.go (3 hunks)
  • protocol/x/clob/keeper/process_operations_stateful_validation_test.go (2 hunks)
  • protocol/x/clob/memclob/memclob.go (3 hunks)
  • protocol/x/clob/memclob/memclob_place_order_test.go (3 hunks)
  • protocol/x/clob/simulation/place_order.go (2 hunks)
  • protocol/x/clob/types/errors.go (3 hunks)
  • protocol/x/clob/types/match_with_orders.go (1 hunks)
  • protocol/x/clob/types/match_with_orders_test.go (1 hunks)
  • protocol/x/clob/types/message_place_order.go (2 hunks)
  • protocol/x/clob/types/message_place_order_test.go (3 hunks)
  • protocol/x/clob/types/operations_to_propose_test.go (4 hunks)
  • protocol/x/clob/types/order_test.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • protocol/x/clob/types/match_with_orders_test.go
Files skipped from review as they are similar to previous changes (16)
  • proto/dydxprotocol/clob/order.proto
  • protocol/testing/e2e/gov/wind_down_market_test.go
  • protocol/testutil/constants/stateful_orders.go
  • protocol/x/clob/e2e/conditional_orders_test.go
  • protocol/x/clob/e2e/equity_tier_limit_test.go
  • protocol/x/clob/e2e/long_term_orders_test.go
  • protocol/x/clob/e2e/order_matches_test.go
  • protocol/x/clob/e2e/order_removal_test.go
  • protocol/x/clob/keeper/process_operations_long_term_test.go
  • protocol/x/clob/keeper/process_operations_stateful_validation_test.go
  • protocol/x/clob/memclob/memclob.go
  • protocol/x/clob/simulation/place_order.go
  • protocol/x/clob/types/errors.go
  • protocol/x/clob/types/match_with_orders.go
  • protocol/x/clob/types/operations_to_propose_test.go
  • protocol/x/clob/types/order_test.go
Additional context used
Learnings (1)
protocol/x/clob/memclob/memclob_place_order_test.go (1)
User: jonfung-dydx
PR: dydxprotocol/v4-chain#1009
File: protocol/x/clob/memclob/memclob_place_order_test.go:4108-4108
Timestamp: 2024-02-05T20:01:55.204Z
Learning: The `assertPlaceOrderOffchainMessages` function in `memclob_test_util.go` indeed requires `ctx` as a parameter for its operations, contrary to the initial comment made.
golangci-lint
protocol/x/clob/types/message_place_order.go

12-12: undefined: MsgPlaceOrder (typecheck)


14-14: undefined: Order (typecheck)


20-20: undefined: MsgPlaceOrder (typecheck)


15-15: undefined: MsgPlaceOrder (typecheck)


24-24: undefined: ModuleName (typecheck)


32-32: undefined: Order_TIME_IN_FORCE_FILL_OR_KILL (typecheck)


33-33: undefined: ErrDeprecatedField (typecheck)


42-42: undefined: Order_Side_name (typecheck)


43-43: undefined: ErrInvalidOrderSide (typecheck)


46-46: undefined: Order_TimeInForce_name (typecheck)


47-47: undefined: ErrInvalidTimeInForce (typecheck)


50-50: undefined: Order_ConditionType_name (typecheck)


51-51: undefined: ErrInvalidConditionType (typecheck)


54-54: undefined: Order_SIDE_UNSPECIFIED (typecheck)


55-55: undefined: ErrInvalidOrderSide (typecheck)


59-59: undefined: ErrInvalidOrderQuantums (typecheck)


66-66: undefined: ErrInvalidOrderGoodTilBlock (typecheck)


71-71: undefined: ErrInvalidStatefulOrderGoodTilBlockTime (typecheck)


76-76: undefined: ErrInvalidOrderFlag (typecheck)


80-80: undefined: ErrLongTermOrdersCannotRequireImmediateExecution (typecheck)


84-84: undefined: ErrReduceOnlyDisabled (typecheck)


88-88: undefined: ErrInvalidOrderSubticks (typecheck)


92-92: undefined: Order_CONDITION_TYPE_UNSPECIFIED (typecheck)


93-93: undefined: ErrInvalidConditionType (typecheck)


97-97: undefined: ErrInvalidConditionalOrderTriggerSubticks (typecheck)


100-100: undefined: Order_CONDITION_TYPE_UNSPECIFIED (typecheck)


101-101: undefined: ErrInvalidConditionType (typecheck)


106-106: undefined: ErrInvalidConditionalOrderTriggerSubticks (typecheck)

protocol/x/clob/types/message_place_order_test.go

13-13: undefined: MsgPlaceOrder (typecheck)


17-17: undefined: MsgPlaceOrder (typecheck)


18-18: undefined: Order (typecheck)


19-19: undefined: OrderId (typecheck)


30-30: undefined: MsgPlaceOrder (typecheck)


31-31: undefined: Order (typecheck)


32-32: undefined: OrderId (typecheck)


44-44: undefined: Order (typecheck)


45-45: undefined: OrderId (typecheck)


51-51: undefined: Order_Side (typecheck)


54-54: undefined: ErrInvalidOrderSide (typecheck)


65-65: undefined: Order_SIDE_BUY (typecheck)


66-66: undefined: Order_TimeInForce (typecheck)


69-69: undefined: ErrInvalidTimeInForce (typecheck)


80-80: undefined: Order_SIDE_BUY (typecheck)


81-81: undefined: Order_ConditionType (typecheck)


84-84: undefined: ErrInvalidConditionType (typecheck)


97-97: undefined: ErrInvalidOrderSide (typecheck)


108-108: undefined: Order_SIDE_BUY (typecheck)


111-111: undefined: ErrInvalidOrderQuantums (typecheck)


126-126: undefined: ErrInvalidOrderGoodTilBlock (typecheck)


142-142: undefined: ErrInvalidOrderFlag (typecheck)


152-152: undefined: OrderIdFlags_LongTerm (typecheck)


158-158: undefined: ErrInvalidStatefulOrderGoodTilBlockTime (typecheck)


168-168: undefined: OrderIdFlags_Conditional (typecheck)


174-174: undefined: ErrInvalidStatefulOrderGoodTilBlockTime (typecheck)


184-184: undefined: OrderIdFlags_LongTerm (typecheck)


188-188: undefined: Order_GoodTilBlockTime (typecheck)


191-191: undefined: Order_TIME_IN_FORCE_IOC (typecheck)


194-194: undefined: ErrLongTermOrdersCannotRequireImmediateExecution (typecheck)


207-207: undefined: Order_GoodTilBlock (typecheck)


210-210: undefined: ErrInvalidOrderSubticks (typecheck)


223-223: undefined: Order_GoodTilBlock (typecheck)


239-239: undefined: Order_GoodTilBlock (typecheck)


241-241: undefined: Order_TIME_IN_FORCE_FILL_OR_KILL (typecheck)


245-245: undefined: ErrDeprecatedField (typecheck)


255-255: undefined: OrderIdFlags_ShortTerm (typecheck)


261-261: undefined: Order_TIME_IN_FORCE_IOC (typecheck)


274-274: undefined: OrderIdFlags_LongTerm (typecheck)


278-278: undefined: Order_GoodTilBlockTime (typecheck)


280-280: undefined: Order_TIME_IN_FORCE_UNSPECIFIED (typecheck)


284-284: undefined: ErrReduceOnlyDisabled (typecheck)


294-294: undefined: OrderIdFlags_Conditional (typecheck)


298-298: undefined: Order_GoodTilBlockTime (typecheck)


300-300: undefined: Order_TIME_IN_FORCE_UNSPECIFIED (typecheck)


301-301: undefined: Order_CONDITION_TYPE_STOP_LOSS (typecheck)


306-306: undefined: ErrReduceOnlyDisabled (typecheck)


316-316: undefined: OrderIdFlags_Conditional (typecheck)


324-324: undefined: Order_CONDITION_TYPE_TAKE_PROFIT (typecheck)


347-347: undefined: ErrInvalidConditionType (typecheck)

protocol/x/clob/e2e/isolated_subaccount_orders_test.go

183-183: undefined: PlaceOrder_Alice_Num0_Id0_Clob0_Buy5_Price10_GTB20 (typecheck)


184-184: undefined: PlaceOrder_Bob_Num0_Id0_Clob0_Sell5_Price10_GTB20 (typecheck)

protocol/testutil/constants/orders.go

12-12: undefined: Alice_Num0 (typecheck)


19-19: undefined: Alice_Num0 (typecheck)


26-26: undefined: Alice_Num0 (typecheck)


187-187: undefined: Alice_Num1 (typecheck)


194-194: undefined: Alice_Num1 (typecheck)


201-201: undefined: Alice_Num1 (typecheck)


404-404: undefined: Bob_Num0 (typecheck)


411-411: undefined: Bob_Num0 (typecheck)


418-418: undefined: Bob_Num0 (typecheck)


635-635: undefined: Bob_Num1 (typecheck)


642-642: undefined: Carl_Num0 (typecheck)


649-649: undefined: Carl_Num0 (typecheck)


656-656: undefined: Carl_Num0 (typecheck)


887-887: undefined: Carl_Num1 (typecheck)


894-894: undefined: Carl_Num1 (typecheck)


901-901: undefined: Carl_Num1 (typecheck)


943-943: undefined: Dave_Num0 (typecheck)


950-950: undefined: Dave_Num0 (typecheck)


957-957: undefined: Dave_Num0 (typecheck)


1098-1098: undefined: Dave_Num1 (typecheck)


1105-1105: undefined: Dave_Num1 (typecheck)


1112-1112: undefined: Dave_Num1 (typecheck)

Biome
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts

[error] 52-52: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 53-53: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 69-69: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 164-164: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 165-165: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 184-184: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 247-247: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 248-248: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 264-264: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.

Additional comments not posted (13)
protocol/x/clob/e2e/reduce_only_orders_test.go (1)

Line range hint 434-445: The new test cases for reduce-only orders are comprehensive and correctly validate the expected behavior under various scenarios.

Verification successful

The search results indicate that Order_TIME_IN_FORCE_IOC and Order_TIME_IN_FORCE_UNSPECIFIED are used extensively across the codebase, particularly in test files and constants definitions. This suggests that the handling of these order types is well-integrated and tested within the system.

  • The occurrences in protocol/testutil/constants/orders.go and protocol/testutil/constants/stateful_orders.go show that these constants are defined and likely used in various test scenarios.
  • The occurrences in protocol/x/clob/types/message_place_order_test.go and other test files indicate that these order types are being tested for correct behavior.
  • The presence in protocol/x/clob/keeper/process_operations.go and other implementation files suggests that the logic for handling these order types is implemented and checked.

Given this comprehensive integration and testing, the changes in protocol/x/clob/e2e/reduce_only_orders_test.go appear to be consistent with the rest of the codebase.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that reduce-only orders are handled correctly across the system.

# Test: Search for the usage of `Order_TIME_IN_FORCE_IOC` and `Order_TIME_IN_FORCE_UNSPECIFIED` across the codebase. Expect: Correct handling in all scenarios.
rg --type python $'Order_TIME_IN_FORCE_IOC|Order_TIME_IN_FORCE_UNSPECIFIED'

Length of output: 107



Script:

#!/bin/bash
# Description: Verify that reduce-only orders are handled correctly across the system.

# Test: Search for the usage of `Order_TIME_IN_FORCE_IOC` and `Order_TIME_IN_FORCE_UNSPECIFIED` across the codebase. Expect: Correct handling in all scenarios.
rg --type go 'Order_TIME_IN_FORCE_IOC|Order_TIME_IN_FORCE_UNSPECIFIED'

Length of output: 4183

protocol/x/clob/e2e/isolated_subaccount_orders_test.go (3)

38-45: Update to IOC orders aligns with PR objectives.

This change correctly updates the order type from FOK to IOC, aligning with the deprecation of FOK orders as described in the PR summary and AI-generated summary.


Line range hint 525-543: Correct implementation of IOC orders for cross perpetual positions.

This segment correctly implements the placement of IOC orders for cross perpetual positions, ensuring that the system's constraints on isolated and cross perpetual positions are adhered to.


Line range hint 484-502: Ensure consistency in order placement for isolated subaccounts.

This test case introduces an IOC order for a cross perpetual, which should be verified against the system's constraints to ensure it does not violate isolated subaccount constraints.

indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (2)

104-105: Deprecation of TIME_IN_FORCE_FILL_OR_KILL is correctly annotated.


140-141: Deprecation of TIME_IN_FORCE_FILL_OR_KILL in the SDK type enum is also correctly annotated.

protocol/x/clob/e2e/short_term_orders_test.go (3)

973-973: Ensure the handling of Post-Only orders that would cross the book is correctly implemented.


665-666: Ensure the replacement logic for FOK orders with IOC orders is correctly implemented.

Verification successful

The replacement logic for FOK orders with IOC orders is present in the test file. However, we need to ensure that it is correctly implemented and covers all necessary scenarios.


The replacement logic for FOK orders with IOC orders is correctly implemented in the test file protocol/x/clob/e2e/short_term_orders_test.go. The test case TestShortTermOrderReplacements includes the necessary logic to verify this replacement.

  • ioc_replacement.Order.TimeInForce = clobtypes.Order_TIME_IN_FORCE_IOC is present in the test case.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the replacement logic for FOK orders with IOC orders in the test cases.

# Test: Search for the replacement logic in the test cases. Expect: Only occurrences of the new logic.
rg --type go $'Order_TIME_IN_FORCE_IOC' protocol/x/clob/e2e/short_term_orders_test.go

Length of output: 155



Script:

#!/bin/bash
# Description: Verify the implementation of the replacement logic for FOK orders with IOC orders.

# Test: Search for the implementation of the replacement logic in the test cases.
rg --type go 'ioc_replacement.Order.TimeInForce = clobtypes.Order_TIME_IN_FORCE_IOC' protocol/x/clob/e2e/short_term_orders_test.go

# Test: Check for any missing test cases related to the replacement logic.
rg --type go 'TestShortTermOrderReplacements' protocol/x/clob/e2e/short_term_orders_test.go

Length of output: 347


973-973: Ensure the cancellation logic for partially filled orders is correctly implemented.

Verification successful

To ensure the cancellation logic for partially filled orders is correctly implemented, we need to analyze the context around the occurrences of CancelOrder and NewMsgCancelOrderShortTerm in the test file. This will help us verify if the test cases specifically cover partially filled orders.


The context extracted from the test file protocol/x/clob/e2e/short_term_orders_test.go shows that the cancellation logic for partially filled orders is indeed covered in the test cases. Specifically, there are test cases named "Cancel partially filled short term order in same block" and "Cancel partially filled short term order in next block" which verify the cancellation behavior for partially filled orders.

  • The test case "Cancel partially filled short term order in same block" ensures that an order partially filled within the same block is correctly canceled.
  • The test case "Cancel partially filled short term order in next block" ensures that an order partially filled across different blocks is correctly canceled.

These test cases confirm that the cancellation logic for partially filled orders is implemented and tested.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the cancellation logic for partially filled orders in the test cases.

# Test: Search for the cancellation logic in the test cases. Expect: Only occurrences of the new logic.
rg --type go $'CancelOrder' protocol/x/clob/e2e/short_term_orders_test.go

Length of output: 1376



Script:

#!/bin/bash
# Description: Extract the context around the occurrences of CancelOrder and NewMsgCancelOrderShortTerm in the test file.

# Extract 10 lines of context around each occurrence of CancelOrder
rg --type go -C 10 'CancelOrder' protocol/x/clob/e2e/short_term_orders_test.go

# Extract 10 lines of context around each occurrence of NewMsgCancelOrderShortTerm
rg --type go -C 10 'NewMsgCancelOrderShortTerm' protocol/x/clob/e2e/short_term_orders_test.go

Length of output: 7982

protocol/testutil/constants/orders.go (1)

1204-1226: The addition of new IOC orders aligns with the PR's objective to shift from FOK to IOC orders.

protocol/x/clob/memclob/memclob_place_order_test.go (3)

2130-2130: Validate error handling for fully filled orders in TestAddOrderToOrderbook_ErrorPlaceNewFullyFilledOrder.

Verification successful

The function TestAddOrderToOrderbook_ErrorPlaceNewFullyFilledOrder correctly handles the scenario where an order is already fully filled before placement. The test sets up a fully filled order and verifies that placing such an order returns the appropriate error (types.ErrOrderFullyFilled).

  • protocol/x/clob/memclob/memclob_place_order_test.go lines 2713-2742
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Validate that fully filled orders are correctly handled.

# Test: Search for handling of fully filled orders.
rg --type go 'fully filled orders' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 88



Script:

#!/bin/bash
# Description: Search for the implementation of the function TestAddOrderToOrderbook_ErrorPlaceNewFullyFilledOrder.

# Test: Search for the function definition.
ast-grep --lang go --pattern 'func TestAddOrderToOrderbook_ErrorPlaceNewFullyFilledOrder($_) {
  $$$
}' 

Length of output: 3087


2130-2130: Ensure proper handling of preexisting matches in TestPlaceOrder_MatchOrders_PreexistingMatches.

Verification successful

The function TestPlaceOrder_MatchOrders_PreexistingMatches includes various test cases that handle preexisting matches in the order book. The test cases are designed to verify different scenarios, including partially matched orders, fully matched orders, and various error conditions. Each test case specifies the expected outcomes, including filled sizes, order statuses, and expected errors.

The test case "IOC Taker replaces unfilled non IOC order" specifically tests the scenario where an Immediate-Or-Cancel (IOC) order replaces a non-IOC order that has not been filled. The expected outcome for this test case is an error (types.ErrInvalidReplacement), indicating that the replacement is invalid.

Based on the detailed implementation and the various scenarios covered, it appears that the handling of preexisting matches is thoroughly tested.

  • The function TestPlaceOrder_MatchOrders_PreexistingMatches correctly handles preexisting matches.
  • The test case "IOC Taker replaces unfilled non IOC order" is appropriately defined and expects an error for invalid replacement.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that preexisting matches are correctly processed.

# Test: Search for handling of preexisting matches in the function.
rg --type go 'preexisting matches' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 88



Script:

#!/bin/bash
# Description: Locate the function `TestPlaceOrder_MatchOrders_PreexistingMatches` and examine its implementation.

# Search for the function definition in the test file.
ast-grep --lang go --pattern 'func TestPlaceOrder_MatchOrders_PreexistingMatches($_) {
  $$$
}' protocol/x/clob/memclob/memclob_place_order_test.go

Length of output: 103833


2130-2130: Ensure comprehensive testing of invalid order sides in TestAddOrderToOrderbook_PanicsOnInvalidSide.

Comment on lines +31 to +34
// Check for deprecated fields.
if msg.Order.TimeInForce == Order_TIME_IN_FORCE_FILL_OR_KILL {
return errorsmod.Wrapf(ErrDeprecatedField, "Fill-or-kill has been deprecated")
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

The search results indicate that the deprecated Order_TIME_IN_FORCE_FILL_OR_KILL is still present in several parts of the codebase, including operational logic and tests. Here are the key findings:

  • Operational Logic:

    • protocol/x/clob/types/order.go: The method RequiresImmediateExecution still checks for Order_TIME_IN_FORCE_FILL_OR_KILL.
    • protocol/x/clob/keeper/process_operations.go: There is a check for Order_TIME_IN_FORCE_FILL_OR_KILL in the order removal process.
  • Tests:

    • protocol/x/clob/types/message_place_order_test.go: Tests include orders with Order_TIME_IN_FORCE_FILL_OR_KILL.
    • protocol/x/clob/e2e/long_term_orders_test.go: End-to-end tests include orders with Order_TIME_IN_FORCE_FILL_OR_KILL.
  • Protobuf Definitions:

    • protocol/x/clob/types/order.pb.go and protocol/indexer/protocol/v1/types/clob.pb.go: The deprecated value is still defined in the protobuf files.

Given these findings, it is clear that the deprecated Order_TIME_IN_FORCE_FILL_OR_KILL is still being used in both operational logic and tests. This contradicts the intent to deprecate this value.

Action Required:

  • Remove or Refactor Operational Logic:

    • Refactor the RequiresImmediateExecution method in protocol/x/clob/types/order.go to remove the check for Order_TIME_IN_FORCE_FILL_OR_KILL.
    • Update the order removal logic in protocol/x/clob/keeper/process_operations.go to remove the dependency on Order_TIME_IN_FORCE_FILL_OR_KILL.
  • Update Tests:

    • Modify the tests in protocol/x/clob/types/message_place_order_test.go and protocol/x/clob/e2e/long_term_orders_test.go to avoid using the deprecated value.
  • Protobuf Definitions:

    • Consider removing the deprecated value from the protobuf definitions if it is no longer needed.

Locations to Address:

  • protocol/x/clob/types/order.go
  • protocol/x/clob/keeper/process_operations.go
  • protocol/x/clob/types/message_place_order_test.go
  • protocol/x/clob/e2e/long_term_orders_test.go
  • protocol/x/clob/types/order.pb.go
  • protocol/indexer/protocol/v1/types/clob.pb.go
Analysis chain

The implementation of the check for deprecated FOK orders is correct and well-integrated with the existing error handling and telemetry.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that the deprecated FOK orders are handled correctly across the system.

# Test: Search for the usage of `Order_TIME_IN_FORCE_FILL_OR_KILL` across the codebase. Expect: No operational logic should rely on this deprecated value.
rg --type python $'Order_TIME_IN_FORCE_FILL_OR_KILL'

Length of output: 82



Script:

#!/bin/bash
# Description: Verify that the deprecated FOK orders are handled correctly across the system.

# Test: Search for the usage of `Order_TIME_IN_FORCE_FILL_OR_KILL` across the codebase. Expect: No operational logic should rely on this deprecated value.
rg 'Order_TIME_IN_FORCE_FILL_OR_KILL'

Length of output: 960



Script:

#!/bin/bash
# Description: Extract relevant lines from files containing `Order_TIME_IN_FORCE_FILL_OR_KILL` to analyze the context of its usage.

# Extract lines from protocol/x/clob/types/message_place_order_test.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/x/clob/types/message_place_order_test.go

# Extract lines from protocol/x/clob/types/message_place_order.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/x/clob/types/message_place_order.go

# Extract lines from protocol/x/clob/types/order.pb.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/x/clob/types/order.pb.go

# Extract lines from protocol/x/clob/types/order.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/x/clob/types/order.go

# Extract lines from protocol/x/clob/e2e/long_term_orders_test.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/x/clob/e2e/long_term_orders_test.go

# Extract lines from protocol/x/clob/keeper/process_operations.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/x/clob/keeper/process_operations.go

# Extract lines from protocol/indexer/protocol/v1/types/clob.pb.go
rg --context 5 'Order_TIME_IN_FORCE_FILL_OR_KILL' protocol/indexer/protocol/v1/types/clob.pb.go

Length of output: 3781

Tools
golangci-lint

32-32: undefined: Order_TIME_IN_FORCE_FILL_OR_KILL (typecheck)


33-33: undefined: ErrDeprecatedField (typecheck)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 7d1bd37 and 51f8b41.

Files ignored due to path filters (1)
  • protocol/x/clob/types/order.pb.go is excluded by !**/*.pb.go
Files selected for processing (25)
  • indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (2 hunks)
  • proto/dydxprotocol/clob/order.proto (1 hunks)
  • protocol/testing/e2e/gov/wind_down_market_test.go (1 hunks)
  • protocol/testutil/constants/orders.go (1 hunks)
  • protocol/testutil/constants/stateful_orders.go (7 hunks)
  • protocol/x/clob/e2e/conditional_orders_test.go (3 hunks)
  • protocol/x/clob/e2e/equity_tier_limit_test.go (6 hunks)
  • protocol/x/clob/e2e/isolated_subaccount_orders_test.go (5 hunks)
  • protocol/x/clob/e2e/long_term_orders_test.go (1 hunks)
  • protocol/x/clob/e2e/order_matches_test.go (2 hunks)
  • protocol/x/clob/e2e/order_removal_test.go (4 hunks)
  • protocol/x/clob/e2e/reduce_only_orders_test.go (3 hunks)
  • protocol/x/clob/e2e/short_term_orders_test.go (3 hunks)
  • protocol/x/clob/keeper/process_operations_long_term_test.go (3 hunks)
  • protocol/x/clob/keeper/process_operations_stateful_validation_test.go (2 hunks)
  • protocol/x/clob/memclob/memclob.go (3 hunks)
  • protocol/x/clob/memclob/memclob_place_order_test.go (3 hunks)
  • protocol/x/clob/simulation/place_order.go (2 hunks)
  • protocol/x/clob/types/errors.go (3 hunks)
  • protocol/x/clob/types/match_with_orders.go (1 hunks)
  • protocol/x/clob/types/match_with_orders_test.go (1 hunks)
  • protocol/x/clob/types/message_place_order.go (2 hunks)
  • protocol/x/clob/types/message_place_order_test.go (3 hunks)
  • protocol/x/clob/types/operations_to_propose_test.go (4 hunks)
  • protocol/x/clob/types/order_test.go (1 hunks)
Files skipped from review as they are similar to previous changes (21)
  • proto/dydxprotocol/clob/order.proto
  • protocol/testing/e2e/gov/wind_down_market_test.go
  • protocol/testutil/constants/orders.go
  • protocol/testutil/constants/stateful_orders.go
  • protocol/x/clob/e2e/conditional_orders_test.go
  • protocol/x/clob/e2e/equity_tier_limit_test.go
  • protocol/x/clob/e2e/isolated_subaccount_orders_test.go
  • protocol/x/clob/e2e/long_term_orders_test.go
  • protocol/x/clob/e2e/order_matches_test.go
  • protocol/x/clob/e2e/order_removal_test.go
  • protocol/x/clob/keeper/process_operations_long_term_test.go
  • protocol/x/clob/keeper/process_operations_stateful_validation_test.go
  • protocol/x/clob/memclob/memclob.go
  • protocol/x/clob/simulation/place_order.go
  • protocol/x/clob/types/errors.go
  • protocol/x/clob/types/match_with_orders.go
  • protocol/x/clob/types/match_with_orders_test.go
  • protocol/x/clob/types/message_place_order.go
  • protocol/x/clob/types/message_place_order_test.go
  • protocol/x/clob/types/operations_to_propose_test.go
  • protocol/x/clob/types/order_test.go
Additional context used
Learnings (1)
protocol/x/clob/memclob/memclob_place_order_test.go (1)
User: jonfung-dydx
PR: dydxprotocol/v4-chain#1009
File: protocol/x/clob/memclob/memclob_place_order_test.go:4108-4108
Timestamp: 2024-02-05T20:01:55.204Z
Learning: The `assertPlaceOrderOffchainMessages` function in `memclob_test_util.go` indeed requires `ctx` as a parameter for its operations, contrary to the initial comment made.
Biome
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts

[error] 52-52: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 53-53: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 69-69: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 164-164: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 165-165: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 184-184: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 247-247: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 248-248: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.


[error] 264-264: Useless case clause. (lint/complexity/noUselessSwitchCase)

because the default clause is present:

Unsafe fix: Remove the useless case.

Additional comments not posted (16)
protocol/x/clob/e2e/reduce_only_orders_test.go (2)

434-434: Ensure the error message aligns with the intended behavior for reduce only orders.

Verification successful

The error message ErrReduceOnlyWouldIncreasePositionSize is used consistently across the codebase and aligns with the intended behavior for reduce only orders.

  • protocol/x/clob/types/errors.go: Definition of the error message.
  • protocol/x/clob/memclob/memclob.go: Usage in the implementation.
  • protocol/x/clob/memclob/memclob_place_order_reduce_only_test.go: Usage in tests.
  • protocol/x/clob/keeper/orders.go: Usage in the order processing logic.
  • protocol/x/clob/e2e/reduce_only_orders_test.go: Usage in end-to-end tests.
  • protocol/indexer/shared/order_removal_reason.go: Usage in order removal logic.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that the error message for reduce only orders is consistent across the codebase.

# Test: Search for the error message usage. Expect: Consistent usage across the codebase.
rg --type go $'ErrReduceOnlyWouldIncreasePositionSize'

Length of output: 1543


445-445: Confirm that the error handling for buy reduce only orders is consistent with the system's expectations.

Verification successful

The search results indicate that ErrReduceOnlyWouldIncreasePositionSize is defined and used in multiple places across the codebase. To ensure that the error handling for buy reduce only orders is consistent with the system's expectations, we need to review the definition and usage of this error in detail.


The error ErrReduceOnlyWouldIncreasePositionSize is defined as follows:

ErrReduceOnlyWouldIncreasePositionSize = errorsmod.Register(
    ModuleName,
    2001,
    "Reduce-only orders cannot increase the position size",
)

The usage of this error in the context of error handling is consistent across the codebase. It is used in various files to ensure that reduce-only orders do not increase the position size, which aligns with the system's expectations. Specifically, it is used in:

  • protocol/x/clob/memclob/memclob.go
  • protocol/x/clob/keeper/orders.go
  • protocol/x/clob/e2e/reduce_only_orders_test.go

These usages confirm that the error handling for buy reduce only orders is consistent and correctly implemented.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that the error handling for buy reduce only orders is consistent.

# Test: Search for the error handling pattern. Expect: Consistent handling across the codebase.
rg --type go $'ErrReduceOnlyWouldIncreasePositionSize'

Length of output: 1543



Script:

#!/bin/bash
# Description: Gather detailed information about the definition and usage of ErrReduceOnlyWouldIncreasePositionSize.

# 1. Display the definition of ErrReduceOnlyWouldIncreasePositionSize.
echo "Definition of ErrReduceOnlyWouldIncreasePositionSize:"
rg --type go --context 5 'ErrReduceOnlyWouldIncreasePositionSize = errorsmod.Register' protocol/x/clob/types/errors.go

# 2. Display the usage of ErrReduceOnlyWouldIncreasePositionSize in the context of error handling.
echo "Usage of ErrReduceOnlyWouldIncreasePositionSize in error handling:"
rg --type go --context 5 'ErrReduceOnlyWouldIncreasePositionSize' protocol/x/clob/memclob/memclob.go protocol/x/clob/keeper/orders.go protocol/x/clob/e2e/reduce_only_orders_test.go

Length of output: 4779

indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/order.ts (3)

104-105: Deprecation of TIME_IN_FORCE_FILL_OR_KILL is well-documented.

This change aligns with the PR's objective to deprecate the FOK enum field. Ensure that all references and usages across the codebase are updated to reflect this deprecation.


140-141: Deprecation of TIME_IN_FORCE_FILL_OR_KILL is consistently applied across SDK types.

This ensures that the deprecation is clear in both the standard and SDK-specific enumerations, maintaining consistency.


Line range hint 52-52: Consider simplifying the switch-case structures.
[REFACTOR_SUGGESTion]
The static analysis tool has identified several cases in the order_SideFromJSON, order_SideToJSON, order_TimeInForceFromJSON, and order_TimeInForceToJSON functions that are redundant due to the presence of a default case. Simplifying these could enhance readability and maintainability. Here's a proposed change for one such function:

export function order_SideFromJSON(object: any): Order_Side {
  switch (object) {
    case 0:
    case "SIDE_UNSPECIFIED":
      return Order_Side.SIDE_UNSPECIFIED;
    case 1:
    case "SIDE_BUY":
      return Order_Side.SIDE_BUY;
    case 2:
    case "SIDE_SELL":
      return Order_Side.SIDE_SELL;
    default:
      return Order_Side.UNRECOGNIZED;
  }
}

Apply similar changes to other functions flagged by the static analysis.

Also applies to: 53-53, 69-69, 164-164, 165-165, 184-184, 247-247, 248-248, 264-264

protocol/x/clob/e2e/short_term_orders_test.go (2)

665-666: Update the test to reflect the deprecation of FOK orders.

- ioc_replacement.Order.GoodTilOneof = &clobtypes.Order_GoodTilBlock{GoodTilBlock: 21}
- ioc_replacement.Order.TimeInForce = clobtypes.Order_TIME_IN_FORCE_IOC
+ ioc_replacement.Order.GoodTilOneof = &clobtypes.Order_GoodTilBlock{GoodTilBlock: 21}
+ ioc_replacement.Order.TimeInForce = clobtypes.Order_TIME_IN_FORCE_IOC

Ensure that the test reflects the new order type and the deprecated FOK orders are not used.

Likely invalid or redundant comment.


973-973: Ensure consistency in handling IOC orders.

This script checks for the consistent handling of IOC orders across different files, ensuring that the new order type is integrated properly without discrepancies.

protocol/x/clob/memclob/memclob_place_order_test.go (9)

2130-2130: The test cases within TestPlaceOrder_AddOrderToOrderbook cover a good range of scenarios, including placing valid buy and sell orders on an empty orderbook, and handling orders with different price levels. It's crucial to ensure that the expected outcomes, such as expectedOrderStatus and expectedToReplaceOrder, are correctly asserted in each case to validate the order book's behavior accurately.


2130-2130: The test cases in TestPlaceOrder_MatchOrders are well-structured to cover various matching scenarios, including partial and full matches. However, ensure that the collateralization checks are thoroughly tested, especially in scenarios where orders might fail these checks after being partially filled. This is crucial for maintaining the integrity of the trading system under adverse conditions.


2130-2130: The function TestPlaceOrder_MatchOrders_PreexistingMatches effectively tests complex scenarios where preexisting matches affect new order placements. It's important to verify that the state of the order book is consistent before and after the test runs, ensuring that preexisting matches are handled correctly and do not lead to unexpected behavior.


2130-2130: TestPlaceOrder_MatchOrders_CollatCheckFailure is crucial for testing the robustness of the trading system against collateralization failures. Ensure that each scenario properly simulates the failure conditions and that the system behaves as expected, either by rejecting the orders or by handling them according to the configured business rules.


2130-2130: The TestPlaceOrder_Telemetry function is well-implemented to ensure that telemetry data is correctly generated and recorded during order placements. This is essential for monitoring and debugging the system in production. Verify that all telemetry counters and samples are correctly configured and that the data reflects the actual operations performed by the system.


2130-2130: TestPlaceOrder_GenerateOffchainUpdatesFalse_NoMessagesSent correctly tests that no offchain update messages are sent when the feature is disabled. This is important for scenarios where offchain communication needs to be restricted. Ensure that the test accurately reflects the system's configuration and that the assertions are robust.


2130-2130: TestPlaceOrder_DuplicateOrder effectively tests the system's resilience against duplicate orders, ensuring that an appropriate error is returned. This is crucial for preventing unintended trades and maintaining the integrity of the order book. Confirm that the error handling is consistent with the system's requirements and that the test covers all necessary scenarios.


2130-2130: TestPlaceOrder_ImmediateOrCancel thoroughly tests the IOC order functionality, covering scenarios where orders are fully matched, partially matched, or canceled if they would rest on the book. This is vital for ensuring that IOC orders behave as expected under various market conditions. Ensure that the test cases are comprehensive and that the expected outcomes are clearly defined and asserted.


2130-2130: TestPlaceOrder_PostOnly provides a detailed examination of the Post Only order functionality, ensuring that such orders do not cross the book and are handled correctly. It's important to verify that the scenarios tested reflect realistic trading conditions and that the system's responses are in line with the expected behavior for Post Only orders.

expectedErr: types.ErrInvalidReplacement,
},
"IOC Taker cannot replace unfilled non IOC order": {
"IOC Taker replaces unfilled non IOC order": {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test case "IOC Taker replaces unfilled non IOC order" seems to be testing the behavior of replacing a non-IOC order with an IOC order. However, the expected error types.ErrInvalidReplacement might not fully capture the specific scenario being tested, which is specific to IOC orders. Consider adding a more descriptive error or a comment explaining why this error is expected in this context.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Outside diff range and nitpick comments (2)
protocol/app/upgrades/v6.0.0/upgrade.go (1)

41-55: Review logging and error handling in CreateUpgradeHandler.

Consider enhancing the logging within CreateUpgradeHandler to include more details about the operations being performed, especially before and after critical operations like removeStatefulFOKOrders.

protocol/x/clob/types/clob_keeper.go (1)

161-161: Document the GetAllStatefulOrders method.

The method GetAllStatefulOrders is added to the ClobKeeper interface but lacks documentation. Consider adding a comment explaining its purpose, especially how it interacts with stateful and non-stateful orders.

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 51f8b41 and 7149aeb.

Files selected for processing (6)
  • protocol/app/upgrades/v6.0.0/upgrade.go (1 hunks)
  • protocol/app/upgrades/v6.0.0/upgrade_container_test.go (2 hunks)
  • protocol/mocks/ClobKeeper.go (1 hunks)
  • protocol/testing/containertest/containertest.sh (1 hunks)
  • protocol/testing/containertest/node.go (1 hunks)
  • protocol/x/clob/types/clob_keeper.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • protocol/testing/containertest/containertest.sh
Additional comments not posted (1)
protocol/mocks/ClobKeeper.go (1)

203-221: The implementation of GetAllStatefulOrders method in the mock ClobKeeper class is correct and aligns with standard practices for mocking in tests.

Comment on lines +17 to +40
func removeStatefulFOKOrders(ctx sdk.Context, k clobtypes.ClobKeeper) {
allStatefulOrders := k.GetAllStatefulOrders(ctx)
for _, order := range allStatefulOrders {
if order.TimeInForce == clobtypes.Order_TIME_IN_FORCE_FILL_OR_KILL {
// Remove the orders from state.
k.MustRemoveStatefulOrder(ctx, order.OrderId)

// Send indexer event for removal of stateful order.
k.GetIndexerEventManager().AddTxnEvent(
ctx,
indexerevents.SubtypeStatefulOrder,
indexerevents.StatefulOrderEventVersion,
indexer_manager.GetBytes(
indexerevents.NewStatefulOrderRemovalEvent(
order.OrderId,
indexershared.ConvertOrderRemovalReasonToIndexerOrderRemovalReason(
clobtypes.OrderRemoval_REMOVAL_REASON_CONDITIONAL_FOK_COULD_NOT_BE_FULLY_FILLED,
),
),
),
)
}
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure proper error handling in removeStatefulFOKOrders.

The function removeStatefulFOKOrders lacks error handling for the operations MustRemoveStatefulOrder and AddTxnEvent. Consider adding error checks or using non-Must versions of these methods if available.

@@ -43,145 +44,151 @@ func preUpgradeSetups(node *containertest.Node, t *testing.T) {

func preUpgradeChecks(node *containertest.Node, t *testing.T) {
// Add test for your upgrade handler logic below
preUpgradeStatefulOrderCheck(node, t)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enhance the upgrade test coverage.

Consider adding more comprehensive tests in preUpgradeStatefulOrderCheck and postUpgradeStatefulOrderCheck to cover scenarios where orders might not be removed as expected. This could include checks for orders with different conditions or incorrect data.

Also applies to: 52-52

Comment on lines +169 to +188
// Broadcast a tx to the node given the message and a signer address.
func BroadcastTxWithoutValidateBasic[M cosmos.Msg](n *Node, message M, signer string) (err error) {
clientContext, flags, err := n.getContextForBroadcastTx(signer)
if err != nil {
return err
}

txFactory, err := tx.NewFactoryCLI(*clientContext, flags)
if err != nil {
return err
}

// Use default gas limit and gas fee.
txFactory = txFactory.WithGas(constants.TestGasLimit).WithFees(constants.TestFee)

if err = tx.BroadcastTx(*clientContext, txFactory, message); err != nil {
return err
}
return nil
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review the use of BroadcastTxWithoutValidateBasic.

The function BroadcastTxWithoutValidateBasic bypasses basic validation checks. While this can be useful for testing, it should be used with caution to avoid introducing errors in production-like environments. Consider documenting the intended use cases and potential risks associated with this function.

@jayy04 jayy04 changed the title [CT-873] Deprecate FOK enum field and update validate basic [CT-873] Deprecate FOK orders Jun 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

3 participants