InjectiveLabs / sdk-go

Tools to work with the Injective Chain, Injective EVM and EIP712.
Apache License 2.0
95 stars 41 forks source link

(feat) Added support for IBC Core Channel module queries. Added also … #217

Closed aarmoa closed 6 months ago

aarmoa commented 6 months ago

Solves CHAIN-78

Summary by CodeRabbit

coderabbitai[bot] commented 6 months ago

Walkthrough

The recent updates focus on enhancing the IBC Core Channel module across various Go programs and support files. These changes introduce functions and examples for querying IBC channel details, states, and packet data using the InjectiveLabs SDK and Cosmos SDK, ensuring robust interaction and data retrieval from blockchain networks.

Changes

Files Change Summary
client/chain/chain.go, client/chain/chain_test_support.go Added functions in the IBC Core Channel module for handling channel data and state queries.
examples/chain/ibc/channel/query/1_Channel/..., examples/chain/ibc/channel/query/2_Channels/..., examples/chain/ibc/channel/query/3_ConnectionChannels/..., etc. Introduced a series of Go programs for querying various IBC channel-related information such as channel details, client state, packet commitments, and acknowledgements using the InjectiveLabs SDK.

🐇✨ In the world of code, where the blocks intertwine, A rabbit hopped through, leaving changes so fine. With a twitch of its nose, the channels align, Queries run smooth, in a beautiful design. Celebrate the craft, under the moonshine! 🌕🎉


Recent Review Details **Configuration used: .coderabbit.yaml**
Commits Files that changed from the base of the PR and between ac5aaab0a1dbb8c6d4c3ac628f79d419a97686c1 and 4a698eedf0b089b46e3d7835a2fc156325af98d0.
Files selected for processing (15) * client/chain/chain.go (6 hunks) * client/chain/chain_test_support.go (2 hunks) * examples/chain/ibc/channel/query/10_PacketAcknowledgements/example.go (1 hunks) * examples/chain/ibc/channel/query/11_UnreceivedPackets/example.go (1 hunks) * examples/chain/ibc/channel/query/12_UnreceivedAcks/example.go (1 hunks) * examples/chain/ibc/channel/query/13_NextSequenceReceive/example.go (1 hunks) * examples/chain/ibc/channel/query/1_Channel/example.go (1 hunks) * examples/chain/ibc/channel/query/2_Channels/example.go (1 hunks) * examples/chain/ibc/channel/query/3_ConnectionChannels/example.go (1 hunks) * examples/chain/ibc/channel/query/4_ChannelClientState/example.go (1 hunks) * examples/chain/ibc/channel/query/5_ChannelConsensusState/example.go (1 hunks) * examples/chain/ibc/channel/query/6_PacketCommitment/example.go (1 hunks) * examples/chain/ibc/channel/query/7_PacketCommitments/example.go (1 hunks) * examples/chain/ibc/channel/query/8_PacketReceipt/example.go (1 hunks) * examples/chain/ibc/channel/query/9_PacketAcknowledgement/example.go (1 hunks)
Additional comments not posted (75)
examples/chain/ibc/channel/query/4_ChannelClientState/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. Consider replacing `panic(err)` with a more graceful error handling mechanism, such as logging the error and exiting the program with a non-zero status code. This approach would be more robust in production-like environments. --- `23-31`: Review the security implications of hardcoding sensitive information. It's generally not secure to hardcode sensitive information such as user credentials (`"12345678"`) and private keys (`"5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e"`) directly in the source code. Consider using environment variables or secure vault solutions to manage sensitive data. --- `63-68`: Handle errors gracefully in `FetchIBCChannelClientState`. Instead of just printing the error, consider handling it more robustly by logging the error and potentially retrying the operation or exiting with an error status code. This would improve the resilience of the application. --- `68-68`: Print the result in a more user-friendly format. Consider using `fmt.Printf` with a format string to make the output more readable, especially if `res` contains multiple fields or complex data structures.
examples/chain/ibc/channel/query/1_Channel/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. As previously mentioned, consider replacing `panic(err)` with a more graceful error handling mechanism. This is crucial for maintaining stability and providing clear error messages to users. --- `23-31`: Review the security implications of hardcoding sensitive information. As noted in the previous file, avoid hardcoding sensitive information directly in the source code. Use secure storage mechanisms to enhance the security posture of your application. --- `64-67`: Handle errors gracefully in `FetchIBCChannel`. Similar to the previous file, improve error handling by logging the error and considering additional recovery or notification mechanisms. --- `69-70`: Improve JSON output formatting. To enhance readability, consider adding a header or a label before printing the JSON string, so that users can easily identify the output.
examples/chain/ibc/channel/query/13_NextSequenceReceive/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. Continuing the theme from previous files, replace `panic(err)` with more robust error handling practices. This will improve the application's stability and error reporting. --- `23-31`: Review the security implications of hardcoding sensitive information. Again, avoid hardcoding sensitive data such as passwords and private keys. Utilize secure storage solutions to protect this information. --- `64-67`: Handle errors gracefully in `FetchIBCNextSequenceReceive`. Enhance error handling by logging the error and considering mechanisms for retrying the operation or notifying the user, which would be particularly useful in network-related errors. --- `69-70`: Improve JSON output formatting. To make the output more user-friendly, consider adding explanatory text or labels before printing the JSON string.
examples/chain/ibc/channel/query/5_ChannelConsensusState/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. As with the other files, replace `panic(err)` with a more structured error handling approach. This will enhance the robustness and user experience of the application. --- `23-31`: Review the security implications of hardcoding sensitive information. Consistently with previous files, avoid hardcoding sensitive data. Implement secure mechanisms for managing sensitive information to safeguard user data. --- `65-68`: Handle errors gracefully in `FetchIBCChannelConsensusState`. Improve error handling by logging the error and considering additional recovery or notification mechanisms. This is crucial for operations that might fail due to external dependencies. --- `70-70`: Print the result in a more user-friendly format. Use `fmt.Printf` with a format string to enhance the readability of the output, especially if `res` contains complex data structures.
examples/chain/ibc/channel/query/8_PacketReceipt/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. Continue to replace `panic(err)` with more robust error handling practices. This will improve the application's stability and error reporting. --- `23-31`: Review the security implications of hardcoding sensitive information. As noted in previous files, avoid hardcoding sensitive information directly in the source code. Use secure storage mechanisms to enhance the security posture of your application. --- `65-67`: Handle errors gracefully in `FetchIBCPacketReceipt`. Improve error handling by logging the error and considering additional recovery or notification mechanisms. This would enhance the resilience of the application. --- `70-71`: Improve JSON output formatting. To enhance readability, consider adding a header or a label before printing the JSON string, so that users can easily identify the output.
examples/chain/ibc/channel/query/6_PacketCommitment/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. As with the other files, replace `panic(err)` with a more structured error handling approach. This will enhance the robustness and user experience of the application. --- `23-31`: Review the security implications of hardcoding sensitive information. Consistently with previous files, avoid hardcoding sensitive data. Implement secure mechanisms for managing sensitive information to safeguard user data. --- `65-68`: Handle errors gracefully in `FetchIBCPacketCommitment`. Improve error handling by logging the error and considering additional recovery or notification mechanisms. This is crucial for operations that might fail due to external dependencies. --- `70-71`: Improve JSON output formatting. Use `fmt.Printf` with a format string to enhance the readability of the output, especially if `res` contains complex data structures.
examples/chain/ibc/channel/query/2_Channels/example.go (4)
`20-23`: Ensure proper error handling instead of using `panic`. Continue to replace `panic(err)` with more robust error handling practices. This will improve the application's stability and error reporting. --- `26-33`: Review the security implications of hardcoding sensitive information. As noted in previous files, avoid hardcoding sensitive information directly in the source code. Use secure storage mechanisms to enhance the security posture of your application. --- `65-68`: Handle errors gracefully in `FetchIBCChannels`. Improve error handling by logging the error and considering additional recovery or notification mechanisms. This would enhance the resilience of the application. --- `70-71`: Improve JSON output formatting. To enhance readability, consider adding a header or a label before printing the JSON string, so that users can easily identify the output.
examples/chain/ibc/channel/query/12_UnreceivedAcks/example.go (4)
`18-21`: Ensure proper error handling instead of using `panic`. Continue to replace `panic(err)` with more robust error handling practices. This will improve the application's stability and error reporting. --- `24-31`: Review the security implications of hardcoding sensitive information. As noted in previous files, avoid hardcoding sensitive information directly in the source code. Use secure storage mechanisms to enhance the security posture of your application. --- `65-67`: Handle errors gracefully in `FetchIBCUnreceivedAcks`. Improve error handling by logging the error and considering additional recovery or notification mechanisms. This would enhance the resilience of the application. --- `70-71`: Improve JSON output formatting. To enhance readability, consider adding a header or a label before printing the JSON string, so that users can easily identify the output.
examples/chain/ibc/channel/query/9_PacketAcknowledgement/example.go (6)
`20-22`: Consider handling the error without panicking to improve the robustness of the example script. Instead of using `panic`, you might want to log the error and gracefully exit. This approach is generally more robust and user-friendly, especially in production environments or larger applications. --- `34-36`: Similar to the previous comment, consider handling errors more gracefully instead of using `panic`. Using structured error handling can help in debugging and maintaining the code by providing clearer error messages and potentially handling different error conditions differently. --- `44-46`: Again, avoid using `panic` for error handling in production code. Consider implementing a more robust error handling strategy that could involve logging the error or even retrying the operation a certain number of times before failing. --- `56-58`: The use of `panic` for error handling should be avoided. It's advisable to handle errors gracefully. This could include logging the error at a minimum or using more sophisticated error handling strategies depending on the context. --- `66-68`: Ensure proper error handling in the `FetchIBCPacketAcknowledgement` function call. Instead of just printing the error, consider what should happen next. Should the function return? Should there be a retry mechanism? This decision will depend on the expected stability and criticality of the network connection. --- `70-71`: Good use of JSON marshalling to format the output. This is a good practice for making the output more readable and is especially useful in demonstration or debugging scripts.
examples/chain/ibc/channel/query/11_UnreceivedPackets/example.go (6)
`20-22`: Consider handling the error without resorting to `panic` for a more robust example script. Using `panic` can be replaced with more graceful error handling techniques such as logging the error and terminating the program with a non-zero status code. --- `34-36`: Avoid using `panic` for error handling; consider alternatives that allow for cleaner error management. Structured error handling can aid in maintaining and debugging the code by providing clear error messages and potentially handling different error conditions differently. --- `44-46`: Replace `panic` with a more graceful error handling approach. Consider implementing a robust error handling strategy that could involve logging the error or even retrying the operation a certain number of times before failing. --- `56-58`: The use of `panic` for error handling should be avoided. Handling errors more gracefully is recommended. This could include logging the error at a minimum or using more sophisticated error handling strategies depending on the context. --- `65-67`: Ensure proper error handling in the `FetchIBCUnreceivedPackets` function call. Instead of just printing the error, consider what should happen next. Should the function return? Should there be a retry mechanism? This decision will depend on the expected stability and criticality of the network connection. --- `70-71`: Good practice of using JSON marshalling to format the output. This enhances readability and is particularly useful in demonstration or debugging scripts.
examples/chain/ibc/channel/query/3_ConnectionChannels/example.go (6)
`21-23`: Consider handling the error without resorting to `panic` for a more robust example script. Using `panic` can be replaced with more graceful error handling techniques such as logging the error and terminating the program with a non-zero status code. --- `36-38`: Avoid using `panic` for error handling; consider alternatives that allow for cleaner error management. Structured error handling can aid in maintaining and debugging the code by providing clear error messages and potentially handling different error conditions differently. --- `46-48`: Replace `panic` with a more graceful error handling approach. Consider implementing a robust error handling strategy that could involve logging the error or even retrying the operation a certain number of times before failing. --- `58-60`: The use of `panic` for error handling should be avoided. Handling errors more gracefully is recommended. This could include logging the error at a minimum or using more sophisticated error handling strategies depending on the context. --- `66-68`: Ensure proper error handling in the `FetchIBCConnectionChannels` function call. Instead of just printing the error, consider what should happen next. Should the function return? Should there be a retry mechanism? This decision will depend on the expected stability and criticality of the network connection. --- `71-72`: Good practice of using JSON marshalling to format the output. This enhances readability and is particularly useful in demonstration or debugging scripts.
examples/chain/ibc/channel/query/7_PacketCommitments/example.go (6)
`21-23`: Consider handling the error without resorting to `panic` for a more robust example script. Using `panic` can be replaced with more graceful error handling techniques such as logging the error and terminating the program with a non-zero status code. --- `36-38`: Avoid using `panic` for error handling; consider alternatives that allow for cleaner error management. Structured error handling can aid in maintaining and debugging the code by providing clear error messages and potentially handling different error conditions differently. --- `46-48`: Replace `panic` with a more graceful error handling approach. Consider implementing a robust error handling strategy that could involve logging the error or even retrying the operation a certain number of times before failing. --- `58-60`: The use of `panic` for error handling should be avoided. Handling errors more gracefully is recommended. This could include logging the error at a minimum or using more sophisticated error handling strategies depending on the context. --- `67-69`: Ensure proper error handling in the `FetchIBCPacketCommitments` function call. Instead of just printing the error, consider what should happen next. Should the function return? Should there be a retry mechanism? This decision will depend on the expected stability and criticality of the network connection. --- `72-73`: Good practice of using JSON marshalling to format the output. This enhances readability and is particularly useful in demonstration or debugging scripts.
examples/chain/ibc/channel/query/10_PacketAcknowledgements/example.go (6)
`21-23`: Consider handling the error without resorting to `panic` for a more robust example script. Using `panic` can be replaced with more graceful error handling techniques such as logging the error and terminating the program with a non-zero status code. --- `36-38`: Avoid using `panic` for error handling; consider alternatives that allow for cleaner error management. Structured error handling can aid in maintaining and debugging the code by providing clear error messages and potentially handling different error conditions differently. --- `46-48`: Replace `panic` with a more graceful error handling approach. Consider implementing a robust error handling strategy that could involve logging the error or even retrying the operation a certain number of times before failing. --- `58-60`: The use of `panic` for error handling should be avoided. Handling errors more gracefully is recommended. This could include logging the error at a minimum or using more sophisticated error handling strategies depending on the context. --- `68-70`: Ensure proper error handling in the `FetchIBCPacketAcknowledgements` function call. Instead of just printing the error, consider what should happen next. Should the function return? Should there be a retry mechanism? This decision will depend on the expected stability and criticality of the network connection. --- `73-74`: Good practice of using JSON marshalling to format the output. This enhances readability and is particularly useful in demonstration or debugging scripts.
client/chain/chain_test_support.go (1)
`608-658`: The mock functions for the IBC Core Channel module have been implemented correctly. These functions are crucial for unit testing the new functionalities related to the IBC Core Channel module. They return empty responses, which is typical for initial mock implementations. Consider adding functionality to simulate different scenarios for more comprehensive testing.
client/chain/chain.go (12)
`2335-2343`: LGTM! The function `FetchIBCChannel` correctly implements the query for specific IBC channel data. --- `2345-2352`: LGTM! The function `FetchIBCChannels` correctly implements the query for a list of IBC channels with pagination support. --- `2354-2362`: LGTM! The function `FetchIBCConnectionChannels` correctly implements the query for IBC channels associated with a specific connection, with pagination. --- `2364-2372`: LGTM! The function `FetchIBCChannelClientState` correctly implements the query for the client state of a specific IBC channel. --- `2374-2384`: LGTM! The function `FetchIBCChannelConsensusState` correctly implements the query for the consensus state of a specific IBC channel, including revision details. --- `2386-2395`: LGTM! The function `FetchIBCPacketCommitment` correctly implements the query for a specific packet commitment in an IBC channel using a sequence number. --- `2397-2406`: LGTM! The function `FetchIBCPacketCommitments` correctly implements the query for all packet commitments in an IBC channel with pagination support. --- `2408-2417`: LGTM! The function `FetchIBCPacketReceipt` correctly implements the query for a specific packet receipt in an IBC channel using a sequence number. --- `2419-2428`: LGTM! The function `FetchIBCPacketAcknowledgement` correctly implements the query for a specific packet acknowledgement in an IBC channel using a sequence number. --- `2430-2440`: LGTM! The function `FetchIBCPacketAcknowledgements` correctly implements the query for all packet acknowledgements in an IBC channel with pagination support. --- `2442-2451`: LGTM! The function `FetchIBCUnreceivedPackets` correctly implements the query for unreceived packets in an IBC channel using a list of packet commitment sequences. --- `2453-2462`: LGTM! The function `FetchIBCUnreceivedAcks` correctly implements the query for unreceived acknowledgements in an IBC channel using a list of packet acknowledgement sequences.
---
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.