Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[CLOB-1054] state R/W methods for last trade price #910

Merged
merged 4 commits into from Jan 5, 2024
Merged

Conversation

jayy04
Copy link
Contributor

@jayy04 jayy04 commented Jan 2, 2024

Changelist

  • State read and write methods for last trade price. This will be used for improved conditional order triggering.

Test Plan

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

Author/Reviewer Checklist

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

Copy link

coderabbitai bot commented Jan 2, 2024

Walkthrough

The recent changes involve the introduction of functionality for managing and tracking the last trade prices of perpetual contracts within the clob module's keeper package. This includes the ability to read and write these prices to memory, along with a dedicated test to ensure the reliability of the new GetSetLastTradePrice function. Additionally, a new store function has been added for accessing the last trade prices, and a constant for the last trade price prefix has been defined to facilitate better order triggering conditions.

Changes

Files Change Summaries
.../clob/keeper/match_state.go, .../clob/keeper/match_state_test.go Introduced functionality to manage last trade prices for perpetuals and added a test for the new functionality.
.../clob/keeper/stores.go Added GetLastTradePriceStore function to fetch a prefix store for reading and updating last trade prices for perpetuals.
.../clob/types/keys.go Defined LastTradePricePrefix constant to retrieve the last trade price for a perpetual, intended for improved conditional order triggering.

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

Share

Tips

Chat

There are 3 ways to chat with CodeRabbit's AI:

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

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

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

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

CodeRabbit Configration File (.coderabbit.yaml)

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

CodeRabbit Discord Community

Join our Discord Community to get help, request features, and share feedback.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 1

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between cc235f0 and 16ca6a9.
Files selected for processing (4)
  • protocol/x/clob/keeper/match_state.go (1 hunks)
  • protocol/x/clob/keeper/match_state_test.go (1 hunks)
  • protocol/x/clob/keeper/stores.go (1 hunks)
  • protocol/x/clob/types/keys.go (1 hunks)
Additional comments: 4
protocol/x/clob/keeper/match_state.go (2)
  • 10-25: The GetLastTradePriceForPerpetual method is implemented correctly, ensuring that the last trade price is retrieved from the memory store and unmarshaled properly.

  • 27-40: The SetLastTradePriceForPerpetual method is implemented correctly, ensuring that the last trade price is set in the memory store as expected.

protocol/x/clob/types/keys.go (1)
  • 78-80: The addition of the LastTradePricePrefix constant is appropriate for its intended use in retrieving the last trade price for a perpetual.
protocol/x/clob/keeper/stores.go (1)
  • 154-161: The GetLastTradePriceMemStore function is implemented correctly, creating a new prefix store for last trade prices using the appropriate byte prefix.

Comment on lines +13 to +30
func TestGetSetLastTradePrice(t *testing.T) {
// Setup keeper state and test parameters.
memClob := memclob.NewMemClobPriceTimePriority(false)
ks := keepertest.NewClobKeepersTestContext(t, memClob, &mocks.BankKeeper{}, &mocks.IndexerEventManager{})

// Get non-existent last trade price.
price, found := ks.ClobKeeper.GetLastTradePriceForPerpetual(ks.Ctx, 0)
require.Equal(t, price, types.Subticks(0))
require.False(t, found)

// Set last trade price.
ks.ClobKeeper.SetLastTradePriceForPerpetual(ks.Ctx, 0, types.Subticks(17))

// Get the last trade price, which should now exist.
price, found = ks.ClobKeeper.GetLastTradePriceForPerpetual(ks.Ctx, 0)
require.Equal(t, price, types.Subticks(17))
require.True(t, found)
}
Copy link

Choose a reason for hiding this comment

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

The test TestGetSetLastTradePrice correctly checks the basic functionality of getting and setting the last trade price. Consider adding more test cases to cover edge cases, such as invalid perpetual IDs, concurrent access, and error handling scenarios.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 16ca6a9 and a7c8f8d.
Files selected for processing (3)
  • protocol/x/clob/keeper/match_state.go (1 hunks)
  • protocol/x/clob/keeper/stores.go (1 hunks)
  • protocol/x/clob/types/keys.go (1 hunks)
Files skipped from review as they are similar to previous changes (2)
  • protocol/x/clob/keeper/match_state.go
  • protocol/x/clob/keeper/stores.go
Additional comments: 2
protocol/x/clob/types/keys.go (2)
  • 56-58: The addition of the LastTradePricePrefix constant is consistent with the naming conventions and purpose of other constants in the file. Ensure that the new key prefix does not overlap with existing prefixes to avoid key collisions.

  • 52-60: The new constant LastTradePricePrefix is well-placed within the State constants section and follows the existing pattern for key prefixes. It's important to verify that the new key prefix is integrated correctly in the codebase where it's intended to be used.

Verification successful

The search results confirm that the LastTradePricePrefix constant is being used in the stores.go file within the clob module, which aligns with the intended purpose of the constant as described in the PR objectives and the AI-generated summaries. This suggests that the constant has been integrated into the codebase where it is meant to be used for accessing the last trade price for a perpetual.

  • The constant is defined in keys.go as expected.
  • It is used in stores.go to presumably construct a key for data retrieval.

Based on the information provided, there are no conflicts or issues with the integration of the new constant LastTradePricePrefix in the codebase.

Scripts Executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Search for usage of LastTradePricePrefix to ensure it's being used correctly.
rg --type go 'LastTradePricePrefix'

Length of output: 296

@jayy04 jayy04 merged commit ce8f329 into main Jan 5, 2024
17 checks passed
@jayy04 jayy04 deleted the jy/clob-1054 branch January 5, 2024 19:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants