diff --git a/academy/0.0-B9lab-Blockchains/1_blockchain.md b/academy/0.0-B9lab-Blockchains/1_blockchain.md index 18e50695ab..779b3bfbd8 100644 --- a/academy/0.0-B9lab-Blockchains/1_blockchain.md +++ b/academy/0.0-B9lab-Blockchains/1_blockchain.md @@ -5,6 +5,8 @@ description: A universe to discover tag: fast-track --- +# Blockchain 101 + This first chapter demystifies the foundations of blockchain technology. This background information will be important as you progress through the course. diff --git a/academy/0.0-B9lab-Blockchains/2_public.md b/academy/0.0-B9lab-Blockchains/2_public.md index 1e87b007d4..0f691f81bf 100644 --- a/academy/0.0-B9lab-Blockchains/2_public.md +++ b/academy/0.0-B9lab-Blockchains/2_public.md @@ -1,11 +1,11 @@ --- title: "Blockchain History" order: 3 -description: A Brief History of Blockchain Technology +description: A brief history of blockchain technology tag: fast-track --- -# A Brief History of Blockchain +# Blockchain History To fully appreciate Cosmos, it is helpful to understand the origins of blockchain technology, the advances that have unfolded, and the intractable challenges of other blockchain protocols which Cosmos decisively solves. diff --git a/academy/0.0-B9lab-Blockchains/3_managed.md b/academy/0.0-B9lab-Blockchains/3_managed.md index af2f0f26e3..da851d2227 100644 --- a/academy/0.0-B9lab-Blockchains/3_managed.md +++ b/academy/0.0-B9lab-Blockchains/3_managed.md @@ -98,7 +98,7 @@ The Cosmos SDK enables the creation of application-specific blockchains. That is -## Managed Blockchain Networks +## Managed blockchain networks Managed networks, just like public networks, rely on blockchain data structures. Unlike public blockchain networks, they do not necessarily need to mitigate the Byzantine Generals Problem because they operate in a predictable environment with elements of authority, hierarchy, and accountability. diff --git a/academy/0.0-B9lab-Blockchains/4_consensus.md b/academy/0.0-B9lab-Blockchains/4_consensus.md index e0a6cb977a..b63b51750c 100644 --- a/academy/0.0-B9lab-Blockchains/4_consensus.md +++ b/academy/0.0-B9lab-Blockchains/4_consensus.md @@ -1,7 +1,7 @@ --- -title: "Consensus" +title: "Consensus in Distributed Networks" order: 5 -description: An Introduction to Distributed Consensus +description: An introduction to distributed consensus tag: fast-track --- diff --git a/academy/0.0-B9lab-Blockchains/5_crypto.md b/academy/0.0-B9lab-Blockchains/5_crypto.md index 0b5219ccb6..610a2479dd 100644 --- a/academy/0.0-B9lab-Blockchains/5_crypto.md +++ b/academy/0.0-B9lab-Blockchains/5_crypto.md @@ -1,11 +1,11 @@ --- title: "Cryptography" order: 6 -description: Cryptographic Foundations +description: Cryptographic fundamentals of blockchain - Public-key cryptography tag: fast-track --- -# Cryptographic fundamentals of blockchain: Public-key cryptography +# Cryptographic fundamentals of blockchain - Public-key cryptography Modern cryptography leverages computer capabilities to make the power of certain mathematical functions available for practical use. Without modern cryptography, there would be no blockchain technology. diff --git a/academy/4-my-own-chain/can-play.md b/academy/4-my-own-chain/can-play.md index cec943bfad..d8f25340d1 100644 --- a/academy/4-my-own-chain/can-play.md +++ b/academy/4-my-own-chain/can-play.md @@ -7,18 +7,22 @@ tag: deep-dive # Query - Help Find a Correct Move - + Make sure you have everything you need before proceeding: * You understand the concepts of [queries](../2-main-concepts/queries.md) and [Protobuf](../2-main-concepts/protobuf.md). * You have Go installed. * You have the checkers blockchain codebase up to gas metering. If not, follow the [previous steps](./gas-meter.md) or check out [the relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/gas-meter). + + + + -In this section: +In this section, you will: -* Improve usability with queries -* Create a battery of integration tests +* Improve usability with queries. +* Create a battery of integration tests. diff --git a/academy/4-my-own-chain/cosmjs-gui.md b/academy/4-my-own-chain/cosmjs-gui.md index 69c9a41a76..b6b253245b 100644 --- a/academy/4-my-own-chain/cosmjs-gui.md +++ b/academy/4-my-own-chain/cosmjs-gui.md @@ -7,7 +7,7 @@ tag: deep-dive # CosmJS - Plug in your GUI - + Make sure you have all you need before proceeding: diff --git a/academy/4-my-own-chain/cosmjs-messages.md b/academy/4-my-own-chain/cosmjs-messages.md index 7a57f00532..fdc741c3d9 100644 --- a/academy/4-my-own-chain/cosmjs-messages.md +++ b/academy/4-my-own-chain/cosmjs-messages.md @@ -7,7 +7,7 @@ tag: deep-dive # CosmJS - Create the messages for your GUI - + Make sure you have all you need before proceeding: diff --git a/academy/4-my-own-chain/cosmjs-objects.md b/academy/4-my-own-chain/cosmjs-objects.md index 8038ed4303..da21e84d37 100644 --- a/academy/4-my-own-chain/cosmjs-objects.md +++ b/academy/4-my-own-chain/cosmjs-objects.md @@ -7,7 +7,7 @@ tag: deep-dive # CosmJS - Create the objects for your GUI - + Make sure you have everything you need before proceeding: diff --git a/academy/4-my-own-chain/cosmjs.md b/academy/4-my-own-chain/cosmjs.md index 5bb69a1fdb..2b1748f42a 100644 --- a/academy/4-my-own-chain/cosmjs.md +++ b/academy/4-my-own-chain/cosmjs.md @@ -7,7 +7,7 @@ tag: deep-dive # CosmJS - + CosmJS provides a TypeScript library for the Cosmos SDK. Reading the following sections as a preparation is recommended: diff --git a/academy/4-my-own-chain/cosmwasm.md b/academy/4-my-own-chain/cosmwasm.md index c0a95d043e..df9de35cd9 100644 --- a/academy/4-my-own-chain/cosmwasm.md +++ b/academy/4-my-own-chain/cosmwasm.md @@ -7,7 +7,7 @@ tag: deep-dive # CosmWasm - + Discover how multi-chain smart contracts become possible with CosmWasm. The following sections are recommended as a preparation: diff --git a/academy/4-my-own-chain/create-handling.md b/academy/4-my-own-chain/create-handling.md index 21fe1d78cd..e90a0e5f60 100644 --- a/academy/4-my-own-chain/create-handling.md +++ b/academy/4-my-own-chain/create-handling.md @@ -7,17 +7,21 @@ tag: deep-dive # Message Handler - Create and Save a Game Properly - + Make sure you have everything you need before proceeding: * You have Go installed. * You have the checkers blockchain codebase with `MsgCreateGame` created by Ignite CLI. If not, follow the [previous steps](./create-message.md) and check out [the relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/create-game-msg). -In this section: + + + + +In this section, you will: -* Add application rules- the rules of Checkers -* Add a Message Handler to create game and return it's ID +* Add application rules- the rules of checkers. +* Add a Message Handler to create game and return its ID. diff --git a/academy/4-my-own-chain/create-message.md b/academy/4-my-own-chain/create-message.md index c16b1dd968..4918515999 100644 --- a/academy/4-my-own-chain/create-message.md +++ b/academy/4-my-own-chain/create-message.md @@ -7,7 +7,7 @@ tag: deep-dive # Message - Create a Message to Create a Game - + Make sure you have everthing you need before proceeding: @@ -15,12 +15,16 @@ Make sure you have everthing you need before proceeding: * Go is installed. * You have the checkers blockchain scaffold with the `StoredGame` and its helpers. If not, follow the [previous steps](./stored-game.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/full-game-object). -In this section: + + + -* Create Game Protobuf object -* Create Game Protobuf service interface -* Extend your unit tests -* Interact via the CLI +In this section, you will: + +* Create a game Protobuf object. +* Create a game Protobuf service interface. +* Extend your unit tests. +* Interact via the CLI. diff --git a/academy/4-my-own-chain/events.md b/academy/4-my-own-chain/events.md index 23f46d34c2..74c64ca776 100644 --- a/academy/4-my-own-chain/events.md +++ b/academy/4-my-own-chain/events.md @@ -7,19 +7,23 @@ tag: deep-dive # Events - Emitting Game Information - + Make sure you have everything you need before proceeding: * You understand the concepts of [events](../2-main-concepts/events.md). * Go is installed. * You have the checkers blockchain codebase with `MsgPlayMove` and its handling. If not, follow the [previous steps](./play-game.md) or check out [the relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/play-move-handler). + + + + -In this section: +In this section, you will: -* Define event types -* Emit events -* Extend unit tests +* Define event types. +* Emit events. +* Extend unit tests. diff --git a/academy/4-my-own-chain/external-gui.md b/academy/4-my-own-chain/external-gui.md index 5c04cd6ffd..78f9c972de 100644 --- a/academy/4-my-own-chain/external-gui.md +++ b/academy/4-my-own-chain/external-gui.md @@ -1,13 +1,13 @@ --- -title: Get an external GUI +title: Get an External GUI order: 24 description: Find a Checkers GUI before you integrate with CosmJS tag: deep-dive --- -# Get an external GUI +# Get an External GUI - + Make sure you have everything you need before proceeding: diff --git a/academy/4-my-own-chain/game-deadline.md b/academy/4-my-own-chain/game-deadline.md index 24ee79a871..0dc8386b4d 100644 --- a/academy/4-my-own-chain/game-deadline.md +++ b/academy/4-my-own-chain/game-deadline.md @@ -7,7 +7,7 @@ tag: deep-dive # Store Field - Keep an Up-To-Date Game Deadline - + Make sure you have everything you need before proceeding: @@ -15,11 +15,15 @@ Make sure you have everything you need before proceeding: * Go is installed. * You have the checkers blockchain codebase with the game FIFO. If not, follow the [previous steps](./game-fifo.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/game-fifo). -In this section: + + + + +In this section, you will: -* Implement a deadline -* Work with dates -* Extend your unit tests +* Implement a deadline. +* Work with dates. +* Extend your unit tests. diff --git a/academy/4-my-own-chain/game-fifo.md b/academy/4-my-own-chain/game-fifo.md index 3cb906decd..26f6f2231a 100644 --- a/academy/4-my-own-chain/game-fifo.md +++ b/academy/4-my-own-chain/game-fifo.md @@ -7,7 +7,7 @@ tag: deep-dive # Store FIFO - Put Your Games in Order - + Make sure you have everything you need before proceeding: @@ -15,8 +15,12 @@ Make sure you have everything you need before proceeding: * Go is installed. * You have the checkers blockchain codebase with `MsgRejectGame` and its handling. If not, follow the [previous steps](./reject-game.md) or check out [the relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/reject-game-handler). -In this section: + + + +In this section, you will deal with: + * The FIFO data structure * FIFO unit tests diff --git a/academy/4-my-own-chain/game-forfeit.md b/academy/4-my-own-chain/game-forfeit.md index 96f62f0bd8..493b42eceb 100644 --- a/academy/4-my-own-chain/game-forfeit.md +++ b/academy/4-my-own-chain/game-forfeit.md @@ -1,25 +1,29 @@ --- -title: EndBlock - Auto-expiring Games +title: EndBlock - Auto-Expiring Games order: 14 description: You enforce the expiration of games tag: deep-dive --- -# EndBlock - Auto-expiring Games +# EndBlock - Auto-Expiring Games - + Make sure you have everything you need before proceeding: * You understand the concepts of [ABCI](../2-main-concepts/architecture.md). * Go is installed. * You have the checkers blockchain codebase with the elements necessary for forfeit. If not, follow the [previous steps](./game-winner.md) or check out [the relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/game-winner). + + + + -In this section: +In this section, you will: -* Begin block and End block operations -* Forfeiting games automatically -* Garbage collection +* Do begin block and end block operations. +* Forfeit games automatically. +* Do garbage collection. diff --git a/academy/4-my-own-chain/game-wager.md b/academy/4-my-own-chain/game-wager.md index 5623f9c1de..a6d5b45791 100644 --- a/academy/4-my-own-chain/game-wager.md +++ b/academy/4-my-own-chain/game-wager.md @@ -7,20 +7,24 @@ tag: deep-dive # Token - Let Players Set a Wager - + Make sure you have everything you need before proceeding: * You understand the concepts of [modules](../2-main-concepts/modules.md)), [keepers](../2-main-concepts/multistore-keepers.md), and [Protobuf](../2-main-concepts/protobuf.md). * Go is installed. * You have the checkers blockchain codebase up to game expiry handling. If not, follow the [previous steps](./game-forfeit.md) or check out [the relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/forfeit-game). + + + + -In this section: +In this section, you will: -* Add wagers -* The Bank module -* Handling money -* Integration tests +* Add wagers. +* Work with the Bank module. +* Handle money. +* Do integration tests. diff --git a/academy/4-my-own-chain/game-winner.md b/academy/4-my-own-chain/game-winner.md index 521f7f84e7..6d2d2d31a3 100644 --- a/academy/4-my-own-chain/game-winner.md +++ b/academy/4-my-own-chain/game-winner.md @@ -7,18 +7,22 @@ tag: deep-dive # Store Field - Record the Game Winner - + Make sure you have everything you need before proceeding: * You understand the concepts of [Protobuf](../2-main-concepts/protobuf.md). * Go is installed. * You have the checkers blockchain codebase with the deadline field and its handling. If not, follow the [previous steps](./game-deadline.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/game-deadline). + + -In this section: + -* Check for a game winner -* Extend unit tests +In this section, you will: + +* Check for a game winner. +* Extend unit tests. diff --git a/academy/4-my-own-chain/gas-meter.md b/academy/4-my-own-chain/gas-meter.md index 50df8d4e67..7e3f003603 100644 --- a/academy/4-my-own-chain/gas-meter.md +++ b/academy/4-my-own-chain/gas-meter.md @@ -7,19 +7,23 @@ tag: deep-dive # Gas - Incentivize Players - + Make sure you have everything you need before proceeding: * You understand the concept of gas. * Go is installed. * You have the checkers blockchain codebase with the game wager and its handling. If not, follow the [previous steps](./game-wager.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/game-wager). + + + + -In this section: +In this section, you will: -* Add transaction fees -* Set fees and add metering -* Integration tests +* Add transaction fees. +* Set fees and add metering. +* Do integration tests. diff --git a/academy/4-my-own-chain/ignitecli.md b/academy/4-my-own-chain/ignitecli.md index 9e89da9768..64dbb743be 100644 --- a/academy/4-my-own-chain/ignitecli.md +++ b/academy/4-my-own-chain/ignitecli.md @@ -7,7 +7,7 @@ tag: deep-dive # Ignite CLI - + Before diving into the details of how Ignite CLI helps you scaffold the basics for your application blockchain make sure to understand the main concepts presented in the following sections: @@ -19,13 +19,17 @@ Before diving into the details of how Ignite CLI helps you scaffold the basics f * [Protobuf](../2-main-concepts/protobuf.md) * [BaseApp](../2-main-concepts/base-app.md) -In this section: + + + -* Install Ignite CLI -* Scaffold a blockchain -* Use the CLI -* Start the Ignite UI server -* Send your first message +In this section, you will: + +* Install the Ignite CLI. +* Scaffold a blockchain. +* Use the CLI. +* Start the Ignite UI server. +* Send your first message. You can follow a hands-on exercise for Ignite CLI in the sections that follow this introduction. diff --git a/academy/4-my-own-chain/migration.md b/academy/4-my-own-chain/migration.md index fd9f0e565e..952b78d3a4 100644 --- a/academy/4-my-own-chain/migration.md +++ b/academy/4-my-own-chain/migration.md @@ -7,7 +7,7 @@ tag: deep-dive # Migration - Introduce a Leaderboard After Production - + Make sure you have all you need before proceeding: @@ -15,12 +15,15 @@ Make sure you have all you need before proceeding: * Go is installed. * You have the checkers blockchain codebase up to the wager denomination. If not, follow the [previous steps](./wager-denom.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/wager-denomination). -In this section: + + + + +In this section, you will: -* Add a Leaderboard -* Upgrade your blockchain in production -* Data migrations -* Logic upgrades +* Add a leaderboard. +* Upgrade your blockchain in production. +* Deal with data migrations and logic upgrades. diff --git a/academy/4-my-own-chain/play-game.md b/academy/4-my-own-chain/play-game.md index fc2f435a1c..ea748a25b7 100644 --- a/academy/4-my-own-chain/play-game.md +++ b/academy/4-my-own-chain/play-game.md @@ -7,7 +7,7 @@ tag: deep-dive # Message and Handler - Add a Way to Make a Move - + Make sure you have all you need before proceeding: @@ -15,12 +15,16 @@ Make sure you have all you need before proceeding: * Go is installed. * You have the checkers blockchain codebase with `MsgCreateGame` and its handling. If not, follow the [previous steps](./create-handling.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/create-game-handler). -In this section: + + + + +In this section, you will: -* Extend message handling - play the game -* Handle moves and update the game state -* Validate input -* Extend unit tests +* Extend message handling - play the game. +* Handle moves and update the game state. +* Validate input. +* Extend unit tests. diff --git a/academy/4-my-own-chain/reject-game.md b/academy/4-my-own-chain/reject-game.md index b775ab6cfe..6f39afd208 100644 --- a/academy/4-my-own-chain/reject-game.md +++ b/academy/4-my-own-chain/reject-game.md @@ -7,7 +7,7 @@ tag: deep-dive # Message and Handler - Make Sure a Player Can Reject a Game - + Before proceeding, make sure you have all you need: @@ -16,12 +16,16 @@ Before proceeding, make sure you have all you need: * Go is installed. * You have the checkers blockchain codebase with the previous messages and their events. If not, follow the [previous steps](./events.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/two-events). -In this section: + + + + +In this section, you will: -* Add a new protocol rule -* Define custom errors -* Add a message handler -* Extend unit tests +* Add a new protocol rule. +* Define custom errors. +* Add a message handler. +* Extend unit tests. diff --git a/academy/4-my-own-chain/server-side.md b/academy/4-my-own-chain/server-side.md index 996b17a49f..36c917488a 100644 --- a/academy/4-my-own-chain/server-side.md +++ b/academy/4-my-own-chain/server-side.md @@ -1,11 +1,11 @@ --- -title: Web 2.0 Server - Convenient information +title: Web 2.0 Server - Convenient Information order: 22 description: Introducing a Web2.0 server to track games per player tag: deep-dive --- -# Web 2.0 Server - Convenient information +# Web 2.0 Server - Convenient Information Now that your blockchain is complete, you can think about additional data and services that would add value without increasing cost or complexity on chain. diff --git a/academy/4-my-own-chain/stored-game.md b/academy/4-my-own-chain/stored-game.md index 5265c89f5a..796c7395c2 100644 --- a/academy/4-my-own-chain/stored-game.md +++ b/academy/4-my-own-chain/stored-game.md @@ -7,7 +7,7 @@ tag: deep-dive # Store Object - Make a Checkers Blockchain - + Make sure you have all you need before proceeding with the exercise: @@ -15,12 +15,16 @@ Make sure you have all you need before proceeding with the exercise: * Go is installed. * You have the bare blockchain scaffold codebase with a single module named `checkers`. If not, follow the [previous steps](./ignitecli.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/starport-start). -In this section: + + + +In this section, you will handle: + * The Stored Game object * Protobuf objects * Query.proto -* Protobuf Service interfaces +* Protobuf service interfaces * Your first unit test diff --git a/academy/4-my-own-chain/wager-denom.md b/academy/4-my-own-chain/wager-denom.md index 2892199f93..f8eb01b1e2 100644 --- a/academy/4-my-own-chain/wager-denom.md +++ b/academy/4-my-own-chain/wager-denom.md @@ -7,19 +7,23 @@ tag: deep-dive # IBC Token - Play With Cross-Chain Tokens - + Make sure you have all you need before proceeding: * You understand the concepts of [messages](../2-main-concepts/messages.md), [Protobuf](../2-main-concepts/protobuf.md), and [IBC](../2-main-concepts/ibc.md). * Go is installed. * You have the checkers blockchain codebase up to the _can play_ query. If not, follow the [previous steps](./can-play.md) or check out the [relevant version](https://github.com/cosmos/b9-checkers-academy-draft/tree/can-play-move-handler). + + + + -In this section: +In this section, you will: -* Discover the Inter-Blockchain Protocol -* Accept wagers with tokens from other chains -* Refactor integration tests +* Discover the Inter-Blockchain Communication Protocol. +* Accept wagers with tokens from other chains. +* Refactor integration tests. diff --git a/academy/ibc/ibc-tao-dev.md b/academy/ibc/ibc-tao-dev.md index 7c1ba0dcfd..8e67bc2277 100644 --- a/academy/ibc/ibc-tao-dev.md +++ b/academy/ibc/ibc-tao-dev.md @@ -1,5 +1,5 @@ --- -title: "IBC/TAO" +title: "Transport, Authentication, and Ordering Layer - Connections" order: description: tag: deep-dive @@ -234,7 +234,7 @@ func (k Keeper) ConnOpenTry( `OpenAck` is very similar to the functionality of `OpenInit`, except that the information verification now occurs for chain A. As in `OpenTry`, the relayer also submits two `UpdateClient`s with chain A and chain B as source chains before this handshake. These update the light clients of both chain A and chain B, in order to make sure that the state verifications in this step are successful. -[OpenAck](/academy/ibc/images/open_ack.png) +![OpenAck](/academy/ibc/images/open_ack.png) The initiation of this handshake from chain A updates its connection state to `OPEN`. It is important to note that the counterparty chain *must* have a `TRY` connection state in order for the handshake and connection state update to be successful. @@ -320,4 +320,4 @@ If both chains submit `OpenInit` then `OpenTry` at same time, there should be no **An Imposter** -In fact this is not an issue. Any attempted `OpenInit` from an imposter will fail on `OpenTry`, because it will not contain valid proofs of Client/Connection/ConsensusState. +In fact this is not an issue. Any attempted `OpenInit` from an imposter will fail on `OpenTry`, because it will not contain valid proofs of `Client/Connection/ConsensusState`. diff --git a/academy/ibc/ibc-tooling.md b/academy/ibc/ibc-tooling.md index f11be5c409..4458677a65 100644 --- a/academy/ibc/ibc-tooling.md +++ b/academy/ibc/ibc-tooling.md @@ -223,7 +223,7 @@ On the right-hand side (next to the visualization) you can find a list of all ne -If you want a visualization of the network, just click on the network icon in the upper-right-hand corner. This redirects you to the (IOBSCAN Network State Visualizer)[https://www.iobscan.io/#/]: +If you want a visualization of the network, just click on the network icon in the upper-right-hand corner. This redirects you to the [IOBSCAN Network State Visualizer](https://www.iobscan.io/#/): ![IOBScan Network State Visualizer](/academy/ibc/images/iobscan2.png) diff --git a/academy/ibc/ica.md b/academy/ibc/ica.md index 45574540e6..a532ac8900 100644 --- a/academy/ibc/ica.md +++ b/academy/ibc/ica.md @@ -323,7 +323,7 @@ The **authentication module** must: The following [`IBCModule`](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port/types/module.go) callbacks must be implemented with appropriate custom logic: -```golang +```go // OnChanOpenInit implements the IBCModule interface func (im IBCModule) OnChanOpenInit( ctx sdk.Context, @@ -396,7 +396,7 @@ The functions `OnChanOpenTry`, `OnChanOpenConfirm`, `OnChanCloseInit`, and `OnRe The authentication module can begin registering interchain accounts by calling `RegisterInterchainAccount`: -```golang +```go if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, connectionID, owner.String()); err != nil { return err } @@ -406,7 +406,7 @@ return nil The authentication module can attempt to send a packet by calling `SendTx`: -```golang +```go // Authenticate owner // perform custom logic @@ -460,7 +460,7 @@ Controller chains will be able to access the acknowledgement written into the ho If the controller chain is connected to a host chain using the host module on ibc-go, it may interpret the acknowledgement bytes as follows: -```golang +```go var ack channeltypes.Acknowledgement if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { return err @@ -475,7 +475,7 @@ if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil { If the `txMsgData.Data` is empty, the host chain is using SDK version > v0.45. The auth module should interpret the `txMsgData.Responses` as follows: -```golang +```go ... // switch statement from above case 0: @@ -489,7 +489,7 @@ case 0: A handler is needed to interpret what actions to perform based on the type url of the Any. A router could be used, or more simply a switch statement: -```golang +```go func handleAny(any *codectypes.Any) error { switch any.TypeURL { case banktypes.MsgSend: @@ -526,7 +526,7 @@ default: [Here](https://github.com/cosmos/interchain-accounts-demo) is an end-to-end working demo of Interchain Accounts. You will notice that it contains a similar `app.go` to the generic one below. -```golang +```go // app.go // Register the AppModule for the Interchain Accounts module and the authentication module @@ -634,4 +634,3 @@ app.mm.SetOrderInitGenesis( ... ) ``` - diff --git a/academy/ibc/relayerintro.md b/academy/ibc/relayerintro.md index ec17401302..34532f7038 100644 --- a/academy/ibc/relayerintro.md +++ b/academy/ibc/relayerintro.md @@ -11,7 +11,7 @@ tag: deep-dive It is useful to briefly recap what relaying is and why it is important. IBC aims to offer blockchains a protocol to enable reliable, secure and permissionless transfer of packets of data. The protocol is agnostic with respect to the data, paving the way for application developers to develop a range of possible interchain services (fungible and non-fungible token transfers are an obvious candidate, but also arbitrary cross-chain messaging via [Interchain accounts](https://interchain-io.medium.com/welcome-to-the-ibc-gang-lets-talk-f469883e0ffe)). -On a high level, this works as follows. A module on a source chain wants to send a packet to a destination chain. It submits a message to the source chain that stores a commitment proof on-chain and logs an event with the packet information. With this information and the proof, you can submit a message to the IBC client on the destination chain, which will verify the proof and (if successful) store a receipt on-chain and have the receiving module execute the required actions according to the packet data. The acknowledgement and timeout functionality has been discussed [previously](https://TODO:insert-link-to-previous-section). +On a high level, this works as follows. A module on a source chain wants to send a packet to a destination chain. It submits a message to the source chain that stores a commitment proof on-chain and logs an event with the packet information. With this information and the proof, you can submit a message to the IBC client on the destination chain, which will verify the proof and (if successful) store a receipt on-chain and have the receiving module execute the required actions according to the packet data. The acknowledgement and timeout functionality has been discussed [previously](../ibc/channels.md). There are two important considerations to make based on this flow. First, on the receiving chain, you need to verify the commitment proof on the source chain. This is why a light client is used to track the state of the counterparty chain (in an efficient way). Again, refer to a previous section to find out more. Second, blockchains cannot directly communicate with one another, so how do the proof and packet data arrive at the destination chain to continue the flow described above? @@ -35,9 +35,11 @@ With the current architecture, relayers use the Tendermint RPC endpoint to query ### Configuration file + The information and parameters about the chains, paths, and the name of the relayer private key to sign the messages can generally be found in a configuration file, or *config*. You will look at template configs for the Hermes and Go relayer later, but generally config files are the place to initialize, add, or edit information required for relaying. ### Chain registry + When you have the template for the config file of the relayer software you're using, where can you find the information that it needs? The [chain-registry Github repository](https://github.com/cosmos/chain-registry) provides detailed parmeters about chains and their assets, and recently a schema was added to submit IBC data. This new addition saves you from having to look up path information or canonical channels on [Mintscan](https://www.mintscan.io/cosmos/relayers) or [Map of Zones](https://mapofzones.com/?testnet=false&period=24&tableOrderBy=ibcVolume&tableOrderSort=desc). The following is an example of the IBC data between Juno and Osmosis: @@ -78,7 +80,6 @@ The following is an example of the IBC data between Juno and Osmosis: ``` The Go relayer has built-in functionality to fetch chain information (and soon path information) from the chain-registry. Hermes has this functionality on their roadmap. You will look at both relayers in more detail in the next sections. - # FAQ Cosmos is developing fast, and minor changes can cause big problems for inexperienced users. Luckily you have the option to make direct contact with developers through the [Cosmos Developer Discord](https://discord.com/invite/cosmosnetwork). There you can find the channel **#ibc-relayer** dedicated to relayers in which you can ask for help. diff --git a/academy/xl-cosmjs/create-custom.md b/academy/xl-cosmjs/create-custom.md index 7d73ca76ff..1a86a9eae8 100644 --- a/academy/xl-cosmjs/create-custom.md +++ b/academy/xl-cosmjs/create-custom.md @@ -1,11 +1,11 @@ --- -title: Create custom CosmJS interfaces +title: Create Custom CosmJS Interfaces order: 4 description: To work with your blockchain tag: deep-dive --- -# Create custom CosmJS interfaces +# Create Custom CosmJS Interfaces diff --git a/academy/xl-cosmjs/first-steps.md b/academy/xl-cosmjs/first-steps.md index 3d539d5408..604edf322f 100644 --- a/academy/xl-cosmjs/first-steps.md +++ b/academy/xl-cosmjs/first-steps.md @@ -1,11 +1,11 @@ --- -title: "Bank - Send Tokens" +title: "Your First CosmJS Actions" order: 2 description: Interacting with a Cosmos SDK chain through CosmJS tag: deep-dive --- -# Bank - Send Tokens +# Your First CosmJS Actions - Send Tokens diff --git a/academy/xl-cosmjs/intro.md b/academy/xl-cosmjs/intro.md index 1af9b3c3e3..c370fa1837 100644 --- a/academy/xl-cosmjs/intro.md +++ b/academy/xl-cosmjs/intro.md @@ -1,11 +1,11 @@ --- -title: "Introduction to CosmJS" +title: "What is CosmJS?" order: 1 description: What is CosmJS and what can it do for me? tag: intro --- -# Introduction to CosmJS +# What is CosmJS? diff --git a/academy/xl-cosmjs/multi-msg.md b/academy/xl-cosmjs/multi-msg.md index 1f2e96502c..525acb19d8 100644 --- a/academy/xl-cosmjs/multi-msg.md +++ b/academy/xl-cosmjs/multi-msg.md @@ -1,11 +1,11 @@ --- -title: "Send Multiple Messages" +title: "Compose Complex Transactions" order: 3 description: Send multiple tokens and messages through CosmJS tag: deep-dive --- -# Send Multiple Messages +# Compose Complex Transactions - Send Multiple Messages diff --git a/academy/xl-cosmjs/with-keplr.md b/academy/xl-cosmjs/with-keplr.md index 9f26e559ec..6d1dc8475c 100644 --- a/academy/xl-cosmjs/with-keplr.md +++ b/academy/xl-cosmjs/with-keplr.md @@ -1,11 +1,11 @@ --- -title: "Sending Tokens with Keplr" +title: "Learn to Integrate Keplr" order: 4 description: Interacting with a Cosmos SDK chain through CosmJS and Keplr tag: deep-dive --- -# Sending Tokens with Keplr +# Learn to Integrate Keplr diff --git a/course-ida/setup.md b/course-ida/setup.md index 0a84028218..b9f23bd952 100644 --- a/course-ida/setup.md +++ b/course-ida/setup.md @@ -25,7 +25,7 @@ On a general note, it is advisable to **prepare a separate project folder to kee ## Install Docker -Docker is very helpful to do the exercises. So you may need to install Docker. To isntall, head to the [Install Docker Engine page](https://docs.docker.com/engine/install/). +Docker is very helpful to do the exercises. So you may need to install Docker. To install, head to the [Install Docker Engine page](https://docs.docker.com/engine/install/). ## Install Go @@ -69,7 +69,7 @@ To test the installation of Rust, you can use the following command: $ cargo version ``` -It displays the cargo version helps confirm proper installation. +It displays the cargo version and helps confirm proper installation. ## Install Visual Studio Code