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

bump up mods.irisnet.org/modules/service to cosmos-sdk v0.50.10 #452

Merged
merged 9 commits into from
Nov 18, 2024

Conversation

wangjiulian
Copy link
Collaborator

@wangjiulian wangjiulian commented Nov 13, 2024

Closed: #446

Summary by CodeRabbit

Release Notes

  • New Features

    • Enhanced handling of service fees and discounts by transitioning to the math.LegacyDec type for better precision.
  • Improvements

    • Updated various methods to utilize context.Context instead of sdk.Context, improving modularity and compatibility.
    • Streamlined simulation operations by removing unnecessary parameters and simplifying function signatures.
    • Improved querying logic for transactions and request contexts, enhancing data retrieval processes.
    • Added new fields and updated existing ones in service definitions for better configuration options.
  • Bug Fixes

    • Addressed inconsistencies in mathematical operations across the service module, ensuring uniformity in integer and decimal handling.
  • Documentation

    • Updated comments and documentation to reflect the new data types and methods introduced in this release.

Copy link

coderabbitai bot commented Nov 13, 2024

Walkthrough

The changes in this pull request involve updates across multiple files in the irismod.service package, primarily focusing on modifying data types, updating import paths, and enhancing documentation. Key modifications include the transition from sdk.Dec to math.LegacyDec for various financial parameters, adjustments to iterator types, and the removal of certain codec parameters in simulation functions. Additionally, the Go module version has been upgraded to 1.21, and dependencies have been updated to align with the new Cosmos SDK version 0.50.10.

Changes

File Path Change Summary
api/irismod/service/service.pulsar.go Added fields in ServiceDefinition and Params, updated field types in PromotionByTime, PromotionByVolume, and Params.
modules/service/client/utils/query.go Updated event handling in QueryRequestByTxQuery and modified QueryResponseByTxQuery to remove event filtering.
modules/service/depinject.go Changed import path for store from github.com/cosmos/cosmos-sdk/store/types to cosmossdk.io/store/types.
modules/service/go.mod Updated Go version to 1.21 and upgraded multiple dependencies to align with Cosmos SDK v0.50.10.
modules/service/keeper/binding.go Replaced sdk.KVStorePrefixIterator with storetypes.KVStorePrefixIterator and updated mathematical operations to use math package methods.
modules/service/keeper/definition.go Updated iterator creation in IterateServiceDefinitions to use storetypes.
modules/service/keeper/depinject_test.go Adjusted module imports and removed capabilitymodulev1, updated module order in AppConfig.
modules/service/keeper/fees.go Updated to use storetypes for iterators and changed tax calculation to use math.LegacyNewDecFromInt.
modules/service/keeper/grpc_query.go Changed import path for prefix from github.com/cosmos/cosmos-sdk/store/prefix to cosmossdk.io/store/prefix.
modules/service/keeper/invocation.go Updated iterator types to storetypes and changed some mathematical operations to use math.LegacyNewDecFromInt.
modules/service/keeper/keeper.go Updated import paths and modified return types of account methods from authtypes.ModuleAccountI to sdk.ModuleAccountI.
modules/service/keeper/keeper_test.go Updated coin creation to use math.NewInt and adjusted codec initialization.
modules/service/keeper/oracle_price.go Changed return types in GetExchangedPrice and GetExchangeRate to use math.LegacyDec.
modules/service/keeper/params.go Updated return types for ServiceFeeTax and SlashFraction to math.LegacyDec.
modules/service/module.go Refactored BeginBlock and EndBlock methods to accept context.Context and return error.
modules/service/simulation/operations.go Removed cdc parameter from WeightedOperations and updated return statements in simulation functions.
modules/service/types/binding.go Updated return types for GetDiscountByTime and GetDiscountByVolume to math.LegacyDec.
modules/service/types/expected_keeper.go Changed method signatures in BankKeeper and AccountKeeper to use context.Context.
modules/service/types/msgs_test.go Updated coin creation in test setup to use math.NewInt.
modules/service/types/oracle_price.go Changed integer initialization for Deposit in GenOraclePriceSvcBinding to use math.NewInt.
modules/service/types/params.go Updated service fee tax and slash fraction initialization to use math.LegacyDec and adjusted validation functions accordingly.
proto/irismod/service/service.proto Updated customtype options for several fields to use cosmossdk.io/math.LegacyDec.

Assessment against linked issues

Objective Addressed Explanation
Bump up mods.irisnet.org/modules/service to cosmos-sdk v0.50.10 (#[446])

Possibly related issues

Possibly related PRs

Suggested reviewers

  • mitch1024
  • dreamer-zq

Poem

🐰 In the code where bunnies hop,
Changes made, we can't stop!
From sdk to math we glide,
With each update, we take pride.
Cosmos blooms, dependencies grow,
Hopping forward, to the new we go! 🌼

Warning

There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure.

🔧 golangci-lint

level=warning msg="The linter 'exportloopref' is deprecated (since v1.60.2) due to: Since Go1.22 (loopvar) this linter is no longer relevant. Replaced by copyloopvar."


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>, please review it.
    • 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 gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @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 using 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.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration 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: 9

🧹 Outside diff range and nitpick comments (8)
modules/service/types/expected_keeper.go (1)

42-45: Consider adding interface documentation for AddressCodec

The interface changes look correct and align with cosmos-sdk v0.50.10. Consider adding a comment explaining the purpose of the new AddressCodec method for better maintainability.

 type AccountKeeper interface {
 	GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
 	GetModuleAddress(name string) sdk.AccAddress
 	GetModuleAccount(ctx context.Context, name string) sdk.ModuleAccountI
+	// AddressCodec returns the account address codec
 	AddressCodec() address.Codec
 }
modules/service/depinject.go (1)

Line range hint 71-71: Fix incorrect module reference in documentation

The function comment incorrectly refers to the "HTLC module" instead of the "Service module".

-// It returns Outputs containing the HTLC keeper and the app module.
+// It returns Outputs containing the Service keeper and the app module.
modules/service/types/binding.go (1)

Line range hint 57-74: Consider enhancing documentation for volume-based promotions

The type changes from sdk.Dec to math.LegacyDec are correct. However, the comment "make sure that the promotions by volume are sorted in ascending order" suggests a potential improvement.

Consider adding validation in the CheckPricing function to ensure the ascending order requirement is met, or document why it's the caller's responsibility. Example enhancement:

 // GetDiscountByVolume gets the discount level by the specified volume
-// Note: make sure that the promotions by volume are sorted in ascending order
+// Note: Promotions must be sorted in ascending order by volume.
+// This is enforced by the CheckPricing function during binding creation and updates.
 func GetDiscountByVolume(pricing Pricing, volume uint64) math.LegacyDec {
modules/service/types/params.go (1)

7-7: Transition to math.LegacyDec is correct but consider future updates

The migration from sdk.Dec to math.LegacyDec aligns with Cosmos SDK v0.50.x guidelines. However, note that the Legacy prefix suggests this might need future updates when the SDK fully transitions away from legacy decimal types.

Consider creating a tracking issue for future migration to non-legacy decimal types when they become available in the SDK.

Also applies to: 16-19

modules/service/keeper/fees.go (1)

35-35: Consider future migration from Legacy decimal types

While the change to math.LegacyNewDecFromInt is correct for compatibility with Cosmos SDK v0.50.10, be aware that using Legacy types might require updates in future SDK versions. Consider tracking this for future migration to non-legacy decimal types.

modules/service/keeper/binding.go (1)

Line range hint 609-626: Consider future migration from LegacyNewDecFromInt

The changes correctly migrate to the new math package, but the use of LegacyNewDecFromInt suggests this is a transitional solution. Consider planning for a future update to remove the legacy decimal types when the SDK provides a stable replacement.

modules/service/keeper/keeper_test.go (1)

Line range hint 759-806: Consider using test table pattern for min deposit tests

While the min deposit tests are functionally correct, they could be refactored to use a table-driven test pattern to improve maintainability and readability.

Here's a suggested refactor:

func (suite *KeeperTestSuite) TestGetMinDeposit() {
    oracleService := MockOracleService{
        feeds: map[string]string{
            fmt.Sprintf("%s-%s", testDenom1, sdk.DefaultBondDenom): "0.5",
            fmt.Sprintf("%s-%s", testDenom2, sdk.DefaultBondDenom): "0",
            fmt.Sprintf("%s-%s", testDenom4, sdk.DefaultBondDenom): "50",
            fmt.Sprintf("%s-%s", testDenom5, sdk.DefaultBondDenom): "20",
        },
    }

    suite.keeper.SetModuleService(types.RegisterModuleName, &types.ModuleService{
        ReuquestService: oracleService.GetExchangeRate,
    })

+   tests := []struct {
+       name          string
+       pricing       string
+       expectedCoin  sdk.Coin
+       expectError   bool
+   }{
+       {
+           name:         "basic pricing",
+           pricing:      fmt.Sprintf(`{"price":"100%s"}`, testDenom1),
+           expectedCoin: sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(50000)),
+       },
+       {
+           name:         "zero amount",
+           pricing:      fmt.Sprintf(`{"price":"0%s"}`, testDenom1),
+           expectedCoin: sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(0)),
+       },
+       {
+           name:        "zero exchange rate",
+           pricing:     fmt.Sprintf(`{"price":"1%s"}`, testDenom2),
+           expectError: true,
+       },
+       // Add remaining test cases...
+   }
+
+   for _, tc := range tests {
+       suite.Run(tc.name, func() {
+           pricing, err := types.ParsePricing(tc.pricing)
+           suite.NoError(err)
+
+           minDeposit, err := suite.keeper.GetMinDeposit(suite.ctx, pricing)
+           if tc.expectError {
+               suite.Error(err)
+               return
+           }
+           suite.NoError(err)
+           suite.Equal(sdk.NewCoins(tc.expectedCoin), minDeposit)
+       })
+   }
}
modules/service/keeper/invocation.go (1)

Based on the scan results, I can now provide a final assessment. The codebase shows:

  1. Proper adoption of new store types (cosmossdk.io/store/types) in place of SDK store types
  2. Widespread use of new math types (cosmossdk.io/math)
  3. However, there are still old iterator patterns using sdk.Iterator and sdk.KVStorePrefixIterator that need to be updated to use storetypes.Iterator and storetypes.KVStorePrefixIterator

Old iterator patterns need to be updated to use store/types package

  • Replace sdk.Iterator with storetypes.Iterator
  • Replace sdk.KVStorePrefixIterator with storetypes.KVStorePrefixIterator
  • Replace sdk.KVStoreReversePrefixIterator with storetypes.KVStoreReversePrefixIterator

Affected files:

  • modules/token/keeper/token.go
  • modules/record/keeper/keeper.go
  • modules/farm/keeper/*.go
  • modules/coinswap/keeper/pool.go
  • modules/htlc/keeper/*.go
  • modules/oracle/keeper/feed.go
  • modules/nft/migrations/v2/store.go
  • modules/random/keeper/keeper.go
🔗 Analysis chain

Line range hint 1-1400: Verify the impact of SDK type changes

While the changes look correct, let's verify there are no missed SDK type updates in the codebase.


Based on the scan results, I can see several instances of old SDK types that need to be updated:

  1. Old iterator types (sdk.Iterator, sdk.KVStorePrefixIterator) are still being used across multiple modules
  2. No instances of old decimal constructors (math.NewDecFromInt) were found
  3. Several usages of sdk.Dec and sdk.KVStore types were found

Let me verify if these types have been updated in the latest cosmos-sdk v0.50.x to determine if changes are needed.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining old SDK types that might need updating

# Check for old iterator types
echo "Checking for old iterator types..."
rg "sdk\.KVStorePrefixIterator|sdk\.Iterator" --type go

# Check for old decimal constructors
echo "Checking for old decimal constructors..."
rg "math\.NewDecFromInt" --type go

# Check for any other potential SDK v0.50.10 type updates
echo "Checking for other SDK type patterns..."
rg "sdk\.(Dec|Int|KVStore)" --type go

Length of output: 10470


Script:

#!/bin/bash
# Check imported cosmos-sdk version and available types
echo "Checking cosmos-sdk imports..."
rg "github.com/cosmos/cosmos-sdk" --type go -A 2 go.mod

# Check if the new store types are being used
echo "Checking store type imports..."
rg "cosmossdk.io/store/types" --type go

# Check math type imports 
echo "Checking math type imports..."
rg "cosmossdk.io/math" --type go

Length of output: 4964

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between aa8cd8a and 8b34544.

⛔ Files ignored due to path filters (2)
  • modules/service/go.sum is excluded by !**/*.sum
  • modules/service/types/service.pb.go is excluded by !**/*.pb.go
📒 Files selected for processing (22)
  • api/irismod/service/service.pulsar.go (2 hunks)
  • modules/service/client/utils/query.go (2 hunks)
  • modules/service/depinject.go (1 hunks)
  • modules/service/go.mod (2 hunks)
  • modules/service/keeper/binding.go (8 hunks)
  • modules/service/keeper/definition.go (2 hunks)
  • modules/service/keeper/depinject_test.go (2 hunks)
  • modules/service/keeper/fees.go (8 hunks)
  • modules/service/keeper/grpc_query.go (1 hunks)
  • modules/service/keeper/invocation.go (11 hunks)
  • modules/service/keeper/keeper.go (2 hunks)
  • modules/service/keeper/keeper_test.go (8 hunks)
  • modules/service/keeper/oracle_price.go (4 hunks)
  • modules/service/keeper/params.go (2 hunks)
  • modules/service/module.go (4 hunks)
  • modules/service/simulation/operations.go (21 hunks)
  • modules/service/types/binding.go (3 hunks)
  • modules/service/types/expected_keeper.go (1 hunks)
  • modules/service/types/msgs_test.go (5 hunks)
  • modules/service/types/oracle_price.go (2 hunks)
  • modules/service/types/params.go (5 hunks)
  • proto/irismod/service/service.proto (3 hunks)
✅ Files skipped from review due to trivial changes (1)
  • modules/service/keeper/grpc_query.go
🔇 Additional comments (52)
modules/service/types/expected_keeper.go (2)

4-6: LGTM: Import changes align with cosmos-sdk v0.50.10 requirements

The addition of standard context and cosmossdk.io/core/address imports properly supports the transition to the new SDK version.


12-36: Verify BankKeeper interface completeness against cosmos-sdk v0.50.10

The context type changes look correct, but let's ensure we haven't missed any methods from the official cosmos-sdk BankKeeper interface.

✅ Verification successful

Based on the search results, I notice that there are several BankKeeper interfaces defined across different modules, and some methods are present in other interfaces that are missing in our service module's BankKeeper interface. Let me verify if these methods are essential for the service module by checking their usage.


Let me check the actual usage of BankKeeper methods within the service module to verify if we have all the required methods in our interface.


BankKeeper interface is complete for service module requirements

Based on the actual usage analysis, the current BankKeeper interface in modules/service/types/expected_keeper.go includes all the methods that are being used within the service module:

  • SendCoinsFromAccountToModule: Used in binding.go and invocation.go
  • SendCoinsFromModuleToAccount: Used in binding.go and fees.go
  • SendCoinsFromModuleToModule: Used in fees.go and invocation.go
  • GetSupply: Used in binding.go
  • MintCoins and BurnCoins: Included as they're fundamental bank operations
  • GetBalance and SpendableCoins: Included for balance checks

While other modules' BankKeeper interfaces include additional methods like GetAllBalances, LockedCoins, and SendCoins, these are not used within the service module and therefore not required in this interface.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Compare our BankKeeper interface with cosmos-sdk v0.50.10
# Look for any BankKeeper interface definitions in cosmos-sdk
rg -A 10 "type BankKeeper interface" 

# Also check for any additional bank keeper methods we might need
ast-grep --pattern 'func ($keeper *BankKeeper) $method($ctx context.Context, $$$) $ret {
  $$$
}'

Length of output: 7042


Script:

#!/bin/bash
# Search for usage of bank keeper methods within the service module
rg -l "BankKeeper" modules/service/

Length of output: 243


Script:

#!/bin/bash
# Search for actual bank keeper method calls in service module
rg "k.bankKeeper\." modules/service/ -A 2

# Also check for any bank keeper variable declarations to see how it's used
rg "bankKeeper\s+[^.]" modules/service/

Length of output: 3263

modules/service/keeper/definition.go (2)

5-5: LGTM: Import path updated correctly for cosmos-sdk v0.50.10

The import path change from the SDK's types package to the dedicated store types package aligns with the new module structure in cosmos-sdk v0.50.10.


Line range hint 1-70: LGTM: Clean upgrade with preserved functionality

The changes are well-contained to just the store types upgrade, maintaining the existing business logic, error handling, and data flow. The code structure remains clean with good separation of concerns.

modules/service/keeper/params.go (3)

6-6: LGTM: Import addition aligns with type changes

The addition of the math package import is necessary for the transition to math.LegacyDec types and follows Go conventions.


33-33: Verify SlashFraction return type change impact

The return type change from sdk.Dec to math.LegacyDec looks correct. Let's verify that all callers of this method have been updated accordingly.

#!/bin/bash
# Search for all usages of SlashFraction() to ensure they handle math.LegacyDec
rg -l "SlashFraction\(\)" | while read -r file; do
  echo "=== $file ==="
  rg -A 2 "SlashFraction\(\)" "$file"
done

28-28: Verify ServiceFeeTax return type change impact

The return type change from sdk.Dec to math.LegacyDec looks correct. Let's verify that all callers of this method have been updated accordingly.

✅ Verification successful

Let me try another search strategy to find the ServiceFeeTax usages.


Based on the search results, I can now provide a final response:

ServiceFeeTax return type change is consistently implemented

The change from sdk.Dec to math.LegacyDec is properly implemented across the codebase:

  • The only direct usage is in modules/service/keeper/fees.go where taxRate := k.ServiceFeeTax(ctx) is used
  • Parameter validation in validateServiceFeeTax already expects math.LegacyDec
  • Default value in DefaultServiceFeeTax uses math.LegacyNewDecWithPrec
  • Protobuf definitions are correctly using cosmossdk_io_math.LegacyDec
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for all usages of ServiceFeeTax() to ensure they handle math.LegacyDec
rg -l "ServiceFeeTax\(\)" | while read -r file; do
  echo "=== $file ==="
  rg -A 2 "ServiceFeeTax\(\)" "$file"
done

Length of output: 311


Script:

#!/bin/bash
# Search for ServiceFeeTax usages with ripgrep
rg -A 3 "ServiceFeeTax" 

# Also search with ast-grep to catch any method calls
ast-grep --pattern 'ServiceFeeTax()'

Length of output: 10457

modules/service/types/oracle_price.go (1)

7-7: LGTM: Import change aligns with SDK upgrade

The addition of cosmossdk.io/math import is consistent with the migration to cosmos-sdk v0.50.10, where math operations were moved to a dedicated package.

modules/service/depinject.go (2)

Line range hint 16-31: LGTM! Well-structured module initialization

The module initialization follows the current best practices for Cosmos SDK v0.50.x, with clear documentation and proper use of the appmodule.Register pattern.


Line range hint 52-52: Verify params migration status

The presence of LegacySubspace suggests this module might still be in transition from the legacy x/params pattern. Consider completing the migration to the new params pattern if not already planned.

✅ Verification successful

The search results provide clear evidence that the module has proper params migration code in place. Let me break down the findings:

  1. The LegacySubspace is explicitly marked with comments indicating it's used solely for migration purposes in multiple modules:
// LegacySubspace is used solely for migration of x/params managed parameters
  1. There are dedicated migration files (v2/migrate.go) that handle the params migration:
// Migrate migrate the service params from legacy x/params module to htlc module
  1. The module has both legacy params code (for migration) and new params pattern implementation through the KeyTable providers in depinject.go:
appmodule.Provide(ProvideModule, ProvideKeyTable)

No action needed - params migration is properly handled

The presence of LegacySubspace is intentional and properly documented. The module has the necessary migration infrastructure in place to handle the transition from x/params to the new params pattern.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for params migration status
# Look for new params pattern usage and remaining legacy params code

echo "Checking for legacy params usage..."
rg "x/params" --type go

echo "Checking for new params pattern..."
rg "cosmossdk.io/x/params" --type go

echo "Checking for params migration code..."
rg "ParamSetPairs|ParamKeyTable|KeyTable" --type go

Length of output: 11002

modules/service/keeper/keeper.go (2)

6-7: LGTM: Import paths correctly updated for Cosmos SDK v0.50.x

The migration from CometBFT paths to the new cosmossdk.io namespace is correct and aligns with the SDK upgrade objectives.


68-68: Verify impact of ModuleAccountI interface changes

The return type changes to sdk.ModuleAccountI are correct for SDK v0.50.x, but we should verify the impact on dependent modules.

Also applies to: 73-73

✅ Verification successful

Return type changes to sdk.ModuleAccountI are safe and consistent with dependencies

The verification shows that:

  • Both methods are only defined in modules/service/keeper/keeper.go with no external usages
  • The return type sdk.ModuleAccountI is consistently used across other modules (farm, token, htlc) in their expected keeper interfaces
  • All implementations use GetModuleAccount from the account keeper which returns ModuleAccountI
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for usages of these methods to ensure compatibility
echo "Checking GetServiceDepositAccount usages..."
rg -A 3 "GetServiceDepositAccount\(" --type go

echo "Checking GetServiceRequestAccount usages..."
rg -A 3 "GetServiceRequestAccount\(" --type go

# Look for any type assertions or interface implementations
echo "Checking ModuleAccountI interface usage..."
rg -A 3 "ModuleAccountI" --type go

Length of output: 3354

modules/service/keeper/oracle_price.go (5)

7-7: LGTM: Import addition aligns with SDK upgrade

The addition of the cosmossdk.io/math import is necessary for the transition to math.LegacyDec types, which is part of the cosmos-sdk v0.50.10 upgrade.


34-34: LGTM: Correct transition to LegacyDec

The change from sdk.Dec to math.LegacyNewDecFromInt maintains the same functionality while aligning with the new SDK decimal type system.


50-78: LGTM: Consistent error handling with LegacyDec

The function signature and error handling cases have been properly updated to use math.LegacyDec while maintaining the same error handling patterns and messages.


90-92: LGTM: Proper decimal string parsing with LegacyDec

The function has been correctly updated to use math.LegacyNewDecFromStr for parsing decimal values from JSON strings.


34-34: Verify consistent decimal type usage across the module

Let's ensure that all callers of these functions are properly handling the math.LegacyDec return types.

Also applies to: 50-50, 90-90

✅ Verification successful

Let me gather more information about the decimal type usage in the service module specifically.


Based on the comprehensive analysis of the service module, I can now provide the final response:

Decimal type usage is consistent across the service module

The verification shows that:

  • All decimal operations in oracle_price.go consistently use math.LegacyDec
  • Related functions like GetExchangeRate and GetExchangeRateFromJSON properly return math.LegacyDec
  • All callers within the service module handle the decimal types correctly, with consistent usage of math.LegacyDec for:
    • Price calculations
    • Fee computations
    • Rate conversions
    • Discount applications
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining sdk.Dec usage in the service module
# and verify that callers are handling math.LegacyDec correctly

echo "Checking for remaining sdk.Dec usage in service module..."
rg --type go "sdk\.Dec" -l

echo "Checking for GetExchangeRate callers..."
rg --type go "GetExchangeRate\(" -A 2 -B 2

echo "Checking for GetExchangeRateFromJSON callers..."
rg --type go "GetExchangeRateFromJSON\(" -A 2 -B 2

Length of output: 3303


Script:

#!/bin/bash
# Check for decimal type usage in the service module
echo "Checking for decimal type usage in service module..."
rg --type go "(math\.LegacyDec|sdk\.Dec)" modules/service/ -A 1 -B 1

echo -e "\nChecking for decimal operations in service module..."
rg --type go "(\.Mul|\.Quo|\.Add|\.Sub)" modules/service/ -A 1 -B 1

Length of output: 28269

modules/service/types/binding.go (2)

8-8: LGTM: Required import for math.LegacyDec

The addition of the math package import is correct and necessary for the transition to math.LegacyDec types.


45-52: Verify callers handle the new return type

The change from sdk.Dec to math.LegacyDec is correct for cosmos-sdk v0.50.x compatibility. Let's verify that all callers of this function are updated to handle the new return type.

✅ Verification successful

Let me verify how the return value is used in the calling functions to ensure they handle math.LegacyDec correctly.


Return type change is properly handled by all callers

The callers correctly handle the math.LegacyDec return type:

  • In oracle_price.go: The discount is used with math.LegacyNewDecFromInt() in multiplication
  • In invocation.go: The discount is used with math.LegacyNewDecFromInt() in multiplication

All usages are consistent with the cosmos-sdk v0.50.x decimal types.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for all callers of GetDiscountByTime to verify they handle math.LegacyDec
rg -l "GetDiscountByTime" | while read -r file; do
  echo "=== $file ==="
  rg -A 2 "GetDiscountByTime" "$file"
done

Length of output: 1204


Script:

#!/bin/bash
# Check how the discount values are used in the calling functions
echo "=== modules/service/keeper/oracle_price.go ==="
rg -A 10 "discountByTime :=" "modules/service/keeper/oracle_price.go"

echo -e "\n=== modules/service/keeper/invocation.go ==="
rg -A 10 "discountByTime :=" "modules/service/keeper/invocation.go"

Length of output: 1193

modules/service/types/params.go (2)

30-30: Parameter function changes are consistent with SDK upgrade

The transition to math.LegacyDec in NewParams and math.NewInt in DefaultParams is correctly implemented while maintaining the original parameter values and logic.

Also applies to: 57-57


148-166: Validation function updates are correct

The transition to math.LegacyDec in validation functions maintains the correct bounds and comparison logic:

  • SlashFraction: [0, 1]
  • ServiceFeeTax: [0, 1)

Let's verify that all Dec types have been consistently updated throughout the module:

✅ Verification successful

All Dec types have been consistently updated to math.LegacyDec

The verification shows that:

  • No instances of sdk.Dec remain in the service module
  • All decimal types are consistently using math.LegacyDec, including:
    • Proto definitions
    • Parameter validations
    • Keeper methods
    • Oracle price operations
    • Discount calculations
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining sdk.Dec usage that might have been missed
rg --type go 'sdk\.Dec' ./modules/service

# Search for consistent usage of math.LegacyDec
rg --type go 'math\.LegacyDec' ./modules/service

Length of output: 2449

modules/service/keeper/fees.go (2)

5-6: LGTM: Import changes align with Cosmos SDK v0.50.10

The new imports from cosmossdk.io for math and storetypes packages are correct and follow the SDK's modularization guidelines.


162-162: Verify consistent usage of Equal method

The change from IsEqual to Equal is correct. Let's verify that all similar coin comparisons in the codebase have been updated consistently.

✅ Verification successful

Based on the search results, I can see that:

  1. The change from IsEqual to Equal is part of a broader pattern in the codebase where:

    • Only 3 remaining instances of IsEqual exist in test files
    • Extensive usage of Equal method exists throughout the codebase, particularly for coin comparisons
  2. The specific change in fees.go is consistent with other coin comparison patterns in the codebase, where Equal is the standard method used.

  3. The remaining IsEqual usages are in test files and not in production code:

    • modules/token/keeper/erc20_test.go
    • modules/farm/keeper/invariants.go
    • modules/htlc/keeper/asset_test.go

The change is correct and consistent with the codebase standards

The migration from IsEqual to Equal appears to be a deliberate standardization, with Equal being the preferred method for coin comparisons throughout the codebase. The few remaining IsEqual instances are in test files and don't affect production code.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining IsEqual usages that might need updating

# Search for any remaining IsEqual usages
echo "Checking for remaining IsEqual usages:"
rg "\.IsEqual\(" --type go

# Search for Equal usage pattern to verify consistency
echo -e "\nVerifying Equal usage:"
rg "\.Equal\(" --type go

Length of output: 68123

modules/service/keeper/depinject_test.go (2)

Line range hint 60-64: Verify module initialization order

The changes to genesisModuleOrder look correct as they:

  1. Maintain the required ordering (genutils after staking and auth)
  2. Remove the capability module (which is expected as part of cosmos-sdk v0.50.10)
  3. Add the new modules in a logical order

However, let's verify that this order is consistent with other cosmos-sdk v0.50.10 applications.

#!/bin/bash
# Description: Search for similar module initialization patterns in the codebase

# Look for other files that might define module initialization order
rg -l "genesisModuleOrder.*=.*\[" --type go

# Look for any documentation about module ordering
fd -t f "README.md" | xargs rg -l "module.*order"

27-29: Verify the necessity of newly added imports

The addition of evidence, feegrant, and upgrade type imports aligns with the cosmos-sdk v0.50.10 upgrade. However, let's verify that these modules are actually used in the codebase.

✅ Verification successful

Newly added imports are correctly used in the test configuration

The evidence, feegrant, and upgrade modules are properly integrated into the test configuration:

  • All three modules are correctly configured with their respective module configurations
  • They are included in the genesis module order
  • They are properly placed in the initialization sequences

The imports are necessary as they are actively used in the test configuration for:

  1. Module registration via appconfig.WrapAny
  2. Module ordering in genesisModuleOrder
  3. Module names in various configuration blocks
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the newly added modules are used in the codebase

echo "Checking usage of evidence module..."
rg -l "evidencetypes\." --type go

echo "Checking usage of feegrant module..."
rg -l "feegrant\." --type go

echo "Checking usage of upgrade module..."
rg -l "upgradetypes\." --type go

Length of output: 573


Script:

#!/bin/bash
# Let's try a different approach to check the usage of these modules

# Check for evidence module configuration and usage
echo "Checking evidence module configuration..."
rg -A 5 "evidence" modules/service/keeper/depinject_test.go

# Check for feegrant module configuration and usage
echo "Checking feegrant module configuration..."
rg -A 5 "feegrant" modules/service/keeper/depinject_test.go

# Check for upgrade module configuration and usage
echo "Checking upgrade module configuration..."
rg -A 5 "upgrade" modules/service/keeper/depinject_test.go

# Check if these modules are part of the module initialization order
echo "Checking module initialization order..."
rg "genesisModuleOrder.*=.*\[.*\]" modules/service/keeper/depinject_test.go

Length of output: 5015

modules/service/client/utils/query.go (1)

215-226: ⚠️ Potential issue

Critical: Incomplete modification of transaction query logic

The changes to the query logic raise several concerns:

  1. The event filtering logic has been commented out without providing an alternative filtering mechanism
  2. The QueryTxsByEvents call now uses empty strings for both parameters, effectively removing all filtering
  3. This could lead to:
    • Performance degradation due to querying all transactions without filters
    • Incorrect results by potentially returning unrelated transactions
    • Unnecessary exposure of transaction data

Consider one of these approaches:

-	//events := []string{
-	//	fmt.Sprintf(
-	//		"%s.%s='%s'",
-	//		types.EventTypeRespondService,
-	//		types.AttributeKeyRequestID,
-	//		[]byte(fmt.Sprintf("%d", requestID)),
-	//	),
-	//}
-	result, err := authtx.QueryTxsByEvents(cliCtx, 1, 1, "", "")

+	// Option 1: Update event query format for SDK v0.50.x
+	events := []string{
+		fmt.Sprintf("%s='%s'", 
+			sdk.EventTypeMessage,
+			types.EventTypeRespondService,
+		),
+		fmt.Sprintf("%s.%s='%s'",
+			types.EventTypeRespondService,
+			types.AttributeKeyRequestID,
+			requestID.String(),
+		),
+	}
+	result, err := authtx.QueryTxsByEvents(cliCtx, 1, 1, strings.Join(events, " AND "), "")

+	// Option 2: Use the new query API if available in SDK v0.50.x
+	query := client.NewEventQueryBuilder().
+		AddEvent(types.EventTypeRespondService).
+		AddAttribute(types.AttributeKeyRequestID, requestID.String())
+	result, err := authtx.QueryTxsByEvents(cliCtx, 1, 1, query.Build(), "")

Let's verify the correct event query format in Cosmos SDK v0.50.x:

#!/bin/bash
# Search for examples of QueryTxsByEvents usage in the codebase
rg "QueryTxsByEvents.*\".*\".*\"" --type go -A 2 -B 2

# Search for event query construction patterns
rg "EventTypeMessage|AddEvent|NewEventQueryBuilder" --type go -A 2 -B 2
modules/service/keeper/binding.go (2)

8-9: LGTM: Import changes align with Cosmos SDK v0.50.10 migration

The addition of math and storetypes packages from cosmossdk.io is consistent with the SDK upgrade.


457-457: LGTM: Consistent iterator package migration

The replacement of sdk.KVStorePrefixIterator with storetypes.KVStorePrefixIterator is consistently applied across all iterator usages, maintaining the same functionality while aligning with the SDK's new package structure.

Also applies to: 503-505, 563-563, 577-579, 583-585, 594-594

modules/service/keeper/keeper_test.go (4)

8-8: LGTM: Import update aligns with Cosmos SDK v0.50.x

The addition of cosmossdk.io/math import is correct for the SDK v0.50.x migration.


24-35: LGTM: Numeric type handling updated correctly

The migration from sdk.NewInt to math.NewInt is correctly implemented for all coin amount initializations.


94-95: LGTM: Context initialization simplified

The removal of tmproto.Header{} parameter from NewContext aligns with the latest Cosmos SDK context initialization pattern.


266-266: LGTM: Updated coin comparison method

The change from IsEqual to Equal for coin comparison is correct and follows the latest Cosmos SDK conventions.

modules/service/keeper/invocation.go (3)

9-10: LGTM: Import changes align with Cosmos SDK v0.50.10

The addition of cosmossdk.io/math and cosmossdk.io/store/types imports is correct for the SDK upgrade.


414-414: LGTM: Iterator type changes align with Cosmos SDK v0.50.10

The changes consistently replace sdk.KVStorePrefixIterator with storetypes.KVStorePrefixIterator and update return types from sdk.Iterator to storetypes.Iterator across all iterator-related methods. This change is part of the SDK's store package reorganization.

Also applies to: 628-628, 648-652, 837-839, 861-863, 882-884, 892-896, 901-902, 1128-1129, 1148-1152


996-996: LGTM: Decimal type changes align with Cosmos SDK v0.50.10

The changes correctly replace math.NewDecFromInt with math.LegacyNewDecFromInt for decimal operations. This change maintains compatibility with the SDK's decimal type system.

Also applies to: 1234-1234

modules/service/simulation/operations.go (5)

8-8: LGTM: Import change aligns with cosmos-sdk v0.50.10 upgrade

The addition of cosmossdk.io/math import is consistent with the PR objective to upgrade to cosmos-sdk v0.50.10.


66-72: LGTM: Consistent removal of codec parameter

The removal of the cdc parameter from GetOrGenerate calls is consistent throughout the file and aligns with the cosmos-sdk v0.50.10 upgrade pattern.

Also applies to: 87-87, 129-135, 141-147, 153-153, 168-168


989-989: LGTM: Consistent usage of new math package

The transition from sdk.NewInt to math.NewInt is consistent with the cosmos-sdk v0.50.10 upgrade and is applied uniformly across the file.

Also applies to: 1482-1482


296-296: LGTM: Simplified operation message returns

The return statements have been consistently updated across all simulation functions to use a simpler form of simtypes.NewOperationMsg, removing unnecessary parameters while maintaining functionality.

Also applies to: 444-444, 563-563, 641-641, 728-728, 843-843, 945-945, 1043-1043, 1123-1123, 1216-1216, 1317-1317, 1417-1417, 1552-1552, 1629-1629


Line range hint 8-1629: Verify consistent migration to new math package

Let's verify that all instances of the old math package have been properly migrated.

✅ Verification successful

Let me analyze the specific usage in the service module to verify the math package migration.


Based on the analysis of the service module's math package usage, I can now provide a final response:

Migration to cosmossdk.io/math package is correctly implemented

The service module has properly migrated from sdk.Int/Dec to the new math package:

  • All code uses math.LegacyDec and math.Int from cosmossdk.io/math
  • The only remaining sdk.Int/Dec references are in documentation (spec/01_state.md)
  • Consistent usage of math.NewInt() and math.LegacyNewDec() throughout the codebase
  • Proper imports and type declarations in protobuf generated files
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining instances of sdk.Int or sdk.Dec that should be migrated

# Search for any remaining sdk.Int or sdk.Dec usage
echo "Checking for remaining sdk.Int or sdk.Dec usage..."
rg -l 'sdk\.(Int|Dec)' --type go

# Search for any inconsistent usage of math.Int or math.LegacyDec
echo "Checking for math package usage..."
rg -l 'math\.(Int|LegacyDec)' --type go

Length of output: 1869


Script:

#!/bin/bash
# Check for math package usage in service module
echo "Checking math package usage in service module..."
rg -A 2 'math\.' modules/service/

# Check for any remaining sdk.Int/Dec in service module
echo "Checking sdk.Int/Dec usage in service module..."
rg -A 2 'sdk\.(Int|Dec)' modules/service/

Length of output: 14089

modules/service/types/msgs_test.go (4)

8-8: LGTM: Import of new math package

The addition of the cosmossdk.io/math import aligns with the migration to use the new math package from cosmos-sdk.


17-18: LGTM: Updated test coin declarations to use new math package

The test coins have been correctly updated to use math.NewInt instead of sdk.NewInt, maintaining consistency with the cosmos-sdk v0.50.10 upgrade.


300-300: LGTM: Updated invalid test cases to use new math package

The invalid test cases have been correctly updated to use math.NewInt, maintaining the same validation scenarios while aligning with the new math package usage.

Also applies to: 1088-1088, 1562-1562


Line range hint 1-1700: Verify test coverage after math package migration

While the changes to use the new math package look correct, it's important to ensure all tests still pass and maintain the same coverage.

✅ Verification successful

Test coverage is complete and properly updated for math package migration

The verification shows:

  • All test functions are properly implemented with no skipped tests
  • The math package is correctly used in all test cases involving numerical operations
  • All test cases for coin amounts use the updated math.NewInt() syntax
  • Test coverage remains comprehensive across all message types and their validations
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if any tests are being skipped or failing after the math package migration

# Look for any skipped tests
rg -i "skip|todo|fixme" modules/service/types/msgs_test.go

# Look for any test helper functions that might need updates
ast-grep --pattern 'func Test$_($_, $_) {
  $$$
}'

Length of output: 113


Script:

#!/bin/bash
# Let's verify test coverage more comprehensively

# Check if all test functions are properly implemented
rg "^func Test.*\(" modules/service/types/msgs_test.go

# Look for any test assertions to verify they use the updated math package
rg "math\." modules/service/types/msgs_test.go

# Check test cases that specifically deal with numerical values
rg "NewInt|Amount:" modules/service/types/msgs_test.go

Length of output: 4748

api/irismod/service/service.pulsar.go (2)

9761-9771: LGTM: Improved decimal precision handling

The change from string to math.LegacyDec for discount fields in both PromotionByTime and PromotionByVolume messages aligns with the Cosmos SDK v0.50.10 upgrade objectives, providing better decimal precision handling.


9772-9814: LGTM: Enhanced params configuration

The changes improve the Params message by:

  1. Using math.LegacyDec for service_fee_tax and slash_fraction fields
  2. Adding restricted_service_fee_denom field for better fee denomination control

These updates align with the Cosmos SDK v0.50.10 upgrade objectives and enhance the module's configurability.

Let's verify the usage of these new types across the codebase:

✅ Verification successful

Let me gather more information about the usage of these fields to ensure consistency.


Let me try one more verification with modified patterns to check the implementation details.


Based on the verification results, I can now provide the final response:

✓ Verified: Proper implementation of decimal fields

The changes correctly implement service_fee_tax and slash_fraction using math.LegacyDec with:

  • Proper validation functions in place
  • Consistent usage across the module (keeper, types)
  • Default values set appropriately (5% for fee tax, 0.1% for slash fraction)
  • Complete protobuf integration with proper marshaling/unmarshaling
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the consistent usage of math.LegacyDec across the codebase
# Expected: All decimal fields should use math.LegacyDec type

# Search for any remaining string-based decimal fields
rg -t go "type.*string.*// *decimal" 

# Search for math.LegacyDec usage
rg -t go "math\.LegacyDec"

Length of output: 2384


Script:

#!/bin/bash
# Check for any potential string-based decimal fields in the service module
rg -t go "string.*decimal|decimal.*string" modules/service/

# Check the protobuf definitions for service_fee_tax and slash_fraction
rg -t proto "service_fee_tax|slash_fraction" -A 2 -B 2

# Look for any validation or conversion logic related to these fields
ast-grep --pattern 'func $_($$$ service_fee_tax $$$) {
  $$$
}'

Length of output: 214


Script:

#!/bin/bash
# Check for any validation or parameter handling related to these fields
rg -t go "ServiceFeeTax|SlashFraction" -A 3 -B 3 modules/service/

# Look for any parameter validation functions
ast-grep --pattern 'func $_ (p Params) Validate() error {
  $$$
}'

# Check for any parameter-related tests
rg -t go "TestParams|TestServiceFeeTax|TestSlashFraction" modules/service/

Length of output: 12522

modules/service/module.go (5)

5-5: Import appmodule package to support new interfaces.

The addition of the import "cosmossdk.io/core/appmodule" is necessary for implementing the HasBeginBlocker and HasEndBlocker interfaces.


32-33: Implement HasBeginBlocker and HasEndBlocker interfaces for AppModule.

By adding the implementations for appmodule.HasBeginBlocker and appmodule.HasEndBlocker, the AppModule now correctly conforms to the updated module interface requirements.


161-164: Update BeginBlock method signature and context handling.

The BeginBlock method now accepts a context.Context and returns an error, aligning with the new interface. The use of sdk.UnwrapSDKContext(ctx) to retrieve the sdk.Context is appropriate.


169-172: Update EndBlock method signature and context handling.

Similarly, the EndBlock method correctly adopts the updated signature with context.Context and returns an error. Unwrapping the context using sdk.UnwrapSDKContext(ctx) is correctly implemented.


183-184: Update RegisterStoreDecoder to use simtypes.StoreDecoderRegistry.

Changing the parameter type to simtypes.StoreDecoderRegistry ensures compatibility with the updated simulation types in the SDK.

modules/service/go.mod (1)

3-3: Confirm Go 1.21 support in the build environment

The Go version has been updated to 1.21. Ensure that your build and deployment environments are updated accordingly to prevent any compatibility issues.

@@ -55,7 +56,7 @@ func (k Keeper) IterateServiceDefinitions(
) {
store := ctx.KVStore(k.storeKey)

iterator := sdk.KVStorePrefixIterator(store, types.ServiceDefinitionKey)
iterator := storetypes.KVStorePrefixIterator(store, types.ServiceDefinitionKey)
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Inconsistent iterator usage detected across modules

The codebase shows mixed usage of iterator implementations:

  • storetypes.KVStorePrefixIterator is used consistently within the service module
  • sdk.KVStorePrefixIterator is still being used in multiple other modules:
    • token
    • record
    • random
    • nft
    • oracle
    • farm
    • coinswap
    • htlc
    • mt

This inconsistency needs to be addressed as part of the cosmos-sdk v0.50.10 migration.

🔗 Analysis chain

Verify consistent iterator usage across the codebase

The change to storetypes.KVStorePrefixIterator is correct for cosmos-sdk v0.50.10. Let's verify that this change has been consistently applied across all similar iterator usages.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining usage of sdk.KVStorePrefixIterator
# and verify consistent usage of storetypes.KVStorePrefixIterator

echo "Checking for any remaining sdk.KVStorePrefixIterator usage..."
rg "sdk\.KVStorePrefixIterator"

echo "Verifying consistent usage of storetypes.KVStorePrefixIterator..."
rg "storetypes\.KVStorePrefixIterator"

Length of output: 5520

@@ -74,7 +75,7 @@ func GenOraclePriceSvcBinding(baseDenom string) ServiceBinding {
return ServiceBinding{
ServiceName: OraclePriceServiceName,
Provider: OraclePriceServiceProvider.String(),
Deposit: sdk.NewCoins(sdk.NewCoin(baseDenom, sdk.NewInt(0))),
Deposit: sdk.NewCoins(sdk.NewCoin(baseDenom, math.NewInt(0))),
Copy link

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 search results, I can now generate the final response:

Migration to math.NewInt needed in several files

The change from sdk.NewInt(0) to math.NewInt(0) in oracle_price.go is correct, but there are still many files using the old sdk.NewInt pattern that need to be migrated. Key files requiring updates:

  • modules/token/: Multiple files including simulation, types/v1, and types/v1beta1
  • modules/htlc/: Files in types, simulation, and migrations
  • modules/farm/: Types and keeper test files
  • modules/coinswap/: Types and keeper test files
  • e2e/ test files across multiple modules
🔗 Analysis chain

LGTM: Correct migration to math.NewInt

The change from sdk.NewInt(0) to math.NewInt(0) is correct for the SDK v0.50.10 upgrade.

Let's verify that similar changes have been made consistently across the codebase:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining instances of sdk.NewInt that might need migration
# and verify the consistency of math.NewInt usage

# Check for any remaining sdk.NewInt usage that might need migration
echo "Checking for remaining sdk.NewInt usage:"
rg "sdk\.NewInt\(" --type go

# Check the pattern of math.NewInt usage for consistency
echo "Checking math.NewInt usage pattern:"
rg "math\.NewInt\(" --type go

Length of output: 38384

@@ -3,8 +3,8 @@ package service
import (
"cosmossdk.io/core/appmodule"
"cosmossdk.io/depinject"
store "cosmossdk.io/store/types"
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Store import path needs to be updated across multiple modules

The verification reveals inconsistent usage of store import paths across the codebase. While some files have been updated to use cosmossdk.io/store/types, several modules are still using the legacy import path github.com/cosmos/cosmos-sdk/store/types. Updates needed in:

  • modules/token: depinject.go, keeper/keeper.go
  • modules/random: depinject.go, keeper/keeper.go
  • modules/record: depinject.go, keeper/keeper.go
  • modules/oracle: depinject.go, keeper/keeper.go
  • modules/htlc: depinject.go, keeper/keeper.go
  • modules/nft: depinject.go, keeper/keeper.go, migrations/v2/*
  • modules/farm: depinject.go, keeper/keeper.go
  • modules/coinswap: depinject.go, keeper/keeper.go
  • e2e/sim_test.go
🔗 Analysis chain

Verify consistent usage of new store import path across the codebase

The update of the store import path to cosmossdk.io/store/types aligns with Cosmos SDK v0.50.x's modularization. Let's ensure this change is consistent across all files.


Let me try the verification again with the correct command to check store imports.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining old store import paths
# Expected: No occurrences of the old import path should be found

echo "Checking for old store import paths..."
rg "github.com/cosmos/cosmos-sdk/store/types" --type go

echo "Verifying new store import usage..."
rg "cosmossdk.io/store/types" --type go

Length of output: 11002


Script:

#!/bin/bash
# Description: Check for any remaining old store import paths and new store import paths
echo "Checking for old store import paths..."
rg '"github.com/cosmos/cosmos-sdk/store/types"' --type go

echo -e "\nChecking for new store import usage..."
rg '"cosmossdk.io/store/types"' --type go

Length of output: 2810

Comment on lines +122 to 124
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Migration to math.LegacyDec is incomplete across the codebase

The verification reveals that several proto files still use the old github.com/cosmos/cosmos-sdk/types.Dec type:

  • proto/irismod/token/v1/token.proto
  • proto/irismod/token/v1beta1/token.proto
  • proto/irismod/farm/farm.proto
  • proto/irismod/coinswap/coinswap.proto

While the changes in service.proto are correct, the migration to cosmossdk.io/math.LegacyDec should be consistent across all modules for compatibility with cosmos-sdk v0.50.x.

🔗 Analysis chain

LGTM! Consistent migration to math.LegacyDec

The changes correctly update all decimal field types from github.com/cosmos/cosmos-sdk/types.Dec to cosmossdk.io/math.LegacyDec, which is the recommended approach when upgrading to cosmos-sdk v0.50.x.

Let's verify that all Dec types have been migrated:

Since these changes affect critical financial calculations (discounts, fees, and slashing), ensure that:

  1. All decimal arithmetic operations are thoroughly tested with various decimal places
  2. The migration maintains the same precision and rounding behavior as before
  3. Integration tests cover edge cases like maximum/minimum values

Also applies to: 131-133, 176-178, 180-182

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining cosmos-sdk Dec types that might have been missed
rg -l "github.com/cosmos/cosmos-sdk/types.Dec" --type proto

# Search for all LegacyDec usages to ensure consistency
rg -l "cosmossdk.io/math.LegacyDec" --type proto

Length of output: 168


Script:

#!/bin/bash
# Search for any remaining cosmos-sdk Dec types that might have been missed
rg "github.com/cosmos/cosmos-sdk/types.Dec"

# Search for all LegacyDec usages to ensure consistency
rg "cosmossdk.io/math.LegacyDec"

Length of output: 5187

@@ -72,7 +74,7 @@ func (k Keeper) GetEarnedFees(
) (fees sdk.Coins, found bool) {
store := ctx.KVStore(k.storeKey)

iterator := sdk.KVStorePrefixIterator(store, types.GetEarnedFeesSubspace(provider))
iterator := storetypes.KVStorePrefixIterator(store, types.GetEarnedFeesSubspace(provider))
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Update remaining iterator usages across modules

The verification reveals inconsistent iterator usage across the codebase. While the service module has been updated to use storetypes.KVStorePrefixIterator, several other modules still use the old sdk.KVStorePrefixIterator:

  • modules/token/keeper/token.go
  • modules/record/keeper/keeper.go
  • modules/random/keeper/keeper.go
  • modules/oracle/keeper/feed.go
  • modules/nft/migrations/v2/store.go
  • modules/farm/keeper/*.go
  • modules/htlc/keeper/*.go
  • modules/coinswap/keeper/pool.go

These modules need to be updated to use storetypes.KVStorePrefixIterator for consistency with the SDK v0.50.10 changes.

🔗 Analysis chain

Verify consistent iterator type updates across the codebase

The changes from sdk.KVStorePrefixIterator to storetypes.KVStorePrefixIterator are correct. Let's verify that all iterator usages in related files have been updated consistently.

Also applies to: 92-92, 116-116, 131-131, 193-195

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining sdk.KVStorePrefixIterator usages that might have been missed

# Search for any remaining old iterator usages
echo "Checking for remaining sdk.KVStorePrefixIterator usages:"
rg "sdk\.KVStorePrefixIterator" --type go

# Search for new iterator usage pattern to verify consistency
echo -e "\nVerifying storetypes.KVStorePrefixIterator usage:"
rg "storetypes\.KVStorePrefixIterator" --type go

Length of output: 5504

@@ -153,7 +153,7 @@ func QueryRequestByTxQuery(
return request, err
}

for _, event := range blockResult.EndBlockEvents {
for _, event := range blockResult.FinalizeBlockEvents {
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Update required: EndBlockEvents still present in e2e tests

The migration from EndBlockEvents to FinalizeBlockEvents is incomplete. While the change has been made in the main code (modules/service/client/utils/query.go), there are several instances in e2e tests that still use the old EndBlockEvents:

  • e2e/service/query.go
  • e2e/service/tx.go
  • e2e/oracle/tx.go
  • e2e/random/tx.go
  • e2e/random/query.go

These test files need to be updated to use FinalizeBlockEvents to maintain consistency with the ABCI++ interface changes.

🔗 Analysis chain

LGTM: Correct adaptation to CometBFT's ABCI++ interface

The change from EndBlockEvents to FinalizeBlockEvents correctly aligns with the breaking changes introduced in CometBFT's ABCI++ interface, where EndBlock has been replaced with FinalizeBlock.

Let's verify that this change has been consistently applied across the codebase:


The previous search didn't show the relevant results. Let's try a more focused search to find all instances of block event handling in the codebase to verify the consistency of the changes.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining instances of EndBlockEvents that might need updating
rg "EndBlockEvents" --type go

# Search for FinalizeBlockEvents usage to ensure consistency
rg "FinalizeBlockEvents" --type go

Length of output: 822


Script:

#!/bin/bash
# Let's search more specifically for EndBlockEvents and FinalizeBlockEvents
rg "EndBlockEvents|FinalizeBlockEvents" --type go -A 2 -B 2

# Let's also check for any ABCI or block event related code
rg "Block.*Events|ABCI.*Events" --type go -A 2 -B 2

Length of output: 3639

Comment on lines +8 to +9
"cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Migration to new math and store packages requires updates

Based on the verification results, there are inconsistencies in the codebase that need to be addressed:

  • Multiple files still use sdk.KVStorePrefixIterator instead of storetypes.KVStorePrefixIterator
  • Many instances of sdk.NewInt, sdk.NewDecFromInt need to be migrated to math.NewInt and math.LegacyNewDecFromInt
  • Some files already use math.LegacyNewDecFromInt while others use SDK variants

Key files requiring updates:

  • modules/token/keeper/*.go
  • modules/random/keeper/*.go
  • modules/oracle/keeper/*.go
  • modules/coinswap/keeper/*.go
  • modules/farm/keeper/*.go
  • modules/htlc/keeper/*.go
  • modules/nft/migrations/v2/store.go
🔗 Analysis chain

Verify consistent package migration across codebase

Let's verify that the migration to math and storetypes packages is consistent across the codebase.

Also applies to: 457-457, 609-609

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for any remaining sdk.KVStorePrefixIterator usage
echo "Checking for remaining sdk.KVStorePrefixIterator usage..."
rg "sdk\.KVStorePrefixIterator"

# Check for any remaining sdk.NewInt or sdk.NewDecFromInt usage
echo "Checking for remaining sdk.NewInt or sdk.NewDecFromInt usage..."
rg "sdk\.NewInt|sdk\.NewDecFromInt"

# Check for consistent use of math.LegacyNewDecFromInt
echo "Checking for consistent use of math.LegacyNewDecFromInt..."
rg "math\.LegacyNewDecFromInt"

Length of output: 47284

Comment on lines 216 to 217
// todo replace version
mods.irisnet.org/simapp => ../../simapp
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Resolve TODO: Specify the correct version for mods.irisnet.org/simapp

The comment // todo replace version indicates that the version for mods.irisnet.org/simapp needs to be specified. Please update the replace directive with the appropriate version to maintain dependency consistency.

Would you like assistance in determining the correct version or updating the replace directive?

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

Reviewing files that changed from the base of the PR and between ccc17ef and 3fadced.

⛔ Files ignored due to path filters (1)
  • modules/service/go.sum is excluded by !**/*.sum
📒 Files selected for processing (1)
  • modules/service/go.mod (2 hunks)
🔇 Additional comments (3)
modules/service/go.mod (3)

3-3: Go version upgrade looks good!

The upgrade to Go 1.21 is appropriate and provides access to the latest language features and security updates.


216-218: Resolve TODO: Specify the correct version for mods.irisnet.org/simapp

This issue was previously identified in the past reviews. The TODO comment still needs to be addressed.


6-29: Verify compatibility between updated dependencies

Please verify compatibility between all updated dependencies, particularly:

  1. Cosmos SDK ecosystem packages (cosmossdk.io/*)
  2. CometBFT and its dependencies
  3. Protocol buffer related packages
✅ Verification successful

Dependencies are compatible and aligned with ecosystem standards

Based on the analysis of the dependencies:

  1. The Cosmos SDK v0.50.10 is properly aligned with its ecosystem packages (cosmossdk.io/*) which are all using compatible versions
  2. CometBFT v0.38.12 and its DB dependency (v0.11.0) are at stable versions known to work together
  3. Protocol buffer related packages (protobuf v1.34.2, grpc v1.64.1, cosmos-proto v1.0.0-beta.5) are at compatible versions commonly used in the Cosmos ecosystem

The replace directives present are for security fixes and don't affect core compatibility:

  • keyring replacement is a known security update
  • jwt-go replacement addresses a security concern
  • goleveldb replacement is a stability fix
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for version compatibility issues in go.mod

# Check for any dependency conflicts
go mod verify

# Check for any dependency cycles
go mod graph | awk '{print $2}' | sort | uniq -c | sort -rn | head -n 10

# Check for any indirect dependencies that should be direct
go mod tidy -v 2>&1 | grep "unused"

Length of output: 261


Script:

#!/bin/bash
# Let's analyze the dependencies using grep and pattern matching since we don't have Go tools

# Check if cosmos-sdk version is compatible with other cosmos packages
rg -A1 "require \(" modules/service/go.mod
rg "cosmos-sdk" modules/service/go.mod

# Check CometBFT and related dependencies
rg "cometbft" modules/service/go.mod

# Check protobuf related packages versions
rg "proto|grpc" modules/service/go.mod

# Look for any replace directives that might affect compatibility
rg "^replace" modules/service/go.mod

# Check for any additional dependency constraints
rg "^require \(|=>|// indirect" modules/service/go.mod

Length of output: 10565

Comment on lines +16 to +18
github.com/cometbft/cometbft v0.38.12
github.com/cosmos/cosmos-proto v1.0.0-beta.5
github.com/cosmos/cosmos-sdk v0.50.10
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Security Update Required: Update CometBFT and Cosmos SDK

Based on the security analysis:

  1. github.com/cometbft/cometbft v0.38.12 has a HIGH severity vulnerability related to panic in Vote Extensions
  2. github.com/cosmos/cosmos-sdk v0.50.10 includes versions with known security issues

Please update to the following secure versions:

  • CometBFT: Update to v0.38.15 or later
  • Cosmos SDK: Ensure you're using v0.50.10 with all security patches

google.golang.org/protobuf v1.32.0
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237
google.golang.org/grpc v1.64.1
google.golang.org/protobuf v1.34.2
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Security Update Required: Update Protocol Buffers

The current version of google.golang.org/protobuf v1.34.2 has a MODERATE severity vulnerability related to infinite loop in protojson.Unmarshal.

Update to v1.33.0 or later to address this security issue.

@mitch1024 mitch1024 merged commit 624bd5b into main Nov 18, 2024
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

bump up mods.irisnet.org/modules/service to cosmos-sdk v0.50.10
3 participants