-
Notifications
You must be signed in to change notification settings - Fork 108
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
[TRA-885] Upgrade handler to set market, perp and clob pair id to fixed number #2589
base: main
Are you sure you want to change the base?
Conversation
WalkthroughThis pull request introduces new query methods for retrieving the next Clob pair ID, next Perpetual ID, and next Market ID within the Changes
Possibly related PRs
Suggested labels
Suggested reviewers
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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 using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 8
🧹 Outside diff range and nitpick comments (14)
protocol/app/upgrades/v7.1/upgrade.go (1)
1-53
: Document upgrade implications and operator instructionsThis upgrade modifies critical state variables and requires careful coordination. Consider:
- Adding documentation about the state-breaking nature of this upgrade
- Providing instructions for chain operators
- Including a rollback plan in case of issues
Would you like me to help draft the upgrade documentation and operator instructions?
protocol/x/prices/types/types.go (1)
60-61
: LGTM! Note: This is a state-breaking change.The addition of
SetNextMarketID
method aligns with the PR objectives and follows the Cosmos SDK keeper patterns. This change is part of the upgrade from v7.0 to v7.1 and will modify how market IDs are assigned.Ensure this change is properly documented in the upgrade guide and that node operators are notified of the state-breaking changes.
protocol/app/upgrades.go (1)
34-35
: Consider documenting the keeper dependency changesThe upgrade handler now depends on
PerpetualsKeeper
andClobKeeper
instead of the previously used keepers. Consider adding documentation explaining this architectural change and its implications.Add a comment above the
CreateUpgradeHandler
call explaining:+// v7.1 upgrade handler requires PerpetualsKeeper and ClobKeeper to set fixed IDs +// for markets, perpetuals, and clob pairs during the upgrade process. app.UpgradeKeeper.SetUpgradeHandler(protocol/x/perpetuals/types/types.go (1)
121-121
: Consider upgrade path and compatibility.Since this change allows modification of the next perpetual ID sequence, which is a state-breaking change:
- Ensure the upgrade handler properly migrates existing state
- Consider adding a guard in the implementation to prevent ID conflicts during the transition
- Document the state-breaking nature of this change in the module's upgrade guide
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts (1)
65-71
: Minor formatting and documentation improvements needed.The implementation is correct, but there are some minor improvements needed for consistency:
- Remove one empty line after the JSDoc comment to match other methods
- Consider enhancing the JSDoc comment to provide more details about the query's purpose and return value
/* Queries the next clob pair id. */ - async nextClobPairId(_params: QueryNextClobPairIdRequest = {}): Promise<QueryNextClobPairIdResponseSDKType> {
Suggested JSDoc improvement:
/** * Queries the next available CLOB pair identifier. * This method is used to determine the next ID that will be assigned to a new CLOB pair. * @param {QueryNextClobPairIdRequest} _params - Optional query parameters (empty for this query) * @returns {Promise<QueryNextClobPairIdResponseSDKType>} The next available CLOB pair ID */protocol/app/upgrades/v7.1/upgrade_container_test.go (2)
19-35
: Add test documentation and improve error messages.Consider adding:
- A test description documenting the upgrade scenario and expected outcomes
- More descriptive error messages in require statements
func TestStateUpgrade(t *testing.T) { + // TestStateUpgrade validates the v7.1 upgrade which sets market, perpetual, + // and clob pair IDs to a fixed number (v_7_1.ID_NUM). testnet, err := containertest.NewTestnetWithPreupgradeGenesis() - require.NoError(t, err, "failed to create testnet - is docker daemon running?") + require.NoError(t, err, "failed to create testnet with pre-upgrade genesis - is docker daemon running?") err = testnet.Start() - require.NoError(t, err) + require.NoError(t, err, "failed to start testnet")
43-46
: Expand post-upgrade validation scope.The post-upgrade checks only validate the ID values. Consider adding validations for:
- Other state properties that might be affected by the upgrade
- Data integrity checks
- Backward compatibility checks
proto/dydxprotocol/prices/query.proto (1)
88-92
: Enhance message definitions with additional documentation and constraints.A few suggestions to improve the message definitions:
- The comment for QueryNextMarketIdRequest is incomplete (ends with "Query/Params
NextMarketId
")- Consider adding a comment for the next_market_id field to document its purpose and any valid ranges
- Consider adding [(gogoproto.moretags)] to specify any validation rules if needed
-// QueryNextMarketIdRequest is request type for the Query/Params `NextMarketId` +// QueryNextMarketIdRequest is request type for the Query/NextMarketId RPC method. message QueryNextMarketIdRequest {} -// QueryNextMarketIdResponse is response type for the Query/Params `NextMarketId` -message QueryNextMarketIdResponse { uint32 next_market_id = 1; } +// QueryNextMarketIdResponse is response type for the Query/NextMarketId RPC method. +message QueryNextMarketIdResponse { + // next_market_id represents the next available market identifier. + // The value returned will be the fixed number configured during the upgrade. + uint32 next_market_id = 1; +}indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.lcd.ts (1)
83-89
: Improve method documentation and formatting.While the implementation is correct, consider these improvements for consistency:
- Expand the JSDoc comment to match the detail level of other methods
- Remove extra blank lines between the comment and method implementation
Apply this diff to improve the documentation:
- /* Queries the next perpetual id. */ - - - + /* Queries the next perpetual id to be used when creating a new perpetual. + * Returns the next available ID that maintains consistency in the protocol. */ async nextPerpetualId(_params: QueryNextPerpetualIdRequest = {}): Promise<QueryNextPerpetualIdResponseSDKType> {proto/dydxprotocol/perpetuals/query.proto (1)
112-116
: LGTM! Consider enhancing field documentation.The message definitions are well-structured and consistent with the module's patterns. Consider adding a comment to document the
next_perpetual_id
field's purpose and constraints.// QueryNextPerpetualIdResponse is the response type for the NextPerpetualId RPC message QueryNextPerpetualIdResponse { - uint32 next_perpetual_id = 1; + // next_perpetual_id represents the next available ID that will be assigned to a new perpetual + uint32 next_perpetual_id = 1; }proto/dydxprotocol/clob/query.proto (1)
171-176
: Consider enhancing messages to support fixed IDs.Given the PR objective to "set market, perp and clob pair IDs to fixed numbers", consider enhancing the messages to:
- Allow specifying whether to return the next sequential ID or the fixed ID in the request
- Include metadata about whether the returned ID is fixed in the response
Example enhancement:
message QueryNextClobPairIdRequest { + // If true, returns the fixed ID instead of the next sequential ID + bool use_fixed_id = 1; } message QueryNextClobPairIdResponse { uint32 next_clob_pair_id = 1; + // Indicates if the returned ID is fixed + bool is_fixed_id = 2; }indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (1)
587-629
: Consider adding validation for nextMarketId.While the implementation correctly handles the nextMarketId field, consider adding validation to ensure the value is non-negative, as market IDs should always be positive integers.
fromPartial(object: DeepPartial<QueryNextMarketIdResponse>): QueryNextMarketIdResponse { const message = createBaseQueryNextMarketIdResponse(); - message.nextMarketId = object.nextMarketId ?? 0; + const nextId = object.nextMarketId ?? 0; + if (nextId < 0) { + throw new Error('nextMarketId must be non-negative'); + } + message.nextMarketId = nextId; return message; }indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts (2)
250-253
: Consider using type aliases for empty request interfaces.Empty interfaces are equivalent to
{}
in TypeScript. Consider using type aliases instead:-export interface QueryNextClobPairIdRequest {} +export type QueryNextClobPairIdRequest = {} -export interface QueryNextClobPairIdRequestSDKType {} +export type QueryNextClobPairIdRequestSDKType = {}🧰 Tools
🪛 Biome
[error] 250-250: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 253-253: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
257-258
: Remove duplicate documentation comments.The documentation comments are duplicated in the response interfaces. Remove the redundant comments:
export interface QueryNextClobPairIdResponse { - /** QueryNextClobPairIdResponse is a response message for the next clob pair id */ nextClobPairId: number; } export interface QueryNextClobPairIdResponseSDKType { - /** QueryNextClobPairIdResponse is a response message for the next clob pair id */ next_clob_pair_id: number; }Also applies to: 263-264
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (6)
protocol/x/clob/types/query.pb.go
is excluded by!**/*.pb.go
protocol/x/clob/types/query.pb.gw.go
is excluded by!**/*.pb.gw.go
protocol/x/perpetuals/types/query.pb.go
is excluded by!**/*.pb.go
protocol/x/perpetuals/types/query.pb.gw.go
is excluded by!**/*.pb.gw.go
protocol/x/prices/types/query.pb.go
is excluded by!**/*.pb.go
protocol/x/prices/types/query.pb.gw.go
is excluded by!**/*.pb.gw.go
📒 Files selected for processing (26)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts
(3 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts
(5 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts
(2 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.lcd.ts
(3 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.rpc.Query.ts
(5 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.ts
(2 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.lcd.ts
(3 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.rpc.Query.ts
(5 hunks)indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
(2 hunks)proto/dydxprotocol/clob/query.proto
(2 hunks)proto/dydxprotocol/perpetuals/query.proto
(2 hunks)proto/dydxprotocol/prices/query.proto
(2 hunks)protocol/app/upgrades.go
(2 hunks)protocol/app/upgrades/v7.0/upgrade_container_test.go
(0 hunks)protocol/app/upgrades/v7.1/constants.go
(1 hunks)protocol/app/upgrades/v7.1/upgrade.go
(1 hunks)protocol/app/upgrades/v7.1/upgrade_container_test.go
(1 hunks)protocol/testing/version/VERSION_CURRENT
(1 hunks)protocol/testing/version/VERSION_FULL_NAME_PREUPGRADE
(1 hunks)protocol/testing/version/VERSION_PREUPGRADE
(1 hunks)protocol/x/clob/keeper/grpc_query_clob_pair.go
(1 hunks)protocol/x/clob/types/clob_keeper.go
(1 hunks)protocol/x/perpetuals/keeper/grpc_query_perpetual.go
(1 hunks)protocol/x/perpetuals/types/types.go
(1 hunks)protocol/x/prices/keeper/grpc_query_market.go
(1 hunks)protocol/x/prices/types/types.go
(1 hunks)
💤 Files with no reviewable changes (1)
- protocol/app/upgrades/v7.0/upgrade_container_test.go
✅ Files skipped from review due to trivial changes (3)
- protocol/testing/version/VERSION_CURRENT
- protocol/testing/version/VERSION_FULL_NAME_PREUPGRADE
- protocol/testing/version/VERSION_PREUPGRADE
🧰 Additional context used
🪛 Biome
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts
[error] 250-250: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 253-253: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.ts
[error] 146-146: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 149-149: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
🔇 Additional comments (46)
protocol/app/upgrades/v7.1/constants.go (2)
1-7
: LGTM: Package declaration and imports are well-structured.
The package name follows Go conventions and imports are properly organized.
9-11
: Verify the location of fixed ID constants.
The PR objectives mention setting fixed numbers for market, perp, and clob pair IDs, but these constants are not defined here. Let's verify their location.
✅ Verification successful
Let me search for the fixed ID constants in a more focused way.
Let me search more broadly for the fixed IDs in the codebase.
Let me check the upgrade handler file directly since it's the most likely place for these constants.
I can now generate the final response based on the findings.
Fixed ID constants are defined in the upgrade handler
The fixed ID constants are defined in the upgrade handler. The constant ID_NUM = 200
is used to set the base IDs for markets, perpetuals, and CLOB pairs through the setMarketListingBaseIds
function.
pricesKeeper.SetNextMarketID(ctx, ID_NUM)
perpetualsKeeper.SetNextPerpetualID(ctx, ID_NUM)
clobKeeper.SetNextClobPairID(ctx, ID_NUM)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Search for constants related to fixed IDs in the codebase
# Search for market, perp, and clob pair ID related constants
echo "Searching for ID-related constants..."
rg -t go "const.*(?i)(market|perpetual|clob).*id" --no-filename
# Search for files that might contain these constants
echo -e "\nSearching for related files..."
fd -e go -e proto -g "*market*|*perpetual*|*clob*" -x grep -l "id"
Length of output: 158191
Script:
#!/bin/bash
# Search for fixed ID constants in the v7.1 upgrade package and related files
# Search for ID-related constants in the upgrade package
echo "Searching in upgrade package..."
fd -e go -g "*v7.1*" -x grep -l "id"
# Search for fixed ID constants in the upgrade package
echo -e "\nSearching for fixed ID constants..."
rg -t go "const.*[Ii]d.*=.*[0-9]+" protocol/app/upgrades/v7.1/
# Search for any ID-related files in the upgrade package
echo -e "\nSearching for ID-related files in upgrade package..."
fd -e go -g "*id*" protocol/app/upgrades/v7.1/
Length of output: 431
Script:
#!/bin/bash
# Search for fixed IDs in the codebase
# Search for market, perpetual, and clob pair ID constants in protocol directory
echo "Searching for fixed IDs in protocol directory..."
rg -t go "const\s+(\w+)?\s*(Market|Perpetual|ClobPair)Id\w*\s*=\s*\d+" protocol/
# Search for any ID-related constants in the upgrade handler
echo -e "\nSearching for ID-related constants in upgrade handler..."
rg -t go "const.*Id.*=.*\d+" protocol/app/upgrades/v7.1/upgrade.go
# Search for any files that might contain market/perpetual/clob pair ID definitions
echo -e "\nSearching for potential ID definition files..."
fd -e go -g "*market*|*perpetual*|*clob*|*id*" protocol/app/upgrades/v7.1/
Length of output: 573
Script:
#!/bin/bash
# Check the upgrade handler file content
echo "Checking upgrade handler content..."
cat protocol/app/upgrades/v7.1/upgrade.go
echo -e "\nChecking for any other go files in v7.1 directory..."
fd -e go . protocol/app/upgrades/v7.1/
Length of output: 2010
protocol/app/upgrades/v7.1/upgrade.go (1)
17-19
: Document the rationale for ID_NUM value
The choice of 200 as the fixed number for IDs seems arbitrary. Please add documentation explaining:
- Why 200 was specifically chosen
- Whether this value ensures no conflicts with existing IDs
- How much ID space this leaves for future growth
Let's verify the current maximum IDs in use:
protocol/x/clob/keeper/grpc_query_clob_pair.go (1)
62-71
: Consider implications of fixed ID implementation
Based on the PR objectives to set market, perp, and CLOB pair IDs to fixed numbers, ensure that:
- The ID sequence cannot be reset after it's been set to a fixed number
- There are appropriate database migrations or state upgrades
- The fixed number doesn't conflict with existing IDs
Let's verify the implementation of GetNextClobPairID
and any upgrade handlers:
✅ Verification successful
Based on the search results, I can now generate the final response since I have found the relevant implementation details:
Fixed CLOB pair ID implementation is properly handled
The implementation correctly handles fixed CLOB pair IDs:
- The ID sequence is set via
SetNextClobPairID
in the v7.1 upgrade handler (protocol/app/upgrades/v7.1/upgrade.go) - The upgrade handler sets the ID to a fixed number defined by
ID_NUM
constant - The implementation is verified by upgrade tests that confirm the next ID matches the expected fixed number
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for GetNextClobPairID implementation and upgrade handlers
ast-grep --pattern 'func $_ GetNextClobPairID($_) $_'
# Look for upgrade handlers that might set the fixed number
rg -A 5 "upgrade.*handler.*clob.*id"
Length of output: 64450
Script:
#!/bin/bash
# Search for GetNextClobPairID implementation
rg -A 5 "func.*GetNextClobPairID"
# Look for upgrade handlers that might set fixed IDs
rg -A 5 "func.*UpgradeHandler.*clob.*id"
# Look for any code that sets or modifies CLOB pair IDs
rg -A 5 "SetNextClobPairID|nextClobPairId|NextClobPairId"
Length of output: 42341
protocol/x/prices/types/types.go (1)
61-61
: Verify potential ID conflicts.
The SetNextMarketID
method should be implemented with safeguards to prevent setting an ID that conflicts with existing markets.
Let's verify the implementation and usage:
protocol/x/perpetuals/keeper/grpc_query_perpetual.go (1)
75-87
: Verify implementation against PR objectives.
The PR objectives mention setting the next perpetual ID to a fixed number, but this method only retrieves the ID. Please verify:
- Where is the logic to set the ID to a fixed number?
- Should this query method return the fixed number instead of the current next ID?
Let's check for the ID setting logic:
✅ Verification successful
Let me search for more specific information about the ID setting logic in the v7.1 upgrade handler.
Implementation aligns with PR objectives
The v7.1 upgrade handler correctly implements the PR objectives by setting the next perpetual ID to a fixed number (200) via SetNextPerpetualID
. The query method NextPerpetualId
is correctly implemented to return this value.
- The ID setting logic exists in
protocol/app/upgrades/v7.1/upgrade.go
whereperpetualsKeeper.SetNextPerpetualID(ctx, ID_NUM)
sets the ID to 200 - The query method correctly returns the current next ID value without modification, which is the expected behavior
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for perpetual ID setting logic in upgrade handlers
rg -A 5 "SetNextPerpetualID|SetPerpetualID"
# Search for v7.0 to v7.1 upgrade logic mentioned in the AI summary
rg -A 10 "v7.0|v7.1"
Length of output: 167097
Script:
#!/bin/bash
# Search for ID setting logic in v7.1 upgrade handler
rg -A 10 "SetNextPerpetualID|SetNextClobPairID" protocol/app/upgrades/v7.1/
# Look for any constants or ID definitions in v7.1
rg -A 5 "ID_NUM|NextPerpetualID" protocol/app/upgrades/v7.1/
Length of output: 3252
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.lcd.ts (1)
67-73
: LGTM! Verify endpoint consistency with proto definition.
The implementation follows the established patterns in the codebase and correctly implements the next market ID query functionality.
Let's verify that the endpoint matches the proto definition:
✅ Verification successful
Endpoint path matches the proto definition
The endpoint /dydxprotocol/prices/next_market_id
in the LCD client implementation exactly matches the HTTP GET route defined in the proto file, confirming the implementation is correct.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that the endpoint path matches the proto definition
# Expected: The endpoint should be defined as /dydxprotocol/prices/next_market_id in the proto file
# Search for the RPC definition in proto files
fd -e proto | xargs rg -A 3 "rpc NextMarketId"
Length of output: 363
protocol/app/upgrades.go (3)
6-6
: LGTM: Import statement correctly updated for v7.1
The import statement has been properly updated to reference the new v7.1 upgrade package.
17-17
: Verify store upgrades in v7.1 package
The upgrade registration looks correct. Let's verify the store upgrades defined in the v7.1 package.
✅ Verification successful
Store upgrades for v7.1 are properly defined
The v7.1 upgrade is correctly implemented with:
- Store upgrades adding the
affiliates
module store - Migration logic to set market listing base IDs
- Proper upgrade handler implementation
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check the store upgrades defined in v7.1 package
# Expected: Should find store upgrade definitions in constants.go or similar
rg -A 5 "StoreUpgrades.*=.*{" protocol/app/upgrades/v7.1/
Length of output: 161
Script:
#!/bin/bash
# Let's try a different approach to find store upgrades in v7.1
# First, let's check if the directory exists and list its contents
ls -la protocol/app/upgrades/v7.1/
# Then search for store upgrades with fixed pattern
rg "StoreUpgrades" protocol/app/upgrades/v7.1/
# Also check the upgrade handler implementation
ast-grep --pattern 'func Upgrade(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
$$$
}'
Length of output: 613
Script:
#!/bin/bash
# Let's check the contents of constants.go and upgrade.go to verify the implementation
cat protocol/app/upgrades/v7.1/constants.go
cat protocol/app/upgrades/v7.1/upgrade.go
Length of output: 2067
25-37
: Verify upgrade handler implementation for ID management
Let's verify that the upgrade handler properly implements the fixed ID setting for markets, perps, and clob pairs.
✅ Verification successful
Upgrade handler properly implements ID management
The upgrade handler correctly implements the fixed ID setting for markets, perpetuals, and clob pairs through the setMarketListingBaseIds
function. It:
- Sets a consistent base ID of 200 for all three types
- Uses the appropriate keeper methods to set the next IDs:
pricesKeeper.SetNextMarketID
perpetualsKeeper.SetNextPerpetualID
clobKeeper.SetNextClobPairID
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check the upgrade handler implementation
# Expected: Should find ID setting logic in CreateUpgradeHandler
rg -A 10 "CreateUpgradeHandler.*=.*func" protocol/app/upgrades/v7.1/
Length of output: 70
Script:
#!/bin/bash
# Let's try finding the upgrade handler implementation using different approaches
# 1. First, let's check if the file exists
fd "v7.1" protocol/app/upgrades/
# 2. If found, let's look at its content
fd "v7.1" protocol/app/upgrades/ --exec cat {}
# 3. As a backup, let's search for any CreateUpgradeHandler function in the codebase
ast-grep --pattern 'func CreateUpgradeHandler($$$) $$$'
Length of output: 79377
Script:
#!/bin/bash
# Let's check the upgrade handler implementation and the setMarketListingBaseIds function
fd "v7.1" protocol/app/upgrades/ --exec cat {}
Length of output: 96
Script:
#!/bin/bash
# Let's try to find and read the specific upgrade file
fd "upgrade.go" protocol/app/upgrades/v7.1/
fd "upgrade.go" protocol/app/upgrades/v7.1/ --exec cat {}
# Also look for any other relevant files in the v7.1 directory
fd "." protocol/app/upgrades/v7.1/ --type f
Length of output: 1909
protocol/x/perpetuals/types/types.go (1)
121-121
: LGTM with verification needed.
The new method signature follows the interface's conventions and aligns with the PR's objective of managing perpetual IDs.
Please ensure proper validation of nextID
in the implementation to prevent:
- Setting IDs lower than existing perpetual IDs
- Potential conflicts with existing IDs
Run this script to check for existing ID validation patterns:
✅ Verification successful
Let me search for validation patterns around perpetual IDs to verify if there are proper validations in place.
Let me search for the implementation of SetNextPerpetualID and related perpetual ID management code to verify the validation.
Based on the code analysis, I can now provide a final response:
Verified - ID management has proper safeguards
The implementation of perpetual ID management has several safeguards:
AcquireNextPerpetualID
ensures uniqueness by incrementing until finding an unused ID- The upgrade script (v7.1) shows this is part of a coordinated ID management change
- Tests verify proper ID sequence and storage behavior
- Genesis validation checks for ID gaps and duplicates
The SetNextPerpetualID
method is appropriately used as an internal implementation detail, called by higher-level functions that enforce proper ID management.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Look for existing ID validation patterns in perpetuals keeper
# Expected results: Validation logic for perpetual IDs in keeper implementation
# Search for ID validation patterns in perpetual creation/modification
ast-grep --pattern 'func $_(ctx sdk.Context, id uint32, $$$) {
$$$
if id $_ {
$$$
}
$$$
}'
# Search for existing ID-related error messages
rg "invalid.*id|id.*invalid" -A 2
Length of output: 261315
Script:
#!/bin/bash
# Search for perpetual ID validation patterns in keeper implementation
ast-grep --pattern 'func $_(ctx sdk.Context, nextId uint32) {
$$$
if nextId $_ {
$$$
}
$$$
}'
# Search for perpetual ID validation error messages
rg "invalid.*perpetual.*id|perpetual.*id.*invalid" -A 2
# Search for existing perpetual ID validation functions
rg "validate.*perpetual.*id|perpetual.*id.*validate" -A 2
Length of output: 2231
Script:
#!/bin/bash
# Search for SetNextPerpetualID implementation
ast-grep --pattern 'func $_(ctx sdk.Context, nextId uint32) {
$$$
SetNextPerpetualID($$$)
$$$
}'
# Search for NextPerpetualID related code
rg "NextPerpetualID" -A 3
# Search for perpetual ID initialization and validation code
rg "InitializePerpetual.*|GetNextPerpetual.*" -A 3
Length of output: 6965
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.lcd.ts (3)
3-3
: LGTM! Import statement properly updated.
The new types for next CLOB pair ID query are correctly imported following the existing pattern and SDK type convention.
18-18
: LGTM! Method binding correctly added.
The nextClobPairId method is properly bound in the constructor, maintaining consistency with other method bindings.
Line range hint 1-71
: Verify code generation consistency.
Since this appears to be generated code, please ensure:
- The code generation process was run with the latest .proto files
- The corresponding .proto file changes are included in this PR
✅ Verification successful
Generated code matches proto definitions
The verification shows that:
- The proto file (
query.proto
) contains all the service definitions that match the generated LCD client code, includingNextClobPairId
,ClobPair
,EquityTierLimitConfiguration
, etc. - The generated files are consistent with the proto definitions, including the correct endpoints and method signatures.
- All related generated files are present in the expected location.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify proto files and generated code consistency
# Check for related .proto files
fd -e proto -x grep -l "NextClobPairId" {}
# Check if there are any uncommitted generated files
git status --porcelain | grep "query.lcd.ts"
Length of output: 127
Script:
#!/bin/bash
# Let's verify the content of the proto file and check if it matches with the generated code
# Check the content of the proto file
cat ./proto/dydxprotocol/clob/query.proto
# Let's also verify if this is the only generated file or if there are other related generated files
fd "query.(ts|js)" indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/
Length of output: 10715
protocol/app/upgrades/v7.1/upgrade_container_test.go (1)
37-41
:
Implement pre-upgrade state validation.
The pre-upgrade functions are empty, which means we're not validating the initial state before the upgrade. This could lead to false positives in upgrade testing.
Consider adding checks for:
- Initial market ID values
- Initial perpetual ID values
- Initial clob pair ID values
proto/dydxprotocol/prices/query.proto (2)
35-39
: LGTM! The RPC definition follows best practices.
The NextMarketId RPC is well-defined and consistent with the existing service pattern. The HTTP endpoint mapping follows the established convention.
Line range hint 1-92
: Verify companion changes for perp and clob pair IDs.
The PR objectives mention setting fixed numbers for market, perp, and clob pair IDs. While this file handles market IDs, we should ensure similar query implementations exist for perp and clob pair IDs.
✅ Verification successful
Companion changes for perp and clob pair IDs are properly implemented
The verification confirms that similar query implementations exist for all required ID types:
- Market IDs:
NextMarketId
in prices/query.proto - Perpetual IDs:
NextPerpetualId
in perpetuals/query.proto - CLOB Pair IDs:
NextClobPairId
in clob/query.proto
All implementations follow the same pattern with corresponding request/response messages and HTTP endpoints, ensuring consistency across the codebase.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for similar query implementations in other proto files
# Look for similar query definitions
echo "Searching for similar query definitions in other proto files..."
fd -e proto -x rg -l "rpc Next.*Id.*returns.*Response"
# Look for related message definitions
echo "Searching for related message definitions..."
fd -e proto -x rg -l "message.*Next.*Id.*Request"
Length of output: 592
Script:
#!/bin/bash
# Let's examine the actual implementations in these files
# Check perpetuals query implementation
echo "=== Perpetuals Query Implementation ==="
rg -A 5 "rpc NextPerpetualId" ./proto/dydxprotocol/perpetuals/query.proto
# Check clob query implementation
echo "=== CLOB Query Implementation ==="
rg -A 5 "rpc NextClob" ./proto/dydxprotocol/clob/query.proto
# Check the corresponding message definitions in perpetuals
echo "=== Perpetuals Message Definitions ==="
rg "message.*NextPerpetualId.*Request|message.*NextPerpetualId.*Response" ./proto/dydxprotocol/perpetuals/query.proto
# Check the corresponding message definitions in clob
echo "=== CLOB Message Definitions ==="
rg "message.*NextClob.*Request|message.*NextClob.*Response" ./proto/dydxprotocol/clob/query.proto
Length of output: 1307
protocol/x/prices/keeper/grpc_query_market.go (1)
125-134
: Verify implementation against requirements.
The PR objectives mention setting market IDs to fixed numbers, but this implementation only retrieves the next ID. Please verify if:
- This is part of a larger change set where the fixed number setting is implemented elsewhere
- The
GetNextMarketID
method has been updated to return the fixed number - Additional methods are needed to fulfill the requirement
Let's verify the implementation of GetNextMarketID
:
✅ Verification successful
Let me search for the implementation of setMarketListingBaseIds
to understand how the fixed numbers are set.
Let me check the value of ID_NUM
constant to understand what fixed number is being set.
Implementation aligns with PR objectives
The implementation is part of a larger change set where market IDs are set to fixed numbers. The NextMarketId
query method correctly retrieves the next ID, which is set to 200 through the setMarketListingBaseIds
function in the v7.1 upgrade handler. This upgrade handler sets fixed IDs for markets, perpetuals, and CLOB pairs.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for GetNextMarketID implementation and any related upgrade handlers
echo "Searching for GetNextMarketID implementation..."
rg -A 10 "GetNextMarketID"
echo "Searching for upgrade handlers that might set the fixed number..."
rg -A 20 "func.*Upgrade.*Handler"
Length of output: 18029
Script:
#!/bin/bash
# Search for setMarketListingBaseIds implementation
echo "Searching for setMarketListingBaseIds implementation..."
rg -A 20 "setMarketListingBaseIds"
Length of output: 1859
Script:
#!/bin/bash
# Search for ID_NUM constant definition
echo "Searching for ID_NUM constant..."
rg "ID_NUM.*=.*" protocol/app/upgrades/v7.1/
Length of output: 173
indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.lcd.ts (2)
3-3
: LGTM! Import statement properly updated.
The new types for next perpetual ID query are correctly imported following the existing pattern and SDK type naming convention.
19-19
: LGTM! Method binding properly added.
The nextPerpetualId
method is correctly bound in the constructor, maintaining consistency with other method bindings.
proto/dydxprotocol/perpetuals/query.proto (1)
47-51
: LGTM! Verify consistency with market and clob pair modules.
The new RPC method follows the established patterns and conventions. However, since this PR aims to handle market, perp, and clob pair IDs consistently, let's verify the alignment with other modules.
✅ Verification successful
✓ Confirmed: NextPerpetualId endpoint aligns with other modules
The verification shows perfect alignment across modules with similar next ID query endpoints:
/dydxprotocol/prices/next_market_id
/dydxprotocol/clob/next_clob_pair_id
/dydxprotocol/perpetuals/next_perpetual_id
The implementation follows the same pattern used in related modules, maintaining consistency across the codebase.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that similar RPC methods exist or are being added in market and clob pair modules
# Expected: Find similar endpoint patterns in other modules
# Check for similar endpoint patterns in proto files
echo "Checking for similar endpoint patterns in other modules..."
rg -l "next.*id" "proto/dydxprotocol/**/*.proto"
# Check specific endpoint patterns
echo "Checking specific endpoint patterns..."
rg "/next.*id" "proto/dydxprotocol/**/*.proto"
Length of output: 453
Script:
#!/bin/bash
# Let's try without the glob pattern which might be causing issues
echo "Checking for similar endpoint patterns in proto files..."
rg -l "next.*id" proto/
echo "Checking specific endpoint patterns in proto files..."
rg "/next.*id" proto/
Length of output: 1040
protocol/x/clob/types/clob_keeper.go (1)
155-155
: Interface addition looks good, but implementation needs verification.
The new method aligns with the PR objective of setting fixed IDs. However, since this is a critical operation that could affect system integrity:
- Ensure the implementation includes validation to prevent:
- Setting IDs that conflict with existing CLOB pairs
- Setting IDs lower than currently used IDs
- Consider adding documentation about when this method should be used
Let's verify the implementation details:
✅ Verification successful
Implementation verified and used appropriately in upgrade handler
The implementation has been reviewed and appears to be correctly used:
- The method is implemented in
protocol/x/clob/keeper/clob_pair.go
with proper state management using the KVStore. - It's specifically used in the v7.1 upgrade handler (
protocol/app/upgrades/v7.1/upgrade.go
) to set fixed IDs as intended. - The method is already used in conjunction with other similar ID setters (SetNextMarketID, SetNextPerpetualID) in the upgrade process.
- Validation isn't strictly necessary here as:
- It's an admin-only operation used in controlled upgrade scenarios
- The upgrade handler sets a known fixed ID (ID_NUM) for all ID types consistently
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check the implementation of SetNextClobPairID and its usage
# Look for implementation and validation logic
# Find the keeper implementation
ast-grep --pattern 'func ($receiver $_) SetNextClobPairID(ctx sdk.Context, nextID uint32) {
$$$
}'
# Check for validation patterns
rg -A 5 'SetNextClobPairID.*\{'
# Look for upgrade handler usage
rg -A 10 'v7\.0.*v7\.1'
Length of output: 601
Script:
#!/bin/bash
# Let's check for validation and usage patterns more thoroughly
# Check for any validation or checks before setting the ID
rg -B 5 -A 5 'SetNextClobPairID'
# Look for GetNextClobPairID to understand the current implementation
ast-grep --pattern 'func ($receiver $_) GetNextClobPairID($ctx sdk.Context) uint32 {
$$$
}'
# Check for any upgrade handlers or migrations
fd -e go -x rg -l 'v7.*Upgrade'
# Look for tests related to SetNextClobPairID
fd -e go -x rg -l 'TestSetNextClobPairID'
Length of output: 2726
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.rpc.Query.ts (5)
4-4
: LGTM!
The import statement correctly includes the new query types while maintaining consistency with the existing pattern.
19-21
: LGTM!
The interface definition for nextMarketId
is well-documented and follows the established pattern for query methods.
32-32
: LGTM!
The method binding in the constructor follows the established pattern and ensures proper this
context.
63-67
: LGTM!
The implementation correctly follows the established pattern for gRPC query methods, including proper request encoding, RPC call, and response decoding.
88-91
: Verify the RPC endpoint availability.
The query extension implementation looks good and follows the established pattern. However, it's important to verify that the "NextMarketId" RPC endpoint is properly registered in the backend service.
✅ Verification successful
RPC endpoint is properly registered and implemented
The NextMarketId RPC endpoint is correctly registered and implemented in the backend service:
- Defined in
proto/dydxprotocol/prices/query.proto
with proper request/response messages - Implemented in the keeper at
protocol/x/prices/keeper/grpc_query_market.go
- Has working gateway implementation in
protocol/x/prices/types/query.pb.gw.go
- Successfully tested in
protocol/app/upgrades/v7.1/upgrade_container_test.go
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check if the NextMarketId RPC endpoint is registered in the proto definitions
# Search for NextMarketId service definition in proto files
rg -l "rpc NextMarketId" --type proto
Length of output: 69
Script:
#!/bin/bash
# Search for NextMarketId service definition in all files since proto extension is not recognized
rg -l "rpc NextMarketId"
Length of output: 64
Script:
#!/bin/bash
# Search for NextMarketId query definition in all files to understand the service structure
rg "NextMarketId" -A 3 -B 3
Length of output: 40790
Script:
#!/bin/bash
# Find proto files using fd to verify file existence
fd ".proto$"
Length of output: 5414
indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.rpc.Query.ts (5)
4-4
: LGTM: Import statement correctly updated
The new types for QueryNextPerpetualIdRequest
and QueryNextPerpetualIdResponse
are properly added to the existing import statement.
25-27
: LGTM: Interface method properly defined
The nextPerpetualId
method is correctly added to the Query interface with proper JSDoc documentation and consistent typing pattern.
40-40
: LGTM: Method properly bound in constructor
The nextPerpetualId
method is correctly bound to maintain the proper this
context.
116-119
: LGTM: Query extension properly updated
The nextPerpetualId
method is correctly added to the query extension object with proper delegation to the queryService.
83-87
: LGTM: Implementation follows established patterns
The implementation correctly follows the standard pattern for query methods, with proper request encoding, RPC call, and response decoding.
Let's verify the RPC endpoint name consistency:
✅ Verification successful
RPC endpoint name matches the proto definition
The verification confirms that the RPC endpoint name "NextPerpetualId" in the implementation matches exactly with the proto definition in proto/dydxprotocol/perpetuals/query.proto
.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify the RPC endpoint name matches the proto definition
# Search for the service definition in proto files
fd -e proto | xargs rg "rpc NextPerpetualId.*returns.*QueryNextPerpetualIdResponse"
Length of output: 219
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts (6)
4-4
: LGTM: Import statement correctly updated
The new types for the next CLOB pair ID query are properly imported alongside existing types.
28-30
: LGTM: Interface method properly defined
The nextClobPairId
method is well-documented and follows the established pattern of the interface. The optional parameter pattern is consistent with similar query methods.
50-50
: LGTM: Method properly bound in constructor
The nextClobPairId
method is correctly bound to maintain the proper this
context, following the established pattern.
98-102
: LGTM: Method implementation follows best practices
The implementation correctly follows the established RPC pattern with proper:
- Request encoding
- RPC endpoint specification
- Response decoding
143-145
: LGTM: RPC query extension properly implemented
The method is correctly added to the RPC query extension, maintaining consistency with other query methods.
28-30
: Verify complete implementation of fixed ID assignment
While the query implementation is correct, please ensure that:
- The corresponding handler logic properly enforces fixed number assignment
- Similar implementations exist for market and perpetual IDs as mentioned in the PR objectives
Also applies to: 98-102
✅ Verification successful
Fixed ID assignment is properly implemented
The verification confirms complete implementation:
- The upgrade handler properly sets fixed IDs (200) for all three components:
- Market IDs via
pricesKeeper.SetNextMarketID()
- Perpetual IDs via
perpetualsKeeper.SetNextPerpetualID()
- CLOB pair IDs via
clobKeeper.SetNextClobPairID()
- Market IDs via
- The implementation is verified by integration tests in
upgrade_container_test.go
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for related handler implementations
echo "Searching for handler implementations..."
rg -A 5 "NextClobPairId|NextMarketId|NextPerpetualId" --type go
# Search for upgrade handler
echo "Searching for upgrade handler..."
rg -A 10 "UpgradeHandler.*7\.1" --type go
Length of output: 72835
Script:
#!/bin/bash
# Search for upgrade handler implementation and ID constants
echo "Searching for upgrade handler and ID constants..."
rg -A 10 "const.*ID_NUM" --type go
# Search for ID initialization in upgrade handler
echo "Searching for ID initialization..."
rg -A 10 "SetNextClobPairID|SetNextMarketID|SetNextPerpetualID" --type go
Length of output: 5869
Script:
#!/bin/bash
# Search for ID_NUM constant definition
echo "Searching for ID_NUM constant..."
rg "const.*ID_NUM.*=" --type go
# Search for upgrade handler implementation
echo "Searching for upgrade handler implementation..."
rg -A 15 "func.*CreateUpgradeHandler" protocol/app/upgrades/v7.1/upgrade.go
Length of output: 952
Script:
#!/bin/bash
# Search for setMarketListingBaseIds implementation
echo "Searching for setMarketListingBaseIds implementation..."
rg -B 5 "func setMarketListingBaseIds" protocol/app/upgrades/v7.1/upgrade.go
Length of output: 364
proto/dydxprotocol/clob/query.proto (1)
63-68
: LGTM! Well-structured RPC method definition.
The new NextClobPairId
RPC method is properly defined with:
- Clear documentation
- Consistent naming convention
- RESTful HTTP mapping
- Appropriate request/response message types
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (3)
154-171
: LGTM! Interface declarations follow established patterns.
The new interfaces for next market ID queries maintain consistency with other query types in the file. The empty interfaces are intentional as they represent parameter-less requests in the protobuf schema.
🧰 Tools
🪛 Biome
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
553-585
: LGTM! Request handling implementation is correct.
The implementation properly handles empty requests and follows the established pattern for protobuf message handling, including proper error handling for unexpected fields.
Line range hint 154-629
: Implementation aligns with PR objectives.
The added query functionality for next market ID is a necessary component for the PR's goal of setting market IDs to fixed numbers. This implementation will allow the system to determine the current next ID before setting it to a fixed value.
✅ Verification successful
Implementation is properly integrated and complete
The NextMarketId query functionality is correctly implemented across all necessary layers:
- Protocol buffer message types in query.ts
- RPC client implementation with proper request/response handling
- LCD client implementation with correct endpoint mapping (
/dydxprotocol/prices/next_market_id
)
The implementation provides a complete solution for querying the next market ID, which aligns with the PR's objective of managing fixed market IDs.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that this is the only implementation of next market ID query
# and that it's properly integrated with the RPC/LCD clients
# Check for any other implementations of next market ID query
rg -l "NextMarketId" --type ts
# Check for proper integration in RPC/LCD clients
ast-grep --pattern 'nextMarketId($$$) {
$$$
}'
Length of output: 299
Script:
#!/bin/bash
# Let's examine the RPC and LCD implementations to verify proper integration
# Check the RPC implementation
cat indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.rpc.Query.ts
# Check the LCD implementation
cat indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.lcd.ts
Length of output: 7200
indexer/packages/v4-protos/src/codegen/dydxprotocol/perpetuals/query.ts (3)
144-161
: LGTM! Interface declarations follow the established pattern.
The interfaces are well-structured and maintain consistency with other query types in the file. The empty interfaces are correct as they represent parameter-less protobuf messages.
🧰 Tools
🪛 Biome
[error] 146-146: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 149-149: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
690-722
: LGTM! Request implementation is correct and consistent.
The implementation properly handles the parameter-less request, following the established pattern for other query types.
724-766
: LGTM! Response implementation is correct and type-safe.
The implementation properly handles the nextPerpetualId field:
- Correct initialization to 0
- Proper encoding as uint32
- Safe handling of undefined/null in fromPartial
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts (1)
1209-1286
: Implementation looks good!
The encoding/decoding implementation follows the established patterns in the codebase and correctly handles both empty requests and responses with the nextClobPairId field.
var Upgrade = upgrades.Upgrade{ | ||
UpgradeName: UpgradeName, | ||
StoreUpgrades: store.StoreUpgrades{ | ||
Added: []string{ | ||
affiliatetypes.StoreKey, | ||
}, | ||
}, | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Based on the gathered information, I can now provide a final response:
Affiliate store addition is already handled in v7.0
The affiliate store (affiliatetypes.StoreKey
) was already added in v7.0 upgrade, and its presence in v7.1 upgrade appears to be redundant since stores cannot be added twice. This is likely a copy-paste error that should be removed from v7.1 upgrade definition.
protocol/app/upgrades/v7.0/constants.go
: Already adds the affiliate storeprotocol/app/upgrades/v7.1/constants.go
: Redundantly tries to add the same store
🔗 Analysis chain
Verify impact of affiliate store addition.
The addition of affiliatetypes.StoreKey
to the store upgrades might be a breaking change. Please ensure this is documented and handled appropriately.
Let me gather more context about the affiliate store changes by checking the PR description and related files.
Let me check the upgrade container test to understand the affiliate store addition better.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for breaking changes related to affiliate store
# Check for existing affiliate store references
echo "Checking for existing affiliate store usage..."
rg -A 5 "affiliatetypes.StoreKey"
# Check for migration handlers
echo -e "\nChecking for migration handlers..."
fd -e go -g "*migrate*" -x grep -l "affiliate"
# Check for upgrade documentation
echo -e "\nChecking for upgrade documentation..."
fd -e md -g "*upgrade*|*migration*|CHANGELOG*" -x grep -l -i "affiliate"
Length of output: 833
Script:
#!/bin/bash
# Check PR description and related files
echo "Checking PR description..."
gh pr view
echo -e "\nChecking affiliate type definitions..."
fd -e go -g "*affiliate*" -x cat {}
echo -e "\nChecking upgrade version history..."
fd -e go -g "*upgrade*" -x grep -l "v7"
Length of output: 31379
Script:
#!/bin/bash
# Check upgrade container test and related files
echo "Checking upgrade container test..."
cat protocol/app/upgrades/v7.1/upgrade_container_test.go
echo -e "\nChecking v7.0 upgrade for comparison..."
cat protocol/app/upgrades/v7.0/constants.go
echo -e "\nChecking CHANGELOG for v7.1..."
fd -e md -g "CHANGELOG*" -x cat {}
Length of output: 3695
func CreateUpgradeHandler( | ||
mm *module.Manager, | ||
configurator module.Configurator, | ||
pricesKeeper pricestypes.PricesKeeper, | ||
perpetualsKeeper perptypes.PerpetualsKeeper, | ||
clobKeeper clobtypes.ClobKeeper, | ||
) upgradetypes.UpgradeHandler { | ||
return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { | ||
sdkCtx := lib.UnwrapSDKContext(ctx, "app/upgrades") | ||
sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName)) | ||
|
||
// Set market, perpetual, and clob ids to a set number | ||
setMarketListingBaseIds(sdkCtx, pricesKeeper, perpetualsKeeper, clobKeeper) | ||
|
||
return mm.RunMigrations(ctx, configurator, vm) | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add error handling and define missing constant
The upgrade handler needs improvements:
- The
UpgradeName
constant is undefined - Error from
setMarketListingBaseIds
is not handled
Apply these changes:
+const (
+ UpgradeName = "v7.1"
+)
func CreateUpgradeHandler(
mm *module.Manager,
configurator module.Configurator,
pricesKeeper pricestypes.PricesKeeper,
perpetualsKeeper perptypes.PerpetualsKeeper,
clobKeeper clobtypes.ClobKeeper,
) upgradetypes.UpgradeHandler {
return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
sdkCtx := lib.UnwrapSDKContext(ctx, "app/upgrades")
sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName))
// Set market, perpetual, and clob ids to a set number
- setMarketListingBaseIds(sdkCtx, pricesKeeper, perpetualsKeeper, clobKeeper)
+ if err := setMarketListingBaseIds(sdkCtx, pricesKeeper, perpetualsKeeper, clobKeeper); err != nil {
+ return nil, fmt.Errorf("failed to set market listing base IDs: %w", err)
+ }
return mm.RunMigrations(ctx, configurator, vm)
}
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
func CreateUpgradeHandler( | |
mm *module.Manager, | |
configurator module.Configurator, | |
pricesKeeper pricestypes.PricesKeeper, | |
perpetualsKeeper perptypes.PerpetualsKeeper, | |
clobKeeper clobtypes.ClobKeeper, | |
) upgradetypes.UpgradeHandler { | |
return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { | |
sdkCtx := lib.UnwrapSDKContext(ctx, "app/upgrades") | |
sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName)) | |
// Set market, perpetual, and clob ids to a set number | |
setMarketListingBaseIds(sdkCtx, pricesKeeper, perpetualsKeeper, clobKeeper) | |
return mm.RunMigrations(ctx, configurator, vm) | |
} | |
} | |
const ( | |
UpgradeName = "v7.1" | |
) | |
func CreateUpgradeHandler( | |
mm *module.Manager, | |
configurator module.Configurator, | |
pricesKeeper pricestypes.PricesKeeper, | |
perpetualsKeeper perptypes.PerpetualsKeeper, | |
clobKeeper clobtypes.ClobKeeper, | |
) upgradetypes.UpgradeHandler { | |
return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { | |
sdkCtx := lib.UnwrapSDKContext(ctx, "app/upgrades") | |
sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName)) | |
// Set market, perpetual, and clob ids to a set number | |
if err := setMarketListingBaseIds(sdkCtx, pricesKeeper, perpetualsKeeper, clobKeeper); err != nil { | |
return nil, fmt.Errorf("failed to set market listing base IDs: %w", err) | |
} | |
return mm.RunMigrations(ctx, configurator, vm) | |
} | |
} |
// Set market, perpetual, and clob ids to a set number | ||
// This is done so that the ids are consistent for convenience | ||
func setMarketListingBaseIds( | ||
ctx sdk.Context, | ||
pricesKeeper pricestypes.PricesKeeper, | ||
perpetualsKeeper perptypes.PerpetualsKeeper, | ||
clobKeeper clobtypes.ClobKeeper, | ||
) { | ||
// Set all ids to a set number | ||
pricesKeeper.SetNextMarketID(ctx, ID_NUM) | ||
|
||
perpetualsKeeper.SetNextPerpetualID(ctx, ID_NUM) | ||
|
||
clobKeeper.SetNextClobPairID(ctx, ID_NUM) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add safety checks before setting IDs
The function modifies critical state variables without validation. Consider adding:
- Checks to ensure ID_NUM is greater than all existing IDs
- Error handling for potential conflicts
- Documentation about the order of operations
Here's a suggested improvement:
func setMarketListingBaseIds(
ctx sdk.Context,
pricesKeeper pricestypes.PricesKeeper,
perpetualsKeeper perptypes.PerpetualsKeeper,
clobKeeper clobtypes.ClobKeeper,
-) {
+) error {
+ // Get current next IDs
+ nextMarketId := pricesKeeper.GetNextMarketID(ctx)
+ nextPerpId := perpetualsKeeper.GetNextPerpetualID(ctx)
+ nextClobId := clobKeeper.GetNextClobPairID(ctx)
+
+ // Validate ID_NUM is safe to use
+ if ID_NUM <= nextMarketId || ID_NUM <= nextPerpId || ID_NUM <= nextClobId {
+ return fmt.Errorf(
+ "ID_NUM %d must be greater than existing next IDs (market: %d, perp: %d, clob: %d)",
+ ID_NUM, nextMarketId, nextPerpId, nextClobId,
+ )
+ }
+
// Set all ids to a set number
pricesKeeper.SetNextMarketID(ctx, ID_NUM)
perpetualsKeeper.SetNextPerpetualID(ctx, ID_NUM)
clobKeeper.SetNextClobPairID(ctx, ID_NUM)
+ return nil
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// Set market, perpetual, and clob ids to a set number | |
// This is done so that the ids are consistent for convenience | |
func setMarketListingBaseIds( | |
ctx sdk.Context, | |
pricesKeeper pricestypes.PricesKeeper, | |
perpetualsKeeper perptypes.PerpetualsKeeper, | |
clobKeeper clobtypes.ClobKeeper, | |
) { | |
// Set all ids to a set number | |
pricesKeeper.SetNextMarketID(ctx, ID_NUM) | |
perpetualsKeeper.SetNextPerpetualID(ctx, ID_NUM) | |
clobKeeper.SetNextClobPairID(ctx, ID_NUM) | |
} | |
// Set market, perpetual, and clob ids to a set number | |
// This is done so that the ids are consistent for convenience | |
func setMarketListingBaseIds( | |
ctx sdk.Context, | |
pricesKeeper pricestypes.PricesKeeper, | |
perpetualsKeeper perptypes.PerpetualsKeeper, | |
clobKeeper clobtypes.ClobKeeper, | |
) error { | |
// Get current next IDs | |
nextMarketId := pricesKeeper.GetNextMarketID(ctx) | |
nextPerpId := perpetualsKeeper.GetNextPerpetualID(ctx) | |
nextClobId := clobKeeper.GetNextClobPairID(ctx) | |
// Validate ID_NUM is safe to use | |
if ID_NUM <= nextMarketId || ID_NUM <= nextPerpId || ID_NUM <= nextClobId { | |
return fmt.Errorf( | |
"ID_NUM %d must be greater than existing next IDs (market: %d, perp: %d, clob: %d)", | |
ID_NUM, nextMarketId, nextPerpId, nextClobId, | |
) | |
} | |
// Set all ids to a set number | |
pricesKeeper.SetNextMarketID(ctx, ID_NUM) | |
perpetualsKeeper.SetNextPerpetualID(ctx, ID_NUM) | |
clobKeeper.SetNextClobPairID(ctx, ID_NUM) | |
return nil | |
} |
func (k Keeper) NextClobPairId( | ||
c context.Context, | ||
request *types.QueryNextClobPairIdRequest, | ||
) (*types.QueryNextClobPairIdResponse, error) { | ||
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | ||
nextId := k.GetNextClobPairID(ctx) | ||
return &types.QueryNextClobPairIdResponse{ | ||
NextClobPairId: nextId, | ||
}, nil | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add request validation and error handling for consistency
The implementation should follow the same pattern as other query handlers in this file:
- Add nil request validation
- Add error handling for
GetNextClobPairID
Consider applying this change:
func (k Keeper) NextClobPairId(
c context.Context,
request *types.QueryNextClobPairIdRequest,
) (*types.QueryNextClobPairIdResponse, error) {
+ if request == nil {
+ return nil, status.Error(codes.InvalidArgument, "invalid request")
+ }
ctx := lib.UnwrapSDKContext(c, types.ModuleName)
- nextId := k.GetNextClobPairID(ctx)
+ nextId, err := k.GetNextClobPairID(ctx)
+ if err != nil {
+ return nil, status.Error(codes.Internal, err.Error())
+ }
return &types.QueryNextClobPairIdResponse{
NextClobPairId: nextId,
}, nil
}
Committable suggestion skipped: line range outside the PR's diff.
func (k Keeper) NextPerpetualId( | ||
c context.Context, | ||
req *types.QueryNextPerpetualIdRequest, | ||
) ( | ||
*types.QueryNextPerpetualIdResponse, | ||
error, | ||
) { | ||
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | ||
|
||
return &types.QueryNextPerpetualIdResponse{ | ||
NextPerpetualId: k.GetNextPerpetualID(ctx), | ||
}, nil | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add request validation and error handling for consistency.
The NextPerpetualId
method should follow the same patterns as other query methods in this file for consistency and robustness:
- Missing request validation
- Missing error handling for
GetNextPerpetualID
Consider applying this diff:
func (k Keeper) NextPerpetualId(
c context.Context,
req *types.QueryNextPerpetualIdRequest,
) (
*types.QueryNextPerpetualIdResponse,
error,
) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "invalid request")
+ }
+
ctx := lib.UnwrapSDKContext(c, types.ModuleName)
+ nextId := k.GetNextPerpetualID(ctx)
+ if nextId <= 0 {
+ return nil, status.Error(
+ codes.Internal,
+ "failed to get next perpetual ID",
+ )
+ }
+
return &types.QueryNextPerpetualIdResponse{
- NextPerpetualId: k.GetNextPerpetualID(ctx),
+ NextPerpetualId: nextId,
}, nil
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
func (k Keeper) NextPerpetualId( | |
c context.Context, | |
req *types.QueryNextPerpetualIdRequest, | |
) ( | |
*types.QueryNextPerpetualIdResponse, | |
error, | |
) { | |
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | |
return &types.QueryNextPerpetualIdResponse{ | |
NextPerpetualId: k.GetNextPerpetualID(ctx), | |
}, nil | |
} | |
func (k Keeper) NextPerpetualId( | |
c context.Context, | |
req *types.QueryNextPerpetualIdRequest, | |
) ( | |
*types.QueryNextPerpetualIdResponse, | |
error, | |
) { | |
if req == nil { | |
return nil, status.Error(codes.InvalidArgument, "invalid request") | |
} | |
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | |
nextId := k.GetNextPerpetualID(ctx) | |
if nextId <= 0 { | |
return nil, status.Error( | |
codes.Internal, | |
"failed to get next perpetual ID", | |
) | |
} | |
return &types.QueryNextPerpetualIdResponse{ | |
NextPerpetualId: nextId, | |
}, nil | |
} |
func postUpgradeMarketIdsCheck(node *containertest.Node, t *testing.T) { | ||
// query the next market id | ||
resp, err := containertest.Query( | ||
node, | ||
pricetypes.NewQueryClient, | ||
pricetypes.QueryClient.NextMarketId, | ||
&pricetypes.QueryNextMarketIdRequest{}, | ||
) | ||
require.NoError(t, err) | ||
require.NotNil(t, resp) | ||
|
||
nextMarketIdResp := pricetypes.QueryNextMarketIdResponse{} | ||
err = proto.UnmarshalText(resp.String(), &nextMarketIdResp) | ||
require.NoError(t, err) | ||
require.Equal(t, uint32(v_7_1.ID_NUM), nextMarketIdResp.NextMarketId) | ||
|
||
// query the next perpetual id | ||
resp, err = containertest.Query( | ||
node, | ||
perptypes.NewQueryClient, | ||
perptypes.QueryClient.NextPerpetualId, | ||
&perptypes.QueryNextPerpetualIdRequest{}, | ||
) | ||
require.NoError(t, err) | ||
require.NotNil(t, resp) | ||
|
||
nextPerpIdResp := perptypes.QueryNextPerpetualIdResponse{} | ||
err = proto.UnmarshalText(resp.String(), &nextPerpIdResp) | ||
require.NoError(t, err) | ||
require.Equal(t, uint32(v_7_1.ID_NUM), nextPerpIdResp.NextPerpetualId) | ||
|
||
// query the next clob pair id | ||
resp, err = containertest.Query( | ||
node, | ||
clobtypes.NewQueryClient, | ||
clobtypes.QueryClient.NextClobPairId, | ||
&clobtypes.QueryNextClobPairIdRequest{}, | ||
) | ||
require.NoError(t, err) | ||
require.NotNil(t, resp) | ||
|
||
nextClobPairIdResp := clobtypes.QueryNextClobPairIdResponse{} | ||
err = proto.UnmarshalText(resp.String(), &nextClobPairIdResp) | ||
require.NoError(t, err) | ||
require.Equal(t, uint32(v_7_1.ID_NUM), nextClobPairIdResp.NextClobPairId) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Refactor duplicate query validation pattern.
The query validation pattern is repeated three times with similar structure. Consider extracting this into a helper function to improve maintainability and reduce duplication.
+func queryAndValidateNextId[T proto.Message](
+ t *testing.T,
+ node *containertest.Node,
+ newClient func(cc grpc.ClientConn) interface{},
+ queryMethod interface{},
+ request proto.Message,
+) uint32 {
+ resp, err := containertest.Query(node, newClient, queryMethod, request)
+ require.NoError(t, err)
+ require.NotNil(t, resp)
+
+ var response T
+ err = proto.UnmarshalText(resp.String(), &response)
+ require.NoError(t, err)
+ return getNextId(response)
+}
+
func postUpgradeMarketIdsCheck(node *containertest.Node, t *testing.T) {
- // query the next market id
- resp, err := containertest.Query(
+ nextMarketId := queryAndValidateNextId[pricetypes.QueryNextMarketIdResponse](
node,
- pricetypes.NewQueryClient,
- pricetypes.QueryClient.NextMarketId,
- &pricetypes.QueryNextMarketIdRequest{},
+ t,
+ pricetypes.NewQueryClient,
+ pricetypes.QueryClient.NextMarketId,
+ &pricetypes.QueryNextMarketIdRequest{},
)
- require.NoError(t, err)
- require.NotNil(t, resp)
-
- nextMarketIdResp := pricetypes.QueryNextMarketIdResponse{}
- err = proto.UnmarshalText(resp.String(), &nextMarketIdResp)
- require.NoError(t, err)
- require.Equal(t, uint32(v_7_1.ID_NUM), nextMarketIdResp.NextMarketId)
+ require.Equal(t, uint32(v_7_1.ID_NUM), nextMarketId,
+ "Next market ID should be set to fixed number after upgrade")
Committable suggestion skipped: line range outside the PR's diff.
func (k Keeper) NextMarketId( | ||
c context.Context, | ||
req *types.QueryNextMarketIdRequest, | ||
) ( | ||
*types.QueryNextMarketIdResponse, | ||
error, | ||
) { | ||
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | ||
return &types.QueryNextMarketIdResponse{NextMarketId: k.GetNextMarketID(ctx)}, nil | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add request validation and error handling.
The new NextMarketId
method is missing several important checks that are present in other query methods:
- Request validation
- Error handling for GetNextMarketID
- Method documentation
Apply this diff to align with the module's error handling patterns:
+// NextMarketId returns the next available market ID that will be used for the next market.
func (k Keeper) NextMarketId(
c context.Context,
req *types.QueryNextMarketIdRequest,
) (
*types.QueryNextMarketIdResponse,
error,
) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "invalid request")
+ }
ctx := lib.UnwrapSDKContext(c, types.ModuleName)
- return &types.QueryNextMarketIdResponse{NextMarketId: k.GetNextMarketID(ctx)}, nil
+
+ nextId := k.GetNextMarketID(ctx)
+ if nextId == 0 {
+ return nil, status.Error(codes.Internal, "failed to get next market id")
+ }
+
+ return &types.QueryNextMarketIdResponse{NextMarketId: nextId}, nil
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
func (k Keeper) NextMarketId( | |
c context.Context, | |
req *types.QueryNextMarketIdRequest, | |
) ( | |
*types.QueryNextMarketIdResponse, | |
error, | |
) { | |
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | |
return &types.QueryNextMarketIdResponse{NextMarketId: k.GetNextMarketID(ctx)}, nil | |
} | |
// NextMarketId returns the next available market ID that will be used for the next market. | |
func (k Keeper) NextMarketId( | |
c context.Context, | |
req *types.QueryNextMarketIdRequest, | |
) ( | |
*types.QueryNextMarketIdResponse, | |
error, | |
) { | |
if req == nil { | |
return nil, status.Error(codes.InvalidArgument, "invalid request") | |
} | |
ctx := lib.UnwrapSDKContext(c, types.ModuleName) | |
nextId := k.GetNextMarketID(ctx) | |
if nextId == 0 { | |
return nil, status.Error(codes.Internal, "failed to get next market id") | |
} | |
return &types.QueryNextMarketIdResponse{NextMarketId: nextId}, nil | |
} |
|
||
|
||
async nextPerpetualId(_params: QueryNextPerpetualIdRequest = {}): Promise<QueryNextPerpetualIdResponseSDKType> { | ||
const endpoint = `dydxprotocol/perpetuals/next_perpetual_id`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Endpoint pattern is inconsistent across modules
The verification reveals inconsistent endpoint patterns for ID queries across different modules:
/dydxprotocol/perpetuals/next_perpetual_id
/dydxprotocol/prices/next_market_id
/dydxprotocol/clob/next_clob_pair_id
/dydxprotocol/v4/delaymsg/next_id
The delaymsg
module uses a different pattern with v4
in the path, while others follow a consistent dydxprotocol/<module>/next_<resource>_id
pattern.
🔗 Analysis chain
Verify endpoint pattern consistency.
Let's ensure the endpoint pattern for ID queries is consistent across different components (markets, perpetuals, clob pairs).
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for similar endpoint patterns across the codebase
rg -g '*.ts' -g '*.proto' '/next.*id'
# Search for endpoint definitions in proto files
rg -g '*.proto' 'rpc.*NextPerpetualId'
Length of output: 1206
There was a problem hiding this 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 (2)
proto/dydxprotocol/perpetuals/query.proto (1)
47-52
: Add documentation for the NextPerpetualId RPC method.While the implementation is correct, please add documentation comments describing:
- The purpose of this RPC method
- Expected behavior when called
- Any constraints or limitations
Apply this diff to improve documentation:
+ // NextPerpetualId returns the next available perpetual ID that will be used + // for creating new perpetuals. This ID is managed internally by the module + // and is guaranteed to be unique. rpc NextPerpetualId(QueryNextPerpetualIdRequest) returns (QueryNextPerpetualIdResponse) { option (google.api.http).get = "/dydxprotocol/perpetuals/next_perpetual_id"; }indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (1)
160-163
: Improve documentation clarity.The documentation comments are redundant and don't provide additional context. Consider simplifying them to be more descriptive of the actual purpose.
-/** - * QueryNextMarketIdResponse is response type for the Query/Params - * `NextMarketId` - */ +/** + * Response containing the next available market ID that will be assigned + * to a new market. + */Also applies to: 167-169, 173-175, 179-181
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (1)
protocol/x/prices/types/query.pb.go
is excluded by!**/*.pb.go
📒 Files selected for processing (13)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
(2 hunks)proto/dydxprotocol/perpetuals/query.proto
(2 hunks)proto/dydxprotocol/prices/query.proto
(2 hunks)protocol/mocks/AssetsKeeper.go
(1 hunks)protocol/mocks/ClobKeeper.go
(1 hunks)protocol/mocks/DelayMsgKeeper.go
(0 hunks)protocol/mocks/MsgRouter.go
(0 hunks)protocol/mocks/PerpetualsKeeper.go
(3 hunks)protocol/mocks/PricesKeeper.go
(1 hunks)protocol/mocks/QueryClient.go
(1 hunks)protocol/mocks/QueryServer.go
(1 hunks)protocol/mocks/SubaccountsKeeper.go
(0 hunks)protocol/mocks/TxBuilder.go
(0 hunks)
💤 Files with no reviewable changes (4)
- protocol/mocks/DelayMsgKeeper.go
- protocol/mocks/MsgRouter.go
- protocol/mocks/SubaccountsKeeper.go
- protocol/mocks/TxBuilder.go
✅ Files skipped from review due to trivial changes (1)
- protocol/mocks/AssetsKeeper.go
🚧 Files skipped from review as they are similar to previous changes (1)
- proto/dydxprotocol/prices/query.proto
🧰 Additional context used
🪛 Biome
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
🔇 Additional comments (12)
proto/dydxprotocol/perpetuals/query.proto (1)
113-117
: Enhance message documentation and verify field type.
- Add field-level documentation to clarify the meaning and constraints of
next_perpetual_id
. - Verify that uint32 provides sufficient range for the fixed number requirement mentioned in the PR objectives.
Apply this diff to improve documentation:
// QueryNextPerpetualIdRequest is the request type for the NextPerpetualId RPC
message QueryNextPerpetualIdRequest {}
// QueryNextPerpetualIdResponse is the response type for the NextPerpetualId RPC
-message QueryNextPerpetualIdResponse { uint32 next_perpetual_id = 1; }
+message QueryNextPerpetualIdResponse {
+ // next_perpetual_id is the next available ID that will be assigned to a new perpetual.
+ // This value is managed by the module and will be set to a fixed number as part of
+ // the upgrade process.
+ uint32 next_perpetual_id = 1;
+}
Let's verify the usage of this field in the codebase:
✅ Verification successful
Let me analyze the search results to verify the field type:
- The search results show that
next_perpetual_id
is used as a uint32 field in the protobuf definition and throughout the codebase. - In the subaccounts keeper, there are references to
uint32(math.MaxUint32)
being used as a sentinel value for perpetual IDs. - From the upgrade test, we can see that
next_perpetual_id
is being set tov_7_1.ID_NUM
.
Let me check the upgrade code to understand the fixed number requirement:
Documentation improvement approved, field type is appropriate
The uint32 field type is suitable for the next_perpetual_id
as:
- The fixed number requirement sets
ID_NUM = 200
, which is well within uint32 range - The codebase uses uint32 consistently for perpetual IDs
- Even the maximum possible value (MaxUint32) is used as a sentinel value in the subaccounts keeper
Apply the suggested documentation improvement:
// QueryNextPerpetualIdRequest is the request type for the NextPerpetualId RPC
message QueryNextPerpetualIdRequest {}
// QueryNextPerpetualIdResponse is the response type for the NextPerpetualId RPC
-message QueryNextPerpetualIdResponse { uint32 next_perpetual_id = 1; }
+message QueryNextPerpetualIdResponse {
+ // next_perpetual_id is the next available ID that will be assigned to a new perpetual.
+ // This value is managed by the module and will be set to a fixed number as part of
+ // the upgrade process.
+ uint32 next_perpetual_id = 1;
+}
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check the range of perpetual IDs used in the codebase to ensure uint32 is sufficient
# Search for perpetual ID assignments or comparisons
rg -A 2 'next_perpetual_id|NextPerpetualId' --type go
# Look for any constants or configuration related to perpetual ID ranges
rg -A 2 'MaxPerpetual|MaximumPerpetual|PerpetualId.*Max' --type go
Length of output: 21111
Script:
#!/bin/bash
# Check the upgrade code for the fixed number requirement
rg -A 2 'ID_NUM' protocol/app/upgrades/v7.1/
Length of output: 1304
protocol/mocks/QueryServer.go (1)
138-166
: LGTM! The mock implementation follows the established patterns.
The generated mock method for NextMarketId
maintains consistency with other query methods and includes proper error handling and type assertions.
Let's verify that this mock is being used correctly in the test files:
✅ Verification successful
Let me gather more context about the mock usage and implementation:
Let me verify one final aspect about the test usage:
Mock implementation is correctly used in integration tests
The mock implementation is properly integrated and used in the v7.1 upgrade tests, where it's part of verifying that market IDs are correctly set to 200 after the upgrade. The implementation follows the established patterns and is being used appropriately in the test context.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for proper usage of NextMarketId mock in test files
# Expected: Find test files that set up expectations for this mock method
# Search for test files using NextMarketId
rg -l "NextMarketId" --type go --glob '*_test.go'
# Show the usage context
rg -B 3 -A 3 "NextMarketId" --type go --glob '*_test.go'
Length of output: 1498
Script:
#!/bin/bash
# Check the implementation of QueryNextMarketId in the actual service
ast-grep --pattern 'func $_($_, $_ *types.QueryNextMarketIdRequest) (*types.QueryNextMarketIdResponse, error)'
# Check if there are any other test files using QueryServer mock
rg -l "QueryServer" --type go --glob '*_test.go'
# Check the mock initialization in the test file
rg -B 5 -A 5 "NewQueryServer" --type go
Length of output: 1453
Script:
#!/bin/bash
# Check the actual test implementation to see how NextMarketId is used
rg -B 10 -A 10 "NextMarketId" protocol/app/upgrades/v7.1/upgrade_container_test.go
# Check the v7.1 upgrade constants
rg "ID_NUM" protocol/app/upgrades/v7.1/
Length of output: 1779
protocol/mocks/PricesKeeper.go (1)
421-424
:
This file is auto-generated by mockery v2.46.0. Instead of modifying it directly:
- Update the
PricesKeeper
interface in the source package - Regenerate the mock using mockery
Let's verify the interface definition and regeneration process:
✅ Verification successful
Based on the search results, I can now generate the final response:
✅ Mock implementation is correctly aligned with the interface
The SetNextMarketID
method is properly defined in the interface at protocol/x/prices/types/types.go
and implemented in the keeper at protocol/x/prices/keeper/market.go
. The mock implementation matches the interface signature, making this a valid auto-generated mock.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify the PricesKeeper interface definition and mock generation
# Find the interface definition
rg -l "type PricesKeeper interface" protocol/
# Check if SetNextMarketID is defined in the interface
rg "SetNextMarketID" protocol/
Length of output: 1124
protocol/mocks/PerpetualsKeeper.go (3)
1-1
: LGTM: Mockery version upgrade
The upgrade from mockery v2.44.1 to v2.46.0 is a positive change that brings in the latest improvements and bug fixes from the mock generation tool.
363-366
: LGTM: New SetNextPerpetualID implementation
The new mock function aligns with the PR objectives to set fixed IDs for perpetuals. The implementation correctly follows the mock pattern:
- Accepts context and nextID parameters
- Records the call using the mock framework
- No return value as expected for a setter
363-366
: Verify interface compliance
Let's ensure this mock implementation matches the actual interface definition.
✅ Verification successful
Mock implementation matches the interface definition
The mock implementation of SetNextPerpetualID
in PerpetualsKeeper.go
correctly matches the interface definition found in protocol/x/perpetuals/types/types.go
. The function signature matches exactly with the same parameter types: ctx types.Context
and nextID uint32
.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify SetNextPerpetualID interface definition
# Expected: Find the interface definition with matching signature
# Search for the interface definition
ast-grep --pattern 'type PerpetualsKeeper interface {
$$$
SetNextPerpetualID(ctx $_, nextID $_)
$$$
}'
Length of output: 6270
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (2)
156-156
: LGTM! Empty interfaces are intentional.
The empty interfaces are correctly defined as they represent protobuf message types that don't require any fields. While static analysis suggests using type aliases, maintaining interface definitions is more appropriate for protobuf-generated code to preserve the contract.
Also applies to: 159-159
🧰 Tools
🪛 Biome
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
565-641
: LGTM! Implementation follows best practices.
The encoding/decoding logic is well-implemented:
- Follows consistent patterns with other query handlers
- Correctly handles protobuf wire format
- Uses appropriate types and default values
protocol/mocks/ClobKeeper.go (1)
1137-1140
: LGTM: Mock implementation follows established patterns.
The SetNextClobPairID
mock method is correctly implemented following the mockery patterns, with proper parameter handling and mock recording.
protocol/mocks/QueryClient.go (3)
699-734
: LGTM! Implementation follows mock patterns.
The NextClobPairId
mock method is correctly implemented following the established patterns for mockery-generated code, with proper handling of:
- gRPC call options
- Return value validation
- Type assertions
- Error handling
Let's verify the integration with the upgrade handler:
✅ Verification successful
Let me gather more context about the upgrade handler implementation to verify the integration.
Mock implementation correctly supports upgrade handler integration
The verification confirms that the NextClobPairId
mock is properly integrated with the v7.1 upgrade handler where:
- The upgrade sets a fixed ID number (200) for market, perpetual, and CLOB pair IDs
- The mock is used in tests to verify the upgrade handler's behavior
- Test assertions confirm the mock returns the expected fixed ID value
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check how the NextClobPairId is used in upgrade handlers
# Search for NextClobPairId usage in upgrade handlers
rg -A 5 "NextClobPairId" | rg "upgrade"
Length of output: 985
Script:
#!/bin/bash
# Check the upgrade handler implementation
rg -A 10 "ID_NUM" protocol/app/upgrades/v7.1/
Length of output: 3809
773-808
: LGTM! Implementation follows mock patterns.
The NextPerpetualId
mock method is correctly implemented following the established patterns for mockery-generated code, with proper handling of:
- gRPC call options
- Return value validation
- Type assertions
- Error handling
Let's verify the integration with the upgrade handler:
✅ Verification successful
Let me gather more context about the upgrade handler implementation to ensure proper verification.
Let me check the upgrade handler implementation to complete the verification.
Based on the gathered information, I can now provide the final response:
Mock implementation correctly supports upgrade handler integration
The NextPerpetualId
mock implementation is correctly used in the upgrade handler test suite (protocol/app/upgrades/v7.1/upgrade_container_test.go
). The mock is used in post-upgrade verification to ensure the perpetual ID is properly set to the expected value after the upgrade. The implementation properly handles the gRPC context, request, and options, allowing the test to verify the upgrade's correctness.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check how the NextPerpetualId is used in upgrade handlers
# Search for NextPerpetualId usage in upgrade handlers
rg -A 5 "NextPerpetualId" | rg "upgrade"
Length of output: 1291
Script:
#!/bin/bash
# Check the upgrade handler implementation and its usage of NextPerpetualId
ast-grep --pattern 'func $$$($$$) {
$$$
NextPerpetualId
$$$
}'
# Also check the test file content to understand the test context
cat protocol/app/upgrades/v7.1/upgrade_container_test.go
Length of output: 3045
Script:
#!/bin/bash
# Check the upgrade handler implementation in v7.1
cat protocol/app/upgrades/v7.1/upgrades.go
# Also check for any constants defined
cat protocol/app/upgrades/v7.1/constants.go
Length of output: 546
736-771
: LGTM! Implementation follows mock patterns.
The NextMarketId
mock method is correctly implemented following the established patterns for mockery-generated code, with proper handling of:
- gRPC call options
- Return value validation
- Type assertions
- Error handling
Let's verify the integration with the upgrade handler:
✅ Verification successful
Let me gather more context about the upgrade handler implementation to ensure proper integration.
Let me check the upgrade handler implementation to complete the verification.
Let me check the upgrade handler implementation in the correct file.
NextMarketId mock implementation is correctly integrated with the upgrade handler
The verification confirms that:
- The mock implementation is used in upgrade tests to verify the NextMarketId functionality
- The upgrade handler correctly sets the market ID to 200 using
SetNextMarketID
- The test verifies this behavior by querying NextMarketId and checking it equals the expected value (200)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check how the NextMarketId is used in upgrade handlers
# Search for NextMarketId usage in upgrade handlers
rg -A 5 "NextMarketId" | rg "upgrade"
Length of output: 1285
Script:
#!/bin/bash
# Check the upgrade handler implementation
ast-grep --pattern 'func $_($$) {
$$$
NextMarketId
$$$
}'
# Also check the v7.1 upgrade container implementation
cat protocol/app/upgrades/v7.1/upgrade_container_test.go
Length of output: 3040
Script:
#!/bin/bash
# Check the v7.1 upgrade handler implementation
cat protocol/app/upgrades/v7.1/upgrades.go
# Also check the ID_NUM constant
rg "ID_NUM.*=" protocol/app/upgrades/v7.1/
Length of output: 212
Script:
#!/bin/bash
# Check the v7.1 upgrade handler implementation
cat protocol/app/upgrades/v7.1/upgrade.go
Length of output: 1636
There was a problem hiding this 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 (2)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (2)
156-159
: Consider using type aliases for empty interfaces.The empty interfaces
QueryNextMarketIdRequest
andQueryNextMarketIdRequestSDKType
can be simplified using type aliases.-export interface QueryNextMarketIdRequest {} -export interface QueryNextMarketIdRequestSDKType {} +export type QueryNextMarketIdRequest = Record<string, never>; +export type QueryNextMarketIdRequestSDKType = Record<string, never>;🧰 Tools
🪛 Biome
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
165-171
: Remove redundant comments within the interface.The comment block is duplicated within the interface definition and can be removed to improve readability.
export interface QueryNextMarketIdResponse { - /** - * QueryNextMarketIdResponse is response type for the Query/Params - * `NextMarketId` - */ nextMarketId: number; }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (1)
protocol/x/prices/types/query.pb.go
is excluded by!**/*.pb.go
📒 Files selected for processing (8)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
(2 hunks)proto/dydxprotocol/perpetuals/query.proto
(2 hunks)proto/dydxprotocol/prices/query.proto
(2 hunks)protocol/mocks/ClobKeeper.go
(1 hunks)protocol/mocks/PerpetualsKeeper.go
(3 hunks)protocol/mocks/PricesKeeper.go
(1 hunks)protocol/mocks/QueryClient.go
(1 hunks)protocol/mocks/QueryServer.go
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (6)
- proto/dydxprotocol/perpetuals/query.proto
- proto/dydxprotocol/prices/query.proto
- protocol/mocks/ClobKeeper.go
- protocol/mocks/PerpetualsKeeper.go
- protocol/mocks/PricesKeeper.go
- protocol/mocks/QueryServer.go
🧰 Additional context used
🪛 Biome
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
🔇 Additional comments (3)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (1)
565-641
: Implementation looks good!
The encoding/decoding implementation for NextMarketId query follows the established patterns and correctly handles:
- Proper initialization of default values
- uint32 encoding/decoding for nextMarketId
- Null coalescing in fromPartial method
protocol/mocks/QueryClient.go (2)
699-734
: LGTM! The new mock methods are well-implemented.
The three new mock methods (NextClobPairId
, NextMarketId
, and NextPerpetualId
) are correctly implemented following the established patterns in the codebase:
- Proper parameter handling for context, request, and gRPC options
- Consistent error handling and return value management
- Appropriate use of reflection for type checking
- Clear panic messages for missing return values
Also applies to: 736-771, 773-808
699-808
: Verify test coverage for the new ID query methods.
Since these mock methods are crucial for testing the new fixed ID assignment functionality, ensure there are comprehensive tests covering various scenarios:
- Successful ID queries
- Error cases
- Edge cases with different input parameters
✅ Verification successful
Mock methods are properly tested with comprehensive coverage
The test coverage for the new ID query methods is comprehensive and well-structured:
- All three methods (NextClobPairId, NextMarketId, NextPerpetualId) are tested in integration tests
- Tests verify both successful query execution and response correctness
- Tests ensure all IDs are set to the expected fixed number (v_7_1.ID_NUM)
- Error handling is verified through require.NoError checks
- Response validation includes nil checks and proper unmarshaling
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for test files that use these new mock methods
# Search for test files using these mock methods
echo "Searching for test files using NextClobPairId..."
rg "NextClobPairId" --type go --type-add "go:*.go" -l
echo "Searching for test files using NextMarketId..."
rg "NextMarketId" --type go --type-add "go:*.go" -l
echo "Searching for test files using NextPerpetualId..."
rg "NextPerpetualId" --type go --type-add "go:*.go" -l
Length of output: 1133
Script:
#!/bin/bash
# Let's examine the test coverage in upgrade_container_test.go since it uses all three methods
echo "Checking test coverage in upgrade_container_test.go..."
rg "NextClobPairId|NextMarketId|NextPerpetualId" protocol/app/upgrades/v7.1/upgrade_container_test.go -C 5
# Also check for any test assertions related to these methods
echo -e "\nChecking for test assertions..."
rg "assert.*Next(ClobPair|Market|Perpetual)Id" protocol/app/upgrades/v7.1/upgrade_container_test.go
Length of output: 1860
Signed-off-by: Shrenuj Bansal <[email protected]>
There was a problem hiding this 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
⛔ Files ignored due to path filters (1)
protocol/x/prices/types/query.pb.go
is excluded by!**/*.pb.go
📒 Files selected for processing (8)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
(2 hunks)proto/dydxprotocol/perpetuals/query.proto
(2 hunks)proto/dydxprotocol/prices/query.proto
(2 hunks)protocol/mocks/ClobKeeper.go
(1 hunks)protocol/mocks/PerpetualsKeeper.go
(3 hunks)protocol/mocks/PricesKeeper.go
(1 hunks)protocol/mocks/QueryClient.go
(1 hunks)protocol/mocks/QueryServer.go
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (6)
- proto/dydxprotocol/perpetuals/query.proto
- proto/dydxprotocol/prices/query.proto
- protocol/mocks/ClobKeeper.go
- protocol/mocks/PricesKeeper.go
- protocol/mocks/QueryClient.go
- protocol/mocks/QueryServer.go
🧰 Additional context used
🪛 Biome (1.9.4)
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
🔇 Additional comments (5)
protocol/mocks/PerpetualsKeeper.go (3)
396-399
: LGTM! Implementation follows mock patterns.
The SetNextPerpetualID mock implementation correctly records the method call with both parameters and follows the setter pattern with no return value.
477-477
: LGTM! Constructor follows standard mock patterns.
The NewPerpetualsKeeper constructor correctly implements the standard mockery patterns with proper test cleanup registration.
396-399
: Verify integration with other ID setters.
The SetNextPerpetualID implementation aligns with the PR objective of setting fixed IDs. Please ensure that:
- Similar implementations exist for market and clob pair ID setters
- The ID setting behavior is consistently implemented across all three components
✅ Verification successful
Based on the search results, I can generate the final response as we have comprehensive information about the ID setter implementations across the codebase.
ID setter implementations are consistently implemented across all components
The implementation of SetNextPerpetualID
in the mock is consistent with other ID setters. All three components (Perpetuals, Markets, and CLOB pairs) have:
- Consistent interface definitions in their respective
types
packages - Identical mock implementations in
protocol/mocks/
- Similar actual implementations in their respective keepers
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for consistent implementation of ID setters across keeper mocks
# Search for SetNext*ID methods in mock files
echo "Searching for ID setter implementations in mocks..."
rg -A 5 "SetNext.*ID.*\(ctx.*Context.*nextID.*uint32\)" --type go
# Search for related interface definitions
echo "Searching for ID setter interfaces..."
rg -A 5 "SetNext.*ID.*interface" --type go
Length of output: 3754
indexer/packages/v4-protos/src/codegen/dydxprotocol/prices/query.ts (2)
154-183
: LGTM! Interface declarations follow protobuf patterns.
The empty interfaces are intentional and follow protobuf patterns where even empty messages need an interface type. While static analysis suggests using type aliases, maintaining consistency with protobuf patterns is more important here.
🧰 Tools
🪛 Biome (1.9.4)
[error] 156-156: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 159-159: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
565-641
: LGTM! Implementation follows protobuf patterns consistently.
The encoding/decoding implementation:
- Properly handles empty messages for requests
- Uses correct wire format for the nextMarketId field
- Maintains consistency with other query implementations
- Includes proper null coalescing for default values
@@ -1,4 +1,4 @@ | |||
// Code generated by mockery v2.44.1. DO NOT EDIT. | |||
// Code generated by mockery v2.46.0. DO NOT EDIT. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Mockery version inconsistency detected across mock files
The codebase contains mock files generated with different versions of mockery:
- Most files (including PerpetualsKeeper.go) use v2.46.0
- Some files use older versions:
- v2.44.1: TxBuilder.go, AssetsKeeper.go, DelayMsgKeeper.go, MsgRouter.go
- v2.23.1: PreparePricesKeeper.go, Marshaler.go
- v2.14.0: Msg.go
Please regenerate all mock files using the same mockery version (v2.46.0) to maintain consistency and prevent potential compatibility issues.
🔗 Analysis chain
Verify mockery upgrade impact.
The mock was regenerated using mockery v2.46.0 (upgraded from v2.44.1). Please ensure that:
- The upgrade was intentional and follows the project's dependency management guidelines
- All mocks in the codebase are regenerated with the same version for consistency
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for mockery version consistency across all mock files
# Find all mock files and check their mockery version
fd --type f ".*mock.*\.go$" --exec grep -H "mockery v" {} \;
Length of output: 65
Script:
#!/bin/bash
# Let's try a different approach to find mock files and their versions
# First, find all Go files with 'mock' in their name
echo "=== Files with 'mock' in their name ==="
fd -e go mock
# Then, let's examine the content of these files
echo -e "\n=== Mockery versions in mock files ==="
fd -e go mock --exec head -n 5 {} \;
Length of output: 245
Script:
#!/bin/bash
# Let's try one more approach using ripgrep to find mock files and their versions
# Search for mockery version strings in all .go files
echo "=== Searching for mockery version strings ==="
rg -l "mockery v" --type go
echo -e "\n=== Content of found files ==="
rg "mockery v" --type go -A 2
Length of output: 12251
There was a problem hiding this 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)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts (1)
249-266
: Consider using type aliases for empty interfaces.The interface definitions are well-structured and follow protobuf conventions. However, for empty interfaces like
QueryNextClobPairIdRequest
, consider using type aliases for better TypeScript practices.Apply this diff to use type aliases:
-export interface QueryNextClobPairIdRequest {} +export type QueryNextClobPairIdRequest = Record<string, never>; -export interface QueryNextClobPairIdRequestSDKType {} +export type QueryNextClobPairIdRequestSDKType = Record<string, never>;🧰 Tools
🪛 Biome (1.9.4)
[error] 251-251: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 254-254: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (1)
protocol/x/clob/types/query.pb.go
is excluded by!**/*.pb.go
📒 Files selected for processing (3)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts
(2 hunks)proto/dydxprotocol/clob/query.proto
(2 hunks)protocol/mocks/ClobKeeper.go
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- proto/dydxprotocol/clob/query.proto
- protocol/mocks/ClobKeeper.go
🧰 Additional context used
🪛 Biome (1.9.4)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts
[error] 251-251: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 254-254: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
🔇 Additional comments (2)
indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts (2)
1218-1295
: LGTM! Implementation follows protobuf patterns.
The encoding, decoding, and partial object creation functions are well-implemented and consistent with protobuf message handling patterns throughout the codebase.
249-266
: Verify companion query functionality for market and perp IDs.
Since the PR objectives mention setting fixed numbers for market, perp, and CLOB pair IDs, ensure that similar query functionality exists for market and perp IDs.
Run the following script to verify companion query functionality:
Also applies to: 1218-1295
✅ Verification successful
Based on the shell script results, I can now generate the final response since I have found evidence of companion query functionality for both market and perpetual IDs:
Companion query functionality exists and is properly integrated
The codebase shows complete implementations of query functionality for all required IDs:
- Market ID queries in
prices
module:QueryNextMarketIdRequest/Response
- Perpetual ID queries in
perpetuals
module:QueryNextPerpetualIdRequest/Response
- CLOB pair ID queries in
clob
module (from original review)
All implementations follow the same pattern and are properly integrated with their respective modules.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for similar query functionality for market and perp IDs.
# Search for market ID query definitions
rg -A 5 'QueryNextMarketId|QueryNextPerpetualId'
# Search for market ID query implementations
ast-grep --pattern $'(interface|type) QueryNext(Market|Perpetual)Id'
Length of output: 67744
🧰 Tools
🪛 Biome (1.9.4)
[error] 251-251: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 254-254: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
Changelist
Currently the market, perp and clob pair ids have diverged and we'd like them to remain the same for convenience. This upgrade sets the next assigned id for each to a fixed number in order to achieve this goal
Test Plan
Added tests
Author/Reviewer Checklist
state-breaking
label.indexer-postgres-breaking
label.PrepareProposal
orProcessProposal
, manually add the labelproposal-breaking
.feature:[feature-name]
.backport/[branch-name]
.refactor
,chore
,bug
.Summary by CodeRabbit
Release Notes
New Features
Bug Fixes
Documentation