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

[RelayMiner] Fix LeanClient mutiple suppliers support #662

Merged
merged 10 commits into from
Jul 15, 2024

Conversation

red-0ne
Copy link
Contributor

@red-0ne red-0ne commented Jul 5, 2024

Summary

This PR introduces changes to:

  • Fix the LeanClient support for multiple Suppliers.
  • Fix dead lock causing memory leak.
  • Refactor SessionTree removal from RelayMiner's session trees map.
  • Simplify batched tx construction by removing superfluous structs.
  • Remove expired session's SessionTrees so they are no longer reprocessed.
  • Fix duplicate server initialization.
  • Add parallel processing of SessionTrees of distinct Suppliers

image

Type of change

Select one or more:

  • New feature, functionality or library
  • Bug fix
  • Code health or cleanup
  • Documentation
  • Other (specify)

Testing

Documentation changes (only if making doc changes)

  • make docusaurus_start; only needed if you make doc changes

Local Testing (only if making code changes)

  • Unit Tests: make go_develop_and_test
  • LocalNet E2E Tests: make test_e2e
  • See quickstart guide for instructions

PR Testing (only if making code changes)

  • DevNet E2E Tests: Add the devnet-test-e2e label to the PR.
    • THIS IS VERY EXPENSIVE, so only do it after all the reviews are complete.
    • Optionally run make trigger_ci if you want to re-trigger tests without any code changes
    • If tests fail, try re-running failed tests only using the GitHub UI as shown here

Sanity Checklist

  • I have tested my changes using the available tooling
  • I have commented my code
  • I have performed a self-review of my own code; both comments & source code
  • I create and reference any new tickets, if applicable
  • I have left TODOs throughout the codebase, if applicable

Summary by CodeRabbit

  • New Features

    • Added interfaces MsgCreateClaim and MsgSubmitProof for improved session claim and proof handling.
  • Improvements

    • Enhanced CreateClaims and SubmitProofs functions to support variadic parameters for better flexibility.
    • Updated Block function for more efficient block querying.
    • Refined session management by grouping sessions by block height and supplier address, improving clarity and organization.
    • Added logging for error handling in session proofs submission.
  • Bug Fixes

    • Removed expired session trees to ensure up-to-date session management.
    • Fixed error handling in session proofs submission to improve reliability.

@red-0ne red-0ne added bug Something isn't working off-chain Off-chain business logic labels Jul 5, 2024
@red-0ne red-0ne self-assigned this Jul 5, 2024
Copy link

coderabbitai bot commented Jul 5, 2024

Walkthrough

The modifications introduce new interfaces for claim and proof messages, update the SupplierClient interface to handle these new types, and improve session management within the relayer. Error handling and logging are enhanced, and expired session trees are now deleted. The changes also refine session handling by supplier address and update test structures accordingly.

Changes

File Path Change Summary
pkg/client/interface.go Added MsgCreateClaim and MsgSubmitProof interfaces; updated SupplierClient and BlockQueryClient functions to use these new interfaces and return types.
pkg/relayer/session/claim.go Introduced prooftypes for message types; modified createClaims method to use supplierClient and observable parameters; added error handling and session tree deletion logic.
pkg/relayer/session/proof.go Added types import; updated submitProofs method to take supplierClient parameter; enhanced error logging and session tree management logic.
pkg/relayer/session/session.go Refined structure of sessionsTreesMap; improved comments and session management within relayerSessionsManager; added functions for handling supplier-specific sessions and deleting expired sessions.
x/proof/keeper/msg_server_submit_proof_test.go Simplified test structure by removing an unnecessary function parameter from newEmptySessionTree.

Poem

In code's deep warren, changes brew,
Claims and proofs we now renew.
Supplier trees pruned, errors shown,
Sessions managed, smoothly grown.
With each byte and line, we strive,
Making systems come alive.
🌟🐇✨


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

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

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

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

CodeRabbit Commands (invoked as PR comments)

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

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

CodeRabbit Configration File (.coderabbit.yaml)

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

Documentation and Community

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

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between a15452f and 13a75dc.

Files selected for processing (12)
  • pkg/client/interface.go (5 hunks)
  • pkg/client/supplier/client.go (4 hunks)
  • pkg/client/supplier/client_test.go (3 hunks)
  • pkg/relayer/proxy/server_builder.go (2 hunks)
  • pkg/relayer/proxy/synchronous.go (2 hunks)
  • pkg/relayer/session/claim.go (6 hunks)
  • pkg/relayer/session/proof.go (7 hunks)
  • pkg/relayer/session/session.go (13 hunks)
  • pkg/relayer/session/sessiontree.go (4 hunks)
  • pkg/relayer/types.go (2 hunks)
  • testutil/testclient/testsupplier/client.go (2 hunks)
  • x/proof/keeper/msg_server_submit_proof_test.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • pkg/relayer/types.go
Additional comments not posted (44)
pkg/client/supplier/client.go (6)

5-5: Add import for sync package.

The import for the sync package is necessary for the sync.Mutex field added to the supplierClient struct.


23-24: Add pendingTxMu to supplierClient struct.

The pendingTxMu field is added to the supplierClient struct to prevent concurrent transactions with the same sequence number. This is a good practice to ensure thread safety.


69-72: Lock and unlock pendingTxMu in SubmitProofs.

The pendingTxMu is locked at the beginning of the SubmitProofs method and unlocked using defer to ensure that it is always unlocked, even if an error occurs. This is a good practice to prevent deadlocks.


113-117: Lock and unlock pendingTxMu in CreateClaims.

The pendingTxMu is locked at the beginning of the CreateClaims method and unlocked using defer to ensure that it is always unlocked, even if an error occurs. This is a good practice to prevent deadlocks.


88-93: Ensure correct type casting in SubmitProofs.

The type casting of proofMsgs to *prooftypes.MsgSubmitProof is done without checking. Ensure that client.MsgSubmitProof is always of type *prooftypes.MsgSubmitProof to prevent runtime errors.

Verification successful

Type casting is verified to be correct.

The type casting of proofMsgs to *prooftypes.MsgSubmitProof is safe because proofMsgs is populated with elements of type *prooftypes.MsgSubmitProof.

  • pkg/relayer/session/proof.go: proofMsgs is initialized and appended with &prooftypes.MsgSubmitProof.
  • pkg/client/supplier/client.go: The type casting occurs here and is verified to be correct.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that client.MsgSubmitProof is always of type *prooftypes.MsgSubmitProof.

# Test: Search for the type definition. Expect: client.MsgSubmitProof is of type *prooftypes.MsgSubmitProof.
ast-grep --lang go --pattern $'type MsgSubmitProof interface {
  GetProof() []byte
  GetSessionHeader() *sessiontypes.SessionHeader
  GetSupplierAddress() string
}'

Length of output: 165


Script:

#!/bin/bash
# Description: Verify the type of proofMsgs and ensure it is always of type *prooftypes.MsgSubmitProof.

# Find the definition and initialization of proofMsgs
rg 'proofMsgs' -A 5

# Search for the usage of prooftypes.MsgSubmitProof to understand its type and usage
rg 'prooftypes.MsgSubmitProof'

Length of output: 5093


134-139: Ensure correct type casting in CreateClaims.

The type casting of claimMsgs to *prooftypes.MsgCreateClaim is done without checking. Ensure that client.MsgCreateClaim is always of type *prooftypes.MsgCreateClaim to prevent runtime errors.

Verification successful

Type casting in CreateClaims is correct and safe.

The claimMsgs slice is consistently populated with elements of type *prooftypes.MsgCreateClaim, ensuring that the type casting in pkg/client/supplier/client.go does not pose any runtime risks.

  • pkg/relayer/session/claim.go: claimMsgs is initialized and populated with &prooftypes.MsgCreateClaim.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that client.MsgCreateClaim is always of type *prooftypes.MsgCreateClaim.

# Test: Search for the type definition. Expect: client.MsgCreateClaim is of type *prooftypes.MsgCreateClaim.
ast-grep --lang go --pattern $'type MsgCreateClaim interface {
  GetRootHash() []byte
  GetSessionHeader() *sessiontypes.SessionHeader
  GetSupplierAddress() string
}'

Length of output: 168


Script:

#!/bin/bash
# Search for references and definitions of MsgCreateClaim in the codebase
rg 'MsgCreateClaim'

Length of output: 29910


Script:

#!/bin/bash
# Search for the definition and initialization of claimMsgs in the codebase
rg 'claimMsgs'

Length of output: 609

pkg/client/supplier/client_test.go (1)

20-20: Update imports to use prooftypes and sessiontypes packages.

The imports have been updated to use the prooftypes and sessiontypes packages. Ensure that these changes are consistent with the rest of the codebase.

pkg/relayer/proxy/server_builder.go (2)

100-102: Remove supplierServices parameter from initializeProxyServers.

The supplierServices parameter has been removed from the initializeProxyServers method. Ensure that this change is consistent with the rest of the codebase and that the supplierServices parameter is no longer needed.


109-109: Update initializeProxyServers method.

The initializeProxyServers method has been updated to no longer require the supplierServices parameter. Ensure that this change is consistent with the rest of the codebase and that the supplierServices parameter is no longer needed.

pkg/relayer/session/sessiontree.go (1)

230-230: Ensure proper synchronization when accessing isClaiming.

Setting isClaiming to false without checking its current state or ensuring thread safety might lead to race conditions or inconsistent states.

Ensure that all accesses to isClaiming are properly synchronized.

pkg/relayer/session/claim.go (10)

14-14: Import prooftypes correctly.

The prooftypes import is necessary for the updated createClaims method.


26-27: Pass supplierClient to createClaims.

The createClaims method now requires supplierClient as a parameter, which is necessary for creating claims.


35-35: Ensure proper error handling for mapWaitForEarliestCreateClaimsHeight.

Ensure that any errors encountered during the mapping process are properly handled to prevent unexpected behavior.

Check that errors are handled correctly in the mapping function.


44-44: Pass supplierClient to newMapClaimSessionsFn.

The newMapClaimSessionsFn function now requires supplierClient as a parameter, which is necessary for creating claims.


54-58: Delete expired session trees.

The code deletes expired session trees to prevent them from being claimed again.


111-111: Log errors when failing to get shared params.

Ensure that errors encountered when getting shared params are logged correctly.


163-163: Pass supplierClient to newMapClaimSessionsFn.

The newMapClaimSessionsFn function now requires supplierClient as a parameter, which is necessary for creating claims.


175-180: Create claim messages for each session tree.

The code creates claim messages for each session tree using the updated MsgCreateClaim interface.


185-188: Handle errors when creating claims.

Ensure that any errors encountered when creating claims are properly handled and logged.


214-214: Log errors when failing to flush session.

Ensure that errors encountered when flushing sessions are logged correctly.

pkg/relayer/session/proof.go (10)

15-15: Import prooftypes correctly.

The prooftypes import is necessary for the updated submitProofs method.


27-27: Pass supplierClient to submitProofs.

The submitProofs method now requires supplierClient as a parameter, which is necessary for submitting proofs.


45-45: Pass supplierClient to newMapProveSessionsFn.

The newMapProveSessionsFn function now requires supplierClient as a parameter, which is necessary for submitting proofs.


52-56: Delete expired session trees.

The code deletes expired session trees to prevent them from being proven again.


99-99: Log errors when failing to get shared params.

Ensure that errors encountered when getting shared params are logged correctly.


165-165: Pass supplierClient to newMapProveSessionsFn.

The newMapProveSessionsFn function now requires supplierClient as a parameter, which is necessary for submitting proofs.


177-182: Create proof messages for each session tree.

The code creates proof messages for each session tree using the updated MsgSubmitProof interface.


187-190: Handle errors when submitting proofs.

Ensure that any errors encountered when submitting proofs are properly handled and logged.


194-198: Remove session tree from relayer sessions and delete it.

The code removes the session tree from relayer sessions and deletes it after submitting proofs.


235-235: Log errors when failing to generate proof.

Ensure that errors encountered when generating proofs are logged correctly.

pkg/client/interface.go (4)

35-42: Update MsgCreateClaim interface.

The MsgCreateClaim interface has been updated to include methods for retrieving root hash, session header, and supplier address.


44-51: Update MsgSubmitProof interface.

The MsgSubmitProof interface has been updated to include methods for retrieving proof, session header, and supplier address.


Line range hint 62-71:
Update SupplierClient interface.

The SupplierClient interface methods CreateClaims and SubmitProofs have been updated to use the new MsgCreateClaim and MsgSubmitProof interfaces.


330-330: Update BlockQueryClient interface.

The Block method now returns cometrpctypes.ResultBlock instead of coretypes.ResultBlock.

pkg/relayer/proxy/synchronous.go (2)

Line range hint 26-36:
Verify the removal of supplierServiceMap parameter across the codebase.

Ensure that all calls to NewSynchronousServer have been updated to remove the supplierServiceMap parameter.

Verification successful

The removal of the supplierServiceMap parameter from the NewSynchronousServer function has been verified.

  • The NewSynchronousServer call in pkg/relayer/proxy/server_builder.go does not include the supplierServiceMap parameter.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all references to `NewSynchronousServer` have been updated to remove the `supplierServiceMap` parameter.

# Test: Search for the function usage. Expect: No occurrences with the old parameter.
rg --type go $'NewSynchronousServer'

Length of output: 303


Script:

#!/bin/bash
# Description: Inspect the `NewSynchronousServer` call in `pkg/relayer/proxy/server_builder.go` to ensure the `supplierServiceMap` parameter is not present.

# Extract the lines around the `NewSynchronousServer` call to inspect its parameters.
rg -A 5 -B 5 --type go $'NewSynchronousServer' pkg/relayer/proxy/server_builder.go

Length of output: 494


Line range hint 11-23:
Verify the removal of supplierServiceMap field across the codebase.

Ensure that all references to supplierServiceMap have been removed or updated accordingly in the codebase.

Verification successful

Verify the removal of supplierServiceMap field across the codebase.

All references to supplierServiceMap have been removed or updated accordingly in the codebase.

  • No occurrences of supplierServiceMap found in the codebase.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all references to `supplierServiceMap` have been removed or updated.

# Test: Search for the field usage. Expect: No occurrences.
rg --type go $'supplierServiceMap'

Length of output: 33


Script:

#!/bin/bash
# Description: Verify all references to `supplierServiceMap` have been removed or updated.

# Test: Search for the field usage. Expect: No occurrences.
rg 'supplierServiceMap'

Length of output: 23


Script:

#!/bin/bash
# Description: Verify all references to `supplierServiceMap` have been removed or updated.

# Test: Search for the field usage across all files. Expect: No occurrences.
rg 'supplierServiceMap'

Length of output: 23

pkg/relayer/session/session.go (7)

145-190: Verify the addition of supplierAddress in ensureSessionTree.

Ensure that all references to supplierAddress in the ensureSessionTree function are correct and consistent.

Verification successful

The addition of supplierAddress in the ensureSessionTree function is correct and consistent.

The supplierAddress is referenced correctly within the ensureSessionTree function and throughout the pkg/relayer/session/session.go file.

  • pkg/relayer/session/session.go: Verified references to supplierAddress.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the addition of `supplierAddress` in the `ensureSessionTree` function.

# Test: Search for the function usage. Expect: Correct and consistent references.
rg --type go $'supplierAddress'

Length of output: 10390


116-127: Verify the addition of supplierClient parameters.

Ensure that all references to supplierClient in the Start function are correct and consistent.

Verification successful

The addition of supplierClient parameters has been verified and is consistent throughout the codebase.

  • pkg/relayer/session/claim.go
  • pkg/relayer/session/session.go
  • pkg/relayer/session/proof.go
  • Various test files
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the addition of the `supplierClient` parameters.

# Test: Search for the function usage. Expect: Correct and consistent references.
rg --type go $'supplierClient'

Length of output: 4728


Line range hint 54-64:
Verify the initialization of the sessionsTrees map.

Ensure that the sessionsTrees map is correctly initialized with the new structure.

Verification successful

The initialization of the sessionsTrees map is correct.

The sessionsTrees map is defined as sessionsTreesMap and is properly initialized using the make function in the session.go file.

  • sessionsTrees definition: type sessionsTreesMap = map[int64]map[string]map[string]relayer.SessionTree
  • sessionsTrees initialization: sessionsTrees: make(sessionsTreesMap)
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the initialization of the `sessionsTrees` map.

# Test: Search for the initialization. Expect: Correct structure.
rg --type go $'make(sessionsTreesMap)'

Length of output: 39


Script:

#!/bin/bash
# Search for the definition of the sessionsTrees map in the session.go file
rg --type go 'sessionsTrees' pkg/relayer/session/session.go

# Search for the initialization of the sessionsTrees map in the session.go file
rg --type go 'sessionsTrees\s*=\s*make' pkg/relayer/session/session.go

Length of output: 1894


24-28: Verify the changes to the sessionsTrees map.

Ensure that all references to the sessionsTrees map have been updated to include supplierAddress.

Verification successful

Verification Successful: All references to the sessionsTrees map have been correctly updated to include supplierAddress.

The changes to the sessionsTrees map are consistent and correctly implemented.

  • ensureSessionTree: Initializes nested maps including supplierAddress.
  • forEachBlockClaimSessionsFn: Iterates over supplierSessionTrees and accesses sessionsSupplier.
  • removeFromRelayerSessions: Accesses and deletes entries using supplierAddress.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all references to the `sessionsTrees` map have been updated to include `supplierAddress`.

# Test: Search for the map usage. Expect: All occurrences include `supplierAddress`.
rg --type go $'sessionsTrees'

Length of output: 2658


Script:

#!/bin/bash
# Extract and display lines around references to `sessionsTrees` to check for correct usage of `supplierAddress`.

# Display lines around the references to `sessionsTrees`
rg --type go --context 5 'sessionsTrees' pkg/relayer/session/session.go

Length of output: 8069


307-345: Verify the addition of supplierAddress in removeFromRelayerSessions.

Ensure that all references to supplierAddress in the removeFromRelayerSessions function are correct and consistent.

Verification successful

The addition of supplierAddress in removeFromRelayerSessions is correct and consistent.

The supplierAddress is used appropriately within the function to manage session trees and log relevant information.

  • pkg/relayer/session/session.go:
    • Line 312: supplierAddress is extracted from sessionTree.
    • Lines 330, 332, 338: supplierAddress is used for logging and managing the suppliersSessionTrees map.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the addition of `supplierAddress` in the `removeFromRelayerSessions` function.

# Test: Search for the function usage. Expect: Correct and consistent references.
rg --type go $'supplierAddress'

Length of output: 10390


Script:

#!/bin/bash
# Extract the entire removeFromRelayerSessions function from pkg/relayer/session/session.go
ast-grep --lang go --pattern $'func (rs *relayerSessionsManager) removeFromRelayerSessions($_) {
  $$$
}' pkg/relayer/session/session.go

Length of output: 3206


412-444: Verify the implementation of deleteExpiredSessionTreesFn.

Ensure that the implementation of the deleteExpiredSessionTreesFn function is correct and consistent.

Verification successful

The implementation of deleteExpiredSessionTreesFn is correct and consistent.

The function is used appropriately in both pkg/relayer/session/claim.go and pkg/relayer/session/proof.go, with the correct parameters being passed.

  • pkg/relayer/session/claim.go: shared.GetClaimWindowCloseHeight
  • pkg/relayer/session/proof.go: shared.GetProofWindowCloseHeight
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the implementation of the `deleteExpiredSessionTreesFn` function.

# Test: Search for the function usage. Expect: Correct and consistent implementation.
rg --type go $'deleteExpiredSessionTreesFn'

Length of output: 330


Script:

#!/bin/bash
# Extract the relevant code snippets from claim.go and proof.go to review the function's usage.

# Extract the usage in claim.go
rg -A 10 -B 10 'deleteExpiredSessionTreesFn' pkg/relayer/session/claim.go

# Extract the usage in proof.go
rg -A 10 -B 10 'deleteExpiredSessionTreesFn' pkg/relayer/session/proof.go

Length of output: 2110


Line range hint 217-285:
Verify the addition of sessionsSupplier in forEachBlockClaimSessionsFn.

Ensure that all references to sessionsSupplier in the forEachBlockClaimSessionsFn function are correct and consistent.

x/proof/keeper/msg_server_submit_proof_test.go (1)

Line range hint 15-15: LGTM! The callback parameter has been removed from newEmptySessionTree.

The function signature is simplified by removing the unused callback parameter.

@@ -60,15 +59,15 @@ func NewOneTimeClaimProofSupplierClientMap(
supplierClientMock.EXPECT().
CreateClaims(
gomock.Eq(ctx),
gomock.AssignableToTypeOf([]*relayer.SessionClaim{}),
gomock.AssignableToTypeOf(([]client.MsgCreateClaim)(nil)),
Copy link

Choose a reason for hiding this comment

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

Tip

Codebase Verification

Ensure correct type assertion for CreateClaims.

The client.MsgCreateClaim type does not implement the necessary methods (GetRootHash, GetSessionHeader, GetSupplierAddress). Therefore, the type assertion for CreateClaims using client.MsgCreateClaim is incorrect and will cause issues.

  • MsgCreateClaim definition found in:
    • ./x/proof/types/tx.pb.go
    • ./api/poktroll/proof/tx.pulsar.go
  • No methods GetRootHash, GetSessionHeader, GetSupplierAddress found for MsgCreateClaim.
Analysis chain

Ensure correct type assertion for CreateClaims.

The type assertion for CreateClaims has been updated to use client.MsgCreateClaim. Ensure that this change is consistent with the rest of the codebase and that client.MsgCreateClaim implements the necessary interface.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that client.MsgCreateClaim implements the necessary interface.

# Test: Search for the interface implementation. Expect: client.MsgCreateClaim implements the required interface.
ast-grep --lang go --pattern $'type MsgCreateClaim interface {
  GetRootHash() []byte
  GetSessionHeader() *sessiontypes.SessionHeader
  GetSupplierAddress() string
}'

Length of output: 168


Script:

#!/bin/bash
# Description: Verify that client.MsgCreateClaim implements the necessary methods.

# Search for the GetRootHash method in client.MsgCreateClaim
ast-grep --lang go --pattern $'func ($_ client.MsgCreateClaim) GetRootHash() []byte {
  $$$
}'

# Search for the GetSessionHeader method in client.MsgCreateClaim
ast-grep --lang go --pattern $'func ($_ client.MsgCreateClaim) GetSessionHeader() *sessiontypes.SessionHeader {
  $$$
}'

# Search for the GetSupplierAddress method in client.MsgCreateClaim
ast-grep --lang go --pattern $'func ($_ client.MsgCreateClaim) GetSupplierAddress() string {
  $$$
}'

Length of output: 320


Script:

#!/bin/bash
# Description: Find the definition of client.MsgCreateClaim and list its methods.

# Search for the definition of client.MsgCreateClaim
ast-grep --lang go --pattern $'type MsgCreateClaim struct {
  $$$
}'

# List methods of client.MsgCreateClaim
ast-grep --lang go --pattern $'func ($_ MsgCreateClaim) $_($_) $_ {
  $$$
}'

Length of output: 1756

).
Return(nil).
Times(1)

supplierClientMock.EXPECT().
SubmitProofs(
gomock.Eq(ctx),
gomock.AssignableToTypeOf([]*relayer.SessionProof{}),
gomock.AssignableToTypeOf(([]client.MsgSubmitProof)(nil)),
Copy link

Choose a reason for hiding this comment

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

Tip

Codebase Verification

Ensure correct type assertion for SubmitProofs.

The type assertion for SubmitProofs has been updated to use client.MsgSubmitProof. However, client.MsgSubmitProof does not implement the necessary interface methods (GetProof() []byte, GetSessionHeader() *sessiontypes.SessionHeader, and GetSupplierAddress() string). Please ensure that client.MsgSubmitProof implements these methods.

  • Files checked:
    • ./x/proof/types/tx.pb.go
    • ./api/poktroll/proof/tx.pulsar.go
Analysis chain

Ensure correct type assertion for SubmitProofs.

The type assertion for SubmitProofs has been updated to use client.MsgSubmitProof. Ensure that this change is consistent with the rest of the codebase and that client.MsgSubmitProof implements the necessary interface.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that client.MsgSubmitProof implements the necessary interface.

# Test: Search for the interface implementation. Expect: client.MsgSubmitProof implements the required interface.
ast-grep --lang go --pattern $'type MsgSubmitProof interface {
  GetProof() []byte
  GetSessionHeader() *sessiontypes.SessionHeader
  GetSupplierAddress() string
}'

Length of output: 165


Script:

#!/bin/bash
# Description: Find the definition of MsgSubmitProof and check if it implements the required methods.

# Step 1: Find the definition of MsgSubmitProof
msg_submit_proof_definition=$(ast-grep --lang go --pattern 'type MsgSubmitProof struct { $$$ }')

# Step 2: Check if MsgSubmitProof implements the required methods
if [ -n "$msg_submit_proof_definition" ]; then
  # Extract the file path of MsgSubmitProof definition
  msg_submit_proof_file=$(echo "$msg_submit_proof_definition" | grep -oP '^\S+')
  
  # Search for the required methods in the MsgSubmitProof file
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetProof() []byte' "$msg_submit_proof_file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetSessionHeader() *sessiontypes.SessionHeader' "$msg_submit_proof_file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetSupplierAddress() string' "$msg_submit_proof_file"
else
  echo "MsgSubmitProof definition not found."
fi

Length of output: 9490


Script:

#!/bin/bash
# Description: Correctly extract file paths and verify that MsgSubmitProof implements the required methods.

# Step 1: Find the definition of MsgSubmitProof
msg_submit_proof_definition=$(ast-grep --lang go --pattern 'type MsgSubmitProof struct { $$$ }')

# Step 2: Extract file paths without line numbers
msg_submit_proof_files=$(echo "$msg_submit_proof_definition" | grep -oP '^\S+' | uniq)

# Step 3: Check if MsgSubmitProof implements the required methods
for file in $msg_submit_proof_files; do
  echo "Checking file: $file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetProof() []byte' "$file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetSessionHeader() *sessiontypes.SessionHeader' "$file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetSupplierAddress() string' "$file"
done

Length of output: 16384


Script:

#!/bin/bash
# Description: Correctly extract file paths and verify that MsgSubmitProof implements the required methods.

# Step 1: Find the definition of MsgSubmitProof
msg_submit_proof_definition=$(ast-grep --lang go --pattern 'type MsgSubmitProof struct { $$$ }')

# Step 2: Extract file paths without line numbers or additional text
msg_submit_proof_files=$(echo "$msg_submit_proof_definition" | grep -oP '^\S+' | sed 's/:.*//g' | uniq)

# Step 3: Check if MsgSubmitProof implements the required methods
for file in $msg_submit_proof_files; do
  echo "Checking file: $file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetProof() []byte' "$file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetSessionHeader() *sessiontypes.SessionHeader' "$file"
  ast-grep --lang go --pattern 'func (m MsgSubmitProof) GetSupplierAddress() string' "$file"
done

Length of output: 4404

Copy link
Member

@Olshansk Olshansk left a comment

Choose a reason for hiding this comment

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

Pretty clean. Just a couple minor comments!

@@ -43,7 +59,7 @@ type SupplierClient interface {
// session's mined relays.
CreateClaims(
ctx context.Context,
sessionClaims []*relayer.SessionClaim,
claimMsgs ...MsgCreateClaim,
Copy link
Member

Choose a reason for hiding this comment

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

Nice

SessionHeader: sessionProof.SessionHeader,
Proof: sessionProof.ProofBz,
}
msgs := make([]cosmostypes.Msg, 0, len(proofMsgs))
Copy link
Member

Choose a reason for hiding this comment

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

Why are we make a copy of the slice? #PUC

Copy link
Contributor Author

Choose a reason for hiding this comment

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

While client.MsgSubmitProof type is compatible with cosmostypes.Msg, their respective slices are not. We need to create a []cosmostypes.Msg in order to pass it to SignAndBroadcast

}

// TODO(@bryanchriswhite): reconcile splitting of supplier & proof modules
Copy link
Member

Choose a reason for hiding this comment

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

I don't fully understand what we need to reconcile here. @bryanchriswhite ?

Copy link
Contributor

Choose a reason for hiding this comment

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

The client which exposes #CreateClaim() and #SubmitProof() should be called ProofClient; however, the SupplierClient was written before the Proof module was split from the Supplier module. See: #633.

// Type casting does not need to be checked here since the concrete type is
// guaranteed to implement the interface which is just an identity for the
// concrete type.
proofMsg, _ := p.(*prooftypes.MsgSubmitProof)
Copy link
Member

Choose a reason for hiding this comment

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

so is client.MsgSubmitProof actually client.MsgSubmitProofI or client.IMsgSubmitProof.

Maybe this means we should add an I ass a pre/post fix to make it clearer?

@bryanchriswhite wdyt too? We'd need to do this everywhere.

Copy link
Contributor

Choose a reason for hiding this comment

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

TL;DR, I'm not a fan of the I pre/postfix but would be willing to concede on this detail as it's part of a temporary solution. I think it would be sufficient to move these interfaces to an expected_interfaces.go and add them on an as-needed basis. A more comprehensive refactoring will be necessary to fully resolve this.

I think that, ideally, the pkg package SHOULD NOT depend on anything from x/.... The current issue is that the generated go protobuf types are used both off- and on-chain. So long as go protobuf types are being generated into x/..., pkg/client/... (and possibly other packages) will either have dependency cycles which they will have to work around, or such dependency cycles will be looming as several interface types in pkg/client/interface.go already reference types from x/<module>/types.

In my view, the correct solution here should involve moving the generated go protobuf types to a package which is not a branch of either pkg/ or x/ (e.g., proto/types/<module>). This would:

  1. Resolve this class dependency cycles; eliminating the need for redundant interface message types (i.e., client <-> proto).
  2. Eliminate on-chain pkg dependencies from leaking through client pkg. This has implications for potential binary size optimzations for off-chain binaries which depend on our protobuf types (e.g., Shannon SDK consumers).

// sessionEndHeight->sessionId->supplierAddress->SessionTree.
// It is used to keep track of the sessions that are created in the RelayMiner
// by grouping them by their end block height, session id and supplier address.
type sessionsTreesMap = map[int64]map[string]map[string]relayer.SessionTree
Copy link
Member

Choose a reason for hiding this comment

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

lol

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I loled too 😆

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.

Actionable comments posted: 0

Outside diff range and nitpick comments (1)
load-testing/tests/relays_stress_helpers_test.go (1)

192-192: Clarify the log message format.

The log message format should be consistent with the rest of the codebase. Consider using Msgf for formatted messages.

- "waiting for next test session to start: in %d blocks",
+ "waiting for the next test session to start: in %d blocks",
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 13a75dc and 1a39ec2.

Files selected for processing (2)
  • load-testing/tests/relays_stress_helpers_test.go (2 hunks)
  • load-testing/tests/relays_stress_test.go (1 hunks)
Additional comments not posted (5)
load-testing/tests/relays_stress_test.go (1)

157-158: LGTM! The addition of testEndHeight field is appropriate.

The new field testEndHeight is added to store the end height of the test. Ensure that this field is used correctly in the file.

load-testing/tests/relays_stress_helpers_test.go (4)

220-223: Ensure proper cancellation context handling.

Verify that s.cancelCtx() is correctly set up to handle context cancellation.

Verification successful

Proper context cancellation handling is verified.

The initialization and usage of s.ctx and s.cancelCtx are correctly implemented in relays_stress_test.go and relays_stress_helpers_test.go.

  • relays_stress_test.go: s.ctx, s.cancelCtx = context.WithCancel(context.Background())
  • relays_stress_helpers_test.go: Multiple usages of s.ctx and calls to s.cancelCtx()
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the setup of `s.cancelCtx()` for context cancellation.

# Test: Search for `cancelCtx` definition and usage. Expect: Proper setup and usage.
rg --type go 's.cancelCtx'

Length of output: 383


Script:

#!/bin/bash
# Description: Verify the setup and usage of `s.ctx` and `s.cancelCtx` in the relevant test files.

# Check initialization of `s.cancelCtx` in `relays_stress_test.go`
rg --type go 'context.WithCancel' load-testing/tests/relays_stress_test.go

# Check usage of `s.ctx` and `s.cancelCtx` in `relays_stress_helpers_test.go`
rg --type go 's.ctx' load-testing/tests/relays_stress_helpers_test.go
rg --type go 's.cancelCtx' load-testing/tests/relays_stress_helpers_test.go

Length of output: 867


220-223: Ensure proper handling of relay request termination.

Verify that the logic to stop sending relay requests and wait for the settlement of claims and proofs is correctly implemented.

Verification successful

Ensure proper handling of relay request termination.

The logic to stop sending relay requests and wait for the settlement of claims and proofs is correctly implemented in the mapSessionInfoForLoadTestDurationFn function. The related functions waitForTxsToBeCommitted and waitUntilLatestBlockHeightEquals also correctly handle waiting for transactions to be committed and ensuring the latest block height matches the target height.

  • mapSessionInfoForLoadTestDurationFn: Implements logic to stop sending relay requests when the test duration is reached and wait for settlement.
  • waitForTxsToBeCommitted: Handles waiting for transactions to be committed.
  • waitUntilLatestBlockHeightEquals: Ensures the latest block height matches the target height.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the correctness of relay request termination logic.

# Test: Search for the logic related to stopping relay requests and waiting for settlement. Expect: Correct implementation.
rg --type go 'stop sending relays'

Length of output: 167


Script:

#!/bin/bash
# Description: Search for the implementation details related to stopping relay requests and waiting for settlement.

# Locate the function definitions in the file to identify where the logic might be implemented.
rg --type go 'func ' load-testing/tests/relays_stress_helpers_test.go

# Search for the keyword 'stop' to find the relevant logic for stopping relay requests.
rg --type go 'stop' load-testing/tests/relays_stress_helpers_test.go

# Search for the keyword 'wait' to find the relevant logic for waiting for settlement.
rg --type go 'wait' load-testing/tests/relays_stress_helpers_test.go

Length of output: 5731


Script:

#!/bin/bash
# Description: Verify the implementation details of mapSessionInfoForLoadTestDurationFn and related functions.

# Extract the implementation of mapSessionInfoForLoadTestDurationFn.
ast-grep --lang go --pattern $'func (s *relaysSuite) mapSessionInfoForLoadTestDurationFn($_) $_' 

# Extract the implementation of waitForTxsToBeCommitted.
ast-grep --lang go --pattern $'func (s *relaysSuite) waitForTxsToBeCommitted() $_'

# Extract the implementation of waitUntilLatestBlockHeightEquals.
ast-grep --lang go --pattern $'func (s *relaysSuite) waitUntilLatestBlockHeightEquals(targetHeight int64) $_'

Length of output: 14597


209-210: Ensure testEndHeight calculation is correct.

The calculation of testEndHeight depends on totalDurationBlocks. Verify that totalDurationBlocks returns the correct value.


210-210: Verify testEndHeight calculation.

Ensure that testEndHeight is correctly calculated based on the start block height and the total duration of the test.

// this helps to avoid iterating over all sessionsTrees to check if they are ready to be closed.
// sessionTrees is a map of blockHeight->sessionId->supplierAddress->sessionTree.
// The block height index is used to know when the sessions contained in the
// entry should be closed, this helps to avoid iterating over all sessionsTrees
Copy link
Contributor

Choose a reason for hiding this comment

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

"should be closed"

Is "closed" an accurate description here? I thought this would be the earliest supplier proof commit height.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It's definitely not the earliest proof commit height, but rather the session's end height.

Comment on lines 118 to 123
sessionsToClaimObs, sessionsToClaimPublishCh := channel.NewObservable[[]relayer.SessionTree]()
channel.ForEach(
ctx,
rs.blockClient.CommittedBlocksSequence(ctx),
rs.forEachBlockClaimSessionsFn(supplierAddress, sessionsToClaimPublishCh),
)
Copy link
Contributor

Choose a reason for hiding this comment

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

This could be factored out to a method which returns sessionsToClaimObs.

@@ -254,7 +280,7 @@ func (rs *relayerSessionsManager) forEachBlockClaimSessionsFn(
// Separate the sessions that are on-time from the ones that are late.
// If the session is past its grace period, it is considered late,
// otherwise it is on time and will be emitted last.
if sessionGracePeriodEndHeight+int64(numBlocksPerSession) < block.Height() {
if claimWindowOpenHeight+int64(numBlocksPerSession) < block.Height() {
Copy link
Contributor

Choose a reason for hiding this comment

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

  1. The comment references the grace period but this is now in terms of claim window open height.
  2. Why are we adding a session for the comparison? Maybe #PUC.

Comment on lines 412 to 415
// retryFailedSessionAndDeleteExpiredFn returns a function that retries failed sessions
// and deletes them if the expiration height is reached.
// expirationHeightFn could be either GetProofWindowCloseHeight or GetClaimWindowCloseHeight.
func (rs *relayerSessionsManager) deleteExpiredSessionTreesFn(
Copy link
Contributor

Choose a reason for hiding this comment

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

Comment doesn't match the function name. The function name seems to match the implementation.

@okdas
Copy link
Member

okdas commented Jul 8, 2024

I love this change, makes the lean client part way cleaner.

@bryanchriswhite
Copy link
Contributor

I love this change, makes the lean client part way cleaner.

You might say it's the "clean client" 🥁 😂

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.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 1a39ec2 and 78d3a89.

Files selected for processing (5)
  • pkg/client/interface.go (5 hunks)
  • pkg/relayer/session/claim.go (6 hunks)
  • pkg/relayer/session/proof.go (7 hunks)
  • pkg/relayer/session/session.go (14 hunks)
  • x/proof/keeper/msg_server_submit_proof_test.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • x/proof/keeper/msg_server_submit_proof_test.go
Additional comments not posted (22)
pkg/relayer/session/claim.go (6)

26-27: Addition of supplierClient parameter is appropriate.

The addition of the supplierClient parameter is necessary for the new functionality. The logic seems correct.


172-173: Addition of supplierClient parameter is appropriate.

The addition of the supplierClient parameter is necessary for the new functionality. The logic seems correct.


111-111: Improved error handling and logging.

The changes improve error handling and logging, which are beneficial for debugging and maintaining the code.


223-223: Improved error handling and logging.

The changes improve error handling and logging, which are beneficial for debugging and maintaining the code.


Line range hint 429-458: Well-implemented function for deleting expired session trees.

The function is well-implemented and necessary for cleaning up expired session trees, preventing reprocessing.


Line range hint 460-472: Well-implemented function for managing sessions ready to be claimed.

The function is well-implemented and necessary for managing sessions that are ready to be claimed.

pkg/relayer/session/proof.go (4)

27-28: Addition of supplierClient parameter is appropriate.

The addition of the supplierClient parameter is necessary for the new functionality. The logic seems correct.


178-179: Addition of supplierClient parameter is appropriate.

The addition of the supplierClient parameter is necessary for the new functionality. The logic seems correct.


99-99: Improved error handling and logging.

The changes improve error handling and logging, which are beneficial for debugging and maintaining the code.


248-248: Improved error handling and logging.

The changes improve error handling and logging, which are beneficial for debugging and maintaining the code.

pkg/client/interface.go (5)

36-44: Addition of MsgCreateClaim interface is appropriate.

The addition of this interface is necessary to avoid cyclic dependencies and improve code modularity.


45-53: Addition of MsgSubmitProof interface is appropriate.

The addition of this interface is necessary to avoid cyclic dependencies and improve code modularity.


63-64: Update to CreateClaims function is appropriate.

The function has been updated to accept variadic parameters of the new interface MsgCreateClaim. This change is necessary to align with the new interface and improve function flexibility.


72-73: Update to SubmitProofs function is appropriate.

The function has been updated to accept variadic parameters of the new interface MsgSubmitProof. This change is necessary to align with the new interface and improve function flexibility.


331-331: Update to Block function is appropriate.

The function has been updated to return a different type cometrpctypes.ResultBlock. This change is necessary to align with the new type and improve function compatibility.

pkg/relayer/session/session.go (7)

24-28: Restructuring of sessionsTreesMap is appropriate.

The restructuring improves session management and organization.


116-121: Update to Start function is appropriate.

The update is necessary to support multiple suppliers and improve parallel processing.


142-184: Update to ensureSessionTree function is appropriate.

The update is necessary to support multiple suppliers and improve session management.


Line range hint 211-275: Update to forEachBlockClaimSessionsFn function is appropriate.

The update is necessary to support multiple suppliers and improve session management.


299-337: Update to removeFromRelayerSessions function is appropriate.

The update is necessary to support multiple suppliers and improve session management.


429-458: Well-implemented function for deleting expired session trees.

The function is well-implemented and necessary for cleaning up expired session trees, preventing reprocessing.


460-472: Well-implemented function for managing sessions ready to be claimed.

The function is well-implemented and necessary for managing sessions that are ready to be claimed.

Copy link
Contributor

@bryanchriswhite bryanchriswhite left a comment

Choose a reason for hiding this comment

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

🚀

}
}

func (rs *relayerSessionsManager) supplierSessionsToClaim(
Copy link
Contributor

Choose a reason for hiding this comment

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

NIT: godoc comment

Copy link

The CI will now also run the e2e tests on devnet, which increases the time it takes to complete all CI checks.

You may need to run make trigger_ci to submit an empty commit that'll trigger the tests.

GCP workloads (requires changing the namespace to 662)
Grafana network dashboard for devnet-issue-{issue-id}

@github-actions github-actions bot added devnet push-image CI related - pushes images to ghcr.io labels Jul 15, 2024
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.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 78d3a89 and b737352.

Files selected for processing (3)
  • pkg/relayer/session/proof.go (6 hunks)
  • pkg/relayer/session/session.go (14 hunks)
  • x/proof/keeper/msg_server_submit_proof_test.go (1 hunks)
Files skipped from review as they are similar to previous changes (2)
  • pkg/relayer/session/proof.go
  • x/proof/keeper/msg_server_submit_proof_test.go
Additional comments not posted (7)
pkg/relayer/session/session.go (7)

116-121: LGTM!

The changes correctly start the claim/proof pipeline for each supplier.


142-184: LGTM!

The changes ensure that the session tree is correctly created and assigned.


Line range hint 211-275:
LGTM!

The changes ensure that the sessions are correctly emitted based on their claim window open height.


299-337: LGTM!

The changes ensure that the session tree is correctly removed.


427-457: LGTM!

The changes ensure that the expired sessions are correctly deleted.


460-474: LGTM!

The changes ensure that the sessions are correctly notified when they are ready to be claimed.


426-426: LGTM!

The changes ensure that the relay is correctly added to the session tree.

@red-0ne red-0ne merged commit 580b733 into main Jul 15, 2024
10 checks passed
bryanchriswhite added a commit that referenced this pull request Jul 16, 2024
…ation-overserviced

* pokt/main:
  [TODO] Blockers @okdas (#674)
  [TODO_BLOCKER] chore: Remove stale TODO_BLOCKERs (#694)
  [TODO] refactor: query expiring claims w/ index (#671)
  [TODOs] `grace_period_end_offset_blocks` validation & cleanup (#667)
  [Testing] add account balance coverage to account settlement (#670)
  [Application] Auto-undelegation of unstaked gateways (#692)
  [RelayMiner] Fix LeanClient mutiple suppliers support (#662)
bryanchriswhite added a commit that referenced this pull request Jul 16, 2024
…-root

* pokt/main:
  [TODO] Blockers @okdas (#674)
  [TODO_BLOCKER] chore: Remove stale TODO_BLOCKERs (#694)
  [TODO] refactor: query expiring claims w/ index (#671)
  [TODOs] `grace_period_end_offset_blocks` validation & cleanup (#667)
  [Testing] add account balance coverage to account settlement (#670)
  [Application] Auto-undelegation of unstaked gateways (#692)
  [RelayMiner] Fix LeanClient mutiple suppliers support (#662)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working devnet devnet-test-e2e off-chain Off-chain business logic push-image CI related - pushes images to ghcr.io
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

None yet

4 participants