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

docs: bring back user docs in main repo #22201

Merged
merged 2 commits into from
Oct 10, 2024
Merged

docs: bring back user docs in main repo #22201

merged 2 commits into from
Oct 10, 2024

Conversation

julienrbrt
Copy link
Member

@julienrbrt julienrbrt commented Oct 9, 2024

Description

Brings back user docs on this repo (currently only https://github.com/cosmos/cosmos-sdk-docs/tree/main/docs/user)
The other repo should only be for building; otherwise it makes the scrips and the flows really weird.
Additionally, when we'll do v2, it will way easier to keep track of this.


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.

I have...

  • included the correct type prefix in the PR title, you can find examples of the prefixes below:
  • confirmed ! in the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • reviewed "Files changed" and left comments if necessary
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • updated the relevant documentation or specification, including comments for documenting Go code
  • confirmed all CI checks have passed

Reviewers Checklist

All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.

Please see Pull Request Reviewer section in the contributing guide for more information on how to review a pull request.

I have...

  • confirmed the correct type prefix in the PR title
  • confirmed all author checklist items have been addressed
  • reviewed state machine logic, API design and naming, documentation is accurate, tests and test coverage

Summary by CodeRabbit

Release Notes

  • New Features

    • Added comprehensive documentation for running and interacting with blockchain nodes, including guides on keyring configuration, transaction management, and multisignature transactions.
    • Introduced a user guide for developers utilizing the Cosmos SDK, outlining essential setup and operational processes.
  • Chores

    • Updated scripts to manage documentation files, including the addition and removal of specific markdown files.

@julienrbrt julienrbrt added the backport/v0.52.x PR scheduled for inclusion in the v0.52's next stable release label Oct 9, 2024
@julienrbrt julienrbrt requested a review from a team as a code owner October 9, 2024 20:49
Copy link
Contributor

coderabbitai bot commented Oct 9, 2024

📝 Walkthrough

Walkthrough

The pull request introduces several modifications to documentation and scripts within the Cosmos SDK repository. The docs/post.sh script has been updated to remove a specific markdown file, while docs/pre.sh has been enhanced to download Rosetta-related documentation. Additionally, multiple new markdown files have been added to the docs/user/run-node/ directory, providing detailed guides on various aspects of running and interacting with blockchain nodes, including keyring management, transaction handling, and multisig transactions.

Changes

File Path Change Summary
docs/post.sh Added command to remove user/run-node/04-rosetta.md.
docs/pre.sh Added command to download Rosetta README as 04-rosetta.md.
docs/user/run-node/00-keyring.md New document providing guidance on keyring configuration and usage.
docs/user/run-node/01-run-node.md New document detailing how to run a blockchain node with simd.
docs/user/run-node/02-interact-node.md New document on interacting with a blockchain node via CLI, gRPC, and REST.
docs/user/run-node/03-txs.md New document on generating, signing, and broadcasting transactions.
docs/user/run-node/04-rosetta.md New document on integrating and using the Rosetta API with Cosmos SDK.
docs/user/run-node/05-run-testnet.md New document for running a simulated test network using simd.
docs/user/run-node/06-run-production.md New document for securely running a node in a production environment.
docs/user/run-node/07-multisig-guide.md New document on executing multisignature transactions.
docs/user/run-node/08-onchain-multisig.md New document on on-chain multisig transactions and governance.
docs/user/run-node/_category_.json New entry categorizing documentation related to running a Node, API, and CLI.
docs/user/user.md New user guide for developers using the Cosmos SDK.

Possibly related issues

  • v0.52 Documentation #21429: The documentation updates in this PR align with the objectives of ensuring that the documentation is consistent and up-to-date with the latest version of the Cosmos SDK.

Possibly related PRs

  • docs: fix pre.sh #22194: This PR is related as it also involves changes to docs/post.sh, specifically the removal of a markdown file.

Suggested labels

C:x/feegrant

Suggested reviewers

  • tac0turtle
  • akhilkumarpilli

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.

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
Contributor

@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: 4

🧹 Outside diff range and nitpick comments (48)
docs/user/user.md (1)

8-10: LGTM with a minor suggestion for consistency.

The main content is well-structured, providing clear descriptions and links for each guide. However, there's a small inconsistency in the formatting of the last bullet point.

Consider applying this change for consistency:

- *   [CLI](./run-node/02-interact-node.md) - Discover how to navigate and interact with the Cosmos SDK using the Command Line Interface (CLI). This section covers efficient and powerful command-based operations that can help you manage your application effectively.
+ *   [CLI](./run-node/02-interact-node.md) - Discover how to navigate and interact with the Cosmos SDK using the Command Line Interface (CLI). This guide covers efficient and powerful command-based operations that can help you manage your application effectively.
docs/pre.sh (1)

39-41: Approve the addition with a suggestion for error handling

The addition of the Rosetta documentation download is a good step towards consolidating user documentation in the main repository. However, it's advisable to add error handling for the wget command to ensure the script doesn't silently fail if the download encounters issues.

Consider refactoring the wget command to include error handling:

 ## Update user docs with rosetta
-wget -O "./user/run-node/04-rosetta.md" "https://raw.githubusercontent.com/cosmos/rosetta/main/README.md"
+if ! wget -O "./user/run-node/04-rosetta.md" "https://raw.githubusercontent.com/cosmos/rosetta/main/README.md"; then
+    echo "Error: Failed to download Rosetta documentation" >&2
+    exit 1
+fi

This change will cause the script to exit with an error message if the download fails, making it easier to diagnose issues during the documentation build process.

docs/user/run-node/05-run-testnet.md (4)

13-41: Minor improvements for clarity and correctness

The "Initialize Files" section provides a clear explanation of the init-files subcommand. However, there are a few minor issues to address:

  1. Consider adding a comma after "but in this case" in line 17 for better readability.
  2. In line 19, consider replacing "i.e." with "e.g." as it's providing an example rather than a definition.
  3. There's a typo in line 37: "initilization" should be "initialization".

Here's a suggested diff for these changes:

-This is similar to the `init` command when initializing a single node, but in this case we are initializing multiple nodes, generating the genesis transactions for each node, and then collecting those transactions.
+This is similar to the `init` command when initializing a single node, but in this case, we are initializing multiple nodes, generating the genesis transactions for each node, and then collecting those transactions.

-The `init-files` subcommand initializes the necessary files to run a test network in a separate process (i.e. using a Docker container). Running this command is not a prerequisite for the `start` subcommand ([see below](#start-testnet)).
+The `init-files` subcommand initializes the necessary files to run a test network in a separate process (e.g., using a Docker container). Running this command is not a prerequisite for the `start` subcommand ([see below](#start-testnet)).

-The genesis transactions are added to the `genesis.json` file within each node directory during the initilization process.
+The genesis transactions are added to the `genesis.json` file within each node directory during the initialization process.
🧰 Tools
🪛 LanguageTool

[formatting] ~17-~17: Consider inserting a comma after an introductory phrase for better readability.
Context: ...nd when initializing a single node, but in this case we are initializing multiple nodes, gen...

(IN_THAT_CASE_COMMA)


[style] ~20-~20: Consider a shorter alternative to avoid wordiness.
Context: ...command (see below). In order to initialize the files for a test network...

(IN_ORDER_TO_PREMIUM)


77-97: Suggestions for improved clarity

This section provides useful instructions for interacting with the testnet. To enhance user understanding:

  1. Consider replacing [address] in line 94 with a more explicit instruction, such as <account-address> or explain how to obtain the address.
  2. It might be helpful to briefly explain the purpose of the --keyring-backend test flag in line 88.

Here's a suggested improvement for line 94:

-simd q bank balances [address]
+simd q bank balances <account-address>  # Replace <account-address> with the address obtained from the previous command

Consider adding a brief explanation of the --keyring-backend test flag after line 88, such as:
"The --keyring-backend test flag uses a test keyring backend, which is suitable for testing purposes but should not be used in production."

🧰 Tools
🪛 LanguageTool

[uncategorized] ~77-~77: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...or testing purposes. The validator node is using the same default addresses being used w...

(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)


99-101: Minor stylistic suggestion

The "Testnet Options" section provides useful information about customizing the testnet configuration. For improved conciseness, consider revising the last sentence:

-In order to see all flag options, append the `--help` flag to each command.
+To see all flag options, append the `--help` flag to each command.
🧰 Tools
🪛 LanguageTool

[style] ~101-~101: Consider a shorter alternative to avoid wordiness.
Context: ...uration of the test network with flags. In order to see all flag options, append the `--hel...

(IN_ORDER_TO_PREMIUM)


101-101: Suggestions for additional content

The document provides a comprehensive guide for running a testnet. To further enhance its usefulness, consider:

  1. Adding a brief conclusion or summary section to recap the main points covered in the document.
  2. Including a section on troubleshooting common issues that users might encounter when setting up or running a testnet.

These additions could help reinforce key concepts and provide additional support for users.

Would you like assistance in drafting content for these suggested sections?

🧰 Tools
🪛 LanguageTool

[style] ~101-~101: Consider a shorter alternative to avoid wordiness.
Context: ...uration of the test network with flags. In order to see all flag options, append the `--hel...

(IN_ORDER_TO_PREMIUM)

docs/user/run-node/07-multisig-guide.md (3)

1-22: Approve overview with minor suggestion

The overview section provides a clear and informative explanation of multisig accounts and their use cases. The content is well-structured and easy to understand.

Consider this minor grammar improvement for increased conciseness:

-Whatever machine is generating the multisig, it should at least have all of the public keys imported into the same keyring.
+Whatever machine is generating the multisig, it should at least have all public keys imported into the same keyring.
🧰 Tools
🪛 LanguageTool

[style] ~15-~15: Consider removing “of” to be more concise
Context: ...g the multisig, it should at least have all of the public keys imported into the same keyr...

(ALL_OF_THE)


23-29: Improve readability with style and grammar adjustments

Consider the following improvements to enhance the clarity and flow of the introduction:

  1. Hyphenate the section title for better readability:
-## Step by step guide to multisig transactions
+## Step-by-step guide to multisig transactions
  1. Add commas to improve sentence structure:
-This tutorial will use the test keyring which will store the keys in the default home directory `~/.simapp` unless otherwise specified.
+This tutorial will use the test keyring, which will store the keys in the default home directory `~/.simapp` unless otherwise specified.

-Prior to this tutorial set the keyring backend to "test" in `~/.simapp/client.toml` to always the test keyring which will specify a consistent keyring for the entirety of the tutorial.
+Prior to this tutorial, set the keyring backend to "test" in `~/.simapp/client.toml` to always use the test keyring, which will specify a consistent keyring for the entirety of the tutorial.
  1. Replace "Prior to" with a simpler alternative:
-Prior to this tutorial set the keyring backend to "test" in `~/.simapp/client.toml` to always the test keyring which will specify a consistent keyring for the entirety of the tutorial.
+Before starting this tutorial, set the keyring backend to "test" in `~/.simapp/client.toml` to always use the test keyring, which will specify a consistent keyring for the entirety of the tutorial.
🧰 Tools
🪛 LanguageTool

[grammar] ~23-~23: Did you mean the adjective or adverb “Step-by-step” (spelled with hyphens)?
Context: ...multisig key before it is executed. ## Step by step guide to multisig transactions This tu...

(STEP_BY_STEP_HYPHEN)


[uncategorized] ~25-~25: Possible missing comma found.
Context: ...ctions This tutorial will use the test keyring which will store the keys in the defaul...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~27-~27: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...g by running --keyring-backend test. Prior to this tutorial set the keyring backend t...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~28-28: Possible missing comma found.
Context: ...--keyring-backend test. Prior to this tutorial set the keyring backend to "test" in
...

(AI_HYDRA_LEO_MISSING_COMMA)


30-46: Approve key creation section with minor suggestion

The instructions for listing and creating keys are clear and provide the necessary commands. The alternative method for importing public keys is a useful addition.

Consider adding a comma to improve readability:

-If you don't already have accounts listed create the accounts using the below.
+If you don't already have accounts listed, create the accounts using the below.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~34-~34: Possible missing comma found.
Context: ...``` If you don't already have accounts listed create the accounts using the below. `...

(AI_HYDRA_LEO_MISSING_COMMA)


[typographical] ~41-~41: Consider adding a comma after ‘Alternatively’ for more clarity.
Context: ...ys add bob simd keys add recipient ``` Alternatively the public keys comprising the multisig...

(RB_LY_COMMA)

docs/user/run-node/04-rosetta.md (7)

1-52: Improve clarity and consistency in the introduction and installation sections.

The introduction and installation sections provide valuable information, but there are a few areas that could be improved:

  1. Inconsistent use of "standalone" vs "stand-alone" (lines 9, 11, 13, 15). Stick to one variant for consistency.
  2. Line 9: Consider rephrasing for clarity. Suggestion: "Rosetta can be added to any Cosmos chain node, either as a standalone service or natively integrated."
  3. Line 77: "were" should be "where" in "there may be cases where this approach is not enough."
  4. Consider adding a brief explanation of what Rosetta API does and its benefits in the introduction.

To improve the formatting and readability of the installation instructions, consider using numbered lists for the steps. For example:

### Native - As a node command

To enable Native Rosetta API support:

1. Add the `RosettaCommand` to your application's root command file (e.g. `simd/cmd/root.go`).
2. Import the `rosettaCmd` package:
   ```go
   import "github.com/cosmos/rosetta/cmd"
  1. Find the following line:
    initRootCmd(rootCmd, encodingConfig)
  2. After that line, add the following:
    rootCmd.AddCommand(
      rosettaCmd.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Codec)
    )

This structure makes the steps clearer and easier to follow.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary><blockquote>

[uncategorized] ~9-~9: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ... can be added to any cosmos chain node. standalone or natively.  ### Standalone   Rosetta ...

(EN_WORD_COHERENCY)

---

[uncategorized] ~11-~11: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ...hain node. standalone or natively.  ### Standalone   Rosetta can be executed as a standalo...

(EN_WORD_COHERENCY)

---

[uncategorized] ~13-~13: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ...andalone   Rosetta can be executed as a standalone service, it connects to the node endpoi...

(EN_WORD_COHERENCY)

---

[uncategorized] ~15-~15: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ...he required endpoints.  Install Rosetta standalone server with the following command:  ```...

(EN_WORD_COHERENCY)

</blockquote></details>

</details>

---

`53-73`: **Enhance the "Use Rosetta Command" section for better readability.**

The "Use Rosetta Command" section provides useful information, but its presentation can be improved:

1. Consider using a code block for the command options instead of inline code. This will improve readability.
2. Add brief explanations for each command option to provide context.


Here's a suggested revision:

```markdown
## Use Rosetta Command

To run Rosetta in your application CLI, use the following command:

> **Note:** If using the native approach, add your node name before any Rosetta command.

```shell
rosetta --help

To test and run Rosetta API endpoints for applications that are running and exposed, use the following command:

rosetta \
  --blockchain "your application name (e.g., gaia)" \
  --network "your chain identifier (e.g., testnet-1)" \
  --tendermint "tendermint endpoint (e.g., localhost:26657)" \
  --grpc "gRPC endpoint (e.g., localhost:9090)" \
  --addr "rosetta binding address (e.g., :8080)" \
  --grpc-types-server "gRPC endpoint for message descriptor types (optional)"
  • --blockchain: Specifies the name of your application.
  • --network: Identifies the specific chain you're connecting to.
  • --tendermint: The endpoint for the Tendermint RPC.
  • --grpc: The gRPC endpoint for your application.
  • --addr: The address where the Rosetta API will be exposed.
  • --grpc-types-server: (Optional) Endpoint for retrieving message descriptor types.

This format improves readability and provides more context for each option.

---

`75-90`: **Improve clarity and structure in the "Plugins - Multi chain connections" section.**

This section provides important information about extending Rosetta functionality, but it can be improved:

1. Line 77: Fix the typo "trough" to "through".
2. Lines 79, 81, 83: Use consistent hyphenation for compound adjectives: "zone-specific" instead of "zone specific".
3. Line 81: Fix the typo in "cosmos-hun" to "cosmos-hub".
4. Provide more detailed steps for creating a plugin.


Consider restructuring the section as follows:

```markdown
## Plugins - Multi-chain Connections

Rosetta attempts to reflect node types through reflection over the node gRPC endpoints. However, in some cases, this approach may not be sufficient. It's possible to extend or implement the required types easily through plugins.

To use Rosetta with any chain, you need to set up prefixes and register zone-specific interfaces through plugins.

Each plugin is a minimalist implementation of two methods:

1. `InitZone`: An empty method executed first that defines prefixes, parameters, and other settings.
2. `RegisterInterfaces`: This method receives an interface registry where the zone-specific types and interfaces will be loaded.

An example for the Cosmos Hub chain can be found in the `plugins/cosmos-hub/` folder.

### Creating a New Plugin

To add a new plugin:

1. Create a folder in the `plugins` directory with the name of the desired zone.
2. Add a `main.go` file with the `InitZone` and `RegisterInterfaces` methods.
3. Build the plugin binary:
   ```shell
   go build -buildmode=plugin -o main.so main.go
  1. Use the --plugin flag when running the Rosetta server to specify the plugin folder.

The plugin will be loaded into the Rosetta server at runtime.


This structure provides clearer instructions and improves the overall readability of the section.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary><blockquote>

[misspelling] ~77-~77: Did you mean “where”?
Context: ...node gRPC endpoints, there may be cases were this approach is not enough. It is poss...

(WERE_WHERE)

---

[uncategorized] ~79-~79: When ‘zone-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...ired to set up prefixes and registering zone specific interfaces through plugins.  Each plugi...

(SPECIFIC_HYPHEN)

---

[uncategorized] ~81-~81: When ‘chain-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...nterfaces` which allow Rosetta to parse chain specific data. There is an example for cosmos-hu...

(SPECIFIC_HYPHEN)

---

[uncategorized] ~83-~83: When ‘zone-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...an interface registry which is were the zone specific types and interfaces will be loaded  In...

(SPECIFIC_HYPHEN)

---

[style] ~84-~84: Consider a shorter alternative to avoid wordiness.
Context: ...ic types and interfaces will be loaded  In order to add a new plugin:  1. Create a folder o...

(IN_ORDER_TO_PREMIUM)

</blockquote></details>
<details>
<summary>🪛 Markdownlint</summary><blockquote>

82-82: Expected: asterisk; Actual: dash
Unordered list style

(MD004, ul-style)

---

83-83: Expected: asterisk; Actual: dash
Unordered list style

(MD004, ul-style)

---

82-82: null
Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

---

86-86: null
Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

</blockquote></details>

</details>

---

`92-95`: **Enhance the "Extensions" section introduction.**

The introduction to the Extensions section is concise, but it could benefit from additional context:


Consider expanding the introduction as follows:

```markdown
## Extensions

Rosetta's functionality can be customized and extended to better suit your specific blockchain implementation. There are two primary ways to achieve this customization:

1. Message extension: Adapting your `sdk.Msg` types to be compatible with Rosetta.
2. Client interface override: Providing custom implementations for specific Rosetta operations.

These extension methods allow you to tailor Rosetta's behavior to your blockchain's unique features and requirements. The following sections detail how to implement each type of extension.

This expanded introduction provides more context and sets clear expectations for the subsections that follow.


96-98: Expand the "Message extension" subsection with more details and an example.

While this subsection provides a basic explanation of message extension, it could be more helpful with additional details and a code example:

Consider expanding the subsection as follows:

### Message Extension

To make an `sdk.Msg` compatible with Rosetta, you need to implement the `rosetta.Msg` interface for your message types. This interface allows Rosetta to understand and process your custom messages.

Here's a basic example of how to implement the `rosetta.Msg` interface:

```go
import (
    "github.com/cosmos/cosmos-sdk/types"
    "github.com/cosmos/rosetta/types"
)

func (msg YourCustomMsg) ToOperations() []*types.Operation {
    // Implement the conversion of your message to Rosetta operations
    // ...
}

func (msg YourCustomMsg) FromOperations(ops []*types.Operation) (types.Msg, error) {
    // Implement the conversion from Rosetta operations to your message
    // ...
}

For more complex examples, refer to the implementations in the staking types (e.g., MsgDelegate) or bank types (e.g., MsgSend) in the Cosmos SDK.


This expanded explanation provides more context and a concrete example, making it easier for developers to understand and implement message extensions.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary><blockquote>

[style] ~97-~97: Consider a shorter alternative to avoid wordiness.
Context: ...ustom settings.  ### Message extension  In order to make an `sdk.Msg` understandable by ros...

(IN_ORDER_TO_PREMIUM)

</blockquote></details>

</details>

---

`100-128`: **Clarify the "Client interface override" subsection and its limitations.**

The "Client interface override" subsection provides a good explanation and example, but there are a few points that could be improved:

1. The purpose and benefits of overriding the client interface could be more clearly stated.
2. The note about command limitations (lines 128-129) is important but could be more prominent and detailed.


Consider restructuring the subsection as follows:

```markdown
### Client Interface Override

For more advanced customization, you can embed the standard Rosetta Client type and override specific methods. This approach allows you to customize the behavior of certain Rosetta operations while maintaining compatibility with the rest of the implementation.

Here's an example of how to create a custom client:

```go
package custom_client

import (
    "context"
    "github.com/coinbase/rosetta-sdk-go/types"
    "github.com/cosmos/rosetta/lib"
)

// CustomClient embeds the standard cosmos client
// This means it implements the cosmos-rosetta-gateway Client
// interface while allowing customization of certain methods
type CustomClient struct {
    *rosetta.Client
}

func (c *CustomClient) ConstructionPayload(_ context.Context, request *types.ConstructionPayloadsRequest) (*types.ConstructionPayloadsResponse, error) {
    // Provide custom signature bytes
    // Implement your custom logic here
    panic("implement me")
}

Important Note: When using a customized client, the standard Rosetta command cannot be used as-is. The constructors required for a custom client may differ from the standard implementation. You will need to create a new command or modify the existing one to work with your custom client. We plan to provide a way to initialize a customized client without writing extra code in future releases.


This restructured version provides a clearer explanation of the purpose of client interface overrides and makes the limitation note more prominent and detailed.

---

`130-144`: **Enhance clarity and emphasis in the "Error extension" subsection.**

The "Error extension" subsection provides valuable information, but it can be improved in several ways:

1. Line 132: The sentence structure is awkward. Consider rephrasing: "Since Rosetta requires providing 'returned' errors to network options, we use the `errors` package in cosmos-rosetta-gateway to declare new Rosetta errors."
2. The note about error registration timing (lines 143-144) is crucial and should be more prominent.
3. Add a brief explanation of why custom errors might be needed.


Here's a suggested revision:

```markdown
### Error Extension

Rosetta requires providing custom errors as part of the network options. To declare new Rosetta errors, we use the `errors` package in cosmos-rosetta-gateway. This allows you to define specific error types for your blockchain implementation, improving error handling and debugging.

Here's an example of how to declare a custom Rosetta error:

```go
package custom_errors

import crgerrs "github.com/cosmos/rosetta/lib/errors"

var customErrRetriable = true
var CustomError = crgerrs.RegisterError(100, "custom message", customErrRetriable, "description")

In this example:

  • 100 is the error code
  • "custom message" is the error message
  • customErrRetriable indicates whether the error is retriable
  • "description" provides additional context for the error

Important: Custom errors must be registered before the cosmos-rosetta-gateway Server.Start method is called. Otherwise, the registration will be ignored. Additionally, errors with the same code will be ignored to prevent conflicts.


This revised version provides more context, improves the explanation, and emphasizes the important note about error registration timing.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary><blockquote>

[grammar] ~132-~132: Did you mean “providing”? Or maybe you should add a pronoun? In active voice, ‘require’ + ‘to’ takes an object, usually a pronoun.
Context: ...Error extension  Since rosetta requires to provide 'returned' errors to network options. I...

(ALLOW_TO)

---

[style] ~132-~132: Consider a shorter alternative to avoid wordiness.
Context: ...e 'returned' errors to network options. In order to declare a new rosetta error, we use the...

(IN_ORDER_TO_PREMIUM)

---

[uncategorized] ~144-~144: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Context: ...ay's `Server`.`Start` method is called. Otherwise the registration will be ignored. Error...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)

</blockquote></details>

</details>

</blockquote></details>
<details>
<summary>docs/user/run-node/00-keyring.md (4)</summary><blockquote>

`11-18`: **Clear introduction with minor grammatical suggestion**

The introduction effectively explains the purpose of the keyring and introduces the concept of different storage backends. However, there's a minor grammatical issue that could be improved.



Consider revising line 16 for better readability:

```diff
-that provides a set of commands to manage cryptographic keys in a secure fashion. The
+that provides a set of commands to manage cryptographic keys securely. The
🧰 Tools
🪛 LanguageTool

[style] ~16-~16: Consider replacing this phrase with the adverb “securely” to avoid wordiness.
Context: ...f commands to manage cryptographic keys in a secure fashion. The new keyring supports multiple stor...

(IN_A_X_MANNER)


20-43: Comprehensive explanation of 'os' backend with minor punctuation suggestion

The 'os' backend section provides a detailed explanation and valuable information for users across different operating systems. The recommendation for headless environments is particularly helpful.

Consider adding a comma in line 39 for better readability:

-`os` is the default option since operating system's default credentials managers are
+`os` is the default option, since operating system's default credentials managers are
🧰 Tools
🪛 LanguageTool

[typographical] ~36-~36: Consider isolating this adverbial phrase with commas.
Context: ...DE_Wallet_Manager). Whilst the former is in fact a libsecret convenient frontend, the ...

(IN_FACT_COMMA_2)


[uncategorized] ~39-~39: Possible missing comma found.
Context: ... kwallet client. os is the default option since operating system's default creden...

(AI_HYDRA_LEO_MISSING_COMMA)


89-107: Clear explanations of 'kwallet', 'test', and 'memory' backends with suggestion

The sections provide concise explanations of the 'kwallet', 'test', and 'memory' backends. The warnings for 'test' and 'memory' backends appropriately highlight their limitations.

Consider adding a brief mention of KWallet's security features in the 'kwallet' section to provide users with more context about its suitability for key storage.


109-111: Clear explanation of environment variable usage with minor punctuation suggestion

The section effectively explains how to set the keyring backend using an environment variable, providing users with a useful alternative method.

Consider adding a comma in line 111 for better readability:

-You can set the keyring-backend using env variable: `BINNAME_KEYRING_BACKEND`. For example, if your binary name is `gaia-v5` then set: `export GAIA_V5_KEYRING_BACKEND=pass`
+You can set the keyring-backend using env variable: `BINNAME_KEYRING_BACKEND`. For example, if your binary name is `gaia-v5`, then set: `export GAIA_V5_KEYRING_BACKEND=pass`
🧰 Tools
🪛 LanguageTool

[typographical] ~111-~111: Consider adding a comma.
Context: ...xample, if your binary name is gaia-v5 then set: `export GAIA_V5_KEYRING_BACKEND=pa...

(IF_THEN_COMMA)

docs/user/run-node/06-run-production.md (8)

1-9: LGTM: Clear and concise introduction

The introduction provides a clear synopsis of the document's purpose and scope. Consider rephrasing the split infinitive in line 8 for improved readability:

-This section describes how to securely run a node in a public setting and/or on a mainnet on one of the many Cosmos SDK public blockchains. 
+This section describes how to run a node securely in a public setting and/or on a mainnet on one of the many Cosmos SDK public blockchains. 
🧰 Tools
🪛 LanguageTool

[style] ~8-~8: Style-wise, it’s not ideal to insert an adverb (‘securely’) in the middle of an infinitive construction (‘to run’). Try moving the adverb to avoid split infinitives.
Context: ...ote Synopsis This section describes how to securely run a node in a public setting and/or on a mainnet...

(SPLIT_INFINITIVE)


23-39: Consider adding more details to user creation steps

The user creation steps are correct but could benefit from additional details:

  1. Explain the significance of creating a non-root user for security.
  2. Mention the need to set a strong password during user creation.
  3. Add a step to switch to the new user after creation.

Example addition:

3. Switch to the new user:

```bash
su - change_me

Remember to replace 'change_me' with your chosen username and set a strong password when prompted during user creation.


<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 Markdownlint</summary><blockquote>

33-33: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)

</blockquote></details>

</details>

---

`41-47`: **LGTM: Clear Go installation instructions with important warning**

The Go installation section provides crucial information about version compatibility. Consider adding a link to the official Cosmos SDK documentation or GitHub repository where users can find the recommended Go version for the specific application they're running.

Example addition:
```markdown
:::tip
Check the [official Cosmos SDK documentation](https://docs.cosmos.network) or the specific application's GitHub repository for the recommended Go version.
:::

49-114: LGTM: Comprehensive firewall configuration guide

The firewall configuration section provides clear and correct instructions for setting up UFW. A few suggestions for improvement:

  1. Consider adding a note about the potential need to adjust these settings based on specific network configurations or custom port settings.

  2. It might be helpful to mention that users should verify their SSH port before enabling UFW to avoid locking themselves out.

  3. For clarity, consider using consistent formatting for port numbers throughout the document (e.g., always use the format port/protocol).

Example addition:

:::caution
Before enabling UFW, ensure that you have correctly configured the SSH port to avoid locking yourself out of the server.
:::
🧰 Tools
🪛 LanguageTool

[typographical] ~53-~53: Consider adding a comma.
Context: ...ate a node. When setting up a firewall there are a few ports that can be open when o...

(IF_THERE_COMMA)


[typographical] ~78-~78: Consider adding a comma.
Context: ...rt). If the node has a modified p2p port then that port must be used here. ```bash s...

(IF_THEN_COMMA)


[grammar] ~90-~90: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: .../tcp ``` 5. IF the node which is being setup would like to expose CometBFTs jsonRPC ...

(BE_VB_OR_NN)

🪛 Markdownlint

92-92: Expected: h4; Actual: h5
Heading levels should only increment by one level at a time

(MD001, heading-increment)


64-64: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


78-78: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


84-84: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


90-90: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


110-110: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


116-131: LGTM: Clear explanation of signing methods

The Signing section provides a good overview of both file-based and remote signing methods. Consider the following suggestions:

  1. Add a brief explanation of the advantages of using a remote signer over file-based signing.

  2. Provide a link to more detailed documentation on securing the server when using file-based signing.

  3. Consider adding a note about the importance of regularly backing up the priv_val_state.json file when using file-based signing.

Example addition:

:::tip
When using file-based signing, regularly back up the `data/priv_val_state.json` file to prevent double-signing in case of node recovery.
:::
🧰 Tools
🪛 LanguageTool

[typographical] ~118-~118: Consider adding a comma.
Context: ...ode that is being started is a validator there are multiple ways a validator could sig...

(IF_THERE_COMMA)


[uncategorized] ~121-~121: This expression is usually spelled with a hyphen.
Context: ...lidator could sign blocks. #### File File based signing is the simplest and default app...

(BASED_HYPHEN)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... server is compromised so is your key. This key is located in the `config/priv_val_...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~124-~124: Consider a shorter alternative to avoid wordiness.
Context: ... to be recovered this file must be kept in order to ensure that the consensus key will not ...

(IN_ORDER_TO_PREMIUM)


132-235: LGTM: Comprehensive TMKMS setup guide

The TMKMS setup section provides detailed instructions. Consider the following improvements:

  1. Add a brief explanation of what TMKMS is and its benefits at the beginning of the section.

  2. In step 2 of the Setup, clarify that users should choose either the "From source" or "Cargo install" method, not both.

  3. After step 3 of the Setup, add a caution about securely storing the original priv_validator_key.json offline after importing it into TMKMS.

  4. In the sample tmkms.toml configuration, consider using placeholder values (e.g., <chain-id>, <validator-address>) instead of example values to prevent copy-paste errors.

Example addition for point 1:

TMKMS (Tendermint Key Management System) is a remote signing solution that enhances the security of your validator by separating the consensus key from the validator node.
🧰 Tools
🪛 LanguageTool

[grammar] ~156-~156: Before the countable noun ‘from’ an article or a possessive pronoun is necessary.
Context: ...will cover downloading or building from source and using softsign. Softsign stands for...

(IN_NN_CC_VBG)

🪛 Markdownlint

142-142: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


148-148: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


185-185: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


191-191: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


199-199: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


236-269: Consider adding a verification step

After setting up TMKMS and starting both processes, it would be helpful to add a step for verifying that the setup is working correctly. This could include checking logs or using a command to confirm that the validator is actively participating in consensus.

Example addition:

7. Verify the setup

After starting both processes, check the logs of your validator node to ensure it's successfully connecting to TMKMS and participating in consensus:

```bash
tail -f ~/.simd/simd.log | grep "executed block"

If you see regular "executed block" messages, your validator is successfully signing blocks using TMKMS.


<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 Markdownlint</summary><blockquote>

236-236: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)

---

261-261: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)

</blockquote></details>

</details>

---

`1-269`: **Overall document structure and formatting**

The document is well-structured and uses markdown formatting effectively. Consider the following improvements:

1. Ensure consistent heading levels throughout the document. For example, change the h5 headings (e.g., `##### CometBFT JsonRPC`) to h4 headings.

2. Consider adding a table of contents at the beginning of the document for easier navigation.

3. Use consistent formatting for command prompts in code blocks (e.g., always use or omit the `$` symbol).

4. Consider adding more admonitions (:::note, :::tip, :::caution) throughout the document to highlight important information.

Example table of contents:
```markdown
## Table of Contents

1. [Server Setup](#server-setup)
2. [Go Installation](#go)
3. [Firewall Configuration](#firewall)
4. [Signing Methods](#signing)
5. [TMKMS Setup](#tmkms)
🧰 Tools
🪛 LanguageTool

[style] ~8-~8: Style-wise, it’s not ideal to insert an adverb (‘securely’) in the middle of an infinitive construction (‘to run’). Try moving the adverb to avoid split infinitives.
Context: ...ote Synopsis This section describes how to securely run a node in a public setting and/or on a mainnet...

(SPLIT_INFINITIVE)


[style] ~14-~14: ‘many different ways’ might be wordy. Consider a shorter alternative.
Context: ...server up securely. :::note There are many different ways to secure a server and your node, the d...

(EN_WORDINESS_PREMIUM_MANY_DIFFERENT_WAYS)


[typographical] ~53-~53: Consider adding a comma.
Context: ...ate a node. When setting up a firewall there are a few ports that can be open when o...

(IF_THERE_COMMA)


[typographical] ~78-~78: Consider adding a comma.
Context: ...rt). If the node has a modified p2p port then that port must be used here. ```bash s...

(IF_THEN_COMMA)


[grammar] ~90-~90: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: .../tcp ``` 5. IF the node which is being setup would like to expose CometBFTs jsonRPC ...

(BE_VB_OR_NN)


[typographical] ~118-~118: Consider adding a comma.
Context: ...ode that is being started is a validator there are multiple ways a validator could sig...

(IF_THERE_COMMA)


[uncategorized] ~121-~121: This expression is usually spelled with a hyphen.
Context: ...lidator could sign blocks. #### File File based signing is the simplest and default app...

(BASED_HYPHEN)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... server is compromised so is your key. This key is located in the `config/priv_val_...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~124-~124: Consider a shorter alternative to avoid wordiness.
Context: ... to be recovered this file must be kept in order to ensure that the consensus key will not ...

(IN_ORDER_TO_PREMIUM)


[grammar] ~156-~156: Before the countable noun ‘from’ an article or a possessive pronoun is necessary.
Context: ...will cover downloading or building from source and using softsign. Softsign stands for...

(IN_NN_CC_VBG)

🪛 Markdownlint

92-92: Expected: h4; Actual: h5
Heading levels should only increment by one level at a time

(MD001, heading-increment)


33-33: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


64-64: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


78-78: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


84-84: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


90-90: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


110-110: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


142-142: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


148-148: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


185-185: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


191-191: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


199-199: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


236-236: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


261-261: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)

docs/user/run-node/08-onchain-multisig.md (5)

35-107: Enhance Setup section with additional context and explanations

The Setup section provides clear instructions for creating a multisig account. To further improve its user-friendliness, consider the following suggestions:

  1. Add a brief explanation of what simd is and where to find it, as some users might not be familiar with this command.
  2. Explain the significance of the --keyring-backend test flag and when users might want to use a different backend.
  3. Provide a brief explanation of what $CHAINID represents and how users should set it.
  4. After line 107, consider adding a step to verify that the tokens were successfully sent to the multisig account.

These additions will help users better understand each step of the process and ensure they're following along correctly.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~55-~55: Consider adding a comma here to clarify the structure of the sentence.
Context: ...we craft our initialization message, in it we'll include the members' addresses, t...

(PRP_COMMA)


[formatting] ~87-~87: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...h. And finally revote was set to false, because we don't want to allow members to chang...

(COMMA_BEFORE_BECAUSE)


177-184: Provide more context on voting options

The instructions for voting on the proposal are clear and concise. To enhance user understanding, consider adding more information about the available voting options:

  1. Explain what other voting options are available besides VOTE_OPTION_YES.
  2. Briefly describe what each voting option means and when it might be used.

For example, you could add a note like this before the voting commands:

Note: Available voting options include:
- VOTE_OPTION_YES: Approve the proposal
- VOTE_OPTION_NO: Reject the proposal
- VOTE_OPTION_ABSTAIN: Formally abstain from voting
- VOTE_OPTION_NO_WITH_VETO: Reject the proposal and express strong opposition

This additional context will help users make informed decisions when voting on proposals.


186-223: Enhance explanation of proposal execution and response interpretation

The Execute the proposal section provides clear instructions for executing the proposal. To further improve user understanding, consider the following additions:

  1. Explain why Bob is executing the proposal in this example, and whether any multisig member can execute it once the threshold is reached.
  2. Provide a brief explanation of the fields in the response, particularly the significance of yes_votes, no_votes, and abstain_votes.
  3. Explain what <nil> means for reject_err and exec_err, and what users should look out for in case of errors.

These additions will help users better understand the execution process and how to interpret the response, especially if they encounter different scenarios or errors in their own multisig transactions.


225-245: Enhance the balance check section for clarity and educational value

The final balance check section is a good addition to verify the transaction's success. To make it more informative and educational, consider the following improvements:

  1. Add a brief explanation of the expected changes in balances before showing the commands.
  2. After each balance query, add a comment explaining how the balance has changed and why.
  3. Consider showing the initial balances as well, to make the changes more apparent.

For example, you could add explanations like this:

# Before the commands
We expect the multisig account's balance to decrease by 1000stake (sent to Alice) plus any transaction fees.
Alice's balance should increase by 1000stake.

# After the multisig balance query
# The balance has decreased from the initial 10000stake to 9000stake, 
# accounting for the 1000stake sent to Alice and potentially some transaction fees.

# After Alice's balance query
# Alice's balance has increased by 1000stake from her initial balance, 
# reflecting the amount received from the multisig transaction.

These additions will help users better understand the impact of the multisig transaction on account balances.

🧰 Tools
🪛 LanguageTool

[grammar] ~225-~225: The verb ‘send’ does not usually follow articles like ‘the’. Check that ‘send’ is spelled correctly; using ‘send’ as a noun may be non-standard.
Context: ...sig and Alice's balance, we'll see that the send was performed correctly. ```bash! simd...

(A_INFINITIVE)


1-248: Address grammar and formatting issues

Based on the static analysis hints, there are a few minor improvements that can be made to enhance the document's readability and consistency:

  1. On line 55, consider adding a comma after "message" for clarity: "Now we craft our initialization message, in it we'll include..."
  2. On line 87, remove the comma before "because" as it's not necessary in this context: "And finally revote was set to false because we don't want to allow..."
  3. On line 111, change the heading level from h4 to h3 to maintain proper heading hierarchy: "### Create proposal"

These small changes will improve the document's grammar and formatting consistency.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~55-~55: Consider adding a comma here to clarify the structure of the sentence.
Context: ...we craft our initialization message, in it we'll include the members' addresses, t...

(PRP_COMMA)


[formatting] ~87-~87: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...h. And finally revote was set to false, because we don't want to allow members to chang...

(COMMA_BEFORE_BECAUSE)


[grammar] ~225-~225: The verb ‘send’ does not usually follow articles like ‘the’. Check that ‘send’ is spelled correctly; using ‘send’ as a noun may be non-standard.
Context: ...sig and Alice's balance, we'll see that the send was performed correctly. ```bash! simd...

(A_INFINITIVE)

🪛 Markdownlint

111-111: Expected: h3; Actual: h4
Heading levels should only increment by one level at a time

(MD001, heading-increment)

docs/user/run-node/01-run-node.md (8)

7-9: Minor grammatical improvement needed in the synopsis.

The synopsis is clear and informative. However, there's a small grammatical improvement that can be made:

Consider revising the sentence structure in the synopsis for better clarity:

-Now that the application is ready and the keyring populated, it's time to see how to run the blockchain node.
+Now that the application is ready and the keyring is populated, it's time to see how to run the blockchain node.

Adding "is" before "populated" improves the parallelism in the sentence structure.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~8-~8: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...nopsis Now that the application is ready and the keyring populated, it's time to see...

(COMMA_COMPOUND_SENTENCE_2)


34-36: Minor grammatical correction needed in the tip about the --home flag.

The tip provides useful information about overwriting the default configuration folder location. However, there's a small grammatical error that should be corrected:

Please update the sentence as follows:

-All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag to each commands,
+All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag to each command,

The word "command" should be singular when used with "each".

🧰 Tools
🪛 LanguageTool

[grammar] ~34-~34: The noun should probably be in the singular form.
Context: ...er by passing the --home flag to each commands, or set an $APPD_HOME environment var...

(EVERY_EACH_SINGULAR)


53-53: Minor language improvement in the introduction of the "Updating Some Default Settings" section.

The introduction to this section is informative, but a small language adjustment would improve its clarity:

Consider revising the sentence as follows:

-If you want to change any field values in configuration files (for ex: genesis.json) you can use `jq` ([installation](https://stedolan.github.io/jq/download/) & [docs](https://stedolan.github.io/jq/manual/#Assignment)) & `sed` commands to do that. Few examples are listed here.
+If you want to change any field values in configuration files (for example, genesis.json), you can use `jq` ([installation](https://stedolan.github.io/jq/download/) & [docs](https://stedolan.github.io/jq/manual/#Assignment)) and `sed` commands to do that. A few examples are listed here.

These changes improve readability and correct the use of "Few" to "A few".

🧰 Tools
🪛 LanguageTool

[uncategorized] ~53-~53: A determiner appears to be missing. Consider inserting it.
Context: ...signment)) & sed commands to do that. Few examples are listed here. ```bash # to...

(AI_EN_LECTOR_MISSING_DETERMINER)


71-71: Grammatical correction needed in the "Client Interaction" section.

The information about GRPC and REST endpoint security is crucial. However, there's a small grammatical error that should be corrected:

Please update the sentence as follows:

-When instantiating a node, GRPC and REST are defaulted to localhost to avoid unknown exposure of your node to the public. It is recommended to not expose these endpoints without a proxy that can handle load balancing or authentication is setup between your node and the public. 
+When instantiating a node, GRPC and REST are defaulted to localhost to avoid unknown exposure of your node to the public. It is recommended not to expose these endpoints without a proxy that can handle load balancing or authentication set up between your node and the public. 

This correction improves the sentence structure and fixes the use of "setup" (noun) to "set up" (verb phrase).

🧰 Tools
🪛 LanguageTool

[grammar] ~71-~71: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: ...dle load balancing or authentication is setup between your node and the public. :::...

(BE_VB_OR_NN)


156-158: Minor grammatical correction needed in the explanation about running a single node.

The instructions for running a localnet are clear and informative. However, there's a small grammatical error that should be corrected:

Please update the sentences as follows:

-The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them.
+The previous command allows you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time and see how consensus happens between them.

This correction fixes the subject-verb agreement ("command allows") and removes an unnecessary comma before "and see".

🧰 Tools
🪛 LanguageTool

[uncategorized] ~156-~156: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...e blocks come in. The previous command allow you to run a single node. This is enoug...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[locale-violation] ~158-~158: In American English, “take a look” is more commonly used.
Context: ...n localnet with Docker Compose, you can have a look at the Cosmos SDK's [`docker-compose.ym...

(HAVE_A_LOOK)


169-170: Minor punctuation correction needed in the logging explanation.

The logging section provides valuable information about configuring log levels. However, there's a small punctuation error that should be corrected:

Please update the sentence as follows:

-Logging provides a way to see what is going on with a node. By default the `info` level is set. This is a global level and all info logs will be outputted to the terminal.
+Logging provides a way to see what is going on with a node. By default, the `info` level is set. This is a global level and all info logs will be outputted to the terminal.

Adding a comma after "By default" improves the sentence structure and readability.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~169-~169: Did you mean: “By default,”?
Context: ...ay to see what is going on with a node. By default the info level is set. This is a glob...

(BY_DEFAULT_COMMA)


197-199: Grammatical and spelling corrections needed in the Local State Sync explanation.

The information about Local State Sync is valuable. However, there are a few grammatical and spelling errors that should be corrected:

Please update the sentences as follows:

-Local state sync work similar to normal state sync except that it works off a local snapshot of state instead of one provided via the p2p network. The steps to start local state sync are similar to normal state sync with a few different designs. 
+Local state sync works similar to normal state sync except that it works off a local snapshot of state instead of one provided via the p2p network. The steps to start local state sync are similar to normal state sync with a few differences. 

These corrections fix the subject-verb agreement ("sync works") and improve the wording in the second sentence.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~197-~197: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ### Local State Sync Local state sync work similar to normal state sync except tha...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[uncategorized] ~197-~197: Possible missing comma found.
Context: ... state sync are similar to normal state sync with a few different designs. 1. As m...

(AI_HYDRA_LEO_MISSING_COMMA)


200-202: Spelling correction needed in the Local State Sync steps.

In the steps for Local State Sync, there's a spelling error that should be corrected:

Please update the third step as follows:

-3. Bootsrapping Comet state in order to start the node after the snapshot has been ingested. This can be done with the bootstrap command `<app> comet bootstrap-state`
+3. Bootstrapping Comet state in order to start the node after the snapshot has been ingested. This can be done with the bootstrap command `<app> comet bootstrap-state`

This correction fixes the spelling of "Bootstrapping".

🧰 Tools
🪛 LanguageTool

[style] ~201-~201: Consider a shorter alternative to avoid wordiness.
Context: ... command). 3. Bootsrapping Comet state in order to start the node after the snapshot has b...

(IN_ORDER_TO_PREMIUM)

docs/user/run-node/02-interact-node.md (5)

18-53: Clear CLI instructions with room for minor improvement

The CLI section provides comprehensive step-by-step instructions for common operations such as querying balances, creating accounts, sending tokens, and delegating stake. Each command is well-explained.

To enhance clarity, consider adding a brief explanation of the $MY_VALIDATOR_ADDRESS variable before its first use. This will help readers understand where this value comes from and how to set it.


55-64: Clarify gRPC introduction

The introduction to the gRPC section is informative but could be more precise. Consider rephrasing "the transport can be plugged and replaced very easily" to "the client connection (i.e., the transport) can be easily configured and replaced." This more accurately describes the flexibility of gRPC implementations.

🧰 Tools
🪛 LanguageTool

[style] ~57-~57: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... transport) can be plugged and replaced very easily. Let's explore one of the most popular ...

(EN_WEAK_ADJECTIVE)


[grammar] ~57-~57: Please check whether a plural form of ‘transport’ should be used.
Context: .... Let's explore one of the most popular transport: [gRPC](../../learn/advanced/06-grpc_re...

(ONE_OF)


249-272: Enhance REST endpoints explanation

The explanation of REST endpoints is good, but consider adding:

  1. A brief explanation of why one might choose REST over gRPC (e.g., easier integration with web applications).
  2. A note on performance differences between gRPC and REST, if applicable.
  3. More details on how to interpret the Swagger specification file mentioned.

These additions would provide a more comprehensive overview of the REST endpoints.


287-289: Expand on CORS explanation

The CORS section could benefit from more explanation:

  1. Briefly describe why CORS is important for security.
  2. Provide a basic example of how to configure CORS in nginx for those who need it.
  3. Emphasize that enabling unsafe CORS should only be done in controlled development environments.

This would help readers better understand the security implications and how to properly handle CORS in different scenarios.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~289-~289: Possible missing comma found.
Context: ...ginx.com/). For testing and development purposes there is an enabled-unsafe-cors field...

(AI_HYDRA_LEO_MISSING_COMMA)


1-289: Overall suggestions for document improvement

  1. Consider adding a table of contents at the beginning of the document for easier navigation, especially given its length and the variety of topics covered.

  2. It might be helpful to include a brief comparison table or summary at the end, highlighting the pros and cons of each interaction method (CLI, gRPC, REST). This would help readers quickly understand which method is best suited for their specific use case.

  3. Throughout the document, ensure consistent use of terminology. For example, standardize on either "blockchain node" or just "node" to avoid confusion.

  4. Consider adding more cross-references between sections where applicable, to help readers understand the relationships between different interaction methods.

These improvements would enhance the overall structure and usefulness of the document for readers with varying levels of expertise.

🧰 Tools
🪛 LanguageTool

[style] ~57-~57: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... transport) can be plugged and replaced very easily. Let's explore one of the most popular ...

(EN_WEAK_ADJECTIVE)


[grammar] ~57-~57: Please check whether a plural form of ‘transport’ should be used.
Context: .... Let's explore one of the most popular transport: [gRPC](../../learn/advanced/06-grpc_re...

(ONE_OF)


[style] ~76-~76: Consider a shorter alternative to avoid wordiness.
Context: ...ple RPC methods you can query against. In order to get a description of the service you ca...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~77-~77: Possible missing comma found.
Context: .... In order to get a description of the service you can run the following command: ```...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~247-~247: Possible missing article found.
Context: ...ary 2021, CosmJS documentation is still work in progress. ## Using the REST Endpoin...

(AI_HYDRA_LEO_MISSING_A)


[uncategorized] ~289-~289: Possible missing comma found.
Context: ...ginx.com/). For testing and development purposes there is an enabled-unsafe-cors field...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/user/run-node/03-txs.md (2)

39-53: Comprehensive explanation of transaction signing

The segment provides a thorough explanation of signing transactions using the CLI, including valuable information about offline signing for security-conscious users.

Consider adjusting the formatting of the bullet point on line 51 to match the style of the other bullet points in the document.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~51-~51: Loose punctuation mark.
Context: ... the tx sign command: * --sign-mode: you may use amino-json to sign the tr...

(UNLIKELY_OPENING_PUNCTUATION)


111-181: Comprehensive guide for programmatic transaction generation

The segment provides a clear and detailed explanation of how to generate transactions programmatically using Go. The code snippets and explanations are informative and demonstrate proper error handling.

There's a minor typo in the comment on line 165. "transactions" should be "transaction".

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 864e9f1 and b3d3ae7.

📒 Files selected for processing (13)
  • docs/post.sh (1 hunks)
  • docs/pre.sh (1 hunks)
  • docs/user/run-node/00-keyring.md (1 hunks)
  • docs/user/run-node/01-run-node.md (1 hunks)
  • docs/user/run-node/02-interact-node.md (1 hunks)
  • docs/user/run-node/03-txs.md (1 hunks)
  • docs/user/run-node/04-rosetta.md (1 hunks)
  • docs/user/run-node/05-run-testnet.md (1 hunks)
  • docs/user/run-node/06-run-production.md (1 hunks)
  • docs/user/run-node/07-multisig-guide.md (1 hunks)
  • docs/user/run-node/08-onchain-multisig.md (1 hunks)
  • docs/user/run-node/category.json (1 hunks)
  • docs/user/user.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • docs/post.sh
🧰 Additional context used
📓 Path-based instructions (10)
docs/user/run-node/00-keyring.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/01-run-node.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/02-interact-node.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/03-txs.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/04-rosetta.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/05-run-testnet.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/06-run-production.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/07-multisig-guide.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/run-node/08-onchain-multisig.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

docs/user/user.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

🪛 LanguageTool
docs/user/run-node/00-keyring.md

[style] ~16-~16: Consider replacing this phrase with the adverb “securely” to avoid wordiness.
Context: ...f commands to manage cryptographic keys in a secure fashion. The new keyring supports multiple stor...

(IN_A_X_MANNER)


[typographical] ~36-~36: Consider isolating this adverbial phrase with commas.
Context: ...DE_Wallet_Manager). Whilst the former is in fact a libsecret convenient frontend, the ...

(IN_FACT_COMMA_2)


[uncategorized] ~39-~39: Possible missing comma found.
Context: ... kwallet client. os is the default option since operating system's default creden...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~47-~47: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ...sembles the keybase implementation used prior to v0.38.1. It stores the keyring encrypte...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~50-~50: Possible missing comma found.
Context: ...ch may occur multiple times in a single command resulting in repeated password prompts....

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~51-~51: Possible missing comma found.
Context: ...ts to execute commands using the file option you may want to utilize the following f...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~70-~70: Possible missing comma found.
Context: ...ble for the most popular UNIX operating systems as well as GNU/Linux distributions. Ple...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~80-~80: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ... ::: The password store must be set up prior to first use: ```shell pass init <GPG_KEY...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[typographical] ~111-~111: Consider adding a comma.
Context: ...xample, if your binary name is gaia-v5 then set: `export GAIA_V5_KEYRING_BACKEND=pa...

(IF_THEN_COMMA)


[typographical] ~134-~134: Consider adding two commas here.
Context: ...the --algo ed25519 flag. A keyring can of course hold both types of keys simultaneously,...

(OF_COURSE_COMMA)

docs/user/run-node/01-run-node.md

[uncategorized] ~8-~8: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...nopsis Now that the application is ready and the keyring populated, it's time to see...

(COMMA_COMPOUND_SENTENCE_2)


[grammar] ~34-~34: The noun should probably be in the singular form.
Context: ...er by passing the --home flag to each commands, or set an $APPD_HOME environment var...

(EVERY_EACH_SINGULAR)


[uncategorized] ~53-~53: A determiner appears to be missing. Consider inserting it.
Context: ...signment)) & sed commands to do that. Few examples are listed here. ```bash # to...

(AI_EN_LECTOR_MISSING_DETERMINER)


[grammar] ~71-~71: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: ...dle load balancing or authentication is setup between your node and the public. :::...

(BE_VB_OR_NN)


[style] ~90-~90: Consider a shorter alternative to avoid wordiness.
Context: ...o/02-sdk-app-architecture.md#cometbft)) in order to add new blocks to the chain. Any accoun...

(IN_ORDER_TO_PREMIUM)


[style] ~90-~90: This phrase is redundant. Consider writing “started”.
Context: ...ators can be declared before a chain is first started via a special transaction included in t...

(FIRST_BEGAN)


[uncategorized] ~116-~116: Loose punctuation mark.
Context: ...ide ~/.simapp/config: * config.toml: used to configure the CometBFT, learn m...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~154-~154: You might be missing the article “the” here.
Context: ... bash simd start You should see blocks come in. The previous command allow yo...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~156-~156: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...e blocks come in. The previous command allow you to run a single node. This is enoug...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[locale-violation] ~158-~158: In American English, “take a look” is more commonly used.
Context: ...n localnet with Docker Compose, you can have a look at the Cosmos SDK's [`docker-compose.ym...

(HAVE_A_LOOK)


[uncategorized] ~169-~169: Did you mean: “By default,”?
Context: ...ay to see what is going on with a node. By default the info level is set. This is a glob...

(BY_DEFAULT_COMMA)


[uncategorized] ~180-~180: The preposition “on” seems more likely in this position than the preposition “in”.
Context: ...fo,x/ibc:info,*:error" Or directly in the command line: bash start...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_IN_ON)


[uncategorized] ~197-~197: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ### Local State Sync Local state sync work similar to normal state sync except tha...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[uncategorized] ~197-~197: Possible missing comma found.
Context: ... state sync are similar to normal state sync with a few different designs. 1. As m...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~201-~201: Consider a shorter alternative to avoid wordiness.
Context: ... command). 3. Bootsrapping Comet state in order to start the node after the snapshot has b...

(IN_ORDER_TO_PREMIUM)

docs/user/run-node/02-interact-node.md

[style] ~57-~57: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... transport) can be plugged and replaced very easily. Let's explore one of the most popular ...

(EN_WEAK_ADJECTIVE)


[grammar] ~57-~57: Please check whether a plural form of ‘transport’ should be used.
Context: .... Let's explore one of the most popular transport: [gRPC](../../learn/advanced/06-grpc_re...

(ONE_OF)


[style] ~76-~76: Consider a shorter alternative to avoid wordiness.
Context: ...ple RPC methods you can query against. In order to get a description of the service you ca...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~77-~77: Possible missing comma found.
Context: .... In order to get a description of the service you can run the following command: ```...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~247-~247: Possible missing article found.
Context: ...ary 2021, CosmJS documentation is still work in progress. ## Using the REST Endpoin...

(AI_HYDRA_LEO_MISSING_A)


[uncategorized] ~289-~289: Possible missing comma found.
Context: ...ginx.com/). For testing and development purposes there is an enabled-unsafe-cors field...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/user/run-node/03-txs.md

[uncategorized] ~51-~51: Loose punctuation mark.
Context: ... the tx sign command: * --sign-mode: you may use amino-json to sign the tr...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~84-~84: Loose punctuation mark.
Context: ...onse to receive from the node: * sync: the CLI waits for a CheckTx execution r...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~85-~85: Loose punctuation mark.
Context: ...eckTx execution response only. * async: the CLI returns immediately (transactio...

(UNLIKELY_OPENING_PUNCTUATION)


[style] ~88-~88: Consider a shorter alternative to avoid wordiness.
Context: ...ght fail). ### Encoding a Transaction In order to broadcast a transaction using the gRPC ...

(IN_ORDER_TO_PREMIUM)


[style] ~357-~357: Consider a shorter alternative to avoid wordiness.
Context: ...tion using gRPC, only to broadcast one. In order to broadcast a transaction using gRPC, you...

(IN_ORDER_TO_PREMIUM)


[style] ~372-~372: Consider a shorter alternative to avoid wordiness.
Context: ...tion using REST, only to broadcast one. In order to broadcast a transaction using REST, you...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~387-~387: Possible missing article found.
Context: ...ary 2021, CosmJS documentation is still work in progress.

(AI_HYDRA_LEO_MISSING_A)

docs/user/run-node/04-rosetta.md

[uncategorized] ~9-~9: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ... can be added to any cosmos chain node. standalone or natively. ### Standalone Rosetta ...

(EN_WORD_COHERENCY)


[uncategorized] ~11-~11: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ...hain node. standalone or natively. ### Standalone Rosetta can be executed as a standalo...

(EN_WORD_COHERENCY)


[uncategorized] ~13-~13: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ...andalone Rosetta can be executed as a standalone service, it connects to the node endpoi...

(EN_WORD_COHERENCY)


[uncategorized] ~15-~15: Do not mix variants of the same word (‘standalone’ and ‘stand-alone’) within a single text.
Context: ...he required endpoints. Install Rosetta standalone server with the following command: ```...

(EN_WORD_COHERENCY)


[misspelling] ~77-~77: Did you mean “where”?
Context: ...node gRPC endpoints, there may be cases were this approach is not enough. It is poss...

(WERE_WHERE)


[uncategorized] ~79-~79: When ‘zone-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...ired to set up prefixes and registering zone specific interfaces through plugins. Each plugi...

(SPECIFIC_HYPHEN)


[uncategorized] ~81-~81: When ‘chain-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...nterfaces` which allow Rosetta to parse chain specific data. There is an example for cosmos-hu...

(SPECIFIC_HYPHEN)


[uncategorized] ~83-~83: When ‘zone-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...an interface registry which is were the zone specific types and interfaces will be loaded In...

(SPECIFIC_HYPHEN)


[style] ~84-~84: Consider a shorter alternative to avoid wordiness.
Context: ...ic types and interfaces will be loaded In order to add a new plugin: 1. Create a folder o...

(IN_ORDER_TO_PREMIUM)


[style] ~97-~97: Consider a shorter alternative to avoid wordiness.
Context: ...ustom settings. ### Message extension In order to make an sdk.Msg understandable by ros...

(IN_ORDER_TO_PREMIUM)


[grammar] ~132-~132: Did you mean “providing”? Or maybe you should add a pronoun? In active voice, ‘require’ + ‘to’ takes an object, usually a pronoun.
Context: ...Error extension Since rosetta requires to provide 'returned' errors to network options. I...

(ALLOW_TO)


[style] ~132-~132: Consider a shorter alternative to avoid wordiness.
Context: ...e 'returned' errors to network options. In order to declare a new rosetta error, we use the...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~144-~144: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Context: ...ay's Server.Start method is called. Otherwise the registration will be ignored. Error...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)

docs/user/run-node/05-run-testnet.md

[formatting] ~17-~17: Consider inserting a comma after an introductory phrase for better readability.
Context: ...nd when initializing a single node, but in this case we are initializing multiple nodes, gen...

(IN_THAT_CASE_COMMA)


[style] ~20-~20: Consider a shorter alternative to avoid wordiness.
Context: ...command (see below). In order to initialize the files for a test network...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~77-~77: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...or testing purposes. The validator node is using the same default addresses being used w...

(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)


[style] ~101-~101: Consider a shorter alternative to avoid wordiness.
Context: ...uration of the test network with flags. In order to see all flag options, append the `--hel...

(IN_ORDER_TO_PREMIUM)

docs/user/run-node/06-run-production.md

[style] ~8-~8: Style-wise, it’s not ideal to insert an adverb (‘securely’) in the middle of an infinitive construction (‘to run’). Try moving the adverb to avoid split infinitives.
Context: ...ote Synopsis This section describes how to securely run a node in a public setting and/or on a mainnet...

(SPLIT_INFINITIVE)


[style] ~14-~14: ‘many different ways’ might be wordy. Consider a shorter alternative.
Context: ...server up securely. :::note There are many different ways to secure a server and your node, the d...

(EN_WORDINESS_PREMIUM_MANY_DIFFERENT_WAYS)


[typographical] ~53-~53: Consider adding a comma.
Context: ...ate a node. When setting up a firewall there are a few ports that can be open when o...

(IF_THERE_COMMA)


[typographical] ~78-~78: Consider adding a comma.
Context: ...rt). If the node has a modified p2p port then that port must be used here. ```bash s...

(IF_THEN_COMMA)


[grammar] ~90-~90: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: .../tcp ``` 5. IF the node which is being setup would like to expose CometBFTs jsonRPC ...

(BE_VB_OR_NN)


[typographical] ~118-~118: Consider adding a comma.
Context: ...ode that is being started is a validator there are multiple ways a validator could sig...

(IF_THERE_COMMA)


[uncategorized] ~121-~121: This expression is usually spelled with a hyphen.
Context: ...lidator could sign blocks. #### File File based signing is the simplest and default app...

(BASED_HYPHEN)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... server is compromised so is your key. This key is located in the `config/priv_val_...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~124-~124: Consider a shorter alternative to avoid wordiness.
Context: ... to be recovered this file must be kept in order to ensure that the consensus key will not ...

(IN_ORDER_TO_PREMIUM)


[grammar] ~156-~156: Before the countable noun ‘from’ an article or a possessive pronoun is necessary.
Context: ...will cover downloading or building from source and using softsign. Softsign stands for...

(IN_NN_CC_VBG)

docs/user/run-node/07-multisig-guide.md

[style] ~15-~15: Consider removing “of” to be more concise
Context: ...g the multisig, it should at least have all of the public keys imported into the same keyr...

(ALL_OF_THE)


[grammar] ~23-~23: Did you mean the adjective or adverb “Step-by-step” (spelled with hyphens)?
Context: ...multisig key before it is executed. ## Step by step guide to multisig transactions This tu...

(STEP_BY_STEP_HYPHEN)


[uncategorized] ~25-~25: Possible missing comma found.
Context: ...ctions This tutorial will use the test keyring which will store the keys in the defaul...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~27-~27: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...g by running --keyring-backend test. Prior to this tutorial set the keyring backend t...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~28-28: Possible missing comma found.
Context: ...--keyring-backend test. Prior to this tutorial set the keyring backend to "test" in
...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~34-~34: Possible missing comma found.
Context: ...``` If you don't already have accounts listed create the accounts using the below. `...

(AI_HYDRA_LEO_MISSING_COMMA)


[typographical] ~41-~41: Consider adding a comma after ‘Alternatively’ for more clarity.
Context: ...ys add bob simd keys add recipient ``` Alternatively the public keys comprising the multisig...

(RB_LY_COMMA)

docs/user/run-node/08-onchain-multisig.md

[uncategorized] ~55-~55: Consider adding a comma here to clarify the structure of the sentence.
Context: ...we craft our initialization message, in it we'll include the members' addresses, t...

(PRP_COMMA)


[formatting] ~87-~87: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...h. And finally revote was set to false, because we don't want to allow members to chang...

(COMMA_BEFORE_BECAUSE)


[grammar] ~225-~225: The verb ‘send’ does not usually follow articles like ‘the’. Check that ‘send’ is spelled correctly; using ‘send’ as a noun may be non-standard.
Context: ...sig and Alice's balance, we'll see that the send was performed correctly. ```bash! simd...

(A_INFINITIVE)

🪛 Markdownlint
docs/user/run-node/04-rosetta.md

82-82: Expected: asterisk; Actual: dash
Unordered list style

(MD004, ul-style)


83-83: Expected: asterisk; Actual: dash
Unordered list style

(MD004, ul-style)


82-82: null
Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


86-86: null
Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

docs/user/run-node/06-run-production.md

92-92: Expected: h4; Actual: h5
Heading levels should only increment by one level at a time

(MD001, heading-increment)


33-33: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


64-64: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


78-78: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


84-84: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


90-90: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


110-110: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


142-142: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


148-148: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


185-185: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


191-191: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


199-199: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


236-236: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


261-261: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)

docs/user/run-node/08-onchain-multisig.md

111-111: Expected: h3; Actual: h4
Heading levels should only increment by one level at a time

(MD001, heading-increment)

🔇 Additional comments (29)
docs/user/run-node/_category_.json (2)

1-5: LGTM: Well-structured category definition

The JSON structure is valid and appropriately defines a category for "Running a Node, API and CLI" documentation. The position value of 1 suggests this is a top-level or high-priority category, which aligns with the importance of node operation in the Cosmos SDK.


4-4: Verify the intention of the null link

The "link" property is set to null. While this may be intentional, it's worth confirming whether this category should link to an index page or overview for the "Running a Node, API and CLI" section.

If an index page exists or should exist, consider updating the link property to point to that page.

docs/user/user.md (3)

1-3: LGTM: Front matter is correctly formatted and positioned.

The front matter is properly structured and includes the sidebar_position property, which will likely place this page at the top of the sidebar in the documentation site.


4-6: LGTM: Clear and concise introduction.

The introduction effectively communicates the purpose of this documentation section and its target audience. It's well-written with no apparent grammatical or spelling issues.


1-10: LGTM: Well-structured and informative user guide overview.

This file provides a clear and concise introduction to the user guides for the Cosmos SDK. It's well-organized, with an informative introduction and easy-to-navigate sections linking to specific guides. The content effectively fulfills its purpose of orienting developers to the available resources.

docs/user/run-node/05-run-testnet.md (3)

1-11: LGTM: Well-structured introduction and overview

The document header and introduction are clear, concise, and properly formatted. They provide a good overview of the simd testnet subcommand and its purpose.


43-75: LGTM: Clear instructions for starting the testnet

The "Start Testnet" section provides clear and concise instructions for using the start subcommand. The inclusion of the expected output, along with the emphasized warning about the mnemonic being for testing purposes only, is particularly helpful for users.


1-101: LGTM: Well-structured and comprehensive guide

The document provides a clear and comprehensive guide for running a testnet using the simd binary. The content is well-organized, flowing logically from initialization to starting the testnet and then to interacting with it. The use of code blocks and examples throughout the document enhances its usefulness for users.

🧰 Tools
🪛 LanguageTool

[formatting] ~17-~17: Consider inserting a comma after an introductory phrase for better readability.
Context: ...nd when initializing a single node, but in this case we are initializing multiple nodes, gen...

(IN_THAT_CASE_COMMA)


[style] ~20-~20: Consider a shorter alternative to avoid wordiness.
Context: ...command (see below). In order to initialize the files for a test network...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~77-~77: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...or testing purposes. The validator node is using the same default addresses being used w...

(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)


[style] ~101-~101: Consider a shorter alternative to avoid wordiness.
Context: ...uration of the test network with flags. In order to see all flag options, append the `--hel...

(IN_ORDER_TO_PREMIUM)

docs/user/run-node/07-multisig-guide.md (5)

48-59: Approve multisig account creation and balance checking section

This section provides clear and concise instructions for creating a multisig account and checking balances. The commands are well-explained and the importance of verifying balances is appropriately emphasized.


61-72: Approve funding the multisig account section

This section clearly explains the process of funding the multisig account. The instructions are well-structured, providing commands for transferring funds and verifying the balance afterwards. The explanation of using the genesis account for funding is helpful for context.


74-96: Approve transaction initiation and signing section

This section provides a comprehensive guide for initiating a transaction and signing it with multiple keys. The step-by-step instructions are clear and well-explained, covering the process for each participant in the multisig account. The commands are presented in a logical order, making it easy for users to follow the process.


98-108: Approve transaction broadcasting and verification section

This section effectively concludes the multisig transaction guide by explaining how to broadcast the transaction and verify its success. The instructions are clear and concise, providing the necessary commands for broadcasting and balance checking. The emphasis on verifying the transaction's success is a valuable reminder for users to ensure the process has completed correctly.


1-108: Overall approval with minor suggestions for improvement

This guide provides a comprehensive and well-structured walkthrough of the multisig transaction process in the Cosmos SDK. The content is informative, clear, and logically organized, making it easy for users to follow the steps involved in creating and executing a multisig transaction.

To further enhance the quality of this document, consider implementing the following suggestions:

  1. Apply the grammatical and style improvements mentioned in the previous comments, such as hyphenating "Step-by-step" in the section title and adding commas where suggested.
  2. Review the document for consistency in formatting, especially in code blocks and command examples.
  3. Consider adding a brief conclusion or summary section at the end of the guide to reinforce the key points and provide any final tips or best practices for working with multisig transactions.

These minor improvements will help to polish an already valuable and informative guide.

🧰 Tools
🪛 LanguageTool

[style] ~15-~15: Consider removing “of” to be more concise
Context: ...g the multisig, it should at least have all of the public keys imported into the same keyr...

(ALL_OF_THE)


[grammar] ~23-~23: Did you mean the adjective or adverb “Step-by-step” (spelled with hyphens)?
Context: ...multisig key before it is executed. ## Step by step guide to multisig transactions This tu...

(STEP_BY_STEP_HYPHEN)


[uncategorized] ~25-~25: Possible missing comma found.
Context: ...ctions This tutorial will use the test keyring which will store the keys in the defaul...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~27-~27: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...g by running --keyring-backend test. Prior to this tutorial set the keyring backend t...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~28-28: Possible missing comma found.
Context: ...--keyring-backend test. Prior to this tutorial set the keyring backend to "test" in
...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~34-~34: Possible missing comma found.
Context: ...``` If you don't already have accounts listed create the accounts using the below. `...

(AI_HYDRA_LEO_MISSING_COMMA)


[typographical] ~41-~41: Consider adding a comma after ‘Alternatively’ for more clarity.
Context: ...ys add bob simd keys add recipient ``` Alternatively the public keys comprising the multisig...

(RB_LY_COMMA)

docs/user/run-node/00-keyring.md (4)

1-9: Well-structured document header

The document header is properly formatted with YAML front matter and includes a clear synopsis that effectively summarizes the document's purpose.


45-64: Clear explanation of 'file' backend with helpful examples

The 'file' backend section provides a clear explanation of its functionality and usage. The bash script example is particularly valuable for automation scenarios, and the tip about the first-time key addition process enhances the user experience.

🧰 Tools
🪛 LanguageTool

[style] ~47-~47: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ...sembles the keybase implementation used prior to v0.38.1. It stores the keyring encrypte...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~50-~50: Possible missing comma found.
Context: ...ch may occur multiple times in a single command resulting in repeated password prompts....

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~51-~51: Possible missing comma found.
Context: ...ts to execute commands using the file option you may want to utilize the following f...

(AI_HYDRA_LEO_MISSING_COMMA)


65-88: Comprehensive explanation of 'pass' backend with valuable setup instructions

The 'pass' backend section provides a thorough explanation of its functionality, requirements, and setup process. The inclusion of setup instructions and the tip about GnuPG and gpg-agent make this section particularly informative and user-friendly.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~70-~70: Possible missing comma found.
Context: ...ble for the most popular UNIX operating systems as well as GNU/Linux distributions. Ple...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~80-~80: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ... ::: The password store must be set up prior to first use: ```shell pass init <GPG_KEY...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


113-134: Comprehensive guide for adding keys to the keyring

This section provides clear and detailed instructions for adding keys to the keyring. The inclusion of a warning about building your own binary, explanation of the simd CLI usage, and information about different key types make this section particularly informative and user-friendly. The example commands effectively illustrate the key addition process.

🧰 Tools
🪛 LanguageTool

[typographical] ~134-~134: Consider adding two commas here.
Context: ...the --algo ed25519 flag. A keyring can of course hold both types of keys simultaneously,...

(OF_COURSE_COMMA)

docs/user/run-node/06-run-production.md (1)

1-269: LGTM: Comprehensive and valuable guide for running a node in production

This document provides an excellent, detailed guide for setting up and running a Cosmos SDK node in a production environment. It covers crucial aspects such as server security, firewall configuration, and secure signing methods. The instructions are clear, well-structured, and easy to follow.

Some final suggestions for enhancement:

  1. Consider adding a troubleshooting section at the end of the document to address common issues users might encounter during setup.

  2. It might be helpful to include information about monitoring and maintaining the node once it's up and running.

  3. Add links to additional resources or documentation throughout the guide for users who want to dive deeper into specific topics.

Overall, this guide will be extremely valuable for users looking to run a Cosmos SDK node in a production environment. Great work!

🧰 Tools
🪛 LanguageTool

[style] ~8-~8: Style-wise, it’s not ideal to insert an adverb (‘securely’) in the middle of an infinitive construction (‘to run’). Try moving the adverb to avoid split infinitives.
Context: ...ote Synopsis This section describes how to securely run a node in a public setting and/or on a mainnet...

(SPLIT_INFINITIVE)


[style] ~14-~14: ‘many different ways’ might be wordy. Consider a shorter alternative.
Context: ...server up securely. :::note There are many different ways to secure a server and your node, the d...

(EN_WORDINESS_PREMIUM_MANY_DIFFERENT_WAYS)


[typographical] ~53-~53: Consider adding a comma.
Context: ...ate a node. When setting up a firewall there are a few ports that can be open when o...

(IF_THERE_COMMA)


[typographical] ~78-~78: Consider adding a comma.
Context: ...rt). If the node has a modified p2p port then that port must be used here. ```bash s...

(IF_THEN_COMMA)


[grammar] ~90-~90: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: .../tcp ``` 5. IF the node which is being setup would like to expose CometBFTs jsonRPC ...

(BE_VB_OR_NN)


[typographical] ~118-~118: Consider adding a comma.
Context: ...ode that is being started is a validator there are multiple ways a validator could sig...

(IF_THERE_COMMA)


[uncategorized] ~121-~121: This expression is usually spelled with a hyphen.
Context: ...lidator could sign blocks. #### File File based signing is the simplest and default app...

(BASED_HYPHEN)


[style] ~122-~122: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... server is compromised so is your key. This key is located in the `config/priv_val_...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~124-~124: Consider a shorter alternative to avoid wordiness.
Context: ... to be recovered this file must be kept in order to ensure that the consensus key will not ...

(IN_ORDER_TO_PREMIUM)


[grammar] ~156-~156: Before the countable noun ‘from’ an article or a possessive pronoun is necessary.
Context: ...will cover downloading or building from source and using softsign. Softsign stands for...

(IN_NN_CC_VBG)

🪛 Markdownlint

92-92: Expected: h4; Actual: h5
Heading levels should only increment by one level at a time

(MD001, heading-increment)


33-33: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


64-64: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


78-78: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


84-84: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


90-90: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


110-110: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


142-142: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


148-148: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


185-185: Expected: 1; Actual: 2; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


191-191: Expected: 1; Actual: 3; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


199-199: Expected: 1; Actual: 4; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


236-236: Expected: 1; Actual: 5; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)


261-261: Expected: 1; Actual: 6; Style: 1/1/1
Ordered list item prefix

(MD029, ol-prefix)

docs/user/run-node/01-run-node.md (1)

112-144: Well-structured explanation of node configuration.

This section provides clear and valuable information about configuring the node using app.toml and config.toml. The explanation of minimum gas prices and the tip about disabling the application mempool for non-validator nodes are particularly helpful.

The content in this section is accurate and well-presented. No changes are necessary.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~116-~116: Loose punctuation mark.
Context: ...ide ~/.simapp/config: * config.toml: used to configure the CometBFT, learn m...

(UNLIKELY_OPENING_PUNCTUATION)

docs/user/run-node/02-interact-node.md (2)

1-17: Well-structured introduction and clear overview

The document starts with proper frontmatter, includes a concise synopsis, and lists pre-requisite readings. The introduction effectively outlines the three main methods of interacting with a node: CLI, gRPC, and REST endpoints. This structure provides a clear roadmap for readers.


246-247: Update CosmJS documentation status

The statement about CosmJS documentation being a work in progress as of January 2021 may be outdated. Please verify the current status of the CosmJS documentation and update this information accordingly.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~247-~247: Possible missing article found.
Context: ...ary 2021, CosmJS documentation is still work in progress. ## Using the REST Endpoin...

(AI_HYDRA_LEO_MISSING_A)

docs/user/run-node/03-txs.md (8)

1-26: Well-structured introduction and CLI overview

The document provides a clear and concise introduction to generating, signing, and broadcasting transactions. The explanation of the CLI command and its steps is comprehensive and easy to follow.


27-38: Clear explanation of transaction generation

The segment effectively explains how to generate a transaction using the CLI with the --generate-only flag. The instructions for saving the unsigned transaction to a file are clear and helpful.


54-72: Clear explanation of multi-signer transactions

The segment provides a comprehensive explanation of signing transactions with multiple signers. The warning about limitations with SIGN_MODE_DIRECT is important, and the step-by-step guide for the multisign process is clear and helpful.


74-86: Concise explanation of transaction broadcasting

The segment effectively explains how to broadcast a transaction using the CLI. The information about the --broadcast-mode flag and its options is clear and helpful for users to understand the different broadcasting behaviors.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~84-~84: Loose punctuation mark.
Context: ...onse to receive from the node: * sync: the CLI waits for a CheckTx execution r...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~85-~85: Loose punctuation mark.
Context: ...eckTx execution response only. * async: the CLI returns immediately (transactio...

(UNLIKELY_OPENING_PUNCTUATION)


87-109: Clear instructions for encoding and decoding transactions

The segment provides clear and concise instructions for encoding and decoding transactions using the CLI. This information is valuable for users who need to work with encoded transactions, especially when interacting with gRPC or REST endpoints.

🧰 Tools
🪛 LanguageTool

[style] ~88-~88: Consider a shorter alternative to avoid wordiness.
Context: ...ght fail). ### Encoding a Transaction In order to broadcast a transaction using the gRPC ...

(IN_ORDER_TO_PREMIUM)


182-267: Detailed guide for programmatic transaction signing

This segment provides a comprehensive explanation of how to sign transactions programmatically using Go. The code snippets for signing transactions with multiple signers are detailed and demonstrate best practices. The two-step signing process is clearly explained, which is crucial for correct implementation.


270-353: Comprehensive guide for broadcasting and simulating transactions

This segment provides clear and detailed explanations for broadcasting transactions using gRPC and simulating transactions. The code snippets are informative, demonstrate proper error handling, and follow best practices. The inclusion of transaction simulation is particularly valuable for developers who need to estimate gas usage.


355-383: Clear instructions for broadcasting transactions via gRPC and REST

This segment provides concise and clear instructions for broadcasting transactions using both gRPC and REST endpoints. The example commands are helpful, and the segment correctly notes the limitations of these methods regarding transaction generation and signing.

🧰 Tools
🪛 LanguageTool

[style] ~357-~357: Consider a shorter alternative to avoid wordiness.
Context: ...tion using gRPC, only to broadcast one. In order to broadcast a transaction using gRPC, you...

(IN_ORDER_TO_PREMIUM)


[style] ~372-~372: Consider a shorter alternative to avoid wordiness.
Context: ...tion using REST, only to broadcast one. In order to broadcast a transaction using REST, you...

(IN_ORDER_TO_PREMIUM)

Comment on lines +1 to +33
---
sidebar_position: 1
---

# Guide to On-Chain Multisig transactions

## Overview

Multisignature **on-chain** accounts are an improvement over the previous implementation as these introduce a new set of
features.

### Threshold and quorums

The previous implementation only allowed for m-of-n multisig accounts, where m is the number of signatures required to
authorize a transaction and n is the total number of signers. The new implementation allows for more flexibility by
introducing threshold and quorum values. The quorum is the minimum voting power to make a proposal valid, while the
threshol is the minimum of voting power of YES votes to pass a proposal.

### Revote

Multisigs can allow members to change their votes after the initial vote. This is useful when a member changes their mind
or when new information becomes available.

### Early execution

Multisigs can be configured to allow for early execution of proposals. This is useful when a proposal is time-sensitive or
when the proposer wants to execute the proposal as soon as it reaches the threshold. It can also be used to mimic the
behavior of the previous multisig implementation.

### Voting period

Multisigs can be configured to have a voting period. This is the time window during which members can vote on a proposal.
If the proposal does not reach the threshold within the voting period, it is considered failed.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Improve clarity and fix typo in the Overview section

The overview provides a good introduction to on-chain multisig accounts. However, there are a few points that could be improved:

  1. There's a typo on line 17: "threshol" should be "threshold".
  2. The explanation of threshold and quorum could be more precise. Consider rephrasing the sentence on lines 16-17 to clarify the distinction between these two concepts.

Here's a suggested revision for lines 16-17:

-threshol is the minimum of voting power of YES votes to pass a proposal.
+threshold is the minimum voting power of YES votes required to pass a proposal.

Additionally, consider adding a brief example to illustrate the difference between quorum and threshold for better clarity.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
---
sidebar_position: 1
---
# Guide to On-Chain Multisig transactions
## Overview
Multisignature **on-chain** accounts are an improvement over the previous implementation as these introduce a new set of
features.
### Threshold and quorums
The previous implementation only allowed for m-of-n multisig accounts, where m is the number of signatures required to
authorize a transaction and n is the total number of signers. The new implementation allows for more flexibility by
introducing threshold and quorum values. The quorum is the minimum voting power to make a proposal valid, while the
threshol is the minimum of voting power of YES votes to pass a proposal.
### Revote
Multisigs can allow members to change their votes after the initial vote. This is useful when a member changes their mind
or when new information becomes available.
### Early execution
Multisigs can be configured to allow for early execution of proposals. This is useful when a proposal is time-sensitive or
when the proposer wants to execute the proposal as soon as it reaches the threshold. It can also be used to mimic the
behavior of the previous multisig implementation.
### Voting period
Multisigs can be configured to have a voting period. This is the time window during which members can vote on a proposal.
If the proposal does not reach the threshold within the voting period, it is considered failed.
---
sidebar_position: 1
---
# Guide to On-Chain Multisig transactions
## Overview
Multisignature **on-chain** accounts are an improvement over the previous implementation as these introduce a new set of
features.
### Threshold and quorums
The previous implementation only allowed for m-of-n multisig accounts, where m is the number of signatures required to
authorize a transaction and n is the total number of signers. The new implementation allows for more flexibility by
introducing threshold and quorum values. The quorum is the minimum voting power to make a proposal valid, while the
threshold is the minimum voting power of YES votes required to pass a proposal.
### Revote
Multisigs can allow members to change their votes after the initial vote. This is useful when a member changes their mind
or when new information becomes available.
### Early execution
Multisigs can be configured to allow for early execution of proposals. This is useful when a proposal is time-sensitive or
when the proposer wants to execute the proposal as soon as it reaches the threshold. It can also be used to mimic the
behavior of the previous multisig implementation.
### Voting period
Multisigs can be configured to have a voting period. This is the time window during which members can vote on a proposal.
If the proposal does not reach the threshold within the voting period, it is considered failed.

Comment on lines +109 to +159
## Proposals

#### Create proposal

In this multisig, every action is a proposal. We'll do a simple proposal to send tokens from the multisig to Alice.

```json
{
"proposal": {
"title": "Send 1000 tokens to Alice",
"summary": "Alice is a great multisig member so let's pay her.",
"messages": [
{
"@type": "/cosmos.bank.v1beta1.MsgSend",
"from_address": "cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu",
"to_address": "cosmos1pr26h2vq9adq3acvh37pz6wtk65u3y8798scq0",
"amount": [
{
"denom": "stake",
"amount": "1000"
}
]
}
]
}
}
```

> The content of messages was created using a simple `tx send` command and passing the flag `--generate-only` so we could copy the message.

Now we send the tx that will create the proposal:

```bash!
propcontents=$(cat createprop.json)
simd tx accounts execute cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.MsgCreateProposal $propcontents --fees 5stake --chain-id $CHAINID --keyring-backend test --home ./.testnets/node0/simd/ --from alice
```

This will again return a tx hash that we can use to find out the newly created proposal.

```bash!
simd q tx 5CA4420B67FB040B3DF2484CB875E030123662F43AE9958A9F8028C1281C8654 --output json | jq -r '.events[] | select(.type == "proposal_created") | .attributes[] | select(.key == "proposal_id") | .value'
```

In this case, because this is the first proposal, we'll get that the proposal ID is 0. We can use this to query it.

```bash!
simd q accounts query cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.QueryProposal '{"proposal_id":1}'
```

We get back all the details from the proposal, including the end of the voting period and the current status of the proposal.

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Address inconsistency in proposal ID references

The Proposals section provides a good explanation of how to create a proposal. However, there's an inconsistency in the proposal ID references that needs to be addressed:

  1. On line 149, the query suggests that the proposal ID is 0.
  2. On line 155, the query uses proposal ID 1.

This inconsistency might confuse users.

To resolve this, please ensure that the proposal ID is consistent throughout the document. If proposal IDs start at 0, update line 155 to use proposal ID 0:

-simd q accounts query cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.QueryProposal '{"proposal_id":1}' 
+simd q accounts query cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.QueryProposal '{"proposal_id":0}' 

Additionally, consider adding a note explaining that proposal IDs start at 0 to prevent any confusion for users.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Proposals
#### Create proposal
In this multisig, every action is a proposal. We'll do a simple proposal to send tokens from the multisig to Alice.
```json
{
"proposal": {
"title": "Send 1000 tokens to Alice",
"summary": "Alice is a great multisig member so let's pay her.",
"messages": [
{
"@type": "/cosmos.bank.v1beta1.MsgSend",
"from_address": "cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu",
"to_address": "cosmos1pr26h2vq9adq3acvh37pz6wtk65u3y8798scq0",
"amount": [
{
"denom": "stake",
"amount": "1000"
}
]
}
]
}
}
```
> The content of messages was created using a simple `tx send` command and passing the flag `--generate-only` so we could copy the message.
Now we send the tx that will create the proposal:
```bash!
propcontents=$(cat createprop.json)
simd tx accounts execute cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.MsgCreateProposal $propcontents --fees 5stake --chain-id $CHAINID --keyring-backend test --home ./.testnets/node0/simd/ --from alice
```
This will again return a tx hash that we can use to find out the newly created proposal.
```bash!
simd q tx 5CA4420B67FB040B3DF2484CB875E030123662F43AE9958A9F8028C1281C8654 --output json | jq -r '.events[] | select(.type == "proposal_created") | .attributes[] | select(.key == "proposal_id") | .value'
```
In this case, because this is the first proposal, we'll get that the proposal ID is 0. We can use this to query it.
```bash!
simd q accounts query cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.QueryProposal '{"proposal_id":1}'
```
We get back all the details from the proposal, including the end of the voting period and the current status of the proposal.
## Proposals
#### Create proposal
In this multisig, every action is a proposal. We'll do a simple proposal to send tokens from the multisig to Alice.
```json
{
"proposal": {
"title": "Send 1000 tokens to Alice",
"summary": "Alice is a great multisig member so let's pay her.",
"messages": [
{
"@type": "/cosmos.bank.v1beta1.MsgSend",
"from_address": "cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu",
"to_address": "cosmos1pr26h2vq9adq3acvh37pz6wtk65u3y8798scq0",
"amount": [
{
"denom": "stake",
"amount": "1000"
}
]
}
]
}
}
```
> The content of messages was created using a simple `tx send` command and passing the flag `--generate-only` so we could copy the message.
Now we send the tx that will create the proposal:
```bash!
propcontents=$(cat createprop.json)
simd tx accounts execute cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.MsgCreateProposal $propcontents --fees 5stake --chain-id $CHAINID --keyring-backend test --home ./.testnets/node0/simd/ --from alice
```
This will again return a tx hash that we can use to find out the newly created proposal.
```bash!
simd q tx 5CA4420B67FB040B3DF2484CB875E030123662F43AE9958A9F8028C1281C8654 --output json | jq -r '.events[] | select(.type == "proposal_created") | .attributes[] | select(.key == "proposal_id") | .value'
```
In this case, because this is the first proposal, we'll get that the proposal ID is 0. We can use this to query it.
```bash!
simd q accounts query cosmos1uds6tz96dxfllz7tz3s3tm8tlg6x95g0mc2987sx6psjz98qlpss89sheu cosmos.accounts.defaults.multisig.v1.QueryProposal '{"proposal_id":0}'
```
We get back all the details from the proposal, including the end of the voting period and the current status of the proposal.
🧰 Tools
🪛 Markdownlint

111-111: Expected: h3; Actual: h4
Heading levels should only increment by one level at a time

(MD001, heading-increment)

Comment on lines +116 to +121
#### Install Cosmos SDK


```bash
go get github.com/cosmos/cosmos-sdk@main
```
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Update Go installation instructions

The current instruction to install Cosmos SDK using go get is outdated. Consider updating it to use Go modules. For example:

-go get github.com/cosmos/cosmos-sdk@main
+go mod init example.com/myproject
+go get github.com/cosmos/cosmos-sdk@latest

This ensures better version management and compatibility.

Committable suggestion was skipped due to low confidence.

Comment on lines +385 to +387
## Using CosmJS (JavaScript & TypeScript)

CosmJS aims to build client libraries in JavaScript that can be embedded in web applications. Please see [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs) for more information. As of January 2021, CosmJS documentation is still work in progress.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Update needed for CosmJS information

The brief mention of CosmJS for JavaScript and TypeScript users is helpful, but the information appears to be outdated. The statement about the documentation being a work in progress is from January 2021, which is no longer current.

Consider updating this section with more recent information about CosmJS and its documentation status. If possible, provide more detailed guidance or links to up-to-date resources for JavaScript and TypeScript users.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~387-~387: Possible missing article found.
Context: ...ary 2021, CosmJS documentation is still work in progress.

(AI_HYDRA_LEO_MISSING_A)

Copy link
Contributor

@akhilkumarpilli akhilkumarpilli left a comment

Choose a reason for hiding this comment

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

ACK, please fix CI check failing with some dead links

@julienrbrt
Copy link
Member Author

ACK, please fix CI check failing with some dead links

image

Not introduced in this PR.

@julienrbrt julienrbrt added this pull request to the merge queue Oct 10, 2024
Merged via the queue into main with commit 7e51736 Oct 10, 2024
76 of 77 checks passed
@julienrbrt julienrbrt deleted the julien/docs-user branch October 10, 2024 07:31
mergify bot pushed a commit that referenced this pull request Oct 10, 2024
julienrbrt added a commit that referenced this pull request Oct 10, 2024
@akhilkumarpilli
Copy link
Contributor

akhilkumarpilli commented Oct 10, 2024

Not introduced in this PR.

deadlink1
deadlink2
These are those dead links which are added in this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport/v0.52.x PR scheduled for inclusion in the v0.52's next stable release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants