Repository: cosmos/cosmos-sdk
Pull request #24419: docs: unordered txs
Author: login: technicallyty
Created: 2025-04-08T01:31:42Z | Merged: 2025-04-08T19:23:47Z

# Description

Closes: #24412

adds some documentation around unordered transactions.

---

## 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](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title, you can find examples of the prefixes below:
    <!-- * `feat`: A new feature
    * `fix`: A bug fix
    * `docs`: Documentation only changes
    * `style`: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
    * `refactor`: A code change that neither fixes a bug nor adds a feature
    * `perf`: A code change that improves performance
    * `test`: Adding missing tests or correcting existing tests
    * `build`: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
    * `ci`: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
    * `chore`: Other changes that don't modify src or test files
    * `revert`: Reverts a previous commit -->
* [ ] confirmed `!` in the type prefix if API or client breaking change
* [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#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](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing)
* [ ] added a changelog entry to `CHANGELOG.md`
* [ ] updated the relevant documentation or specification, including comments for [documenting Go code](https://blog.golang.org/godoc)
* [ ] 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](../CONTRIBUTING.md#reviewer) for more information on how to review a pull request.

I have...

* [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) 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


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Documentation**
  - Updated transaction guides to reflect enhancements in the Cosmos SDK v0.53.0.
  - Introduced new sections explaining unordered transactions, including details on unique timeout timestamps and additional gas requirements.
  - Provided clear examples on how to configure and send unordered transactions.
  - Streamlined instructions by removing outdated information to improve clarity and usability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/docs/docs/learn/advanced/01-transactions.md b/docs/docs/learn/advanced/01-transactions.md
index 900d8b3fe182..9d9147f31b0e 100644
--- a/docs/docs/learn/advanced/01-transactions.md
+++ b/docs/docs/learn/advanced/01-transactions.md
@@ -25,19 +25,14 @@ When users want to interact with an application and make state changes (e.g. sen
 Transaction objects are Cosmos SDK types that implement the `Tx` interface
 
 ```go reference
-https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/types/tx_msg.go#L51-L56
+https://github.com/cosmos/cosmos-sdk/blob/v0.53.0-rc.2/types/tx_msg.go#L53-L58
 ```
 
 It contains the following methods:
 
 * **GetMsgs:** unwraps the transaction and returns a list of contained `sdk.Msg`s - one transaction may have one or multiple messages, which are defined by module developers.
-* **ValidateBasic:** lightweight, [_stateless_](../beginner/01-tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](./00-baseapp.md#checktx) and [`DeliverTx`](./00-baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth) module's `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. When [`runTx`](./00-baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself.
 
-:::note
-This function is different from the deprecated `sdk.Msg` [`ValidateBasic`](../beginner/01-tx-lifecycle.md#ValidateBasic) methods, which was performing basic validity checks on messages only.
-:::
-
-As a developer, you should rarely manipulate `Tx` directly, as `Tx` is really an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation).
+As a developer, you should rarely manipulate `Tx` directly, as `Tx` is an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation).
 
 ### Signing Transactions
 
@@ -133,10 +128,10 @@ While messages contain the information for state transition logic, a transaction
 
 ### Transaction Generation
 
-The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can freely set to generate the desired transaction:
+The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can set to generate the desired transaction:
 
 ```go reference
-https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/client/tx_config.go#L40-L53
+https://github.com/cosmos/cosmos-sdk/blob/v0.53.0-rc.2/client/tx_config.go#L39-L57
 ```
 
 * `Msg`s, the array of [messages](#messages) included in the transaction.
@@ -144,6 +139,8 @@ https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/client/tx_config.go#L4
 * `Memo`, a note or comment to send with the transaction.
 * `FeeAmount`, the maximum amount the user is willing to pay in fees.
 * `TimeoutHeight`, block height until which the transaction is valid.
+* `Unordered`, an option indicating this transaction may be executed in any order (requires TimeoutTimestamp to be set)
+* `TimeoutTimestamp`, the timeout timestamp (unordered nonce) of the transaction (required to be used with Unordered).
 * `Signatures`, the array of signatures from all signers of the transaction.
 
 As there are currently two sign modes for signing transactions, there are also two implementations of `TxBuilder`:
@@ -154,7 +151,7 @@ As there are currently two sign modes for signing transactions, there are also t
 However, the two implementations of `TxBuilder` should be hidden away from end-users, as they should prefer using the overarching `TxConfig` interface:
 
 ```go reference
-https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/client/tx_config.go#L24-L34
+https://github.com/cosmos/cosmos-sdk/blob/v0.53.0-rc.2/client/tx_config.go#L27-L37
 ```
 
 `TxConfig` is an app-wide configuration for managing transactions. Most importantly, it holds the information about whether to sign each transaction with `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. By calling `txBuilder := txConfig.NewTxBuilder()`, a new `TxBuilder` will be created with the appropriate sign mode.
@@ -204,3 +201,21 @@ An example can be seen [here](../../user/run-node/03-txs.md#using-rest)
 #### CometBFT RPC
 
 The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so.
+
+### Unordered Transactions
+
+:::tip
+
+Looking to enable unordered transactions on your chain? 
+Check out the [v0.53.0 Upgrade Guide](https://docs.cosmos.network/v0.53/build/migrations/upgrade-guide#enable-unordered-transactions-optional)
+
+:::
+
+Beginning with Cosmos SDK v0.53.0, chains may enable unordered transaction support. 
+Unordered transactions work by using a timestamp as the transaction's nonce value.
+The timestamp must be greater than the current block time and not exceed the chain's configured max unordered timeout timestamp duration.
+Senders must use a unique timestamp for each distinct transaction. The difference may be as small as a nanosecond, however.
+
+These unique timestamps serve as a one-shot nonce, and their lifespan in state is short-lived.
+Upon transaction inclusion, an entry consisting of timeout timestamp and account address will be recorded to state. 
+Once the block time is passed the timeout timestamp value, the entry will be removed. This ensures that unordered nonces do not indefinitely fill up the chain's storage.
diff --git a/docs/docs/user/run-node/03-txs.md b/docs/docs/user/run-node/03-txs.md
index f459acb88014..022cdcc192c4 100644
--- a/docs/docs/user/run-node/03-txs.md
+++ b/docs/docs/user/run-node/03-txs.md
@@ -179,6 +179,40 @@ func sendTx() error {
 
 At this point, `TxBuilder`'s underlying transaction is ready to be signed.
 
+#### Generating an Unordered Transaction
+
+Starting with Cosmos SDK v0.53.0, users may send unordered transactions to chains that have the feature enabled.
+
+Using the example above, we can set the required fields to mark a transaction as unordered. 
+By default, unordered transactions charge an extra 2240 units of gas to offset the additional storage overhead that supports their functionality.
+The extra units of gas are customizable and therefore vary by chain, so be sure to check the chain's ante handler for the gas value set, if any.
+
+```go
+func sendTx() error {
+    // --snip--
+    expiration := 5 * time.Minute
+    txBuilder.SetUnordered(true)
+    txBuilder.SetTimeoutTimestamp(time.Now().Add(expiration + (1 * time.Nanosecond)))
+}
+```
+
+Unordered transactions from the same account must use a unique timeout timestamp value. The difference between each timeout timestamp value may be as small as a nanosecond, however.
+
+```go
+import (
+	"github.com/cosmos/cosmos-sdk/client"
+)
+
+func sendMessages(txBuilders []client.TxBuilder) error {
+    // --snip--
+    expiration := 5 * time.Minute
+    for _, txb := range txBuilders {
+        txb.SetUnordered(true)
+        txb.SetTimeoutTimestamp(time.Now().Add(expiration + (1 * time.Nanosecond)))
+    }
+}
+```
+
 ### Signing a Transaction
 
 We set encoding config to use Protobuf, which will use `SIGN_MODE_DIRECT` by default. As per [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md), each signer needs to sign the `SignerInfo`s of all other signers. This means that we need to perform two steps sequentially:


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🧹 Nitpick comments (4)</summary><blockquote>

<details>
<summary>docs/docs/user/run-node/03-txs.md (3)</summary><blockquote>

`190-197`: **Code Snippet for `sendTx`: Validate Timestamp Setup**  
The Go code snippet correctly demonstrates using `txBuilder.SetUnordered(true)` and `txBuilder.SetTimeoutTimestamp(time.Now())`. As a suggestion, consider adding a note that in production scenarios, if multiple unordered transactions may be generated concurrently, additional care (or a more robust mechanism) might be required to guarantee timestamp uniqueness.

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

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

192-192: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

197-197: Hard tabs
Column: 1

(MD010, no-hard-tabs)

</details>

</details>

---

`192-198`: **Style: Replace Hard Tabs with Spaces**  
Static analysis indicates that hard tabs are used in this snippet (notably around lines 192, 197, and 198). Please replace hard tabs with spaces to comply with markdown lint style guidelines.

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

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

192-192: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

197-197: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

198-198: Hard tabs
Column: 1

(MD010, no-hard-tabs)

</details>

</details>

---

`206-211`: **Style Reminder for `sendMessages` Snippet**  
Additionally, hard tabs were detected around lines 206–211. Please update these to spaces to ensure consistency with the documentation’s formatting standards.

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

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

206-206: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

211-211: Hard tabs
Column: 1

(MD010, no-hard-tabs)

</details>

</details>

</blockquote></details>
<details>
<summary>docs/docs/learn/advanced/01-transactions.md (1)</summary><blockquote>

`131-142`: **Language and Punctuation Refinement Needed**  
In the description of the `TxBuilder` interface (including the bullet list of fields), LanguageTool suggests minor refinements—such as adjusting prepositions and punctuation (e.g., for bullets on `GasLimit`, `Memo`, `FeeAmount`, `TimeoutHeight`, and `Unordered`). Please review and consider a slight rewording to improve clarity and consistency.

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

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

[uncategorized] ~131-~131: The preposition “to” seems more likely in this position.
Context: ...interface contains data closely related with the generation of transactions, which a...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION)

---

[uncategorized] ~138-~138: Loose punctuation mark.
Context: ...ncluded in the transaction. * `GasLimit`, option chosen by the users for how to c...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~139-~139: Loose punctuation mark.
Context: ...much gas they will need to pay. * `Memo`, a note or comment to send with the tran...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~140-~140: Loose punctuation mark.
Context: ...send with the transaction. * `FeeAmount`, the maximum amount the user is willing ...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~141-~141: Loose punctuation mark.
Context: ...illing to pay in fees. * `TimeoutHeight`, block height until which the transactio...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~142-~142: Loose punctuation mark.
Context: ... the transaction is valid. * `Unordered`, an option indicating this transaction m...

(UNLIKELY_OPENING_PUNCTUATION)

</details>

</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3f887cd9475c436099b249f303c46591aa3b73d4 and ec051568e7c6a8e06131d7e9d7ac68a9e5f71a74.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `docs/docs/learn/advanced/01-transactions.md` (4 hunks)
* `docs/docs/user/run-node/03-txs.md` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

<details>
<summary>docs/docs/user/run-node/03-txs.md</summary>

192-192: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

197-197: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

198-198: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

206-206: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

211-211: Hard tabs
Column: 1

(MD010, no-hard-tabs)

</details>

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

<details>
<summary>docs/docs/learn/advanced/01-transactions.md</summary>

[uncategorized] ~131-~131: The preposition “to” seems more likely in this position.
Context: ...interface contains data closely related with the generation of transactions, which a...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION)

---

[uncategorized] ~138-~138: Loose punctuation mark.
Context: ...ncluded in the transaction. * `GasLimit`, option chosen by the users for how to c...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~139-~139: Loose punctuation mark.
Context: ...much gas they will need to pay. * `Memo`, a note or comment to send with the tran...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~140-~140: Loose punctuation mark.
Context: ...send with the transaction. * `FeeAmount`, the maximum amount the user is willing ...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~141-~141: Loose punctuation mark.
Context: ...illing to pay in fees. * `TimeoutHeight`, block height until which the transactio...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~142-~142: Loose punctuation mark.
Context: ... the transaction is valid. * `Unordered`, an option indicating this transaction m...

(UNLIKELY_OPENING_PUNCTUATION)

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (5)</summary>

* GitHub Check: build (arm64)
* GitHub Check: build (amd64)
* GitHub Check: Check docs build
* GitHub Check: markdown-link-check
* GitHub Check: Summary

</details>

<details>
<summary>🔇 Additional comments (6)</summary><blockquote>

<details>
<summary>docs/docs/user/run-node/03-txs.md (2)</summary>

`182-189`: **New Section for Unordered Transactions Added**  
The new unordered transactions section provides a clear and concise introduction. It explains that, beginning with Cosmos SDK v0.53.0, unordered transactions are enabled along with the extra gas cost and the necessity for a unique timeout timestamp.

---

`199-199`: **Clarification on Timeout Timestamps**  
The accompanying text appropriately stresses the need for a unique timeout timestamp for each unordered transaction. This explanation reinforces the importance of nonce uniqueness, even down to a nanosecond difference.

</details>
<details>
<summary>docs/docs/learn/advanced/01-transactions.md (4)</summary>

`27-29`: **Updated Tx Interface Reference**  
The code reference to the `Tx` interface now correctly points to version v0.53.0-rc.2 of the Cosmos SDK. This update helps ensure that the documentation remains in sync with the latest codebase.

---

`141-144`: **New TxBuilder Fields Documented**  
The new bullet points for the `Unordered` flag and `TimeoutTimestamp` are clearly added. This documentation update effectively informs developers about the new requirements related to unordered transactions in the Cosmos SDK.

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

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

[uncategorized] ~141-~141: Loose punctuation mark.
Context: ...illing to pay in fees. * `TimeoutHeight`, block height until which the transactio...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~142-~142: Loose punctuation mark.
Context: ... the transaction is valid. * `Unordered`, an option indicating this transaction m...

(UNLIKELY_OPENING_PUNCTUATION)

---

[uncategorized] ~144-~144: Loose punctuation mark.
Context: ... be used with Unordered). * `Signatures`, the array of signatures from all signer...

(UNLIKELY_OPENING_PUNCTUATION)

</details>

</details>

---

`153-155`: **Updated TxConfig Code Reference**  
The reference to `TxConfig` has been updated to point to the latest documentation (v0.53.0-rc.2). This helps maintain accuracy as developers refer to current implementations.

---

`205-212`: **New Unordered Transactions Section**  
The newly added “Unordered Transactions” section clearly explains the operational details—such as the use of timestamps as nonces, the requirement that timestamps exceed the current block time, and the short-lived nature of the unordered nonce storage. This addition enhances the overall understanding of transaction processing in the Cosmos SDK.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T01:36:25Z
user: login: aljo242
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T15:20:08Z
user: login: aljo242
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T15:21:26Z
user: login: technicallyty
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T16:37:17Z
user: login: technicallyty
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T16:38:05Z
user: login: technicallyty
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T16:38:28Z
user: login: aljo242
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T19:02:41Z

Review comments:
diff_hunk: @@ -179,6 +179,42 @@ func sendTx() error {
 
 At this point, `TxBuilder`'s underlying transaction is ready to be signed.
 
+### Generating an Unordered Transaction
+
+Starting with Cosmos SDK v0.53.0, users may send unordered transactions to chains that have the feature enabled.
+
+Using the example above, we can set the required fields to mark a transaction as unordered. 
+By default, unordered transactions charge an extra 2240 units of gas to offset the additional storage overhead that supports their functionality.
+The extra units of gas are customizable and therefore vary by chain, so be sure to check the chain's ante handler for the gas value set, if any.
+
+```go
+import (
+	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
+)
+
+func sendTx() error {
+    // --snip--
+	txBuilder.SetUnordered(true)
+	txBuilder.SetTimeoutTimestamp(time.Now())
+}
+```
+
+Unordered transactions from the same account must use a unique timeout timestamp value. The difference between each timeout timestamp value may be as small as a nanosecond, however.
+
+```go
+import (
+	"github.com/cosmos/cosmos-sdk/client"
+)
+
+func sendMessages(txBuilders []client.TxBuilder) error {
+    // --snip--
+	for _, txb := range txBuilders {
+        txb.SetUnordered(true)
path: docs/docs/user/run-node/03-txs.md
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Critical: Correct the Go Time Arithmetic**  
In the `sendMessages` function, the expression `time.Now() + 1 * time.Nanosecond` is invalid in Go because `time.Time` does not support direct addition with a `time.Duration`. Please update the code to use the `.Add` method:
  
```diff
-        txb.SetTimeoutTimestamp(time.Now() + 1 * time.Nanosecond)
+        txb.SetTimeoutTimestamp(time.Now().Add(1 * time.Nanosecond))
```  



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **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.

`````suggestion
import (
	"github.com/cosmos/cosmos-sdk/client"
	"time"
)

func sendMessages(txBuilders []client.TxBuilder) error {
    // --snip--
	for _, txb := range txBuilders {
        txb.SetUnordered(true)
        txb.SetTimeoutTimestamp(time.Now().Add(1 * time.Nanosecond))
    }
    // --snip--
}
`````

</details>

<!-- suggestion_end -->

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

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

206-206: Hard tabs
Column: 1

(MD010, no-hard-tabs)

---

211-211: Hard tabs
Column: 1

(MD010, no-hard-tabs)

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-08T01:36:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -204,3 +201,14 @@ An example can be seen [here](../../user/run-node/03-txs.md#using-rest)
 #### CometBFT RPC
 
 The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so.
+
+### Unordered Transactions
+
+Beginning with Cosmos SDK v0.53.0, chains may enable unordered transaction support. 
path: docs/docs/learn/advanced/01-transactions.md
user: login: aljo242
body: can we link to guide for how to enable
created_at: 2025-04-08T15:20:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -179,6 +179,42 @@ func sendTx() error {
 
 At this point, `TxBuilder`'s underlying transaction is ready to be signed.
 
+### Generating an Unordered Transaction
+
+Starting with Cosmos SDK v0.53.0, users may send unordered transactions to chains that have the feature enabled.
+
+Using the example above, we can set the required fields to mark a transaction as unordered. 
+By default, unordered transactions charge an extra 2240 units of gas to offset the additional storage overhead that supports their functionality.
+The extra units of gas are customizable and therefore vary by chain, so be sure to check the chain's ante handler for the gas value set, if any.
+
+```go
+import (
+	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
+)
+
+func sendTx() error {
+    // --snip--
+	txBuilder.SetUnordered(true)
+	txBuilder.SetTimeoutTimestamp(time.Now())
+}
path: docs/docs/user/run-node/03-txs.md
user: login: aljo242
body: I don't think i understand this snippet.  Plus wont this tx be expired by the time it hits the node because the timeout is `time.Now()`?
created_at: 2025-04-08T15:21:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -204,3 +201,14 @@ An example can be seen [here](../../user/run-node/03-txs.md#using-rest)
 #### CometBFT RPC
 
 The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so.
+
+### Unordered Transactions
+
+Beginning with Cosmos SDK v0.53.0, chains may enable unordered transaction support. 
path: docs/docs/learn/advanced/01-transactions.md
user: login: technicallyty
body: done
created_at: 2025-04-08T16:37:17Z
author_association: MEMBER
diff_hunk: @@ -179,6 +179,42 @@ func sendTx() error {
 
 At this point, `TxBuilder`'s underlying transaction is ready to be signed.
 
+### Generating an Unordered Transaction
+
+Starting with Cosmos SDK v0.53.0, users may send unordered transactions to chains that have the feature enabled.
+
+Using the example above, we can set the required fields to mark a transaction as unordered. 
+By default, unordered transactions charge an extra 2240 units of gas to offset the additional storage overhead that supports their functionality.
+The extra units of gas are customizable and therefore vary by chain, so be sure to check the chain's ante handler for the gas value set, if any.
+
+```go
+import (
+	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
+)
+
+func sendTx() error {
+    // --snip--
+	txBuilder.SetUnordered(true)
+	txBuilder.SetTimeoutTimestamp(time.Now())
+}
path: docs/docs/user/run-node/03-txs.md
user: login: technicallyty
body: it's meant to build off the tutorial from a couple lines above. i changed the heading of `Generating an Unordered Transaction` to be a subsection of the `Generating a Transaction`, so maybe its a little more clear
created_at: 2025-04-08T16:38:05Z
author_association: MEMBER
diff_hunk: @@ -179,6 +179,42 @@ func sendTx() error {
 
 At this point, `TxBuilder`'s underlying transaction is ready to be signed.
 
+### Generating an Unordered Transaction
+
+Starting with Cosmos SDK v0.53.0, users may send unordered transactions to chains that have the feature enabled.
+
+Using the example above, we can set the required fields to mark a transaction as unordered. 
+By default, unordered transactions charge an extra 2240 units of gas to offset the additional storage overhead that supports their functionality.
+The extra units of gas are customizable and therefore vary by chain, so be sure to check the chain's ante handler for the gas value set, if any.
+
+```go
+import (
+	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
+)
+
+func sendTx() error {
+    // --snip--
+	txBuilder.SetUnordered(true)
+	txBuilder.SetTimeoutTimestamp(time.Now())
+}
path: docs/docs/user/run-node/03-txs.md
user: login: technicallyty
body: fixed the timeout also, lol brainfart
created_at: 2025-04-08T16:38:28Z
author_association: MEMBER

PR comments:
user: login: ironbird-prod[bot]
created_at: 2025-04-08T01:31:44Z
body: <details><summary>Ironbird - launch a network</summary>
To use Ironbird, you can use the following commands:
  
- /ironbird start <chain> <loadtest> - Launch a testnet with the specified chain and load test configuration.
- /ironbird chains - List of chain images that ironbird can use to spin-up testnet
- /ironbird loadtests - List of load test modes that ironbird can run against testnet
</details>
author_association: NONE
user: login: coderabbitai[bot]
created_at: 2025-04-08T01:36:21Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

<details>
<summary>📝 Walkthrough</summary>

## Walkthrough
This pull request updates the Cosmos SDK documentation to include comprehensive details on unordered transactions. The changes involve updating reference links, modifying the `TxBuilder` interface documentation with new fields (`Unordered` and `TimeoutTimestamp`), and adding sections that explain the functionality, requirements, and code examples for unordered transactions including additional gas costs.

## Changes

| File(s)                                      | Change Summary                                                                                                                                              |
|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| docs/.../01-transactions.md                  | Updated reference links to newer Cosmos SDK versions; modified `TxBuilder` method descriptions to include `Unordered` and `TimeoutTimestamp`; added a section on unordered transactions. |
| docs/.../03-txs.md                           | Added a new section on generating unordered transactions with explanations, code examples, and details on gas cost implications.                             |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
  participant User
  participant TxBuilder
  participant Node
  User->>TxBuilder: Build Transaction with Unordered & TimeoutTimestamp fields
  TxBuilder->>Node: Submit transaction
  Node-->>TxBuilder: Process transaction (handle unordered if flag set)
  TxBuilder-->>User: Return transaction result
```

## Assessment against linked issues

| Objective                                                   | Addressed | Explanation                                                 |
|-------------------------------------------------------------|-----------|-------------------------------------------------------------|
| Create user doc for unordered transactions (#24412)       | ✅        |                                                             |

</details>

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=cosmos/cosmos-sdk&utm_content=24419):

> ‼️ **IMPORTANT**
> Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.
- 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 generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

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

### CodeRabbit Configuration File (`.coderabbit.yaml`)

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

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR