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

refactor(ibc): refine the conversion logic between ibc coin and base coin during ibc transfer #723

Merged
merged 1 commit into from
Oct 10, 2024

Conversation

zakir-code
Copy link
Contributor

@zakir-code zakir-code commented Oct 10, 2024

Summary by CodeRabbit

  • New Features

    • Enhanced cross-chain functionality with new methods for handling IBC coins and conversions to EVM-compatible tokens.
    • Introduced a new CrossChainKeeper interface to support cross-chain operations.
    • Added string representation method for FxTarget instances.
  • Bug Fixes

    • Improved error handling in the refund process and acknowledgment logic.
  • Refactor

    • Restructured keeper methods to streamline cross-chain operations and removed outdated logic related to ERC20 conversions.
  • Tests

    • Updated test cases to align with new address handling and removed obsolete tests for cross-chain transfers.

Copy link

coderabbitai bot commented Oct 10, 2024

Walkthrough

The pull request encompasses modifications across multiple files, primarily focusing on enhancing cross-chain functionality within the application. Key changes include updates to the Makefile for linting checks, the introduction of new methods and parameters in various keeper files, and the restructuring of interfaces to accommodate cross-chain operations. Additionally, several test cases have been removed or modified to align with these changes, indicating a shift in the testing strategy for cross-chain functionality.

Changes

File Path Change Summary
Makefile Updated the check-no-lint target to change the threshold for nolint or #nosec comments from 32 to 31 occurrences.
app/keepers/keepers.go Modified NewAppKeeper to include EthKeeper in NewPrecompiledContract and updated IBCMiddlewareKeeper to use EthKeeper instead of Erc20Keeper.
types/target.go Added a new method String() to the FxTarget struct for string representation based on the isIBC field.
x/crosschain/keeper/abci_test.go Added import for ibctransfertypes, updated TestABCIEndBlockDepositClaim to include denomTrace and ibcDenom, and modified TestOracleUpdate to accommodate new token handling.
x/crosschain/keeper/keeper_v1_test.go Introduced SetIBCDenom method to KeeperTestSuite for setting up IBC denomination traces.
x/crosschain/keeper/many_to_one.go Added methods for handling IBC coins, including IBCCoinToBaseCoin, BaseCoinToIBCCoin, IBCCoinToEvm, IBCCoinRefund, and AfterIBCAckSuccess. Modified BaseDenomToBridgeDenom for IBC token checks.
x/crosschain/keeper/send_to_fx.go Updated SendToFxExecuted, RelayTransferHandler, and transferIBCHandler methods to enhance coin transfer handling and introduced telemetry metrics.
x/crosschain/mock/expected_keepers_mocks.go Added new methods to MockErc20Keeper and MockIBCTransferKeeper, including DeleteIBCTransferRelation, IbcRefund, and GetDenomTrace.
x/crosschain/precompile/contract.go Updated NewPrecompiledContract to include a new crossChainKeeper parameter.
x/crosschain/precompile/crosschain_test.go Removed multiple test cases from TestCrossChainIBC and TestCrossChainIBCExternal, indicating a simplification of the testing strategy.
x/crosschain/precompile/expected_keepers.go Introduced CrossChainKeeper interface with a method for converting base coins to IBC coins.
x/crosschain/precompile/keeper.go Added crossChainKeeper field to Keeper struct and modified ibcTransfer method to include coin conversion logic.
x/crosschain/types/expected_keepers.go Added methods to Erc20Keeper and IBCTransferKeeper interfaces, and introduced a new import for tmbytes.
x/erc20/keeper/transfer_relation.go Renamed RefundAfter to IbcRefund and changed its return type to error, simplifying the refund process.
x/ibc/middleware/keeper/keeper.go Removed refundHook and erc20Keeper fields from Keeper struct, added crossChainKeeper, and updated NewKeeper constructor accordingly.
x/ibc/middleware/keeper/relay.go Modified OnRecvPacket, OnAcknowledgementPacket, and refundPacketTokenHook methods to streamline IBC handling and remove previous checks for refundHook.
x/ibc/middleware/keeper/relay_test.go Removed several import statements and commented out the TestOnRecvPacket function, along with updates to address handling in test cases.
x/ibc/middleware/types/expected_keepers.go Introduced CrossChainKeeper interface, removed RefundHook and Erc20Keeper interfaces, and added relevant methods for cross-chain operations.

Possibly related PRs

🐰 In the meadow, where the bunnies play,
New changes hop in, brightening the day.
With coins that cross from here to there,
Our code's now spry, with nary a care!
Let's cheer for the keepers, the tests, and the fun,
For cross-chain magic has only begun! 🐇✨


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: 14

🧹 Outside diff range and nitpick comments (11)
x/ibc/middleware/keeper/keeper.go (1)

18-23: LGTM! Consider updating function documentation.

The changes to the NewKeeper function correctly reflect the modifications made to the Keeper struct. The function signature and body have been updated appropriately to handle the new crossChainKeeper parameter and remove the refundHook and erc20Keeper parameters.

If there's any existing documentation for this function (e.g., godoc comments), please ensure it's updated to reflect these changes.

x/crosschain/precompile/contract.go (2)

36-36: LGTM. Consider updating documentation.

The addition of the crossChainKeeper field to the Keeper struct initialization is consistent with the new parameter and integrates the cross-chain functionality into the keeper.

Consider updating the documentation for the Keeper struct (if it exists) to reflect this new field and its purpose in the cross-chain functionality.


Line range hint 1-114: Summary: Cross-chain integration looks good.

The changes in this file are minimal and focused on integrating cross-chain functionality:

  1. Added crossChainKeeper parameter to NewPrecompiledContract.
  2. Included crossChainKeeper in the Keeper struct initialization.

These modifications align with the PR objectives and don't introduce any apparent issues. The overall structure and functionality of the contract remain intact, maintaining backwards compatibility.

As the cross-chain functionality is being integrated, consider reviewing the error handling and logging mechanisms throughout the codebase to ensure they adequately capture and report any cross-chain related issues or events.

types/target.go (1)

90-95: LGTM! Consider adding error handling for robustness.

The String() method implementation looks good and provides a consistent string representation of the FxTarget. It aligns well with the existing GetTarget() method while offering a different format for IBC targets.

For added robustness, consider handling potential error cases:

 func (i FxTarget) String() string {
 	if i.isIBC {
+		if !strings.HasPrefix(i.SourceChannel, channeltypes.ChannelPrefix) {
+			return fmt.Sprintf("invalid-ibc-target:%s", i.SourceChannel)
+		}
 		return fmt.Sprintf("ibc/%s/%s", strings.TrimPrefix(i.SourceChannel, channeltypes.ChannelPrefix), i.Prefix)
 	}
 	return i.target
 }

This change ensures that the method handles cases where SourceChannel might not have the expected prefix, improving the robustness of the code.

x/crosschain/types/expected_keepers.go (2)

63-64: LGTM: New methods for IBC functionality in Erc20Keeper

The new methods IbcRefund and DeleteIBCTransferRelation are well-defined and consistent with the existing codebase style. They enhance the IBC transfer handling capabilities of the Erc20Keeper interface.

Consider adding inline documentation for these new methods to explain their purpose and expected behavior.


Line range hint 1-93: Overall assessment: Changes enhance IBC functionality

The modifications to this file align well with the PR objectives of refining the conversion logic between IBC coin and base coin during IBC transfer. The new methods in the Erc20Keeper and IBCTransferKeeper interfaces provide enhanced capabilities for handling IBC transfers and denom tracing.

Key points:

  1. New import for tmbytes is correctly added.
  2. Two new methods in Erc20Keeper improve IBC refund and transfer relation management.
  3. New GetDenomTrace method in IBCTransferKeeper enhances denom tracing capabilities.

These changes should improve the cross-chain functionality of the application. Please address the typo mentioned earlier and consider adding inline documentation for the new methods to improve code maintainability.

x/crosschain/keeper/keeper_v1_test.go (1)

202-211: LGTM: Well-structured helper method for IBC denom traces.

The SetIBCDenom method is a well-implemented helper for setting up IBC denomination traces in tests. It correctly constructs the prefixed denomination, creates the DenomTrace, and handles the case where the trace doesn't exist in the keeper.

Consider adding error handling for the ParseDenomTrace call, as it might return an error in some cases:

 func (suite *KeeperTestSuite) SetIBCDenom(portID, channelID, denom string) ibctransfertypes.DenomTrace {
 	sourcePrefix := ibctransfertypes.GetDenomPrefix(portID, channelID)
 	prefixedDenom := sourcePrefix + denom
-	denomTrace := ibctransfertypes.ParseDenomTrace(prefixedDenom)
+	denomTrace, err := ibctransfertypes.ParseDenomTrace(prefixedDenom)
+	suite.Require().NoError(err)
 	traceHash := denomTrace.Hash()
 	if !suite.App.IBCTransferKeeper.HasDenomTrace(suite.Ctx, traceHash) {
 		suite.App.IBCTransferKeeper.SetDenomTrace(suite.Ctx, denomTrace)
 	}
 	return denomTrace
 }

This change ensures that any parsing errors are caught and reported during testing.

x/ibc/middleware/types/expected_keepers.go (1)

17-19: Consider adding documentation comments to interface methods

Adding GoDoc comments to the methods in the CrossChainKeeper interface would improve readability and maintainability by clearly explaining the purpose, expected behavior, and usage of each method. This is especially helpful for interfaces, as it guides implementers on how to properly fulfill the contract.

Example:

type CrossChainKeeper interface {
	// IBCCoinToEvm handles the conversion of an IBC coin to its EVM equivalent.
	IBCCoinToEvm(ctx sdk.Context, coin sdk.Coin, holder sdk.AccAddress) error
	// IBCCoinRefund processes the refund of an IBC coin to the holder.
	IBCCoinRefund(ctx sdk.Context, coin sdk.Coin, holder sdk.AccAddress, ibcChannel string, ibcSequence uint64) error
	// AfterIBCAckSuccess performs post-processing after a successful IBC acknowledgment.
	AfterIBCAckSuccess(ctx sdk.Context, sourceChannel string, sequence uint64)
}
x/crosschain/keeper/send_to_fx.go (1)

Line range hint 72-74: Remove outdated TODO comment about converting to IBC token

In the RelayTransferHandler method, the comment // todo convert to ibc token is no longer necessary since the conversion is now handled in the transferIBCHandler function with the introduction of ibcCoin. Removing this comment will help keep the code clean and prevent confusion.

x/crosschain/keeper/many_to_one.go (1)

242-253: Handle potential errors from ConvertCoin more thoroughly.

After calling k.erc20Keeper.ConvertCoin, consider inspecting the response for additional information or warnings that might need handling, even if an error isn't returned.

Enhance error handling by checking the response:

 _, err = k.erc20Keeper.ConvertCoin(ctx, &erc20types.MsgConvertCoin{
     Coin:     baseCoin,
     Receiver: common.BytesToAddress(holder).String(),
     Sender:   holder.String(),
 })
+if err != nil {
+    return err
+}
// Handle any additional response data if necessary
 return nil
x/ibc/middleware/keeper/relay_test.go (1)

Line range hint 17-231: Reconsider Commenting Out the TestOnRecvPacket Function

The entire TestOnRecvPacket function has been commented out (lines 17-231). Commenting out test code reduces test coverage and might allow bugs to go unnoticed. If this test is outdated due to recent refactoring, consider updating it to align with the new logic. Alternatively, if it's no longer needed, it might be cleaner to remove it entirely from the codebase.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 7686a7d and af098f9.

📒 Files selected for processing (18)
  • Makefile (1 hunks)
  • app/keepers/keepers.go (2 hunks)
  • types/target.go (1 hunks)
  • x/crosschain/keeper/abci_test.go (3 hunks)
  • x/crosschain/keeper/keeper_v1_test.go (2 hunks)
  • x/crosschain/keeper/many_to_one.go (3 hunks)
  • x/crosschain/keeper/send_to_fx.go (2 hunks)
  • x/crosschain/mock/expected_keepers_mocks.go (4 hunks)
  • x/crosschain/precompile/contract.go (1 hunks)
  • x/crosschain/precompile/crosschain_test.go (0 hunks)
  • x/crosschain/precompile/expected_keepers.go (1 hunks)
  • x/crosschain/precompile/keeper.go (2 hunks)
  • x/crosschain/types/expected_keepers.go (3 hunks)
  • x/erc20/keeper/transfer_relation.go (1 hunks)
  • x/ibc/middleware/keeper/keeper.go (1 hunks)
  • x/ibc/middleware/keeper/relay.go (4 hunks)
  • x/ibc/middleware/keeper/relay_test.go (8 hunks)
  • x/ibc/middleware/types/expected_keepers.go (1 hunks)
💤 Files with no reviewable changes (1)
  • x/crosschain/precompile/crosschain_test.go
🧰 Additional context used
🔇 Additional comments (27)
x/crosschain/precompile/expected_keepers.go (2)

Line range hint 1-65: Summary: New CrossChainKeeper interface enhances cross-chain functionality

The addition of the CrossChainKeeper interface with the BaseCoinToIBCCoin method is a positive change that aligns with the PR objectives. It extends the cross-chain functionality, specifically for converting base coins to IBC coins during transfers. This change is well-integrated with the existing keeper interfaces in the file and follows good coding practices.


63-65: LGTM! New CrossChainKeeper interface looks good.

The new CrossChainKeeper interface with the BaseCoinToIBCCoin method is well-defined and aligns with the PR objectives. The method signature is correct and follows Go conventions.

Let's verify if this interface is implemented correctly in the codebase:

x/crosschain/types/expected_keepers.go (1)

7-7: LGTM: New import for tmbytes

The new import for tmbytes from the CometBFT library is correctly added and necessary for the new method signature in the IBCTransferKeeper interface.

x/crosschain/keeper/keeper_v1_test.go (1)

14-14: LGTM: Import statement for IBC transfer types.

The import of ibctransfertypes is correctly added and necessary for the new SetIBCDenom method.

Makefile (1)

145-145: Verify the reduction in lint suppressions.

The change from 32 to 31 in the check-no-lint target suggests that a lint suppression has been removed from the codebase. This is a positive change as it indicates a reduction in the number of lint suppressions.

Please confirm that this change corresponds to an actual removal of a 'nolint' or '#nosec' comment in the codebase. You can use the following command to verify:

✅ Verification successful

Lint suppression count verified.

The number of 'nolint' or '#nosec' occurrences has been successfully reduced to 31, as reflected in the check-no-lint target.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Count the number of 'nolint' or '#nosec' comments in Go files

# Test: Count 'nolint' or '#nosec' occurrences
count=$(find . -name '*.go' -type f | xargs grep -E 'nolint|#nosec' | wc -l)
echo "Number of 'nolint' or '#nosec' occurrences: $count"

# Verify if the count matches the new expected value
if [ "$count" -eq 31 ]; then
    echo "The count matches the new expected value (31)."
else
    echo "The count does not match the new expected value. Please investigate."
fi

Length of output: 321

x/crosschain/mock/expected_keepers_mocks.go (5)

17-17: LGTM: New import added correctly.

The new import for the bytes package is correctly added and is necessary for the new GetDenomTrace method.


431-443: LGTM: New mock method DeleteIBCTransferRelation added correctly.

The DeleteIBCTransferRelation method is correctly implemented in the MockErc20Keeper. It follows the GoMock conventions and has the appropriate signature.


500-512: LGTM: New mock method IbcRefund added correctly.

The IbcRefund method is correctly implemented in the MockErc20Keeper. It follows the GoMock conventions and has the appropriate signature.


643-656: LGTM: New mock method GetDenomTrace added correctly.

The GetDenomTrace method is correctly implemented in the MockIBCTransferKeeper. It follows the GoMock conventions, has the appropriate signature, and correctly uses the bytes.HexBytes type for denomTraceHash.


Line range hint 1-857: Summary: Mock implementations enhanced for IBC and denomination tracing.

The changes to this mock file introduce new methods that enhance the ability to test IBC transfer and denomination tracing functionality. These additions include:

  1. A new import for the bytes package.
  2. DeleteIBCTransferRelation method in MockErc20Keeper.
  3. IbcRefund method in MockErc20Keeper.
  4. GetDenomTrace method in MockIBCTransferKeeper.

These changes will allow for more comprehensive unit testing of systems that depend on these interfaces, particularly in scenarios involving IBC transfers and denomination tracing.

x/erc20/keeper/transfer_relation.go (2)

15-20: Ensure proper error handling from ConvertCoin

The error returned by k.ConvertCoin is being returned directly. If ConvertCoin fails, additional context or actions might be necessary to handle the failure adequately.

Consider logging the error or adding additional context to the error before returning it.

 _, err := k.ConvertCoin(ctx, &types.MsgConvertCoin{
     Coin:     amount,
     Receiver: common.BytesToAddress(sender.Bytes()).String(),
     Sender:   sender.String(),
 })
-return err
+if err != nil {
+    return fmt.Errorf("failed to convert coin: %w", err)
+}
+return nil

10-20: Verify all references to the renamed function are updated

The method RefundAfter has been renamed to IbcRefund. Ensure that all other references to RefundAfter in the codebase have been updated accordingly to prevent any broken references.

Run the following script to check for any remaining references to RefundAfter:

x/ibc/middleware/keeper/relay.go (3)

6-6: Importing sdkerrors for error handling

The addition of sdkerrors is appropriate, as it is used for wrapping errors in the updated code.


58-58: Proper handling of successful acknowledgements

The call to k.crossChainKeeper.AfterIBCAckSuccess correctly handles the logic after a successful packet acknowledgment.


85-85: Refactor refund logic to utilize crossChainKeeper

Refactoring to use k.crossChainKeeper.IBCCoinRefund centralizes the refund logic, enhancing code maintainability and readability.

x/crosschain/keeper/send_to_fx.go (2)

92-96: Properly converting base coin to IBC coin before transfer

The addition of ibcCoin, err := k.BaseCoinToIBCCoin(ctx, coin, receive, target.String()) ensures that the base coin is correctly converted to an IBC coin before initiating the transfer. Error handling is appropriately managed by checking and returning the error if it occurs.


105-105: Correct usage of the converted IBC coin in IBC transfer

By passing ibcCoin to transfertypes.NewMsgTransfer, you ensure that the transfer uses the correctly converted IBC coin. This change is crucial for maintaining the integrity of cross-chain transactions.

x/crosschain/precompile/keeper.go (1)

160-166: Confirm proper handling of the BaseCoinToIBCCoin conversion

The addition of the BaseCoinToIBCCoin conversion when originToken is false ensures that base coins are correctly converted to IBC coins before the transfer. This change is essential for refining the conversion logic during IBC transfers.

Consider running integration tests to ensure that:

  • The conversion logic handles various edge cases, such as zero amounts or maximum coin values.
  • The function behaves correctly with different fxTarget values.
  • Errors are appropriately returned and handled.
x/crosschain/keeper/many_to_one.go (5)

5-5: Import of "fmt" is appropriate and necessary.

The addition of the fmt package is required for string formatting used in the code, such as in fmt.Sprintf.


13-13: Inclusion of Ethereum common package is justified.

Importing github.com/ethereum/go-ethereum/common is necessary for Ethereum address conversions, specifically common.BytesToAddress.


16-16: Addition of erc20types import is appropriate.

The erc20types package is utilized in the code for operations involving the ERC20 module, such as invoking ConvertCoin.


255-261: Ensure correctness of the refund process in IBCCoinRefund.

Confirm that converting the IBC coin to base coin and then calling k.erc20Keeper.IbcRefund accurately processes the refund without side effects. Pay special attention to state changes and potential edge cases.

Consider adding tests to cover various refund scenarios, ensuring that the refund logic behaves as expected under different conditions.


263-265: Validate cleanup operation in AfterIBCAckSuccess.

Deleting the outgoing transfer relation after a successful IBC acknowledgment is critical. Ensure that this operation doesn't inadvertently affect other processes or data dependencies within the module.

Add logging or monitoring to track the deletion and assess its impact, and consider writing tests to verify that related functionalities remain unaffected.

x/crosschain/keeper/abci_test.go (4)

6-6: Importing "strings" package is necessary

The addition of the "strings" package is appropriate since strings.ToUpper is used in the code.


12-12: Importing ibctransfertypes is appropriate

The import of ibctransfertypes is necessary for accessing ibctransfertypes.ModuleName used later in the code.


72-72: Ensure the amount uses the correct denomination units

Confirm that the amount sendToFxClaim.Amount used in sdk.NewCoin(ibcDenom, sendToFxClaim.Amount) is in the smallest unit of the token (typically 1e-18 for tokens with 18 decimals). This ensures accurate token balances and prevents potential discrepancies.


72-72: Verify the correctness of minting tokens to ibctransfertypes.ModuleName

At line 72, tokens are minted to the ibctransfertypes.ModuleName module account. Please verify if this is the intended behavior. Typically, tokens are minted to the crosschain module or sent directly to user accounts. Minting to the IBC transfer module may have unintended effects if not handled properly.

Run the following script to review all instances where MintTokenToModule is used and confirm that the correct module names are being used:

x/ibc/middleware/keeper/keeper.go Show resolved Hide resolved
x/crosschain/precompile/contract.go Show resolved Hide resolved
x/crosschain/types/expected_keepers.go Show resolved Hide resolved
x/ibc/middleware/types/expected_keepers.go Show resolved Hide resolved
x/erc20/keeper/transfer_relation.go Show resolved Hide resolved
x/crosschain/keeper/many_to_one.go Show resolved Hide resolved
x/ibc/middleware/keeper/relay_test.go Show resolved Hide resolved
app/keepers/keepers.go Show resolved Hide resolved
app/keepers/keepers.go Show resolved Hide resolved
x/crosschain/keeper/abci_test.go Show resolved Hide resolved
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.

2 participants