+ );
+}
+
+export default HighlightBox;
diff --git a/docs/src/components/HighlightTag.jsx b/docs/src/components/HighlightTag.jsx
new file mode 100644
index 00000000000..d1f742b3ef4
--- /dev/null
+++ b/docs/src/components/HighlightTag.jsx
@@ -0,0 +1,71 @@
+import React from "react";
+
+const tags = {
+ devops: {
+ color: "#54ffe0",
+ label: "DevOps",
+ isBright: true,
+ },
+ "cosmos-sdk": {
+ color: "#F69900",
+ label: "Cosmos SDK",
+ isBright: true,
+ },
+ "ibc-go": {
+ color: "#ff1717",
+ label: "IBC-Go",
+ },
+ cosmjs: {
+ color: "#6836D0",
+ label: "CosmJS",
+ },
+ cosmwasm: {
+ color: "#05BDFC",
+ label: "CosmWasm",
+ },
+ cometbft: {
+ color: "#00B067",
+ label: "CometBFT",
+ },
+ "cosmos-hub": {
+ color: "#f7f199",
+ label: "Cosmos Hub",
+ isBright: true,
+ },
+ concepts: {
+ color: "#AABAFF",
+ label: "Concept",
+ isBright: true,
+ },
+ tutorial: {
+ color: "#F46800",
+ label: "Tutorial",
+ },
+ "guided-coding": {
+ color: "#F24CF4",
+ label: "Guided Coding",
+ },
+};
+
+const HighlightTag = ({ type, version }) => {
+ const styles = tags[type] || tags["ibc-go"]; // default to 'ibc-go' if type doesn't exist
+
+ return (
+
+ {styles.label}
+ {version ? ` ${version}` : ""}
+
+ );
+};
+
+export default HighlightTag;
diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css
index b7fab70954b..a828fb7256b 100644
--- a/docs/src/css/custom.css
+++ b/docs/src/css/custom.css
@@ -1,5 +1,5 @@
/*
- Slighlty modified version of https://github.com/ignite/cli/blob/develop/docs/src/css/custom.css
+ Slightly modified version of https://github.com/ignite/cli/blob/develop/docs/src/css/custom.css
*/
@import "tailwindcss/base";
@@ -367,6 +367,23 @@ html {
0 -0.1px 0 var(--ifm-font-color-base);
}
+ /* CODE BLOCK */
+ .code-block-minus-diff-line {
+ background-color: #ff000020;
+ display: block;
+ margin: 0 calc(-1 * var(--ifm-pre-padding));
+ padding: 0 var(--ifm-pre-padding);
+ border-left: 3px solid #ff000080;
+ }
+
+ .code-block-plus-diff-line {
+ background-color: #00ff0020;
+ display: block;
+ margin: 0 calc(-1 * var(--ifm-pre-padding));
+ padding: 0 var(--ifm-pre-padding);
+ border-left: 3px solid #00ff0080;
+ }
+
/* RELATED ARTICLES */
&[data-theme="dark"] .pagination-nav > a {
@apply bg-fg;
diff --git a/docs/static/img/IBC-go-cover.svg b/docs/static/img/IBC-go-cover.svg
new file mode 100644
index 00000000000..11cd367eae6
--- /dev/null
+++ b/docs/static/img/IBC-go-cover.svg
@@ -0,0 +1,42 @@
+
diff --git a/docs/static/img/black-large-ibc-logo.svg b/docs/static/img/black-large-ibc-logo.svg
index dc7ec946cbd..2902c0cef78 100644
--- a/docs/static/img/black-large-ibc-logo.svg
+++ b/docs/static/img/black-large-ibc-logo.svg
@@ -1,52 +1,52 @@
->
+go get github.com/cosmos/cosmos-sdk@v0.47.5 && go mod tidy
+
+
+View Source>
+go get github.com/cosmos/ibc-go/v7@v7.3.0 && go mod tidy
+
+
+Feel free to test that the chain still runs with `ignite chain serve --reset-once`. Do not forget to quit by pressing `q`.
diff --git a/docs/tutorials/01-fee/04-wire-feeibc-mod.md b/docs/tutorials/01-fee/04-wire-feeibc-mod.md
new file mode 100644
index 00000000000..0329fecd1a8
--- /dev/null
+++ b/docs/tutorials/01-fee/04-wire-feeibc-mod.md
@@ -0,0 +1,252 @@
+---
+title: Wire Up the ICS-29 Fee Middleware to a Cosmos SDK Blockchain
+sidebar_label: Wire Up the ICS-29 Fee Middleware to a Cosmos SDK Blockchain
+sidebar_position: 4
+slug: /fee/wire-feeibc-mod
+---
+
+import HighlightBox from '@site/src/components/HighlightBox';
+
+# Wire up the ICS-29 Fee Middleware to a Cosmos SDK blockchain
+
+
+
+In this section, you will:
+
+- Add the ICS-29 Fee Middleware to a Cosmos SDK blockchain as a module.
+- Wire up the ICS-29 Fee Middleware to the IBC transfer stack.
+
+
+
+## 1. Wire up the ICS-29 Fee Middleware as a Cosmos SDK module
+
+The Fee Middleware is not just an IBC middleware, it is also a Cosmos SDK module since it manages its own state and defines its own messages.
+We will first wire up the Fee Middleware as a Cosmos SDK module, then we will wire it up to the IBC transfer stack.
+
+Cosmos SDK modules are registered in the `app/app.go` file. The `app.go` file is the entry point for the Cosmos SDK application. It is where the application is initialized and where the application's modules are registered.
+
+We first need to import the `fee` module into the `app.go` file. Add the following import statements to the `app.go` file:
+
+```go reference title="app/app.go"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/64e572214b4ba9a1075db96440dd83d4b90a6052/app/app.go#L99-L101
+```
+
+### 1.1. Add the Fee Middleware to the module managers and define its account permissions
+
+Next, we need to add `fee` module to the module basic manager and define its account permissions. Add the following code to the `app.go` file:
+
+```go title="app/app.go"
+ // ModuleBasics defines the module BasicManager is in charge of setting up basic,
+ // non-dependant module elements, such as codec registration
+ // and genesis verification.
+ ModuleBasics = module.NewBasicManager(
+ // ... other modules
+ evidence.AppModuleBasic{},
+ transfer.AppModuleBasic{},
+ ica.AppModuleBasic{},
+ vesting.AppModuleBasic{},
+ // plus-diff-line
++ ibcfee.AppModuleBasic{},
+ consensus.AppModuleBasic{},
+ // this line is used by starport scaffolding # stargate/app/moduleBasic
+ )
+
+ // module account permissions
+ maccPerms = map[string][]string{
+ authtypes.FeeCollectorName: nil,
+ distrtypes.ModuleName: nil,
+ icatypes.ModuleName: nil,
+ minttypes.ModuleName: {authtypes.Minter},
+ stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
+ stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
+ govtypes.ModuleName: {authtypes.Burner},
+ ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
+ // plus-diff-line
++ ibcfeetypes.ModuleName: nil,
+ // this line is used by starport scaffolding # stargate/app/maccPerms
+ }
+```
+
+Next, we need to add the fee middleware to the module manager. Add the following code to the `app.go` file:
+
+```go title="app/app.go"
+ app.mm = module.NewManager(
+ // ... other modules
+ consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper),
+ ibc.NewAppModule(app.IBCKeeper),
+ params.NewAppModule(app.ParamsKeeper),
+ transferModule,
+ // plus-diff-line
++ ibcfee.NewAppModule(app.IBCFeeKeeper),
+ icaModule,
+ // this line is used by starport scaffolding # stargate/app/appModule
+
+ crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them
+ )
+```
+
+Note that we have added `ibcfee.NewAppModule(app.IBCFeeKeeper)` to the module manager but we have not yet created nor initialized the `app.IBCFeeKeeper`. We will do that next.
+
+### 1.2. Initialize the Fee Middleware keeper
+
+Next, we need to add the fee middleware keeper to the Cosmos App, register its store key, and initialize it.
+
+```go title="app/app.go"
+// App extends an ABCI application, but with most of its parameters exported.
+// They are exported for convenience in creating helper functions, as object
+// capabilities aren't needed for testing.
+type App struct {
+ // ... other fields
+ UpgradeKeeper *upgradekeeper.Keeper
+ ParamsKeeper paramskeeper.Keeper
+ IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
+ // plus-diff-line
++ IBCFeeKeeper ibcfeekeeper.Keeper
+ EvidenceKeeper evidencekeeper.Keeper
+ TransferKeeper ibctransferkeeper.Keeper
+ ICAHostKeeper icahostkeeper.Keeper
+ // ... other fields
+}
+```
+
+```go title="app/app.go"
+keys := sdk.NewKVStoreKeys(
+ authtypes.StoreKey, authz.ModuleName, banktypes.StoreKey, stakingtypes.StoreKey,
+ crisistypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
+ govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey,
+ feegrant.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, icahosttypes.StoreKey,
+ capabilitytypes.StoreKey, group.StoreKey, icacontrollertypes.StoreKey, consensusparamtypes.StoreKey,
+ // plus-diff-line
++ ibcfeetypes.StoreKey,
+ // this line is used by starport scaffolding # stargate/app/storeKey
+ )
+```
+
+Then initialize the keeper:
+
+:::warning
+
+Make sure to do the following initialization after the `IBCKeeper` is initialized and before `TransferKeeper` is initialized.
+
+:::
+
+```go reference title="app/app.go"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/64e572214b4ba9a1075db96440dd83d4b90a6052/app/app.go#L452-L458
+```
+
+### 1.3. Add the Fee Middleware to SetOrderBeginBlockers, SetOrderEndBlockers, and genesisModuleOrder
+
+Next, we need to add the fee middleware to the `SetOrderBeginBlockers`, `SetOrderEndBlockers`, and `genesisModuleOrder` functions. Add the following code to the `app.go` file:
+
+```go title="app/app.go"
+ // During begin block slashing happens after distr.BeginBlocker so that
+ // there is nothing left over in the validator fee pool, so as to keep the
+ // CanWithdrawInvariant invariant.
+ // NOTE: staking module is required if HistoricalEntries param > 0
+ app.mm.SetOrderBeginBlockers(
+ // ... other modules
+ icatypes.ModuleName,
+ // plus-diff-line
++ ibcfeetypes.ModuleName,
+ genutiltypes.ModuleName,
+ // ... other modules
+ consensusparamtypes.ModuleName,
+ // this line is used by starport scaffolding # stargate/app/beginBlockers
+ )
+
+ app.mm.SetOrderEndBlockers(
+ // ... other modules
+ icatypes.ModuleName,
+ // plus-diff-line
++ ibcfeetypes.ModuleName,
+ capabilitytypes.ModuleName,
+ // ... other modules
+ consensusparamtypes.ModuleName,
+ // this line is used by starport scaffolding # stargate/app/endBlockers
+ )
+
+ // NOTE: The genutils module must occur after staking so that pools are
+ // properly initialized with tokens from genesis accounts.
+ // NOTE: Capability module must occur first so that it can initialize any capabilities
+ // so that other modules that want to create or claim capabilities afterwards in InitChain
+ // can do so safely.
+ genesisModuleOrder := []string{
+ // ... other modules
+ icatypes.ModuleName,
+ // plus-diff-line
++ ibcfeetypes.ModuleName,
+ evidencetypes.ModuleName,
+ // ... other modules
+ consensusparamtypes.ModuleName,
+ // this line is used by starport scaffolding # stargate/app/initGenesis
+ }
+ app.mm.SetOrderInitGenesis(genesisModuleOrder...)
+ app.mm.SetOrderExportGenesis(genesisModuleOrder...)
+```
+
+## 2. Wire up the ICS-29 Fee Middleware to the IBC Transfer stack
+
+### 2.1. Wire up the ICS-29 Fee Middleware to the `TransferKeeper`
+
+The ICS-29 Fee Middleware Keeper implements [`ICS4Wrapper`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/core/05-port/types/module.go#L109-L133) interface. This means that the `IBCFeeKeeper` wraps the `IBCKeeper.ChannelKeeper` and that it can replace the use of the `ChannelKeeper` for sending packets, writing acknowledgements, and retrieving the IBC channel version.
+
+We need to replace the `ChannelKeeper` with the `IBCFeeKeeper` in the `TransferKeeper`. To do this, we need to modify the `TransferKeeper` initialization in the `app.go` file.
+
+```go title="app/app.go"
+ // Create Transfer Keepers
+ app.TransferKeeper = ibctransferkeeper.NewKeeper(
+ appCodec,
+ keys[ibctransfertypes.StoreKey],
+ app.GetSubspace(ibctransfertypes.ModuleName),
+ // minus-diff-line
+- app.IBCKeeper.ChannelKeeper,
+ // plus-diff-line
++ app.IBCFeeKeeper,
+ app.IBCKeeper.ChannelKeeper,
+ &app.IBCKeeper.PortKeeper,
+ app.AccountKeeper,
+ app.BankKeeper,
+ scopedTransferKeeper,
+ )
+```
+
+### 2.2. Wire up the ICS-29 Fee Middleware to the `TransferModule`
+
+Currently, our `app/app.go` only contains the transfer module, which is a regular SDK AppModule (that manages state and has its own messages) that also fulfills the `IBCModule` interface and therefore has the ability to handle both channel handshake and packet lifecycle callbacks.
+
+:::note
+
+The transfer module is instantiated two times, once as a regular SDK module and once as an IBC module.
+
+```go reference title="app/app.go"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/0f41b3c6b4e065aa1a860de3e3038d489c37a28a/app/app.go#L457-L458
+```
+
+:::
+
+We therefore need to "convert" the `transferIBCModule` to an IBC application stack that includes both the `transferIBCModule` and the ICS-29 Fee Middleware. Modify the `app.go` file as follows:
+
+```go title="app/app.go"
+ transferModule := transfer.NewAppModule(app.TransferKeeper)
+ // minus-diff-line
+- transferIBCModule := transfer.NewIBCModule(app.TransferKeeper)
+ // plus-diff-start
++
++ /**** IBC Transfer Stack ****/
++ var transferStack ibcporttypes.IBCModule
++ transferStack = transfer.NewIBCModule(app.TransferKeeper)
++ transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper)
+ // plus-diff-end
+```
+
+And finally, we need to add the `transferStack` to the `ibcRouter`. Modify the `app.go` file as follows:
+
+```go title="app/app.go"
+ ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule).
+ // minus-diff-line
+- AddRoute(ibctransfertypes.ModuleName, transferIBCModule)
+ // plus-diff-line
++ AddRoute(ibctransfertypes.ModuleName, transferStack)
+```
+
+This completes the wiring of the ICS-29 Fee Middleware to the IBC transfer stack! See a full example of the `app.go` file with the fee middleware wired up [here](https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/64e572214b4ba9a1075db96440dd83d4b90a6052/app/app.go) and the diff [here](https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/commit/64e572214b4ba9a1075db96440dd83d4b90a6052). Test that the application is still running with `ignite chain serve --reset-once`, and quit with `q`.
diff --git a/docs/tutorials/01-fee/05-scaffold-react.md b/docs/tutorials/01-fee/05-scaffold-react.md
new file mode 100644
index 00000000000..350082c5314
--- /dev/null
+++ b/docs/tutorials/01-fee/05-scaffold-react.md
@@ -0,0 +1,156 @@
+---
+title: Scaffold a React App
+sidebar_label: Scaffold a React App
+sidebar_position: 5
+slug: /fee/scaffold-react
+---
+
+import CodeBlock from '@theme/CodeBlock';
+
+# Scaffold a React app
+
+In this section, we will scaffold a React app using Ignite CLI, and test it. This will be the base for us to add Fee Middleware support.
+
+## Set up test wallets
+
+We will use 4 test wallets for this tutorial. Use the following mnemonic phrases to import them into Keplr.
+
+```text title="anna.mnemonic"
+antenna hen skate tooth during heart agent code exclude measure text math time budget industry cage eagle prosper program enter cruise join tragic one
+```
+
+```text title="bo.mnemonic"
+uphold tube excess primary night armor circle puzzle pet memory empower conduct blush hat glare tortoise into embody powder raise punch promote kidney catalog
+```
+
+```text title="charlie.mnemonic"
+rug cotton ceiling olive cake october way spy million grain actress sponsor
+```
+
+```text title="damian.mnemonic"
+mansion wing limit daughter allow fiscal attend planet viable giggle prison ready
+```
+
+Then add these wallet mnemonics to [`config.yml`](https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/65032986f671e901bc13ab160e3f96a5046857c0/config.yml) so that they are funded automatically by ignite.
+
+```yaml title="config.yml"
+version: 1
+accounts:
+- name: alice
+ coins:
+ - 20000token
+ - 200000000stake
+- name: bob
+ coins:
+ - 10000token
+ - 100000000stake
+# plus-diff-start
+- name: anna
+ coins:
+ - 20000token
+ - 200000000stake
+ mnemonic: antenna hen skate tooth during heart agent code exclude measure text math time budget industry cage eagle prosper program enter cruise join tragic one
+- name: bo
+ coins:
+ - 20000token
+ - 200000000stake
+ mnemonic: uphold tube excess primary night armor circle puzzle pet memory empower conduct blush hat glare tortoise into embody powder raise punch promote kidney catalog
+- name: charlie
+ coins:
+ - 20000token
+ - 200000000stake
+ mnemonic: rug cotton ceiling olive cake october way spy million grain actress sponsor
+- name: damian
+ coins:
+ - 20000token
+ - 200000000stake
+ mnemonic: mansion wing limit daughter allow fiscal attend planet viable giggle prison ready
+# plus-diff-end
+client:
+ openapi:
+ path: docs/static/openapi.yml
+faucet:
+ name: bob
+ coins:
+ - 5token
+ - 100000stake
+validators:
+- name: alice
+ bonded: 100000000stake
+```
+
+## Scaffold a React app
+
+Scaffold a React app using the following command:
+
+View Source>
+ignite scaffold react
+
+
+For this will create a React app within the `react/` directory. The app depends on a typescript client that is yet to be generated.
+The following command generates the typescript client for the chain, including the Fee Middleware types, and its react hooks.
+
+View Source>
+ignite generate hooks --clear-cache
+
+
+:::caution
+
+You need to add `--clear-cache` to the command above to make sure that the custom modules' (such as Fee Middleware) types are generated.
+
+:::
+
+### Update the dependencies
+
+The generated React app and ts-client depends on the `@cosmjs` packages. We need to update the dependencies to the latest version because the Cosmos SDK version is not fully compatible with the version of `@cosmjs` packages used by the generated app.
+Run the following commands in the root directory of the project to update the dependencies.
+
+View Source>
+cd ts-client &&
+npm install @cosmjs/launchpad@0.27.1 @cosmjs/proto-signing@0.31.1 @cosmjs/stargate@0.31.1 @keplr-wallet/types@0.11.14
+
+
+View Source>
+cd react &&
+npm install @cosmjs/proto-signing@0.31.1 @cosmjs/stargate@0.31.1 @cosmjs/encoding@0.31.1
+
+
+### Fix the bugs
+
+There is a bug in the generated app that we need to fix. While this is fixed in the next version of Ignite CLI, we need to fix it manually for now since we are using the latest version (`v0.27.1`) of Ignite CLI. (The next version of ignite comes with the Fee Middleware wired!)
+
+The bug is in the `react/src/hooks/useIbcApplicationsTransferV1/index.ts` file. For some reason, the generated code uses the string `=**` in certain places. We need to remove this using replace.
+You can use the following command to fix this (or simply use your editor to replace the string with an empty string):
+
+View Source>
+sed -i 's/=\*\*//g' react/src/hooks/useIbcApplicationsTransferV1/index.ts
+
+
+## Test the app
+
+### Start the chain
+
+Start the chain using the following command:
+
+```bash
+ignite chain serve --reset-once
+```
+
+### Start the React app
+
+Start the React app in a separate terminal using the following command:
+
+```bash
+cd react
+npm run dev
+```
+
+You should see the following screen:
+
+![Landing Page](./images/ignite-landing.png)
+
+Connect your keplr wallet (as one of the test wallets) to the app. You should see the following screen:
+
+![Connected](./images/ignite-unmodified.png)
+
+Feel free to play around with the app. You can send tokens to other wallets, however, IBC transfers will not work at this point since we are not running any IBC relayer.
diff --git a/docs/tutorials/01-fee/06-wire-fee-react.md b/docs/tutorials/01-fee/06-wire-fee-react.md
new file mode 100644
index 00000000000..fa4ca2bfc30
--- /dev/null
+++ b/docs/tutorials/01-fee/06-wire-fee-react.md
@@ -0,0 +1,226 @@
+---
+title: Wire up ICS-29 Fees to the React App
+sidebar_label: Wire up ICS-29 Fees to the React App
+sidebar_position: 6
+slug: /fee/fee-react
+---
+
+# Wire up ICS-29 Fee to the React app
+
+Our goal is to create a React component that will allow users to select their ICS-29 fee amount and pay it. The final component will look like this:
+
+![ICS-29 Fee UI](./images/ignite-react-fee.png)
+
+## 1. Create the State for ICS-29 Fee
+
+We will do all our modifications in the `src/components/IgntSend.tsx` file. First, we need to create a state for the fee amount. Add the following line to the `IgntSend` component:
+
+```ts title="src/components/IgntSend.tsx"
+interface TxData {
+ receiver: string;
+ ch: string;
+ amounts: Array;
+ memo: string;
+ fees: Array;
+ // plus-diff-line
++ relayerFee: Array;
+}
+```
+
+```ts title="src/components/IgntSend.tsx"
+const initialState: State = {
+ tx: {
+ receiver: "",
+ ch: "",
+ amounts: [],
+ memo: "",
+ fees: [],
+ // plus-diff-line
++ relayerFee: [],
+ },
+ currentUIState: UI_STATE.SEND,
+ advancedOpen: false,
+};
+```
+
+## 2. Add the ICS-29 Fee UI
+
+Next, we need to add a functional UI which updates the fee amount in the state. Add the following code to the `IgntSend` component:
+
+```ts title="src/components/IgntSend.tsx"
+ const handleTxFeesUpdate = (selected: Amount[]) => {
+ setState((oldState) => {
+ const tx = oldState.tx;
+ tx.fees = selected;
+ return { ...oldState, tx };
+ });
+ };
+ // plus-diff-start
++ const handleTxRelayerFeesUpdate = (selected: Amount[]) => {
++ setState((oldState) => {
++ const tx = oldState.tx;
++ tx.relayerFee = selected;
++ return { ...oldState, tx };
++ });
++ };
+ // plus-diff-end
+```
+
+```tsx title="src/components/IgntSend.tsx"
+
++
++
+ // plus-diff-end
+```
+
+At this point, you should be able to see the ICS-29 fee UI in the app. See the diff up to this point [here](https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/commit/a93acb8e1b4194402a45506c5c3105b4dc03ad58). However, the fee amount is not being used in the transaction. Let's fix that.
+
+## 3. Add the ICS-29 Fee to the transaction
+
+Since we will perform a `MultiMsgTx` and follow the [immediate incentivization flow](https://ibc.cosmos.network/v7/middleware/ics29-fee/msgs#escrowing-fees), we must import the required msg constructors from the `ts-client`.
+
+```ts title="src/components/IgntSend.tsx"
+export default function IgntSend(props: IgntSendProps) {
+ const [state, setState] = useState(initialState);
+ const client = useClient();
+ const sendMsgSend = client.CosmosBankV1Beta1.tx.sendMsgSend;
+ const sendMsgTransfer = client.IbcApplicationsTransferV1.tx.sendMsgTransfer;
+ // plus-diff-start
++ const msgTransfer = client.IbcApplicationsTransferV1.tx.msgTransfer;
++ const msgPayPacketFee = client.IbcApplicationsFeeV1.tx.msgPayPacketFee;
+ // plus-diff-end
+ const { address } = useAddressContext();
+ const { balances } = useAssets(100);
+```
+
+Recall that the `PayPacketFee` message allows defining different tokens and amounts for each fee type (`RecvFee`, `AckFee`, and `TimeoutFee`). We will use the same amount for all three fee types.
+
+The amount used will be half the amount of the `relayerFee` selected by the user. This is because one of `AckFee` or `TimeoutFee` will necessarily be refunded to the user since a packet either timeouts or receives acknowledgement but not both.
+
+```ts title="src/components/IgntSend.tsx"
+ const sendTx = async (): Promise => {
+ const fee: Array = state.tx.fees.map((x) => ({
+ denom: x.denom,
+ amount: x.amount == "" ? "0" : x.amount,
+ }));
+
+ const amount: Array = state.tx.amounts.map((x) => ({
+ denom: x.denom,
+ amount: x.amount == "" ? "0" : x.amount,
+ }));
+
+ // plus-diff-start
++ const relayerFee: Array = state.tx.relayerFee.map((x) => {
++ const intAmount = x.amount == "" ? 0 : parseInt(x.amount, 10);
++ const newAmount = Math.floor(intAmount / 2);
++ return {
++ denom: x.denom,
++ amount: newAmount.toString(),
++ };
++ });
++
+ // plus-diff-end
+```
+
+Now that the fee amount is defined, we can build the tx. Currently, the way that the react app works is it checks whether or not a channel has been provided. If it has, it will send a `MsgTransfer` message (`isIBC = true`). Otherwise, it will send a `MsgSend` message (`isIBC = false`).
+We will do something similar. We will check if `relayerFee` has been provided, if it is provided, and if `isIBC = true`, then we will build a `MultiMsgTx` with `PayPacketFee` and `MsgTransfer`.
+
+```ts title="src/components/IgntSend.tsx"
+ const memo = state.tx.memo;
+
+ const isIBC = state.tx.ch !== "";
+
+ // plus-diff-start
++ const isFee = state.tx.relayerFee.length > 0;
++
+ // plus-diff-end
+ let send;
+
+ let payload: any = {
+ amount,
+ toAddress: state.tx.receiver,
+ fromAddress: address,
+ };
+ setState((oldState) => ({ ...oldState, currentUIState: UI_STATE.TX_SIGNING }));
+ try {
+ if (isIBC) {
+ payload = {
+ ...payload,
+ sourcePort: "transfer",
+ sourceChannel: state.tx.ch,
+ sender: address,
+ receiver: state.tx.receiver,
+ timeoutHeight: 0,
+ timeoutTimestamp: Long.fromNumber(new Date().getTime() + 60000).multiply(1000000),
+ token: state.tx.amounts[0],
+ };
+
+ // minus-diff-start
+- send = () =>
+- sendMsgTransfer({
+- value: payload,
+- fee: { amount: fee as Readonly[], gas: "200000" },
+- memo,
+- });
+ // minus-diff-end
+ // plus-diff-start
++ if (isFee) {
++ const payFeeMsg = msgPayPacketFee({
++ value: {
++ signer: address,
++ sourcePortId: "transfer",
++ sourceChannelId: state.tx.ch,
++ relayers: [],
++ fee: {
++ recvFee: relayerFee,
++ ackFee: relayerFee,
++ timeoutFee: relayerFee,
++ },
++ },
++ });
++
++ const transferMsg = msgTransfer({
++ value: payload,
++ });
++
++ send = () =>
++ client.signAndBroadcast(
++ [payFeeMsg, transferMsg],
++ { amount: fee as Readonly[], gas: "200000" },
++ memo,
++ );
++ } else {
++ send = () =>
++ sendMsgTransfer({
++ value: payload,
++ fee: { amount: fee as Readonly[], gas: "200000" },
++ memo,
++ });
++ }
+ // plus-diff-end
+ } else {
+```
+
+See the diff up to this point [here](https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/commit/0b3ddc8f8fe547624ec0d38f08e2344d29d22ee7). We will test the UI in the next section.
diff --git a/docs/tutorials/01-fee/07-test-app.md b/docs/tutorials/01-fee/07-test-app.md
new file mode 100644
index 00000000000..78aadfdc8cd
--- /dev/null
+++ b/docs/tutorials/01-fee/07-test-app.md
@@ -0,0 +1,121 @@
+---
+title: Testing the React App
+sidebar_label: Testing the React App
+sidebar_position: 7
+slug: /fee/test-react
+---
+
+import HighlightBox from '@site/src/components/HighlightBox';
+
+# Testing the React app
+
+
+
+In this section, you will:
+
+- Run two chains locally.
+- Configure and run a relayer.
+- Make an incentivized IBC transfer between the two chains.
+
+
+
+In this section, we will test the React app we created in the previous section. We will run two chains locally, configure and run a relayer, and make an incentivized IBC transfer between the two chains.
+You can find the React app we created in the previous section [here](https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo)
+
+## Run two chains locally
+
+Ignite supports running multiple chains locally with different configs. The source chain will be called earth and the destination chain will be called mars.
+Add the following config files to the root of the project:
+
+```yaml reference title="earth.yml"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/96cb63bf2e60b4613a89841416066551dd666c0d/earth.yml
+```
+
+```yaml reference title="mars.yml"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/96cb63bf2e60b4613a89841416066551dd666c0d/mars.yml
+```
+
+To run the chains, use the following commands and quit with `q`:
+
+```bash
+ignite chain serve -c earth.yml --reset-once
+```
+
+```bash
+ignite chain serve -c mars.yml --reset-once
+```
+
+## Configure Hermes
+
+We first need to create a relayer configuration file. Add the following file to the root of the project:
+
+```toml reference title="hermes/config.toml"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/0186b9ee979c288efbe3fe5fd071169d9dbcf91e/hermes/config.toml
+```
+
+We can move this file to the `~/.hermes` directory to avoid having to specify the path to the config file every time we run the relayer:
+
+```bash
+mkdir -p ~/.hermes
+cp hermes/config.toml ~/.hermes/config.toml
+```
+
+Otherwise, we can specify the path to the config file with the `--config` flag in each command. Next, we need to add keys to hermes.
+We will add `charlie` key to the `earth` chain and `damian` key to the `mars` chain. Add the following files to the project:
+
+```text reference title="hermes/charlie.mnemonic"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/960d8b7e148cbe2207c3a743bac7c0985a5b653a/hermes/charlie.mnemonic
+```
+
+```text reference title="hermes/damian.mnemonic"
+https://github.com/srdtrk/cosmoverse2023-ibc-fee-demo/blob/960d8b7e148cbe2207c3a743bac7c0985a5b653a/hermes/damian.mnemonic
+```
+
+We can add these keys to the chains with the following commands:
+
+```bash
+hermes keys add --key-name charlie --chain earth --mnemonic-file hermes/charlie.mnemonic
+```
+
+```bash
+hermes keys add --key-name damian --chain mars --mnemonic-file hermes/damian.mnemonic
+```
+
+## Test the app
+
+Prepare 4 terminal windows and run the following commands in each of the first three:
+
+```bash title="Terminal 1"
+ignite chain serve -c earth.yml --reset-once
+```
+
+```bash title="Terminal 2"
+ignite chain serve -c mars.yml --reset-once
+```
+
+```bash title="Terminal 3"
+cd react
+npm run dev
+```
+
+The last terminal will be used to run the relayer. First, we will create the client, connection, and channel between the two chains by running:
+
+```bash title="Terminal 4"
+hermes create channel --channel-version '{"fee_version":"ics29-1","app_version":"ics20-1"}' --a-chain earth --b-chain mars --a-port transfer --b-port transfer --new-client-connection --yes
+```
+
+This will create an incentivized IBC transfer channel between the two chains with the channel id `channel-0`, and channel version `{"fee_version":"ics29-1","app_version":"ics20-1"}`.
+
+Next recall that the Fee Middleware only pays fees on the source chain. That's why we should register `damian` and `charlie` as each other's counterparty on both chains.
+Luckily, the relayer does this for us under the hood because we've enabled the `auto_register_counterparty_payee` option in the config file.
+
+Now we can run the relayer with the following command:
+
+```bash title="Terminal 4"
+hermes start
+```
+
+We can now use the react app to make an incentivized IBC transfer from `anna` on the `earth` chain to `bo` on the `mars` chain. After which, we can use the frontend to view the balance of `charlie` to see if they've received the fee.
+Don't forget to quit all the processes after the test is done.
+
+![React Demo](./images/react-fee-demo.png)
diff --git a/docs/tutorials/01-fee/_category_.json b/docs/tutorials/01-fee/_category_.json
new file mode 100644
index 00000000000..002454069da
--- /dev/null
+++ b/docs/tutorials/01-fee/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Fee Middleware Integration",
+ "position": 1,
+ "link": null
+}
diff --git a/docs/tutorials/01-fee/images/ignite-landing.png b/docs/tutorials/01-fee/images/ignite-landing.png
new file mode 100644
index 00000000000..abbdef8726a
Binary files /dev/null and b/docs/tutorials/01-fee/images/ignite-landing.png differ
diff --git a/docs/tutorials/01-fee/images/ignite-react-fee.png b/docs/tutorials/01-fee/images/ignite-react-fee.png
new file mode 100644
index 00000000000..22a649bfb35
Binary files /dev/null and b/docs/tutorials/01-fee/images/ignite-react-fee.png differ
diff --git a/docs/tutorials/01-fee/images/ignite-unmodified.png b/docs/tutorials/01-fee/images/ignite-unmodified.png
new file mode 100644
index 00000000000..59311c156c5
Binary files /dev/null and b/docs/tutorials/01-fee/images/ignite-unmodified.png differ
diff --git a/docs/tutorials/01-fee/images/react-fee-demo.png b/docs/tutorials/01-fee/images/react-fee-demo.png
new file mode 100644
index 00000000000..94f449c8d5b
Binary files /dev/null and b/docs/tutorials/01-fee/images/react-fee-demo.png differ
diff --git a/docs/versioned_docs/version-v4.4.x/00-intro.md b/docs/versioned_docs/version-v4.5.x/00-intro.md
similarity index 89%
rename from docs/versioned_docs/version-v4.4.x/00-intro.md
rename to docs/versioned_docs/version-v4.5.x/00-intro.md
index c842dac0022..d57c0aa3f96 100644
--- a/docs/versioned_docs/version-v4.4.x/00-intro.md
+++ b/docs/versioned_docs/version-v4.5.x/00-intro.md
@@ -3,6 +3,10 @@ slug: /
sidebar_position: 0
---
+:::danger
+This version of ibc-go is not supported anymore. Please upgrade to the latest version.
+:::
+
# IBC-Go Documentation
Welcome to the IBC-Go documentation!
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/01-overview.md b/docs/versioned_docs/version-v4.5.x/01-ibc/01-overview.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/01-overview.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/01-overview.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/02-integration.md b/docs/versioned_docs/version-v4.5.x/01-ibc/02-integration.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/02-integration.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/02-integration.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/01-apps.md b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/01-apps.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/01-apps.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/01-apps.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/02-ibcmodule.md
similarity index 99%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/02-ibcmodule.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/02-ibcmodule.md
index 46736b1b881..ce96fbe4778 100644
--- a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/02-ibcmodule.md
+++ b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/02-ibcmodule.md
@@ -218,7 +218,7 @@ Just as IBC expects modules to implement callbacks for channel handshakes, it al
Once a module A and module B are connected to each other, relayers can start relaying packets and acknowledgements back and forth on the channel.
-![IBC packet flow diagram](https://ibcprotocol.org/_nuxt/img/packet_flow.1d89ee0.png)
+![IBC packet flow diagram](./images/packet_flow.png)
Briefly, a successful packet flow works as follows:
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/03-bindports.md b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/03-bindports.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/03-bindports.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/03-bindports.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/04-keeper.md b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/04-keeper.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/04-keeper.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/04-keeper.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/05-packets_acks.md
similarity index 96%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/05-packets_acks.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/05-packets_acks.md
index 95bec486255..c5c0e5daa65 100644
--- a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/05-packets_acks.md
+++ b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/05-packets_acks.md
@@ -27,7 +27,7 @@ channel, as well as how they will encode/decode it. This process is not specifie
to each application module to determine how to implement this agreement. However, for most
applications this will happen as a version negotiation during the channel handshake. While more
complex version negotiation is possible to implement inside the channel opening handshake, a very
-simple version negotation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
+simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
Thus, a module must define its custom packet data structure, along with a well-defined way to
encode and decode it to and from `[]byte`.
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/06-routing.md b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/06-routing.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/06-routing.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/06-routing.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/_category_.json b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/_category_.json
rename to docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/_category_.json
diff --git a/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/images/packet_flow.png
new file mode 100644
index 00000000000..db2d1d314b8
Binary files /dev/null and b/docs/versioned_docs/version-v4.5.x/01-ibc/03-apps/images/packet_flow.png differ
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/01-develop.md b/docs/versioned_docs/version-v4.5.x/01-ibc/04-middleware/01-develop.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/01-develop.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/04-middleware/01-develop.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/02-integration.md b/docs/versioned_docs/version-v4.5.x/01-ibc/04-middleware/02-integration.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/02-integration.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/04-middleware/02-integration.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/_category_.json b/docs/versioned_docs/version-v4.5.x/01-ibc/04-middleware/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/_category_.json
rename to docs/versioned_docs/version-v4.5.x/01-ibc/04-middleware/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/00-intro.md b/docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/00-intro.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/00-intro.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/00-intro.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/01-quick-guide.md b/docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/01-quick-guide.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/01-quick-guide.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/01-quick-guide.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/02-developer-guide.md b/docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/02-developer-guide.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/02-developer-guide.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/02-developer-guide.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/03-genesis-restart.md b/docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/03-genesis-restart.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/03-genesis-restart.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/03-genesis-restart.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/_category_.json b/docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/_category_.json
rename to docs/versioned_docs/version-v4.5.x/01-ibc/05-upgrades/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/06-proposals.md b/docs/versioned_docs/version-v4.5.x/01-ibc/06-proposals.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/06-proposals.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/06-proposals.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/07-relayer.md b/docs/versioned_docs/version-v4.5.x/01-ibc/07-relayer.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/07-relayer.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/07-relayer.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/08-proto-docs.md b/docs/versioned_docs/version-v4.5.x/01-ibc/08-proto-docs.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/08-proto-docs.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/08-proto-docs.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/09-roadmap.md b/docs/versioned_docs/version-v4.5.x/01-ibc/09-roadmap.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/09-roadmap.md
rename to docs/versioned_docs/version-v4.5.x/01-ibc/09-roadmap.md
diff --git a/docs/versioned_docs/version-v4.4.x/01-ibc/_category_.json b/docs/versioned_docs/version-v4.5.x/01-ibc/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/01-ibc/_category_.json
rename to docs/versioned_docs/version-v4.5.x/01-ibc/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/01-overview.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/01-overview.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/01-overview.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/01-overview.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/02-state.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/02-state.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/02-state.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/02-state.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/03-state-transitions.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/03-state-transitions.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/03-state-transitions.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/03-state-transitions.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/04-messages.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/04-messages.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/04-messages.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/04-messages.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/05-events.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/05-events.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/05-events.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/05-events.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/06-metrics.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/06-metrics.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/06-metrics.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/06-metrics.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/07-params.md b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/07-params.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/07-params.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/07-params.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/_category_.json b/docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/_category_.json
rename to docs/versioned_docs/version-v4.5.x/02-apps/01-transfer/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/01-overview.md b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/01-overview.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/01-overview.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/01-overview.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/02-auth-modules.md b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/02-auth-modules.md
similarity index 99%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/02-auth-modules.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/02-auth-modules.md
index 26014bc286a..cf3b2417af4 100644
--- a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/02-auth-modules.md
+++ b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/02-auth-modules.md
@@ -141,7 +141,7 @@ func (im IBCModule) OnChanCloseInit(
}
// OnRecvPacket implements the IBCModule interface. A successful acknowledgement
-// is returned if the packet data is succesfully decoded and the receive application
+// is returned if the packet data is successfully decoded and the receive application
// logic returns without error.
func (im IBCModule) OnRecvPacket(
ctx sdk.Context,
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/03-active-channels.md b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/03-active-channels.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/03-active-channels.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/03-active-channels.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/04-integration.md b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/04-integration.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/04-integration.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/04-integration.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/05-parameters.md b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/05-parameters.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/05-parameters.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/05-parameters.md
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/06-transactions.md b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/06-transactions.md
similarity index 90%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/06-transactions.md
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/06-transactions.md
index 05586d3678e..394d374989f 100644
--- a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/06-transactions.md
+++ b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/06-transactions.md
@@ -22,6 +22,6 @@ Transactions are executed via the ICS27 [`SendTx` API](02-auth-modules.md#trysen
## Atomicity
-As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/core/store.html#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/core/context.html) type.
+As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/learn/advanced/store#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/learn/advanced/context.html) type.
This provides atomic execution of transactions when using Interchain Accounts, where state changes are only committed if all `Msg`s succeed.
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/_category_.json b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/_category_.json
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/images/send-interchain-tx.png b/docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/images/send-interchain-tx.png
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/images/send-interchain-tx.png
rename to docs/versioned_docs/version-v4.5.x/02-apps/02-interchain-accounts/images/send-interchain-tx.png
diff --git a/docs/versioned_docs/version-v4.4.x/02-apps/_category_.json b/docs/versioned_docs/version-v4.5.x/02-apps/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/02-apps/_category_.json
rename to docs/versioned_docs/version-v4.5.x/02-apps/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/01-overview.md
similarity index 99%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/01-overview.md
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/01-overview.md
index b1e85bfb9eb..631e28bff55 100644
--- a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/01-overview.md
+++ b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/01-overview.md
@@ -35,7 +35,7 @@ To achieve the stated requirements, the **fee middleware module has two main gro
This is described in the [Fee messages section](03-msgs.md).
-We complete the introduction by giving a list of definitions of relevant terminolgy.
+We complete the introduction by giving a list of definitions of relevant terminology.
`Forward relayer`: The relayer that submits the `MsgRecvPacket` message for a given packet (on the destination chain).
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/02-integration.md b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/02-integration.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/02-integration.md
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/02-integration.md
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/03-msgs.md b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/03-msgs.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/03-msgs.md
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/03-msgs.md
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/04-fee-distribution.md b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/04-fee-distribution.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/04-fee-distribution.md
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/04-fee-distribution.md
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/05-events.md b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/05-events.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/05-events.md
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/05-events.md
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/06-end-users.md b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/06-end-users.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/06-end-users.md
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/06-end-users.md
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/_category_.json b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/_category_.json
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/feeflow.png b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/images/feeflow.png
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/feeflow.png
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/images/feeflow.png
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/msgpaypacket.png b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/images/msgpaypacket.png
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/msgpaypacket.png
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/images/msgpaypacket.png
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png b/docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png
rename to docs/versioned_docs/version-v4.5.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png
diff --git a/docs/versioned_docs/version-v4.4.x/03-middleware/_category_.json b/docs/versioned_docs/version-v4.5.x/03-middleware/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/03-middleware/_category_.json
rename to docs/versioned_docs/version-v4.5.x/03-middleware/_category_.json
diff --git a/docs/versioned_docs/version-v4.4.x/04-migrations/01-support-denoms-with-slashes.md b/docs/versioned_docs/version-v4.5.x/04-migrations/01-support-denoms-with-slashes.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/04-migrations/01-support-denoms-with-slashes.md
rename to docs/versioned_docs/version-v4.5.x/04-migrations/01-support-denoms-with-slashes.md
diff --git a/docs/versioned_docs/version-v4.4.x/04-migrations/02-sdk-to-v1.md b/docs/versioned_docs/version-v4.5.x/04-migrations/02-sdk-to-v1.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/04-migrations/02-sdk-to-v1.md
rename to docs/versioned_docs/version-v4.5.x/04-migrations/02-sdk-to-v1.md
diff --git a/docs/versioned_docs/version-v4.4.x/04-migrations/03-v1-to-v2.md b/docs/versioned_docs/version-v4.5.x/04-migrations/03-v1-to-v2.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/04-migrations/03-v1-to-v2.md
rename to docs/versioned_docs/version-v4.5.x/04-migrations/03-v1-to-v2.md
diff --git a/docs/versioned_docs/version-v4.4.x/04-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v4.5.x/04-migrations/04-v2-to-v3.md
similarity index 96%
rename from docs/versioned_docs/version-v4.4.x/04-migrations/04-v2-to-v3.md
rename to docs/versioned_docs/version-v4.5.x/04-migrations/04-v2-to-v3.md
index ceddf14c360..54a5bd47f8e 100644
--- a/docs/versioned_docs/version-v4.4.x/04-migrations/04-v2-to-v3.md
+++ b/docs/versioned_docs/version-v4.5.x/04-migrations/04-v2-to-v3.md
@@ -72,7 +72,7 @@ For example, if a chain chooses not to integrate a controller submodule, it may
#### Add `StoreUpgrades` for ICS27 module
-For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/v0.45/core/upgrade.html#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
+For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/main/learn/advanced/upgrade#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
```go
if upgradeInfo.Name == "v3" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
@@ -136,7 +136,7 @@ type AnteDecorator struct {
The `OnChanOpenTry` application callback has been modified.
The return signature now includes the application version.
-IBC applications must perform application version negoitation in `OnChanOpenTry` using the counterparty version.
+IBC applications must perform application version negotiation in `OnChanOpenTry` using the counterparty version.
The negotiated application version then must be returned in `OnChanOpenTry` to core IBC.
Core IBC will set this version in the TRYOPEN channel.
diff --git a/docs/versioned_docs/version-v4.4.x/04-migrations/05-v3-to-v4.md b/docs/versioned_docs/version-v4.5.x/04-migrations/05-v3-to-v4.md
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/04-migrations/05-v3-to-v4.md
rename to docs/versioned_docs/version-v4.5.x/04-migrations/05-v3-to-v4.md
diff --git a/docs/versioned_docs/version-v4.4.x/04-migrations/_category_.json b/docs/versioned_docs/version-v4.5.x/04-migrations/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v4.4.x/04-migrations/_category_.json
rename to docs/versioned_docs/version-v4.5.x/04-migrations/_category_.json
diff --git a/docs/versioned_docs/version-v5.3.x/00-intro.md b/docs/versioned_docs/version-v5.3.x/00-intro.md
index c842dac0022..d57c0aa3f96 100644
--- a/docs/versioned_docs/version-v5.3.x/00-intro.md
+++ b/docs/versioned_docs/version-v5.3.x/00-intro.md
@@ -3,6 +3,10 @@ slug: /
sidebar_position: 0
---
+:::danger
+This version of ibc-go is not supported anymore. Please upgrade to the latest version.
+:::
+
# IBC-Go Documentation
Welcome to the IBC-Go documentation!
diff --git a/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/02-ibcmodule.md
index 46736b1b881..ce96fbe4778 100644
--- a/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/02-ibcmodule.md
+++ b/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/02-ibcmodule.md
@@ -218,7 +218,7 @@ Just as IBC expects modules to implement callbacks for channel handshakes, it al
Once a module A and module B are connected to each other, relayers can start relaying packets and acknowledgements back and forth on the channel.
-![IBC packet flow diagram](https://ibcprotocol.org/_nuxt/img/packet_flow.1d89ee0.png)
+![IBC packet flow diagram](./images/packet_flow.png)
Briefly, a successful packet flow works as follows:
diff --git a/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/05-packets_acks.md
index 95bec486255..c5c0e5daa65 100644
--- a/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/05-packets_acks.md
+++ b/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/05-packets_acks.md
@@ -27,7 +27,7 @@ channel, as well as how they will encode/decode it. This process is not specifie
to each application module to determine how to implement this agreement. However, for most
applications this will happen as a version negotiation during the channel handshake. While more
complex version negotiation is possible to implement inside the channel opening handshake, a very
-simple version negotation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
+simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
Thus, a module must define its custom packet data structure, along with a well-defined way to
encode and decode it to and from `[]byte`.
diff --git a/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/images/packet_flow.png
new file mode 100644
index 00000000000..db2d1d314b8
Binary files /dev/null and b/docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/images/packet_flow.png differ
diff --git a/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/02-auth-modules.md b/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/02-auth-modules.md
index 34b75c2f8d8..08ca8528a59 100644
--- a/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/02-auth-modules.md
+++ b/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/02-auth-modules.md
@@ -141,7 +141,7 @@ func (im IBCModule) OnChanCloseInit(
}
// OnRecvPacket implements the IBCModule interface. A successful acknowledgement
-// is returned if the packet data is succesfully decoded and the receive application
+// is returned if the packet data is successfully decoded and the receive application
// logic returns without error.
func (im IBCModule) OnRecvPacket(
ctx sdk.Context,
diff --git a/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/06-transactions.md b/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/06-transactions.md
index 05586d3678e..394d374989f 100644
--- a/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/06-transactions.md
+++ b/docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/06-transactions.md
@@ -22,6 +22,6 @@ Transactions are executed via the ICS27 [`SendTx` API](02-auth-modules.md#trysen
## Atomicity
-As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/core/store.html#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/core/context.html) type.
+As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/learn/advanced/store#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/learn/advanced/context.html) type.
This provides atomic execution of transactions when using Interchain Accounts, where state changes are only committed if all `Msg`s succeed.
diff --git a/docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/01-overview.md
index f6edae76ceb..3dbd44664bf 100644
--- a/docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/01-overview.md
+++ b/docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/01-overview.md
@@ -36,7 +36,7 @@ To achieve the stated requirements, the **fee middleware module has two main gro
This is described in the [Fee messages section](03-msgs.md).
-We complete the introduction by giving a list of definitions of relevant terminolgy.
+We complete the introduction by giving a list of definitions of relevant terminology.
`Forward relayer`: The relayer that submits the `MsgRecvPacket` message for a given packet (on the destination chain).
diff --git a/docs/versioned_docs/version-v5.3.x/04-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v5.3.x/04-migrations/04-v2-to-v3.md
index 6b6a7972777..62bc3972095 100644
--- a/docs/versioned_docs/version-v5.3.x/04-migrations/04-v2-to-v3.md
+++ b/docs/versioned_docs/version-v5.3.x/04-migrations/04-v2-to-v3.md
@@ -72,7 +72,7 @@ For example, if a chain chooses not to integrate a controller submodule, it may
#### Add `StoreUpgrades` for ICS27 module
-For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/v0.45/core/upgrade.html#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
+For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/main/learn/advanced/upgrade#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
```go
if upgradeInfo.Name == "v3" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
@@ -136,7 +136,7 @@ type AnteDecorator struct {
The `OnChanOpenTry` application callback has been modified.
The return signature now includes the application version.
-IBC applications must perform application version negoitation in `OnChanOpenTry` using the counterparty version.
+IBC applications must perform application version negotiation in `OnChanOpenTry` using the counterparty version.
The negotiated application version then must be returned in `OnChanOpenTry` to core IBC.
Core IBC will set this version in the TRYOPEN channel.
diff --git a/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/02-ibcmodule.md
index adc0c65332e..6b25e53ab20 100644
--- a/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/02-ibcmodule.md
+++ b/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/02-ibcmodule.md
@@ -218,7 +218,7 @@ Just as IBC expects modules to implement callbacks for channel handshakes, it al
Once a module A and module B are connected to each other, relayers can start relaying packets and acknowledgements back and forth on the channel.
-![IBC packet flow diagram](https://ibcprotocol.org/_nuxt/img/packet_flow.1d89ee0.png)
+![IBC packet flow diagram](./images/packet_flow.png)
Briefly, a successful packet flow works as follows:
diff --git a/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/05-packets_acks.md
index fc6070e6ea6..7990a195de8 100644
--- a/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/05-packets_acks.md
+++ b/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/05-packets_acks.md
@@ -27,7 +27,7 @@ channel, as well as how they will encode/decode it. This process is not specifie
to each application module to determine how to implement this agreement. However, for most
applications this will happen as a version negotiation during the channel handshake. While more
complex version negotiation is possible to implement inside the channel opening handshake, a very
-simple version negotation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
+simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
Thus, a module must define its custom packet data structure, along with a well-defined way to
encode and decode it to and from `[]byte`.
diff --git a/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/images/packet_flow.png
new file mode 100644
index 00000000000..db2d1d314b8
Binary files /dev/null and b/docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/images/packet_flow.png differ
diff --git a/docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/08-authorizations.md b/docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/08-authorizations.md
index 4efa9d749e7..bc6ff59d424 100644
--- a/docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/08-authorizations.md
+++ b/docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/08-authorizations.md
@@ -19,7 +19,7 @@ It takes:
- a `SourcePort` and a `SourceChannel` which together comprise the unique transfer channel identifier over which authorized funds can be transferred.
-- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transfered, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes.
+- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transferred, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes.
- an `AllowList` list that specifies the list of addresses that are allowed to receive funds. If this list is empty, then all addresses are allowed to receive funds from the `TransferAuthorization`.
diff --git a/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/02-development.md b/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/02-development.md
index d2c7345ae79..06b292d7954 100644
--- a/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/02-development.md
+++ b/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/02-development.md
@@ -22,7 +22,7 @@ If you wish to consume and execute custom logic in the packet callbacks, then pl
## Redirection to a smart contract
It may be desirable to allow smart contracts to control an interchain account.
-To faciliate such an action, the controller submodule may be provided an underlying application which redirects to smart contract callers.
+To facilitate such an action, the controller submodule may be provided an underlying application which redirects to smart contract callers.
An improved design has been suggested in [ADR 008](https://github.com/cosmos/ibc-go/pull/1976) which performs this action via middleware.
Implementors of this use case are recommended to follow the ADR 008 approach.
diff --git a/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/05-messages.md b/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/05-messages.md
index 93172d04517..e9d6c517752 100644
--- a/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/05-messages.md
+++ b/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/05-messages.md
@@ -72,6 +72,6 @@ The packet `Sequence` is returned in the message response.
## Atomicity
-As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/core/store.html#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/core/context.html) type.
+As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/learn/advanced/store#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/learn/advanced/context.html) type.
This provides atomic execution of transactions when using Interchain Accounts, where state changes are only committed if all `Msg`s succeed.
diff --git a/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/01-auth-modules.md b/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/01-auth-modules.md
index 5903f81e6a2..89db42d321f 100644
--- a/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/01-auth-modules.md
+++ b/docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/01-auth-modules.md
@@ -134,7 +134,7 @@ func (im IBCModule) OnChanCloseInit(
}
// OnRecvPacket implements the IBCModule interface. A successful acknowledgement
-// is returned if the packet data is succesfully decoded and the receive application
+// is returned if the packet data is successfully decoded and the receive application
// logic returns without error.
func (im IBCModule) OnRecvPacket(
ctx sdk.Context,
diff --git a/docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/01-overview.md
index f6edae76ceb..3dbd44664bf 100644
--- a/docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/01-overview.md
+++ b/docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/01-overview.md
@@ -36,7 +36,7 @@ To achieve the stated requirements, the **fee middleware module has two main gro
This is described in the [Fee messages section](03-msgs.md).
-We complete the introduction by giving a list of definitions of relevant terminolgy.
+We complete the introduction by giving a list of definitions of relevant terminology.
`Forward relayer`: The relayer that submits the `MsgRecvPacket` message for a given packet (on the destination chain).
diff --git a/docs/versioned_docs/version-v6.2.x/04-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v6.2.x/04-migrations/04-v2-to-v3.md
index 5d9153594a3..8cef606a1ad 100644
--- a/docs/versioned_docs/version-v6.2.x/04-migrations/04-v2-to-v3.md
+++ b/docs/versioned_docs/version-v6.2.x/04-migrations/04-v2-to-v3.md
@@ -72,7 +72,7 @@ For example, if a chain chooses not to integrate a controller submodule, it may
#### Add `StoreUpgrades` for ICS27 module
-For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/v0.45/core/upgrade.html#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
+For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/main/learn/advanced/upgrade#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
```go
if upgradeInfo.Name == "v3" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
@@ -136,7 +136,7 @@ type AnteDecorator struct {
The `OnChanOpenTry` application callback has been modified.
The return signature now includes the application version.
-IBC applications must perform application version negoitation in `OnChanOpenTry` using the counterparty version.
+IBC applications must perform application version negotiation in `OnChanOpenTry` using the counterparty version.
The negotiated application version then must be returned in `OnChanOpenTry` to core IBC.
Core IBC will set this version in the TRYOPEN channel.
diff --git a/docs/versioned_docs/version-v6.2.x/04-migrations/07-v5-to-v6.md b/docs/versioned_docs/version-v6.2.x/04-migrations/07-v5-to-v6.md
index 93f955568e3..ae398a45c7c 100644
--- a/docs/versioned_docs/version-v6.2.x/04-migrations/07-v5-to-v6.md
+++ b/docs/versioned_docs/version-v6.2.x/04-migrations/07-v5-to-v6.md
@@ -97,7 +97,7 @@ app.UpgradeKeeper.SetUpgradeHandler(
In previous releases of ibc-go, chain developers integrating the ICS27 interchain accounts controller functionality were expected to create a custom `Base Application` referred to as an authentication module, see the section [Building an authentication module](../02-apps/02-interchain-accounts/03-auth-modules.md) from the documentation.
-The `Base Application` was intended to be composed with the ICS27 controller submodule `Keeper` and faciliate many forms of message authentication depending on a chain's particular use case.
+The `Base Application` was intended to be composed with the ICS27 controller submodule `Keeper` and facilitate many forms of message authentication depending on a chain's particular use case.
Prior to ibc-go v6 the controller submodule exposed only these two functions (to which we will refer as the legacy APIs):
diff --git a/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/02-ibcmodule.md
index a3c15391b8f..ec080e71b7a 100644
--- a/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/02-ibcmodule.md
+++ b/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/02-ibcmodule.md
@@ -219,7 +219,7 @@ Just as IBC expects modules to implement callbacks for channel handshakes, it al
Once a module A and module B are connected to each other, relayers can start relaying packets and acknowledgements back and forth on the channel.
-![IBC packet flow diagram](https://ibcprotocol.dev/_nuxt/img/packet_flow.1d89ee0.png)
+![IBC packet flow diagram](./images/packet_flow.png)
Briefly, a successful packet flow works as follows:
diff --git a/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/05-packets_acks.md
index c6bf0e51cfc..07e29d74d51 100644
--- a/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/05-packets_acks.md
+++ b/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/05-packets_acks.md
@@ -28,7 +28,7 @@ channel, as well as how they will encode/decode it. This process is not specifie
to each application module to determine how to implement this agreement. However, for most
applications this will happen as a version negotiation during the channel handshake. While more
complex version negotiation is possible to implement inside the channel opening handshake, a very
-simple version negotation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
+simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
Thus, a module must define its custom packet data structure, along with a well-defined way to
encode and decode it to and from `[]byte`.
diff --git a/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/images/packet_flow.png
new file mode 100644
index 00000000000..db2d1d314b8
Binary files /dev/null and b/docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/images/packet_flow.png differ
diff --git a/docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/02-developer-guide.md b/docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/02-developer-guide.md
index 23203f44fbb..fb99db691a9 100644
--- a/docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/02-developer-guide.md
+++ b/docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/02-developer-guide.md
@@ -12,4 +12,4 @@ slug: /ibc/upgrades/developer-guide
Learn how to implement upgrade functionality for your custom IBC client.
:::
-Please see the section [Handling upgrades](../../03-ibc/01-light-clients/05-upgrades.md) from the light client developer guide for more information.
+Please see the section [Handling upgrades](../../03-light-clients/01-developer-guide/05-upgrades.md) from the light client developer guide for more information.
diff --git a/docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/08-authorizations.md b/docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/08-authorizations.md
index 0519e63d556..1f207c0fa35 100644
--- a/docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/08-authorizations.md
+++ b/docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/08-authorizations.md
@@ -20,7 +20,7 @@ It takes:
- a `SourcePort` and a `SourceChannel` which together comprise the unique transfer channel identifier over which authorized funds can be transferred.
-- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transfered, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes.
+- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transferred, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes.
- an `AllowList` list that specifies the list of addresses that are allowed to receive funds. If this list is empty, then all addresses are allowed to receive funds from the `TransferAuthorization`.
diff --git a/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/02-development.md b/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/02-development.md
index 4b640e2b10c..c0893883017 100644
--- a/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/02-development.md
+++ b/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/02-development.md
@@ -22,7 +22,7 @@ If you wish to consume and execute custom logic in the packet callbacks, then pl
## Redirection to a smart contract
It may be desirable to allow smart contracts to control an interchain account.
-To faciliate such an action, the controller submodule may be provided an underlying application which redirects to smart contract callers.
+To facilitate such an action, the controller submodule may be provided an underlying application which redirects to smart contract callers.
An improved design has been suggested in [ADR 008](https://github.com/cosmos/ibc-go/pull/1976) which performs this action via middleware.
Implementors of this use case are recommended to follow the ADR 008 approach.
diff --git a/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/05-messages.md b/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/05-messages.md
index 5f1e636b89b..0c29e7364c5 100644
--- a/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/05-messages.md
+++ b/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/05-messages.md
@@ -73,6 +73,6 @@ The packet `Sequence` is returned in the message response.
## Atomicity
-As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/core/store.html#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/core/context.html) type.
+As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/learn/advanced/store#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/learn/advanced/context.html) type.
This provides atomic execution of transactions when using Interchain Accounts, where state changes are only committed if all `Msg`s succeed.
diff --git a/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md b/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md
index 70cc36b8a69..96aca51c763 100644
--- a/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md
+++ b/docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md
@@ -134,7 +134,7 @@ func (im IBCModule) OnChanCloseInit(
}
// OnRecvPacket implements the IBCModule interface. A successful acknowledgement
-// is returned if the packet data is succesfully decoded and the receive application
+// is returned if the packet data is successfully decoded and the receive application
// logic returns without error.
func (im IBCModule) OnRecvPacket(
ctx sdk.Context,
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/01-overview.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/01-overview.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/01-overview.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/01-overview.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/02-client-state.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/02-client-state.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/02-client-state.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/02-client-state.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/03-consensus-state.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/03-consensus-state.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/03-consensus-state.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/03-consensus-state.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/04-updates-and-misbehaviour.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/04-updates-and-misbehaviour.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/05-upgrades.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/05-upgrades.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/05-upgrades.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/05-upgrades.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/06-proofs.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/06-proofs.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/06-proofs.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/06-proofs.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/07-proposals.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/07-proposals.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/07-proposals.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/07-proposals.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/08-genesis.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/08-genesis.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/08-genesis.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/08-genesis.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/09-setup.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/09-setup.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/09-setup.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/09-setup.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/_category_.json b/docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/01-light-clients/_category_.json
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/_category_.json
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/01-solomachine.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/01-solomachine.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/01-solomachine.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/01-solomachine.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/02-concepts.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/02-concepts.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/02-concepts.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/02-concepts.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/03-state.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/03-state.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/03-state.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/03-state.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/04-state_transitions.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/04-state_transitions.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/04-state_transitions.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/04-state_transitions.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/_category_.json b/docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/02-solomachine/_category_.json
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/_category_.json
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/01-overview.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/01-overview.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/01-overview.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/01-overview.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/02-integration.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/02-integration.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/02-integration.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/02-integration.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/03-client-state.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/03-client-state.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/03-client-state.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/03-client-state.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/04-connection.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/04-connection.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/04-connection.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/04-connection.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/05-state-verification.md b/docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/05-state-verification.md
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/05-state-verification.md
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/05-state-verification.md
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/_category_.json b/docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/03-localhost/_category_.json
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/_category_.json
diff --git a/docs/versioned_docs/version-v7.3.x/03-ibc/_category_.json b/docs/versioned_docs/version-v7.3.x/03-light-clients/_category_.json
similarity index 100%
rename from docs/versioned_docs/version-v7.3.x/03-ibc/_category_.json
rename to docs/versioned_docs/version-v7.3.x/03-light-clients/_category_.json
diff --git a/docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/01-overview.md
index b1e85bfb9eb..631e28bff55 100644
--- a/docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/01-overview.md
+++ b/docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/01-overview.md
@@ -35,7 +35,7 @@ To achieve the stated requirements, the **fee middleware module has two main gro
This is described in the [Fee messages section](03-msgs.md).
-We complete the introduction by giving a list of definitions of relevant terminolgy.
+We complete the introduction by giving a list of definitions of relevant terminology.
`Forward relayer`: The relayer that submits the `MsgRecvPacket` message for a given packet (on the destination chain).
diff --git a/docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/03-interfaces.md b/docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/03-interfaces.md
index 0c05b1bb27b..566e4ebb4e2 100644
--- a/docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/03-interfaces.md
+++ b/docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/03-interfaces.md
@@ -66,7 +66,7 @@ Since middlewares do not have packet types, they do not need to implement this i
### `ContractKeeper`
-The callbacks middleware requires the secondary application to implement the [`ContractKeeper`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/callbacks/types/expected_keepers.go#L11-L83) interface. The contract keeper will be invoked at each step of the packet lifecycle. When a packet is sent, if callback information is provided, the contract keeper will be invoked via the `IBCSendPacketCallback`. This allows the contract keeper to prevent packet sends when callback information is provided, for example if the sender is unauthroized to perform callbacks on the given information. If the packet send is successful, the contract keeper on the destination (if present) will be invoked when a packet has been received and the acknowledgement is written, this will occur via `IBCReceivePacketCallback`. At the end of the packet lifecycle, when processing acknowledgements or timeouts, the source contract keeper will be invoked either via `IBCOnAcknowledgementPacket` or `IBCOnTimeoutPacket`. Once a packet has been sent, each step of the packet lifecycle can be processed given that a relayer sets the gas limit to be more than or equal to the required `CommitGasLimit`. State changes performed in the callback will only be committed upon successful execution.
+The callbacks middleware requires the secondary application to implement the [`ContractKeeper`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/callbacks/types/expected_keepers.go#L11-L83) interface. The contract keeper will be invoked at each step of the packet lifecycle. When a packet is sent, if callback information is provided, the contract keeper will be invoked via the `IBCSendPacketCallback`. This allows the contract keeper to prevent packet sends when callback information is provided, for example if the sender is unauthorized to perform callbacks on the given information. If the packet send is successful, the contract keeper on the destination (if present) will be invoked when a packet has been received and the acknowledgement is written, this will occur via `IBCReceivePacketCallback`. At the end of the packet lifecycle, when processing acknowledgements or timeouts, the source contract keeper will be invoked either via `IBCOnAcknowledgementPacket` or `IBCOnTimeoutPacket`. Once a packet has been sent, each step of the packet lifecycle can be processed given that a relayer sets the gas limit to be more than or equal to the required `CommitGasLimit`. State changes performed in the callback will only be committed upon successful execution.
```go
// ContractKeeper defines the entry points exposed to the VM module which invokes a smart contract
diff --git a/docs/versioned_docs/version-v7.3.x/05-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v7.3.x/05-migrations/04-v2-to-v3.md
index 30465660d59..8bd1455f8dd 100644
--- a/docs/versioned_docs/version-v7.3.x/05-migrations/04-v2-to-v3.md
+++ b/docs/versioned_docs/version-v7.3.x/05-migrations/04-v2-to-v3.md
@@ -72,7 +72,7 @@ For example, if a chain chooses not to integrate a controller submodule, it may
#### Add `StoreUpgrades` for ICS27 module
-For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/v0.45/core/upgrade.html#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
+For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/main/learn/advanced/upgrade#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
```go
if upgradeInfo.Name == "v3" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
@@ -136,7 +136,7 @@ type AnteDecorator struct {
The `OnChanOpenTry` application callback has been modified.
The return signature now includes the application version.
-IBC applications must perform application version negoitation in `OnChanOpenTry` using the counterparty version.
+IBC applications must perform application version negotiation in `OnChanOpenTry` using the counterparty version.
The negotiated application version then must be returned in `OnChanOpenTry` to core IBC.
Core IBC will set this version in the TRYOPEN channel.
diff --git a/docs/versioned_docs/version-v7.3.x/05-migrations/07-v5-to-v6.md b/docs/versioned_docs/version-v7.3.x/05-migrations/07-v5-to-v6.md
index 93f955568e3..ae398a45c7c 100644
--- a/docs/versioned_docs/version-v7.3.x/05-migrations/07-v5-to-v6.md
+++ b/docs/versioned_docs/version-v7.3.x/05-migrations/07-v5-to-v6.md
@@ -97,7 +97,7 @@ app.UpgradeKeeper.SetUpgradeHandler(
In previous releases of ibc-go, chain developers integrating the ICS27 interchain accounts controller functionality were expected to create a custom `Base Application` referred to as an authentication module, see the section [Building an authentication module](../02-apps/02-interchain-accounts/03-auth-modules.md) from the documentation.
-The `Base Application` was intended to be composed with the ICS27 controller submodule `Keeper` and faciliate many forms of message authentication depending on a chain's particular use case.
+The `Base Application` was intended to be composed with the ICS27 controller submodule `Keeper` and facilitate many forms of message authentication depending on a chain's particular use case.
Prior to ibc-go v6 the controller submodule exposed only these two functions (to which we will refer as the legacy APIs):
diff --git a/docs/versioned_docs/version-v8.0.x/00-intro.md b/docs/versioned_docs/version-v8.0.x/00-intro.md
new file mode 100644
index 00000000000..8c781781f7d
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/00-intro.md
@@ -0,0 +1,16 @@
+---
+slug: /
+sidebar_position: 0
+---
+
+# IBC-Go Documentation
+
+Welcome to the documentation for IBC-Go, the Golang implementation of the Inter-Blockchain Communication Protocol! Looking for information on ibc-rs? [Click here to go to the ibc-rs github repo](https://github.com/cosmos/ibc-rs).
+
+The Inter-Blockchain Communication Protocol (IBC) is an end-to-end, connection-oriented, stateful protocol for reliable, ordered, and authenticated communication between heterogeneous blockchains arranged in an unknown and dynamic topology.
+
+IBC is a protocol that allows blockchains to talk to each other. Chains that speak IBC can share any type of data as long as it's encoded in bytes, enabling the industry’s most feature-rich cross-chain interactions. IBC is secure and permissionless.
+
+The protocol realizes this interoperability by specifying a set of data structures, abstractions, and semantics that can be implemented by any distributed ledger that satisfies a small set of requirements.
+
+IBC can be used to build a wide range of cross-chain applications that include token transfers, atomic swaps, multi-chain smart contracts (with or without mutually comprehensible VMs), cross-chain account control, and data and code sharding of various kinds.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md b/docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md
new file mode 100644
index 00000000000..73c755d18a8
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md
@@ -0,0 +1,297 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /ibc/overview
+---
+
+
+# Overview
+
+:::note Synopsis
+Learn about IBC, its components, and its use cases.
+:::
+
+## What is the Inter-Blockchain Communication Protocol (IBC)?
+
+This document serves as a guide for developers who want to write their own Inter-Blockchain
+Communication Protocol (IBC) applications for custom use cases.
+
+> IBC applications must be written as self-contained modules.
+
+Due to the modular design of the IBC Protocol, IBC
+application developers do not need to be concerned with the low-level details of clients,
+connections, and proof verification.
+
+This brief explanation of the lower levels of the
+stack gives application developers a broad understanding of the IBC
+Protocol. Abstraction layer details for channels and ports are most relevant for application developers and describe how to define custom packets and `IBCModule` callbacks.
+
+The requirements to have your module interact over IBC are:
+
+- Bind to a port or ports.
+- Define your packet data.
+- Use the default acknowledgment struct provided by core IBC or optionally define a custom acknowledgment struct.
+- Standardize an encoding of the packet data.
+- Implement the `IBCModule` interface.
+
+Read on for a detailed explanation of how to write a self-contained IBC application module.
+
+## Components Overview
+
+### [Clients](https://github.com/cosmos/ibc-go/blob/main/modules/core/02-client)
+
+IBC clients are on-chain light clients. Each light client is identified by a unique client-id.
+IBC clients track the consensus states of other blockchains, along with the proof spec necessary to
+properly verify proofs against the client's consensus state. A client can be associated with any number
+of connections to the counterparty chain. The client identifier is auto generated using the client type
+and the global client counter appended in the format: `{client-type}-{N}`.
+
+A `ClientState` should contain chain specific and light client specific information necessary for verifying updates
+and upgrades to the IBC client. The `ClientState` may contain information such as chain-id, latest height, proof specs,
+unbonding periods or the status of the light client. The `ClientState` should not contain information that
+is specific to a given block at a certain height, this is the function of the `ConsensusState`. Each `ConsensusState`
+should be associated with a unique block and should be referenced using a height. IBC clients are given a
+client identifier prefixed store to store their associated client state and consensus states along with
+any metadata associated with the consensus states. Consensus states are stored using their associated height.
+
+The supported IBC clients are:
+
+- [Solo Machine light client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine): Devices such as phones, browsers, or laptops.
+- [Tendermint light client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/07-tendermint): The default for Cosmos SDK-based chains.
+- [Localhost (loopback) client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/09-localhost): Useful for
+testing, simulation, and relaying packets to modules on the same application.
+
+### IBC Client Heights
+
+IBC Client Heights are represented by the struct:
+
+```go
+type Height struct {
+ RevisionNumber uint64
+ RevisionHeight uint64
+}
+```
+
+The `RevisionNumber` represents the revision of the chain that the height is representing.
+A revision typically represents a continuous, monotonically increasing range of block-heights.
+The `RevisionHeight` represents the height of the chain within the given revision.
+
+On any reset of the `RevisionHeight`—for example, when hard-forking a Tendermint chain—
+the `RevisionNumber` will get incremented. This allows IBC clients to distinguish between a
+block-height `n` of a previous revision of the chain (at revision `p`) and block-height `n` of the current
+revision of the chain (at revision `e`).
+
+`Height`s that share the same revision number can be compared by simply comparing their respective `RevisionHeight`s.
+`Height`s that do not share the same revision number will only be compared using their respective `RevisionNumber`s.
+Thus a height `h` with revision number `e+1` will always be greater than a height `g` with revision number `e`,
+**REGARDLESS** of the difference in revision heights.
+
+Ex:
+
+```go
+Height{RevisionNumber: 3, RevisionHeight: 0} > Height{RevisionNumber: 2, RevisionHeight: 100000000000}
+```
+
+When a Tendermint chain is running a particular revision, relayers can simply submit headers and proofs with the revision number
+given by the chain's `chainID`, and the revision height given by the Tendermint block height. When a chain updates using a hard-fork
+and resets its block-height, it is responsible for updating its `chainID` to increment the revision number.
+IBC Tendermint clients then verifies the revision number against their `chainID` and treat the `RevisionHeight` as the Tendermint block-height.
+
+Tendermint chains wishing to use revisions to maintain persistent IBC connections even across height-resetting upgrades must format their `chainID`s
+in the following manner: `{chainID}-{revision_number}`. On any height-resetting upgrade, the `chainID` **MUST** be updated with a higher revision number
+than the previous value.
+
+Ex:
+
+- Before upgrade `chainID`: `gaiamainnet-3`
+- After upgrade `chainID`: `gaiamainnet-4`
+
+Clients that do not require revisions, such as the solo-machine client, simply hardcode `0` into the revision number whenever they
+need to return an IBC height when implementing IBC interfaces and use the `RevisionHeight` exclusively.
+
+Other client-types can implement their own logic to verify the IBC heights that relayers provide in their `Update`, `Misbehavior`, and
+`Verify` functions respectively.
+
+The IBC interfaces expect an `ibcexported.Height` interface, however all clients must use the concrete implementation provided in
+`02-client/types` and reproduced above.
+
+### [Connections](https://github.com/cosmos/ibc-go/blob/main/modules/core/03-connection)
+
+Connections encapsulate two `ConnectionEnd` objects on two separate blockchains. Each
+`ConnectionEnd` is associated with a client of the other blockchain (for example, the counterparty blockchain).
+The connection handshake is responsible for verifying that the light clients on each chain are
+correct for their respective counterparties. Connections, once established, are responsible for
+facilitating all cross-chain verifications of IBC state. A connection can be associated with any
+number of channels.
+
+### [Proofs](https://github.com/cosmos/ibc-go/blob/main/modules/core/23-commitment) and [Paths](https://github.com/cosmos/ibc-go/blob/main/modules/core/24-host)
+
+In IBC, blockchains do not directly pass messages to each other over the network. Instead, to
+communicate, a blockchain commits some state to a specifically defined path that is reserved for a
+specific message type and a specific counterparty. For example, for storing a specific connectionEnd as part
+of a handshake or a packet intended to be relayed to a module on the counterparty chain. A relayer
+process monitors for updates to these paths and relays messages by submitting the data stored
+under the path and a proof to the counterparty chain.
+
+Proofs are passed from core IBC to light-clients as bytes. It is up to light client implementation to interpret these bytes appropriately.
+
+- The paths that all IBC implementations must use for committing IBC messages is defined in
+[ICS-24 Host State Machine Requirements](https://github.com/cosmos/ics/tree/master/spec/core/ics-024-host-requirements).
+- The proof format that all implementations must be able to produce and verify is defined in [ICS-23 Proofs](https://github.com/cosmos/ics23) implementation.
+
+### [Capabilities](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/10-ocap.md)
+
+IBC is intended to work in execution environments where modules do not necessarily trust each
+other. Thus, IBC must authenticate module actions on ports and channels so that only modules with the
+appropriate permissions can use them.
+
+This module authentication is accomplished using a [dynamic
+capability store](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-003-dynamic-capability-store.md). Upon binding to a port or
+creating a channel for a module, IBC returns a dynamic capability that the module must claim in
+order to use that port or channel. The dynamic capability module prevents other modules from using that port or channel since
+they do not own the appropriate capability.
+
+While this background information is useful, IBC modules do not need to interact at all with
+these lower-level abstractions. The relevant abstraction layer for IBC application developers is
+that of channels and ports. IBC applications must be written as self-contained **modules**.
+
+A module on one blockchain can communicate with other modules on other blockchains by sending,
+receiving, and acknowledging packets through channels that are uniquely identified by the
+`(channelID, portID)` tuple.
+
+A useful analogy is to consider IBC modules as internet applications on
+a computer. A channel can then be conceptualized as an IP connection, with the IBC portID being
+analogous to an IP port and the IBC channelID being analogous to an IP address. Thus, a single
+instance of an IBC module can communicate on the same port with any number of other modules and
+IBC correctly routes all packets to the relevant module using the (channelID, portID tuple). An
+IBC module can also communicate with another IBC module over multiple ports, with each
+`(portID<->portID)` packet stream being sent on a different unique channel.
+
+### [Ports](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port)
+
+An IBC module can bind to any number of ports. Each port must be identified by a unique `portID`.
+Since IBC is designed to be secure with mutually distrusted modules operating on the same ledger,
+binding a port returns a dynamic object capability. In order to take action on a particular port
+(for example, an open channel with its portID), a module must provide the dynamic object capability to the IBC
+handler. This requirement prevents a malicious module from opening channels with ports it does not own. Thus,
+IBC modules are responsible for claiming the capability that is returned on `BindPort`.
+
+### [Channels](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel)
+
+An IBC channel can be established between two IBC ports. Currently, a port is exclusively owned by a
+single module. IBC packets are sent over channels. Just as IP packets contain the destination IP
+address and IP port, and the source IP address and source IP port, IBC packets contain
+the destination portID and channelID, and the source portID and channelID. This packet structure enables IBC to
+correctly route packets to the destination module while allowing modules receiving packets to
+know the sender module.
+
+A channel can be `ORDERED`, where packets from a sending module must be processed by the
+receiving module in the order they were sent. Or a channel can be `UNORDERED`, where packets
+from a sending module are processed in the order they arrive (might be in a different order than they were sent).
+
+Modules can choose which channels they wish to communicate over with, thus IBC expects modules to
+implement callbacks that are called during the channel handshake. These callbacks can do custom
+channel initialization logic. If any callback returns an error, the channel handshake fails. Thus, by
+returning errors on callbacks, modules can programmatically reject and accept channels.
+
+The channel handshake is a 4-step handshake. Briefly, if a given chain A wants to open a channel with
+chain B using an already established connection:
+
+1. chain A sends a `ChanOpenInit` message to signal a channel initialization attempt with chain B.
+2. chain B sends a `ChanOpenTry` message to try opening the channel on chain A.
+3. chain A sends a `ChanOpenAck` message to mark its channel end status as open.
+4. chain B sends a `ChanOpenConfirm` message to mark its channel end status as open.
+
+If all handshake steps are successful, the channel is opened on both sides. At each step in the handshake, the module
+associated with the `ChannelEnd` executes its callback. So
+on `ChanOpenInit`, the module on chain A executes its callback `OnChanOpenInit`.
+
+The channel identifier is auto derived in the format: `channel-{N}` where N is the next sequence to be used.
+
+Just as ports came with dynamic capabilities, channel initialization returns a dynamic capability
+that the module **must** claim so that they can pass in a capability to authenticate channel actions
+like sending packets. The channel capability is passed into the callback on the first parts of the
+handshake; either `OnChanOpenInit` on the initializing chain or `OnChanOpenTry` on the other chain.
+
+#### Closing channels
+
+Closing a channel occurs in 2 handshake steps as defined in [ICS 04](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics).
+
+`ChanCloseInit` closes a channel on the executing chain if the channel exists, it is not
+already closed and the connection it exists upon is OPEN. Channels can only be closed by a
+calling module or in the case of a packet timeout on an ORDERED channel.
+
+`ChanCloseConfirm` is a response to a counterparty channel executing `ChanCloseInit`. The channel
+on the executing chain closes if the channel exists, the channel is not already closed,
+the connection the channel exists upon is OPEN and the executing chain successfully verifies
+that the counterparty channel has been closed.
+
+### [Packets](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel)
+
+Modules communicate with each other by sending packets over IBC channels. All
+IBC packets contain the destination `portID` and `channelID` along with the source `portID` and
+`channelID`. This packet structure allows modules to know the sender module of a given packet. IBC packets
+contain a sequence to optionally enforce ordering.
+
+IBC packets also contain a `TimeoutHeight` and a `TimeoutTimestamp` that determine the deadline before the receiving module must process a packet.
+
+Modules send custom application data to each other inside the `Data []byte` field of the IBC packet.
+Thus, packet data is opaque to IBC handlers. It is incumbent on a sender module to encode
+their application-specific packet information into the `Data` field of packets. The receiver
+module must decode that `Data` back to the original application data.
+
+### [Receipts and Timeouts](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel)
+
+Since IBC works over a distributed network and relies on potentially faulty relayers to relay messages between ledgers,
+IBC must handle the case where a packet does not get sent to its destination in a timely manner or at all. Packets must
+specify a non-zero value for timeout height (`TimeoutHeight`) or timeout timestamp (`TimeoutTimestamp` ) after which a packet can no longer be successfully received on the destination chain.
+
+- The `timeoutHeight` indicates a consensus height on the destination chain after which the packet is no longer be processed, and instead counts as having timed-out.
+- The `timeoutTimestamp` indicates a timestamp on the destination chain after which the packet is no longer be processed, and instead counts as having timed-out.
+
+If the timeout passes without the packet being successfully received, the packet can no longer be
+received on the destination chain. The sending module can timeout the packet and take appropriate actions.
+
+If the timeout is reached, then a proof of packet timeout can be submitted to the original chain. The original chain can then perform
+application-specific logic to timeout the packet, perhaps by rolling back the packet send changes (refunding senders any locked funds, etc.).
+
+- In ORDERED channels, a timeout of a single packet in the channel causes the channel to close.
+
+ - If packet sequence `n` times out, then a packet at sequence `k > n` cannot be received without violating the contract of ORDERED channels that packets are processed in the order that they are sent.
+ - Since ORDERED channels enforce this invariant, a proof that sequence `n` has not been received on the destination chain by the specified timeout of packet `n` is sufficient to timeout packet `n` and close the channel.
+
+- In UNORDERED channels, the application-specific timeout logic for that packet is applied and the channel is not closed.
+
+ - Packets can be received in any order.
+
+ - IBC writes a packet receipt for each sequence receives in the UNORDERED channel. This receipt does not contain information; it is simply a marker intended to signify that the UNORDERED channel has received a packet at the specified sequence.
+
+ - To timeout a packet on an UNORDERED channel, a proof is required that a packet receipt **does not exist** for the packet's sequence by the specified timeout.
+
+For this reason, most modules should use UNORDERED channels as they require fewer liveness guarantees to function effectively for users of that channel.
+
+### [Acknowledgments](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel)
+
+Modules can also choose to write application-specific acknowledgments upon processing a packet. Acknowledgments can be done:
+
+- Synchronously on `OnRecvPacket` if the module processes packets as soon as they are received from IBC module.
+- Asynchronously if module processes packets at some later point after receiving the packet.
+
+This acknowledgment data is opaque to IBC much like the packet `Data` and is treated by IBC as a simple byte string `[]byte`. Receiver modules must encode their acknowledgment so that the sender module can decode it correctly. The encoding must be negotiated between the two parties during version negotiation in the channel handshake.
+
+The acknowledgment can encode whether the packet processing succeeded or failed, along with additional information that allows the sender module to take appropriate action.
+
+After the acknowledgment has been written by the receiving chain, a relayer relays the acknowledgment back to the original sender module.
+
+The original sender module then executes application-specific acknowledgment logic using the contents of the acknowledgment.
+
+- After an acknowledgement fails, packet-send changes can be rolled back (for example, refunding senders in ICS20).
+
+- After an acknowledgment is received successfully on the original sender on the chain, the corresponding packet commitment is deleted since it is no longer needed.
+
+## Further Readings and Specs
+
+If you want to learn more about IBC, check the following specifications:
+
+- [IBC specification overview](https://github.com/cosmos/ibc/blob/master/README.md)
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md b/docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md
new file mode 100644
index 00000000000..5a3ea531ae1
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md
@@ -0,0 +1,230 @@
+---
+title: Integration
+sidebar_label: Integration
+sidebar_position: 2
+slug: /ibc/integration
+---
+
+# Integration
+
+:::note Synopsis
+Learn how to integrate IBC to your application and send data packets to other chains.
+:::
+
+This document outlines the required steps to integrate and configure the [IBC
+module](https://github.com/cosmos/ibc-go/tree/main/modules/core) to your Cosmos SDK application and
+send fungible token transfers to other chains.
+
+## Integrating the IBC module
+
+Integrating the IBC module to your SDK-based application is straightforward. The general changes can be summarized in the following steps:
+
+- Add required modules to the `module.BasicManager`
+- Define additional `Keeper` fields for the new modules on the `App` type
+- Add the module's `StoreKey`s and initialize their `Keeper`s
+- Set up corresponding routers and routes for the `ibc` module
+- Add the modules to the module `Manager`
+- Add modules to `Begin/EndBlockers` and `InitGenesis`
+- Update the module `SimulationManager` to enable simulations
+
+### Module `BasicManager` and `ModuleAccount` permissions
+
+The first step is to add the following modules to the `BasicManager`: `x/capability`, `x/ibc`,
+and `x/ibc-transfer`. After that, we need to grant `Minter` and `Burner` permissions to
+the `ibc-transfer` `ModuleAccount` to mint and burn relayed tokens.
+
+### Integrating light clients
+
+> Note that from v7 onwards, all light clients have to be explicitly registered in a chain's app.go and follow the steps listed below.
+> This is in contrast to earlier versions of ibc-go when `07-tendermint` and `06-solomachine` were added out of the box.
+
+All light clients must be registered with `module.BasicManager` in a chain's app.go file.
+
+The following code example shows how to register the existing `ibctm.AppModuleBasic{}` light client implementation.
+
+```go
+import (
+ ...
+ // highlight-next-line
++ ibctm "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint"
+ ...
+)
+
+// app.go
+var (
+ ModuleBasics = module.NewBasicManager(
+ // ...
+ capability.AppModuleBasic{},
+ ibc.AppModuleBasic{},
+ transfer.AppModuleBasic{}, // i.e ibc-transfer module
+
+ // register light clients on IBC
+ // highlight-next-line
++ ibctm.AppModuleBasic{},
+ )
+
+ // module account permissions
+ maccPerms = map[string][]string{
+ // other module accounts permissions
+ // ...
+ ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
+ }
+)
+```
+
+### Application fields
+
+Then, we need to register the `Keepers` as follows:
+
+```go title="app.go"
+type App struct {
+ // baseapp, keys and subspaces definitions
+
+ // other keepers
+ // ...
+ IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
+ TransferKeeper ibctransferkeeper.Keeper // for cross-chain fungible token transfers
+
+ // make scoped keepers public for test purposes
+ ScopedIBCKeeper capabilitykeeper.ScopedKeeper
+ ScopedTransferKeeper capabilitykeeper.ScopedKeeper
+
+ /// ...
+ /// module and simulation manager definitions
+}
+```
+
+### Configure the `Keepers`
+
+During initialization, besides initializing the IBC `Keepers` (for the `x/ibc`, and
+`x/ibc-transfer` modules), we need to grant specific capabilities through the capability module
+`ScopedKeepers` so that we can authenticate the object-capability permissions for each of the IBC
+channels.
+
+```go
+func NewApp(...args) *App {
+ // define codecs and baseapp
+
+ // add capability keeper and ScopeToModule for ibc module
+ app.CapabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey])
+
+ // grant capabilities for the ibc and ibc-transfer modules
+ scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName)
+ scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
+
+ // ... other modules keepers
+
+ // Create IBC Keeper
+ app.IBCKeeper = ibckeeper.NewKeeper(
+ appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper,
+ )
+
+ // Create Transfer Keepers
+ app.TransferKeeper = ibctransferkeeper.NewKeeper(
+ appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName),
+ app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ app.AccountKeeper, app.BankKeeper, scopedTransferKeeper,
+ )
+ transferModule := transfer.NewAppModule(app.TransferKeeper)
+
+ // .. continues
+}
+```
+
+### Register `Routers`
+
+IBC needs to know which module is bound to which port so that it can route packets to the
+appropriate module and call the appropriate callbacks. The port to module name mapping is handled by
+IBC's port `Keeper`. However, the mapping from module name to the relevant callbacks is accomplished
+by the port
+[`Router`](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port/types/router.go) on the
+IBC module.
+
+Adding the module routes allows the IBC handler to call the appropriate callback when processing a
+channel handshake or a packet.
+
+Currently, a `Router` is static so it must be initialized and set correctly on app initialization.
+Once the `Router` has been set, no new routes can be added.
+
+```go title="app.go"
+func NewApp(...args) *App {
+ // .. continuation from above
+
+ // Create static IBC router, add ibc-transfer module route, then set and seal it
+ ibcRouter := port.NewRouter()
+ ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule)
+ // Setting Router will finalize all routes by sealing router
+ // No more routes can be added
+ app.IBCKeeper.SetRouter(ibcRouter)
+
+ // .. continues
+```
+
+### Module Managers
+
+In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](https://github.com/cosmos/cosmos-sdk/blob/main/docs/build/building-modules/14-simulator.md).
+
+```go title="app.go"
+func NewApp(...args) *App {
+ // .. continuation from above
+
+ app.mm = module.NewManager(
+ // other modules
+ // ...
+ capability.NewAppModule(appCodec, *app.CapabilityKeeper),
+ ibc.NewAppModule(app.IBCKeeper),
+ transferModule,
+ )
+
+ // ...
+
+ app.sm = module.NewSimulationManager(
+ // other modules
+ // ...
+ capability.NewAppModule(appCodec, *app.CapabilityKeeper),
+ ibc.NewAppModule(app.IBCKeeper),
+ transferModule,
+ )
+
+ // .. continues
+```
+
+### Application ABCI Ordering
+
+One addition from IBC is the concept of `HistoricalEntries` which are stored on the staking module.
+Each entry contains the historical information for the `Header` and `ValidatorSet` of this chain which is stored
+at each height during the `BeginBlock` call. The historical info is required to introspect the
+past historical info at any given height in order to verify the light client `ConsensusState` during the
+connection handshake.
+
+```go title="app.go"
+func NewApp(...args) *App {
+ // .. continuation from above
+
+ // add staking and ibc modules to BeginBlockers
+ app.mm.SetOrderBeginBlockers(
+ // other modules ...
+ stakingtypes.ModuleName, ibcexported.ModuleName,
+ )
+
+ // ...
+
+ // NOTE: Capability module must occur first so that it can initialize any capabilities
+ // so that other modules that want to create or claim capabilities afterwards in InitChain
+ // can do so safely.
+ app.mm.SetOrderInitGenesis(
+ capabilitytypes.ModuleName,
+ // other modules ...
+ ibcexported.ModuleName, ibctransfertypes.ModuleName,
+ )
+
+ // .. continues
+```
+
+:::warning
+**IMPORTANT**: The capability module **must** be declared first in `SetOrderInitGenesis`
+:::
+
+That's it! You have now wired up the IBC module and are now able to send fungible tokens across
+different chains. If you want to have a broader view of the changes take a look into the SDK's
+[`SimApp`](https://github.com/cosmos/ibc-go/blob/main/testing/simapp/app.go).
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md
new file mode 100644
index 00000000000..05d903c85a8
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md
@@ -0,0 +1,494 @@
+---
+title: IBC Applications
+sidebar_label: IBC Applications
+sidebar_position: 1
+slug: /ibc/apps/apps
+---
+
+# IBC Applications
+
+Learn how to configure your application to use IBC and send data packets to other chains. {synopsis}
+
+This document serves as a guide for developers who want to write their own Inter-blockchain
+Communication Protocol (IBC) applications for custom use cases.
+
+Due to the modular design of the IBC protocol, IBC
+application developers do not need to concern themselves with the low-level details of clients,
+connections, and proof verification. Nevertheless a brief explanation of the lower levels of the
+stack is given so that application developers may have a high-level understanding of the IBC
+protocol. Then the document goes into detail on the abstraction layer most relevant for application
+developers (channels and ports), and describes how to define your own custom packets, and
+`IBCModule` callbacks.
+
+To have your module interact over IBC you must: bind to a port(s), define your own packet data and acknowledgement structs as well as how to encode/decode them, and implement the
+`IBCModule` interface. Below is a more detailed explanation of how to write an IBC application
+module correctly.
+
+:::note
+
+## Pre-requisites Readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC default integration](../02-integration.md)
+
+:::
+
+## Create a custom IBC application module
+
+### Implement `IBCModule` Interface and callbacks
+
+The Cosmos SDK expects all IBC modules to implement the [`IBCModule`
+interface](https://github.com/cosmos/ibc-go/tree/main/modules/core/05-port/types/module.go). This
+interface contains all of the callbacks IBC expects modules to implement. This section will describe
+the callbacks that are called during channel handshake execution.
+
+Here are the channel handshake callbacks that modules are expected to implement:
+
+```go
+// Called by IBC Handler on MsgOpenInit
+func (k Keeper) OnChanOpenInit(ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID string,
+ channelID string,
+ channelCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ version string,
+) error {
+ // OpenInit must claim the channelCapability that IBC passes into the callback
+ if err := k.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil {
+ return err
+ }
+
+ // ... do custom initialization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ // Examples: Abort if order == UNORDERED,
+ // Abort if version is unsupported
+ err := checkArguments(args)
+ return err
+}
+
+// Called by IBC Handler on MsgOpenTry
+OnChanOpenTry(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID,
+ channelID string,
+ channelCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ counterpartyVersion string,
+) (string, error) {
+ // OpenTry must claim the channelCapability that IBC passes into the callback
+ if err := k.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil {
+ return err
+ }
+
+ // ... do custom initialization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ if err := checkArguments(args); err != nil {
+ return err
+ }
+
+ // Construct application version
+ // IBC applications must return the appropriate application version
+ // This can be a simple string or it can be a complex version constructed
+ // from the counterpartyVersion and other arguments.
+ // The version returned will be the channel version used for both channel ends.
+ appVersion := negotiateAppVersion(counterpartyVersion, args)
+
+ return appVersion, nil
+}
+
+// Called by IBC Handler on MsgOpenAck
+OnChanOpenAck(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+ counterpartyVersion string,
+) error {
+ // ... do custom initialization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ err := checkArguments(args)
+ return err
+}
+
+// Called by IBC Handler on MsgOpenConfirm
+OnChanOpenConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // ... do custom initialization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ err := checkArguments(args)
+ return err
+}
+```
+
+The channel closing handshake will also invoke module callbacks that can return errors to abort the
+closing handshake. Closing a channel is a 2-step handshake, the initiating chain calls
+`ChanCloseInit` and the finalizing chain calls `ChanCloseConfirm`.
+
+```go
+// Called by IBC Handler on MsgCloseInit
+OnChanCloseInit(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // ... do custom finalization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ err := checkArguments(args)
+ return err
+}
+
+// Called by IBC Handler on MsgCloseConfirm
+OnChanCloseConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // ... do custom finalization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ err := checkArguments(args)
+ return err
+}
+```
+
+#### Channel Handshake Version Negotiation
+
+Application modules are expected to verify versioning used during the channel handshake procedure.
+
+- `ChanOpenInit` callback should verify that the `MsgChanOpenInit.Version` is valid
+- `ChanOpenTry` callback should construct the application version used for both channel ends. If no application version can be constructed, it must return an error.
+- `ChanOpenAck` callback should verify that the `MsgChanOpenAck.CounterpartyVersion` is valid and supported.
+
+IBC expects application modules to perform application version negotiation in `OnChanOpenTry`. The negotiated version
+must be returned to core IBC. If the version cannot be negotiated, an error should be returned.
+
+Versions must be strings but can implement any versioning structure. If your application plans to
+have linear releases then semantic versioning is recommended. If your application plans to release
+various features in between major releases then it is advised to use the same versioning scheme
+as IBC. This versioning scheme specifies a version identifier and compatible feature set with
+that identifier. Valid version selection includes selecting a compatible version identifier with
+a subset of features supported by your application for that version. The struct is used for this
+scheme can be found in `03-connection/types`.
+
+Since the version type is a string, applications have the ability to do simple version verification
+via string matching or they can use the already implemented versioning system and pass the proto
+encoded version into each handhshake call as necessary.
+
+ICS20 currently implements basic string matching with a single supported version.
+
+### Bind Ports
+
+Currently, ports must be bound on app initialization. A module may bind to ports in `InitGenesis`
+like so:
+
+```go
+func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, state types.GenesisState) {
+ // ... other initialization logic
+
+ // Only try to bind to port if it is not already bound, since we may already own
+ // port capability from capability InitGenesis
+ if !hasCapability(ctx, state.PortID) {
+ // module binds to desired ports on InitChain
+ // and claims returned capabilities
+ cap1 := keeper.IBCPortKeeper.BindPort(ctx, port1)
+ cap2 := keeper.IBCPortKeeper.BindPort(ctx, port2)
+ cap3 := keeper.IBCPortKeeper.BindPort(ctx, port3)
+
+ // NOTE: The module's scoped capability keeper must be private
+ keeper.scopedKeeper.ClaimCapability(cap1)
+ keeper.scopedKeeper.ClaimCapability(cap2)
+ keeper.scopedKeeper.ClaimCapability(cap3)
+ }
+
+ // ... more initialization logic
+}
+```
+
+### Custom Packets
+
+Modules connected by a channel must agree on what application data they are sending over the
+channel, as well as how they will encode/decode it. This process is not specified by IBC as it is up
+to each application module to determine how to implement this agreement. However, for most
+applications this will happen as a version negotiation during the channel handshake. While more
+complex version negotiation is possible to implement inside the channel opening handshake, a very
+simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
+
+Thus, a module must define its custom packet data structure, along with a well-defined way to
+encode and decode it to and from `[]byte`.
+
+```go
+// Custom packet data defined in application module
+type CustomPacketData struct {
+ // Custom fields ...
+}
+
+EncodePacketData(packetData CustomPacketData) []byte {
+ // encode packetData to bytes
+}
+
+DecodePacketData(encoded []byte) (CustomPacketData) {
+ // decode from bytes to packet data
+}
+```
+
+Then a module must encode its packet data before sending it through IBC.
+
+```go
+// retrieve the dynamic capability for this channel
+channelCap := scopedKeeper.GetCapability(ctx, channelCapName)
+// Sending custom application packet data
+data := EncodePacketData(customPacketData)
+packet.Data = data
+// Send packet to IBC, authenticating with channelCap
+sequence, err := IBCChannelKeeper.SendPacket(
+ ctx,
+ channelCap,
+ sourcePort,
+ sourceChannel,
+ timeoutHeight,
+ timeoutTimestamp,
+ data,
+)
+```
+
+A module receiving a packet must decode the `PacketData` into a structure it expects so that it can
+act on it.
+
+```go
+// Receiving custom application packet data (in OnRecvPacket)
+packetData := DecodePacketData(packet.Data)
+// handle received custom packet data
+```
+
+#### Packet Flow Handling
+
+Just as IBC expected modules to implement callbacks for channel handshakes, IBC also expects modules
+to implement callbacks for handling the packet flow through a channel.
+
+Once a module A and module B are connected to each other, relayers can start relaying packets and
+acknowledgements back and forth on the channel.
+
+![IBC packet flow diagram](https://media.githubusercontent.com/media/cosmos/ibc/old/spec/ics-004-channel-and-packet-semantics/channel-state-machine.png)
+
+Briefly, a successful packet flow works as follows:
+
+1. module A sends a packet through the IBC module
+2. the packet is received by module B
+3. if module B writes an acknowledgement of the packet then module A will process the
+ acknowledgement
+4. if the packet is not successfully received before the timeout, then module A processes the
+ packet's timeout.
+
+##### Sending Packets
+
+Modules do not send packets through callbacks, since the modules initiate the action of sending
+packets to the IBC module, as opposed to other parts of the packet flow where msgs sent to the IBC
+module must trigger execution on the port-bound module through the use of callbacks. Thus, to send a
+packet a module simply needs to call `SendPacket` on the `IBCChannelKeeper`.
+
+```go
+// retrieve the dynamic capability for this channel
+channelCap := scopedKeeper.GetCapability(ctx, channelCapName)
+// Sending custom application packet data
+data := EncodePacketData(customPacketData)
+// Send packet to IBC, authenticating with channelCap
+sequence, err := IBCChannelKeeper.SendPacket(
+ ctx,
+ channelCap,
+ sourcePort,
+ sourceChannel,
+ timeoutHeight,
+ timeoutTimestamp,
+ data,
+)
+```
+
+::: warning
+In order to prevent modules from sending packets on channels they do not own, IBC expects
+modules to pass in the correct channel capability for the packet's source channel.
+:::
+
+##### Receiving Packets
+
+To handle receiving packets, the module must implement the `OnRecvPacket` callback. This gets
+invoked by the IBC module after the packet has been proved valid and correctly processed by the IBC
+keepers. Thus, the `OnRecvPacket` callback only needs to worry about making the appropriate state
+changes given the packet data without worrying about whether the packet is valid or not.
+
+Modules may return to the IBC handler an acknowledgement which implements the Acknowledgement interface.
+The IBC handler will then commit this acknowledgement of the packet so that a relayer may relay the
+acknowledgement back to the sender module.
+
+The state changes that occurred during this callback will only be written if:
+
+- the acknowledgement was successful as indicated by the `Success()` function of the acknowledgement
+- if the acknowledgement returned is nil indicating that an asynchronous process is occurring
+
+NOTE: Applications which process asynchronous acknowledgements must handle reverting state changes
+when appropriate. Any state changes that occurred during the `OnRecvPacket` callback will be written
+for asynchronous acknowledgements.
+
+```go
+OnRecvPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+) ibcexported.Acknowledgement {
+ // Decode the packet data
+ packetData := DecodePacketData(packet.Data)
+
+ // do application state changes based on packet data and return the acknowledgement
+ // NOTE: The acknowledgement will indicate to the IBC handler if the application
+ // state changes should be written via the `Success()` function. Application state
+ // changes are only written if the acknowledgement is successful or the acknowledgement
+ // returned is nil indicating that an asynchronous acknowledgement will occur.
+ ack := processPacket(ctx, packet, packetData)
+
+ return ack
+}
+```
+
+The Acknowledgement interface:
+
+```go
+// Acknowledgement defines the interface used to return
+// acknowledgements in the OnRecvPacket callback.
+type Acknowledgement interface {
+ Success() bool
+ Acknowledgement() []byte
+}
+```
+
+### Acknowledgements
+
+Modules may commit an acknowledgement upon receiving and processing a packet in the case of synchronous packet processing.
+In the case where a packet is processed at some later point after the packet has been received (asynchronous execution), the acknowledgement
+will be written once the packet has been processed by the application which may be well after the packet receipt.
+
+NOTE: Most blockchain modules will want to use the synchronous execution model in which the module processes and writes the acknowledgement
+for a packet as soon as it has been received from the IBC module.
+
+This acknowledgement can then be relayed back to the original sender chain, which can take action
+depending on the contents of the acknowledgement.
+
+Just as packet data was opaque to IBC, acknowledgements are similarly opaque. Modules must pass and
+receive acknowledegments with the IBC modules as byte strings.
+
+Thus, modules must agree on how to encode/decode acknowledgements. The process of creating an
+acknowledgement struct along with encoding and decoding it, is very similar to the packet data
+example above. [ICS 04](https://github.com/cosmos/ibc/blob/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope)
+specifies a recommended format for acknowledgements. This acknowledgement type can be imported from
+[channel types](https://github.com/cosmos/ibc-go/tree/main/modules/core/04-channel/types).
+
+While modules may choose arbitrary acknowledgement structs, a default acknowledgement types is provided by IBC [here](https://github.com/cosmos/ibc-go/blob/main/proto/ibc/core/channel/v1/channel.proto):
+
+```proto
+// Acknowledgement is the recommended acknowledgement format to be used by
+// app-specific protocols.
+// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental
+// conflicts with other protobuf message formats used for acknowledgements.
+// The first byte of any message with this format will be the non-ASCII values
+// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS:
+// https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope
+message Acknowledgement {
+ // response contains either a result or an error and must be non-empty
+ oneof response {
+ bytes result = 21;
+ string error = 22;
+ }
+}
+```
+
+#### Acknowledging Packets
+
+After a module writes an acknowledgement, a relayer can relay back the acknowledgement to the sender module. The sender module can
+then process the acknowledgement using the `OnAcknowledgementPacket` callback. The contents of the
+acknowledgement is entirely upto the modules on the channel (just like the packet data); however, it
+may often contain information on whether the packet was successfully processed along
+with some additional data that could be useful for remediation if the packet processing failed.
+
+Since the modules are responsible for agreeing on an encoding/decoding standard for packet data and
+acknowledgements, IBC will pass in the acknowledgements as `[]byte` to this callback. The callback
+is responsible for decoding the acknowledgement and processing it.
+
+```go
+OnAcknowledgementPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ acknowledgement []byte,
+) (*sdk.Result, error) {
+ // Decode acknowledgement
+ ack := DecodeAcknowledgement(acknowledgement)
+
+ // process ack
+ res, err := processAck(ack)
+ return res, err
+}
+```
+
+#### Timeout Packets
+
+If the timeout for a packet is reached before the packet is successfully received or the
+counterparty channel end is closed before the packet is successfully received, then the receiving
+chain can no longer process it. Thus, the sending chain must process the timeout using
+`OnTimeoutPacket` to handle this situation. Again the IBC module will verify that the timeout is
+indeed valid, so our module only needs to implement the state machine logic for what to do once a
+timeout is reached and the packet can no longer be received.
+
+```go
+OnTimeoutPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+) (*sdk.Result, error) {
+ // do custom timeout logic
+}
+```
+
+### Routing
+
+As mentioned above, modules must implement the IBC module interface (which contains both channel
+handshake callbacks and packet handling callbacks). The concrete implementation of this interface
+must be registered with the module name as a route on the IBC `Router`.
+
+```go
+// app.go
+func NewApp(...args) *App {
+// ...
+
+// Create static IBC router, add module routes, then set and seal it
+ibcRouter := port.NewRouter()
+
+ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule)
+// Note: moduleCallbacks must implement IBCModule interface
+ibcRouter.AddRoute(moduleName, moduleCallbacks)
+
+// Setting Router will finalize all routes by sealing router
+// No more routes can be added
+app.IBCKeeper.SetRouter(ibcRouter)
+```
+
+## Working Example
+
+For a real working example of an IBC application, you can look through the `ibc-transfer` module
+which implements everything discussed above.
+
+Here are the useful parts of the module to look at:
+
+[Binding to transfer
+port](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/genesis.go)
+
+[Sending transfer
+packets](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/relay.go)
+
+[Implementing IBC
+callbacks](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/ibc_module.go)
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md
new file mode 100644
index 00000000000..d128612fab2
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md
@@ -0,0 +1,379 @@
+---
+title: Implement IBCModule interface and callbacks
+sidebar_label: Implement IBCModule interface and callbacks
+sidebar_position: 2
+slug: /ibc/apps/ibcmodule
+---
+
+# Implement `IBCModule` interface and callbacks
+
+:::note Synopsis
+Learn how to implement the `IBCModule` interface and all of the callbacks it requires.
+:::
+
+The Cosmos SDK expects all IBC modules to implement the [`IBCModule`
+interface](https://github.com/cosmos/ibc-go/tree/main/modules/core/05-port/types/module.go). This interface contains all of the callbacks IBC expects modules to implement. They include callbacks related to channel handshake, closing and packet callbacks (`OnRecvPacket`, `OnAcknowledgementPacket` and `OnTimeoutPacket`).
+
+```go
+// IBCModule implements the ICS26 interface for given the keeper.
+// The implementation of the IBCModule interface could for example be in a file called ibc_module.go,
+// but ultimately file structure is up to the developer
+type IBCModule struct {
+ keeper keeper.Keeper
+}
+```
+
+Additionally, in the `module.go` file, add the following line:
+
+```go
+var (
+ _ module.AppModule = AppModule{}
+ _ module.AppModuleBasic = AppModuleBasic{}
+ // Add this line
+ _ porttypes.IBCModule = IBCModule{}
+)
+```
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC default integration](../02-integration.md)
+
+:::
+
+## Channel handshake callbacks
+
+This section will describe the callbacks that are called during channel handshake execution. Among other things, it will claim channel capabilities passed on from core IBC. For a refresher on capabilities, check [the Overview section](../01-overview.md#capabilities).
+
+Here are the channel handshake callbacks that modules are expected to implement:
+
+> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `checkArguments` and `negotiateAppVersion` functions.
+
+```go
+// Called by IBC Handler on MsgOpenInit
+func (im IBCModule) OnChanOpenInit(ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID string,
+ channelID string,
+ channelCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ version string,
+) (string, error) {
+ // ... do custom initialization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ // Examples:
+ // - Abort if order == UNORDERED,
+ // - Abort if version is unsupported
+ if err := checkArguments(args); err != nil {
+ return "", err
+ }
+
+ // OpenInit must claim the channelCapability that IBC passes into the callback
+ if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil {
+ return "", err
+ }
+
+ return version, nil
+}
+
+// Called by IBC Handler on MsgOpenTry
+func (im IBCModule) OnChanOpenTry(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID,
+ channelID string,
+ channelCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ counterpartyVersion string,
+) (string, error) {
+ // ... do custom initialization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ if err := checkArguments(args); err != nil {
+ return "", err
+ }
+
+ // OpenTry must claim the channelCapability that IBC passes into the callback
+ if err := im.keeper.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil {
+ return err
+ }
+
+ // Construct application version
+ // IBC applications must return the appropriate application version
+ // This can be a simple string or it can be a complex version constructed
+ // from the counterpartyVersion and other arguments.
+ // The version returned will be the channel version used for both channel ends.
+ appVersion := negotiateAppVersion(counterpartyVersion, args)
+
+ return appVersion, nil
+}
+
+// Called by IBC Handler on MsgOpenAck
+func (im IBCModule) OnChanOpenAck(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+ counterpartyVersion string,
+) error {
+ if counterpartyVersion != types.Version {
+ return sdkerrors.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: %s, expected %s", counterpartyVersion, types.Version)
+ }
+
+ // do custom logic
+
+ return nil
+}
+
+// Called by IBC Handler on MsgOpenConfirm
+func (im IBCModule) OnChanOpenConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // do custom logic
+
+ return nil
+}
+```
+
+The channel closing handshake will also invoke module callbacks that can return errors to abort the closing handshake. Closing a channel is a 2-step handshake, the initiating chain calls `ChanCloseInit` and the finalizing chain calls `ChanCloseConfirm`.
+
+```go
+// Called by IBC Handler on MsgCloseInit
+func (im IBCModule) OnChanCloseInit(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // ... do custom finalization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ err := checkArguments(args)
+ return err
+}
+
+// Called by IBC Handler on MsgCloseConfirm
+func (im IBCModule) OnChanCloseConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // ... do custom finalization logic
+
+ // Use above arguments to determine if we want to abort handshake
+ err := checkArguments(args)
+ return err
+}
+```
+
+### Channel handshake version negotiation
+
+Application modules are expected to verify versioning used during the channel handshake procedure.
+
+- `OnChanOpenInit` will verify that the relayer-chosen parameters
+ are valid and perform any custom `INIT` logic.
+ It may return an error if the chosen parameters are invalid
+ in which case the handshake is aborted.
+ If the provided version string is non-empty, `OnChanOpenInit` should return
+ the version string if valid or an error if the provided version is invalid.
+ **If the version string is empty, `OnChanOpenInit` is expected to
+ return a default version string representing the version(s)
+ it supports.**
+ If there is no default version string for the application,
+ it should return an error if the provided version is an empty string.
+- `OnChanOpenTry` will verify the relayer-chosen parameters along with the
+ counterparty-chosen version string and perform custom `TRY` logic.
+ If the relayer-chosen parameters
+ are invalid, the callback must return an error to abort the handshake.
+ If the counterparty-chosen version is not compatible with this module's
+ supported versions, the callback must return an error to abort the handshake.
+ If the versions are compatible, the try callback must select the final version
+ string and return it to core IBC.
+ `OnChanOpenTry` may also perform custom initialization logic.
+- `OnChanOpenAck` will error if the counterparty selected version string
+ is invalid and abort the handshake. It may also perform custom ACK logic.
+
+Versions must be strings but can implement any versioning structure. If your application plans to
+have linear releases then semantic versioning is recommended. If your application plans to release
+various features in between major releases then it is advised to use the same versioning scheme
+as IBC. This versioning scheme specifies a version identifier and compatible feature set with
+that identifier. Valid version selection includes selecting a compatible version identifier with
+a subset of features supported by your application for that version. The struct used for this
+scheme can be found in [03-connection/types](https://github.com/cosmos/ibc-go/blob/main/modules/core/03-connection/types/version.go#L16).
+
+Since the version type is a string, applications have the ability to do simple version verification
+via string matching or they can use the already implemented versioning system and pass the proto
+encoded version into each handhshake call as necessary.
+
+ICS20 currently implements basic string matching with a single supported version.
+
+## Packet callbacks
+
+Just as IBC expects modules to implement callbacks for channel handshakes, it also expects modules to implement callbacks for handling the packet flow through a channel, as defined in the `IBCModule` interface.
+
+Once a module A and module B are connected to each other, relayers can start relaying packets and acknowledgements back and forth on the channel.
+
+![IBC packet flow diagram](./images/packet_flow.png)
+
+Briefly, a successful packet flow works as follows:
+
+1. Module A sends a packet through the IBC module
+2. The packet is received by module B
+3. If module B writes an acknowledgement of the packet then module A will process the acknowledgement
+4. If the packet is not successfully received before the timeout, then module A processes the packet's timeout.
+
+### Sending packets
+
+Modules **do not send packets through callbacks**, since the modules initiate the action of sending packets to the IBC module, as opposed to other parts of the packet flow where messages sent to the IBC
+module must trigger execution on the port-bound module through the use of callbacks. Thus, to send a packet a module simply needs to call `SendPacket` on the `IBCChannelKeeper`.
+
+> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `EncodePacketData(customPacketData)` function.
+
+```go
+// retrieve the dynamic capability for this channel
+channelCap := scopedKeeper.GetCapability(ctx, channelCapName)
+// Sending custom application packet data
+data := EncodePacketData(customPacketData)
+// Send packet to IBC, authenticating with channelCap
+sequence, err := IBCChannelKeeper.SendPacket(
+ ctx,
+ channelCap,
+ sourcePort,
+ sourceChannel,
+ timeoutHeight,
+ timeoutTimestamp,
+ data,
+)
+```
+
+:::warning
+In order to prevent modules from sending packets on channels they do not own, IBC expects
+modules to pass in the correct channel capability for the packet's source channel.
+:::
+
+### Receiving packets
+
+To handle receiving packets, the module must implement the `OnRecvPacket` callback. This gets
+invoked by the IBC module after the packet has been proved valid and correctly processed by the IBC
+keepers. Thus, the `OnRecvPacket` callback only needs to worry about making the appropriate state
+changes given the packet data without worrying about whether the packet is valid or not.
+
+Modules may return to the IBC handler an acknowledgement which implements the `Acknowledgement` interface.
+The IBC handler will then commit this acknowledgement of the packet so that a relayer may relay the
+acknowledgement back to the sender module.
+
+The state changes that occurred during this callback will only be written if:
+
+- the acknowledgement was successful as indicated by the `Success()` function of the acknowledgement
+- if the acknowledgement returned is nil indicating that an asynchronous process is occurring
+
+NOTE: Applications which process asynchronous acknowledgements must handle reverting state changes
+when appropriate. Any state changes that occurred during the `OnRecvPacket` callback will be written
+for asynchronous acknowledgements.
+
+> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `DecodePacketData(packet.Data)` function.
+
+```go
+func (im IBCModule) OnRecvPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+) ibcexported.Acknowledgement {
+ // Decode the packet data
+ packetData := DecodePacketData(packet.Data)
+
+ // do application state changes based on packet data and return the acknowledgement
+ // NOTE: The acknowledgement will indicate to the IBC handler if the application
+ // state changes should be written via the `Success()` function. Application state
+ // changes are only written if the acknowledgement is successful or the acknowledgement
+ // returned is nil indicating that an asynchronous acknowledgement will occur.
+ ack := processPacket(ctx, packet, packetData)
+
+ return ack
+}
+```
+
+Reminder, the `Acknowledgement` interface:
+
+```go
+// Acknowledgement defines the interface used to return
+// acknowledgements in the OnRecvPacket callback.
+type Acknowledgement interface {
+ Success() bool
+ Acknowledgement() []byte
+}
+```
+
+### Acknowledging packets
+
+After a module writes an acknowledgement, a relayer can relay back the acknowledgement to the sender module. The sender module can
+then process the acknowledgement using the `OnAcknowledgementPacket` callback. The contents of the
+acknowledgement is entirely up to the modules on the channel (just like the packet data); however, it
+may often contain information on whether the packet was successfully processed along
+with some additional data that could be useful for remediation if the packet processing failed.
+
+Since the modules are responsible for agreeing on an encoding/decoding standard for packet data and
+acknowledgements, IBC will pass in the acknowledgements as `[]byte` to this callback. The callback
+is responsible for decoding the acknowledgement and processing it.
+
+> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `DecodeAcknowledgement(acknowledgments)` and `processAck(ack)` functions.
+
+```go
+func (im IBCModule) OnAcknowledgementPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ acknowledgement []byte,
+) (*sdk.Result, error) {
+ // Decode acknowledgement
+ ack := DecodeAcknowledgement(acknowledgement)
+
+ // process ack
+ res, err := processAck(ack)
+ return res, err
+}
+```
+
+### Timeout packets
+
+If the timeout for a packet is reached before the packet is successfully received or the
+counterparty channel end is closed before the packet is successfully received, then the receiving
+chain can no longer process it. Thus, the sending chain must process the timeout using
+`OnTimeoutPacket` to handle this situation. Again the IBC module will verify that the timeout is
+indeed valid, so our module only needs to implement the state machine logic for what to do once a
+timeout is reached and the packet can no longer be received.
+
+```go
+func (im IBCModule) OnTimeoutPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+) (*sdk.Result, error) {
+ // do custom timeout logic
+}
+```
+
+### Optional interfaces
+
+The following interface are optional and MAY be implemented by an IBCModule.
+
+#### PacketDataUnmarshaler
+
+The `PacketDataUnmarshaler` interface is defined as follows:
+
+```go
+// PacketDataUnmarshaler defines an optional interface which allows a middleware to
+// request the packet data to be unmarshaled by the base application.
+type PacketDataUnmarshaler interface {
+ // UnmarshalPacketData unmarshals the packet data into a concrete type
+ UnmarshalPacketData([]byte) (interface{}, error)
+}
+```
+
+The implementation of `UnmarshalPacketData` should unmarshal the bytes into the packet data type defined for an IBC stack.
+The base application of an IBC stack should unmarshal the bytes into its packet data type, while a middleware may simply defer the call to the underlying application.
+
+This interface allows middlewares to unmarshal a packet data in order to make use of interfaces the packet data type implements.
+For example, the callbacks middleware makes use of this function to access packet data types which implement the `PacketData` and `PacketDataProvider` interfaces.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md
new file mode 100644
index 00000000000..4bd85d29bc5
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md
@@ -0,0 +1,122 @@
+---
+title: Bind ports
+sidebar_label: Bind ports
+sidebar_position: 3
+slug: /ibc/apps/bindports
+---
+
+# Bind ports
+
+:::note Synopsis
+Learn what changes to make to bind modules to their ports on initialization.
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC default integration](../02-integration.md)
+
+:::
+Currently, ports must be bound on app initialization. In order to bind modules to their respective ports on initialization, the following needs to be implemented:
+
+> Note that `portID` does not refer to a certain numerical ID, like `localhost:8080` with a `portID` 8080. Rather it refers to the application module the port binds. For IBC Modules built with the Cosmos SDK, it defaults to the module's name and for Cosmwasm contracts it defaults to the contract address.
+
+1. Add port ID to the `GenesisState` proto definition:
+
+```protobuf
+message GenesisState {
+ string port_id = 1;
+ // other fields
+}
+```
+
+1. Add port ID as a key to the module store:
+
+```go
+// x//types/keys.go
+const (
+ // ModuleName defines the IBC Module name
+ ModuleName = "moduleName"
+
+ // Version defines the current version the IBC
+ // module supports
+ Version = "moduleVersion-1"
+
+ // PortID is the default port id that module binds to
+ PortID = "portID"
+
+ // ...
+)
+```
+
+1. Add port ID to `x//types/genesis.go`:
+
+```go
+// in x//types/genesis.go
+
+// DefaultGenesisState returns a GenesisState with "transfer" as the default PortID.
+func DefaultGenesisState() *GenesisState {
+ return &GenesisState{
+ PortId: PortID,
+ // additional k-v fields
+ }
+}
+
+// Validate performs basic genesis state validation returning an error upon any
+// failure.
+func (gs GenesisState) Validate() error {
+ if err := host.PortIdentifierValidator(gs.PortId); err != nil {
+ return err
+ }
+ //addtional validations
+
+ return gs.Params.Validate()
+}
+```
+
+1. Bind to port(s) in the module keeper's `InitGenesis`:
+
+```go
+// InitGenesis initializes the ibc-module state and binds to PortID.
+func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) {
+ k.SetPort(ctx, state.PortId)
+
+ // ...
+
+ // Only try to bind to port if it is not already bound, since we may already own
+ // port capability from capability InitGenesis
+ if !k.hasCapability(ctx, state.PortId) {
+ // transfer module binds to the transfer port on InitChain
+ // and claims the returned capability
+ err := k.BindPort(ctx, state.PortId)
+ if err != nil {
+ panic(fmt.Sprintf("could not claim port capability: %v", err))
+ }
+ }
+
+ // ...
+}
+```
+
+With:
+
+```go
+// IsBound checks if the module is already bound to the desired port
+func (k Keeper) IsBound(ctx sdk.Context, portID string) bool {
+ _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID))
+ return ok
+}
+
+// BindPort defines a wrapper function for the port Keeper's function in
+// order to expose it to module's InitGenesis function
+func (k Keeper) BindPort(ctx sdk.Context, portID string) error {
+ cap := k.portKeeper.BindPort(ctx, portID)
+ return k.ClaimCapability(ctx, cap, host.PortPath(portID))
+}
+```
+
+The module binds to the desired port(s) and returns the capabilities.
+
+In the above we find reference to keeper methods that wrap other keeper functionality, in the next section the keeper methods that need to be implemented will be defined.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md
new file mode 100644
index 00000000000..8e0040e09fc
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md
@@ -0,0 +1,96 @@
+---
+title: Keeper
+sidebar_label: Keeper
+sidebar_position: 4
+slug: /ibc/apps/keeper
+---
+
+# Keeper
+
+:::note Synopsis
+Learn how to implement the IBC Module keeper.
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC default integration](../02-integration.md)
+
+:::
+In the previous sections, on channel handshake callbacks and port binding in `InitGenesis`, a reference was made to keeper methods that need to be implemented when creating a custom IBC module. Below is an overview of how to define an IBC module's keeper.
+
+> Note that some code has been left out for clarity, to get a full code overview, please refer to [the transfer module's keeper in the ibc-go repo](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/keeper.go).
+
+```go
+// Keeper defines the IBC app module keeper
+type Keeper struct {
+ storeKey sdk.StoreKey
+ cdc codec.BinaryCodec
+ paramSpace paramtypes.Subspace
+
+ channelKeeper types.ChannelKeeper
+ portKeeper types.PortKeeper
+ scopedKeeper capabilitykeeper.ScopedKeeper
+
+ // ... additional according to custom logic
+}
+
+// NewKeeper creates a new IBC app module Keeper instance
+func NewKeeper(
+ // args
+) Keeper {
+ // ...
+
+ return Keeper{
+ cdc: cdc,
+ storeKey: key,
+ paramSpace: paramSpace,
+
+ channelKeeper: channelKeeper,
+ portKeeper: portKeeper,
+ scopedKeeper: scopedKeeper,
+
+ // ... additional according to custom logic
+ }
+}
+
+// hasCapability checks if the IBC app module owns the port capability for the desired port
+func (k Keeper) hasCapability(ctx sdk.Context, portID string) bool {
+ _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID))
+ return ok
+}
+
+// BindPort defines a wrapper function for the port Keeper's function in
+// order to expose it to module's InitGenesis function
+func (k Keeper) BindPort(ctx sdk.Context, portID string) error {
+ cap := k.portKeeper.BindPort(ctx, portID)
+ return k.ClaimCapability(ctx, cap, host.PortPath(portID))
+}
+
+// GetPort returns the portID for the IBC app module. Used in ExportGenesis
+func (k Keeper) GetPort(ctx sdk.Context) string {
+ store := ctx.KVStore(k.storeKey)
+ return string(store.Get(types.PortKey))
+}
+
+// SetPort sets the portID for the IBC app module. Used in InitGenesis
+func (k Keeper) SetPort(ctx sdk.Context, portID string) {
+ store := ctx.KVStore(k.storeKey)
+ store.Set(types.PortKey, []byte(portID))
+}
+
+// AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function
+func (k Keeper) AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool {
+ return k.scopedKeeper.AuthenticateCapability(ctx, cap, name)
+}
+
+// ClaimCapability allows the IBC app module to claim a capability that core IBC
+// passes to it
+func (k Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error {
+ return k.scopedKeeper.ClaimCapability(ctx, cap, name)
+}
+
+// ... additional according to custom logic
+```
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md
new file mode 100644
index 00000000000..66a1710ecbc
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md
@@ -0,0 +1,166 @@
+---
+title: Define packets and acks
+sidebar_label: Define packets and acks
+sidebar_position: 5
+slug: /ibc/apps/packets_acks
+---
+
+# Define packets and acks
+
+:::note Synopsis
+Learn how to define custom packet and acknowledgement structs and how to encode and decode them.
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC default integration](../02-integration.md)
+
+:::
+
+## Custom packets
+
+Modules connected by a channel must agree on what application data they are sending over the
+channel, as well as how they will encode/decode it. This process is not specified by IBC as it is up
+to each application module to determine how to implement this agreement. However, for most
+applications this will happen as a version negotiation during the channel handshake. While more
+complex version negotiation is possible to implement inside the channel opening handshake, a very
+simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go).
+
+Thus, a module must define its custom packet data structure, along with a well-defined way to
+encode and decode it to and from `[]byte`.
+
+```go
+// Custom packet data defined in application module
+type CustomPacketData struct {
+ // Custom fields ...
+}
+
+EncodePacketData(packetData CustomPacketData) []byte {
+ // encode packetData to bytes
+}
+
+DecodePacketData(encoded []byte) (CustomPacketData) {
+ // decode from bytes to packet data
+}
+```
+
+> Note that the `CustomPacketData` struct is defined in the proto definition and then compiled by the protobuf compiler.
+
+Then a module must encode its packet data before sending it through IBC.
+
+```go
+// retrieve the dynamic capability for this channel
+channelCap := scopedKeeper.GetCapability(ctx, channelCapName)
+// Sending custom application packet data
+data := EncodePacketData(customPacketData)
+// Send packet to IBC, authenticating with channelCap
+sequence, err := IBCChannelKeeper.SendPacket(
+ ctx,
+ channelCap,
+ sourcePort,
+ sourceChannel,
+ timeoutHeight,
+ timeoutTimestamp,
+ data,
+)
+```
+
+A module receiving a packet must decode the `PacketData` into a structure it expects so that it can
+act on it.
+
+```go
+// Receiving custom application packet data (in OnRecvPacket)
+packetData := DecodePacketData(packet.Data)
+// handle received custom packet data
+```
+
+### Optional interfaces
+
+The following interfaces are optional and MAY be implemented by a custom packet type.
+They allow middlewares such as callbacks to access information stored within the packet data.
+
+#### PacketData interface
+
+The `PacketData` interface is defined as follows:
+
+```go
+// PacketData defines an optional interface which an application's packet data structure may implement.
+type PacketData interface {
+ // GetPacketSender returns the sender address of the packet data.
+ // If the packet sender is unknown or undefined, an empty string should be returned.
+ GetPacketSender(sourcePortID string) string
+}
+```
+
+The implementation of `GetPacketSender` should return the sender of the packet data.
+If the packet sender is unknown or undefined, an empty string should be returned.
+
+This interface is intended to give IBC middlewares access to the packet sender of a packet data type.
+
+#### PacketDataProvider interface
+
+The `PacketDataProvider` interface is defined as follows:
+
+```go
+// PacketDataProvider defines an optional interfaces for retrieving custom packet data stored on behalf of another application.
+// An existing problem in the IBC middleware design is the inability for a middleware to define its own packet data type and insert packet sender provided information.
+// A short term solution was introduced into several application's packet data to utilize a memo field to carry this information on behalf of another application.
+// This interfaces standardizes that behaviour. Upon realization of the ability for middleware's to define their own packet data types, this interface will be deprecated and removed with time.
+type PacketDataProvider interface {
+ // GetCustomPacketData returns the packet data held on behalf of another application.
+ // The name the information is stored under should be provided as the key.
+ // If no custom packet data exists for the key, nil should be returned.
+ GetCustomPacketData(key string) interface{}
+}
+```
+
+The implementation of `GetCustomPacketData` should return packet data held on behalf of another application (if present and supported).
+If this functionality is not supported, it should return nil. Otherwise it should return the packet data associated with the provided key.
+
+This interface gives IBC applications access to the packet data information embedded into the base packet data type.
+Within transfer and interchain accounts, the embedded packet data is stored within the Memo field.
+
+Once all IBC applications within an IBC stack are capable of creating/maintaining their own packet data type's, this interface function will be deprecated and removed.
+
+## Acknowledgements
+
+Modules may commit an acknowledgement upon receiving and processing a packet in the case of synchronous packet processing.
+In the case where a packet is processed at some later point after the packet has been received (asynchronous execution), the acknowledgement
+will be written once the packet has been processed by the application which may be well after the packet receipt.
+
+NOTE: Most blockchain modules will want to use the synchronous execution model in which the module processes and writes the acknowledgement
+for a packet as soon as it has been received from the IBC module.
+
+This acknowledgement can then be relayed back to the original sender chain, which can take action
+depending on the contents of the acknowledgement.
+
+Just as packet data was opaque to IBC, acknowledgements are similarly opaque. Modules must pass and
+receive acknowledegments with the IBC modules as byte strings.
+
+Thus, modules must agree on how to encode/decode acknowledgements. The process of creating an
+acknowledgement struct along with encoding and decoding it, is very similar to the packet data
+example above. [ICS 04](https://github.com/cosmos/ibc/blob/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope)
+specifies a recommended format for acknowledgements. This acknowledgement type can be imported from
+[channel types](https://github.com/cosmos/ibc-go/tree/main/modules/core/04-channel/types).
+
+While modules may choose arbitrary acknowledgement structs, a default acknowledgement types is provided by IBC [here](https://github.com/cosmos/ibc-go/blob/main/proto/ibc/core/channel/v1/channel.proto):
+
+```protobuf
+// Acknowledgement is the recommended acknowledgement format to be used by
+// app-specific protocols.
+// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental
+// conflicts with other protobuf message formats used for acknowledgements.
+// The first byte of any message with this format will be the non-ASCII values
+// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS:
+// https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope
+message Acknowledgement {
+ // response contains either a result or an error and must be non-empty
+ oneof response {
+ bytes result = 21;
+ string error = 22;
+ }
+}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md
new file mode 100644
index 00000000000..666fb1af11b
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md
@@ -0,0 +1,44 @@
+---
+title: Routing
+sidebar_label: Routing
+sidebar_position: 6
+slug: /ibc/apps/routing
+---
+
+# Routing
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC default integration](../02-integration.md)
+
+:::
+:::note Synopsis
+Learn how to hook a route to the IBC router for the custom IBC module.
+:::
+
+As mentioned above, modules must implement the `IBCModule` interface (which contains both channel
+handshake callbacks and packet handling callbacks). The concrete implementation of this interface
+must be registered with the module name as a route on the IBC `Router`.
+
+```go
+// app.go
+func NewApp(...args) *App {
+ // ...
+
+ // Create static IBC router, add module routes, then set and seal it
+ ibcRouter := port.NewRouter()
+
+ ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule)
+ // Note: moduleCallbacks must implement IBCModule interface
+ ibcRouter.AddRoute(moduleName, moduleCallbacks)
+
+ // Setting Router will finalize all routes by sealing router
+ // No more routes can be added
+ app.IBCKeeper.SetRouter(ibcRouter)
+
+ // ...
+}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json
new file mode 100644
index 00000000000..4561a95b84c
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Applications",
+ "position": 3,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/images/packet_flow.png
new file mode 100644
index 00000000000..db2d1d314b8
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/images/packet_flow.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/01-overview.md b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/01-overview.md
new file mode 100644
index 00000000000..24a27689755
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/01-overview.md
@@ -0,0 +1,55 @@
+---
+title: IBC middleware
+sidebar_label: IBC middleware
+sidebar_position: 1
+slug: /ibc/middleware/overview
+---
+
+# IBC middleware
+
+:::note Synopsis
+Learn how to write your own custom middleware to wrap an IBC application, and understand how to hook different middleware to IBC base applications to form different IBC application stacks
+:::
+
+This documentation serves as a guide for middleware developers who want to write their own middleware and for chain developers who want to use IBC middleware on their chains.
+
+After going through the overview they can consult respectively:
+
+- [documentation on developing custom middleware](02-develop.md)
+- [documentation on integrating middleware into a stack on a chain](03-integration.md)
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../01-overview.md)
+- [IBC Integration](../02-integration.md)
+- [IBC Application Developer Guide](../03-apps/01-apps.md)
+
+:::
+
+## Why middleware?
+
+IBC applications are designed to be self-contained modules that implement their own application-specific logic through a set of interfaces with the core IBC handlers. These core IBC handlers, in turn, are designed to enforce the correctness properties of IBC (transport, authentication, ordering) while delegating all application-specific handling to the IBC application modules. **However, there are cases where some functionality may be desired by many applications, yet not appropriate to place in core IBC.**
+
+Middleware allows developers to define the extensions as separate modules that can wrap over the base application. This middleware can thus perform its own custom logic, and pass data into the application so that it may run its logic without being aware of the middleware's existence. This allows both the application and the middleware to implement its own isolated logic while still being able to run as part of a single packet flow.
+
+## Definitions
+
+`Middleware`: A self-contained module that sits between core IBC and an underlying IBC application during packet execution. All messages between core IBC and underlying application must flow through middleware, which may perform its own custom logic.
+
+`Underlying Application`: An underlying application is the application that is directly connected to the middleware in question. This underlying application may itself be middleware that is chained to a base application.
+
+`Base Application`: A base application is an IBC application that does not contain any middleware. It may be nested by 0 or multiple middleware to form an application stack.
+
+`Application Stack (or stack)`: A stack is the complete set of application logic (middleware(s) + base application) that gets connected to core IBC. A stack may be just a base application, or it may be a series of middlewares that nest a base application.
+
+The diagram below gives an overview of a middleware stack consisting of two middleware (one stateless, the other stateful).
+
+![middleware-stack.png](./images/middleware-stack.png)
+
+Keep in mind that:
+
+- **The order of the middleware matters** (more on how to correctly define your stack in the code will follow in the [integration section](03-integration.md)).
+- Depending on the type of message, it will either be passed on from the base application up the middleware stack to core IBC or down the stack in the reverse situation (handshake and packet callbacks).
+- IBC middleware will wrap over an underlying IBC application and sits between core IBC and the application. It has complete control in modifying any message coming from IBC to the application, and any message coming from the application to core IBC. **Middleware must be completely trusted by chain developers who wish to integrate them**, as this gives them complete flexibility in modifying the application(s) they wrap.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/02-develop.md b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/02-develop.md
new file mode 100644
index 00000000000..aff2a14b076
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/02-develop.md
@@ -0,0 +1,519 @@
+---
+title: Create a custom IBC middleware
+sidebar_label: Create a custom IBC middleware
+sidebar_position: 2
+slug: /ibc/middleware/develop
+---
+
+
+# Create a custom IBC middleware
+
+IBC middleware will wrap over an underlying IBC application (a base application or downstream middleware) and sits between core IBC and the base application.
+
+The interfaces a middleware must implement are found [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/05-port/types/module.go).
+
+```go
+// Middleware implements the ICS26 Module interface
+type Middleware interface {
+ IBCModule // middleware has acccess to an underlying application which may be wrapped by more middleware
+ ICS4Wrapper // middleware has access to ICS4Wrapper which may be core IBC Channel Handler or a higher-level middleware that wraps this middleware.
+}
+```
+
+An `IBCMiddleware` struct implementing the `Middleware` interface, can be defined with its constructor as follows:
+
+```go
+// @ x/module_name/ibc_middleware.go
+
+// IBCMiddleware implements the ICS26 callbacks and ICS4Wrapper for the fee middleware given the
+// fee keeper and the underlying application.
+type IBCMiddleware struct {
+ app porttypes.IBCModule
+ keeper keeper.Keeper
+}
+
+// NewIBCMiddleware creates a new IBCMiddlware given the keeper and underlying application
+func NewIBCMiddleware(app porttypes.IBCModule, k keeper.Keeper) IBCMiddleware {
+ return IBCMiddleware{
+ app: app,
+ keeper: k,
+ }
+}
+```
+
+## Implement `IBCModule` interface
+
+`IBCMiddleware` is a struct that implements the [ICS-26 `IBCModule` interface (`porttypes.IBCModule`)](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/05-port/types/module.go#L14-L107). It is recommended to separate these callbacks into a separate file `ibc_middleware.go`.
+
+> Note how this is analogous to implementing the same interfaces for IBC applications that act as base applications.
+
+As will be mentioned in the [integration section](03-integration.md), this struct should be different than the struct that implements `AppModule` in case the middleware maintains its own internal state and processes separate SDK messages.
+
+The middleware must have access to the underlying application, and be called before it during all ICS-26 callbacks. It may execute custom logic during these callbacks, and then call the underlying application's callback.
+
+> Middleware **may** choose not to call the underlying application's callback at all. Though these should generally be limited to error cases.
+
+The `IBCModule` interface consists of the channel handshake callbacks and packet callbacks. Most of the custom logic will be performed in the packet callbacks, in the case of the channel handshake callbacks, introducing the middleware requires consideration to the version negotiation and passing of capabilities.
+
+### Channel handshake callbacks
+
+#### Version negotiation
+
+In the case where the IBC middleware expects to speak to a compatible IBC middleware on the counterparty chain, they must use the channel handshake to negotiate the middleware version without interfering in the version negotiation of the underlying application.
+
+Middleware accomplishes this by formatting the version in a JSON-encoded string containing the middleware version and the application version. The application version may as well be a JSON-encoded string, possibly including further middleware and app versions, if the application stack consists of multiple milddlewares wrapping a base application. The format of the version is specified in ICS-30 as the following:
+
+```json
+{
+ "": "",
+ "app_version": ""
+}
+```
+
+The `` key in the JSON struct should be replaced by the actual name of the key for the corresponding middleware (e.g. `fee_version`).
+
+During the handshake callbacks, the middleware can unmarshal the version string and retrieve the middleware and application versions. It can do its negotiation logic on ``, and pass the `` to the underlying application.
+
+> **NOTE**: Middleware that does not need to negotiate with a counterparty middleware on the remote stack will not implement the version unmarshalling and negotiation, and will simply perform its own custom logic on the callbacks without relying on the counterparty behaving similarly.
+
+#### `OnChanOpenInit`
+
+```go
+func (im IBCMiddleware) OnChanOpenInit(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID string,
+ channelID string,
+ channelCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ version string,
+) (string, error) {
+ if version != "" {
+ // try to unmarshal JSON-encoded version string and pass
+ // the app-specific version to app callback.
+ // otherwise, pass version directly to app callback.
+ metadata, err := Unmarshal(version)
+ if err != nil {
+ // Since it is valid for fee version to not be specified,
+ // the above middleware version may be for another middleware.
+ // Pass the entire version string onto the underlying application.
+ return im.app.OnChanOpenInit(
+ ctx,
+ order,
+ connectionHops,
+ portID,
+ channelID,
+ channelCap,
+ counterparty,
+ version,
+ )
+ }
+ else {
+ metadata = {
+ // set middleware version to default value
+ MiddlewareVersion: defaultMiddlewareVersion,
+ // allow application to return its default version
+ AppVersion: "",
+ }
+ }
+ }
+
+ doCustomLogic()
+
+ // if the version string is empty, OnChanOpenInit is expected to return
+ // a default version string representing the version(s) it supports
+ appVersion, err := im.app.OnChanOpenInit(
+ ctx,
+ order,
+ connectionHops,
+ portID,
+ channelID,
+ channelCap,
+ counterparty,
+ metadata.AppVersion, // note we only pass app version here
+ )
+ if err != nil {
+ // Since it is valid for fee version to not be specified,
+ // the above middleware version may be for another middleware.
+ // Pass the entire version string onto the underlying application.
+ return im.app.OnChanOpenInit(
+ ctx,
+ order,
+ connectionHops,
+ portID,
+ channelID,
+ channelCap,
+ counterparty,
+ version,
+ )
+ }
+ else {
+ metadata = {
+ // set middleware version to default value
+ MiddlewareVersion: defaultMiddlewareVersion,
+ // allow application to return its default version
+ AppVersion: "",
+ }
+ }
+
+ doCustomLogic()
+
+ // if the version string is empty, OnChanOpenInit is expected to return
+ // a default version string representing the version(s) it supports
+ appVersion, err := im.app.OnChanOpenInit(
+ ctx,
+ order,
+ connectionHops,
+ portID,
+ channelID,
+ channelCap,
+ counterparty,
+ metadata.AppVersion, // note we only pass app version here
+ )
+ if err != nil {
+ return "", err
+ }
+
+ version := constructVersion(metadata.MiddlewareVersion, appVersion)
+
+ return version, nil
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L36-L83) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnChanOpenTry`
+
+```go
+func (im IBCMiddleware) OnChanOpenTry(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID,
+ channelID string,
+ channelCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ counterpartyVersion string,
+) (string, error) {
+ // try to unmarshal JSON-encoded version string and pass
+ // the app-specific version to app callback.
+ // otherwise, pass version directly to app callback.
+ cpMetadata, err := Unmarshal(counterpartyVersion)
+ if err != nil {
+ return app.OnChanOpenTry(
+ ctx,
+ order,
+ connectionHops,
+ portID,
+ channelID,
+ channelCap,
+ counterparty,
+ counterpartyVersion,
+ )
+ }
+
+ doCustomLogic()
+
+ // Call the underlying application's OnChanOpenTry callback.
+ // The try callback must select the final app-specific version string and return it.
+ appVersion, err := app.OnChanOpenTry(
+ ctx,
+ order,
+ connectionHops,
+ portID,
+ channelID,
+ channelCap,
+ counterparty,
+ cpMetadata.AppVersion, // note we only pass counterparty app version here
+ )
+ if err != nil {
+ return "", err
+ }
+
+ // negotiate final middleware version
+ middlewareVersion := negotiateMiddlewareVersion(cpMetadata.MiddlewareVersion)
+ version := constructVersion(middlewareVersion, appVersion)
+
+ return version, nil
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L88-L125) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnChanOpenAck`
+
+```go
+func (im IBCMiddleware) OnChanOpenAck(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+ counterpartyChannelID string,
+ counterpartyVersion string,
+) error {
+ // try to unmarshal JSON-encoded version string and pass
+ // the app-specific version to app callback.
+ // otherwise, pass version directly to app callback.
+ cpMetadata, err = UnmarshalJSON(counterpartyVersion)
+ if err != nil {
+ return app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion)
+ }
+
+ if !isCompatible(cpMetadata.MiddlewareVersion) {
+ return error
+ }
+ doCustomLogic()
+
+ // call the underlying application's OnChanOpenTry callback
+ return app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, cpMetadata.AppVersion)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L128-L153)) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnChanOpenConfirm`
+
+```go
+func OnChanOpenConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ doCustomLogic()
+
+ return app.OnChanOpenConfirm(ctx, portID, channelID)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L156-L163) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnChanCloseInit`
+
+```go
+func OnChanCloseInit(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ doCustomLogic()
+
+ return app.OnChanCloseInit(ctx, portID, channelID)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L166-L188) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnChanCloseConfirm`
+
+```go
+func OnChanCloseConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ doCustomLogic()
+
+ return app.OnChanCloseConfirm(ctx, portID, channelID)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L191-L213) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### Capabilities
+
+The middleware should simply pass the capability in the callback arguments along to the underlying application so that it may be claimed by the base application. The base application will then pass the capability up the stack in order to authenticate an outgoing packet/acknowledgement, which you can check in the [`ICS4Wrapper` section](02-develop.md#ics-4-wrappers).
+
+In the case where the middleware wishes to send a packet or acknowledgment without the involvement of the underlying application, it should be given access to the same `scopedKeeper` as the base application so that it can retrieve the capabilities by itself.
+
+### Packet callbacks
+
+The packet callbacks just like the handshake callbacks wrap the application's packet callbacks. The packet callbacks are where the middleware performs most of its custom logic. The middleware may read the packet flow data and perform some additional packet handling, or it may modify the incoming data before it reaches the underlying application. This enables a wide degree of usecases, as a simple base application like token-transfer can be transformed for a variety of usecases by combining it with custom middleware.
+
+#### `OnRecvPacket`
+
+```go
+func (im IBCMiddleware) OnRecvPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ relayer sdk.AccAddress,
+) ibcexported.Acknowledgement {
+ doCustomLogic(packet)
+
+ ack := app.OnRecvPacket(ctx, packet, relayer)
+
+ doCustomLogic(ack) // middleware may modify outgoing ack
+
+ return ack
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L217-L238) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnAcknowledgementPacket`
+
+```go
+func (im IBCMiddleware) OnAcknowledgementPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ acknowledgement []byte,
+ relayer sdk.AccAddress,
+) error {
+ doCustomLogic(packet, ack)
+
+ return app.OnAcknowledgementPacket(ctx, packet, ack, relayer)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L242-L293) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+#### `OnTimeoutPacket`
+
+```go
+func (im IBCMiddleware) OnTimeoutPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ relayer sdk.AccAddress,
+) error {
+ doCustomLogic(packet)
+
+ return app.OnTimeoutPacket(ctx, packet, relayer)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L297-L335) an example implementation of this callback for the ICS-29 Fee Middleware module.
+
+## ICS-04 wrappers
+
+Middleware must also wrap ICS-04 so that any communication from the application to the `channelKeeper` goes through the middleware first. Similar to the packet callbacks, the middleware may modify outgoing acknowledgements and packets in any way it wishes.
+
+To ensure optimal generalisability, the `ICS4Wrapper` abstraction serves to abstract away whether a middleware is the topmost middleware (and thus directly caling into the ICS-04 `channelKeeper`) or itself being wrapped by another middleware.
+
+Remember that middleware can be stateful or stateless. When defining the stateful middleware's keeper, the `ics4Wrapper` field is included. Then the appropriate keeper can be passed when instantiating the middleware's keeper in `app.go`
+
+```go
+type Keeper struct {
+ storeKey storetypes.StoreKey
+ cdc codec.BinaryCodec
+
+ ics4Wrapper porttypes.ICS4Wrapper
+ channelKeeper types.ChannelKeeper
+ portKeeper types.PortKeeper
+ ...
+}
+```
+
+For stateless middleware, the `ics4Wrapper` can be passed on directly without having to instantiate a keeper struct for the middleware.
+
+[The interface](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/05-port/types/module.go#L110-L133) looks as follows:
+
+```go
+// This is implemented by ICS4 and all middleware that are wrapping base application.
+// The base application will call `sendPacket` or `writeAcknowledgement` of the middleware directly above them
+// which will call the next middleware until it reaches the core IBC handler.
+type ICS4Wrapper interface {
+ SendPacket(
+ ctx sdk.Context,
+ chanCap *capabilitytypes.Capability,
+ sourcePort string,
+ sourceChannel string,
+ timeoutHeight clienttypes.Height,
+ timeoutTimestamp uint64,
+ data []byte,
+ ) (sequence uint64, err error)
+
+ WriteAcknowledgement(
+ ctx sdk.Context,
+ chanCap *capabilitytypes.Capability,
+ packet exported.PacketI,
+ ack exported.Acknowledgement,
+ ) error
+
+ GetAppVersion(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+ ) (string, bool)
+}
+```
+
+:warning: In the following paragraphs, the methods are presented in pseudo code which has been kept general, not stating whether the middleware is stateful or stateless. Remember that when the middleware is stateful, `ics4Wrapper` can be accessed through the keeper.
+
+Check out the references provided for an actual implementation to clarify, where the `ics4Wrapper` methods in `ibc_middleware.go` simply call the equivalent keeper methods where the actual logic resides.
+
+### `SendPacket`
+
+```go
+func SendPacket(
+ ctx sdk.Context,
+ chanCap *capabilitytypes.Capability,
+ sourcePort string,
+ sourceChannel string,
+ timeoutHeight clienttypes.Height,
+ timeoutTimestamp uint64,
+ appData []byte,
+) (uint64, error) {
+ // middleware may modify data
+ data = doCustomLogic(appData)
+
+ return ics4Wrapper.SendPacket(
+ ctx,
+ chanCap,
+ sourcePort,
+ sourceChannel,
+ timeoutHeight,
+ timeoutTimestamp,
+ data,
+ )
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/keeper/relay.go#L17-L27) an example implementation of this function for the ICS-29 Fee Middleware module.
+
+### `WriteAcknowledgement`
+
+```go
+// only called for async acks
+func WriteAcknowledgement(
+ ctx sdk.Context,
+ chanCap *capabilitytypes.Capability,
+ packet exported.PacketI,
+ ack exported.Acknowledgement,
+) error {
+ // middleware may modify acknowledgement
+ ack_bytes = doCustomLogic(ack)
+
+ return ics4Wrapper.WriteAcknowledgement(packet, ack_bytes)
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/keeper/relay.go#L31-L55) an example implementation of this function for the ICS-29 Fee Middleware module.
+
+### `GetAppVersion`
+
+```go
+// middleware must return the underlying application version
+func GetAppVersion(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) (string, bool) {
+ version, found := ics4Wrapper.GetAppVersion(ctx, portID, channelID)
+ if !found {
+ return "", false
+ }
+
+ if !MiddlewareEnabled {
+ return version, true
+ }
+
+ // unwrap channel version
+ metadata, err := Unmarshal(version)
+ if err != nil {
+ panic(fmt.Errof("unable to unmarshal version: %w", err))
+ }
+
+ return metadata.AppVersion, true
+}
+```
+
+See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/keeper/relay.go#L58-L74) an example implementation of this function for the ICS-29 Fee Middleware module.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md
new file mode 100644
index 00000000000..f049555e544
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md
@@ -0,0 +1,74 @@
+---
+title: Integrating IBC middleware into a chain
+sidebar_label: Integrating IBC middleware into a chain
+sidebar_position: 3
+slug: /ibc/middleware/integration
+---
+
+
+# Integrating IBC middleware into a chain
+
+Learn how to integrate IBC middleware(s) with a base application to your chain. The following document only applies for Cosmos SDK chains.
+
+If the middleware is maintaining its own state and/or processing SDK messages, then it should create and register its SDK module with the module manager in `app.go`.
+
+All middleware must be connected to the IBC router and wrap over an underlying base IBC application. An IBC application may be wrapped by many layers of middleware, only the top layer middleware should be hooked to the IBC router, with all underlying middlewares and application getting wrapped by it.
+
+The order of middleware **matters**, function calls from IBC to the application travel from top-level middleware to the bottom middleware and then to the application. Function calls from the application to IBC goes through the bottom middleware in order to the top middleware and then to core IBC handlers. Thus the same set of middleware put in different orders may produce different effects.
+
+## Example integration
+
+```go
+// app.go pseudocode
+
+// middleware 1 and middleware 3 are stateful middleware,
+// perhaps implementing separate sdk.Msg and Handlers
+mw1Keeper := mw1.NewKeeper(storeKey1, ..., ics4Wrapper: channelKeeper, ...) // in stack 1 & 3
+// middleware 2 is stateless
+mw3Keeper1 := mw3.NewKeeper(storeKey3,..., ics4Wrapper: mw1Keeper, ...) // in stack 1
+mw3Keeper2 := mw3.NewKeeper(storeKey3,..., ics4Wrapper: channelKeeper, ...) // in stack 2
+
+// Only create App Module **once** and register in app module
+// if the module maintains independent state and/or processes sdk.Msgs
+app.moduleManager = module.NewManager(
+ ...
+ mw1.NewAppModule(mw1Keeper),
+ mw3.NewAppModule(mw3Keeper1),
+ mw3.NewAppModule(mw3Keeper2),
+ transfer.NewAppModule(transferKeeper),
+ custom.NewAppModule(customKeeper)
+)
+
+scopedKeeperTransfer := capabilityKeeper.NewScopedKeeper("transfer")
+scopedKeeperCustom1 := capabilityKeeper.NewScopedKeeper("custom1")
+scopedKeeperCustom2 := capabilityKeeper.NewScopedKeeper("custom2")
+
+// NOTE: IBC Modules may be initialized any number of times provided they use a separate
+// scopedKeeper and underlying port.
+
+customKeeper1 := custom.NewKeeper(..., scopedKeeperCustom1, ...)
+customKeeper2 := custom.NewKeeper(..., scopedKeeperCustom2, ...)
+
+// initialize base IBC applications
+// if you want to create two different stacks with the same base application,
+// they must be given different scopedKeepers and assigned different ports.
+transferIBCModule := transfer.NewIBCModule(transferKeeper)
+customIBCModule1 := custom.NewIBCModule(customKeeper1, "portCustom1")
+customIBCModule2 := custom.NewIBCModule(customKeeper2, "portCustom2")
+
+// create IBC stacks by combining middleware with base application
+// NOTE: since middleware2 is stateless it does not require a Keeper
+// stack 1 contains mw1 -> mw3 -> transfer
+stack1 := mw1.NewIBCMiddleware(mw3.NewIBCMiddleware(transferIBCModule, mw3Keeper1), mw1Keeper)
+// stack 2 contains mw3 -> mw2 -> custom1
+stack2 := mw3.NewIBCMiddleware(mw2.NewIBCMiddleware(customIBCModule1), mw3Keeper2)
+// stack 3 contains mw2 -> mw1 -> custom2
+stack3 := mw2.NewIBCMiddleware(mw1.NewIBCMiddleware(customIBCModule2, mw1Keeper))
+
+// associate each stack with the moduleName provided by the underlying scopedKeeper
+ibcRouter := porttypes.NewRouter()
+ibcRouter.AddRoute("transfer", stack1)
+ibcRouter.AddRoute("custom1", stack2)
+ibcRouter.AddRoute("custom2", stack3)
+app.IBCKeeper.SetRouter(ibcRouter)
+```
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json
new file mode 100644
index 00000000000..6596fe16c13
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Middleware",
+ "position": 4,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/images/middleware-stack.png b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/images/middleware-stack.png
new file mode 100644
index 00000000000..1d54f808170
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/images/middleware-stack.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/00-intro.md b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/00-intro.md
new file mode 100644
index 00000000000..386a0ebfe73
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/00-intro.md
@@ -0,0 +1,15 @@
+---
+title: Upgrading IBC Chains Overview
+sidebar_label: Overview
+sidebar_position: 0
+slug: /ibc/upgrades/intro
+---
+
+# Upgrading IBC Chains Overview
+
+This directory contains information on how to upgrade an IBC chain without breaking counterparty clients and connections.
+
+IBC-connnected chains must be able to upgrade without breaking connections to other chains. Otherwise there would be a massive disincentive towards upgrading and disrupting high-value IBC connections, thus preventing chains in the IBC ecosystem from evolving and improving. Many chain upgrades may be irrelevant to IBC, however some upgrades could potentially break counterparty clients if not handled correctly. Thus, any IBC chain that wishes to perform a IBC-client-breaking upgrade must perform an IBC upgrade in order to allow counterparty clients to securely upgrade to the new light client.
+
+1. The [quick-guide](./01-quick-guide.md) describes how IBC-connected chains can perform client-breaking upgrades and how relayers can securely upgrade counterparty clients using the SDK.
+2. The [developer-guide](./02-developer-guide.md) is a guide for developers intending to develop IBC client implementations with upgrade functionality.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/01-quick-guide.md b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/01-quick-guide.md
new file mode 100644
index 00000000000..a1a0b766e60
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/01-quick-guide.md
@@ -0,0 +1,60 @@
+---
+title: How to Upgrade IBC Chains and their Clients
+sidebar_label: How to Upgrade IBC Chains and their Clients
+sidebar_position: 1
+slug: /ibc/upgrades/quick-guide
+---
+
+
+# How to Upgrade IBC Chains and their Clients
+
+:::note Synopsis
+Learn how to upgrade your chain and counterparty clients.
+:::
+
+The information in this doc for upgrading chains is relevant to SDK chains. However, the guide for counterparty clients is relevant to any Tendermint client that enables upgrades.
+
+## IBC Client Breaking Upgrades
+
+IBC-connected chains must perform an IBC upgrade if their upgrade will break counterparty IBC clients. The current IBC protocol supports upgrading tendermint chains for a specific subset of IBC-client-breaking upgrades. Here is the exhaustive list of IBC client-breaking upgrades and whether the IBC protocol currently supports such upgrades.
+
+IBC currently does **NOT** support unplanned upgrades. All of the following upgrades must be planned and committed to in advance by the upgrading chain, in order for counterparty clients to maintain their connections securely.
+
+Note: Since upgrades are only implemented for Tendermint clients, this doc only discusses upgrades on Tendermint chains that would break counterparty IBC Tendermint Clients.
+
+1. Changing the Chain-ID: **Supported**
+2. Changing the UnbondingPeriod: **Partially Supported**, chains may increase the unbonding period with no issues. However, decreasing the unbonding period may irreversibly break some counterparty clients. Thus, it is **not recommended** that chains reduce the unbonding period.
+3. Changing the height (resetting to 0): **Supported**, so long as chains remember to increment the revision number in their chain-id.
+4. Changing the ProofSpecs: **Supported**, this should be changed if the proof structure needed to verify IBC proofs is changed across the upgrade. Ex: Switching from an IAVL store, to a SimpleTree Store
+5. Changing the UpgradePath: **Supported**, this might involve changing the key under which upgraded clients and consensus states are stored in the upgrade store, or even migrating the upgrade store itself.
+6. Migrating the IBC store: **Unsupported**, as the IBC store location is negotiated by the connection.
+7. Upgrading to a backwards compatible version of IBC: Supported
+8. Upgrading to a non-backwards compatible version of IBC: **Unsupported**, as IBC version is negotiated on connection handshake.
+9. Changing the Tendermint LightClient algorithm: **Partially Supported**. Changes to the light client algorithm that do not change the ClientState or ConsensusState struct may be supported, provided that the counterparty is also upgraded to support the new light client algorithm. Changes that require updating the ClientState and ConsensusState structs themselves are theoretically possible by providing a path to translate an older ClientState struct into the new ClientState struct; however this is not currently implemented.
+
+## Step-by-Step Upgrade Process for SDK chains
+
+If the IBC-connected chain is conducting an upgrade that will break counterparty clients, it must ensure that the upgrade is first supported by IBC using the list above and then execute the upgrade process described below in order to prevent counterparty clients from breaking.
+
+1. Create a governance proposal with the [`MsgIBCSoftwareUpgrade`](https://buf.build/cosmos/ibc/docs/main:ibc.core.client.v1#ibc.core.client.v1.MsgIBCSoftwareUpgrade) message which contains an `UpgradePlan` and a new IBC `ClientState` in the `UpgradedClientState` field. Note that the `UpgradePlan` must specify an upgrade height **only** (no upgrade time), and the `ClientState` should only include the fields common to all valid clients (chain-specified parameters) and zero out any client-customizable fields (such as `TrustingPeriod`).
+2. Vote on and pass the governance proposal.
+
+Upon passing the governance proposal, the upgrade module will commit the `UpgradedClient` under the key: `upgrade/UpgradedIBCState/{upgradeHeight}/upgradedClient`. On the block right before the upgrade height, the upgrade module will also commit an initial consensus state for the next chain under the key: `upgrade/UpgradedIBCState/{upgradeHeight}/upgradedConsState`.
+
+Once the chain reaches the upgrade height and halts, a relayer can upgrade the counterparty clients to the last block of the old chain. They can then submit the proofs of the `UpgradedClient` and `UpgradedConsensusState` against this last block and upgrade the counterparty client.
+
+## Step-by-Step Upgrade Process for Relayers Upgrading Counterparty Clients
+
+Once the upgrading chain has committed to upgrading, relayers must wait till the chain halts at the upgrade height before upgrading counterparty clients. This is because chains may reschedule or cancel upgrade plans before they occur. Thus, relayers must wait till the chain reaches the upgrade height and halts before they can be sure the upgrade will take place.
+
+Thus, the upgrade process for relayers trying to upgrade the counterparty clients is as follows:
+
+1. Wait for the upgrading chain to reach the upgrade height and halt
+2. Query a full node for the proofs of `UpgradedClient` and `UpgradedConsensusState` at the last height of the old chain.
+3. Update the counterparty client to the last height of the old chain using the `UpdateClient` msg.
+4. Submit an `UpgradeClient` msg to the counterparty chain with the `UpgradedClient`, `UpgradedConsensusState` and their respective proofs.
+5. Submit an `UpdateClient` msg to the counterparty chain with a header from the new upgraded chain.
+
+The Tendermint client on the counterparty chain will verify that the upgrading chain did indeed commit to the upgraded client and upgraded consensus state at the upgrade height (since the upgrade height is included in the key). If the proofs are verified against the upgrade height, then the client will upgrade to the new client while retaining all of its client-customized fields. Thus, it will retain its old TrustingPeriod, TrustLevel, MaxClockDrift, etc; while adopting the new chain-specified fields such as UnbondingPeriod, ChainId, UpgradePath, etc. Note, this can lead to an invalid client since the old client-chosen fields may no longer be valid given the new chain-chosen fields. Upgrading chains should try to avoid these situations by not altering parameters that can break old clients. For an example, see the UnbondingPeriod example in the supported upgrades section.
+
+The upgraded consensus state will serve purely as a basis of trust for future `UpdateClientMsgs` and will not contain a consensus root to perform proof verification against. Thus, relayers must submit an `UpdateClientMsg` with a header from the new chain so that the connection can be used for proof verification again.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/02-developer-guide.md b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/02-developer-guide.md
new file mode 100644
index 00000000000..1f33e9d0ad2
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/02-developer-guide.md
@@ -0,0 +1,14 @@
+---
+title: IBC Client Developer Guide to Upgrades
+sidebar_label: IBC Client Developer Guide to Upgrades
+sidebar_position: 2
+slug: /ibc/upgrades/developer-guide
+---
+
+# IBC Client Developer Guide to Upgrades
+
+:::note Synopsis
+Learn how to implement upgrade functionality for your custom IBC client.
+:::
+
+Please see the section [Handling upgrades](../../03-light-clients/01-developer-guide/05-upgrades.md) from the light client developer guide for more information.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/03-genesis-restart.md b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/03-genesis-restart.md
new file mode 100644
index 00000000000..3a15141d41d
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/03-genesis-restart.md
@@ -0,0 +1,52 @@
+---
+title: Genesis Restart Upgrades
+sidebar_label: Genesis Restart Upgrades
+sidebar_position: 3
+slug: /ibc/upgrades/genesis-restart
+---
+
+
+# Genesis Restart Upgrades
+
+:::note Synopsis
+Learn how to upgrade your chain and counterparty clients using genesis restarts.
+:::
+
+**NOTE**: Regular genesis restarts are currently unsupported by relayers!
+
+## IBC Client Breaking Upgrades
+
+IBC client breaking upgrades are possible using genesis restarts.
+It is highly recommended to use the in-place migrations instead of a genesis restart.
+Genesis restarts should be used sparingly and as backup plans.
+
+Genesis restarts still require the usage of an IBC upgrade proposal in order to correctly upgrade counterparty clients.
+
+### Step-by-Step Upgrade Process for SDK Chains
+
+If the IBC-connected chain is conducting an upgrade that will break counterparty clients, it must ensure that the upgrade is first supported by IBC using the [IBC Client Breaking Upgrade List](./01-quick-guide.md#ibc-client-breaking-upgrades) and then execute the upgrade process described below in order to prevent counterparty clients from breaking.
+
+1. Create a governance proposal with the [`MsgIBCSoftwareUpgrade`](https://buf.build/cosmos/ibc/docs/main:ibc.core.client.v1#ibc.core.client.v1.MsgIBCSoftwareUpgrade) which contains an `UpgradePlan` and a new IBC `ClientState` in the `UpgradedClientState` field. Note that the `UpgradePlan` must specify an upgrade height **only** (no upgrade time), and the `ClientState` should only include the fields common to all valid clients and zero out any client-customizable fields (such as `TrustingPeriod`).
+2. Vote on and pass the governance proposal.
+3. Halt the node after successful upgrade.
+4. Export the genesis file.
+5. Swap to the new binary.
+6. Run migrations on the genesis file.
+7. Remove the upgrade plan set by the governance proposal from the genesis file. This may be done by migrations.
+8. Change desired chain-specific fields (chain id, unbonding period, etc). This may be done by migrations.
+8. Reset the node's data.
+9. Start the chain.
+
+Upon passing the governance proposal, the upgrade module will commit the `UpgradedClient` under the key: `upgrade/UpgradedIBCState/{upgradeHeight}/upgradedClient`. On the block right before the upgrade height, the upgrade module will also commit an initial consensus state for the next chain under the key: `upgrade/UpgradedIBCState/{upgradeHeight}/upgradedConsState`.
+
+Once the chain reaches the upgrade height and halts, a relayer can upgrade the counterparty clients to the last block of the old chain. They can then submit the proofs of the `UpgradedClient` and `UpgradedConsensusState` against this last block and upgrade the counterparty client.
+
+### Step-by-Step Upgrade Process for Relayers Upgrading Counterparty Clients
+
+These steps are identical to the regular [IBC client breaking upgrade process](./01-quick-guide.md#step-by-step-upgrade-process-for-relayers-upgrading-counterparty-clients).
+
+## Non-IBC Client Breaking Upgrades
+
+While ibc-go supports genesis restarts which do not break IBC clients, relayers do not support this upgrade path.
+Here is a tracking issue on [Hermes](https://github.com/informalsystems/ibc-rs/issues/1152).
+Please do not attempt a regular genesis restarts unless you have a tool to update counterparty clients correctly.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/_category_.json
new file mode 100644
index 00000000000..46eea8924ec
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Upgrades",
+ "position": 5,
+ "link": { "type": "doc", "id": "intro" }
+}
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/06-proposals.md b/docs/versioned_docs/version-v8.0.x/01-ibc/06-proposals.md
new file mode 100644
index 00000000000..3ed3ec8dcf0
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/06-proposals.md
@@ -0,0 +1,118 @@
+---
+title: Governance Proposals
+sidebar_label: Governance Proposals
+sidebar_position: 6
+slug: /ibc/proposals
+---
+
+# Governance Proposals
+
+In uncommon situations, a highly valued client may become frozen due to uncontrollable
+circumstances. A highly valued client might have hundreds of channels being actively used.
+Some of those channels might have a significant amount of locked tokens used for ICS 20.
+
+If the one third of the validator set of the chain the client represents decides to collude,
+they can sign off on two valid but conflicting headers each signed by the other one third
+of the honest validator set. The light client can now be updated with two valid, but conflicting
+headers at the same height. The light client cannot know which header is trustworthy and therefore
+evidence of such misbehaviour is likely to be submitted resulting in a frozen light client.
+
+Frozen light clients cannot be updated under any circumstance except via a governance proposal.
+Since a quorum of validators can sign arbitrary state roots which may not be valid executions
+of the state machine, a governance proposal has been added to ease the complexity of unfreezing
+or updating clients which have become "stuck". Without this mechanism, validator sets would need
+to construct a state root to unfreeze the client. Unfreezing clients, re-enables all of the channels
+built upon that client. This may result in recovery of otherwise lost funds.
+
+Tendermint light clients may become expired if the trusting period has passed since their
+last update. This may occur if relayers stop submitting headers to update the clients.
+
+An unplanned upgrade by the counterparty chain may also result in expired clients. If the counterparty
+chain undergoes an unplanned upgrade, there may be no commitment to that upgrade signed by the validator
+set before the chain ID changes. In this situation, the validator set of the last valid update for the
+light client is never expected to produce another valid header since the chain ID has changed, which will
+ultimately lead the on-chain light client to become expired.
+
+In the case that a highly valued light client is frozen, expired, or rendered non-updateable, a
+governance proposal may be submitted to update this client, known as the subject client. The
+proposal includes the client identifier for the subject and the client identifier for a substitute
+client. Light client implementations may implement custom updating logic, but in most cases,
+the subject will be updated to the latest consensus state of the substitute client, if the proposal passes.
+The substitute client is used as a "stand in" while the subject is on trial. It is best practice to create
+a substitute client *after* the subject has become frozen to avoid the substitute from also becoming frozen.
+An active substitute client allows headers to be submitted during the voting period to prevent accidental expiry
+once the proposal passes.
+
+*note* two of these parameters: `AllowUpdateAfterExpiry` and `AllowUpdateAfterMisbehavior` have been deprecated, and will both be set to `false` upon upgrades even if they were previously set to `true`. These parameters will no longer play a role in restricting a client upgrade. Please see ADR026 for more details.
+
+# How to recover an expired client with a governance proposal
+
+See also the relevant documentation: [ADR-026, IBC client recovery mechanisms](/architecture/adr-026-ibc-client-recovery-mechanisms)
+
+> **Who is this information for?**
+> Although technically anyone can submit the governance proposal to recover an expired client, often it will be **relayer operators** (at least coordinating the submission).
+
+## Preconditions
+
+- There exists an active client (with a known client identifier) for the same counterparty chain as the expired client.
+- The governance deposit.
+
+## Steps
+
+### Step 1
+
+Check if the client is attached to the expected `chain_id`. For example, for an expired Tendermint client representing the Akash chain the client state looks like this on querying the client state:
+
+```text
+{
+ client_id: 07-tendermint-146
+ client_state:
+ '@type': /ibc.lightclients.tendermint.v1.ClientState
+ allow_update_after_expiry: true
+ allow_update_after_misbehaviour: true
+ chain_id: akashnet-2
+}
+```
+
+The client is attached to the expected Akash `chain_id`. Note that although the parameters (`allow_update_after_expiry` and `allow_update_after_misbehaviour`) exist to signal intent, these parameters have been deprecated and will not enforce any checks on the revival of client. See ADR-026 for more context on this deprecation.
+
+### Step 2
+
+Anyone can submit the governance proposal to recover the client by executing the following via CLI.
+If the chain is on an ibc-go version older than v8, please see the [relevant documentation](https://ibc.cosmos.network/v7/ibc/proposals.html).
+
+- From ibc-go v8 onwards
+
+ ```shell
+ tx gov submit-proposal [path-to-proposal-json]
+ ```
+
+ where `proposal.json` contains:
+
+ ```json
+ {
+ "messages": [
+ {
+ "@type": "/ibc.core.client.v1.MsgRecoverClient",
+ "subject_client_id": "",
+ "substitute_client_id": "",
+ "signer": ""
+ }
+ ],
+ "metadata": "",
+ "deposit": "10stake"
+ "title": "My proposal",
+ "summary": "A short summary of my proposal",
+ "expedited": false
+ }
+ ```
+
+The `` identifier is the proposed client to be updated. This client must be either frozen or expired.
+
+The `` represents a substitute client. It carries all the state for the client which may be updated. It must have identical client and chain parameters to the client which may be updated (except for latest height, frozen height, and chain ID). It should be continually updated during the voting period.
+
+After this, all that remains is deciding who funds the governance deposit and ensuring the governance proposal passes. If it does, the client on trial will be updated to the latest state of the substitute.
+
+## Important considerations
+
+Please note that if the counterparty client is also expired, that client will also need to update. This process updates only one client.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md b/docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md
new file mode 100644
index 00000000000..f40e9e671a3
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md
@@ -0,0 +1,53 @@
+---
+title: Relayer
+sidebar_label: Relayer
+sidebar_position: 7
+slug: /ibc/relayer
+---
+
+# Relayer
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](01-overview.md)
+- [Events](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/08-events.md)
+
+:::
+
+## Events
+
+Events are emitted for every transaction processed by the base application to indicate the execution
+of some logic clients may want to be aware of. This is extremely useful when relaying IBC packets.
+Any message that uses IBC will emit events for the corresponding TAO logic executed as defined in
+the [IBC events document](/events/events).
+
+In the SDK, it can be assumed that for every message there is an event emitted with the type `message`,
+attribute key `action`, and an attribute value representing the type of message sent
+(`channel_open_init` would be the attribute value for `MsgChannelOpenInit`). If a relayer queries
+for transaction events, it can split message events using this event Type/Attribute Key pair.
+
+The Event Type `message` with the Attribute Key `module` may be emitted multiple times for a single
+message due to application callbacks. It can be assumed that any TAO logic executed will result in
+a module event emission with the attribute value `ibc_` (02-client emits `ibc_client`).
+
+### Subscribing with Tendermint
+
+Calling the Tendermint RPC method `Subscribe` via [Tendermint's Websocket](https://docs.tendermint.com/main/rpc/) will return events using
+Tendermint's internal representation of them. Instead of receiving back a list of events as they
+were emitted, Tendermint will return the type `map[string][]string` which maps a string in the
+form `.` to `attribute_value`. This causes extraction of the event
+ordering to be non-trivial, but still possible.
+
+A relayer should use the `message.action` key to extract the number of messages in the transaction
+and the type of IBC transactions sent. For every IBC transaction within the string array for
+`message.action`, the necessary information should be extracted from the other event fields. If
+`send_packet` appears at index 2 in the value for `message.action`, a relayer will need to use the
+value at index 2 of the key `send_packet.packet_sequence`. This process should be repeated for each
+piece of information needed to relay a packet.
+
+## Example Implementations
+
+- [Golang Relayer](https://github.com/cosmos/relayer)
+- [Hermes](https://github.com/informalsystems/ibc-rs/tree/master/crates/relayer)
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md b/docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md
new file mode 100644
index 00000000000..e1e87fb2845
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md
@@ -0,0 +1,11 @@
+---
+title: Protobuf Documentation
+sidebar_label: Protobuf Documentation
+sidebar_position: 8
+slug: /ibc/proto-docs
+---
+
+
+# Protobuf documentation
+
+See [ibc-go Buf Protobuf documentation](https://buf.build/cosmos/ibc/docs/main).
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md b/docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md
new file mode 100644
index 00000000000..cfb537adcca
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md
@@ -0,0 +1,52 @@
+---
+title: Roadmap
+sidebar_label: Roadmap
+sidebar_position: 9
+slug: /ibc/roadmap
+---
+
+# Roadmap ibc-go
+
+*Lastest update: September 12th, 2023*
+
+This document endeavours to inform the wider IBC community about plans and priorities for work on ibc-go by the team at Interchain GmbH. It is intended to broadly inform all users of ibc-go, including developers and operators of IBC, relayer, chain and wallet applications.
+
+This roadmap should be read as a high-level guide, rather than a commitment to schedules and deliverables. The degree of specificity is inversely proportional to the timeline. We will update this document periodically to reflect the status and plans. For the latest expected release timelines, please check [here](https://github.com/cosmos/ibc-go/wiki/Release-timeline).
+
+## v8.0.0
+
+Follow the progress with the [milestone](https://github.com/cosmos/ibc-go/milestone/38).
+
+This release main additions are:
+
+- Upgrade to Cosmos SDK v0.50.
+- [Migration of gov proposals from v1beta1 to v1](https://github.com/cosmos/ibc-go/issues/1282).
+- [Migration of params to be self managed](https://github.com/cosmos/ibc-go/issues/2010).
+
+## 08-wasm/v0.1.0
+
+Follow the progress with the [milestone](https://github.com/cosmos/ibc-go/milestone/40).
+
+The first release of this new module will add support for Wasm light clients. The first Wasm client developed on top of ibc-go/v7 02-client refactor and stored as Wasm bytecode will be the GRANDPA light client used for Cosmos x Substrate IBC connections. This feature will be used also for a NEAR light client in the future.
+
+This feature has been developed by Composable and Strangelove.
+
+## v9.0.0
+
+### Channel upgradability
+
+Channel upgradability will allow chains to renegotiate an existing channel to take advantage of new features without having to create a new channel, thus preserving all existing packet state processed on the channel. This feature will enable, for example, the adoption of existing channels of features like [path unwinding](https://github.com/cosmos/ibc/discussions/824) or fee middleware.
+
+Follow the progress with the [alpha milestone](https://github.com/cosmos/ibc-go/milestone/29) or the [project board](https://github.com/orgs/cosmos/projects/7/views/17).
+
+---
+
+This roadmap is also available as a [project board](https://github.com/orgs/cosmos/projects/7/views/25).
+
+For the latest expected release timelines, please check [here](https://github.com/cosmos/ibc-go/wiki/Release-timeline).
+
+For the latest information on the progress of the work or the decisions made that might influence the roadmap, please follow the [Announcements](https://github.com/cosmos/ibc-go/discussions/categories/announcements) category in the Discussions tab of the repository.
+
+---
+
+**Note**: release version numbers may be subject to change.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md b/docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md
new file mode 100644
index 00000000000..0504a993b17
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md
@@ -0,0 +1,15 @@
+---
+title: Troubleshooting
+sidebar_label: Troubleshooting
+sidebar_position: 10
+slug: /ibc/troubleshooting
+---
+
+# Troubleshooting
+
+## Unauthorized client states
+
+If it is being reported that a client state is unauthorized, this is due to the client type not being present
+in the [`AllowedClients`](https://github.com/cosmos/ibc-go/blob/v6.0.0/modules/core/02-client/types/client.pb.go#L345) array.
+
+Unless the client type is present in this array, all usage of clients of this type will be prevented.
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md b/docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md
new file mode 100644
index 00000000000..d8bd27108ce
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md
@@ -0,0 +1,139 @@
+---
+title: Capability Module
+sidebar_label: Capability Module
+sidebar_position: 11
+slug: /ibc/capability-module
+---
+
+# Capability Module
+
+## Overview
+
+`modules/capability` is an implementation of a Cosmos SDK module, per [ADR 003](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-003-dynamic-capability-store.md), that allows for provisioning, tracking, and authenticating multi-owner capabilities at runtime.
+
+The keeper maintains two states: persistent and ephemeral in-memory. The persistent
+store maintains a globally unique auto-incrementing index and a mapping from
+capability index to a set of capability owners that are defined as a module and
+capability name tuple. The in-memory ephemeral state keeps track of the actual
+capabilities, represented as addresses in local memory, with both forward and reverse indexes.
+The forward index maps module name and capability tuples to the capability name. The
+reverse index maps between the module and capability name and the capability itself.
+
+The keeper allows the creation of "scoped" sub-keepers which are tied to a particular
+module by name. Scoped keepers must be created at application initialization and
+passed to modules, which can then use them to claim capabilities they receive and
+retrieve capabilities which they own by name, in addition to creating new capabilities
+& authenticating capabilities passed by other modules. A scoped keeper cannot escape its scope,
+so a module cannot interfere with or inspect capabilities owned by other modules.
+
+The keeper provides no other core functionality that can be found in other modules
+like queriers, REST and CLI handlers, and genesis state.
+
+## Initialization
+
+During application initialization, the keeper must be instantiated with a persistent
+store key and an in-memory store key.
+
+```go
+type App struct {
+ // ...
+
+ capabilityKeeper *capability.Keeper
+}
+
+func NewApp(...) *App {
+ // ...
+
+ app.capabilityKeeper = capabilitykeeper.NewKeeper(codec, persistentStoreKey, memStoreKey)
+}
+```
+
+After the keeper is created, it can be used to create scoped sub-keepers which
+are passed to other modules that can create, authenticate, and claim capabilities.
+After all the necessary scoped keepers are created and the state is loaded, the
+main capability keeper must be sealed to prevent further scoped keepers from
+being created.
+
+```go
+func NewApp(...) *App {
+ // ...
+
+ // Creating a scoped keeper
+ scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName)
+
+ // Seal the capability keeper to prevent any further modules from creating scoped
+ // sub-keepers.
+ app.capabilityKeeper.Seal()
+
+ return app
+}
+```
+
+## Contents
+
+- [`modules/capability`](#capability-module)
+ - [Overview](#overview)
+ - [Initialization](#initialization)
+ - [Contents](#contents)
+ - [Concepts](#concepts)
+ - [Capabilities](#capabilities)
+ - [Stores](#stores)
+ - [State](#state)
+ - [Persisted KV store](#persisted-kv-store)
+ - [In-memory KV store](#in-memory-kv-store)
+
+## Concepts
+
+### Capabilities
+
+Capabilities are multi-owner. A scoped keeper can create a capability via `NewCapability`
+which creates a new unique, unforgeable object-capability reference. The newly
+created capability is automatically persisted; the calling module need not call
+`ClaimCapability`. Calling `NewCapability` will create the capability with the
+calling module and name as a tuple to be treated the capabilities first owner.
+
+Capabilities can be claimed by other modules which add them as owners. `ClaimCapability`
+allows a module to claim a capability key which it has received from another
+module so that future `GetCapability` calls will succeed. `ClaimCapability` MUST
+be called if a module which receives a capability wishes to access it by name in
+the future. Again, capabilities are multi-owner, so if multiple modules have a
+single Capability reference, they will all own it. If a module receives a capability
+from another module but does not call `ClaimCapability`, it may use it in the executing
+transaction but will not be able to access it afterwards.
+
+`AuthenticateCapability` can be called by any module to check that a capability
+does in fact correspond to a particular name (the name can be un-trusted user input)
+with which the calling module previously associated it.
+
+`GetCapability` allows a module to fetch a capability which it has previously
+claimed by name. The module is not allowed to retrieve capabilities which it does
+not own.
+
+### Stores
+
+- MemStore
+- KeyStore
+
+## State
+
+### Persisted KV store
+
+1. Global unique capability index
+2. Capability owners
+
+Indexes:
+
+- Unique index: `[]byte("index") -> []byte(currentGlobalIndex)`
+- Capability Index: `[]byte("capability_index") | []byte(index) -> ProtocolBuffer(CapabilityOwners)`
+
+### In-memory KV store
+
+1. Initialized flag
+2. Mapping between the module and capability tuple and the capability name
+3. Mapping between the module and capability name and its index
+
+Indexes:
+
+- Initialized flag: `[]byte("mem_initialized")`
+- RevCapabilityKey: `[]byte(moduleName + "/rev/" + capabilityName) -> []byte(index)`
+- FwdCapabilityKey: `[]byte(moduleName + "/fwd/" + capabilityPointerAddress) -> []byte(capabilityName)`
diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json
new file mode 100644
index 00000000000..066f3af93b1
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Using IBC-Go",
+ "position": 1,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md
new file mode 100644
index 00000000000..7e257d1e805
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md
@@ -0,0 +1,128 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /apps/transfer/overview
+---
+
+# Overview
+
+:::note Synopsis
+Learn about what the token Transfer module is
+:::
+
+## What is the Transfer module?
+
+Transfer is the Cosmos SDK implementation of the [ICS-20](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer) protocol, which enables cross-chain fungible token transfers.
+
+## Concepts
+
+### Acknowledgements
+
+ICS20 uses the recommended acknowledgement format as specified by [ICS 04](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope).
+
+A successful receive of a transfer packet will result in a Result Acknowledgement being written
+with the value `[]byte{byte(1)}` in the `Response` field.
+
+An unsuccessful receive of a transfer packet will result in an Error Acknowledgement being written
+with the error message in the `Response` field.
+
+### Denomination trace
+
+The denomination trace corresponds to the information that allows a token to be traced back to its
+origin chain. It contains a sequence of port and channel identifiers ordered from the most recent to
+the oldest in the timeline of transfers.
+
+This information is included on the token denomination field in the form of a hash to prevent an
+unbounded denomination length. For example, the token `transfer/channelToA/uatom` will be displayed
+as `ibc/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2`.
+
+Each send to any chain other than the one it was previously received from is a movement forwards in
+the token's timeline. This causes trace to be added to the token's history and the destination port
+and destination channel to be prefixed to the denomination. In these instances the sender chain is
+acting as the "source zone". When the token is sent back to the chain it previously received from, the
+prefix is removed. This is a backwards movement in the token's timeline and the sender chain is
+acting as the "sink zone".
+
+It is strongly recommended to read the full details of [ADR 001: Coin Source Tracing](/architecture/adr-001-coin-source-tracing) to understand the implications and context of the IBC token representations.
+
+## UX suggestions for clients
+
+For clients (wallets, exchanges, applications, block explorers, etc) that want to display the source of the token, it is recommended to use the following alternatives for each of the cases below:
+
+### Direct connection
+
+If the denomination trace contains a single identifier prefix pair (as in the example above), then
+the easiest way to retrieve the chain and light client identifier is to map the trace information
+directly. In summary, this requires querying the channel from the denomination trace identifiers,
+and then the counterparty client state using the counterparty port and channel identifiers from the
+retrieved channel.
+
+A general pseudo algorithm would look like the following:
+
+1. Query the full denomination trace.
+2. Query the channel with the `portID/channelID` pair, which corresponds to the first destination of the
+ token.
+3. Query the client state using the identifiers pair. Note that this query will return a `"Not
+Found"` response if the current chain is not connected to this channel.
+4. Retrieve the client identifier or chain identifier from the client state (eg: on
+ Tendermint clients) and store it locally.
+
+Using the gRPC gateway client service the steps above would be, with a given IBC token `ibc/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2` stored on `chainB`:
+
+1. `GET /ibc/apps/transfer/v1/denom_traces/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2` -> `{"path": "transfer/channelToA", "base_denom": "uatom"}`
+2. `GET /ibc/apps/transfer/v1/channels/channelToA/ports/transfer/client_state"` -> `{"client_id": "clientA", "chain-id": "chainA", ...}`
+3. `GET /ibc/apps/transfer/v1/channels/channelToA/ports/transfer"` -> `{"channel_id": "channelToA", port_id": "transfer", counterparty: {"channel_id": "channelToB", port_id": "transfer"}, ...}`
+4. `GET /ibc/apps/transfer/v1/channels/channelToB/ports/transfer/client_state" -> {"client_id": "clientB", "chain-id": "chainB", ...}`
+
+Then, the token transfer chain path for the `uatom` denomination would be: `chainA` -> `chainB`.
+
+### Multiple hops
+
+The multiple channel hops case applies when the token has passed through multiple chains between the original source and final destination chains.
+
+The IBC protocol doesn't know the topology of the overall network (i.e connections between chains and identifier names between them). For this reason, in the multiple hops case, a particular chain in the timeline of the individual transfers can't query the chain and client identifiers of the other chains.
+
+Take for example the following sequence of transfers `A -> B -> C` for an IBC token, with a final prefix path (trace info) of `transfer/channelChainC/transfer/channelChainB`. What the paragraph above means is that even in the case that chain `C` is directly connected to chain `A`, querying the port and channel identifiers that chain `B` uses to connect to chain `A` (eg: `transfer/channelChainA`) can be completely different from the one that chain `C` uses to connect to chain `A` (eg: `transfer/channelToChainA`).
+
+Thus the proposed solution for clients that the IBC team recommends are the following:
+
+- **Connect to all chains**: Connecting to all the chains in the timeline would allow clients to
+ perform the queries outlined in the [direct connection](#direct-connection) section to each
+ relevant chain. By repeatedly following the port and channel denomination trace transfer timeline,
+ clients should always be able to find all the relevant identifiers. This comes at the tradeoff
+ that the client must connect to nodes on each of the chains in order to perform the queries.
+- **Relayer as a Service (RaaS)**: A longer term solution is to use/create a relayer service that
+ could map the denomination trace to the chain path timeline for each token (i.e `origin chain ->
+chain #1 -> ... -> chain #(n-1) -> final chain`). These services could provide merkle proofs in
+ order to allow clients to optionally verify the path timeline correctness for themselves by
+ running light clients. If the proofs are not verified, they should be considered as trusted third
+ parties services. Additionally, client would be advised in the future to use RaaS that support the
+ largest number of connections between chains in the ecosystem. Unfortunately, none of the existing
+ public relayers (in [Golang](https://github.com/cosmos/relayer) and
+ [Rust](https://github.com/informalsystems/ibc-rs)), provide this service to clients.
+
+:::tip
+The only viable alternative for clients (at the time of writing) to tokens with multiple connection hops, is to connect to all chains directly and perform relevant queries to each of them in the sequence.
+:::
+
+## Locked funds
+
+In some [exceptional cases](/architecture/adr-026-ibc-client-recovery-mechanisms#exceptional-cases), a client state associated with a given channel cannot be updated. This causes that funds from fungible tokens in that channel will be permanently locked and thus can no longer be transferred.
+
+To mitigate this, a client update governance proposal can be submitted to update the frozen client
+with a new valid header. Once the proposal passes the client state will be unfrozen and the funds
+from the associated channels will then be unlocked. This mechanism only applies to clients that
+allow updates via governance, such as Tendermint clients.
+
+In addition to this, it's important to mention that a token must be sent back along the exact route
+that it took originally in order to return it to its original form on the source chain (eg: the
+Cosmos Hub for the `uatom`). Sending a token back to the same chain across a different channel will
+**not** move the token back across its timeline. If a channel in the chain history closes before the
+token can be sent back across that channel, then the token will not be returnable to its original
+form.
+
+## Security considerations
+
+For safety, no other module must be capable of minting tokens with the `ibc/` prefix. The IBC
+transfer module needs a subset of the denomination space that only it can create tokens in.
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md
new file mode 100644
index 00000000000..916e99b46c3
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md
@@ -0,0 +1,13 @@
+---
+title: State
+sidebar_label: State
+sidebar_position: 2
+slug: /apps/transfer/state
+---
+
+# State
+
+The IBC transfer application module keeps state of the port to which the module is binded and the denomination trace information as outlined in [ADR 001](/architecture/adr-001-coin-source-tracing).
+
+- `Port`: `0x01 -> ProtocolBuffer(string)`
+- `DenomTrace`: `0x02 | []bytes(traceHash) -> ProtocolBuffer(DenomTrace)`
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md
new file mode 100644
index 00000000000..7c73b8da21c
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md
@@ -0,0 +1,37 @@
+---
+title: State Transitions
+sidebar_label: State Transitions
+sidebar_position: 3
+slug: /apps/transfer/state-transitions
+---
+
+# State transitions
+
+## Send fungible tokens
+
+A successful fungible token send has two state transitions depending if the transfer is a movement forward or backwards in the token's timeline:
+
+1. Sender chain is the source chain, *i.e* a transfer to any chain other than the one it was previously received from is a movement forwards in the token's timeline. This results in the following state transitions:
+
+ - The coins are transferred to an escrow address (i.e locked) on the sender chain.
+ - The coins are transferred to the receiving chain through IBC TAO logic.
+
+2. Sender chain is the sink chain, *i.e* the token is sent back to the chain it previously received from. This is a backwards movement in the token's timeline. This results in the following state transitions:
+
+ - The coins (vouchers) are burned on the sender chain.
+ - The coins are transferred to the receiving chain through IBC TAO logic.
+
+## Receive fungible tokens
+
+A successful fungible token receive has two state transitions depending if the transfer is a movement forward or backwards in the token's timeline:
+
+1. Receiver chain is the source chain. This is a backwards movement in the token's timeline. This results in the following state transitions:
+
+ - The leftmost port and channel identifier pair is removed from the token denomination prefix.
+ - The tokens are unescrowed and sent to the receiving address.
+
+2. Receiver chain is the sink chain. This is a movement forwards in the token's timeline. This results in the following state transitions:
+
+ - Token vouchers are minted by prefixing the destination port and channel identifiers to the trace information.
+ - The receiving chain stores the new trace information in the store (if not set already).
+ - The vouchers are sent to the receiving address.
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md
new file mode 100644
index 00000000000..483384a09fe
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md
@@ -0,0 +1,58 @@
+---
+title: Messages
+sidebar_label: Messages
+sidebar_position: 4
+slug: /apps/transfer/messages
+---
+
+# Messages
+
+## `MsgTransfer`
+
+A fungible token cross chain transfer is achieved by using the `MsgTransfer`:
+
+```go
+type MsgTransfer struct {
+ SourcePort string
+ SourceChannel string
+ Token sdk.Coin
+ Sender string
+ Receiver string
+ TimeoutHeight ibcexported.Height
+ TimeoutTimestamp uint64
+ Memo string
+}
+```
+
+This message is expected to fail if:
+
+- `SourcePort` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators).
+- `SourceChannel` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)).
+- `Token` is invalid (denom is invalid or amount is negative)
+ - `Token.Amount` is not positive.
+ - `Token.Denom` is not a valid IBC denomination as per [ADR 001 - Coin Source Tracing](/architecture/adr-001-coin-source-tracing).
+- `Sender` is empty.
+- `Receiver` is empty.
+- `TimeoutHeight` and `TimeoutTimestamp` are both zero.
+
+This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`.
+
+The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain.
+
+### Memo
+
+The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys.
+
+For example, the following memo field is used by the [callbacks middleware](../../04-middleware/02-callbacks/01-overview.md) to attach a source callback to a transfer packet:
+
+```jsonc
+{
+ "src_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ }
+}
+```
+
+You can find more information about other applications that use the memo field in the [chain registry](https://github.com/cosmos/chain-registry/blob/master/_memo_keys/ICS20_memo_keys.json).
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md
new file mode 100644
index 00000000000..888b26a959a
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md
@@ -0,0 +1,54 @@
+---
+title: Events
+sidebar_label: Events
+sidebar_position: 5
+slug: /apps/transfer/events
+---
+
+
+# Events
+
+## `MsgTransfer`
+
+| Type | Attribute Key | Attribute Value |
+|--------------|---------------|-----------------|
+| ibc_transfer | sender | {sender} |
+| ibc_transfer | receiver | {receiver} |
+| message | action | transfer |
+| message | module | transfer |
+
+## `OnRecvPacket` callback
+
+| Type | Attribute Key | Attribute Value |
+|-----------------------|---------------|-----------------|
+| fungible_token_packet | module | transfer |
+| fungible_token_packet | sender | {sender} |
+| fungible_token_packet | receiver | {receiver} |
+| fungible_token_packet | denom | {denom} |
+| fungible_token_packet | amount | {amount} |
+| fungible_token_packet | success | {ackSuccess} |
+| fungible_token_packet | memo | {memo} |
+| denomination_trace | trace_hash | {hex_hash} |
+
+## `OnAcknowledgePacket` callback
+
+| Type | Attribute Key | Attribute Value |
+|-----------------------|-----------------|-------------------|
+| fungible_token_packet | module | transfer |
+| fungible_token_packet | sender | {sender} |
+| fungible_token_packet | receiver | {receiver} |
+| fungible_token_packet | denom | {denom} |
+| fungible_token_packet | amount | {amount} |
+| fungible_token_packet | memo | {memo} |
+| fungible_token_packet | acknowledgement | {ack.String()} |
+| fungible_token_packet | success | error | {ack.Response} |
+
+## `OnTimeoutPacket` callback
+
+| Type | Attribute Key | Attribute Value |
+|-----------------------|-----------------|-----------------|
+| fungible_token_packet | module | transfer |
+| fungible_token_packet | refund_receiver | {receiver} |
+| fungible_token_packet | denom | {denom} |
+| fungible_token_packet | amount | {amount} |
+| fungible_token_packet | memo | {memo} |
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md
new file mode 100644
index 00000000000..104e5b4d3bc
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md
@@ -0,0 +1,18 @@
+---
+title: Metrics
+sidebar_label: Metrics
+sidebar_position: 6
+slug: /apps/transfer/metrics
+---
+
+
+# Metrics
+
+The IBC transfer application module exposes the following set of [metrics](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/09-telemetry.md).
+
+| Metric | Description | Unit | Type |
+|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------|
+| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge |
+| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge |
+| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter |
+| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter |
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md
new file mode 100644
index 00000000000..635344edea4
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md
@@ -0,0 +1,94 @@
+---
+title: Params
+sidebar_label: Params
+sidebar_position: 7
+slug: /apps/transfer/params
+---
+
+
+# Parameters
+
+The IBC transfer application module contains the following parameters:
+
+| Name | Type | Default Value |
+| ---------------- | ---- | ------------- |
+| `SendEnabled` | bool | `true` |
+| `ReceiveEnabled` | bool | `true` |
+
+The IBC transfer module stores its parameters in its keeper with the prefix of `0x03`.
+
+## `SendEnabled`
+
+The `SendEnabled` parameter controls send cross-chain transfer capabilities for all fungible tokens.
+
+To prevent a single token from being transferred from the chain, set the `SendEnabled` parameter to `true` and then, depending on the Cosmos SDK version, do one of the following:
+
+- For Cosmos SDK v0.46.x or earlier, set the bank module's [`SendEnabled` parameter](https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/bank/spec/05_params.md#sendenabled) for the denomination to `false`.
+- For Cosmos SDK versions above v0.46.x, set the bank module's `SendEnabled` entry for the denomination to `false` using `MsgSetSendEnabled` as a governance proposal.
+
+::: warning
+Doing so will prevent the token from being transferred between any accounts in the blockchain.
+:::
+
+## `ReceiveEnabled`
+
+The transfers enabled parameter controls receive cross-chain transfer capabilities for all fungible tokens.
+
+To prevent a single token from being transferred to the chain, set the `ReceiveEnabled` parameter to `true` and then, depending on the Cosmos SDK version, do one of the following:
+
+- For Cosmos SDK v0.46.x or earlier, set the bank module's [`SendEnabled` parameter](https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/bank/spec/05_params.md#sendenabled) for the denomination to `false`.
+- For Cosmos SDK versions above v0.46.x, set the bank module's `SendEnabled` entry for the denomination to `false` using `MsgSetSendEnabled` as a governance proposal.
+
+::: warning
+Doing so will prevent the token from being transferred between any accounts in the blockchain.
+:::
+
+## Queries
+
+Current parameter values can be queried via a query message.
+
+
+
+```protobuf
+// proto/ibc/applications/transfer/v1/query.proto
+
+// QueryParamsRequest is the request type for the Query/Params RPC method.
+message QueryParamsRequest {}
+
+// QueryParamsResponse is the response type for the Query/Params RPC method.
+message QueryParamsResponse {
+ // params defines the parameters of the module.
+ Params params = 1;
+}
+```
+
+To execute the query in `simd`, you use the following command:
+
+```bash
+simd query ibc-transfer params
+```
+
+## Changing Parameters
+
+To change the parameter values, you must make a governance proposal that executes the `MsgUpdateParams` message.
+
+
+
+```protobuf
+// proto/ibc/applications/transfer/v1/tx.proto
+
+// MsgUpdateParams is the Msg/UpdateParams request type.
+message MsgUpdateParams {
+ // signer address (it may be the address that controls the module, which defaults to x/gov unless overwritten).
+ string signer = 1;
+
+ // params defines the transfer parameters to update.
+ //
+ // NOTE: All parameters must be supplied.
+ Params params = 2 [(gogoproto.nullable) = false];
+}
+
+// MsgUpdateParamsResponse defines the response structure for executing a
+// MsgUpdateParams message.
+message MsgUpdateParamsResponse {}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md
new file mode 100644
index 00000000000..bd7a5b9269c
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md
@@ -0,0 +1,53 @@
+---
+title: Authorizations
+sidebar_label: Authorizations
+sidebar_position: 8
+slug: /apps/transfer/authorizations
+---
+# `TransferAuthorization`
+
+`TransferAuthorization` implements the `Authorization` interface for `ibc.applications.transfer.v1.MsgTransfer`. It allows a granter to grant a grantee the privilege to submit `MsgTransfer` on its behalf. Please see the [Cosmos SDK docs](https://docs.cosmos.network/v0.47/modules/authz) for more details on granting privileges via the `x/authz` module.
+
+More specifically, the granter allows the grantee to transfer funds that belong to the granter over a specified channel.
+
+For the specified channel, the granter must be able to specify a spend limit of a specific denomination they wish to allow the grantee to be able to transfer.
+
+The granter may be able to specify the list of addresses that they allow to receive funds. If empty, then all addresses are allowed.
+
+It takes:
+
+- a `SourcePort` and a `SourceChannel` which together comprise the unique transfer channel identifier over which authorized funds can be transferred.
+
+- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transferred, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes.
+
+- an `AllowList` list that specifies the list of addresses that are allowed to receive funds. If this list is empty, then all addresses are allowed to receive funds from the `TransferAuthorization`.
+
+Setting a `TransferAuthorization` is expected to fail if:
+
+- the spend limit is nil
+- the denomination of the spend limit is an invalid coin type
+- the source port ID is invalid
+- the source channel ID is invalid
+- there are duplicate entries in the `AllowList`
+
+Below is the `TransferAuthorization` message:
+
+```go
+func NewTransferAuthorization(allocations ...Allocation) *TransferAuthorization {
+ return &TransferAuthorization{
+ Allocations: allocations,
+ }
+}
+
+type Allocation struct {
+ // the port on which the packet will be sent
+ SourcePort string
+ // the channel by which the packet will be sent
+ SourceChannel string
+ // spend limitation on the channel
+ SpendLimit sdk.Coins
+ // allow list of receivers, an empty allow list permits any receiver address
+ AllowList []string
+}
+
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md
new file mode 100644
index 00000000000..64ec2bd6ad1
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md
@@ -0,0 +1,69 @@
+---
+title: Client
+sidebar_label: Client
+sidebar_position: 9
+slug: /apps/transfer/client
+---
+
+# Client
+
+## CLI
+
+A user can query and interact with the `transfer` module using the CLI. Use the `--help` flag to discover the available commands:
+
+### Query
+
+The `query` commands allow users to query `transfer` state.
+
+```shell
+simd query ibc-transfer --help
+```
+
+#### `total-escrow`
+
+The `total-escrow` command allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out.
+
+```shell
+simd query ibc-transfer total-escrow [denom] [flags]
+```
+
+Example:
+
+```shell
+simd query ibc-transfer total-escrow samoleans
+```
+
+Example Output:
+
+```shell
+amount: "100"
+```
+
+## gRPC
+
+A user can query the `transfer` module using gRPC endpoints.
+
+### `TotalEscrowForDenom`
+
+The `TotalEscrowForDenom` endpoint allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out.
+
+```shell
+ibc.applications.transfer.v1.Query/TotalEscrowForDenom
+```
+
+Example:
+
+```shell
+grpcurl -plaintext \
+ -d '{"denom":"samoleans"}' \
+ localhost:9090 \
+ ibc.applications.transfer.v1.Query/TotalEscrowForDenom
+```
+
+Example output:
+
+```shell
+{
+ "amount": "100"
+}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json
new file mode 100644
index 00000000000..d643a498cdf
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Transfer",
+ "position": 1,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md
new file mode 100644
index 00000000000..e8edada979f
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md
@@ -0,0 +1,39 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /apps/interchain-accounts/overview
+---
+
+
+# Overview
+
+:::note Synopsis
+Learn about what the Interchain Accounts module is
+:::
+
+## What is the Interchain Accounts module?
+
+Interchain Accounts is the Cosmos SDK implementation of the ICS-27 protocol, which enables cross-chain account management built upon IBC.
+
+- How does an interchain account differ from a regular account?
+
+Regular accounts use a private key to sign transactions. Interchain Accounts are instead controlled programmatically by counterparty chains via IBC packets.
+
+## Concepts
+
+`Host Chain`: The chain where the interchain account is registered. The host chain listens for IBC packets from a controller chain which should contain instructions (e.g. Cosmos SDK messages) for which the interchain account will execute.
+
+`Controller Chain`: The chain registering and controlling an account on a host chain. The controller chain sends IBC packets to the host chain to control the account.
+
+`Interchain Account`: An account on a host chain created using the ICS-27 protocol. An interchain account has all the capabilities of a normal account. However, rather than signing transactions with a private key, a controller chain will send IBC packets to the host chain which signals what transactions the interchain account should execute.
+
+`Authentication Module`: A custom application module on the controller chain that uses the Interchain Accounts module to build custom logic for the creation & management of interchain accounts. It can be either an IBC application module using the [legacy API](10-legacy/03-keeper-api.md), or a regular Cosmos SDK application module sending messages to the controller submodule's `MsgServer` (this is the recommended approach from ibc-go v6 if access to packet callbacks is not needed). Please note that the legacy API will eventually be removed and IBC applications will not be able to use them in later releases.
+
+## SDK security model
+
+SDK modules on a chain are assumed to be trustworthy. For example, there are no checks to prevent an untrustworthy module from accessing the bank keeper.
+
+The implementation of ICS-27 in ibc-go uses this assumption in its security considerations.
+
+The implementation assumes other IBC application modules will not bind to ports within the ICS-27 namespace.
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md
new file mode 100644
index 00000000000..720527b4693
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md
@@ -0,0 +1,40 @@
+---
+title: Development Use Cases
+sidebar_label: Development Use Cases
+sidebar_position: 2
+slug: /apps/interchain-accounts/development
+---
+
+
+# Development use cases
+
+The initial version of Interchain Accounts allowed for the controller submodule to be extended by providing it with an underlying application which would handle all packet callbacks.
+That functionality is now being deprecated in favor of alternative approaches.
+This document will outline potential use cases and redirect each use case to the appropriate documentation.
+
+## Custom authentication
+
+Interchain accounts may be associated with alternative types of authentication relative to the traditional public/private key signing.
+If you wish to develop or use Interchain Accounts with a custom authentication module and do not need to execute custom logic on the packet callbacks, we recommend you use ibc-go v6 or greater and that your custom authentication module interacts with the controller submodule via the [`MsgServer`](05-messages.md).
+
+If you wish to consume and execute custom logic in the packet callbacks, then please read the section [Packet callbacks](#packet-callbacks) below.
+
+## Redirection to a smart contract
+
+It may be desirable to allow smart contracts to control an interchain account.
+To facilitate such an action, the controller submodule may be provided an underlying application which redirects to smart contract callers.
+An improved design has been suggested in [ADR 008](https://github.com/cosmos/ibc-go/pull/1976) which performs this action via middleware.
+
+Implementors of this use case are recommended to follow the ADR 008 approach.
+The underlying application may continue to be used as a short term solution for ADR 008 and the [legacy API](03-auth-modules.md#registerinterchainaccount) should continue to be utilized in such situations.
+
+## Packet callbacks
+
+If a developer requires access to packet callbacks for their use case, then they have the following options:
+
+1. Write a smart contract which is connected via an ADR 008 or equivalent IBC application (recommended).
+2. Use the controller's underlying application to implement packet callback logic.
+
+In the first case, the smart contract should use the [`MsgServer`](05-messages.md).
+
+In the second case, the underlying application should use the [legacy API](10-legacy/03-keeper-api.md).
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md
new file mode 100644
index 00000000000..31231952208
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md
@@ -0,0 +1,27 @@
+---
+title: Authentication Modules
+sidebar_label: Authentication Modules
+sidebar_position: 3
+slug: /apps/interchain-accounts/auth-modules
+---
+
+
+# Building an authentication module
+
+:::note Synopsis
+Authentication modules enable application developers to perform custom logic when interacting with the Interchain Accounts controller sumbmodule's `MsgServer`.
+:::
+
+The controller submodule is used for account registration and packet sending. It executes only logic required of all controllers of interchain accounts. The type of authentication used to manage the interchain accounts remains unspecified. There may exist many different types of authentication which are desirable for different use cases. Thus the purpose of the authentication module is to wrap the controller submodule with custom authentication logic.
+
+In ibc-go, authentication modules can communicate with the controller submodule by passing messages through `baseapp`'s `MsgServiceRouter`. To implement an authentication module, the `IBCModule` interface need not be fulfilled; it is only required to fulfill Cosmos SDK's `AppModuleBasic` interface, just like any regular Cosmos SDK application module.
+
+The authentication module must:
+
+- Authenticate interchain account owners.
+- Track the associated interchain account address for an owner.
+- Send packets on behalf of an owner (after authentication).
+
+## Integration into `app.go` file
+
+To integrate the authentication module into your chain, please follow the steps outlined in [`app.go` integration](04-integration.md#example-integration).
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md
new file mode 100644
index 00000000000..974e7f978df
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md
@@ -0,0 +1,199 @@
+---
+title: Integration
+sidebar_label: Integration
+sidebar_position: 4
+slug: /apps/interchain-accounts/integration
+---
+
+
+# Integration
+
+:::note Synopsis
+Learn how to integrate Interchain Accounts host and controller functionality to your chain. The following document only applies for Cosmos SDK chains.
+:::
+
+The Interchain Accounts module contains two submodules. Each submodule has its own IBC application. The Interchain Accounts module should be registered as an `AppModule` in the same way all SDK modules are registered on a chain, but each submodule should create its own `IBCModule` as necessary. A route should be added to the IBC router for each submodule which will be used.
+
+Chains who wish to support ICS-27 may elect to act as a host chain, a controller chain or both. Disabling host or controller functionality may be done statically by excluding the host or controller submodule entirely from the `app.go` file or it may be done dynamically by taking advantage of the on-chain parameters which enable or disable the host or controller submodules.
+
+Interchain Account authentication modules (both custom or generic, such as the `x/gov`, `x/group` or `x/auth` Cosmos SDK modules) can send messages to the controller submodule's [`MsgServer`](05-messages.md) to register interchain accounts and send packets to the interchain account. To accomplish this, the authentication module needs to be composed with `baseapp`'s `MsgServiceRouter`.
+
+![ica-v6.png](./images/ica-v6.png)
+
+## Example integration
+
+```go
+// app.go
+
+// Register the AppModule for the Interchain Accounts module and the authentication module
+// Note: No `icaauth` exists, this must be substituted with an actual Interchain Accounts authentication module
+ModuleBasics = module.NewBasicManager(
+ ...
+ ica.AppModuleBasic{},
+ icaauth.AppModuleBasic{},
+ ...
+)
+
+...
+
+// Add module account permissions for the Interchain Accounts module
+// Only necessary for host chain functionality
+// Each Interchain Account created on the host chain is derived from the module account created
+maccPerms = map[string][]string{
+ ...
+ icatypes.ModuleName: nil,
+}
+
+...
+
+// Add Interchain Accounts Keepers for each submodule used and the authentication module
+// If a submodule is being statically disabled, the associated Keeper does not need to be added.
+type App struct {
+ ...
+
+ ICAControllerKeeper icacontrollerkeeper.Keeper
+ ICAHostKeeper icahostkeeper.Keeper
+ ICAAuthKeeper icaauthkeeper.Keeper
+
+ ...
+}
+
+...
+
+// Create store keys for each submodule Keeper and the authentication module
+keys := sdk.NewKVStoreKeys(
+ ...
+ icacontrollertypes.StoreKey,
+ icahosttypes.StoreKey,
+ icaauthtypes.StoreKey,
+ ...
+)
+
+...
+
+// Create the scoped keepers for each submodule keeper and authentication keeper
+scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName)
+scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName)
+scopedICAAuthKeeper := app.CapabilityKeeper.ScopeToModule(icaauthtypes.ModuleName)
+
+...
+
+// Create the Keeper for each submodule
+app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper(
+ appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName),
+ app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ scopedICAControllerKeeper, app.MsgServiceRouter(),
+)
+app.ICAHostKeeper = icahostkeeper.NewKeeper(
+ appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName),
+ app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(),
+)
+
+// Create Interchain Accounts AppModule
+icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper)
+
+// Create your Interchain Accounts authentication module
+app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.MsgServiceRouter())
+
+// ICA auth AppModule
+icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper)
+
+// Create controller IBC application stack and host IBC module as desired
+icaControllerStack := icacontroller.NewIBCMiddleware(nil, app.ICAControllerKeeper)
+icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper)
+
+// Register host and authentication routes
+ibcRouter.
+ AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
+ AddRoute(icahosttypes.SubModuleName, icaHostIBCModule)
+...
+
+// Register Interchain Accounts and authentication module AppModule's
+app.moduleManager = module.NewManager(
+ ...
+ icaModule,
+ icaAuthModule,
+)
+
+...
+
+// Add Interchain Accounts to begin blocker logic
+app.moduleManager.SetOrderBeginBlockers(
+ ...
+ icatypes.ModuleName,
+ ...
+)
+
+// Add Interchain Accounts to end blocker logic
+app.moduleManager.SetOrderEndBlockers(
+ ...
+ icatypes.ModuleName,
+ ...
+)
+
+// Add Interchain Accounts module InitGenesis logic
+app.moduleManager.SetOrderInitGenesis(
+ ...
+ icatypes.ModuleName,
+ ...
+)
+
+// initParamsKeeper init params keeper and its subspaces
+func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper {
+ ...
+ paramsKeeper.Subspace(icahosttypes.SubModuleName)
+ paramsKeeper.Subspace(icacontrollertypes.SubModuleName)
+ ...
+}
+```
+
+If no custom athentication module is needed and a generic Cosmos SDK authentication module can be used, then from the sample integration code above all references to `ICAAuthKeeper` and `icaAuthModule` can be removed. That's it, the following code would not be needed:
+
+```go
+// Create your Interchain Accounts authentication module
+app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.MsgServiceRouter())
+
+// ICA auth AppModule
+icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper)
+```
+
+### Using submodules exclusively
+
+As described above, the Interchain Accounts application module is structured to support the ability of exclusively enabling controller or host functionality.
+This can be achieved by simply omitting either controller or host `Keeper` from the Interchain Accounts `NewAppModule` constructor function, and mounting only the desired submodule via the `IBCRouter`.
+Alternatively, submodules can be enabled and disabled dynamically using [on-chain parameters](06-parameters.md).
+
+The following snippets show basic examples of statically disabling submodules using `app.go`.
+
+#### Disabling controller chain functionality
+
+```go
+// Create Interchain Accounts AppModule omitting the controller keeper
+icaModule := ica.NewAppModule(nil, &app.ICAHostKeeper)
+
+// Create host IBC Module
+icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper)
+
+// Register host route
+ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule)
+```
+
+#### Disabling host chain functionality
+
+```go
+// Create Interchain Accounts AppModule omitting the host keeper
+icaModule := ica.NewAppModule(&app.ICAControllerKeeper, nil)
+
+
+// Optionally instantiate your custom authentication module if needed, or not otherwise
+...
+
+// Create controller IBC application stack
+icaControllerStack := icacontroller.NewIBCMiddleware(nil, app.ICAControllerKeeper)
+
+// Register controller route
+ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack)
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md
new file mode 100644
index 00000000000..119c740e03e
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md
@@ -0,0 +1,78 @@
+---
+title: Messages
+sidebar_label: Messages
+sidebar_position: 5
+slug: /apps/interchain-accounts/messages
+---
+
+
+# Messages
+
+## `MsgRegisterInterchainAccount`
+
+An Interchain Accounts channel handshake can be initated using `MsgRegisterInterchainAccount`:
+
+```go
+type MsgRegisterInterchainAccount struct {
+ Owner string
+ ConnectionID string
+ Version string
+}
+```
+
+This message is expected to fail if:
+
+- `Owner` is an empty string.
+- `ConnectionID` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)).
+
+This message will construct a new `MsgChannelOpenInit` on chain and route it to the core IBC message server to initiate the opening step of the channel handshake.
+
+The controller submodule will generate a new port identifier and claim the associated port capability. The caller is expected to provide an appropriate application version string. For example, this may be an ICS-27 JSON encoded [`Metadata`](https://github.com/cosmos/ibc-go/blob/v6.0.0/proto/ibc/applications/interchain_accounts/v1/metadata.proto#L11) type or an ICS-29 JSON encoded [`Metadata`](https://github.com/cosmos/ibc-go/blob/v6.0.0/proto/ibc/applications/fee/v1/metadata.proto#L11) type with a nested application version.
+If the `Version` string is omitted, the controller submodule will construct a default version string in the `OnChanOpenInit` handshake callback.
+
+```go
+type MsgRegisterInterchainAccountResponse struct {
+ ChannelID string
+ PortId string
+}
+```
+
+The `ChannelID` and `PortID` are returned in the message response.
+
+## `MsgSendTx`
+
+An Interchain Accounts transaction can be executed on a remote host chain by sending a `MsgSendTx` from the corresponding controller chain:
+
+```go
+type MsgSendTx struct {
+ Owner string
+ ConnectionID string
+ PacketData InterchainAccountPacketData
+ RelativeTimeout uint64
+}
+```
+
+This message is expected to fail if:
+
+- `Owner` is an empty string.
+- `ConnectionID` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)).
+- `PacketData` contains an `UNSPECIFIED` type enum, the length of `Data` bytes is zero or the `Memo` field exceeds 256 characters in length.
+- `RelativeTimeout` is zero.
+
+This message will create a new IBC packet with the provided `PacketData` and send it via the channel associated with the `Owner` and `ConnectionID`.
+The `PacketData` is expected to contain a list of serialized `[]sdk.Msg` in the form of `CosmosTx`. Please note the signer field of each `sdk.Msg` must be the interchain account address.
+When the packet is relayed to the host chain, the `PacketData` is unmarshalled and the messages are authenticated and executed.
+
+```go
+type MsgSendTxResponse struct {
+ Sequence uint64
+}
+```
+
+The packet `Sequence` is returned in the message response.
+
+## Atomicity
+
+As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/learn/advanced/store#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/learn/advanced/context.html) type.
+
+This provides atomic execution of transactions when using Interchain Accounts, where state changes are only committed if all `Msg`s succeed.
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md
new file mode 100644
index 00000000000..5ab4fdd8478
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md
@@ -0,0 +1,65 @@
+---
+title: Parameters
+sidebar_label: Parameters
+sidebar_position: 6
+slug: /apps/interchain-accounts/parameters
+---
+
+
+# Parameters
+
+The Interchain Accounts module contains the following on-chain parameters, logically separated for each distinct submodule:
+
+## Controller Submodule Parameters
+
+| Name | Type | Default Value |
+|------------------------|------|---------------|
+| `ControllerEnabled` | bool | `true` |
+
+### ControllerEnabled
+
+The `ControllerEnabled` parameter controls a chains ability to service ICS-27 controller specific logic. This includes the sending of Interchain Accounts packet data as well as the following ICS-26 callback handlers:
+
+- `OnChanOpenInit`
+- `OnChanOpenAck`
+- `OnChanCloseConfirm`
+- `OnAcknowledgementPacket`
+- `OnTimeoutPacket`
+
+## Host Submodule Parameters
+
+| Name | Type | Default Value |
+|------------------------|----------|---------------|
+| `HostEnabled` | bool | `true` |
+| `AllowMessages` | []string | `["*"]` |
+
+### HostEnabled
+
+The `HostEnabled` parameter controls a chains ability to service ICS-27 host specific logic. This includes the following ICS-26 callback handlers:
+
+- `OnChanOpenTry`
+- `OnChanOpenConfirm`
+- `OnChanCloseConfirm`
+- `OnRecvPacket`
+
+### AllowMessages
+
+The `AllowMessages` parameter provides the ability for a chain to limit the types of messages or transactions that hosted interchain accounts are authorized to execute by defining an allowlist using the Protobuf message type URL format.
+
+For example, a Cosmos SDK-based chain that elects to provide hosted Interchain Accounts with the ability of governance voting and staking delegations will define its parameters as follows:
+
+```json
+"params": {
+ "host_enabled": true,
+ "allow_messages": ["/cosmos.staking.v1beta1.MsgDelegate", "/cosmos.gov.v1beta1.MsgVote"]
+}
+```
+
+There is also a special wildcard `"*"` value which allows any type of message to be executed by the interchain account. This must be the only value in the `allow_messages` array.
+
+```json
+"params": {
+ "host_enabled": true,
+ "allow_messages": ["*"]
+}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md
new file mode 100644
index 00000000000..5be03af2f8e
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md
@@ -0,0 +1,58 @@
+---
+title: Transaction Encoding
+sidebar_label: Transaction Encoding
+sidebar_position: 7
+slug: /apps/interchain-accounts/tx-encoding
+---
+
+# Transaction Encoding
+
+When orchestrating an interchain account transaction, which comprises multiple `sdk.Msg` objects represented as `Any` types, the transactions must be encoded as bytes within [`InterchainAccountPacketData`](https://github.com/cosmos/ibc-go/blob/v7.2.0/proto/ibc/applications/interchain_accounts/v1/packet.proto#L21-L26).
+
+```protobuf
+// InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.
+message InterchainAccountPacketData {
+ Type type = 1;
+ bytes data = 2;
+ string memo = 3;
+}
+```
+
+The `data` field must be encoded as a [`CosmosTx`](https://github.com/cosmos/ibc-go/blob/v7.2.0/proto/ibc/applications/interchain_accounts/v1/packet.proto#L28-L31).
+
+```protobuf
+// CosmosTx contains a list of sdk.Msg's. It should be used when sending transactions to an SDK host chain.
+message CosmosTx {
+ repeated google.protobuf.Any messages = 1;
+}
+```
+
+The encoding method for `CosmosTx` is determined during the channel handshake process. If the channel version [metadata's `encoding` field](https://github.com/cosmos/ibc-go/blob/v7.2.0/proto/ibc/applications/interchain_accounts/v1/metadata.proto#L22) is marked as `proto3`, then `CosmosTx` undergoes protobuf encoding. Conversely, if the field is set to `proto3json`, then [proto3 json](https://protobuf.dev/programming-guides/proto3/#json) encoding takes place, which generates a JSON representation of the protobuf message.
+
+## Protobuf Encoding
+
+Protobuf encoding serves as the standard encoding process for `CosmosTx`. This occurs if the channel handshake initiates with an empty channel version metadata or if the `encoding` field explicitly denotes `proto3`. In Golang, the protobuf encoding procedure utilizes the `proto.Marshal` function. Every protobuf autogenerated Golang type comes equipped with a `Marshal` method that can be employed to encode the message.
+
+## (Protobuf) JSON Encoding
+
+The proto3 JSON encoding presents an alternative encoding technique for `CosmosTx`. It is selected if the channel handshake begins with the channel version metadata `encoding` field labeled as `proto3json`. In Golang, the Proto3 canonical encoding in JSON is implemented by the `"github.com/cosmos/gogoproto/jsonpb"` package. Within Cosmos SDK, the `ProtoCodec` structure implements the `JSONCodec` interface, leveraging the `jsonpb` package. This method generates a JSON format as follows:
+
+```json
+{
+ "messages": [
+ {
+ "@type": "/cosmos.bank.v1beta1.MsgSend",
+ "from_address": "cosmos1...",
+ "to_address": "cosmos1...",
+ "amount": [
+ {
+ "denom": "uatom",
+ "amount": "1000000"
+ }
+ ]
+ }
+ ]
+}
+```
+
+Here, the `"messages"` array is populated with transactions. Each transaction is represented as a JSON object with the `@type` field denoting the transaction type and the remaining fields representing the transaction's attributes.
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md
new file mode 100644
index 00000000000..c7c50d09d82
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md
@@ -0,0 +1,183 @@
+---
+title: Client
+sidebar_label: Client
+sidebar_position: 8
+slug: /apps/interchain-accounts/client
+---
+
+# Client
+
+## CLI
+
+A user can query and interact with the Interchain Accounts module using the CLI. Use the `--help` flag to discover the available commands:
+
+```shell
+simd query interchain-accounts --help
+```
+
+> Please not that this section does not document all the available commands, but only the ones that deserved extra documentation that was not possible to fit in the command line documentation.
+
+### Controller
+
+A user can query and interact with the controller submodule.
+
+#### Query
+
+The `query` commands allow users to query the controller submodule.
+
+```shell
+simd query interchain-accounts controller --help
+```
+
+#### Transactions
+
+The `tx` commands allow users to interact with the controller submodule.
+
+```shell
+simd tx interchain-accounts controller --help
+```
+
+#### `send-tx`
+
+The `send-tx` command allows users to send a transaction on the provided connection to be executed using an interchain account on the host chain.
+
+```shell
+simd tx interchain-accounts controller send-tx [connection-id] [path/to/packet_msg.json]
+```
+
+Example:
+
+```shell
+simd tx interchain-accounts controller send-tx connection-0 packet-data.json --from cosmos1..
+```
+
+See below for example contents of `packet-data.json`. The CLI handler will unmarshal the following into `InterchainAccountPacketData` appropriately.
+
+```json
+{
+ "type":"TYPE_EXECUTE_TX",
+ "data":"CqIBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEoEBCkFjb3Ntb3MxNWNjc2hobXAwZ3N4MjlxcHFxNmc0em1sdG5udmdteXU5dWV1YWRoOXkybmM1emowc3psczVndGRkehItY29zbW9zMTBoOXN0YzV2Nm50Z2V5Z2Y1eGY5NDVuanFxNWgzMnI1M3VxdXZ3Gg0KBXN0YWtlEgQxMDAw",
+ "memo":""
+}
+```
+
+Note the `data` field is a base64 encoded byte string as per the tx encoding agreed upon during the channel handshake.
+
+A helper CLI is provided in the host submodule which can be used to generate the packet data JSON using the counterparty chain's binary. See the [`generate-packet-data` command](#generate-packet-data) for an example.
+
+### Host
+
+A user can query and interact with the host submodule.
+
+#### Query
+
+The `query` commands allow users to query the host submodule.
+
+```shell
+simd query interchain-accounts host --help
+```
+
+#### Transactions
+
+The `tx` commands allow users to interact with the controller submodule.
+
+```shell
+simd tx interchain-accounts host --help
+```
+
+##### `generate-packet-data`
+
+The `generate-packet-data` command allows users to generate protobuf or proto3 JSON encoded interchain accounts packet data for input message(s). The packet data can then be used with the controller submodule's [`send-tx` command](#send-tx). The `--encoding` flag can be uesd to specify the encoding format (value must be either `proto3` or `proto3json`); if not specified, the default will be `proto3`. The `--memo` flag can be used to include a memo string in the interchain accounts packet data.
+
+```shell
+simd tx interchain-accounts host generate-packet-data [message]
+```
+
+Example:
+
+```shell
+simd tx interchain-accounts host generate-packet-data '[{
+ "@type":"/cosmos.bank.v1beta1.MsgSend",
+ "from_address":"cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz",
+ "to_address":"cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw",
+ "amount": [
+ {
+ "denom": "stake",
+ "amount": "1000"
+ }
+ ]
+}]' --memo memo
+```
+
+The command accepts a single `sdk.Msg` or a list of `sdk.Msg`s that will be encoded into the outputs `data` field.
+
+Example output:
+
+```json
+{
+ "type":"TYPE_EXECUTE_TX",
+ "data":"CqIBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEoEBCkFjb3Ntb3MxNWNjc2hobXAwZ3N4MjlxcHFxNmc0em1sdG5udmdteXU5dWV1YWRoOXkybmM1emowc3psczVndGRkehItY29zbW9zMTBoOXN0YzV2Nm50Z2V5Z2Y1eGY5NDVuanFxNWgzMnI1M3VxdXZ3Gg0KBXN0YWtlEgQxMDAw",
+ "memo":"memo"
+}
+```
+
+## gRPC
+
+A user can query the interchain account module using gRPC endpoints.
+
+### Controller
+
+A user can query the controller submodule using gRPC endpoints.
+
+#### `InterchainAccount`
+
+The `InterchainAccount` endpoint allows users to query the controller submodule for the interchain account address for a given owner on a particular connection.
+
+```shell
+ibc.applications.interchain_accounts.controller.v1.Query/InterchainAccount
+```
+
+Example:
+
+```shell
+grpcurl -plaintext \
+ -d '{"owner":"cosmos1..","connection_id":"connection-0"}' \
+ localhost:9090 \
+ ibc.applications.interchain_accounts.controller.v1.Query/InterchainAccount
+```
+
+#### `Params`
+
+The `Params` endpoint users to query the current controller submodule parameters.
+
+```shell
+ibc.applications.interchain_accounts.controller.v1.Query/Params
+```
+
+Example:
+
+```shell
+grpcurl -plaintext \
+ localhost:9090 \
+ ibc.applications.interchain_accounts.controller.v1.Query/Params
+```
+
+### Host
+
+A user can query the host submodule using gRPC endpoints.
+
+#### `Params`
+
+The `Params` endpoint users to query the current host submodule parameters.
+
+```shell
+ibc.applications.interchain_accounts.host.v1.Query/Params
+```
+
+Example:
+
+```shell
+grpcurl -plaintext \
+ localhost:9090 \
+ ibc.applications.interchain_accounts.host.v1.Query/Params
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md
new file mode 100644
index 00000000000..2aedeb8a42f
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md
@@ -0,0 +1,39 @@
+---
+title: Active Channels
+sidebar_label: Active Channels
+sidebar_position: 9
+slug: /apps/interchain-accounts/active-channels
+---
+
+# Understanding Active Channels
+
+The Interchain Accounts module uses [ORDERED channels](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#ordering) to maintain the order of transactions when sending packets from a controller to a host chain. A limitation when using ORDERED channels is that when a packet times out the channel will be closed.
+
+In the case of a channel closing, a controller chain needs to be able to regain access to the interchain account registered on this channel. `Active Channels` enable this functionality.
+
+When an Interchain Account is registered using `MsgRegisterInterchainAccount`, a new channel is created on a particular port. During the `OnChanOpenAck` and `OnChanOpenConfirm` steps (on controller & host chain respectively) the `Active Channel` for this interchain account is stored in state.
+
+It is possible to create a new channel using the same controller chain portID if the previously set `Active Channel` is now in a `CLOSED` state. This channel creation can be initialized programatically by sending a new `MsgChannelOpenInit` message like so:
+
+```go
+msg := channeltypes.NewMsgChannelOpenInit(portID, string(versionBytes), channeltypes.ORDERED, []string{connectionID}, icatypes.HostPortID, authtypes.NewModuleAddress(icatypes.ModuleName).String())
+handler := keeper.msgRouter.Handler(msg)
+res, err := handler(ctx, msg)
+if err != nil {
+ return err
+}
+```
+
+Alternatively, any relayer operator may initiate a new channel handshake for this interchain account once the previously set `Active Channel` is in a `CLOSED` state. This is done by initiating the channel handshake on the controller chain using the same portID associated with the interchain account in question.
+
+It is important to note that once a channel has been opened for a given interchain account, new channels can not be opened for this account until the currently set `Active Channel` is set to `CLOSED`.
+
+## Future improvements
+
+Future versions of the ICS-27 protocol and the Interchain Accounts module will likely use a new channel type that provides ordering of packets without the channel closing in the event of a packet timing out, thus removing the need for `Active Channels` entirely.
+The following is a list of issues which will provide the infrastructure to make this possible:
+
+- [IBC Channel Upgrades](https://github.com/cosmos/ibc-go/issues/1599)
+- [Implement ORDERED_ALLOW_TIMEOUT logic in 04-channel](https://github.com/cosmos/ibc-go/issues/1661)
+- [Add ORDERED_ALLOW_TIMEOUT as supported ordering in 03-connection](https://github.com/cosmos/ibc-go/issues/1662)
+- [Allow ICA channels to be opened as ORDERED_ALLOW_TIMEOUT](https://github.com/cosmos/ibc-go/issues/1663)
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md
new file mode 100644
index 00000000000..96aca51c763
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md
@@ -0,0 +1,274 @@
+---
+title: Authentication Modules
+sidebar_label: Authentication Modules
+sidebar_position: 1
+slug: /apps/interchain-accounts/legacy/auth-modules
+---
+
+
+# Building an authentication module
+
+## Deprecation Notice
+
+**This document is deprecated and will be removed in future releases**.
+
+:::note Synopsis
+Authentication modules play the role of the `Base Application` as described in [ICS-30 IBC Middleware](https://github.com/cosmos/ibc/tree/master/spec/app/ics-030-middleware), and enable application developers to perform custom logic when working with the Interchain Accounts controller API.
+:::
+
+The controller submodule is used for account registration and packet sending. It executes only logic required of all controllers of interchain accounts. The type of authentication used to manage the interchain accounts remains unspecified. There may exist many different types of authentication which are desirable for different use cases. Thus the purpose of the authentication module is to wrap the controller submodule with custom authentication logic.
+
+In ibc-go, authentication modules are connected to the controller chain via a middleware stack. The controller submodule is implemented as [middleware](https://github.com/cosmos/ibc/tree/master/spec/app/ics-030-middleware) and the authentication module is connected to the controller submodule as the base application of the middleware stack. To implement an authentication module, the `IBCModule` interface must be fulfilled. By implementing the controller submodule as middleware, any amount of authentication modules can be created and connected to the controller submodule without writing redundant code.
+
+The authentication module must:
+
+- Authenticate interchain account owners.
+- Track the associated interchain account address for an owner.
+- Send packets on behalf of an owner (after authentication).
+
+> Please note that since ibc-go v6 the channel capability is claimed by the controller submodule and therefore it is not required for authentication modules to claim the capability in the `OnChanOpenInit` callback. When the authentication module sends packets on the channel created for the associated interchain account it can pass a `nil` capability to the legacy function `SendTx` of the controller keeper (see section [`SendTx`](03-keeper-api.md#sendtx) for more information).
+
+## `IBCModule` implementation
+
+The following `IBCModule` callbacks must be implemented with appropriate custom logic:
+
+```go
+// OnChanOpenInit implements the IBCModule interface
+func (im IBCModule) OnChanOpenInit(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID string,
+ channelID string,
+ chanCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ version string,
+) (string, error) {
+ // since ibc-go v6 the authentication module *must not* claim the channel capability on OnChanOpenInit
+
+ // perform custom logic
+
+ return version, nil
+}
+
+// OnChanOpenAck implements the IBCModule interface
+func (im IBCModule) OnChanOpenAck(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+ counterpartyVersion string,
+) error {
+ // perform custom logic
+
+ return nil
+}
+
+// OnChanCloseConfirm implements the IBCModule interface
+func (im IBCModule) OnChanCloseConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ // perform custom logic
+
+ return nil
+}
+
+// OnAcknowledgementPacket implements the IBCModule interface
+func (im IBCModule) OnAcknowledgementPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ acknowledgement []byte,
+ relayer sdk.AccAddress,
+) error {
+ // perform custom logic
+
+ return nil
+}
+
+// OnTimeoutPacket implements the IBCModule interface.
+func (im IBCModule) OnTimeoutPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ relayer sdk.AccAddress,
+) error {
+ // perform custom logic
+
+ return nil
+}
+```
+
+The following functions must be defined to fulfill the `IBCModule` interface, but they will never be called by the controller submodule so they may error or panic. That is because in Interchain Accounts, the channel handshake is always initiated on the controller chain and packets are always sent to the host chain and never to the controller chain.
+
+```go
+// OnChanOpenTry implements the IBCModule interface
+func (im IBCModule) OnChanOpenTry(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionHops []string,
+ portID,
+ channelID string,
+ chanCap *capabilitytypes.Capability,
+ counterparty channeltypes.Counterparty,
+ counterpartyVersion string,
+) (string, error) {
+ panic("UNIMPLEMENTED")
+}
+
+// OnChanOpenConfirm implements the IBCModule interface
+func (im IBCModule) OnChanOpenConfirm(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ panic("UNIMPLEMENTED")
+}
+
+// OnChanCloseInit implements the IBCModule interface
+func (im IBCModule) OnChanCloseInit(
+ ctx sdk.Context,
+ portID,
+ channelID string,
+) error {
+ panic("UNIMPLEMENTED")
+}
+
+// OnRecvPacket implements the IBCModule interface. A successful acknowledgement
+// is returned if the packet data is successfully decoded and the receive application
+// logic returns without error.
+func (im IBCModule) OnRecvPacket(
+ ctx sdk.Context,
+ packet channeltypes.Packet,
+ relayer sdk.AccAddress,
+) ibcexported.Acknowledgement {
+ panic("UNIMPLEMENTED")
+}
+```
+
+## `OnAcknowledgementPacket`
+
+Controller chains will be able to access the acknowledgement written into the host chain state once a relayer relays the acknowledgement.
+The acknowledgement bytes contain either the response of the execution of the message(s) on the host chain or an error. They will be passed to the auth module via the `OnAcknowledgementPacket` callback. Auth modules are expected to know how to decode the acknowledgement.
+
+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:
+
+Begin by unmarshaling the acknowledgement into `sdk.TxMsgData`:
+
+```go
+var ack channeltypes.Acknowledgement
+if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil {
+ return err
+}
+
+txMsgData := &sdk.TxMsgData{}
+if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil {
+ return err
+}
+```
+
+If the `txMsgData.Data` field is non nil, the host chain is using SDK version <= v0.45.
+The auth module should interpret the `txMsgData.Data` as follows:
+
+```go
+switch len(txMsgData.Data) {
+case 0:
+ // see documentation below for SDK 0.46.x or greater
+default:
+ for _, msgData := range txMsgData.Data {
+ if err := handler(msgData); err != nil {
+ return err
+ }
+ }
+...
+}
+```
+
+A handler will be needed to interpret what actions to perform based on the message type sent.
+A router could be used, or more simply a switch statement.
+
+```go
+func handler(msgData sdk.MsgData) error {
+switch msgData.MsgType {
+case sdk.MsgTypeURL(&banktypes.MsgSend{}):
+ msgResponse := &banktypes.MsgSendResponse{}
+ if err := proto.Unmarshal(msgData.Data, msgResponse}; err != nil {
+ return err
+ }
+
+ handleBankSendMsg(msgResponse)
+
+case sdk.MsgTypeURL(&stakingtypes.MsgDelegate{}):
+ msgResponse := &stakingtypes.MsgDelegateResponse{}
+ if err := proto.Unmarshal(msgData.Data, msgResponse}; err != nil {
+ return err
+ }
+
+ handleStakingDelegateMsg(msgResponse)
+
+case sdk.MsgTypeURL(&transfertypes.MsgTransfer{}):
+ msgResponse := &transfertypes.MsgTransferResponse{}
+ if err := proto.Unmarshal(msgData.Data, msgResponse}; err != nil {
+ return err
+ }
+
+ handleIBCTransferMsg(msgResponse)
+
+default:
+ return
+}
+```
+
+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:
+
+```go
+...
+// switch statement from above
+case 0:
+ for _, any := range txMsgData.MsgResponses {
+ if err := handleAny(any); err != nil {
+ return err
+ }
+ }
+}
+```
+
+A handler will be 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.
+It may be possible to deduplicate logic between `handler` and `handleAny`.
+
+```go
+func handleAny(any *codectypes.Any) error {
+switch any.TypeURL {
+case banktypes.MsgSend:
+ msgResponse, err := unpackBankMsgSendResponse(any)
+ if err != nil {
+ return err
+ }
+
+ handleBankSendMsg(msgResponse)
+
+case stakingtypes.MsgDelegate:
+ msgResponse, err := unpackStakingDelegateResponse(any)
+ if err != nil {
+ return err
+ }
+
+ handleStakingDelegateMsg(msgResponse)
+
+ case transfertypes.MsgTransfer:
+ msgResponse, err := unpackIBCTransferMsgResponse(any)
+ if err != nil {
+ return err
+ }
+
+ handleIBCTransferMsg(msgResponse)
+
+default:
+ return
+}
+```
+
+## Integration into `app.go` file
+
+To integrate the authentication module into your chain, please follow the steps outlined in [`app.go` integration](02-integration.md#example-integration).
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md
new file mode 100644
index 00000000000..90a645aaabd
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md
@@ -0,0 +1,201 @@
+---
+title: Integration
+sidebar_label: Integration
+sidebar_position: 2
+slug: /apps/interchain-accounts/legacy/integration
+---
+
+
+# Integration
+
+## Deprecation Notice
+
+**This document is deprecated and will be removed in future releases**.
+
+:::note Synopsis
+Learn how to integrate Interchain Accounts host and controller functionality to your chain. The following document only applies for Cosmos SDK chains.
+:::
+
+The Interchain Accounts module contains two submodules. Each submodule has its own IBC application. The Interchain Accounts module should be registered as an `AppModule` in the same way all SDK modules are registered on a chain, but each submodule should create its own `IBCModule` as necessary. A route should be added to the IBC router for each submodule which will be used.
+
+Chains who wish to support ICS-27 may elect to act as a host chain, a controller chain or both. Disabling host or controller functionality may be done statically by excluding the host or controller module entirely from the `app.go` file or it may be done dynamically by taking advantage of the on-chain parameters which enable or disable the host or controller submodules.
+
+Interchain Account authentication modules are the base application of a middleware stack. The controller submodule is the middleware in this stack.
+
+![ica-pre-v6.png](./images/ica-pre-v6.png)
+
+> Please note that since ibc-go v6 the channel capability is claimed by the controller submodule and therefore it is not required for authentication modules to claim the capability in the `OnChanOpenInit` callback. Therefore the custom authentication module does not need a scoped keeper anymore.
+
+## Example integration
+
+```go
+// app.go
+
+// Register the AppModule for the Interchain Accounts module and the authentication module
+// Note: No `icaauth` exists, this must be substituted with an actual Interchain Accounts authentication module
+ModuleBasics = module.NewBasicManager(
+ ...
+ ica.AppModuleBasic{},
+ icaauth.AppModuleBasic{},
+ ...
+)
+
+...
+
+// Add module account permissions for the Interchain Accounts module
+// Only necessary for host chain functionality
+// Each Interchain Account created on the host chain is derived from the module account created
+maccPerms = map[string][]string{
+ ...
+ icatypes.ModuleName: nil,
+}
+
+...
+
+// Add Interchain Accounts Keepers for each submodule used and the authentication module
+// If a submodule is being statically disabled, the associated Keeper does not need to be added.
+type App struct {
+ ...
+
+ ICAControllerKeeper icacontrollerkeeper.Keeper
+ ICAHostKeeper icahostkeeper.Keeper
+ ICAAuthKeeper icaauthkeeper.Keeper
+
+ ...
+}
+
+...
+
+// Create store keys for each submodule Keeper and the authentication module
+keys := sdk.NewKVStoreKeys(
+ ...
+ icacontrollertypes.StoreKey,
+ icahosttypes.StoreKey,
+ icaauthtypes.StoreKey,
+ ...
+)
+
+...
+
+// Create the scoped keepers for each submodule keeper and authentication keeper
+scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName)
+scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName)
+
+...
+
+// Create the Keeper for each submodule
+app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper(
+ appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName),
+ app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ scopedICAControllerKeeper, app.MsgServiceRouter(),
+)
+app.ICAHostKeeper = icahostkeeper.NewKeeper(
+ appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName),
+ app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(),
+)
+
+// Create Interchain Accounts AppModule
+icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper)
+
+// Create your Interchain Accounts authentication module
+app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.ICAControllerKeeper)
+
+// ICA auth AppModule
+icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper)
+
+// ICA auth IBC Module
+icaAuthIBCModule := icaauth.NewIBCModule(app.ICAAuthKeeper)
+
+// Create controller IBC application stack and host IBC module as desired
+icaControllerStack := icacontroller.NewIBCMiddleware(icaAuthIBCModule, app.ICAControllerKeeper)
+icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper)
+
+// Register host and authentication routes
+ibcRouter.
+ AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
+ AddRoute(icahosttypes.SubModuleName, icaHostIBCModule).
+ AddRoute(icaauthtypes.ModuleName, icaControllerStack) // Note, the authentication module is routed to the top level of the middleware stack
+
+...
+
+// Register Interchain Accounts and authentication module AppModule's
+app.moduleManager = module.NewManager(
+ ...
+ icaModule,
+ icaAuthModule,
+)
+
+...
+
+// Add fee middleware to begin blocker logic
+app.moduleManager.SetOrderBeginBlockers(
+ ...
+ icatypes.ModuleName,
+ ...
+)
+
+// Add fee middleware to end blocker logic
+app.moduleManager.SetOrderEndBlockers(
+ ...
+ icatypes.ModuleName,
+ ...
+)
+
+// Add Interchain Accounts module InitGenesis logic
+app.moduleManager.SetOrderInitGenesis(
+ ...
+ icatypes.ModuleName,
+ ...
+)
+
+// initParamsKeeper init params keeper and its subspaces
+func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper {
+ ...
+ paramsKeeper.Subspace(icahosttypes.SubModuleName)
+ paramsKeeper.Subspace(icacontrollertypes.SubModuleName)
+ ...
+```
+
+## Using submodules exclusively
+
+As described above, the Interchain Accounts application module is structured to support the ability of exclusively enabling controller or host functionality.
+This can be achieved by simply omitting either controller or host `Keeper` from the Interchain Accounts `NewAppModule` constructor function, and mounting only the desired submodule via the `IBCRouter`.
+Alternatively, submodules can be enabled and disabled dynamically using [on-chain parameters](../06-parameters.md).
+
+The following snippets show basic examples of statically disabling submodules using `app.go`.
+
+### Disabling controller chain functionality
+
+```go
+// Create Interchain Accounts AppModule omitting the controller keeper
+icaModule := ica.NewAppModule(nil, &app.ICAHostKeeper)
+
+// Create host IBC Module
+icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper)
+
+// Register host route
+ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule)
+```
+
+### Disabling host chain functionality
+
+```go
+// Create Interchain Accounts AppModule omitting the host keeper
+icaModule := ica.NewAppModule(&app.ICAControllerKeeper, nil)
+
+// Create your Interchain Accounts authentication module, setting up the Keeper, AppModule and IBCModule appropriately
+app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.ICAControllerKeeper)
+icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper)
+icaAuthIBCModule := icaauth.NewIBCModule(app.ICAAuthKeeper)
+
+// Create controller IBC application stack
+icaControllerStack := icacontroller.NewIBCMiddleware(icaAuthIBCModule, app.ICAControllerKeeper)
+
+// Register controller and authentication routes
+ibcRouter.
+ AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
+ AddRoute(icaauthtypes.ModuleName, icaControllerStack) // Note, the authentication module is routed to the top level of the middleware stack
+```
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md
new file mode 100644
index 00000000000..252c7eaf7ff
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md
@@ -0,0 +1,125 @@
+---
+title: Keeper API
+sidebar_label: Keeper API
+sidebar_position: 3
+slug: /apps/interchain-accounts/legacy/keeper-api
+---
+
+
+# Keeper API
+
+## Deprecation Notice
+
+**This document is deprecated and will be removed in future releases**.
+
+The controller submodule keeper exposes two legacy functions that allow respectively for custom authentication modules to register interchain accounts and send packets to the interchain account.
+
+## `RegisterInterchainAccount`
+
+The authentication module can begin registering interchain accounts by calling `RegisterInterchainAccount`:
+
+```go
+if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, connectionID, owner.String(), version); err != nil {
+ return err
+}
+
+return nil
+```
+
+The `version` argument is used to support ICS-29 fee middleware for relayer incentivization of ICS-27 packets. Consumers of the `RegisterInterchainAccount` are expected to build the appropriate JSON encoded version string themselves and pass it accordingly. If an empty string is passed in the `version` argument, then the version will be initialized to a default value in the `OnChanOpenInit` callback of the controller's handler, so that channel handshake can proceed.
+
+The following code snippet illustrates how to construct an appropriate interchain accounts `Metadata` and encode it as a JSON bytestring:
+
+```go
+icaMetadata := icatypes.Metadata{
+ Version: icatypes.Version,
+ ControllerConnectionId: controllerConnectionID,
+ HostConnectionId: hostConnectionID,
+ Encoding: icatypes.EncodingProtobuf,
+ TxType: icatypes.TxTypeSDKMultiMsg,
+}
+
+appVersion, err := icatypes.ModuleCdc.MarshalJSON(&icaMetadata)
+if err != nil {
+ return err
+}
+
+if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, controllerConnectionID, owner.String(), string(appVersion)); err != nil {
+ return err
+}
+```
+
+Similarly, if the application stack is configured to route through ICS-29 fee middleware and a fee enabled channel is desired, construct the appropriate ICS-29 `Metadata` type:
+
+```go
+icaMetadata := icatypes.Metadata{
+ Version: icatypes.Version,
+ ControllerConnectionId: controllerConnectionID,
+ HostConnectionId: hostConnectionID,
+ Encoding: icatypes.EncodingProtobuf,
+ TxType: icatypes.TxTypeSDKMultiMsg,
+}
+
+appVersion, err := icatypes.ModuleCdc.MarshalJSON(&icaMetadata)
+if err != nil {
+ return err
+}
+
+feeMetadata := feetypes.Metadata{
+ AppVersion: string(appVersion),
+ FeeVersion: feetypes.Version,
+}
+
+feeEnabledVersion, err := feetypes.ModuleCdc.MarshalJSON(&feeMetadata)
+if err != nil {
+ return err
+}
+
+if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, controllerConnectionID, owner.String(), string(feeEnabledVersion)); err != nil {
+ return err
+}
+```
+
+## `SendTx`
+
+The authentication module can attempt to send a packet by calling `SendTx`:
+
+```go
+// Authenticate owner
+// perform custom logic
+
+// Construct controller portID based on interchain account owner address
+portID, err := icatypes.NewControllerPortID(owner.String())
+if err != nil {
+ return err
+}
+
+// Obtain data to be sent to the host chain.
+// In this example, the owner of the interchain account would like to send a bank MsgSend to the host chain.
+// The appropriate serialization function should be called. The host chain must be able to deserialize the transaction.
+// If the host chain is using the ibc-go host module, `SerializeCosmosTx` should be used.
+msg := &banktypes.MsgSend{FromAddress: fromAddr, ToAddress: toAddr, Amount: amt}
+data, err := icatypes.SerializeCosmosTx(keeper.cdc, []proto.Message{msg})
+if err != nil {
+ return err
+}
+
+// Construct packet data
+packetData := icatypes.InterchainAccountPacketData{
+ Type: icatypes.EXECUTE_TX,
+ Data: data,
+}
+
+// Obtain timeout timestamp
+// An appropriate timeout timestamp must be determined based on the usage of the interchain account.
+// If the packet times out, the channel will be closed requiring a new channel to be created.
+timeoutTimestamp := obtainTimeoutTimestamp()
+
+// Send the interchain accounts packet, returning the packet sequence
+// A nil channel capability can be passed, since the controller submodule (and not the authentication module)
+// claims the channel capability since ibc-go v6.
+seq, err = keeper.icaControllerKeeper.SendTx(ctx, nil, portID, packetData, timeoutTimestamp)
+```
+
+The data within an `InterchainAccountPacketData` must be serialized using a format supported by the host chain.
+If the host chain is using the ibc-go host chain submodule, `SerializeCosmosTx` should be used. If the `InterchainAccountPacketData.Data` is serialized using a format not supported by the host chain, the packet will not be successfully received.
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json
new file mode 100644
index 00000000000..70500795bf8
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Legacy",
+ "position": 10,
+ "link": null
+}
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png
new file mode 100644
index 00000000000..acd00d1294b
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/_category_.json b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/_category_.json
new file mode 100644
index 00000000000..5ac86ce8ff6
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Interchain Accounts",
+ "position": 2,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/images/ica-v6.png b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/images/ica-v6.png
new file mode 100644
index 00000000000..0ffa707c981
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/images/ica-v6.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/_category_.json b/docs/versioned_docs/version-v8.0.x/02-apps/_category_.json
new file mode 100644
index 00000000000..fa5fbf0ac9a
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/02-apps/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "IBC Application Modules",
+ "position": 2,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/01-overview.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/01-overview.md
new file mode 100644
index 00000000000..eeef65a7be7
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/01-overview.md
@@ -0,0 +1,79 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /ibc/light-clients/overview
+---
+
+# Overview
+
+:::note Synopsis
+Learn how to build IBC light client modules and fulfill the interfaces required to integrate with core IBC.
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [IBC Overview](../../01-ibc/01-overview.md)
+- [IBC Transport, Authentication, and Ordering Layer - Clients](https://tutorials.cosmos.network/academy/3-ibc/4-clients.html)
+- [ICS-002 Client Semantics](https://github.com/cosmos/ibc/tree/main/spec/core/ics-002-client-semantics)
+
+:::
+
+IBC uses light clients in order to provide trust-minimized interoperability between sovereign blockchains. Light clients operate under a strict set of rules which provide security guarantees for state updates and facilitate the ability to verify the state of a remote blockchain using merkle proofs.
+
+The following aims to provide a high level IBC light client module developer guide. Access to IBC light clients are gated by the core IBC `MsgServer` which utilizes the abstractions set by the `02-client` submodule to call into a light client module. A light client module developer is only required to implement a set interfaces as defined in the `modules/core/exported` package of ibc-go.
+
+A light client module developer should be concerned with three main interfaces:
+
+- [`ClientState`](#clientstate) encapsulates the light client implementation and its semantics.
+- [`ConsensusState`](#consensusstate) tracks consensus data used for verification of client updates, misbehaviour detection and proof verification of counterparty state.
+- [`ClientMessage`](#clientmessage) used for submitting block headers for client updates and submission of misbehaviour evidence using conflicting headers.
+
+Throughout this guide the `07-tendermint` light client module may be referred to as a reference example.
+
+## Concepts and vocabulary
+
+### `ClientState`
+
+`ClientState` is a term used to define the data structure which encapsulates opaque light client state. The `ClientState` contains all the information needed to verify a `ClientMessage` and perform membership and non-membership proof verification of counterparty state. This includes properties that refer to the remote state machine, the light client type and the specific light client instance.
+
+For example:
+
+- Constraints used for client updates.
+- Constraints used for misbehaviour detection.
+- Constraints used for state verification.
+- Constraints used for client upgrades.
+
+The `ClientState` type maintained within the light client module *must* implement the [`ClientState`](https://github.com/cosmos/ibc-go/tree/02-client-refactor-beta1/modules/core/exported/client.go#L36) interface defined in `core/modules/exported/client.go`.
+The methods which make up this interface are detailed at a more granular level in the [ClientState section of this guide](02-client-state.md).
+
+Please refer to the `07-tendermint` light client module's [`ClientState` definition](https://github.com/cosmos/ibc-go/tree/02-client-refactor-beta1/proto/ibc/lightclients/tendermint/v1/tendermint.proto#L18) containing information such as chain ID, status, latest height, unbonding period and proof specifications.
+
+### `ConsensusState`
+
+`ConsensusState` is a term used to define the data structure which encapsulates consensus data at a particular point in time, i.e. a unique height or sequence number of a state machine. There must exist a single trusted `ConsensusState` for each height. `ConsensusState` generally contains a trusted root, validator set information and timestamp.
+
+For example, the `ConsensusState` of the `07-tendermint` light client module defines a trusted root which is used by the `ClientState` to perform verification of membership and non-membership commitment proofs, as well as the next validator set hash used for verifying headers can be trusted in client updates.
+
+The `ConsensusState` type maintained within the light client module *must* implement the [`ConsensusState`](https://github.com/cosmos/ibc-go/tree/02-client-refactor-beta1/modules/core/exported/client.go#L134) interface defined in `modules/core/exported/client.go`.
+The methods which make up this interface are detailed at a more granular level in the [`ConsensusState` section of this guide](03-consensus-state.md).
+
+### `Height`
+
+`Height` defines a monotonically increasing sequence number which provides ordering of consensus state data persisted through client updates.
+IBC light client module developers are expected to use the [concrete type](https://github.com/cosmos/ibc-go/tree/02-client-refactor-beta1/proto/ibc/core/client/v1/client.proto#L89) provided by the `02-client` submodule. This implements the expectations required by the [`Height`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L156) interface defined in `modules/core/exported/client.go`.
+
+### `ClientMessage`
+
+`ClientMessage` refers to the interface type [`ClientMessage`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L147) used for performing updates to a `ClientState` stored on chain.
+This may be any concrete type which produces a change in state to the IBC client when verified.
+
+The following are considered as valid update scenarios:
+
+- A block header which when verified inserts a new `ConsensusState` at a unique height.
+- A batch of block headers which when verified inserts `N` `ConsensusState` instances for `N` unique heights.
+- Evidence of misbehaviour provided by two conflicting block headers.
+
+Learn more in the [Handling update and misbehaviour](04-updates-and-misbehaviour.md) section.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/02-client-state.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/02-client-state.md
new file mode 100644
index 00000000000..cceb32637fd
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/02-client-state.md
@@ -0,0 +1,79 @@
+---
+title: Client State interface
+sidebar_label: Client State interface
+sidebar_position: 2
+slug: /ibc/light-clients/client-state
+---
+
+
+# Implementing the `ClientState` interface
+
+Learn how to implement the [`ClientState`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L36) interface. This list of methods described here does not include all methods of the interface. Some methods are explained in detail in the relevant sections of the guide.
+
+## `ClientType` method
+
+`ClientType` should return a unique string identifier of the light client. This will be used when generating a client identifier.
+The format is created as follows: `ClientType-{N}` where `{N}` is the unique global nonce associated with a specific client.
+
+## `GetLatestHeight` method
+
+`GetLatestHeight` should return the latest block height that the client state represents.
+
+## `Validate` method
+
+`Validate` should validate every client state field and should return an error if any value is invalid. The light client
+implementer is in charge of determining which checks are required. See the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/client_state.go#L111) as a reference.
+
+## `Status` method
+
+`Status` must return the status of the client.
+
+- An `Active` status indicates that clients are allowed to process packets.
+- A `Frozen` status indicates that misbehaviour was detected in the counterparty chain and the client is not allowed to be used.
+- An `Expired` status indicates that a client is not allowed to be used because it was not updated for longer than the trusting period.
+- An `Unknown` status indicates that there was an error in determining the status of a client.
+
+All possible `Status` types can be found [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L22-L32).
+
+This field is returned in the response of the gRPC [`ibc.core.client.v1.Query/ClientStatus`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/types/query.pb.go#L665) endpoint.
+
+## `ZeroCustomFields` method
+
+`ZeroCustomFields` should return a copy of the light client with all client customizable fields with their zero value. It should not mutate the fields of the light client.
+This method is used when [scheduling upgrades](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/proposal.go#L82). Upgrades are used to upgrade chain specific fields.
+In the tendermint case, this may be the chain ID or the unbonding period.
+For more information about client upgrades see the [Handling upgrades](05-upgrades.md) section.
+
+## `GetTimestampAtHeight` method
+
+`GetTimestampAtHeight` must return the timestamp for the consensus state associated with the provided height.
+This value is used to facilitate timeouts by checking the packet timeout timestamp against the returned value.
+
+## `Initialize` method
+
+Clients must validate the initial consensus state, and set the initial client state and consensus state in the provided client store.
+Clients may also store any necessary client-specific metadata.
+
+`Initialize` is called when a [client is created](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L30).
+
+## `VerifyMembership` method
+
+`VerifyMembership` must verify the existence of a value at a given commitment path at the specified height. For more information about membership proofs
+see the [Existence and non-existence proofs section](06-proofs.md).
+
+## `VerifyNonMembership` method
+
+`VerifyNonMembership` must verify the absence of a value at a given commitment path at a specified height. For more information about non-membership proofs
+see the [Existence and non-existence proofs section](06-proofs.md).
+
+## `VerifyClientMessage` method
+
+`VerifyClientMessage` must verify a `ClientMessage`. A `ClientMessage` could be a `Header`, `Misbehaviour`, or batch update.
+It must handle each type of `ClientMessage` appropriately. Calls to `CheckForMisbehaviour`, `UpdateState`, and `UpdateStateOnMisbehaviour`
+will assume that the content of the `ClientMessage` has been verified and can be trusted. An error should be returned
+if the ClientMessage fails to verify.
+
+## `CheckForMisbehaviour` method
+
+Checks for evidence of a misbehaviour in `Header` or `Misbehaviour` type. It assumes the `ClientMessage`
+has already been verified.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/03-consensus-state.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/03-consensus-state.md
new file mode 100644
index 00000000000..b9e03083e6f
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/03-consensus-state.md
@@ -0,0 +1,27 @@
+---
+title: Consensus State interface
+sidebar_label: Consensus State interface
+sidebar_position: 3
+slug: /ibc/light-clients/consensus-state
+---
+
+
+# Implementing the `ConsensusState` interface
+
+A `ConsensusState` is the snapshot of the counterparty chain, that an IBC client uses to verify proofs (e.g. a block).
+
+The further development of multiple types of IBC light clients and the difficulties presented by this generalization problem (see [ADR-006](https://github.com/cosmos/ibc-go/blob/main/docs/architecture/adr-006-02-client-refactor.md) for more information about this historical context) led to the design decision of each client keeping track of and set its own `ClientState` and `ConsensusState`, as well as the simplification of client `ConsensusState` updates through the generalized `ClientMessage` interface.
+
+The below [`ConsensusState`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L133) interface is a generalized interface for the types of information a `ConsensusState` could contain. For a reference `ConsensusState` implementation, please see the [Tendermint light client `ConsensusState`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/consensus_state.go).
+
+## `ClientType` method
+
+This is the type of client consensus. It should be the same as the `ClientType` return value for the [corresponding `ClientState` implementation](02-client-state.md).
+
+## `GetTimestamp` method
+
+`GetTimestamp` should return the timestamp (in nanoseconds) of the consensus state snapshot.
+
+## `ValidateBasic` method
+
+`ValidateBasic` should validate every consensus state field and should return an error if any value is invalid. The light client implementer is in charge of determining which checks are required.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md
new file mode 100644
index 00000000000..776c442baed
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md
@@ -0,0 +1,98 @@
+---
+title: Handling Updates and Misbehaviour
+sidebar_label: Handling Updates and Misbehaviour
+sidebar_position: 4
+slug: /ibc/light-clients/updates-and-misbehaviour
+---
+
+
+# Handling `ClientMessage`s: updates and misbehaviour
+
+As mentioned before in the documentation about [implementing the `ConsensusState` interface](03-consensus-state.md), [`ClientMessage`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L147) is an interface used to update an IBC client. This update may be performed by:
+
+- a single header
+- a batch of headers
+- evidence of misbehaviour,
+- or any type which when verified produces a change to the consensus state of the IBC client.
+
+This interface has been purposefully kept generic in order to give the maximum amount of flexibility to the light client implementer.
+
+## Implementing the `ClientMessage` interface
+
+Find the `ClientMessage`interface in `modules/core/exported`:
+
+```go
+type ClientMessage interface {
+ proto.Message
+
+ ClientType() string
+ ValidateBasic() error
+}
+```
+
+The `ClientMessage` will be passed to the client to be used in [`UpdateClient`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L48), which retrieves the `ClientState` by client ID (available in `MsgUpdateClient`). This `ClientState` implements the [`ClientState` interface](02-client-state.md) for its specific consenus type (e.g. Tendermint).
+
+`UpdateClient` will then handle a number of cases including misbehaviour and/or updating the consensus state, utilizing the specific methods defined in the relevant `ClientState`.
+
+```go
+VerifyClientMessage(ctx sdk.Context, cdc codec.BinaryCodec, clientStore sdk.KVStore, clientMsg ClientMessage) error
+CheckForMisbehaviour(ctx sdk.Context, cdc codec.BinaryCodec, clientStore sdk.KVStore, clientMsg ClientMessage) bool
+UpdateStateOnMisbehaviour(ctx sdk.Context, cdc codec.BinaryCodec, clientStore sdk.KVStore, clientMsg ClientMessage)
+UpdateState(ctx sdk.Context, cdc codec.BinaryCodec, clientStore sdk.KVStore, clientMsg ClientMessage) []Height
+```
+
+## Handling updates and misbehaviour
+
+The functions for handling updates to a light client and evidence of misbehaviour are all found in the [`ClientState`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L36) interface, and will be discussed below.
+
+> It is important to note that `Misbehaviour` in this particular context is referring to misbehaviour on the chain level intended to fool the light client. This will be defined by each light client.
+
+## `VerifyClientMessage`
+
+`VerifyClientMessage` must verify a `ClientMessage`. A `ClientMessage` could be a `Header`, `Misbehaviour`, or batch update. To understand how to implement a `ClientMessage`, please refer to the [Implementing the `ClientMessage` interface](#implementing-the-clientmessage-interface) section.
+
+It must handle each type of `ClientMessage` appropriately. Calls to `CheckForMisbehaviour`, `UpdateState`, and `UpdateStateOnMisbehaviour` will assume that the content of the `ClientMessage` has been verified and can be trusted. An error should be returned if the `ClientMessage` fails to verify.
+
+For an example of a `VerifyClientMessage` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/update.go#L20).
+
+## `CheckForMisbehaviour`
+
+Checks for evidence of a misbehaviour in `Header` or `Misbehaviour` type. It assumes the `ClientMessage` has already been verified.
+
+For an example of a `CheckForMisbehaviour` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/misbehaviour_handle.go#L19).
+
+> The Tendermint light client [defines `Misbehaviour`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/misbehaviour.go) as two different types of situations: a situation where two conflicting `Header`s with the same height have been submitted to update a client's `ConsensusState` within the same trusting period, or that the two conflicting `Header`s have been submitted at different heights but the consensus states are not in the correct monotonic time ordering (BFT time violation). More explicitly, updating to a new height must have a timestamp greater than the previous consensus state, or, if inserting a consensus at a past height, then time must be less than those heights which come after and greater than heights which come before.
+
+## `UpdateStateOnMisbehaviour`
+
+`UpdateStateOnMisbehaviour` should perform appropriate state changes on a client state given that misbehaviour has been detected and verified. This method should only be called when misbehaviour is detected, as it does not perform any misbehaviour checks. Notably, it should freeze the client so that calling the `Status` function on the associated client state no longer returns `Active`.
+
+For an example of a `UpdateStateOnMisbehaviour` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/update.go#L199).
+
+## `UpdateState`
+
+`UpdateState` updates and stores as necessary any associated information for an IBC client, such as the `ClientState` and corresponding `ConsensusState`. It should perform a no-op on duplicate updates.
+
+It assumes the `ClientMessage` has already been verified.
+
+For an example of a `UpdateState` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/update.go#L131).
+
+## Putting it all together
+
+The `02-client` `Keeper` module in ibc-go offers a reference as to how these functions will be used to [update the client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L48).
+
+```go
+if err := clientState.VerifyClientMessage(clientMessage); err != nil {
+ return err
+}
+
+foundMisbehaviour := clientState.CheckForMisbehaviour(clientMessage)
+if foundMisbehaviour {
+ clientState.UpdateStateOnMisbehaviour(clientMessage)
+ // emit misbehaviour event
+ return
+}
+
+clientState.UpdateState(clientMessage) // expects no-op on duplicate header
+// emit update event
+return
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md
new file mode 100644
index 00000000000..a6fc3858c3d
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md
@@ -0,0 +1,66 @@
+---
+title: Handling Upgrades
+sidebar_label: Handling Upgrades
+sidebar_position: 5
+slug: /ibc/light-clients/upgrades
+---
+
+
+# Handling upgrades
+
+It is vital that high-value IBC clients can upgrade along with their underlying chains to avoid disruption to the IBC ecosystem. Thus, IBC client developers will want to implement upgrade functionality to enable clients to maintain connections and channels even across chain upgrades.
+
+## Implementing `VerifyUpgradeAndUpdateState`
+
+The IBC protocol allows client implementations to provide a path to upgrading clients given the upgraded `ClientState`, upgraded `ConsensusState` and proofs for each. This path is provided in the `VerifyUpgradeAndUpdateState` method:
+
+```go
+// NOTE: proof heights are not included as upgrade to a new revision is expected to pass only on the last height committed by the current revision. Clients are responsible for ensuring that the planned last height of the current revision is somehow encoded in the proof verification process.
+// This is to ensure that no premature upgrades occur, since upgrade plans committed to by the counterparty may be cancelled or modified before the last planned height.
+// If the upgrade is verified, the upgraded client and consensus states must be set in the client store.
+func (cs ClientState) VerifyUpgradeAndUpdateState(
+ ctx sdk.Context,
+ cdc codec.BinaryCodec,
+ store sdk.KVStore,
+ newClient ClientState,
+ newConsState ConsensusState,
+ proofUpgradeClient,
+ proofUpgradeConsState []byte,
+) error
+```
+
+> Please refer to the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/upgrade.go#L27) as an example for implementation.
+
+It is important to note that light clients **must** handle all management of client and consensus states including the setting of updated `ClientState` and `ConsensusState` in the client store. This can include verifying that the submitted upgraded `ClientState` is of a valid `ClientState` type, that the height of the upgraded client is not greater than the height of the current client (in order to preserve BFT monotonic time), or that certain parameters which should not be changed have not been altered in the upgraded `ClientState`.
+
+Developers must ensure that the `MsgUpgradeClient` does not pass until the last height of the old chain has been committed, and after the chain upgrades, the `MsgUpgradeClient` should pass once and only once on all counterparty clients.
+
+### Upgrade path
+
+Clients should have **prior knowledge of the merkle path** that the upgraded client and upgraded consensus states will use. The height at which the upgrade has occurred should also be encoded in the proof.
+> The Tendermint client implementation accomplishes this by including an `UpgradePath` in the `ClientState` itself, which is used along with the upgrade height to construct the merkle path under which the client state and consensus state are committed.
+
+## Chain specific vs client specific client parameters
+
+Developers should maintain the distinction between client parameters that are uniform across every valid light client of a chain (chain-chosen parameters), and client parameters that are customizable by each individual client (client-chosen parameters); since this distinction is necessary to implement the `ZeroCustomFields` method in the [`ClientState` interface](02-client-state.md):
+
+```go
+// Utility function that zeroes out any client customizable fields in client state
+// Ledger enforced fields are maintained while all custom fields are zero values
+// Used to verify upgrades
+func (cs ClientState) ZeroCustomFields() ClientState
+```
+
+Developers must ensure that the new client adopts all of the new client parameters that must be uniform across every valid light client of a chain (chain-chosen parameters), while maintaining the client parameters that are customizable by each individual client (client-chosen parameters) from the previous version of the client. `ZeroCustomFields` is a useful utility function to ensure only chain specific fields are updated during upgrades.
+
+## Security
+
+Upgrades must adhere to the IBC Security Model. IBC does not rely on the assumption of honest relayers for correctness. Thus users should not have to rely on relayers to maintain client correctness and security (though honest relayers must exist to maintain relayer liveness). While relayers may choose any set of client parameters while creating a new `ClientState`, this still holds under the security model since users can always choose a relayer-created client that suits their security and correctness needs or create a client with their desired parameters if no such client exists.
+
+However, when upgrading an existing client, one must keep in mind that there are already many users who depend on this client's particular parameters. **We cannot give the upgrading relayer free choice over these parameters once they have already been chosen. This would violate the security model** since users who rely on the client would have to rely on the upgrading relayer to maintain the same level of security.
+
+Thus, developers must make sure that their upgrade mechanism allows clients to upgrade the chain-specified parameters whenever a chain upgrade changes these parameters (examples in the Tendermint client include `UnbondingPeriod`, `TrustingPeriod`, `ChainID`, `UpgradePath`, etc), while ensuring that the relayer submitting the `MsgUpgradeClient` cannot alter the client-chosen parameters that the users are relying upon (examples in Tendermint client include `TrustLevel`, `MaxClockDrift`, etc). The previous paragraph discusses how `ZeroCustomFields` helps achieve this.
+
+### Document potential client parameter conflicts during upgrades
+
+Counterparty clients can upgrade securely by using all of the chain-chosen parameters from the chain-committed `UpgradedClient` and preserving all of the old client-chosen parameters. This enables chains to securely upgrade without relying on an honest relayer, however it can in some cases lead to an invalid final `ClientState` if the new chain-chosen parameters clash with the old client-chosen parameter. This can happen in the Tendermint client case if the upgrading chain lowers the `UnbondingPeriod` (chain-chosen) to a duration below that of a counterparty client's `TrustingPeriod` (client-chosen). Such cases should be clearly documented by developers, so that chains know which upgrades should be avoided to prevent this problem. The final upgraded client should also be validated in `VerifyUpgradeAndUpdateState` before returning to ensure that the client does not upgrade to an invalid `ClientState`.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md
new file mode 100644
index 00000000000..636e2b70e80
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md
@@ -0,0 +1,66 @@
+---
+title: Existence/Non-Existence Proofs
+sidebar_label: Existence/Non-Existence Proofs
+sidebar_position: 6
+slug: /ibc/light-clients/proofs
+---
+
+
+# Existence and non-existence proofs
+
+IBC uses merkle proofs in order to verify the state of a remote counterparty state machine given a trusted root, and [ICS-23](https://github.com/cosmos/ics23/tree/master/go) is a general approach for verifying merkle trees which is used in ibc-go.
+
+Currently, all Cosmos SDK modules contain their own stores, which maintain the state of the application module in an IAVL (immutable AVL) binary merkle tree format. Specifically with regard to IBC, core IBC maintains its own IAVL store, and IBC apps (e.g. transfer) maintain their own dedicated stores. The Cosmos SDK multistore therefore creates a simple merkle tree of all of these IAVL trees, and from each of these individual IAVL tree root hashes it derives a root hash for the application state tree as a whole (the `AppHash`).
+
+For the purposes of ibc-go, there are two types of proofs which are important: existence and non-existence proofs, terms which have been used interchangeably with membership and non-membership proofs. For the purposes of this guide, we will stick with "existence" and "non-existence".
+
+## Existence proofs
+
+Existence proofs are used in IBC transactions which involve verification of counterparty state for transactions which will result in the writing of provable state. For example, this includes verification of IBC store state for handshakes and packets.
+
+Put simply, existence proofs prove that a particular key and value exists in the tree. Under the hood, an IBC existence proof comprises of two proofs: an IAVL proof that the key exists in IBC store/IBC root hash, and a proof that the IBC root hash exists in the multistore root hash.
+
+## Non-existence proofs
+
+Non-existence proofs verify the absence of data stored within counterparty state and are used to prove that a key does NOT exist in state. As stated above, these types of proofs can be used to timeout packets by proving that the counterparty has not written a packet receipt into the store, meaning that a token transfer has NOT successfully occurred.
+
+Some trees (e.g. SMT) may have a sentinel empty child for non-existent keys. In this case, the ICS-23 proof spec should include this `EmptyChild` so that ICS-23 handles the non-existence proof correctly.
+
+In some cases, there is a necessity to "mock" non-existence proofs if the counterparty does not have ability to prove absence. Since the verification method is designed to give complete control to client implementations, clients can support chains that do not provide absence proofs by verifying the existence of a non-empty sentinel `ABSENCE` value. In these special cases, the proof provided will be an ICS-23 `Existence` proof, and the client will verify that the `ABSENCE` value is stored under the given path for the given height.
+
+## State verification methods: `VerifyMembership` and `VerifyNonMembership`
+
+The state verification functions for all IBC data types have been consolidated into two generic methods, `VerifyMembership` and `VerifyNonMembership`.
+
+From the [`ClientState` interface definition](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L68-L91), we find:
+
+```go
+VerifyMembership(
+ ctx sdk.Context,
+ clientStore sdk.KVStore,
+ cdc codec.BinaryCodec,
+ height Height,
+ delayTimePeriod uint64,
+ delayBlockPeriod uint64,
+ proof []byte,
+ path Path,
+ value []byte,
+) error
+
+// VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at a specified height.
+// The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24).
+VerifyNonMembership(
+ ctx sdk.Context,
+ clientStore sdk.KVStore,
+ cdc codec.BinaryCodec,
+ height Height,
+ delayTimePeriod uint64,
+ delayBlockPeriod uint64,
+ proof []byte,
+ path Path,
+) error
+```
+
+Both are expected to be provided with a standardised key path, `exported.Path`, as defined in [ICS-24 host requirements](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements). Membership verification requires callers to provide the value marshalled as `[]byte`. Delay period values should be zero for non-packet processing verification. A zero proof height is now allowed by core IBC and may be passed into `VerifyMembership` and `VerifyNonMembership`. Light clients are responsible for returning an error if a zero proof height is invalid behaviour.
+
+Please refer to the [ICS-23 implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/23-commitment/types/merkle.go#L131-L205) for a concrete example.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md
new file mode 100644
index 00000000000..a5af1b4c705
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md
@@ -0,0 +1,36 @@
+---
+title: Handling Proposals
+sidebar_label: Handling Proposals
+sidebar_position: 7
+slug: /ibc/light-clients/proposals
+---
+
+
+# Handling proposals
+
+It is possible to update the client with the state of the substitute client through a governance proposal. [This type of governance proposal](https://ibc.cosmos.network/main/ibc/proposals.html) is typically used to recover an expired or frozen client, as it can recover the entire state and therefore all existing channels built on top of the client. `CheckSubstituteAndUpdateState` should be implemented to handle the proposal.
+
+## Implementing `CheckSubstituteAndUpdateState`
+
+In the [`ClientState`interface](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go), we find:
+
+```go
+// CheckSubstituteAndUpdateState must verify that the provided substitute may be used to update the subject client.
+// The light client must set the updated client and consensus states within the clientStore for the subject client.
+CheckSubstituteAndUpdateState(
+ ctx sdk.Context,
+ cdc codec.BinaryCodec,
+ subjectClientStore,
+ substituteClientStore sdk.KVStore,
+ substituteClient ClientState,
+) error
+```
+
+Prior to updating, this function must verify that:
+
+- the substitute client is the same type as the subject client. For a reference implementation, please see the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L32).
+- the provided substitute may be used to update the subject client. This may mean that certain parameters must remain unaltered. For example, a [valid substitute Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L84) must NOT change the chain ID, trust level, max clock drift, unbonding period, proof specs or upgrade path. Please note that `AllowUpdateAfterMisbehaviour` and `AllowUpdateAfterExpiry` have been deprecated (see ADR 026 for more information).
+
+After these checks are performed, the function must [set the updated client and consensus states](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L77) within the client store for the subject client.
+
+Please refer to the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L27) for reference.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md
new file mode 100644
index 00000000000..5c7c611e729
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md
@@ -0,0 +1,45 @@
+---
+title: Handling Genesis
+sidebar_label: Handling Genesis
+sidebar_position: 8
+slug: /ibc/light-clients/genesis
+---
+
+# Genesis metadata
+
+:::note Synopsis
+Learn how to implement the `ExportMetadata` interface
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [Cosmos SDK module genesis](https://docs.cosmos.network/v0.47/building-modules/genesis)
+
+:::
+
+`ClientState` instances are provided their own isolated and namespaced client store upon initialisation. `ClientState` implementations may choose to store any amount of arbitrary metadata in order to verify counterparty consensus state and perform light client updates correctly.
+
+The `ExportMetadata` method of the [`ClientState` interface](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L47) provides light client modules with the ability to persist metadata in genesis exports.
+
+```go
+ExportMetadata(clientStore sdk.KVStore) []GenesisMetadata
+```
+
+`ExportMetadata` is provided the client store and returns an array of `GenesisMetadata`. For maximum flexibility, `GenesisMetadata` is defined as a simple interface containing two distinct `Key` and `Value` accessor methods.
+
+```go
+type GenesisMetadata interface {
+ // return store key that contains metadata without clientID-prefix
+ GetKey() []byte
+ // returns metadata value
+ GetValue() []byte
+}
+```
+
+This allows `ClientState` instances to retrieve and export any number of key-value pairs which are maintained within the store in their raw `[]byte` form.
+
+When a chain is started with a `genesis.json` file which contains `ClientState` metadata (for example, when performing manual upgrades using an exported `genesis.json`) the `02-client` submodule of core IBC will handle setting the key-value pairs within their respective client stores. [See `02-client` `InitGenesis`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/genesis.go#L18-L22).
+
+Please refer to the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/genesis.go#L12) for an example.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md
new file mode 100644
index 00000000000..f3bba760ec2
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md
@@ -0,0 +1,133 @@
+---
+title: Setup
+sidebar_label: Setup
+sidebar_position: 9
+slug: /ibc/light-clients/setup
+---
+
+
+# Setup
+
+:::note Synopsis
+Learn how to configure light client modules and create clients using core IBC and the `02-client` submodule.
+:::
+
+A last step to finish the development of the light client, is to implement the `AppModuleBasic` interface to allow it to be added to the chain's `app.go` alongside other light client types the chain enables.
+
+Finally, a succinct rundown is given of the remaining steps to make the light client operational, getting the light client type passed through governance and creating the clients.
+
+## Configuring a light client module
+
+An IBC light client module must implement the [`AppModuleBasic`](https://github.com/cosmos/cosmos-sdk/blob/main/types/module/module.go#L50) interface in order to register its concrete types against the core IBC interfaces defined in `modules/core/exported`. This is accomplished via the `RegisterInterfaces` method which provides the light client module with the opportunity to register codec types using the chain's `InterfaceRegistry`. Please refer to the [`07-tendermint` codec registration](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/codec.go#L11).
+
+The `AppModuleBasic` interface may also be leveraged to install custom CLI handlers for light client module users. Light client modules can safely no-op for interface methods which it does not wish to implement.
+
+Please refer to the [core IBC documentation](../../01-ibc/02-integration.md#integrating-light-clients) for how to configure additional light client modules alongside `07-tendermint` in `app.go`.
+
+See below for an example of the `07-tendermint` implementation of `AppModuleBasic`.
+
+```go
+var _ module.AppModuleBasic = AppModuleBasic{}
+
+// AppModuleBasic defines the basic application module used by the tendermint light client.
+// Only the RegisterInterfaces function needs to be implemented. All other function perform
+// a no-op.
+type AppModuleBasic struct{}
+
+// Name returns the tendermint module name.
+func (AppModuleBasic) Name() string {
+ return ModuleName
+}
+
+// RegisterLegacyAminoCodec performs a no-op. The Tendermint client does not support amino.
+func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {}
+
+// RegisterInterfaces registers module concrete types into protobuf Any. This allows core IBC
+// to unmarshal tendermint light client types.
+func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {
+ RegisterInterfaces(registry)
+}
+
+// DefaultGenesis performs a no-op. Genesis is not supported for the tendermint light client.
+func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {
+ return nil
+}
+
+// ValidateGenesis performs a no-op. Genesis is not supported for the tendermint light cilent.
+func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error {
+ return nil
+}
+
+// RegisterGRPCGatewayRoutes performs a no-op.
+func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {}
+
+// GetTxCmd performs a no-op. Please see the 02-client cli commands.
+func (AppModuleBasic) GetTxCmd() *cobra.Command {
+ return nil
+}
+
+// GetQueryCmd performs a no-op. Please see the 02-client cli commands.
+func (AppModuleBasic) GetQueryCmd() *cobra.Command {
+ return nil
+}
+```
+
+## Creating clients
+
+A client is created by executing a new `MsgCreateClient` transaction composed with a valid `ClientState` and initial `ConsensusState` encoded as protobuf `Any`s.
+Generally, this is performed by an off-chain process known as an [IBC relayer](https://github.com/cosmos/ibc/tree/main/spec/relayer/ics-018-relayer-algorithms) however, this is not a strict requirement.
+
+See below for a list of IBC relayer implementations:
+
+- [cosmos/relayer](https://github.com/cosmos/relayer)
+- [informalsystems/hermes](https://github.com/informalsystems/hermes)
+- [confio/ts-relayer](https://github.com/confio/ts-relayer)
+
+Stateless checks are performed within the [`ValidateBasic`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/types/msgs.go#L48) method of `MsgCreateClient`.
+
+```protobuf
+// MsgCreateClient defines a message to create an IBC client
+message MsgCreateClient {
+ option (gogoproto.goproto_getters) = false;
+
+ // light client state
+ google.protobuf.Any client_state = 1 [(gogoproto.moretags) = "yaml:\"client_state\""];
+ // consensus state associated with the client that corresponds to a given
+ // height.
+ google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""];
+ // signer address
+ string signer = 3;
+}
+```
+
+Leveraging protobuf `Any` encoding allows core IBC to [unpack](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/keeper/msg_server.go#L28-L36) both the `ClientState` and `ConsensusState` into their respective interface types registered previously using the light client module's `RegisterInterfaces` method.
+
+Within the `02-client` submodule, the [`ClientState` is then initialized](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L30-L32) with its own isolated key-value store, namespaced using a unique client identifier.
+
+In order to successfully create an IBC client using a new client type, it [must be supported](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L19-L25). Light client support in IBC is gated by on-chain governance. The allow list may be updated by submitting a new governance proposal to update the `02-client` parameter `AllowedClients`.
+
+See below for example:
+
+```shell
+%s tx gov submit-proposal --from
+```
+
+where `proposal.json` contains:
+
+```json
+{
+ "title": "IBC Clients Param Change",
+ "summary": "Update allowed clients",
+ "messages": [
+ {
+ "@type": "/ibc.core.client.v1.MsgUpdateParams",
+ "signer": "cosmos1...", // The gov module account address
+ "params": {
+ "allowed_clients": ["06-solomachine", "07-tendermint", "0x-new-client"]
+ }
+ }
+ ],
+ "metadata": "AQ==",
+ "deposit": "100stake"
+}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json
new file mode 100644
index 00000000000..9be9c3c3a08
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Developer Guide",
+ "position": 1,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md
new file mode 100644
index 00000000000..d32ccb01684
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md
@@ -0,0 +1,46 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /ibc/light-clients/localhost/overview
+---
+
+
+# `09-localhost`
+
+## Overview
+
+:::note Synopsis
+Learn about the 09-localhost light client module.
+:::
+
+The 09-localhost light client module implements a localhost loopback client with the ability to send and receive IBC packets to and from the same state machine.
+
+### Context
+
+In a multichain environment, application developers will be used to developing cross-chain applications through IBC. From their point of view, whether or not they are interacting with multiple modules on the same chain or on different chains should not matter. The localhost client module enables a unified interface to interact with different applications on a single chain, using the familiar IBC application layer semantics.
+
+### Implementation
+
+There exists a [single sentinel `ClientState`](03-client-state.md) instance with the client identifier `09-localhost`.
+
+To supplement this, a [sentinel `ConnectionEnd` is stored in core IBC](04-connection.md) state with the connection identifier `connection-localhost`. This enables IBC applications to create channels directly on top of the sentinel connection which leverage the 09-localhost loopback functionality.
+
+[State verification](05-state-verification.md) for channel state in handshakes or processing packets is reduced in complexity, the `09-localhost` client can simply compare bytes stored under the standardized key paths.
+
+### Localhost vs *regular* client
+
+The localhost client aims to provide a unified approach to interacting with applications on a single chain, as the IBC application layer provides for cross-chain interactions. To achieve this unified interface though, there are a number of differences under the hood compared to a 'regular' IBC client (excluding `06-solomachine` and `09-localhost` itself).
+
+The table below lists some important differences:
+
+| | Regular client | Localhost |
+| -------------------------------------------- | --------------------------------------------------------------------------- | --------- |
+| Number of clients | Many instances of a client *type* corresponding to different counterparties | A single sentinel client with the client identifier `09-localhost`|
+| Client creation | Relayer (permissionless) | `ClientState` is instantiated in the `InitGenesis` handler of the 02-client submodule in core IBC |
+| Client updates | Relayer submits headers using `MsgUpdateClient` | Latest height is updated periodically through the ABCI [`BeginBlock`](https://docs.cosmos.network/v0.47/building-modules/beginblock-endblock) interface of the 02-client submodule in core IBC |
+| Number of connections | Many connections, 1 (or more) per client | A single sentinel connection with the connection identifier `connection-localhost` |
+| Connection creation | Connection handshake, provided underlying client | Sentinel `ConnectionEnd` is created and set in store in the `InitGenesis` handler of the 03-connection submodule in core IBC |
+| Counterparty | Underlying client, representing another chain | Client with identifier `09-localhost` in same chain |
+| `VerifyMembership` and `VerifyNonMembership` | Performs proof verification using consensus state roots | Performs state verification using key-value lookups in the core IBC store |
+| Integration | Expected to register codec types using the `AppModuleBasic` interface | Registers codec types within the core IBC module |
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md
new file mode 100644
index 00000000000..01f77fce67e
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md
@@ -0,0 +1,20 @@
+---
+title: Integration
+sidebar_label: Integration
+sidebar_position: 2
+slug: /ibc/light-clients/localhost/integration
+---
+
+
+# Integration
+
+The 09-localhost light client module registers codec types within the core IBC module. This differs from other light client module implementations which are expected to register codec types using the `AppModuleBasic` interface.
+
+The localhost client is added to the 02-client submodule param [`allowed_clients`](https://github.com/cosmos/ibc-go/blob/v7.0.0/proto/ibc/core/client/v1/client.proto#L102) by default in ibc-go.
+
+```go
+var (
+ // DefaultAllowedClients are the default clients for the AllowedClients parameter.
+ DefaultAllowedClients = []string{exported.Solomachine, exported.Tendermint, exported.Localhost}
+)
+```
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md
new file mode 100644
index 00000000000..19e03b62aa9
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md
@@ -0,0 +1,64 @@
+---
+title: ClientState
+sidebar_label: ClientState
+sidebar_position: 3
+slug: /ibc/light-clients/localhost/client-state
+---
+
+
+# `ClientState`
+
+The 09-localhost `ClientState` maintains a single field used to track the latest sequence of the state machine i.e. the height of the blockchain.
+
+```go
+type ClientState struct {
+ // the latest height of the blockchain
+ LatestHeight clienttypes.Height
+}
+```
+
+The 09-localhost `ClientState` is instantiated in the `InitGenesis` handler of the 02-client submodule in core IBC.
+It calls `CreateLocalhostClient`, declaring a new `ClientState` and initializing it with its own client prefixed store.
+
+```go
+func (k Keeper) CreateLocalhostClient(ctx sdk.Context) error {
+ var clientState localhost.ClientState
+ return clientState.Initialize(ctx, k.cdc, k.ClientStore(ctx, exported.LocalhostClientID), nil)
+}
+```
+
+It is possible to disable the localhost client by removing the `09-localhost` entry from the `allowed_clients` list through governance.
+
+## Client updates
+
+The latest height is updated periodically through the ABCI [`BeginBlock`](https://docs.cosmos.network/v0.47/building-modules/beginblock-endblock) interface of the 02-client submodule in core IBC.
+
+[See `BeginBlocker` in abci.go.](https://github.com/cosmos/ibc-go/blob/09-localhost/modules/core/02-client/abci.go#L12)
+
+```go
+func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
+ // ...
+
+ if clientState, found := k.GetClientState(ctx, exported.Localhost); found {
+ if k.GetClientStatus(ctx, clientState, exported.Localhost) == exported.Active {
+ k.UpdateLocalhostClient(ctx, clientState)
+ }
+ }
+}
+```
+
+The above calls into the 09-localhost `UpdateState` method of the `ClientState` .
+It retrieves the current block height from the application context and sets the `LatestHeight` of the 09-localhost client.
+
+```go
+func (cs ClientState) UpdateState(ctx sdk.Context, cdc codec.BinaryCodec, clientStore sdk.KVStore, clientMsg exported.ClientMessage) []exported.Height {
+ height := clienttypes.GetSelfHeight(ctx)
+ cs.LatestHeight = height
+
+ clientStore.Set(host.ClientStateKey(), clienttypes.MustMarshalClientState(cdc, &cs))
+
+ return []exported.Height{height}
+}
+```
+
+Note that the 09-localhost `ClientState` is not updated through the 02-client interface leveraged by conventional IBC light clients.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md
new file mode 100644
index 00000000000..160c814d229
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md
@@ -0,0 +1,29 @@
+---
+title: Connection
+sidebar_label: Connection
+sidebar_position: 4
+slug: /ibc/light-clients/localhost/connection
+---
+
+
+# Localhost connections
+
+The 09-localhost light client module integrates with core IBC through a single sentinel localhost connection.
+The sentinel `ConnectionEnd` is stored by default in the core IBC store.
+
+This enables channel handshakes to be initiated out of the box by supplying the localhost connection identifier (`connection-localhost`) in the `connectionHops` parameter of `MsgChannelOpenInit`.
+
+The `ConnectionEnd` is created and set in store via the `InitGenesis` handler of the 03-connection submodule in core IBC.
+The `ConnectionEnd` and its `Counterparty` both reference the `09-localhost` client identifier, and share the localhost connection identifier `connection-localhost`.
+
+```go
+// CreateSentinelLocalhostConnection creates and sets the sentinel localhost connection end in the IBC store.
+func (k Keeper) CreateSentinelLocalhostConnection(ctx sdk.Context) {
+ counterparty := types.NewCounterparty(exported.LocalhostClientID, exported.LocalhostConnectionID, commitmenttypes.NewMerklePrefix(k.GetCommitmentPrefix().Bytes()))
+ connectionEnd := types.NewConnectionEnd(types.OPEN, exported.LocalhostClientID, counterparty, types.GetCompatibleVersions(), 0)
+
+ k.SetConnection(ctx, exported.LocalhostConnectionID, connectionEnd)
+}
+```
+
+Note that connection handshakes are disallowed when using the `09-localhost` client type.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md
new file mode 100644
index 00000000000..ddf4f03de10
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md
@@ -0,0 +1,22 @@
+---
+title: State Verification
+sidebar_label: State Verification
+sidebar_position: 5
+slug: /ibc/light-clients/localhost/state-verification
+---
+
+
+# State verification
+
+The localhost client handles state verification through the `ClientState` interface methods `VerifyMembership` and `VerifyNonMembership` by performing read-only operations directly on the core IBC store.
+
+When verifying channel state in handshakes or processing packets the `09-localhost` client can simply compare bytes stored under the standardized key paths defined by [ICS-24](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements).
+
+For existence proofs via `VerifyMembership` the 09-localhost client will retrieve the value stored under the provided key path and compare it against the value provided by the caller. In contrast, non-existence proofs via `VerifyNonMembership` assert the absence of a value at the provided key path.
+
+Relayers are expected to provide a sentinel proof when sending IBC messages. Submission of nil or empty proofs is disallowed in core IBC messaging.
+The 09-localhost light client module defines a `SentinelProof` as a single byte. Localhost client state verification will fail if the sentinel proof value is not provided.
+
+```go
+var SentinelProof = []byte{0x01}
+```
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json
new file mode 100644
index 00000000000..0dc062d29e6
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Localhost",
+ "position": 2,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md
new file mode 100644
index 00000000000..394e5ec6efb
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md
@@ -0,0 +1,26 @@
+---
+title: Solomachine
+sidebar_label: Solomachine
+sidebar_position: 1
+slug: /ibc/light-clients/solomachine/solomachine
+---
+
+
+# `solomachine`
+
+## Abstract
+
+This paper defines the implementation of the ICS06 protocol on the Cosmos SDK. For the general
+specification please refer to the [ICS06 Specification](https://github.com/cosmos/ibc/tree/master/spec/client/ics-006-solo-machine-client).
+
+This implementation of a solo machine light client supports single and multi-signature public
+keys. The client is capable of handling public key updates by header and governance proposals.
+The light client is capable of processing client misbehaviour. Proofs of the counterparty state
+are generated by the solo machine client by signing over the desired state with a certain sequence,
+diversifier, and timestamp.
+
+## Contents
+
+1. **[Concepts](02-concepts.md)**
+2. **[State](03-state.md)**
+3. **[State Transitions](04-state_transitions.md)**
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md
new file mode 100644
index 00000000000..270dab232a6
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md
@@ -0,0 +1,168 @@
+---
+title: Concepts
+sidebar_label: Concepts
+sidebar_position: 2
+slug: /ibc/light-clients/solomachine/concepts
+---
+
+
+# Concepts
+
+## Client State
+
+The `ClientState` for a solo machine light client stores the latest sequence, the frozen sequence,
+the latest consensus state, and client flag indicating if the client should be allowed to be updated
+after a governance proposal.
+
+If the client is not frozen then the frozen sequence is 0.
+
+## Consensus State
+
+The consensus states stores the public key, diversifier, and timestamp of the solo machine light client.
+
+The diversifier is used to prevent accidental misbehaviour if the same public key is used across
+different chains with the same client identifier. It should be unique to the chain the light client
+is used on.
+
+## Public Key
+
+The public key can be a single public key or a multi-signature public key. The public key type used
+must fulfill the tendermint public key interface (this will become the SDK public key interface in the
+near future). The public key must be registered on the application codec otherwise encoding/decoding
+errors will arise. The public key stored in the consensus state is represented as a protobuf `Any`.
+This allows for flexibility in what other public key types can be supported in the future.
+
+## Counterparty Verification
+
+The solo machine light client can verify counterparty client state, consensus state, connection state,
+channel state, packet commitments, packet acknowledgements, packet receipt absence,
+and the next sequence receive. At the end of each successful verification call the light
+client sequence number will be incremented.
+
+Successful verification requires the current public key to sign over the proof.
+
+## Proofs
+
+A solo machine proof should verify that the solomachine public key signed
+over some specified data. The format for generating marshaled proofs for
+the SDK's implementation of solo machine is as follows:
+
+1. Construct the data using the associated protobuf definition and marshal it.
+
+For example:
+
+```go
+data := &ClientStateData{
+ Path: []byte(path.String()),
+ ClientState: protoAny,
+}
+
+dataBz, err := cdc.Marshal(data)
+```
+
+The helper functions `...DataBytes()` in [proof.go](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine/proof.go) handle this
+functionality.
+
+2. Construct the `SignBytes` and marshal it.
+
+For example:
+
+```go
+signBytes := &SignBytes{
+ Sequence: sequence,
+ Timestamp: timestamp,
+ Diversifier: diversifier,
+ DataType: CLIENT,
+ Data: dataBz,
+}
+
+signBz, err := cdc.Marshal(signBytes)
+```
+
+The helper functions `...SignBytes()` in [proof.go](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine/proof.go) handle this functionality.
+The `DataType` field is used to disambiguate what type of data was signed to prevent potential
+proto encoding overlap.
+
+3. Sign the sign bytes. Embed the signatures into either `SingleSignatureData` or `MultiSignatureData`.
+Convert the `SignatureData` to proto and marshal it.
+
+For example:
+
+```go
+sig, err := key.Sign(signBz)
+sigData := &signing.SingleSignatureData{
+ Signature: sig,
+}
+
+protoSigData := signing.SignatureDataToProto(sigData)
+bz, err := cdc.Marshal(protoSigData)
+```
+
+4. Construct a `TimestampedSignatureData` and marshal it. The marshaled result can be passed in
+as the proof parameter to the verification functions.
+
+For example:
+
+```go
+timestampedSignatureData := &solomachine.TimestampedSignatureData{
+ SignatureData: sigData,
+ Timestamp: solomachine.Time,
+}
+
+proof, err := cdc.Marshal(timestampedSignatureData)
+```
+
+NOTE: At the end of this process, the sequence associated with the key needs to be updated.
+The sequence must be incremented each time proof is generated.
+
+## Updates By Header
+
+An update by a header will only succeed if:
+
+- the header provided is parseable to solo machine header
+- the header sequence matches the current sequence
+- the header timestamp is greater than or equal to the consensus state timestamp
+- the currently registered public key generated the proof
+
+If the update is successful:
+
+- the public key is updated
+- the diversifier is updated
+- the timestamp is updated
+- the sequence is incremented by 1
+- the new consensus state is set in the client state
+
+## Updates By Proposal
+
+An update by a governance proposal will only succeed if:
+
+- the substitute provided is parseable to solo machine client state
+- the new consensus state public key does not equal the current consensus state public key
+
+If the update is successful:
+
+- the subject client state is updated to the substitute client state
+- the subject consensus state is updated to the substitute consensus state
+- the client is unfrozen (if it was previously frozen)
+
+NOTE: Previously, `AllowUpdateAfterProposal` was used to signal the update/recovery options for the solo machine client. However, this has now been deprecated because a code migration can overwrite the client and consensus states regardless of the value of this parameter. If governance would vote to overwrite a client or consensus state, it is likely that governance would also be willing to perform a code migration to do the same.
+
+## Misbehaviour
+
+Misbehaviour handling will only succeed if:
+
+- the misbehaviour provided is parseable to solo machine misbehaviour
+- the client is not already frozen
+- the current public key signed over two unique data messages at the same sequence and diversifier.
+
+If the misbehaviour is successfully processed:
+
+- the client is frozen by setting the frozen sequence to the misbehaviour sequence
+
+NOTE: Misbehaviour processing is data processing order dependent. A misbehaving solo machine
+could update to a new public key to prevent being frozen before misbehaviour is submitted.
+
+## Upgrades
+
+Upgrades to solo machine light clients are not supported since an entirely different type of
+public key can be set using normal client updates.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md
new file mode 100644
index 00000000000..90d017473c3
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md
@@ -0,0 +1,12 @@
+---
+title: State
+sidebar_label: State
+sidebar_position: 3
+slug: /ibc/light-clients/solomachine/state
+---
+
+
+# State
+
+The solo machine light client will only store consensus states for each update by a header
+or a governance proposal. The latest client state is also maintained in the store.
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md
new file mode 100644
index 00000000000..22a456fcc0e
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md
@@ -0,0 +1,43 @@
+---
+title: State Transitions
+sidebar_label: State Transitions
+sidebar_position: 4
+slug: /ibc/light-clients/solomachine/state_transitions
+---
+
+
+# State Transitions
+
+## Client State Verification Functions
+
+Successful state verification by a solo machine light client will result in:
+
+- the sequence being incremented by 1.
+
+## Update By Header
+
+A successful update of a solo machine light client by a header will result in:
+
+- the public key being updated to the new public key provided by the header.
+- the diversifier being updated to the new diviersifier provided by the header.
+- the timestamp being updated to the new timestamp provided by the header.
+- the sequence being incremented by 1
+- the consensus state being updated (consensus state stores the public key, diversifier, and timestamp)
+
+## Update By Governance Proposal
+
+A successful update of a solo machine light client by a governance proposal will result in:
+
+- the client state being updated to the substitute client state
+- the consensus state being updated to the substitute consensus state (consensus state stores the public key, diversifier, and timestamp)
+- the frozen sequence being set to zero (client is unfrozen if it was previously frozen).
+
+## Upgrade
+
+Client udgrades are not supported for the solo machine light client. No state transition occurs.
+
+## Misbehaviour
+
+Successful misbehaviour processing of a solo machine light client will result in:
+
+- the frozen sequence being set to the sequence the misbehaviour occurred at
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json
new file mode 100644
index 00000000000..de0a6927408
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Solomachine",
+ "position": 3,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json
new file mode 100644
index 00000000000..8e1f221f353
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "IBC Light Clients",
+ "position": 3,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md
new file mode 100644
index 00000000000..5b576061a04
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md
@@ -0,0 +1,54 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /middleware/ics29-fee/overview
+---
+
+# Overview
+
+:::note Synopsis
+Learn about what the Fee Middleware module is, and how to build custom modules that utilize the Fee Middleware functionality
+:::
+
+## What is the Fee Middleware module?
+
+IBC does not depend on relayer operators for transaction verification. However, the relayer infrastructure ensures liveness of the Interchain network — operators listen for packets sent through channels opened between chains, and perform the vital service of ferrying these packets (and proof of the transaction on the sending chain/receipt on the receiving chain) to the clients on each side of the channel.
+
+Though relaying is permissionless and completely decentralized and accessible, it does come with operational costs. Running full nodes to query transaction proofs and paying for transaction fees associated with IBC packets are two of the primary cost burdens which have driven the overall discussion on **a general, in-protocol incentivization mechanism for relayers**.
+
+Initially, a [simple proposal](https://github.com/cosmos/ibc/pull/577/files) was created to incentivize relaying on ICS20 token transfers on the destination chain. However, the proposal was specific to ICS20 token transfers and would have to be reimplemented in this format on every other IBC application module.
+
+After much discussion, the proposal was expanded to a [general incentivisation design](https://github.com/cosmos/ibc/tree/master/spec/app/ics-029-fee-payment) that can be adopted by any ICS application protocol as [middleware](../../01-ibc/04-middleware/02-develop.md).
+
+## Concepts
+
+ICS29 fee payments in this middleware design are built on the assumption that sender chains are the source of incentives — the chain on which packets are incentivized is the chain that distributes fees to relayer operators. However, as part of the IBC packet flow, messages have to be submitted on both sender and destination chains. This introduces the requirement of a mapping of relayer operator's addresses on both chains.
+
+To achieve the stated requirements, the **fee middleware module has two main groups of functionality**:
+
+- Registering of relayer addresses associated with each party involved in relaying the packet on the source chain. This registration process can be automated on start up of relayer infrastructure and happens only once, not every packet flow.
+
+ This is described in the [Fee distribution section](04-fee-distribution.md).
+
+- Escrowing fees by any party which will be paid out to each rightful party on completion of the packet lifecycle.
+
+ This is described in the [Fee messages section](03-msgs.md).
+
+We complete the introduction by giving a list of definitions of relevant terminology.
+
+`Forward relayer`: The relayer that submits the `MsgRecvPacket` message for a given packet (on the destination chain).
+
+`Reverse relayer`: The relayer that submits the `MsgAcknowledgement` message for a given packet (on the source chain).
+
+`Timeout relayer`: The relayer that submits the `MsgTimeout` or `MsgTimeoutOnClose` messages for a given packet (on the source chain).
+
+`Payee`: The account address on the source chain to be paid on completion of the packet lifecycle. The packet lifecycle on the source chain completes with the receipt of a `MsgTimeout`/`MsgTimeoutOnClose` or a `MsgAcknowledgement`.
+
+`Counterparty payee`: The account address to be paid on completion of the packet lifecycle on the destination chain. The package lifecycle on the destination chain completes with a successful `MsgRecvPacket`.
+
+`Refund address`: The address of the account paying for the incentivization of packet relaying. The account is refunded timeout fees upon successful acknowledgement. In the event of a packet timeout, both acknowledgement and receive fees are refunded.
+
+## Known Limitations
+
+The first version of fee payments middleware will only support incentivisation of new channels, however, channel upgradeability will enable incentivisation of all existing channels.
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md
new file mode 100644
index 00000000000..343e09fb11e
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md
@@ -0,0 +1,177 @@
+---
+title: Integration
+sidebar_label: Integration
+sidebar_position: 2
+slug: /middleware/ics29-fee/integration
+---
+
+# Integration
+
+:::note Synopsis
+Learn how to configure the Fee Middleware module with IBC applications. The following document is intended for developers building on top of the Cosmos SDK and only applies for Cosmos SDK chains.
+:::
+
+:::note
+
+## Pre-requisite Readings
+
+- [IBC middleware development](../../01-ibc/04-middleware/02-develop.md)
+- [IBC middleware integration](../../01-ibc/04-middleware/03-integration.md)
+
+:::
+
+The Fee Middleware module, as the name suggests, plays the role of an IBC middleware and as such must be configured by chain developers to route and handle IBC messages correctly.
+For Cosmos SDK chains this setup is done via the `app/app.go` file, where modules are constructed and configured in order to bootstrap the blockchain application.
+
+## Example integration of the Fee Middleware module
+
+```go
+// app.go
+
+// Register the AppModule for the fee middleware module
+ModuleBasics = module.NewBasicManager(
+ ...
+ ibcfee.AppModuleBasic{},
+ ...
+)
+
+...
+
+// Add module account permissions for the fee middleware module
+maccPerms = map[string][]string{
+ ...
+ ibcfeetypes.ModuleName: nil,
+}
+
+...
+
+// Add fee middleware Keeper
+type App struct {
+ ...
+
+ IBCFeeKeeper ibcfeekeeper.Keeper
+
+ ...
+}
+
+...
+
+// Create store keys
+keys := sdk.NewKVStoreKeys(
+ ...
+ ibcfeetypes.StoreKey,
+ ...
+)
+
+...
+
+app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(
+ appCodec, keys[ibcfeetypes.StoreKey],
+ app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware
+ app.IBCKeeper.ChannelKeeper,
+ &app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper,
+)
+
+
+// See the section below for configuring an application stack with the fee middleware module
+
+...
+
+// Register fee middleware AppModule
+app.moduleManager = module.NewManager(
+ ...
+ ibcfee.NewAppModule(app.IBCFeeKeeper),
+)
+
+...
+
+// Add fee middleware to begin blocker logic
+app.moduleManager.SetOrderBeginBlockers(
+ ...
+ ibcfeetypes.ModuleName,
+ ...
+)
+
+// Add fee middleware to end blocker logic
+app.moduleManager.SetOrderEndBlockers(
+ ...
+ ibcfeetypes.ModuleName,
+ ...
+)
+
+// Add fee middleware to init genesis logic
+app.moduleManager.SetOrderInitGenesis(
+ ...
+ ibcfeetypes.ModuleName,
+ ...
+)
+```
+
+## Configuring an application stack with Fee Middleware
+
+As mentioned in [IBC middleware development](../../01-ibc/04-middleware/02-develop.md) an application stack may be composed of many or no middlewares that nest a base application.
+These layers form the complete set of application logic that enable developers to build composable and flexible IBC application stacks.
+For example, an application stack may be just a single base application like `transfer`, however, the same application stack composed with `29-fee` will nest the `transfer` base application
+by wrapping it with the Fee Middleware module.
+
+### Transfer
+
+See below for an example of how to create an application stack using `transfer` and `29-fee`.
+The following `transferStack` is configured in `app/app.go` and added to the IBC `Router`.
+The in-line comments describe the execution flow of packets between the application stack and IBC core.
+
+```go
+// Create Transfer Stack
+// SendPacket, since it is originating from the application to core IBC:
+// transferKeeper.SendPacket -> fee.SendPacket -> channel.SendPacket
+
+// RecvPacket, message that originates from core IBC and goes down to app, the flow is the other way
+// channel.RecvPacket -> fee.OnRecvPacket -> transfer.OnRecvPacket
+
+// transfer stack contains (from top to bottom):
+// - IBC Fee Middleware
+// - Transfer
+
+// create IBC module from bottom to top of stack
+var transferStack porttypes.IBCModule
+transferStack = transfer.NewIBCModule(app.TransferKeeper)
+transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper)
+
+// Add transfer stack to IBC Router
+ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack)
+```
+
+### Interchain Accounts
+
+See below for an example of how to create an application stack using `27-interchain-accounts` and `29-fee`.
+The following `icaControllerStack` and `icaHostStack` are configured in `app/app.go` and added to the IBC `Router` with the associated authentication module.
+The in-line comments describe the execution flow of packets between the application stack and IBC core.
+
+```go
+// Create Interchain Accounts Stack
+// SendPacket, since it is originating from the application to core IBC:
+// icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket
+
+// initialize ICA module with mock module as the authentication module on the controller side
+var icaControllerStack porttypes.IBCModule
+icaControllerStack = ibcmock.NewIBCModule(&mockModule, ibcmock.NewMockIBCApp("", scopedICAMockKeeper))
+app.ICAAuthModule = icaControllerStack.(ibcmock.IBCModule)
+icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper)
+icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper)
+
+// RecvPacket, message that originates from core IBC and goes down to app, the flow is:
+// channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket
+
+var icaHostStack porttypes.IBCModule
+icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper)
+icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper)
+
+// Add authentication module, controller and host to IBC router
+ibcRouter.
+ // the ICA Controller middleware needs to be explicitly added to the IBC Router because the
+ // ICA controller module owns the port capability for ICA. The ICA authentication module
+ // owns the channel capability.
+ AddRoute(ibcmock.ModuleName+icacontrollertypes.SubModuleName, icaControllerStack) // ica with mock auth module stack route to ica (top level of middleware stack)
+ AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
+ AddRoute(icahosttypes.SubModuleName, icaHostStack).
+```
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md
new file mode 100644
index 00000000000..4496df29f98
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md
@@ -0,0 +1,95 @@
+---
+title: Fee Messages
+sidebar_label: Fee Messages
+sidebar_position: 3
+slug: /middleware/ics29-fee/msgs
+---
+
+# Fee messages
+
+:::note Synopsis
+Learn about the different ways to pay for fees, how the fees are paid out and what happens when not enough escrowed fees are available for payout
+:::
+
+## Escrowing fees
+
+The fee middleware module exposes two different ways to pay fees for relaying IBC packets:
+
+### `MsgPayPacketFee`
+
+`MsgPayPacketFee` enables the escrowing of fees for a packet at the next sequence send and should be combined into one `MultiMsgTx` with the message that will be paid for. Note that the `Relayers` field has been set up to allow for an optional whitelist of relayers permitted to receive this fee, however, this feature has not yet been enabled at this time.
+
+```go
+type MsgPayPacketFee struct{
+ // fee encapsulates the recv, ack and timeout fees associated with an IBC packet
+ Fee Fee
+ // the source port unique identifier
+ SourcePortId string
+ // the source channel unique identifer
+ SourceChannelId string
+ // account address to refund fee if necessary
+ Signer string
+ // optional list of relayers permitted to the receive packet fee
+ Relayers []string
+}
+```
+
+The `Fee` message contained in this synchronous fee payment method configures different fees which will be paid out for `MsgRecvPacket`, `MsgAcknowledgement`, and `MsgTimeout`/`MsgTimeoutOnClose`.
+
+```go
+type Fee struct {
+ RecvFee types.Coins
+ AckFee types.Coins
+ TimeoutFee types.Coins
+}
+```
+
+The diagram below shows the `MultiMsgTx` with the `MsgTransfer` coming from a token transfer message, along with `MsgPayPacketFee`.
+
+![msgpaypacket.png](./images/msgpaypacket.png)
+
+### `MsgPayPacketFeeAsync`
+
+`MsgPayPacketFeeAsync` enables the asynchronous escrowing of fees for a specified packet. Note that a packet can be 'topped up' multiple times with additional fees of any coin denomination by broadcasting multiple `MsgPayPacketFeeAsync` messages.
+
+```go
+type MsgPayPacketFeeAsync struct {
+ // unique packet identifier comprised of the channel ID, port ID and sequence
+ PacketId channeltypes.PacketId
+ // the packet fee associated with a particular IBC packet
+ PacketFee PacketFee
+}
+```
+
+where the `PacketFee` also specifies the `Fee` to be paid as well as the refund address for fees which are not paid out
+
+```go
+type PacketFee struct {
+ Fee Fee
+ RefundAddress string
+ Relayers []string
+}
+```
+
+The diagram below shows how multiple `MsgPayPacketFeeAsync` can be broadcasted asynchronously. Escrowing of the fee associated with a packet can be carried out by any party because ICS-29 does not dictate a particular fee payer. In fact, chains can choose to simply not expose this fee payment to end users at all and rely on a different module account or even the community pool as the source of relayer incentives.
+
+![paypacketfeeasync.png](./images/paypacketfeeasync.png)
+
+Please see our [wiki](https://github.com/cosmos/ibc-go/wiki/Fee-enabled-fungible-token-transfers) for example flows on how to use these messages to incentivise a token transfer channel using a CLI.
+
+## Paying out the escrowed fees
+
+Following diagram takes a look at the packet flow for an incentivized token transfer and investigates the several scenario's for paying out the escrowed fees. We assume that the relayers have registered their counterparty address, detailed in the [Fee distribution section](04-fee-distribution.md).
+
+![feeflow.png](./images/feeflow.png)
+
+- In the case of a successful transaction, `RecvFee` will be paid out to the designated counterparty payee address which has been registered on the receiver chain and sent back with the `MsgAcknowledgement`, `AckFee` will be paid out to the relayer address which has submitted the `MsgAcknowledgement` on the sending chain (or the registered payee in case one has been registered for the relayer address), and `TimeoutFee` will be reimbursed to the account which escrowed the fee.
+- In case of a timeout transaction, `RecvFee` and `AckFee` will be reimbursed. The `TimeoutFee` will be paid to the `Timeout Relayer` (who submits the timeout message to the source chain).
+
+> Please note that fee payments are built on the assumption that sender chains are the source of incentives — the chain that sends the packets is the same chain where fee payments will occur -- please see the [Fee distribution section](04-fee-distribution.md) to understand the flow for registering payee and counterparty payee (fee receiving) addresses.
+
+## A locked fee middleware module
+
+The fee middleware module can become locked if the situation arises that the escrow account for the fees does not have sufficient funds to pay out the fees which have been escrowed for each packet. *This situation indicates a severe bug.* In this case, the fee module will be locked until manual intervention fixes the issue.
+
+> A locked fee module will simply skip fee logic and continue on to the underlying packet flow. A channel with a locked fee module will temporarily function as a fee disabled channel, and the locking of a fee module will not affect the continued flow of packets over the channel.
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md
new file mode 100644
index 00000000000..d66c067bdac
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md
@@ -0,0 +1,117 @@
+---
+title: Fee Distribution
+sidebar_label: Fee Distribution
+sidebar_position: 4
+slug: /middleware/ics29-fee/fee-distribution
+---
+
+# Fee distribution
+
+:::note Synopsis
+Learn about payee registration for the distribution of packet fees. The following document is intended for relayer operators.
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [Fee Middleware](01-overview.md)
+
+:::
+
+Packet fees are divided into 3 distinct amounts in order to compensate relayer operators for packet relaying on fee enabled IBC channels.
+
+- `RecvFee`: The sum of all packet receive fees distributed to a payee for successful execution of `MsgRecvPacket`.
+- `AckFee`: The sum of all packet acknowledgement fees distributed to a payee for successful execution of `MsgAcknowledgement`.
+- `TimeoutFee`: The sum of all packet timeout fees distributed to a payee for successful execution of `MsgTimeout`.
+
+## Register a counterparty payee address for forward relaying
+
+As mentioned in [ICS29 Concepts](01-overview.md#concepts), the forward relayer describes the actor who performs the submission of `MsgRecvPacket` on the destination chain.
+Fee distribution for incentivized packet relays takes place on the packet source chain.
+
+> Relayer operators are expected to register a counterparty payee address, in order to be compensated accordingly with `RecvFee`s upon completion of a packet lifecycle.
+
+The counterparty payee address registered on the destination chain is encoded into the packet acknowledgement and communicated as such to the source chain for fee distribution.
+**If a counterparty payee is not registered for the forward relayer on the destination chain, the escrowed fees will be refunded upon fee distribution.**
+
+### Relayer operator actions
+
+A transaction must be submitted **to the destination chain** including a `CounterpartyPayee` address of an account on the source chain.
+The transaction must be signed by the `Relayer`.
+
+Note: If a module account address is used as the `CounterpartyPayee` but the module has been set as a blocked address in the `BankKeeper`, the refunding to the module account will fail. This is because many modules use invariants to compare internal tracking of module account balances against the actual balance of the account stored in the `BankKeeper`. If a token transfer to the module account occurs without going through this module and updating the account balance of the module on the `BankKeeper`, then invariants may break and unknown behaviour could occur depending on the module implementation. Therefore, if it is desirable to use a module account that is currently blocked, the module developers should be consulted to gauge to possibility of removing the module account from the blocked list.
+
+```go
+type MsgRegisterCounterpartyPayee struct {
+ // unique port identifier
+ PortId string
+ // unique channel identifier
+ ChannelId string
+ // the relayer address
+ Relayer string
+ // the counterparty payee address
+ CounterpartyPayee string
+}
+```
+
+> This message is expected to fail if:
+>
+> - `PortId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators).
+> - `ChannelId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)).
+> - `Relayer` is an invalid address (see [Cosmos SDK Addresses](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/beginner/03-accounts.md#addresses)).
+> - `CounterpartyPayee` is empty.
+
+See below for an example CLI command:
+
+```bash
+simd tx ibc-fee register-counterparty-payee transfer channel-0 \
+ cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh \
+ osmo1v5y0tz01llxzf4c2afml8s3awue0ymju22wxx2 \
+ --from cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh
+```
+
+## Register an alternative payee address for reverse and timeout relaying
+
+As mentioned in [ICS29 Concepts](01-overview.md#concepts), the reverse relayer describes the actor who performs the submission of `MsgAcknowledgement` on the source chain.
+Similarly the timeout relayer describes the actor who performs the submission of `MsgTimeout` (or `MsgTimeoutOnClose`) on the source chain.
+
+> Relayer operators **may choose** to register an optional payee address, in order to be compensated accordingly with `AckFee`s and `TimeoutFee`s upon completion of a packet life cycle.
+
+If a payee is not registered for the reverse or timeout relayer on the source chain, then fee distribution assumes the default behaviour, where fees are paid out to the relayer account which delivers `MsgAcknowledgement` or `MsgTimeout`/`MsgTimeoutOnClose`.
+
+### Relayer operator actions
+
+A transaction must be submitted **to the source chain** including a `Payee` address of an account on the source chain.
+The transaction must be signed by the `Relayer`.
+
+Note: If a module account address is used as the `Payee` it is recommended to [turn off invariant checks](https://github.com/cosmos/ibc-go/blob/v7.0.0/testing/simapp/app.go#L727) for that module.
+
+```go
+type MsgRegisterPayee struct {
+ // unique port identifier
+ PortId string
+ // unique channel identifier
+ ChannelId string
+ // the relayer address
+ Relayer string
+ // the payee address
+ Payee string
+}
+```
+
+> This message is expected to fail if:
+>
+> - `PortId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators).
+> - `ChannelId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)).
+> - `Relayer` is an invalid address (see [Cosmos SDK Addresses](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/beginner/03-accounts.md#addresses)).
+> - `Payee` is an invalid address (see [Cosmos SDK Addresses](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/beginner/03-accounts.md#addresses)).
+
+See below for an example CLI command:
+
+```bash
+simd tx ibc-fee register-payee transfer channel-0 \
+ cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh \
+ cosmos153lf4zntqt33a4v0sm5cytrxyqn78q7kz8j8x5 \
+ --from cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh
+```
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md
new file mode 100644
index 00000000000..610130fa578
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md
@@ -0,0 +1,43 @@
+---
+title: Events
+sidebar_label: Events
+sidebar_position: 5
+slug: /middleware/ics29-fee/events
+---
+
+
+# Events
+
+:::note Synopsis
+An overview of all events related to ICS-29
+:::
+
+## `MsgPayPacketFee`, `MsgPayPacketFeeAsync`
+
+| Type | Attribute Key | Attribute Value |
+| ----------------------- | --------------- | --------------- |
+| incentivized_ibc_packet | port_id | {portID} |
+| incentivized_ibc_packet | channel_id | {channelID} |
+| incentivized_ibc_packet | packet_sequence | {sequence} |
+| incentivized_ibc_packet | recv_fee | {recvFee} |
+| incentivized_ibc_packet | ack_fee | {ackFee} |
+| incentivized_ibc_packet | timeout_fee | {timeoutFee} |
+| message | module | fee-ibc |
+
+## `RegisterPayee`
+
+| Type | Attribute Key | Attribute Value |
+| -------------- | ------------- | --------------- |
+| register_payee | relayer | {relayer} |
+| register_payee | payee | {payee} |
+| register_payee | channel_id | {channelID} |
+| message | module | fee-ibc |
+
+## `RegisterCounterpartyPayee`
+
+| Type | Attribute Key | Attribute Value |
+| --------------------------- | ------------------ | ------------------- |
+| register_counterparty_payee | relayer | {relayer} |
+| register_counterparty_payee | counterparty_payee | {counterpartyPayee} |
+| register_counterparty_payee | channel_id | {channelID} |
+| message | module | fee-ibc |
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md
new file mode 100644
index 00000000000..f3985cc0358
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md
@@ -0,0 +1,39 @@
+---
+title: End Users
+sidebar_label: End Users
+sidebar_position: 6
+slug: /middleware/ics29-fee/end-users
+---
+
+# For end users
+
+:::note Synopsis
+Learn how to incentivize IBC packets using the ICS29 Fee Middleware module.
+:::
+
+:::note
+
+## Pre-requisite readings
+
+- [Fee Middleware](01-overview.md)
+
+:::
+
+## Summary
+
+Different types of end users:
+
+- CLI users who want to manually incentivize IBC packets
+- Client developers
+
+The Fee Middleware module allows end users to add a 'tip' to each IBC packet which will incentivize relayer operators to relay packets between chains. gRPC endpoints are exposed for client developers as well as a simple CLI for manually incentivizing IBC packets.
+
+## CLI Users
+
+For an in depth guide on how to use the ICS29 Fee Middleware module using the CLI please take a look at the [wiki](https://github.com/cosmos/ibc-go/wiki/Fee-enabled-fungible-token-transfers#asynchronous-incentivization-of-a-fungible-token-transfer) on the `ibc-go` repo.
+
+## Client developers
+
+Client developers can read more about the relevant ICS29 message types in the [Fee messages section](03-msgs.md).
+
+[CosmJS](https://github.com/cosmos/cosmjs) is a useful client library for signing and broadcasting Cosmos SDK messages.
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json
new file mode 100644
index 00000000000..ddca8d29da6
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Fee Middleware",
+ "position": 1,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/feeflow.png b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/feeflow.png
new file mode 100644
index 00000000000..ba02071f4d8
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/feeflow.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/msgpaypacket.png b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/msgpaypacket.png
new file mode 100644
index 00000000000..1bd5deb01fd
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/msgpaypacket.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png
new file mode 100644
index 00000000000..27c486a6f82
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/01-overview.md b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/01-overview.md
new file mode 100644
index 00000000000..70eefc31e7d
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/01-overview.md
@@ -0,0 +1,51 @@
+---
+title: Overview
+sidebar_label: Overview
+sidebar_position: 1
+slug: /middleware/callbacks/overview
+---
+
+# Overview
+
+Learn about what the Callbacks Middleware is, and how to build custom modules that utilize the Callbacks Middleware functionality {synopsis}
+
+## What is the Callbacks Middleware?
+
+IBC was designed with callbacks between core IBC and IBC applications. IBC apps would send a packet to core IBC, and receive a callback on every step of that packet's lifecycle. This allows IBC applications to be built on top of core IBC, and to be able to execute custom logic on packet lifecycle events (e.g. unescrow tokens for ICS-20).
+
+This setup worked well for off-chain users interacting with IBC applications. However, we are now seeing the desire for secondary applications (e.g. smart contracts, modules) to call into IBC apps as part of their state machine logic and then do some actions on packet lifecycle events.
+
+The Callbacks Middleware allows for this functionality by allowing the packets of the underlying IBC applications to register callbacks to secondary applications for lifecycle events. These callbacks are then executed by the Callbacks Middleware when the corresponding packet lifecycle event occurs.
+
+After much discussion, the design was expanded to [an ADR](/architecture/adr-008-app-caller-cbs), and the Callbacks Middleware is an implementation of that ADR.
+
+## Concepts
+
+Callbacks Middleware was built with smart contracts in mind, but can be used by any secondary application that wants to allow IBC packets to call into it. Think of the Callbacks Middleware as a bridge between core IBC and a secondary application.
+
+We have the following definitions:
+
+- `Underlying IBC application`: The IBC application that is wrapped by the Callbacks Middleware. This is the IBC application that is actually sending and receiving packet lifecycle events from core IBC. For example, the transfer module, or the ICA controller submodule.
+- `IBC Actor`: IBC Actor is an on-chain or off-chain entity that can initiate a packet on the underlying IBC application. For example, a smart contract, an off-chain user, or a module that sends a transfer packet are all IBC Actors.
+- `Secondary application`: The application that is being called into by the Callbacks Middleware for packet lifecycle events. This is the application that is receiving the callback directly from the Callbacks Middleware module. For example, the `x/wasm` module.
+- `Callback Actor`: The on-chain smart contract or module that is registered to receive callbacks from the secondary application. For example, a Wasm smart contract (gatekeeped by the `x/wasm` module). Note that the Callback Actor is not necessarily the same as the IBC Actor. For example, an off-chain user can initiate a packet on the underlying IBC application, but the Callback Actor could be a smart contract. The secondary application may want to check that the IBC Actor is allowed to call into the Callback Actor, for example, by checking that the IBC Actor is the same as the Callback Actor.
+- `Callback Address`: Address of the Callback Actor. This is the address that the secondary application will call into when a packet lifecycle event occurs. For example, the address of the Wasm smart contract.
+- `Maximum gas limit`: The maximum amount of gas that the Callbacks Middleware will allow the secondary application to use when it executes its custom logic.
+- `User defined gas limit`: The amount of gas that the IBC Actor wants to allow the secondary application to use when it executes its custom logic. This is the gas limit that the IBC Actor specifies when it sends a packet to the underlying IBC application. This cannot be greater than the maximum gas limit.
+
+Think of the secondary application as a bridge between the Callbacks Middleware and the Callback Actor. The secondary application is responsible for executing the custom logic of the Callback Actor when a packet lifecycle event occurs. The secondary application is also responsible for checking that the IBC Actor is allowed to call into the Callback Actor.
+
+Note that it is possible that the IBC Actor, Secondary Application, and Callback Actor are all the same entity. In which case, the Callback Address should be the secondary application's module address.
+
+The following diagram shows how a typical `RecvPacket`, `AcknowledgementPacket`, and `TimeoutPacket` execution flow would look like:
+![callbacks-middleware](./images/callbackflow.svg)
+
+And the following diagram shows how a typical `SendPacket` and `WriteAcknowledgement` execution flow would look like:
+![callbacks-middleware](./images/ics4-callbackflow.svg)
+
+## Known Limitations
+
+- Callbacks are always executed after the underlying IBC application has executed its logic.
+- Maximum gas limit is hardcoded manually during wiring. It requires a coordinated upgrade to change the maximum gas limit.
+- The receive packet callback does not pass the relayer address to the secondary application. This is so that we can use the same callback for both synchronous and asynchronous acknowledgements.
+- The receive packet callback does not pass IBC Actor's address, this is because the IBC Actor lives in the counterparty chain and cannot be trusted.
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/02-integration.md b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/02-integration.md
new file mode 100644
index 00000000000..83bb33a3e3a
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/02-integration.md
@@ -0,0 +1,95 @@
+---
+title: Integration
+sidebar_label: Integration
+sidebar_position: 2
+slug: /middleware/callbacks/integration
+---
+
+# Integration
+
+Learn how to integrate the callbacks middleware with IBC applications. The following document is intended for developers building on top of the Cosmos SDK and only applies for Cosmos SDK chains. {synopsis}
+
+The callbacks middleware is a minimal and stateless implementation of the IBC middleware interface. It does not have a keeper, nor does it store any state. It simply routes IBC middleware messages to the appropriate callback function, which is implemented by the secondary application. Therefore, it doesn't need to be registered as a module, nor does it need to be added to the module manager. It only needs to be added to the IBC application stack.
+
+## Pre-requisite Readings
+
+- [IBC middleware development](../../01-ibc/04-middleware/02-develop.md)
+- [IBC middleware integration](../../01-ibc/04-middleware/03-integration.md)
+
+The callbacks middleware, as the name suggests, plays the role of an IBC middleware and as such must be configured by chain developers to route and handle IBC messages correctly.
+For Cosmos SDK chains this setup is done via the `app/app.go` file, where modules are constructed and configured in order to bootstrap the blockchain application.
+
+## Configuring an application stack with the callbacks middleware
+
+As mentioned in [IBC middleware development](../../01-ibc/04-middleware/02-develop.md) an application stack may be composed of many or no middlewares that nest a base application.
+These layers form the complete set of application logic that enable developers to build composable and flexible IBC application stacks.
+For example, an application stack may just be a single base application like `transfer`, however, the same application stack composed with `29-fee` and `callbacks` will nest the `transfer` base application twice by wrapping it with the Fee Middleware module and then callbacks middleware.
+
+The callbacks middleware also **requires** a secondary application that will receive the callbacks to implement the [`ContractKeeper`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/callbacks/types/expected_keepers.go#L11-L83). Since the wasm module does not yet support the callbacks middleware, we will use the `mockContractKeeper` module in the examples below. You should replace this with a module that implements `ContractKeeper`.
+
+### Transfer
+
+See below for an example of how to create an application stack using `transfer`, `29-fee`, and `callbacks`. Feel free to omit the `29-fee` middleware if you do not want to use it.
+The following `transferStack` is configured in `app/app.go` and added to the IBC `Router`.
+The in-line comments describe the execution flow of packets between the application stack and IBC core.
+
+```go
+// Create Transfer Stack
+// SendPacket, since it is originating from the application to core IBC:
+// transferKeeper.SendPacket -> callbacks.SendPacket -> fee.SendPacket -> channel.SendPacket
+
+// RecvPacket, message that originates from core IBC and goes down to app, the flow is the other way
+// channel.RecvPacket -> callbacks.OnRecvPacket -> fee.OnRecvPacket -> transfer.OnRecvPacket
+
+// transfer stack contains (from top to bottom):
+// - IBC Callbacks Middleware
+// - IBC Fee Middleware
+// - Transfer
+
+// create IBC module from bottom to top of stack
+var transferStack porttypes.IBCModule
+transferStack = transfer.NewIBCModule(app.TransferKeeper)
+transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper)
+// maxCallbackGas is a hard-coded value that is passed to the callbacks middleware
+transferStack = ibccallbacks.NewIBCMiddleware(transferStack, app.IBCFeeKeeper, app.MockContractKeeper, maxCallbackGas)
+// Since the callbacks middleware itself is an ics4wrapper, it needs to be passed to the transfer keeper
+app.TransferKeeper.WithICS4Wrapper(transferStack.(porttypes.ICS4Wrapper))
+
+// Add transfer stack to IBC Router
+ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack)
+```
+
+::: warning
+The usage of `WithICS4Wrapper` after `transferStack`'s configuration is critical! It allows the callbacks middleware to do `SendPacket` callbacks and asynchronous `ReceivePacket` callbacks. You must do this regardless of whether you are using the `29-fee` middleware or not.
+:::
+
+### Interchain Accounts Controller
+
+```go
+// Create Interchain Accounts Stack
+// SendPacket, since it is originating from the application to core IBC:
+// icaControllerKeeper.SendTx -> callbacks.SendPacket -> fee.SendPacket -> channel.SendPacket
+
+var icaControllerStack porttypes.IBCModule
+icaControllerStack = icacontroller.NewIBCMiddleware(nil, app.ICAControllerKeeper)
+icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper)
+// maxCallbackGas is a hard-coded value that is passed to the callbacks middleware
+icaControllerStack = ibccallbacks.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper, app.MockContractKeeper, maxCallbackGas)
+// Since the callbacks middleware itself is an ics4wrapper, it needs to be passed to the ica controller keeper
+app.ICAControllerKeeper.WithICS4Wrapper(icaControllerStack.(porttypes.ICS4Wrapper))
+
+// RecvPacket, message that originates from core IBC and goes down to app, the flow is:
+// channel.RecvPacket -> callbacks.OnRecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket
+
+var icaHostStack porttypes.IBCModule
+icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper)
+icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper)
+
+// Add ICA host and controller to IBC router ibcRouter.
+AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
+AddRoute(icahosttypes.SubModuleName, icaHostStack).
+```
+
+::: warning
+The usage of `WithICS4Wrapper` here is also critical!
+:::
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/03-interfaces.md b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/03-interfaces.md
new file mode 100644
index 00000000000..566e4ebb4e2
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/03-interfaces.md
@@ -0,0 +1,151 @@
+---
+title: Interfaces
+sidebar_label: Interfaces
+sidebar_position: 3
+slug: /middleware/callbacks/interfaces
+---
+
+# Interfaces
+
+The callbacks middleware requires certain interfaces to be implemented by the underlying IBC applications and the secondary application. If you're simply wiring up the callbacks middleware to an existing IBC application stack and a secondary application such as `icacontroller` and `x/wasm`, you can skip this section.
+
+## Interfaces for developing the Underlying IBC Application
+
+### `PacketDataUnmarshaler`
+
+```go
+// PacketDataUnmarshaler defines an optional interface which allows a middleware to
+// request the packet data to be unmarshaled by the base application.
+type PacketDataUnmarshaler interface {
+ // UnmarshalPacketData unmarshals the packet data into a concrete type
+ UnmarshalPacketData([]byte) (interface{}, error)
+}
+```
+
+The callbacks middleware **requires** the underlying ibc application to implement the [`PacketDataUnmarshaler`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/core/05-port/types/module.go#L142-L147) interface so that it can unmarshal the packet data bytes into the appropriate packet data type. This allows usage of interface functions implemented by the packet data type. The packet data type is expected to implement the `PacketDataProvider` interface (see section below), which is used to parse the callback data that is currently stored in the packet memo field for `transfer` and `ica` packets as a JSON string. See its implementation in the [`transfer`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/transfer/ibc_module.go#L303-L313) and [`icacontroller`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/27-interchain-accounts/controller/ibc_middleware.go#L258-L268) modules for reference.
+
+If the underlying application is a middleware itself, then it can implement this interface by simply passing the function call to its underlying application. See its implementation in the [`fee middleware`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/29-fee/ibc_middleware.go#L368-L378) for reference.
+
+### `PacketDataProvider`
+
+```go
+// PacketDataProvider defines an optional interfaces for retrieving custom packet data stored on behalf of another application.
+// An existing problem in the IBC middleware design is the inability for a middleware to define its own packet data type and insert packet sender provided information.
+// A short term solution was introduced into several application's packet data to utilize a memo field to carry this information on behalf of another application.
+// This interfaces standardizes that behaviour. Upon realization of the ability for middleware's to define their own packet data types, this interface will be deprecated and removed with time.
+type PacketDataProvider interface {
+ // GetCustomPacketData returns the packet data held on behalf of another application.
+ // The name the information is stored under should be provided as the key.
+ // If no custom packet data exists for the key, nil should be returned.
+ GetCustomPacketData(key string) interface{}
+}
+```
+
+The callbacks middleware also **requires** the underlying ibc application's packet data type to implement the [`PacketDataProvider`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/core/exported/packet.go#L43-L52) interface. This interface is used to retrieve the callback data from the packet data (using the memo field in the case of `transfer` and `ica`). For example, see its implementation in the [`transfer`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/transfer/types/packet.go#L85-L105) module.
+
+Since middlewares do not have packet types, they do not need to implement this interface.
+
+### `PacketData`
+
+```go
+// PacketData defines an optional interface which an application's packet data structure may implement.
+type PacketData interface {
+ // GetPacketSender returns the sender address of the packet data.
+ // If the packet sender is unknown or undefined, an empty string should be returned.
+ GetPacketSender(sourcePortID string) string
+}
+```
+
+[`PacketData`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/core/exported/packet.go#L36-L41) is an optional interface that can be implemented by the underlying ibc application's packet data type. It is used to retrieve the packet sender address from the packet data. The callbacks middleware uses this interface to retrieve the packet sender address and pass it to the callback function during a source callback. If this interface is not implemented, then the callbacks middleware passes and empty string as the sender address. For example, see its implementation in the [`transfer`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/transfer/types/packet.go#L74-L83) and [`ica`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/27-interchain-accounts/types/packet.go#L78-L92) module.
+
+This interface was added so that secondary applications can retrieve the packet sender address to perform custom authorization logic if needed.
+
+Since middlewares do not have packet types, they do not need to implement this interface.
+
+## Interfaces for developing the Secondary Application
+
+### `ContractKeeper`
+
+The callbacks middleware requires the secondary application to implement the [`ContractKeeper`](https://github.com/cosmos/ibc-go/blob/v7.3.0/modules/apps/callbacks/types/expected_keepers.go#L11-L83) interface. The contract keeper will be invoked at each step of the packet lifecycle. When a packet is sent, if callback information is provided, the contract keeper will be invoked via the `IBCSendPacketCallback`. This allows the contract keeper to prevent packet sends when callback information is provided, for example if the sender is unauthorized to perform callbacks on the given information. If the packet send is successful, the contract keeper on the destination (if present) will be invoked when a packet has been received and the acknowledgement is written, this will occur via `IBCReceivePacketCallback`. At the end of the packet lifecycle, when processing acknowledgements or timeouts, the source contract keeper will be invoked either via `IBCOnAcknowledgementPacket` or `IBCOnTimeoutPacket`. Once a packet has been sent, each step of the packet lifecycle can be processed given that a relayer sets the gas limit to be more than or equal to the required `CommitGasLimit`. State changes performed in the callback will only be committed upon successful execution.
+
+```go
+// ContractKeeper defines the entry points exposed to the VM module which invokes a smart contract
+type ContractKeeper interface {
+ // IBCSendPacketCallback is called in the source chain when a PacketSend is executed. The
+ // packetSenderAddress is determined by the underlying module, and may be empty if the sender is
+ // unknown or undefined. The contract is expected to handle the callback within the user defined
+ // gas limit, and handle any errors, or panics gracefully.
+ // This entry point is called with a cached context. If an error is returned, then the changes in
+ // this context will not be persisted, and the error will be propagated to the underlying IBC
+ // application, resulting in a packet send failure.
+ //
+ // Implementations are provided with the packetSenderAddress and MAY choose to use this to perform
+ // validation on the origin of a given packet. It is recommended to perform the same validation
+ // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This
+ // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks.
+ IBCSendPacketCallback(
+ cachedCtx sdk.Context,
+ sourcePort string,
+ sourceChannel string,
+ timeoutHeight clienttypes.Height,
+ timeoutTimestamp uint64,
+ packetData []byte,
+ contractAddress,
+ packetSenderAddress string,
+ ) error
+ // IBCOnAcknowledgementPacketCallback is called in the source chain when a packet acknowledgement
+ // is received. The packetSenderAddress is determined by the underlying module, and may be empty if
+ // the sender is unknown or undefined. The contract is expected to handle the callback within the
+ // user defined gas limit, and handle any errors, or panics gracefully.
+ // This entry point is called with a cached context. If an error is returned, then the changes in
+ // this context will not be persisted, but the packet lifecycle will not be blocked.
+ //
+ // Implementations are provided with the packetSenderAddress and MAY choose to use this to perform
+ // validation on the origin of a given packet. It is recommended to perform the same validation
+ // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This
+ // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks.
+ IBCOnAcknowledgementPacketCallback(
+ cachedCtx sdk.Context,
+ packet channeltypes.Packet,
+ acknowledgement []byte,
+ relayer sdk.AccAddress,
+ contractAddress,
+ packetSenderAddress string,
+ ) error
+ // IBCOnTimeoutPacketCallback is called in the source chain when a packet is not received before
+ // the timeout height. The packetSenderAddress is determined by the underlying module, and may be
+ // empty if the sender is unknown or undefined. The contract is expected to handle the callback
+ // within the user defined gas limit, and handle any error, out of gas, or panics gracefully.
+ // This entry point is called with a cached context. If an error is returned, then the changes in
+ // this context will not be persisted, but the packet lifecycle will not be blocked.
+ //
+ // Implementations are provided with the packetSenderAddress and MAY choose to use this to perform
+ // validation on the origin of a given packet. It is recommended to perform the same validation
+ // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This
+ // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks.
+ IBCOnTimeoutPacketCallback(
+ cachedCtx sdk.Context,
+ packet channeltypes.Packet,
+ relayer sdk.AccAddress,
+ contractAddress,
+ packetSenderAddress string,
+ ) error
+ // IBCReceivePacketCallback is called in the destination chain when a packet acknowledgement is written.
+ // The contract is expected to handle the callback within the user defined gas limit, and handle any errors,
+ // out of gas, or panics gracefully.
+ // This entry point is called with a cached context. If an error is returned, then the changes in
+ // this context will not be persisted, but the packet lifecycle will not be blocked.
+ IBCReceivePacketCallback(
+ cachedCtx sdk.Context,
+ packet ibcexported.PacketI,
+ ack ibcexported.Acknowledgement,
+ contractAddress string,
+ ) error
+}
+```
+
+These are the callback entry points exposed to the secondary application. The secondary application is expected to execute its custom logic within these entry points. The callbacks middleware will handle the execution of these callbacks and revert the state if needed.
+
+:::tip
+Note that the source callback entry points are provided with the `packetSenderAddress` and MAY choose to use this to perform validation on the origin of a given packet. It is recommended to perform the same validation on all source chain callbacks (SendPacket, AcknowledgePacket, TimeoutPacket). This defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks.
+:::
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/04-events.md b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/04-events.md
new file mode 100644
index 00000000000..c7711100fb7
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/04-events.md
@@ -0,0 +1,39 @@
+---
+title: Events
+sidebar_label: Events
+sidebar_position: 4
+slug: /middleware/callbacks/events
+---
+
+# Events
+
+An overview of all events related to the callbacks middleware. There are two types of events, `"ibc_src_callback"` and `"ibc_dest_callback"`.
+
+## Shared Attributes
+
+Both of these event types share the following attributes:
+
+| **Attribute Key** | **Attribute Values** | **Optional** |
+|:-------------------------:|:---------------------------------------------------------------------------------------:|:------------------:|
+| module | "ibccallbacks" | |
+| callback_type | **One of**: "send_packet", "acknowledgement_packet", "timeout_packet", "receive_packet" | |
+| callback_address | string | |
+| callback_exec_gas_limit | string (parsed from uint64) | |
+| callback_commit_gas_limit | string (parsed from uint64) | |
+| packet_sequence | string (parsed from uint64) | |
+| callback_result | **One of**: "success", "failure" | |
+| callback_error | string (parsed from callback err) | Yes, if err != nil |
+
+## `ibc_src_callback` Attributes
+
+| **Attribute Key** | **Attribute Values** |
+|:------------------:|:------------------------:|
+| packet_src_port | string (sourcePortID) |
+| packet_src_channel | string (sourceChannelID) |
+
+## `ibc_dest_callback` Attributes
+
+| **Attribute Key** | **Attribute Values** |
+|:-------------------:|:------------------------:|
+| packet_dest_port | string (destPortID) |
+| packet_dest_channel | string (destChannelID) |
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/05-end-users.md b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/05-end-users.md
new file mode 100644
index 00000000000..f2500ae3c05
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/05-end-users.md
@@ -0,0 +1,96 @@
+---
+title: End Users
+sidebar_label: End Users
+sidebar_position: 5
+slug: /middleware/callbacks/end-users
+---
+
+# Usage
+
+This section explains how to use the callbacks middleware from the perspective of an IBC Actor. Callbacks middleware provides two types of callbacks:
+
+- Source callbacks:
+ - `SendPacket` callback
+ - `OnAcknowledgementPacket` callback
+ - `OnTimeoutPacket` callback
+- Destination callbacks:
+ - `ReceivePacket` callback
+
+For a given channel, the source callbacks are supported if the source chain has the callbacks middleware wired up in the channel's IBC stack. Similarly, the destination callbacks are supported if the destination chain has the callbacks middleware wired up in the channel's IBC stack.
+
+::: tip
+Callbacks are always executed after the packet has been processed by the underlying IBC module.
+:::
+
+::: warning
+If the underlying application module is doing an asynchronous acknowledgement on packet receive (for example, if the [packet forward middleware](https://github.com/cosmos/ibc-apps/tree/main/middleware/packet-forward-middleware) is in the stack, and is being used by this packet), then the callbacks middleware will execute the `ReceivePacket` callback after the acknowledgement has been received.
+:::
+
+## Source Callbacks
+
+Source callbacks are natively supported in the following ibc modules (if they are wrapped by the callbacks middleware):
+
+- `transfer`
+- `icacontroller`
+
+To have your source callbacks be processed by the callbacks middleware, you must set the memo in the application's packet data to the following format:
+
+```jsonc
+{
+ "src_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ }
+}
+```
+
+## Destination Callbacks
+
+Destination callbacks are natively only supported in the transfer module. Note that wrapping icahost is not supported. This is because icahost should be able to execute an arbitrary transaction anyway, and can call contracts or modules directly.
+
+To have your destination callbacks processed by the callbacks middleware, you must set the memo in the application's packet data to the following format:
+
+```jsonc
+{
+ "dest_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ }
+}
+```
+
+Note that a packet can have both a source and destination callback.
+
+```jsonc
+{
+ "src_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ },
+ "dest_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ }
+}
+```
+
+# User Defined Gas Limit
+
+User defined gas limit was added for the following reasons:
+
+- To prevent callbacks from blocking packet lifecycle.
+- To prevent relayers from being able to DOS the callback execution by sending a packet with a low amount of gas.
+
+::: tip
+There is a chain wide parameter that sets the maximum gas limit that a user can set for a callback. This is to prevent a user from setting a gas limit that is too high for relayers. If the `"gas_limit"` is not set in the packet memo, then the maximum gas limit is used.
+:::
+
+These goals are achieved by creating a minimum gas amount required for callback execution. If the relayer provides at least the minimum gas limit for the callback execution, then the packet lifecycle will not be blocked if the callback runs out of gas during execution, and the callback cannot be retried. If the relayer does not provided the minimum amount of gas and the callback executions runs out of gas, the entire tx is reverted and it may be executed again.
+
+::: tip
+`SendPacket` callback is always reverted if the callback execution fails or returns an error for any reason. This is so that the packet is not sent if the callback execution fails.
+:::
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/06-gas.md b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/06-gas.md
new file mode 100644
index 00000000000..d9637c58344
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/06-gas.md
@@ -0,0 +1,77 @@
+---
+title: Gas Management
+sidebar_label: Gas Management
+sidebar_position: 6
+slug: /middleware/callbacks/gas
+---
+
+# Gas Management
+
+## Overview
+
+Executing arbitrary code on a chain can be arbitrarily expensive. In general, a callback may consume infinite gas (think of a callback that loops forever). This is problematic for a few reasons:
+
+- It can block the packet lifecycle.
+- It can be used to consume all of the relayer's funds and gas.
+- A relayer can DOS the callback execution by sending a packet with a low amount of gas.
+
+To prevent these, the callbacks middleware introduces two gas limits: a chain wide gas limit (`maxCallbackGas`) and a user defined gas limit.
+
+### Chain Wide Gas Limit
+
+Since the callbacks middleware does not have a keeper, it does not use a governance parameter to set the chain wide gas limit. Instead, the chain wide gas limit is passed in as a parameter to the callbacks middleware during initialization.
+
+```go
+// app.go
+
+maxCallbackGas := uint64(1_000_000)
+
+var transferStack porttypes.IBCModule
+transferStack = transfer.NewIBCModule(app.TransferKeeper)
+transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper)
+transferStack = ibccallbacks.NewIBCMiddleware(transferStack, app.IBCFeeKeeper, app.MockContractKeeper, maxCallbackGas)
+// Since the callbacks middleware itself is an ics4wrapper, it needs to be passed to the transfer keeper
+app.TransferKeeper.WithICS4Wrapper(transferStack.(porttypes.ICS4Wrapper))
+
+// Add transfer stack to IBC Router
+ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack)
+```
+
+### User Defined Gas Limit
+
+The user defined gas limit is set by the IBC Actor during packet creation. The user defined gas limit is set in the packet memo. If the user defined gas limit is not set or if the user defined gas limit is greater than the chain wide gas limit, then the chain wide gas limit is used as the user defined gas limit.
+
+```jsonc
+{
+ "src_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ },
+ "dest_callback": {
+ "address": "callbackAddressString",
+ // optional
+ "gas_limit": "userDefinedGasLimitString",
+ }
+}
+```
+
+## Gas Limit Enforcement
+
+During a callback execution, there are three types of gas limits that are enforced:
+
+- User defined gas limit
+- Chain wide gas limit
+- Context gas limit (amount of gas that the relayer has left for this execution)
+
+Chain wide gas limit is used as a maximum to the user defined gas limit as explained in the [previous section](#user-defined-gas-limit). It may also be used as a default value if no user gas limit is provided. Therefore, we can ignore the chain wide gas limit for the rest of this section and work with the minimum of the chain wide gas limit and user defined gas limit. This minimum is called the commit gas limit.
+
+The gas limit enforcement is done by executing the callback inside a cached context with a new gas meter. The gas meter is initialized with the minimum of the commit gas limit and the context gas limit. This minimum is called the execution gas limit. We say that retries are allowed if `context gas limit < commit gas limit`. Otherwise, we say that retries are not allowed.
+
+If the callback execution fails due to an out of gas error, then the middleware checks if retries are allowed. If retries are not allowed, then it recovers from the out of gas error, consumes execution gas limit from the original context, and continues with the packet life cycle. If retries are allowed, then it panics with an out of gas error to revert the entire tx. The packet can then be submitted again with a higher gas limit. The out of gas panic descriptor is shown below.
+
+```go
+fmt.Sprintf("ibc %s callback out of gas; commitGasLimit: %d", callbackType, callbackData.CommitGasLimit)}
+```
+
+If the callback execution does not fail due to an out of gas error then the callbacks middleware does not block the packet life cycle regardless of whether retries are allowed or not.
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/_category_.json b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/_category_.json
new file mode 100644
index 00000000000..06ae30acec9
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Callbacks Middleware",
+ "position": 2,
+ "link": null
+}
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/callbackflow.svg b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/callbackflow.svg
new file mode 100644
index 00000000000..2323889b7c9
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/callbackflow.svg
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg
new file mode 100644
index 00000000000..032a83f7662
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/_category_.json b/docs/versioned_docs/version-v8.0.x/04-middleware/_category_.json
new file mode 100644
index 00000000000..72f60663bf3
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/04-middleware/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "IBC Middleware Modules",
+ "position": 4,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/01-support-denoms-with-slashes.md b/docs/versioned_docs/version-v8.0.x/05-migrations/01-support-denoms-with-slashes.md
new file mode 100644
index 00000000000..99d08040903
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/01-support-denoms-with-slashes.md
@@ -0,0 +1,87 @@
+---
+title: Support transfer of coins whose base denom contains slashes
+sidebar_label: Support transfer of coins whose base denom contains slashes
+sidebar_position: 1
+slug: /migrations/support-denoms-with-slashes
+---
+# Migrating from not supporting base denoms with slashes to supporting base denoms with slashes
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- Chains
+- IBC Apps
+- Relayers
+- IBC Light Clients
+
+This document is necessary when chains are upgrading from a version that does not support base denoms with slashes (e.g. v3.0.0) to a version that does (e.g. v3.2.0). All versions of ibc-go smaller than v1.5.0 for the v1.x release line, v2.3.0 for the v2.x release line, and v3.1.0 for the v3.x release line do **NOT** support IBC token transfers of coins whose base denoms contain slashes. Therefore the in-place of genesis migration described in this document are required when upgrading.
+
+If a chain receives coins of a base denom with slashes before it upgrades to supporting it, the receive may pass however the trace information will be incorrect.
+
+E.g. If a base denom of `testcoin/testcoin/testcoin` is sent to a chain that does not support slashes in the base denom, the receive will be successful. However, the trace information stored on the receiving chain will be: `Trace: "transfer/{channel-id}/testcoin/testcoin", BaseDenom: "testcoin"`.
+
+This incorrect trace information must be corrected when the chain does upgrade to fully supporting denominations with slashes.
+
+To do so, chain binaries should include a migration script that will run when the chain upgrades from not supporting base denominations with slashes to supporting base denominations with slashes.
+
+## Chains
+
+### ICS20 - Transfer
+
+The transfer module will now support slashes in base denoms, so we must iterate over current traces to check if any of them are incorrectly formed and correct the trace information.
+
+### Upgrade Proposal
+
+```go
+app.UpgradeKeeper.SetUpgradeHandler("MigrateTraces",
+ func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
+ // transfer module consensus version has been bumped to 2
+ return app.mm.RunMigrations(ctx, app.configurator, fromVM)
+ })
+```
+
+This is only necessary if there are denom traces in the store with incorrect trace information from previously received coins that had a slash in the base denom. However, it is recommended that any chain upgrading to support base denominations with slashes runs this code for safety.
+
+For a more detailed sample, please check out the code changes in [this pull request](https://github.com/cosmos/ibc-go/pull/1680).
+
+### Genesis Migration
+
+If the chain chooses to add support for slashes in base denoms via genesis export, then the trace information must be corrected during genesis migration.
+
+The migration code required may look like:
+
+```go
+func migrateGenesisSlashedDenomsUpgrade(appState genutiltypes.AppMap, clientCtx client.Context, genDoc *tmtypes.GenesisDoc) (genutiltypes.AppMap, error) {
+ if appState[ibctransfertypes.ModuleName] != nil {
+ transferGenState := &ibctransfertypes.GenesisState{}
+ clientCtx.Codec.MustUnmarshalJSON(appState[ibctransfertypes.ModuleName], transferGenState)
+
+ substituteTraces := make([]ibctransfertypes.DenomTrace, len(transferGenState.DenomTraces))
+ for i, dt := range transferGenState.DenomTraces {
+ // replace all previous traces with the latest trace if validation passes
+ // note most traces will have same value
+ newTrace := ibctransfertypes.ParseDenomTrace(dt.GetFullDenomPath())
+
+ if err := newTrace.Validate(); err != nil {
+ substituteTraces[i] = dt
+ } else {
+ substituteTraces[i] = newTrace
+ }
+ }
+
+ transferGenState.DenomTraces = substituteTraces
+
+ // delete old genesis state
+ delete(appState, ibctransfertypes.ModuleName)
+
+ // set new ibc transfer genesis state
+ appState[ibctransfertypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(transferGenState)
+ }
+
+ return appState, nil
+}
+```
+
+For a more detailed sample, please check out the code changes in [this pull request](https://github.com/cosmos/ibc-go/pull/1528).
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/02-sdk-to-v1.md b/docs/versioned_docs/version-v8.0.x/05-migrations/02-sdk-to-v1.md
new file mode 100644
index 00000000000..e24c0f62bb6
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/02-sdk-to-v1.md
@@ -0,0 +1,195 @@
+---
+title: SDK v0.43 to IBC-Go v1
+sidebar_label: SDK v0.43 to IBC-Go v1
+sidebar_position: 2
+slug: /migrations/sdk-to-v1
+---
+
+# Migrating to ibc-go
+
+This file contains information on how to migrate from the IBC module contained in the SDK 0.41.x and 0.42.x lines to the IBC module in the ibc-go repository based on the 0.44 SDK version.
+
+## Import Changes
+
+The most obvious changes is import name changes. We need to change:
+
+- applications -> apps
+- cosmos-sdk/x/ibc -> ibc-go
+
+On my GNU/Linux based machine I used the following commands, executed in order:
+
+```shell
+grep -RiIl 'cosmos-sdk\/x\/ibc\/applications' | xargs sed -i 's/cosmos-sdk\/x\/ibc\/applications/ibc-go\/modules\/apps/g'
+```
+
+```shell
+grep -RiIl 'cosmos-sdk\/x\/ibc' | xargs sed -i 's/cosmos-sdk\/x\/ibc/ibc-go\/modules/g'
+```
+
+ref: [explanation of the above commands](https://www.internalpointers.com/post/linux-find-and-replace-text-multiple-files)
+
+Executing these commands out of order will cause issues.
+
+Feel free to use your own method for modifying import names.
+
+NOTE: Updating to the `v0.44.0` SDK release and then running `go mod tidy` will cause a downgrade to `v0.42.0` in order to support the old IBC import paths.
+Update the import paths before running `go mod tidy`.
+
+## Chain Upgrades
+
+Chains may choose to upgrade via an upgrade proposal or genesis upgrades. Both in-place store migrations and genesis migrations are supported.
+
+**WARNING**: Please read at least the quick guide for [IBC client upgrades](../01-ibc/05-upgrades/01-quick-guide.md) before upgrading your chain. It is highly recommended you do not change the chain-ID during an upgrade, otherwise you must follow the IBC client upgrade instructions.
+
+Both in-place store migrations and genesis migrations will:
+
+- migrate the solo machine client state from v1 to v2 protobuf definitions
+- prune all solo machine consensus states
+- prune all expired tendermint consensus states
+
+Chains must set a new connection parameter during either in place store migrations or genesis migration. The new parameter, max expected block time, is used to enforce packet processing delays on the receiving end of an IBC packet flow. Checkout the [docs](https://github.com/cosmos/ibc-go/blob/release/v1.0.x/docs/ibc/proto-docs.md#params-2) for more information.
+
+### In-Place Store Migrations
+
+The new chain binary will need to run migrations in the upgrade handler. The fromVM (previous module version) for the IBC module should be 1. This will allow migrations to be run for IBC updating the version from 1 to 2.
+
+Ex:
+
+```go
+app.UpgradeKeeper.SetUpgradeHandler("my-upgrade-proposal",
+ func(ctx sdk.Context, _ upgradetypes.Plan, _ module.VersionMap) (module.VersionMap, error) {
+ // set max expected block time parameter. Replace the default with your expected value
+ // https://github.com/cosmos/ibc-go/blob/release/v1.0.x/docs/ibc/proto-docs.md#params-2
+ app.IBCKeeper.ConnectionKeeper.SetParams(ctx, ibcconnectiontypes.DefaultParams())
+
+ fromVM := map[string]uint64{
+ ... // other modules
+ "ibc": 1,
+ ...
+ }
+ return app.mm.RunMigrations(ctx, app.configurator, fromVM)
+ })
+
+```
+
+### Genesis Migrations
+
+To perform genesis migrations, the following code must be added to your existing migration code.
+
+```go
+// add imports as necessary
+import (
+ ibcv100 "github.com/cosmos/ibc-go/modules/core/legacy/v100"
+ ibchost "github.com/cosmos/ibc-go/modules/core/24-host"
+)
+
+...
+
+// add in migrate cmd function
+// expectedTimePerBlock is a new connection parameter
+// https://github.com/cosmos/ibc-go/blob/release/v1.0.x/docs/ibc/proto-docs.md#params-2
+newGenState, err = ibcv100.MigrateGenesis(newGenState, clientCtx, *genDoc, expectedTimePerBlock)
+if err != nil {
+ return err
+}
+```
+
+**NOTE:** The genesis chain-id, time and height MUST be updated before migrating IBC, otherwise the tendermint consensus state will not be pruned.
+
+## IBC Keeper Changes
+
+The IBC Keeper now takes in the Upgrade Keeper. Please add the chains' Upgrade Keeper after the Staking Keeper:
+
+```diff
+// Create IBC Keeper
+app.IBCKeeper = ibckeeper.NewKeeper(
+- appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, scopedIBCKeeper,
++ appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper,
+)
+```
+
+## Proposals
+
+### UpdateClientProposal
+
+The `UpdateClient` has been modified to take in two client-identifiers and one initial height. Please see the [documentation](../01-ibc/06-proposals.md) for more information.
+
+### UpgradeProposal
+
+A new IBC proposal type has been added, `UpgradeProposal`. This handles an IBC (breaking) Upgrade.
+The previous `UpgradedClientState` field in an Upgrade `Plan` has been deprecated in favor of this new proposal type.
+
+### Proposal Handler Registration
+
+The `ClientUpdateProposalHandler` has been renamed to `ClientProposalHandler`.
+It handles both `UpdateClientProposal`s and `UpgradeProposal`s.
+
+Add this import:
+
+```diff
++ ibcclienttypes "github.com/cosmos/ibc-go/modules/core/02-client/types"
+```
+
+Please ensure the governance module adds the correct route:
+
+```diff
+- AddRoute(ibchost.RouterKey, ibcclient.NewClientUpdateProposalHandler(app.IBCKeeper.ClientKeeper))
++ AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
+```
+
+NOTE: Simapp registration was incorrect in the 0.41.x releases. The `UpdateClient` proposal handler should be registered with the router key belonging to `ibc-go/core/02-client/types`
+as shown in the diffs above.
+
+### Proposal CLI Registration
+
+Please ensure both proposal type CLI commands are registered on the governance module by adding the following arguments to `gov.NewAppModuleBasic()`:
+
+Add the following import:
+
+```diff
++ ibcclientclient "github.com/cosmos/ibc-go/modules/core/02-client/client"
+```
+
+Register the cli commands:
+
+```diff
+gov.NewAppModuleBasic(
+ paramsclient.ProposalHandler, distrclient.ProposalHandler, upgradeclient.ProposalHandler, upgradeclient.CancelProposalHandler,
++ ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpgradeProposalHandler,
+),
+```
+
+REST routes are not supported for these proposals.
+
+## Proto file changes
+
+The gRPC querier service endpoints have changed slightly. The previous files used `v1beta1` gRPC route, this has been updated to `v1`.
+
+The solo machine has replaced the FrozenSequence uint64 field with a IsFrozen boolean field. The package has been bumped from `v1` to `v2`
+
+## IBC callback changes
+
+### OnRecvPacket
+
+Application developers need to update their `OnRecvPacket` callback logic.
+
+The `OnRecvPacket` callback has been modified to only return the acknowledgement. The acknowledgement returned must implement the `Acknowledgement` interface. The acknowledgement should indicate if it represents a successful processing of a packet by returning true on `Success()` and false in all other cases. A return value of false on `Success()` will result in all state changes which occurred in the callback being discarded. More information can be found in the [documentation](../01-ibc/03-apps/01-apps.md#receiving-packets).
+
+The `OnRecvPacket`, `OnAcknowledgementPacket`, and `OnTimeoutPacket` callbacks are now passed the `sdk.AccAddress` of the relayer who relayed the IBC packet. Applications may use or ignore this information.
+
+## IBC Event changes
+
+The `packet_data` attribute has been deprecated in favor of `packet_data_hex`, in order to provide standardized encoding/decoding of packet data in events. While the `packet_data` event still exists, all relayers and IBC Event consumers are strongly encouraged to switch over to using `packet_data_hex` as soon as possible.
+
+The `packet_ack` attribute has also been deprecated in favor of `packet_ack_hex` for the same reason stated above. All relayers and IBC Event consumers are strongly encouraged to switch over to using `packet_ack_hex` as soon as possible.
+
+The `consensus_height` attribute has been removed in the Misbehaviour event emitted. IBC clients no longer have a frozen height and misbehaviour does not necessarily have an associated height.
+
+## Relevant SDK changes
+
+- (codec) [\#9226](https://github.com/cosmos/cosmos-sdk/pull/9226) Rename codec interfaces and methods, to follow a general Go interfaces:
+ - `codec.Marshaler` → `codec.Codec` (this defines objects which serialize other objects)
+ - `codec.BinaryMarshaler` → `codec.BinaryCodec`
+ - `codec.JSONMarshaler` → `codec.JSONCodec`
+ - Removed `BinaryBare` suffix from `BinaryCodec` methods (`MarshalBinaryBare`, `UnmarshalBinaryBare`, ...)
+ - Removed `Binary` infix from `BinaryCodec` methods (`MarshalBinaryLengthPrefixed`, `UnmarshalBinaryLengthPrefixed`, ...)
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/03-v1-to-v2.md b/docs/versioned_docs/version-v8.0.x/05-migrations/03-v1-to-v2.md
new file mode 100644
index 00000000000..77d3de4e87f
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/03-v1-to-v2.md
@@ -0,0 +1,59 @@
+---
+title: IBC-Go v1 to v2
+sidebar_label: IBC-Go v1 to v2
+sidebar_position: 3
+slug: /migrations/v1-to-v2
+---
+# Migrating from ibc-go v1 to v2
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- Chains
+- IBC Apps
+- Relayers
+- IBC Light Clients
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated to bump the version number on major releases.
+
+```go
+github.com/cosmos/ibc-go -> github.com/cosmos/ibc-go/v2
+```
+
+## Chains
+
+- No relevant changes were made in this release.
+
+## IBC Apps
+
+A new function has been added to the app module interface:
+
+```go
+// NegotiateAppVersion performs application version negotiation given the provided channel ordering, connectionID, portID, counterparty and proposed version.
+// An error is returned if version negotiation cannot be performed. For example, an application module implementing this interface
+// may decide to return an error in the event of the proposed version being incompatible with it's own
+NegotiateAppVersion(
+ ctx sdk.Context,
+ order channeltypes.Order,
+ connectionID string,
+ portID string,
+ counterparty channeltypes.Counterparty,
+ proposedVersion string,
+) (version string, err error)
+```
+
+This function should perform application version negotiation and return the negotiated version. If the version cannot be negotiated, an error should be returned. This function is only used on the client side.
+
+### `sdk.Result` removed
+
+`sdk.Result` has been removed as a return value in the application callbacks. Previously it was being discarded by core IBC and was thus unused.
+
+## Relayers
+
+A new gRPC has been added to 05-port, `AppVersion`. It returns the negotiated app version. This function should be used for the `ChanOpenTry` channel handshake step to decide upon the application version which should be set in the channel.
+
+## IBC Light Clients
+
+- No relevant changes were made in this release.
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v8.0.x/05-migrations/04-v2-to-v3.md
new file mode 100644
index 00000000000..280f5340fbe
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/04-v2-to-v3.md
@@ -0,0 +1,186 @@
+---
+title: IBC-Go v2 to v3
+sidebar_label: IBC-Go v2 to v3
+sidebar_position: 4
+slug: /migrations/v2-to-v3
+---
+
+# Migrating from ibc-go v2 to v3
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- Chains
+- IBC Apps
+- Relayers
+- IBC Light Clients
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated to bump the version number on major releases.
+
+```go
+github.com/cosmos/ibc-go/v2 -> github.com/cosmos/ibc-go/v3
+```
+
+No genesis or in-place migrations are required when upgrading from v1 or v2 of ibc-go.
+
+## Chains
+
+### ICS20
+
+The `transferkeeper.NewKeeper(...)` now takes in an ICS4Wrapper.
+The ICS4Wrapper should be the IBC Channel Keeper unless ICS 20 is being connected to a middleware application.
+
+### ICS27
+
+ICS27 Interchain Accounts has been added as a supported IBC application of ibc-go.
+Please see the [ICS27 documentation](../02-apps/02-interchain-accounts/01-overview.md) for more information.
+
+### Upgrade Proposal
+
+If the chain will adopt ICS27, it must set the appropriate params during the execution of the upgrade handler in `app.go`:
+
+```go
+app.UpgradeKeeper.SetUpgradeHandler("v3",
+ func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
+ // set the ICS27 consensus version so InitGenesis is not run
+ fromVM[icatypes.ModuleName] = icamodule.ConsensusVersion()
+
+ // create ICS27 Controller submodule params
+ controllerParams := icacontrollertypes.Params{
+ ControllerEnabled: true,
+ }
+
+ // create ICS27 Host submodule params
+ hostParams := icahosttypes.Params{
+ HostEnabled: true,
+ AllowMessages: []string{"/cosmos.bank.v1beta1.MsgSend", ...},
+ }
+
+ // initialize ICS27 module
+ icamodule.InitModule(ctx, controllerParams, hostParams)
+
+ ...
+
+ return app.mm.RunMigrations(ctx, app.configurator, fromVM)
+ })
+```
+
+The host and controller submodule params only need to be set if the chain integrates those submodules.
+For example, if a chain chooses not to integrate a controller submodule, it may pass empty params into `InitModule`.
+
+#### Add `StoreUpgrades` for ICS27 module
+
+For ICS27 it is also necessary to [manually add store upgrades](https://docs.cosmos.network/main/learn/advanced/upgrade#add-storeupgrades-for-new-modules) for the new ICS27 module and then configure the store loader to apply those upgrades in `app.go`:
+
+```go
+if upgradeInfo.Name == "v3" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
+ storeUpgrades := store.StoreUpgrades{
+ Added: []string{icacontrollertypes.StoreKey, icahosttypes.StoreKey},
+ }
+
+ app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades))
+}
+```
+
+This ensures that the new module's stores are added to the multistore before the migrations begin.
+The host and controller submodule keys only need to be added if the chain integrates those submodules.
+For example, if a chain chooses not to integrate a controller submodule, it does not need to add the controller key to the `Added` field.
+
+### Genesis migrations
+
+If the chain will adopt ICS27 and chooses to upgrade via a genesis export, then the ICS27 parameters must be set during genesis migration.
+
+The migration code required may look like:
+
+```go
+ controllerGenesisState := icatypes.DefaultControllerGenesis()
+ // overwrite parameters as desired
+ controllerGenesisState.Params = icacontrollertypes.Params{
+ ControllerEnabled: true,
+ }
+
+ hostGenesisState := icatypes.DefaultHostGenesis()
+ // overwrite parameters as desired
+ hostGenesisState.Params = icahosttypes.Params{
+ HostEnabled: true,
+ AllowMessages: []string{"/cosmos.bank.v1beta1.MsgSend", ...},
+ }
+
+ icaGenesisState := icatypes.NewGenesisState(controllerGenesisState, hostGenesisState)
+
+ // set new ics27 genesis state
+ appState[icatypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(icaGenesisState)
+```
+
+### Ante decorator
+
+The field of type `channelkeeper.Keeper` in the `AnteDecorator` structure has been replaced with a field of type `*keeper.Keeper`:
+
+```diff
+type AnteDecorator struct {
+- k channelkeeper.Keeper
++ k *keeper.Keeper
+}
+
+- func NewAnteDecorator(k channelkeeper.Keeper) AnteDecorator {
++ func NewAnteDecorator(k *keeper.Keeper) AnteDecorator {
+ return AnteDecorator{k: k}
+}
+```
+
+## IBC Apps
+
+### `OnChanOpenTry` must return negotiated application version
+
+The `OnChanOpenTry` application callback has been modified.
+The return signature now includes the application version.
+IBC applications must perform application version negotiation in `OnChanOpenTry` using the counterparty version.
+The negotiated application version then must be returned in `OnChanOpenTry` to core IBC.
+Core IBC will set this version in the TRYOPEN channel.
+
+### `OnChanOpenAck` will take additional `counterpartyChannelID` argument
+
+The `OnChanOpenAck` application callback has been modified.
+The arguments now include the counterparty channel id.
+
+### `NegotiateAppVersion` removed from `IBCModule` interface
+
+Previously this logic was handled by the `NegotiateAppVersion` function.
+Relayers would query this function before calling `ChanOpenTry`.
+Applications would then need to verify that the passed in version was correct.
+Now applications will perform this version negotiation during the channel handshake, thus removing the need for `NegotiateAppVersion`.
+
+### Channel state will not be set before application callback
+
+The channel handshake logic has been reorganized within core IBC.
+Channel state will not be set in state after the application callback is performed.
+Applications must rely only on the passed in channel parameters instead of querying the channel keeper for channel state.
+
+### IBC application callbacks moved from `AppModule` to `IBCModule`
+
+Previously, IBC module callbacks were apart of the `AppModule` type.
+The recommended approach is to create an `IBCModule` type and move the IBC module callbacks from `AppModule` to `IBCModule` in a separate file `ibc_module.go`.
+
+The mock module go API has been broken in this release by applying the above format.
+The IBC module callbacks have been moved from the mock modules `AppModule` into a new type `IBCModule`.
+
+As apart of this release, the mock module now supports middleware testing. Please see the [README](https://github.com/cosmos/ibc-go/blob/v3.0.0/testing/README.md#middleware-testing) for more information.
+
+Please review the [mock](https://github.com/cosmos/ibc-go/blob/v3.0.0/testing/mock/ibc_module.go) and [transfer](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/transfer/ibc_module.go) modules as examples. Additionally, [simapp](https://github.com/cosmos/ibc-go/blob/v3.0.0/testing/simapp/app.go) provides an example of how `IBCModule` types should now be added to the IBC router in favour of `AppModule`.
+
+### IBC testing package
+
+`TestChain`s are now created with chainID's beginning from an index of 1. Any calls to `GetChainID(0)` will now fail. Please increment all calls to `GetChainID` by 1.
+
+## Relayers
+
+`AppVersion` gRPC has been removed.
+The `version` string in `MsgChanOpenTry` has been deprecated and will be ignored by core IBC.
+Relayers no longer need to determine the version to use on the `ChanOpenTry` step.
+IBC applications will determine the correct version using the counterparty version.
+
+## IBC Light Clients
+
+The `GetProofSpecs` function has been removed from the `ClientState` interface. This function was previously unused by core IBC. Light clients which don't use this function may remove it.
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/05-v3-to-v4.md b/docs/versioned_docs/version-v8.0.x/05-migrations/05-v3-to-v4.md
new file mode 100644
index 00000000000..d2407df20e8
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/05-v3-to-v4.md
@@ -0,0 +1,159 @@
+---
+title: IBC-Go v3 to v4
+sidebar_label: IBC-Go v3 to v4
+sidebar_position: 5
+slug: /migrations/v3-to-v4
+---
+# Migrating from ibc-go v3 to v4
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- Chains
+- IBC Apps
+- Relayers
+- IBC Light Clients
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated to bump the version number on major releases.
+
+```go
+github.com/cosmos/ibc-go/v3 -> github.com/cosmos/ibc-go/v4
+```
+
+No genesis or in-place migrations required when upgrading from v1 or v2 of ibc-go.
+
+## Chains
+
+### ICS27 - Interchain Accounts
+
+The controller submodule implements now the 05-port `Middleware` interface instead of the 05-port `IBCModule` interface. Chains that integrate the controller submodule, need to create it with the `NewIBCMiddleware` constructor function. For example:
+
+```diff
+- icacontroller.NewIBCModule(app.ICAControllerKeeper, icaAuthIBCModule)
++ icacontroller.NewIBCMiddleware(icaAuthIBCModule, app.ICAControllerKeeper)
+```
+
+where `icaAuthIBCModule` is the Interchain Accounts authentication IBC Module.
+
+### ICS29 - Fee Middleware
+
+The Fee Middleware module, as the name suggests, plays the role of an IBC middleware and as such must be configured by chain developers to route and handle IBC messages correctly.
+
+Please read the Fee Middleware [integration documentation](https://ibc.cosmos.network/main/middleware/ics29-fee/integration.html) for an in depth guide on how to congfigure the module correctly in order to incentivize IBC packets.
+
+Take a look at the following diff for an [example setup](https://github.com/cosmos/ibc-go/pull/1432/files#diff-d18972debee5e64f16e40807b2ae112ddbe609504a93ea5e1c80a5d489c3a08aL366) of how to incentivize ics27 channels.
+
+### Migration to fix support for base denoms with slashes
+
+As part of [v1.5.0](https://github.com/cosmos/ibc-go/releases/tag/v1.5.0), [v2.3.0](https://github.com/cosmos/ibc-go/releases/tag/v2.3.0) and [v3.1.0](https://github.com/cosmos/ibc-go/releases/tag/v3.1.0) some [migration handler code sample was documented](./01-support-denoms-with-slashes.md#upgrade-proposal) that needs to run in order to correct the trace information of coins transferred using ICS20 whose base denom contains slashes.
+
+Based on feedback from the community we add now an improved solution to run the same migration that does not require copying a large piece of code over from the migration document, but instead requires only adding a one-line upgrade handler.
+
+If the chain will migrate to supporting base denoms with slashes, it must set the appropriate params during the execution of the upgrade handler in `app.go`:
+
+```go
+app.UpgradeKeeper.SetUpgradeHandler("MigrateTraces",
+ func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
+ // transfer module consensus version has been bumped to 2
+ return app.mm.RunMigrations(ctx, app.configurator, fromVM)
+ })
+```
+
+If a chain receives coins of a base denom with slashes before it upgrades to supporting it, the receive may pass however the trace information will be incorrect.
+
+E.g. If a base denom of `testcoin/testcoin/testcoin` is sent to a chain that does not support slashes in the base denom, the receive will be successful. However, the trace information stored on the receiving chain will be: `Trace: "transfer/{channel-id}/testcoin/testcoin", BaseDenom: "testcoin"`.
+
+This incorrect trace information must be corrected when the chain does upgrade to fully supporting denominations with slashes.
+
+## IBC Apps
+
+### ICS03 - Connection
+
+Crossing hellos have been removed from 03-connection handshake negotiation.
+`PreviousConnectionId` in `MsgConnectionOpenTry` has been deprecated and is no longer used by core IBC.
+
+`NewMsgConnectionOpenTry` no longer takes in the `PreviousConnectionId` as crossing hellos are no longer supported. A non-empty `PreviousConnectionId` will fail basic validation for this message.
+
+### ICS04 - Channel
+
+The `WriteAcknowledgement` API now takes the `exported.Acknowledgement` type instead of passing in the acknowledgement byte array directly.
+This is an API breaking change and as such IBC application developers will have to update any calls to `WriteAcknowledgement`.
+
+The `OnChanOpenInit` application callback has been modified.
+The return signature now includes the application version as detailed in the latest IBC [spec changes](https://github.com/cosmos/ibc/pull/629).
+
+The `NewErrorAcknowledgement` method signature has changed.
+It now accepts an `error` rather than a `string`. This was done in order to prevent accidental state changes.
+All error acknowledgements now contain a deterministic ABCI code and error message. It is the responsibility of the application developer to emit error details in events.
+
+Crossing hellos have been removed from 04-channel handshake negotiation.
+IBC Applications no longer need to account from already claimed capabilities in the `OnChanOpenTry` callback. The capability provided by core IBC must be able to be claimed with error.
+`PreviousChannelId` in `MsgChannelOpenTry` has been deprecated and is no longer used by core IBC.
+
+`NewMsgChannelOpenTry` no longer takes in the `PreviousChannelId` as crossing hellos are no longer supported. A non-empty `PreviousChannelId` will fail basic validation for this message.
+
+### ICS27 - Interchain Accounts
+
+The `RegisterInterchainAccount` API has been modified to include an additional `version` argument. This change has been made in order to support ICS29 fee middleware, for relayer incentivization of ICS27 packets.
+Consumers of the `RegisterInterchainAccount` are now expected to build the appropriate JSON encoded version string themselves and pass it accordingly.
+This should be constructed within the interchain accounts authentication module which leverages the APIs exposed via the interchain accounts `controllerKeeper`. If an empty string is passed in the `version` argument, then the version will be initialized to a default value in the `OnChanOpenInit` callback of the controller's handler, so that channel handshake can proceed.
+
+The following code snippet illustrates how to construct an appropriate interchain accounts `Metadata` and encode it as a JSON bytestring:
+
+```go
+icaMetadata := icatypes.Metadata{
+ Version: icatypes.Version,
+ ControllerConnectionId: controllerConnectionID,
+ HostConnectionId: hostConnectionID,
+ Encoding: icatypes.EncodingProtobuf,
+ TxType: icatypes.TxTypeSDKMultiMsg,
+}
+
+appVersion, err := icatypes.ModuleCdc.MarshalJSON(&icaMetadata)
+if err != nil {
+ return err
+}
+
+if err := k.icaControllerKeeper.RegisterInterchainAccount(ctx, msg.ConnectionId, msg.Owner, string(appVersion)); err != nil {
+ return err
+}
+```
+
+Similarly, if the application stack is configured to route through ICS29 fee middleware and a fee enabled channel is desired, construct the appropriate ICS29 `Metadata` type:
+
+```go
+icaMetadata := icatypes.Metadata{
+ Version: icatypes.Version,
+ ControllerConnectionId: controllerConnectionID,
+ HostConnectionId: hostConnectionID,
+ Encoding: icatypes.EncodingProtobuf,
+ TxType: icatypes.TxTypeSDKMultiMsg,
+}
+
+appVersion, err := icatypes.ModuleCdc.MarshalJSON(&icaMetadata)
+if err != nil {
+ return err
+}
+
+feeMetadata := feetypes.Metadata{
+ AppVersion: string(appVersion),
+ FeeVersion: feetypes.Version,
+}
+
+feeEnabledVersion, err := feetypes.ModuleCdc.MarshalJSON(&feeMetadata)
+if err != nil {
+ return err
+}
+
+if err := k.icaControllerKeeper.RegisterInterchainAccount(ctx, msg.ConnectionId, msg.Owner, string(feeEnabledVersion)); err != nil {
+ return err
+}
+```
+
+## Relayers
+
+When using the `DenomTrace` gRPC, the full IBC denomination with the `ibc/` prefix may now be passed in.
+
+Crossing hellos are no longer supported by core IBC for 03-connection and 04-channel. The handshake should be completed in the logical 4 step process (INIT, TRY, ACK, CONFIRM).
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/06-v4-to-v5.md b/docs/versioned_docs/version-v8.0.x/05-migrations/06-v4-to-v5.md
new file mode 100644
index 00000000000..d5055d5006a
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/06-v4-to-v5.md
@@ -0,0 +1,441 @@
+---
+title: IBC-Go v4 to v5
+sidebar_label: IBC-Go v4 to v5
+sidebar_position: 6
+slug: /migrations/v4-to-v5
+---
+
+# Migrating from v4 to v5
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- [Chains](#chains)
+- [IBC Apps](#ibc-apps)
+- [Relayers](#relayers)
+- [IBC Light Clients](#ibc-light-clients)
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated to bump the version number on major releases.
+
+```go
+github.com/cosmos/ibc-go/v4 -> github.com/cosmos/ibc-go/v5
+```
+
+## Chains
+
+### Ante decorator
+
+The `AnteDecorator` type in `core/ante` has been renamed to `RedundantRelayDecorator` (and the corresponding constructor function to `NewRedundantRelayDecorator`). Therefore in the function that creates the instance of the `sdk.AnteHandler` type (e.g. `NewAnteHandler`) the change would be like this:
+
+```diff
+func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
+ // parameter validation
+
+ anteDecorators := []sdk.AnteDecorator{
+ // other ante decorators
+- ibcante.NewAnteDecorator(opts.IBCkeeper),
++ ibcante.NewRedundantRelayDecorator(options.IBCKeeper),
+ }
+
+ return sdk.ChainAnteDecorators(anteDecorators...), nil
+}
+```
+
+The `AnteDecorator` was actually renamed twice, but in [this PR](https://github.com/cosmos/ibc-go/pull/1820) you can see the changes made for the final rename.
+
+## IBC Apps
+
+### Core
+
+The `key` parameter of the `NewKeeper` function in `modules/core/keeper` is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`):
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ stakingKeeper clienttypes.StakingKeeper,
+ upgradeKeeper clienttypes.UpgradeKeeper,
+ scopedKeeper capabilitykeeper.ScopedKeeper,
+) *Keeper
+```
+
+The `RegisterRESTRoutes` function in `modules/core` has been removed.
+
+### ICS03 - Connection
+
+The `key` parameter of the `NewKeeper` function in `modules/core/03-connection/keeper` is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`):
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ ck types.ClientKeeper
+) Keeper
+```
+
+### ICS04 - Channel
+
+The function `NewPacketId` in `modules/core/04-channel/types` has been renamed to `NewPacketID`:
+
+```diff
+- func NewPacketId(
++ func NewPacketID(
+ portID,
+ channelID string,
+ seq uint64
+) PacketId
+```
+
+The `key` parameter of the `NewKeeper` function in `modules/core/04-channel/keeper` is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`):
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ clientKeeper types.ClientKeeper,
+ connectionKeeper types.ConnectionKeeper,
+ portKeeper types.PortKeeper,
+ scopedKeeper capabilitykeeper.ScopedKeeper,
+) Keeper
+```
+
+### ICS20 - Transfer
+
+The `key` parameter of the `NewKeeper` function in `modules/apps/transfer/keeper` is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`):
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ ics4Wrapper types.ICS4Wrapper,
+ channelKeeper types.ChannelKeeper,
+ portKeeper types.PortKeeper,
+ authKeeper types.AccountKeeper,
+ bankKeeper types.BankKeeper,
+ scopedKeeper capabilitykeeper.ScopedKeeper,
+) Keeper
+```
+
+The `amount` parameter of function `GetTransferCoin` in `modules/apps/transfer/types` is now of type `math.Int` (`"cosmossdk.io/math"`):
+
+```diff
+func GetTransferCoin(
+ portID, channelID, baseDenom string,
+- amount sdk.Int
++ amount math.Int
+) sdk.Coin
+```
+
+The `RegisterRESTRoutes` function in `modules/apps/transfer` has been removed.
+
+### ICS27 - Interchain Accounts
+
+The `key` and `msgRouter` parameters of the `NewKeeper` functions in
+
+- `modules/apps/27-interchain-accounts/controller/keeper`
+- and `modules/apps/27-interchain-accounts/host/keeper`
+
+have changed type. The `key` parameter is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`), and the `msgRouter` parameter is now of type `*icatypes.MessageRouter` (where `icatypes` is an import alias for `"github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types"`):
+
+```diff
+// NewKeeper creates a new interchain accounts controller Keeper instance
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ ics4Wrapper icatypes.ICS4Wrapper,
+ channelKeeper icatypes.ChannelKeeper,
+ portKeeper icatypes.PortKeeper,
+ scopedKeeper capabilitykeeper.ScopedKeeper,
+- msgRouter *baseapp.MsgServiceRouter,
++ msgRouter *icatypes.MessageRouter,
+) Keeper
+```
+
+```diff
+// NewKeeper creates a new interchain accounts host Keeper instance
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ channelKeeper icatypes.ChannelKeeper,
+ portKeeper icatypes.PortKeeper,
+ accountKeeper icatypes.AccountKeeper,
+ scopedKeeper capabilitykeeper.ScopedKeeper,
+- msgRouter *baseapp.MsgServiceRouter,
++ msgRouter *icatypes.MessageRouter,
+) Keeper
+```
+
+The new `MessageRouter` interface is defined as:
+
+```go
+type MessageRouter interface {
+ Handler(msg sdk.Msg) baseapp.MsgServiceHandler
+}
+```
+
+The `RegisterRESTRoutes` function in `modules/apps/27-interchain-accounts` has been removed.
+
+An additional parameter, `ics4Wrapper` has been added to the `host` submodule `NewKeeper` function in `modules/apps/27-interchain-accounts/host/keeper`.
+This allows the `host` submodule to correctly unwrap the channel version for channel reopening handshakes in the `OnChanOpenTry` callback.
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
++ ics4Wrapper icatypes.ICS4Wrapper,
+ channelKeeper icatypes.ChannelKeeper,
+ portKeeper icatypes.PortKeeper,
+ accountKeeper icatypes.AccountKeeper,
+ scopedKeeper icatypes.ScopedKeeper,
+ msgRouter icatypes.MessageRouter,
+) Keeper
+```
+
+#### Cosmos SDK message handler responses in packet acknowledgement
+
+The construction of the transaction response of a message execution on the host chain has changed. The `Data` field in the `sdk.TxMsgData` has been deprecated and since Cosmos SDK 0.46 the `MsgResponses` field contains the message handler responses packed into `Any`s.
+
+For chains on Cosmos SDK 0.45 and below, the message response was constructed like this:
+
+```go
+txMsgData := &sdk.TxMsgData{
+ Data: make([]*sdk.MsgData, len(msgs)),
+}
+
+for i, msg := range msgs {
+ // message validation
+
+ msgResponse, err := k.executeMsg(cacheCtx, msg)
+ // return if err != nil
+
+ txMsgData.Data[i] = &sdk.MsgData{
+ MsgType: sdk.MsgTypeURL(msg),
+ Data: msgResponse,
+ }
+}
+
+// emit events
+
+txResponse, err := proto.Marshal(txMsgData)
+// return if err != nil
+
+return txResponse, nil
+```
+
+And for chains on Cosmos SDK 0.46 and above, it is now done like this:
+
+```go
+txMsgData := &sdk.TxMsgData{
+ MsgResponses: make([]*codectypes.Any, len(msgs)),
+}
+
+for i, msg := range msgs {
+ // message validation
+
+ protoAny, err := k.executeMsg(cacheCtx, msg)
+ // return if err != nil
+
+ txMsgData.MsgResponses[i] = protoAny
+}
+
+// emit events
+
+txResponse, err := proto.Marshal(txMsgData)
+// return if err != nil
+
+return txResponse, nil
+```
+
+When handling the acknowledgement in the `OnAcknowledgementPacket` callback of a custom ICA controller module, then depending on whether `txMsgData.Data` is empty or not, the logic to handle the message handler response will be different. **Only controller chains on Cosmos SDK 0.46 or above will be able to write the logic needed to handle the response from a host chain on Cosmos SDK 0.46 or above.**
+
+```go
+var ack channeltypes.Acknowledgement
+if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil {
+ return err
+}
+
+var txMsgData sdk.TxMsgData
+if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil {
+ return err
+}
+
+switch len(txMsgData.Data) {
+case 0: // for SDK 0.46 and above
+ for _, msgResponse := range txMsgData.MsgResponses {
+ // unmarshall msgResponse and execute logic based on the response
+ }
+ return nil
+default: // for SDK 0.45 and below
+ for _, msgData := range txMsgData.Data {
+ // unmarshall msgData and execute logic based on the response
+ }
+}
+```
+
+See [ADR-03](/architecture/adr-003-ics27-acknowledgement#next-major-version-format) for more information or the [corrresponding documentation about authentication modules](../02-apps/02-interchain-accounts/03-auth-modules.md#onacknowledgementpacket).
+
+### ICS29 - Fee Middleware
+
+The `key` parameter of the `NewKeeper` function in `modules/apps/29-fee` is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`):
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ ics4Wrapper types.ICS4Wrapper,
+ channelKeeper types.ChannelKeeper,
+ portKeeper types.PortKeeper,
+ authKeeper types.AccountKeeper,
+ bankKeeper types.BankKeeper,
+) Keeper
+```
+
+The `RegisterRESTRoutes` function in `modules/apps/29-fee` has been removed.
+
+### IBC testing package
+
+The `MockIBCApp` type has been renamed to `IBCApp` (and the corresponding constructor function to `NewIBCApp`). This has resulted therefore in:
+
+- The `IBCApp` field of the `*IBCModule` in `testing/mock` to change its type as well to `*IBCApp`:
+
+```diff
+type IBCModule struct {
+ appModule *AppModule
+- IBCApp *MockIBCApp // base application of an IBC middleware stack
++ IBCApp *IBCApp // base application of an IBC middleware stack
+}
+```
+
+- The `app` parameter to `*NewIBCModule` in `testing/mock` to change its type as well to `*IBCApp`:
+
+```diff
+func NewIBCModule(
+ appModule *AppModule,
+- app *MockIBCApp
++ app *IBCApp
+) IBCModule
+```
+
+The `MockEmptyAcknowledgement` type has been renamed to `EmptyAcknowledgement` (and the corresponding constructor function to `NewEmptyAcknowledgement`).
+
+The `TestingApp` interface in `testing` has gone through some modifications:
+
+- The return type of the function `GetStakingKeeper` is not the concrete type `stakingkeeper.Keeper` anymore (where `stakingkeeper` is an import alias for `"github.com/cosmos/cosmos-sdk/x/staking/keeper"`), but it has been changed to the interface `ibctestingtypes.StakingKeeper` (where `ibctestingtypes` is an import alias for `""github.com/cosmos/ibc-go/v5/testing/types"`). See this [PR](https://github.com/cosmos/ibc-go/pull/2028) for more details. The `StakingKeeper` interface is defined as:
+
+```go
+type StakingKeeper interface {
+ GetHistoricalInfo(ctx sdk.Context, height int64) (stakingtypes.HistoricalInfo, bool)
+}
+```
+
+- The return type of the function `LastCommitID` has changed to `storetypes.CommitID` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`).
+
+See the following `git diff` for more details:
+
+```diff
+type TestingApp interface {
+ abci.Application
+
+ // ibc-go additions
+ GetBaseApp() *baseapp.BaseApp
+- GetStakingKeeper() stakingkeeper.Keeper
++ GetStakingKeeper() ibctestingtypes.StakingKeeper
+ GetIBCKeeper() *keeper.Keeper
+ GetScopedIBCKeeper() capabilitykeeper.ScopedKeeper
+ GetTxConfig() client.TxConfig
+
+ // Implemented by SimApp
+ AppCodec() codec.Codec
+
+ // Implemented by BaseApp
+- LastCommitID() sdk.CommitID
++ LastCommitID() storetypes.CommitID
+ LastBlockHeight() int64
+}
+```
+
+The `powerReduction` parameter of the function `SetupWithGenesisValSet` in `testing` is now of type `math.Int` (`"cosmossdk.io/math"`):
+
+```diff
+func SetupWithGenesisValSet(
+ t *testing.T,
+ valSet *tmtypes.ValidatorSet,
+ genAccs []authtypes.GenesisAccount,
+ chainID string,
+- powerReduction sdk.Int,
++ powerReduction math.Int,
+ balances ...banktypes.Balance
+) TestingApp
+```
+
+The `accAmt` parameter of the functions
+
+- `AddTestAddrsFromPubKeys` ,
+- `AddTestAddrs`
+- and `AddTestAddrsIncremental`
+
+in `testing/simapp` are now of type `math.Int` (`"cosmossdk.io/math"`):
+
+```diff
+func AddTestAddrsFromPubKeys(
+ app *SimApp,
+ ctx sdk.Context,
+ pubKeys []cryptotypes.PubKey,
+- accAmt sdk.Int,
++ accAmt math.Int
+)
+func addTestAddrs(
+ app *SimApp,
+ ctx sdk.Context,
+ accNum int,
+- accAmt sdk.Int,
++ accAmt math.Int,
+ strategy GenerateAccountStrategy
+) []sdk.AccAddress
+func AddTestAddrsIncremental(
+ app *SimApp,
+ ctx sdk.Context,
+ accNum int,
+- accAmt sdk.Int,
++ accAmt math.Int
+) []sdk.AccAddress
+```
+
+The `RegisterRESTRoutes` function in `testing/mock` has been removed.
+
+## Relayers
+
+- No relevant changes were made in this release.
+
+## IBC Light Clients
+
+### ICS02 - Client
+
+The `key` parameter of the `NewKeeper` function in `modules/core/02-client/keeper` is now of type `storetypes.StoreKey` (where `storetypes` is an import alias for `"github.com/cosmos/cosmos-sdk/store/types"`):
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec,
+- key sdk.StoreKey,
++ key storetypes.StoreKey,
+ paramSpace paramtypes.Subspace,
+ sk types.StakingKeeper,
+ uk types.UpgradeKeeper
+) Keeper
+```
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/07-v5-to-v6.md b/docs/versioned_docs/version-v8.0.x/05-migrations/07-v5-to-v6.md
new file mode 100644
index 00000000000..4fc777e6cd9
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/07-v5-to-v6.md
@@ -0,0 +1,299 @@
+---
+title: IBC-Go v5 to v6
+sidebar_label: IBC-Go v5 to v6
+sidebar_position: 7
+slug: /migrations/v5-to-v6
+---
+
+# Migrating from ibc-go v5 to v6
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- Chains
+- IBC Apps
+- Relayers
+- IBC Light Clients
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated to bump the version number on major releases.
+
+## Chains
+
+The `ibc-go/v6` release introduces a new set of migrations for `27-interchain-accounts`. Ownership of ICS27 channel capabilities is transferred from ICS27 authentication modules and will now reside with the ICS27 controller submodule moving forward.
+
+For chains which contain a custom authentication module using the ICS27 controller submodule this requires a migration function to be included in the chain upgrade handler. A subsequent migration handler is run automatically, asserting the ownership of ICS27 channel capabilities has been transferred successfully.
+
+This migration is not required for chains which *do not* contain a custom authentication module using the ICS27 controller submodule.
+
+This migration facilitates the addition of the ICS27 controller submodule `MsgServer` which provides a standardised approach to integrating existing forms of authentication such as `x/gov` and `x/group` provided by the Cosmos SDK.
+
+For more information please refer to [ADR 009](/architecture/adr-009-v6-ics27-msgserver).
+
+### Upgrade proposal
+
+Please refer to [PR #2383](https://github.com/cosmos/ibc-go/pull/2383) for integrating the ICS27 channel capability migration logic or follow the steps outlined below:
+
+1. Add the upgrade migration logic to chain distribution. This may be, for example, maintained under a package `app/upgrades/v6`.
+
+```go
+package v6
+
+import (
+ "github.com/cosmos/cosmos-sdk/codec"
+ storetypes "github.com/cosmos/cosmos-sdk/store/types"
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ "github.com/cosmos/cosmos-sdk/types/module"
+ capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
+ upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
+
+ v6 "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/controller/migrations/v6"
+)
+
+const (
+ UpgradeName = "v6"
+)
+
+func CreateUpgradeHandler(
+ mm *module.Manager,
+ configurator module.Configurator,
+ cdc codec.BinaryCodec,
+ capabilityStoreKey *storetypes.KVStoreKey,
+ capabilityKeeper *capabilitykeeper.Keeper,
+ moduleName string,
+) upgradetypes.UpgradeHandler {
+ return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
+ if err := v6.MigrateICS27ChannelCapability(ctx, cdc, capabilityStoreKey, capabilityKeeper, moduleName); err != nil {
+ return nil, err
+ }
+
+ return mm.RunMigrations(ctx, configurator, vm)
+ }
+}
+```
+
+2. Set the upgrade handler in `app.go`. The `moduleName` parameter refers to the authentication module's `ScopedKeeper` name. This is the name provided upon instantiation in `app.go` via the [`x/capability` keeper `ScopeToModule(moduleName string)`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.1/x/capability/keeper/keeper.go#L70) method. [See here for an example in `simapp`](https://github.com/cosmos/ibc-go/blob/v5.0.0/testing/simapp/app.go#L304).
+
+```go
+app.UpgradeKeeper.SetUpgradeHandler(
+ v6.UpgradeName,
+ v6.CreateUpgradeHandler(
+ app.mm,
+ app.configurator,
+ app.appCodec,
+ app.keys[capabilitytypes.ModuleName],
+ app.CapabilityKeeper,
+ >>>> moduleName <<<<,
+ ),
+)
+```
+
+## IBC Apps
+
+### ICS27 - Interchain Accounts
+
+#### Controller APIs
+
+In previous releases of ibc-go, chain developers integrating the ICS27 interchain accounts controller functionality were expected to create a custom `Base Application` referred to as an authentication module, see the section [Building an authentication module](../02-apps/02-interchain-accounts/03-auth-modules.md) from the documentation.
+
+The `Base Application` was intended to be composed with the ICS27 controller submodule `Keeper` and facilitate many forms of message authentication depending on a chain's particular use case.
+
+Prior to ibc-go v6 the controller submodule exposed only these two functions (to which we will refer as the legacy APIs):
+
+- [`RegisterInterchainAccount`](https://github.com/cosmos/ibc-go/blob/v5.0.0/modules/apps/27-interchain-accounts/controller/keeper/account.go#L19)
+- [`SendTx`](https://github.com/cosmos/ibc-go/blob/v5.0.0/modules/apps/27-interchain-accounts/controller/keeper/relay.go#L18)
+
+However, these functions have now been deprecated in favour of the new controller submodule `MsgServer` and will be removed in later releases.
+
+Both APIs remain functional and maintain backwards compatibility in ibc-go v6, however consumers of these APIs are now recommended to follow the message passing paradigm outlined in Cosmos SDK [ADR 031](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-031-msg-service.md) and [ADR 033](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-033-protobuf-inter-module-comm.md). This is facilitated by the Cosmos SDK [`MsgServiceRouter`](https://github.com/cosmos/cosmos-sdk/blob/main/baseapp/msg_service_router.go#L17) and chain developers creating custom application logic can now omit the ICS27 controller submodule `Keeper` from their module and instead depend on message routing.
+
+Depending on the use case, developers of custom authentication modules face one of three scenarios:
+
+![auth-module-decision-tree.png](./images/auth-module-decision-tree.png)
+
+**My authentication module needs to access IBC packet callbacks**
+
+Application developers that wish to consume IBC packet callbacks and react upon packet acknowledgements **must** continue using the controller submodule's legacy APIs. The authentication modules will not need a `ScopedKeeper` anymore, though, because the channel capability will be claimed by the controller submodule. For example, given an Interchain Accounts authentication module keeper `ICAAuthKeeper`, the authentication module's `ScopedKeeper` (`scopedICAAuthKeeper`) is not needed anymore and can be removed for the argument list of the keeper constructor function, as shown here:
+
+```diff
+app.ICAAuthKeeper = icaauthkeeper.NewKeeper(
+ appCodec,
+ keys[icaauthtypes.StoreKey],
+ app.ICAControllerKeeper,
+- scopedICAAuthKeeper,
+)
+```
+
+Please note that the authentication module's `ScopedKeeper` name is still needed as part of the channel capability migration described in section [Upgrade proposal](#upgrade-proposal) above. Therefore the authentication module's `ScopedKeeper` cannot be completely removed from the chain code until the migration has run.
+
+In the future, the use of the legacy APIs for accessing packet callbacks will be replaced by IBC Actor Callbacks (see [ADR 008](https://github.com/cosmos/ibc-go/pull/1976) for more details) and it will also be possible to access them with the `MsgServiceRouter`.
+
+**My authentication module does not need access to IBC packet callbacks**
+
+The authentication module can migrate from using the legacy APIs and it can be composed instead with the `MsgServiceRouter`, so that the authentication module is able to pass messages to the controller submodule's `MsgServer` to register interchain accounts and send packets to the interchain account. For example, given an Interchain Accounts authentication module keeper `ICAAuthKeeper`, the ICS27 controller submodule keeper (`ICAControllerKeeper`) and authentication module scoped keeper (`scopedICAAuthKeeper`) are not needed anymore and can be replaced with the `MsgServiceRouter`, as shown here:
+
+```diff
+app.ICAAuthKeeper = icaauthkeeper.NewKeeper(
+ appCodec,
+ keys[icaauthtypes.StoreKey],
+- app.ICAControllerKeeper,
+- scopedICAAuthKeeper,
++ app.MsgServiceRouter(),
+)
+```
+
+In your authentication module you can route messages to the controller submodule's `MsgServer` instead of using the legacy APIs. For example, for registering an interchain account:
+
+```diff
+- if err := keeper.icaControllerKeeper.RegisterInterchainAccount(
+- ctx,
+- connectionID,
+- owner.String(),
+- version,
+- ); err != nil {
+- return err
+- }
++ msg := controllertypes.NewMsgRegisterInterchainAccount(
++ connectionID,
++ owner.String(),
++ version,
++ )
++ handler := keeper.msgRouter.Handler(msg)
++ res, err := handler(ctx, msg)
++ if err != nil {
++ return err
++ }
+```
+
+where `controllertypes` is an import alias for `"github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/controller/types"`.
+
+In addition, in this use case the authentication module does not need to implement the `IBCModule` interface anymore.
+
+**I do not need a custom authentication module anymore**
+
+If your authentication module does not have any extra functionality compared to the default authentication module added in ibc-go v6 (the `MsgServer`), or if you can use a generic authentication module, such as the `x/auth`, `x/gov` or `x/group` modules from the Cosmos SDK (v0.46 and later), then you can remove your authentication module completely and use instead the gRPC endpoints of the `MsgServer` or the CLI added in ibc-go v6.
+
+Please remember that the authentication module's `ScopedKeeper` name is still needed as part of the channel capability migration described in section [Upgrade proposal](#upgrade-proposal) above.
+
+#### Host params
+
+The ICS27 host submodule default params have been updated to include the `AllowAllHostMsgs` wildcard `*`.
+This enables execution of any `sdk.Msg` type for ICS27 registered on the host chain `InterfaceRegistry`.
+
+```diff
+// AllowAllHostMsgs holds the string key that allows all message types on interchain accounts host module
+const AllowAllHostMsgs = "*"
+
+...
+
+// DefaultParams is the default parameter configuration for the host submodule
+func DefaultParams() Params {
+- return NewParams(DefaultHostEnabled, nil)
++ return NewParams(DefaultHostEnabled, []string{AllowAllHostMsgs})
+}
+```
+
+#### API breaking changes
+
+`SerializeCosmosTx` takes in a `[]proto.Message` instead of `[]sdk.Message`. This allows for the serialization of proto messages without requiring the fulfillment of the `sdk.Msg` interface.
+
+The `27-interchain-accounts` genesis types have been moved to their own package: `modules/apps/27-interchain-acccounts/genesis/types`.
+This change facilitates the addition of the ICS27 controller submodule `MsgServer` and avoids cyclic imports. This should have minimal disruption to chain developers integrating `27-interchain-accounts`.
+
+The ICS27 host submodule `NewKeeper` function in `modules/apps/27-interchain-acccounts/host/keeper` now includes an additional parameter of type `ICS4Wrapper`.
+This provides the host submodule with the ability to correctly unwrap channel versions in the event of a channel reopening handshake.
+
+```diff
+func NewKeeper(
+ cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace paramtypes.Subspace,
+- channelKeeper icatypes.ChannelKeeper, portKeeper icatypes.PortKeeper,
++ ics4Wrapper icatypes.ICS4Wrapper, channelKeeper icatypes.ChannelKeeper, portKeeper icatypes.PortKeeper,
+ accountKeeper icatypes.AccountKeeper, scopedKeeper icatypes.ScopedKeeper, msgRouter icatypes.MessageRouter,
+) Keeper
+```
+
+### ICS29 - `NewKeeper` API change
+
+The `NewKeeper` function of ICS29 has been updated to remove the `paramSpace` parameter as it was unused.
+
+```diff
+func NewKeeper(
+- cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace paramtypes.Subspace,
+- ics4Wrapper types.ICS4Wrapper, channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper, authKeeper types.AccountKeeper, bankKeeper types.BankKeeper,
++ cdc codec.BinaryCodec, key storetypes.StoreKey,
++ ics4Wrapper types.ICS4Wrapper, channelKeeper types.ChannelKeeper,
++ portKeeper types.PortKeeper, authKeeper types.AccountKeeper, bankKeeper types.BankKeeper,
+) Keeper {
+```
+
+### ICS20 - `SendTransfer` is no longer exported
+
+The `SendTransfer` function of ICS20 has been removed. IBC transfers should now be initiated with `MsgTransfer` and routed to the ICS20 `MsgServer`.
+
+See below for example:
+
+```go
+if handler := msgRouter.Handler(msgTransfer); handler != nil {
+ if err := msgTransfer.ValidateBasic(); err != nil {
+ return nil, err
+ }
+
+ res, err := handler(ctx, msgTransfer)
+ if err != nil {
+ return nil, err
+ }
+}
+```
+
+### ICS04 - `SendPacket` API change
+
+The `SendPacket` API has been simplified:
+
+```diff
+// SendPacket is called by a module in order to send an IBC packet on a channel
+func (k Keeper) SendPacket(
+ ctx sdk.Context,
+ channelCap *capabilitytypes.Capability,
+- packet exported.PacketI,
+-) error {
++ sourcePort string,
++ sourceChannel string,
++ timeoutHeight clienttypes.Height,
++ timeoutTimestamp uint64,
++ data []byte,
++) (uint64, error) {
+```
+
+Callers no longer need to pass in a pre-constructed packet.
+The destination port/channel identifiers and the packet sequence will be determined by core IBC.
+`SendPacket` will return the packet sequence.
+
+### IBC testing package
+
+The `SendPacket` API has been simplified:
+
+```diff
+// SendPacket is called by a module in order to send an IBC packet on a channel
+func (k Keeper) SendPacket(
+ ctx sdk.Context,
+ channelCap *capabilitytypes.Capability,
+- packet exported.PacketI,
+-) error {
++ sourcePort string,
++ sourceChannel string,
++ timeoutHeight clienttypes.Height,
++ timeoutTimestamp uint64,
++ data []byte,
++) (uint64, error) {
+```
+
+Callers no longer need to pass in a pre-constructed packet. `SendPacket` will return the packet sequence.
+
+## Relayers
+
+- No relevant changes were made in this release.
+
+## IBC Light Clients
+
+- No relevant changes were made in this release.
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/08-v6-to-v7.md b/docs/versioned_docs/version-v8.0.x/05-migrations/08-v6-to-v7.md
new file mode 100644
index 00000000000..da47b395021
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/08-v6-to-v7.md
@@ -0,0 +1,357 @@
+---
+title: IBC-Go v6 to v7
+sidebar_label: IBC-Go v6 to v7
+sidebar_position: 8
+slug: /migrations/v6-to-v7
+---
+# Migrating from ibc-go v6 to v7
+
+This document is intended to highlight significant changes which may require more information than presented in the CHANGELOG.
+Any changes that must be done by a user of ibc-go should be documented here.
+
+There are four sections based on the four potential user groups of this document:
+
+- Chains
+- IBC Apps
+- Relayers
+- IBC Light Clients
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated to bump the version number on major releases.
+
+## Chains
+
+Chains will perform automatic migrations to remove existing localhost clients and to migrate the solomachine to v3 of the protobuf definition.
+
+An optional upgrade handler has been added to prune expired tendermint consensus states. It may be used during any upgrade (from v7 onwards).
+Add the following to the function call to the upgrade handler in `app/app.go`, to perform the optional state pruning.
+
+```go
+import (
+ // ...
+ ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations"
+)
+
+// ...
+
+app.UpgradeKeeper.SetUpgradeHandler(
+ upgradeName,
+ func(ctx sdk.Context, _ upgradetypes.Plan, _ module.VersionMap) (module.VersionMap, error) {
+ // prune expired tendermint consensus states to save storage space
+ _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, app.Codec, app.IBCKeeper.ClientKeeper)
+ if err != nil {
+ return nil, err
+ }
+
+ return app.mm.RunMigrations(ctx, app.configurator, fromVM)
+ },
+)
+```
+
+Checkout the logs to see how many consensus states are pruned.
+
+### Light client registration
+
+Chains must explicitly register the types of any light client modules it wishes to integrate.
+
+#### Tendermint registration
+
+To register the tendermint client, modify the `app.go` file to include the tendermint `AppModuleBasic`:
+
+```diff
+import (
+ // ...
++ ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint"
+)
+
+// ...
+
+ModuleBasics = module.NewBasicManager(
+ ...
+ ibc.AppModuleBasic{},
++ ibctm.AppModuleBasic{},
+ ...
+)
+```
+
+It may be useful to reference the [PR](https://github.com/cosmos/ibc-go/pull/2825) which added the `AppModuleBasic` for the tendermint client.
+
+#### Solo machine registration
+
+To register the solo machine client, modify the `app.go` file to include the solo machine `AppModuleBasic`:
+
+```diff
+import (
+ // ...
++ solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine"
+)
+
+// ...
+
+ModuleBasics = module.NewBasicManager(
+ ...
+ ibc.AppModuleBasic{},
++ solomachine.AppModuleBasic{},
+ ...
+)
+```
+
+It may be useful to reference the [PR](https://github.com/cosmos/ibc-go/pull/2826) which added the `AppModuleBasic` for the solo machine client.
+
+### Testing package API
+
+The `SetChannelClosed` utility method in `testing/endpoint.go` has been updated to `SetChannelState`, which will take a `channeltypes.State` argument so that the `ChannelState` can be set to any of the possible channel states.
+
+## IBC Apps
+
+- No relevant changes were made in this release.
+
+## Relayers
+
+- No relevant changes were made in this release.
+
+## IBC Light Clients
+
+### `ClientState` interface changes
+
+The `VerifyUpgradeAndUpdateState` function has been modified. The client state and consensus state return values have been removed.
+
+Light clients **must** handle all management of client and consensus states including the setting of updated client state and consensus state in the client store.
+
+The `Initialize` method is now expected to set the initial client state, consensus state and any client-specific metadata in the provided store upon client creation.
+
+The `CheckHeaderAndUpdateState` method has been split into 4 new methods:
+
+- `VerifyClientMessage` verifies a `ClientMessage`. A `ClientMessage` could be a `Header`, `Misbehaviour`, or batch update. Calls to `CheckForMisbehaviour`, `UpdateState`, and `UpdateStateOnMisbehaviour` will assume that the content of the `ClientMessage` has been verified and can be trusted. An error should be returned if the `ClientMessage` fails to verify.
+
+- `CheckForMisbehaviour` checks for evidence of a misbehaviour in `Header` or `Misbehaviour` types.
+
+- `UpdateStateOnMisbehaviour` performs appropriate state changes on a `ClientState` given that misbehaviour has been detected and verified.
+
+- `UpdateState` updates and stores as necessary any associated information for an IBC client, such as the `ClientState` and corresponding `ConsensusState`. An error is returned if `ClientMessage` is of type `Misbehaviour`. Upon successful update, a list containing the updated consensus state height is returned.
+
+The `CheckMisbehaviourAndUpdateState` function has been removed from `ClientState` interface. This functionality is now encapsulated by the usage of `VerifyClientMessage`, `CheckForMisbehaviour`, `UpdateStateOnMisbehaviour`.
+
+The function `GetTimestampAtHeight` has been added to the `ClientState` interface. It should return the timestamp for a consensus state associated with the provided height.
+
+Prior to ibc-go/v7 the `ClientState` interface defined a method for each data type which was being verified in the counterparty state store.
+The state verification functions for all IBC data types have been consolidated into two generic methods, `VerifyMembership` and `VerifyNonMembership`.
+Both are expected to be provided with a standardised key path, `exported.Path`, as defined in [ICS 24 host requirements](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements). Membership verification requires callers to provide the marshalled value `[]byte`. Delay period values should be zero for non-packet processing verification. A zero proof height is now allowed by core IBC and may be passed into `VerifyMembership` and `VerifyNonMembership`. Light clients are responsible for returning an error if a zero proof height is invalid behaviour.
+
+See below for an example of how ibc-go now performs channel state verification.
+
+```go
+merklePath := commitmenttypes.NewMerklePath(host.ChannelPath(portID, channelID))
+merklePath, err := commitmenttypes.ApplyPrefix(connection.GetCounterparty().GetPrefix(), merklePath)
+if err != nil {
+ return err
+}
+
+channelEnd, ok := channel.(channeltypes.Channel)
+if !ok {
+ return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "invalid channel type %T", channel)
+}
+
+bz, err := k.cdc.Marshal(&channelEnd)
+if err != nil {
+ return err
+}
+
+if err := clientState.VerifyMembership(
+ ctx, clientStore, k.cdc, height,
+ 0, 0, // skip delay period checks for non-packet processing verification
+ proof, merklePath, bz,
+); err != nil {
+ return sdkerrors.Wrapf(err, "failed channel state verification for client (%s)", clientID)
+}
+```
+
+### `Header` and `Misbehaviour`
+
+`exported.Header` and `exported.Misbehaviour` interface types have been merged and renamed to `ClientMessage` interface.
+
+`GetHeight` function has been removed from `exported.Header` and thus is not included in the `ClientMessage` interface
+
+### `ConsensusState`
+
+The `GetRoot` function has been removed from consensus state interface since it was not used by core IBC.
+
+### Client keeper
+
+Keeper function `CheckMisbehaviourAndUpdateState` has been removed since function `UpdateClient` can now handle updating `ClientState` on `ClientMessage` type which can be any `Misbehaviour` implementations.
+
+### SDK message
+
+`MsgSubmitMisbehaviour` is deprecated since `MsgUpdateClient` can now submit a `ClientMessage` type which can be any `Misbehaviour` implementations.
+
+The field `header` in `MsgUpdateClient` has been renamed to `client_message`.
+
+## Solomachine
+
+The `06-solomachine` client implementation has been simplified in ibc-go/v7. In-place store migrations have been added to migrate solomachine clients from `v2` to `v3`.
+
+### `ClientState`
+
+The `ClientState` protobuf message definition has been updated to remove the deprecated `bool` field `allow_update_after_proposal`.
+
+```diff
+message ClientState {
+ option (gogoproto.goproto_getters) = false;
+
+ uint64 sequence = 1;
+ bool is_frozen = 2 [(gogoproto.moretags) = "yaml:\"is_frozen\""];
+ ConsensusState consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""];
+- bool allow_update_after_proposal = 4 [(gogoproto.moretags) = "yaml:\"allow_update_after_proposal\""];
+}
+```
+
+### `Header` and `Misbehaviour`
+
+The `06-solomachine` protobuf message `Header` has been updated to remove the `sequence` field. This field was seen as redundant as the implementation can safely rely on the `sequence` value maintained within the `ClientState`.
+
+```diff
+message Header {
+ option (gogoproto.goproto_getters) = false;
+
+- uint64 sequence = 1;
+- uint64 timestamp = 2;
+- bytes signature = 3;
+- google.protobuf.Any new_public_key = 4 [(gogoproto.moretags) = "yaml:\"new_public_key\""];
+- string new_diversifier = 5 [(gogoproto.moretags) = "yaml:\"new_diversifier\""];
++ uint64 timestamp = 1;
++ bytes signature = 2;
++ google.protobuf.Any new_public_key = 3 [(gogoproto.moretags) = "yaml:\"new_public_key\""];
++ string new_diversifier = 4 [(gogoproto.moretags) = "yaml:\"new_diversifier\""];
+}
+```
+
+Similarly, the `Misbehaviour` protobuf message has been updated to remove the `client_id` field.
+
+```diff
+message Misbehaviour {
+ option (gogoproto.goproto_getters) = false;
+
+- string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
+- uint64 sequence = 2;
+- SignatureAndData signature_one = 3 [(gogoproto.moretags) = "yaml:\"signature_one\""];
+- SignatureAndData signature_two = 4 [(gogoproto.moretags) = "yaml:\"signature_two\""];
++ uint64 sequence = 1;
++ SignatureAndData signature_one = 2 [(gogoproto.moretags) = "yaml:\"signature_one\""];
++ SignatureAndData signature_two = 3 [(gogoproto.moretags) = "yaml:\"signature_two\""];
+}
+```
+
+### `SignBytes`
+
+Most notably, the `SignBytes` protobuf definition has been modified to replace the `data_type` field with a new field, `path`. The `path` field is defined as `bytes` and represents a serialized [ICS-24](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements) standardized key path under which the `data` is stored.
+
+```diff
+message SignBytes {
+ option (gogoproto.goproto_getters) = false;
+
+ uint64 sequence = 1;
+ uint64 timestamp = 2;
+ string diversifier = 3;
+- DataType data_type = 4 [(gogoproto.moretags) = "yaml:\"data_type\""];
++ bytes path = 4;
+ bytes data = 5;
+}
+```
+
+The `DataType` enum and all associated data types have been removed, greatly reducing the number of message definitions and complexity in constructing the `SignBytes` message type. Likewise, solomachine implementations must now use the serialized `path` value when constructing `SignatureAndData` for signature verification of `SignBytes` data.
+
+```diff
+message SignatureAndData {
+ option (gogoproto.goproto_getters) = false;
+
+ bytes signature = 1;
+- DataType data_type = 2 [(gogoproto.moretags) = "yaml:\"data_type\""];
++ bytes path = 2;
+ bytes data = 3;
+ uint64 timestamp = 4;
+}
+```
+
+For more information, please refer to [ADR-007](https://github.com/cosmos/ibc-go/blob/02-client-refactor-beta1/docs/architecture/adr-007-solomachine-signbytes.md).
+
+### IBC module constants
+
+IBC module constants have been moved from the `host` package to the `exported` package. Any usages will need to be updated.
+
+```diff
+import (
+ // ...
+- host "github.com/cosmos/ibc-go/v7/modules/core/24-host"
++ ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported"
+ // ...
+)
+
+- host.ModuleName
++ ibcexported.ModuleName
+
+- host.StoreKey
++ ibcexported.StoreKey
+
+- host.QuerierRoute
++ ibcexported.QuerierRoute
+
+- host.RouterKey
++ ibcexported.RouterKey
+```
+
+## Upgrading to Cosmos SDK 0.47
+
+The following should be considered as complementary to [Cosmos SDK v0.47 UPGRADING.md](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc2/UPGRADING.md).
+
+### Protobuf
+
+Protobuf code generation, linting and formatting have been updated to leverage the `ghcr.io/cosmos/proto-builder:0.11.5` docker container. IBC protobuf definitions are now packaged and published to [buf.build/cosmos/ibc](https://buf.build/cosmos/ibc) via CI workflows. The `third_party/proto` directory has been removed in favour of dependency management using [buf.build](https://docs.buf.build/introduction).
+
+### App modules
+
+Legacy APIs of the `AppModule` interface have been removed from ibc-go modules. For example, for
+
+```diff
+- // Route implements the AppModule interface
+- func (am AppModule) Route() sdk.Route {
+- return sdk.Route{}
+- }
+-
+- // QuerierRoute implements the AppModule interface
+- func (AppModule) QuerierRoute() string {
+- return types.QuerierRoute
+- }
+-
+- // LegacyQuerierHandler implements the AppModule interface
+- func (am AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier {
+- return nil
+- }
+-
+- // ProposalContents doesn't return any content functions for governance proposals.
+- func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent {
+- return nil
+- }
+```
+
+### Imports
+
+Imports for ics23 have been updated as the repository have been migrated from confio to cosmos.
+
+```diff
+import (
+ // ...
+- ics23 "github.com/confio/ics23/go"
++ ics23 "github.com/cosmos/ics23/go"
+ // ...
+)
+```
+
+Imports for gogoproto have been updated.
+
+```diff
+import (
+ // ...
+- "github.com/gogo/protobuf/proto"
++ "github.com/cosmos/gogoproto/proto"
+ // ...
+)
+```
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/09-v7-to-v7_1.md b/docs/versioned_docs/version-v8.0.x/05-migrations/09-v7-to-v7_1.md
new file mode 100644
index 00000000000..30d9578dbc2
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/09-v7-to-v7_1.md
@@ -0,0 +1,66 @@
+---
+title: IBC-Go v7 to v7.1
+sidebar_label: IBC-Go v7 to v7.1
+sidebar_position: 9
+slug: /migrations/v7-to-v7_1
+---
+
+# Migrating from v7 to v7.1
+
+This guide provides instructions for migrating to version `v7.1.0` of ibc-go.
+
+There are four sections based on the four potential user groups of this document:
+
+- [Migrating from v7 to v7.1](#migrating-from-v7-to-v71)
+ - [Chains](#chains)
+ - [IBC Apps](#ibc-apps)
+ - [Relayers](#relayers)
+ - [IBC Light Clients](#ibc-light-clients)
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases.
+
+## Chains
+
+In the previous release of ibc-go, the localhost `v1` light client module was deprecated and removed. The ibc-go `v7.1.0` release introduces `v2` of the 09-localhost light client module.
+
+An [automatic migration handler](https://github.com/cosmos/ibc-go/blob/v7.2.0/modules/core/module.go#L127-L145) is configured in the core IBC module to set the localhost `ClientState` and sentinel `ConnectionEnd` in state.
+
+In order to use the 09-localhost client chains must update the `AllowedClients` parameter in the 02-client submodule of core IBC. This can be configured directly in the application upgrade handler or alternatively updated via the legacy governance parameter change proposal.
+We **strongly** recommend chains to perform this action so that intra-ledger communication can be carried out using the familiar IBC interfaces.
+
+See the upgrade handler code sample provided below or [follow this link](https://github.com/cosmos/ibc-go/blob/v7.2.0/testing/simapp/upgrades/upgrades.go#L85) for the upgrade handler used by the ibc-go simapp.
+
+```go
+func CreateV7LocalhostUpgradeHandler(
+ mm *module.Manager,
+ configurator module.Configurator,
+ clientKeeper clientkeeper.Keeper,
+) upgradetypes.UpgradeHandler {
+ return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
+ // explicitly update the IBC 02-client params, adding the localhost client type
+ params := clientKeeper.GetParams(ctx)
+ params.AllowedClients = append(params.AllowedClients, exported.Localhost)
+ clientKeeper.SetParams(ctx, params)
+
+ return mm.RunMigrations(ctx, configurator, vm)
+ }
+}
+```
+
+### Transfer migration
+
+An [automatic migration handler](https://github.com/cosmos/ibc-go/blob/v7.2.0/modules/apps/transfer/module.go#L111-L113) is configured in the transfer module to set the total amount in escrow for all denominations of coins that have been sent out. For each denomination a state entry is added with the total amount of coins in escrow regardless of the channel from which they were transferred.
+
+## IBC Apps
+
+- No relevant changes were made in this release.
+
+## Relayers
+
+The event attribute `packet_connection` (`connectiontypes.AttributeKeyConnection`) has been deprecated.
+Please use the `connection_id` attribute (`connectiontypes.AttributeKeyConnectionID`) which is emitted by all channel events.
+Only send packet, receive packet, write acknowledgement, and acknowledge packet events used `packet_connection` previously.
+
+## IBC Light Clients
+
+- No relevant changes were made in this release.
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/10-v7_2-to-v7_3.md b/docs/versioned_docs/version-v8.0.x/05-migrations/10-v7_2-to-v7_3.md
new file mode 100644
index 00000000000..8fc76f67c27
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/10-v7_2-to-v7_3.md
@@ -0,0 +1,50 @@
+---
+title: IBC-Go v7.2 to v7.3
+sidebar_label: IBC-Go v7.2 to v7.3
+sidebar_position: 10
+slug: /migrations/v7_2-to-v7_3
+---
+
+# Migrating from v7.2 to v7.3
+
+This guide provides instructions for migrating to version `v7.3.0` of ibc-go.
+
+There are four sections based on the four potential user groups of this document:
+
+- [Migrating from v7.2 to v7.3](#migrating-from-v72-to-v73)
+ - [Chains](#chains)
+ - [IBC Apps](#ibc-apps)
+ - [Relayers](#relayers)
+ - [IBC Light Clients](#ibc-light-clients)
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases.
+
+## Chains
+
+- No relevant changes were made in this release.
+
+## IBC Apps
+
+A set of interfaces have been added that IBC applications may optionally implement. Developers interested in integrating their applications with the [callbacks middleware](../04-middleware/02-callbacks/01-overview.md) should implement these interfaces so that the callbacks middleware can retrieve the desired callback addresses on the source and destination chains and execute actions on packet lifecycle events. The interfaces are [`PacketDataUnmarshaler`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/core/05-port/types/module.go#L142-L147), [`PacketDataProvider`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/core/exported/packet.go#L43-L52) and [`PacketData`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/core/exported/packet.go#L36-L41).
+
+Sample implementations are available for reference. For `transfer`:
+
+- [`PacketDataUnmarshaler`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/apps/transfer/ibc_module.go#L303-L313),
+- [`PacketDataProvider`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/apps/transfer/types/packet.go#L85-L105)
+- and [`PacketData`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/apps/transfer/types/packet.go#L74-L83).
+
+For `27-interchain-accounts`:
+
+- [`PacketDataUnmarshaler`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/apps/27-interchain-accounts/controller/ibc_middleware.go#L258-L268),
+- [`PacketDataProvider`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/apps/27-interchain-accounts/types/packet.go#L94-L114)
+- and [`PacketData`](https://github.com/cosmos/ibc-go/blob/v7.3.0-rc1/modules/apps/27-interchain-accounts/types/packet.go#L78-L92).
+
+## Relayers
+
+- No relevant changes were made in this release.
+
+## IBC Light Clients
+
+### 06-solomachine
+
+Solo machines are now expected to sign data on a path that 1) does not include a connection prefix (e.g `ibc`) and 2) does not escape any characters. See PR [#4429](https://github.com/cosmos/ibc-go/pull/4429) for more details. We recommend **NOT** using the solo machine light client of versions lower than v7.3.0.
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/11-v7-to-v8.md b/docs/versioned_docs/version-v8.0.x/05-migrations/11-v7-to-v8.md
new file mode 100644
index 00000000000..a6c0871b035
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/11-v7-to-v8.md
@@ -0,0 +1,221 @@
+---
+title: IBC-Go v7 to v8
+sidebar_label: IBC-Go v7 to v8
+sidebar_position: 11
+slug: /migrations/v7-to-v8
+---
+
+# Migrating from v7 to v8
+
+This guide provides instructions for migrating to version `v8.0.0` of ibc-go.
+
+There are four sections based on the four potential user groups of this document:
+
+- [Migrating from v7 to v8](#migrating-from-v7-to-v8)
+ - [Chains](#chains)
+ - [Cosmos SDK v0.50 upgrade](#cosmos-sdk-v050-upgrade)
+ - [Authority](#authority)
+ - [Testing package](#testing-package)
+ - [Params migration](#params-migration)
+ - [Governance V1 migration](#governance-v1-migration)
+ - [Transfer migration](#transfer-migration)
+ - [IBC Apps](#ibc-apps)
+ - [ICS20 - Transfer](#ics20---transfer)
+ - [ICS27 - Interchain Accounts](#ics27---interchain-accounts)
+ - [Relayers](#relayers)
+ - [IBC Light Clients](#ibc-light-clients)
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases.
+
+## Chains
+
+The type of the `PortKeeper` field of the IBC keeper have been changed to `*portkeeper.Keeper`:
+
+```diff
+// Keeper defines each ICS keeper for IBC
+type Keeper struct {
+ // implements gRPC QueryServer interface
+ types.QueryServer
+
+ cdc codec.BinaryCodec
+
+ ClientKeeper clientkeeper.Keeper
+ ConnectionKeeper connectionkeeper.Keeper
+ ChannelKeeper channelkeeper.Keeper
+- PortKeeper portkeeper.Keeper
++ PortKeeper *portkeeper.Keeper
+ Router *porttypes.Router
+
+ authority string
+}
+```
+
+See [this PR](https://github.com/cosmos/ibc-go/pull/4703/files#diff-d18972debee5e64f16e40807b2ae112ddbe609504a93ea5e1c80a5d489c3a08a) for the changes required in `app.go`.
+
+An extra parameter `totalEscrowed` of type `sdk.Coins` has been added to transfer module's [`NewGenesisState` function](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/transfer/types/genesis.go#L10). This parameter specifies the total amount of tokens that are in the module's escrow accounts.
+
+### Cosmos SDK v0.50 upgrade
+
+Version `v8.0.0` of ibc-go upgrades to Cosmos SDK v0.50. Please follow the [Cosmos SDK v0.50 upgrading guide](https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-rc.0/UPGRADING.md) to account for its API breaking changes.
+
+### Authority
+
+An authority identifier (e.g. an address) needs to be passed in the `NewKeeper` functions of the following keepers:
+
+- You must pass the `authority` to the ica/host keeper (implemented in [#3520](https://github.com/cosmos/ibc-go/pull/3520)). See [diff](https://github.com/cosmos/ibc-go/pull/3520/files#diff-d18972debee5e64f16e40807b2ae112ddbe609504a93ea5e1c80a5d489c3a08a):
+
+```diff
+// app.go
+
+// ICA Host keeper
+app.ICAHostKeeper = icahostkeeper.NewKeeper(
+ appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName),
+ app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(),
++ authtypes.NewModuleAddress(govtypes.ModuleName).String(),
+)
+```
+
+- You must pass the `authority` to the ica/controller keeper (implemented in [#3590](https://github.com/cosmos/ibc-go/pull/3590)). See [diff](https://github.com/cosmos/ibc-go/pull/3590/files#diff-d18972debee5e64f16e40807b2ae112ddbe609504a93ea5e1c80a5d489c3a08a):
+
+```diff
+// app.go
+
+// ICA Controller keeper
+app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper(
+ appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName),
+ app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ scopedICAControllerKeeper, app.MsgServiceRouter(),
++ authtypes.NewModuleAddress(govtypes.ModuleName).String(),
+)
+```
+
+- You must pass the `authority` to the ibctransfer keeper (implemented in [#3553](https://github.com/cosmos/ibc-go/pull/3553)). See [diff](https://github.com/cosmos/ibc-go/pull/3553/files#diff-d18972debee5e64f16e40807b2ae112ddbe609504a93ea5e1c80a5d489c3a08a):
+
+```diff
+// app.go
+
+// Create Transfer Keeper and pass IBCFeeKeeper as expected Channel and PortKeeper
+// since fee middleware will wrap the IBCKeeper for underlying application.
+app.TransferKeeper = ibctransferkeeper.NewKeeper(
+ appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName),
+ app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware
+ app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
+ app.AccountKeeper, app.BankKeeper, scopedTransferKeeper,
++ authtypes.NewModuleAddress(govtypes.ModuleName).String(),
+)
+```
+
+- You should pass the `authority` to the IBC keeper (implemented in [#3640](https://github.com/cosmos/ibc-go/pull/3640) and [#3650](https://github.com/cosmos/ibc-go/pull/3650)). See [diff](https://github.com/cosmos/ibc-go/pull/3640/files#diff-d18972debee5e64f16e40807b2ae112ddbe609504a93ea5e1c80a5d489c3a08a):
+
+```diff
+// app.go
+
+// IBC Keepers
+app.IBCKeeper = ibckeeper.NewKeeper(
+ appCodec,
+ keys[ibcexported.StoreKey],
+ app.GetSubspace(ibcexported.ModuleName),
+ app.StakingKeeper,
+ app.UpgradeKeeper,
+ scopedIBCKeeper,
++ authtypes.NewModuleAddress(govtypes.ModuleName).String(),
+)
+```
+
+The authority determines the transaction signer allowed to execute certain messages (e.g. `MsgUpdateParams`).
+
+### Testing package
+
+- The function `SetupWithGenesisAccounts` has been removed.
+- The function [`RelayPacketWithResults`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/testing/path.go#L66) has been added. This function returns the result of the packet receive transaction, the acknowledgement written on the receiving chain, an error if a relay step fails or the packet commitment does not exist on either chain.
+
+### Params migration
+
+Params are now self managed in the following submodules:
+
+- ica/controller [#3590](https://github.com/cosmos/ibc-go/pull/3590)
+- ica/host [#3520](https://github.com/cosmos/ibc-go/pull/3520)
+- ibc/connection [#3650](https://github.com/cosmos/ibc-go/pull/3650)
+- ibc/client [#3640](https://github.com/cosmos/ibc-go/pull/3640)
+- ibc/transfer [#3553](https://github.com/cosmos/ibc-go/pull/3553)
+
+Each module has a corresponding `MsgUpdateParams` message with a `Params` which can be specified in full to update the modules' `Params`.
+
+Legacy params subspaces must still be initialised in app.go in order to successfully migrate from x/params to the new self-contained approach. See reference [this](https://github.com/cosmos/ibc-go/blob/5ee82969fd5f94950884d8fe56c0deec5cc370ad/testing/simapp/app.go#L1010-L1015) for reference.
+
+For new chains which do not rely on migration of parameters from `x/params`, an expected interface has been added for each module. This allows chain developers to provide `nil` as the `legacySubspace` argument to `NewKeeper` functions.
+
+### Governance V1 migration
+
+Proposals have been migrated to [gov v1 messages](https://docs.cosmos.network/v0.50/modules/gov#messages) (see [#4620](https://github.com/cosmos/ibc-go/pull/4620)). The proposal `ClientUpdateProposal` has been deprecated and [`MsgRecoverClient`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/proto/ibc/core/client/v1/tx.proto#L121-L134) should be used instead. Likewise, the proposal `UpgradeProposal` has been deprecated and [`MsgIBCSoftwareUpgrade`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/proto/ibc/core/client/v1/tx.proto#L139-L154) should be used instead. Both proposals will be removed in the next major release.
+
+`MsgRecoverClient` and `MsgIBCSoftwareUpgrade` will only be allowed to be executed if the signer is the authority designated at the time of instantiating the IBC keeper. So please make sure that the correct authority is provided to the IBC keeper.
+
+Remove the `UpgradeProposalHandler` and `UpdateClientProposalHandler` from the `BasicModuleManager`:
+
+```diff
+app.BasicModuleManager = module.NewBasicManagerFromManager(
+ app.ModuleManager,
+ map[string]module.AppModuleBasic{
+ genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator),
+ govtypes.ModuleName: gov.NewAppModuleBasic(
+ []govclient.ProposalHandler{
+ paramsclient.ProposalHandler,
+- ibcclientclient.UpdateClientProposalHandler,
+- ibcclientclient.UpgradeProposalHandler,
+ },
+ ),
+})
+```
+
+Support for in-flight legacy recover client proposals (i.e. `ClientUpdateProposal`) will be made for v8, but chains should use `MsgRecoverClient` only afterwards to avoid in-flight client recovery failing when upgrading to v9. See [this issue](https://github.com/cosmos/ibc-go/issues/4721) for more information.
+
+Please note that ibc-go offers facilities to test an ibc-go upgrade:
+
+- All e2e tests of the repository can be [run with custom Docker chain images](https://github.com/cosmos/ibc-go/blob/c5bac5e03a0eae449b9efe0d312258115c1a1e85/e2e/README.md#running-tests-with-custom-images).
+- An [importable workflow](https://github.com/cosmos/ibc-go/blob/c5bac5e03a0eae449b9efe0d312258115c1a1e85/e2e/README.md#importable-workflow) that can be used from any other repository to test chain upgrades.
+
+### Transfer migration
+
+An [automatic migration handler](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/transfer/module.go#L136) is configured in the transfer module to set the [denomination metadata](https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-rc.0/proto/cosmos/bank/v1beta1/bank.proto#L96-L125) for the IBC denominations of all vouchers minted by the transfer module.
+
+## IBC Apps
+
+### ICS20 - Transfer
+
+- The function `IsBound` has been renamed to [`hasCapability`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/transfer/keeper/keeper.go#L98) and made unexported.
+
+### ICS27 - Interchain Accounts
+
+- Functions [`SerializeCosmosTx`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/27-interchain-accounts/types/codec.go#L32) and [`DeserializeCosmosTx`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/27-interchain-accounts/types/codec.go#L76) now accept an extra parameter `encoding` of type `string` that specifies the format in which the transaction messages are marshaled. Both [protobuf and proto3 JSON formats](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/27-interchain-accounts/types/metadata.go#L14-L17) are supported.
+- The function `IsBound` of controller submodule has been renamed to [`hasCapability`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/27-interchain-accounts/controller/keeper/keeper.go#L112) and made unexported.
+- The function `IsBound` of host submodule has been renamed to [`hasCapability`](https://github.com/cosmos/ibc-go/blob/v8.0.0-beta.0/modules/apps/27-interchain-accounts/host/keeper/keeper.go#L95) and made unexported.
+
+## Relayers
+
+- Getter functions in `MsgChannelOpenInitResponse`, `MsgChannelOpenTryResponse`, `MsgTransferResponse`, `MsgRegisterInterchainAccountResponse` and `MsgSendTxResponse` have been removed. The fields can be accessed directly.
+- `channeltypes.EventTypeTimeoutPacketOnClose` (where `channeltypes` is an import alias for `"github.com/cosmos/ibc-go/v8/modules/core/04-channel"`) has been removed, since core IBC does not emit any event with this key.
+- Attribute with key `counterparty_connection_id` has been removed from event with key `connectiontypes.EventTypeConnectionOpenInit` (where `connectiontypes` is an import alias for `"github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"`) and attribute with key `counterparty_channel_id` has been removed from event with key `channeltypes.EventTypeChannelOpenInit` (where `channeltypes` is an import alias for `"github.com/cosmos/ibc-go/v8/modules/core/04-channel"`) since both (counterparty connection ID and counterparty channel ID) are empty on `ConnectionOpenInit` and `ChannelOpenInit` respectively.
+- As part of the migration to [governance V1 messages](#governance-v1-migration) the following changes in events have been made:
+
+```diff
+// IBC client events vars
+var (
+ EventTypeCreateClient = "create_client"
+ EventTypeUpdateClient = "update_client"
+ EventTypeUpgradeClient = "upgrade_client"
+ EventTypeSubmitMisbehaviour = "client_misbehaviour"
+- EventTypeUpdateClientProposal = "update_client_proposal"
+- EventTypeUpgradeClientProposal = "upgrade_client_proposal"
++ EventTypeRecoverClient = "recover_client"
++ EventTypeScheduleIBCSoftwareUpgrade = "schedule_ibc_software_upgrade"
+ EventTypeUpgradeChain = "upgrade_chain"
+)
+```
+
+## IBC Light Clients
+
+- Functions `Pretty` and `String` of type `MerklePath` have been [removed](https://github.com/cosmos/ibc-go/pull/4459/files#diff-dd94ec1dde9b047c0cdfba204e30dad74a81de202e3b09ac5b42f493153811af).
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/_category_.json b/docs/versioned_docs/version-v8.0.x/05-migrations/_category_.json
new file mode 100644
index 00000000000..21f91f851a4
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Migrations",
+ "position": 5,
+ "link": null
+}
\ No newline at end of file
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/images/auth-module-decision-tree.png b/docs/versioned_docs/version-v8.0.x/05-migrations/images/auth-module-decision-tree.png
new file mode 100644
index 00000000000..dc2c98e6618
Binary files /dev/null and b/docs/versioned_docs/version-v8.0.x/05-migrations/images/auth-module-decision-tree.png differ
diff --git a/docs/versioned_docs/version-v8.0.x/05-migrations/migration.template.md b/docs/versioned_docs/version-v8.0.x/05-migrations/migration.template.md
new file mode 100644
index 00000000000..dc546603012
--- /dev/null
+++ b/docs/versioned_docs/version-v8.0.x/05-migrations/migration.template.md
@@ -0,0 +1,28 @@
+# Migrating from to
+
+This guide provides instructions for migrating to a new version of ibc-go.
+
+There are four sections based on the four potential user groups of this document:
+
+- [Chains](#chains)
+- [IBC Apps](#ibc-apps)
+- [Relayers](#relayers)
+- [IBC Light Clients](#ibc-light-clients)
+
+**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases.
+
+## Chains
+
+- No relevant changes were made in this release.
+
+## IBC Apps
+
+- No relevant changes were made in this release.
+
+## Relayers
+
+- No relevant changes were made in this release.
+
+## IBC Light Clients
+
+- No relevant changes were made in this release.
diff --git a/docs/versioned_sidebars/version-v4.4.x-sidebars.json b/docs/versioned_sidebars/version-v4.4.x-sidebars.json
index 0402558cb33..f2d95e9a913 100644
--- a/docs/versioned_sidebars/version-v4.4.x-sidebars.json
+++ b/docs/versioned_sidebars/version-v4.4.x-sidebars.json
@@ -21,7 +21,7 @@
},
{
"type": "link",
- "label": "Tutorials",
+ "label": "Developer Portal",
"href": "https://tutorials.cosmos.network"
},
{
diff --git a/docs/versioned_sidebars/version-v5.3.x-sidebars.json b/docs/versioned_sidebars/version-v5.3.x-sidebars.json
index 0402558cb33..f2d95e9a913 100644
--- a/docs/versioned_sidebars/version-v5.3.x-sidebars.json
+++ b/docs/versioned_sidebars/version-v5.3.x-sidebars.json
@@ -21,7 +21,7 @@
},
{
"type": "link",
- "label": "Tutorials",
+ "label": "Developer Portal",
"href": "https://tutorials.cosmos.network"
},
{
diff --git a/docs/versioned_sidebars/version-v6.2.x-sidebars.json b/docs/versioned_sidebars/version-v6.2.x-sidebars.json
index 0402558cb33..f2d95e9a913 100644
--- a/docs/versioned_sidebars/version-v6.2.x-sidebars.json
+++ b/docs/versioned_sidebars/version-v6.2.x-sidebars.json
@@ -21,7 +21,7 @@
},
{
"type": "link",
- "label": "Tutorials",
+ "label": "Developer Portal",
"href": "https://tutorials.cosmos.network"
},
{
diff --git a/docs/versioned_sidebars/version-v7.3.x-sidebars.json b/docs/versioned_sidebars/version-v7.3.x-sidebars.json
index 0402558cb33..f2d95e9a913 100644
--- a/docs/versioned_sidebars/version-v7.3.x-sidebars.json
+++ b/docs/versioned_sidebars/version-v7.3.x-sidebars.json
@@ -21,7 +21,7 @@
},
{
"type": "link",
- "label": "Tutorials",
+ "label": "Developer Portal",
"href": "https://tutorials.cosmos.network"
},
{
diff --git a/docs/versioned_sidebars/version-v8.0.x-sidebars.json b/docs/versioned_sidebars/version-v8.0.x-sidebars.json
new file mode 100644
index 00000000000..14944fb376c
--- /dev/null
+++ b/docs/versioned_sidebars/version-v8.0.x-sidebars.json
@@ -0,0 +1,40 @@
+{
+ "defaultSidebar": [
+ {
+ "type": "autogenerated",
+ "dirName": "."
+ },
+ {
+ "type": "category",
+ "label": "Resources",
+ "collapsed": false,
+ "items": [
+ {
+ "type": "link",
+ "label": "IBC Specification",
+ "href": "https://github.com/cosmos/ibc"
+ },
+ {
+ "type": "link",
+ "label": "Protobuf Documentation",
+ "href": "https://buf.build/cosmos/ibc/docs/main"
+ },
+ {
+ "type": "link",
+ "label": "Developer Portal",
+ "href": "https://tutorials.cosmos.network"
+ },
+ {
+ "type": "link",
+ "label": "Awesome Cosmos",
+ "href": "https://github.com/cosmos/awesome-cosmos"
+ },
+ {
+ "type": "link",
+ "label": "ibc-rs",
+ "href": "https://github.com/cosmos/ibc-rs"
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/versions.json b/docs/versions.json
index 1f02d1906c5..d8f99c53198 100644
--- a/docs/versions.json
+++ b/docs/versions.json
@@ -1,6 +1,7 @@
[
+ "v8.0.x",
"v7.3.x",
"v6.2.x",
"v5.3.x",
- "v4.4.x"
+ "v4.5.x"
]
diff --git a/e2e/README.md b/e2e/README.md
index 46b4e1de212..332bbb7b977 100644
--- a/e2e/README.md
+++ b/e2e/README.md
@@ -28,6 +28,9 @@ All tests should go under the [e2e](https://github.com/cosmos/ibc-go/tree/main/e
to an existing test suite ***in the same file***, or create a new test suite in a new file and add test functions there.
New test files should follow the convention of `module_name_test.go`.
+After creating a new test file, be sure to add a build constraint that ensures this file will **not** be included in the package to be built when
+running tests locally via `make test`. For an example of this, see any of the existing test files.
+
New test suites should be composed of `testsuite.E2ETestSuite`. This type has lots of useful helper functionality that will
be quite common in most tests.
@@ -52,7 +55,7 @@ options specified in your config file.
| CHAIN_B_TAG | The tag used for chain A | latest |
| CHAIN_BINARY | The binary used in the container | simd |
| RELAYER_TAG | The tag used for the relayer | main |
-| RELAYER_ID | The type of relayer to use (rly/hermes) | hermes |
+| RELAYER_ID | The type of relayer to use (rly/hermes) | hermes |
> Note: when running tests locally, **no images are pushed** to the `ghcr.io/cosmos/ibc-go-simd` registry.
The images which are used only exist on your machine.
@@ -375,7 +378,7 @@ json matrix files under .github/compatibility-test-matrices and is equivalent to
## Importable Workflow
-This repository contains an [importable workflow](https://github.com/cosmos/ibc-go/blob/bc963bcfd115a0e06b8196b114496db5ea011247/.github/workflows/e2e-compatibility-workflow-call.yaml) that can be used from any other repository to test chain upgrades. The workflow
+This repository contains an [importable workflow](https://github.com/cosmos/ibc-go/blob/185a220244663457372185992cfc85ed9e458bf1/.github/workflows/e2e-compatibility-workflow-call.yaml) that can be used from any other repository to test chain upgrades. The workflow
can be used to test both non-IBC chains, and also IBC-enabled chains.
### Prerequisites
diff --git a/e2e/go.mod b/e2e/go.mod
index 21fa88fa4ac..301a29055cb 100644
--- a/e2e/go.mod
+++ b/e2e/go.mod
@@ -4,44 +4,50 @@ go 1.21
require (
cosmossdk.io/errors v1.0.0
- cosmossdk.io/math v1.1.2
- cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d
+ cosmossdk.io/math v1.2.0
+ cosmossdk.io/x/upgrade v0.1.0
github.com/cometbft/cometbft v0.38.0
- github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d
+ github.com/cosmos/cosmos-sdk v0.50.1
github.com/cosmos/gogoproto v1.4.11
- github.com/cosmos/ibc-go/v8 v8.0.0-20230906115913-46ee5f92e1af
- github.com/docker/docker v24.0.6+incompatible
- github.com/strangelove-ventures/interchaintest/v8 v8.0.0-20230913202406-3e11bf474a3b
+ github.com/cosmos/ibc-go/v8 v8.0.0-rc.0
+ github.com/docker/docker v24.0.7+incompatible
+ github.com/strangelove-ventures/interchaintest/v8 v8.0.0
github.com/stretchr/testify v1.8.4
go.uber.org/zap v1.26.0
- golang.org/x/mod v0.12.0
- google.golang.org/grpc v1.58.2
+ golang.org/x/mod v0.14.0
+ google.golang.org/grpc v1.59.0
gopkg.in/yaml.v2 v2.4.0
)
require (
- cloud.google.com/go v0.110.6 // indirect
- cloud.google.com/go/compute v1.23.0 // indirect
+ cloud.google.com/go v0.110.8 // indirect
+ cloud.google.com/go/compute v1.23.1 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- cloud.google.com/go/iam v1.1.1 // indirect
+ cloud.google.com/go/iam v1.1.3 // indirect
cloud.google.com/go/storage v1.30.1 // indirect
- cosmossdk.io/api v0.7.1 // indirect
- cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508 // indirect
+ cosmossdk.io/api v0.7.2 // indirect
+ cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect
cosmossdk.io/collections v0.4.0 // indirect
cosmossdk.io/core v0.11.0 // indirect
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
cosmossdk.io/log v1.2.1 // indirect
- cosmossdk.io/store v1.0.0-rc.0 // indirect
- cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508 // indirect
- cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508 // indirect
- cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508 // indirect
- cosmossdk.io/x/tx v0.10.0 // indirect
+ cosmossdk.io/store v1.0.0 // indirect
+ cosmossdk.io/x/circuit v0.1.0 // indirect
+ cosmossdk.io/x/evidence v0.1.0 // indirect
+ cosmossdk.io/x/feegrant v0.1.0 // indirect
+ cosmossdk.io/x/tx v0.12.0 // indirect
filippo.io/edwards25519 v1.0.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.2 // indirect
github.com/BurntSushi/toml v1.3.2 // indirect
+ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
+ github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect
+ github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect
github.com/DataDog/zstd v1.5.5 // indirect
+ github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect
+ github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect
github.com/Microsoft/go-winio v0.6.0 // indirect
+ github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect
github.com/avast/retry-go/v4 v4.5.0 // indirect
github.com/aws/aws-sdk-go v1.44.224 // indirect
github.com/beorn7/perks v1.0.1 // indirect
@@ -56,7 +62,7 @@ require (
github.com/cockroachdb/apd/v2 v2.0.2 // indirect
github.com/cockroachdb/errors v1.11.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
- github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 // indirect
+ github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cometbft/cometbft-db v0.8.0 // indirect
@@ -65,12 +71,16 @@ require (
github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
- github.com/cosmos/iavl v1.0.0-rc.1 // indirect
- github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5 // indirect
+ github.com/cosmos/iavl v1.0.0 // indirect
+ github.com/cosmos/ibc-go/modules/capability v1.0.0 // indirect
github.com/cosmos/ics23/go v0.10.0 // indirect
- github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect
+ github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/deckarep/golang-set v1.8.0 // indirect
+ github.com/decred/base58 v1.0.4 // indirect
+ github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect
+ github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
@@ -81,143 +91,169 @@ require (
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
- github.com/emicklei/dot v1.5.0 // indirect
+ github.com/emicklei/dot v1.6.0 // indirect
+ github.com/ethereum/go-ethereum v1.12.1 // indirect
github.com/fatih/color v1.15.0 // indirect
- github.com/felixge/httpsnoop v1.0.3 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
- github.com/getsentry/sentry-go v0.23.0 // indirect
+ github.com/getsentry/sentry-go v0.25.0 // indirect
github.com/go-kit/kit v0.12.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-playground/validator/v10 v10.14.0 // indirect
+ github.com/go-stack/stack v1.8.1 // indirect
github.com/gobwas/httphead v0.1.0 // indirect
github.com/gobwas/pool v0.2.1 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.3 // indirect
- github.com/golang/glog v1.1.0 // indirect
+ github.com/golang/glog v1.1.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/golang/snappy v0.0.4 // indirect
+ github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
github.com/google/btree v1.1.2 // indirect
- github.com/google/go-cmp v0.5.9 // indirect
+ github.com/google/go-cmp v0.6.0 // indirect
github.com/google/orderedcode v0.0.1 // indirect
- github.com/google/s2a-go v0.1.4 // indirect
- github.com/google/uuid v1.3.0 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
- github.com/googleapis/gax-go/v2 v2.11.0 // indirect
- github.com/gorilla/handlers v1.5.1 // indirect
- github.com/gorilla/mux v1.8.0 // indirect
+ github.com/google/s2a-go v0.1.7 // indirect
+ github.com/google/uuid v1.3.1 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.0 // indirect
+ github.com/gorilla/handlers v1.5.2 // indirect
+ github.com/gorilla/mux v1.8.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
+ github.com/gtank/merlin v0.1.1 // indirect
+ github.com/gtank/ristretto255 v0.1.2 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-getter v1.7.1 // indirect
github.com/hashicorp/go-hclog v1.5.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-metrics v0.5.1 // indirect
- github.com/hashicorp/go-plugin v1.4.10 // indirect
+ github.com/hashicorp/go-plugin v1.5.2 // indirect
github.com/hashicorp/go-safetemp v1.0.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/hdevalence/ed25519consensus v0.1.0 // indirect
+ github.com/holiman/uint256 v1.2.3 // indirect
github.com/huandu/skiplist v1.2.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect
github.com/improbable-eng/grpc-web v0.15.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
+ github.com/ipfs/go-cid v0.4.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
- github.com/klauspost/compress v1.16.7 // indirect
+ github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lib/pq v1.10.7 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
- github.com/linxGnu/grocksdb v1.8.0 // indirect
+ github.com/libp2p/go-libp2p v0.31.0 // indirect
+ github.com/linxGnu/grocksdb v1.8.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/manifoldco/promptui v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
+ github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect
github.com/minio/highwayhash v1.0.2 // indirect
+ github.com/minio/sha256-simd v1.0.1 // indirect
+ github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230913220906-b988ea7da0c2 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
+ github.com/mr-tron/base58 v1.2.0 // indirect
github.com/mtibben/percent v0.2.1 // indirect
- github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce // indirect
+ github.com/multiformats/go-base32 v0.1.0 // indirect
+ github.com/multiformats/go-base36 v0.2.0 // indirect
+ github.com/multiformats/go-multiaddr v0.11.0 // indirect
+ github.com/multiformats/go-multibase v0.2.0 // indirect
+ github.com/multiformats/go-multicodec v0.9.0 // indirect
+ github.com/multiformats/go-multihash v0.2.3 // indirect
+ github.com/multiformats/go-varint v0.0.7 // indirect
+ github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect
github.com/oklog/run v1.1.0 // indirect
- github.com/onsi/ginkgo v1.16.5 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
- github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect
+ github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect
+ github.com/pierrec/xxHash v0.1.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/prometheus/client_golang v1.16.0 // indirect
- github.com/prometheus/client_model v0.4.0 // indirect
- github.com/prometheus/common v0.44.0 // indirect
- github.com/prometheus/procfs v0.11.1 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.17.0 // indirect
+ github.com/prometheus/client_model v0.5.0 // indirect
+ github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/rs/cors v1.8.3 // indirect
- github.com/rs/zerolog v1.30.0 // indirect
+ github.com/rs/zerolog v1.31.0 // indirect
+ github.com/sagikazarmark/locafero v0.3.0 // indirect
+ github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sasha-s/go-deadlock v0.3.1 // indirect
- github.com/spf13/afero v1.9.5 // indirect
+ github.com/sourcegraph/conc v0.3.0 // indirect
+ github.com/spaolacci/murmur3 v1.1.0 // indirect
+ github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/cast v1.5.1 // indirect
- github.com/spf13/cobra v1.7.0 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
+ github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/spf13/viper v1.16.0 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/spf13/viper v1.17.0 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
github.com/tendermint/go-amino v0.16.0 // indirect
- github.com/tidwall/btree v1.6.0 // indirect
+ github.com/tidwall/btree v1.7.0 // indirect
+ github.com/tyler-smith/go-bip32 v1.0.0 // indirect
+ github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
- github.com/zondax/hid v0.9.1 // indirect
- github.com/zondax/ledger-go v0.14.1 // indirect
+ github.com/zondax/hid v0.9.2 // indirect
+ github.com/zondax/ledger-go v0.14.3 // indirect
go.etcd.io/bbolt v1.3.7 // indirect
go.opencensus.io v0.24.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.13.0 // indirect
- golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
- golang.org/x/net v0.15.0 // indirect
- golang.org/x/oauth2 v0.10.0 // indirect
- golang.org/x/sync v0.3.0 // indirect
- golang.org/x/sys v0.12.0 // indirect
- golang.org/x/term v0.12.0 // indirect
+ golang.org/x/crypto v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+ golang.org/x/net v0.17.0 // indirect
+ golang.org/x/oauth2 v0.12.0 // indirect
+ golang.org/x/sync v0.5.0 // indirect
+ golang.org/x/sys v0.13.0 // indirect
+ golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
- golang.org/x/tools v0.13.0 // indirect
+ golang.org/x/tools v0.14.0 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
- google.golang.org/api v0.126.0 // indirect
+ google.golang.org/api v0.143.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect
+ google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
+ gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- gotest.tools/v3 v3.5.0 // indirect
+ gotest.tools/v3 v3.5.1 // indirect
+ lukechampine.com/blake3 v1.2.1 // indirect
lukechampine.com/uint128 v1.2.0 // indirect
modernc.org/cc/v3 v3.40.0 // indirect
modernc.org/ccgo/v3 v3.16.13 // indirect
- modernc.org/libc v1.24.1 // indirect
- modernc.org/mathutil v1.5.0 // indirect
- modernc.org/memory v1.6.0 // indirect
+ modernc.org/libc v1.29.0 // indirect
+ modernc.org/mathutil v1.6.0 // indirect
+ modernc.org/memory v1.7.2 // indirect
modernc.org/opt v0.1.3 // indirect
- modernc.org/sqlite v1.25.0 // indirect
+ modernc.org/sqlite v1.27.0 // indirect
modernc.org/strutil v1.1.3 // indirect
modernc.org/token v1.1.0 // indirect
nhooyr.io/websocket v1.8.7 // indirect
pgregory.net/rapid v1.1.0 // indirect
- sigs.k8s.io/yaml v1.3.0 // indirect
+ sigs.k8s.io/yaml v1.4.0 // indirect
)
// TODO: using version v1.0.0 causes a build failure. This is the previous version which compiles successfully.
diff --git a/e2e/go.sum b/e2e/go.sum
index e4e30ff4c1d..5233a633351 100644
--- a/e2e/go.sum
+++ b/e2e/go.sum
@@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9
cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
-cloud.google.com/go v0.110.6 h1:8uYAkj3YHTP/1iwReuHPxLSbdcyc+dSBbzFMrVwDR6Q=
-cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
+cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME=
+cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk=
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
@@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
-cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
-cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
+cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
@@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
-cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y=
-cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
+cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc=
+cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
@@ -187,10 +187,10 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
-cosmossdk.io/api v0.7.1 h1:PNQ1xN8+/0hj/sSD0ANqjkgfXFys+bZ5L8Hg7uzoUTU=
-cosmossdk.io/api v0.7.1/go.mod h1:ure9edhcROIHsngavM6mBLilMGFnfjhV/AaYhEMUkdo=
-cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508 h1:tt5OMwdouv7dkwkWJYxb8I9h322bOxnC9RmK2qGvWMs=
-cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508/go.mod h1:iHeSk2AT6O8RNGlfcEQq6Yty6Z/6gydQsXXBh5I715Q=
+cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4=
+cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38=
+cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q=
+cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU=
cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo=
@@ -201,20 +201,20 @@ cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04=
cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0=
cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk=
cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4=
-cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM=
-cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
-cosmossdk.io/store v1.0.0-rc.0 h1:9DwOjuUYxDtYxn/REkTxGQAmxlIGfRroB35MQ8TrxF4=
-cosmossdk.io/store v1.0.0-rc.0/go.mod h1:FtBDOJmwtOZfmKKF65bKZbTYgS3bDNjjo3nP76dAegk=
-cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508 h1:9HRBpMbGgk+W4BIp4ezYH2EjbpuVl2fBlwyJ2GZgrS0=
-cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508/go.mod h1:BhFX0kD6lkctNQO3ZGYY3p6h0/wPLVbFhrOt3uQxEIM=
-cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508 h1:R9H1lDpcPSkrLOnt6IDE38o0Wp8xE/+BAxocb0oyX4I=
-cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508/go.mod h1:yjIo3J0QKDo9CJawK1QoTA1hBx0llafVJdPqI0+ry74=
-cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508 h1:TKqjhhTfLchU8nSo1WZRgaH7xZWzYUQXVRj9CePcbaw=
-cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508/go.mod h1:kOr8Rr10RoMeGGk/pfW5yo1R7GQTGu4KdRgKphVvjz4=
-cosmossdk.io/x/tx v0.10.0 h1:LxWF/hksVDbeQmFj4voLM5ZCHyVZ1cCNIqKenfH9plc=
-cosmossdk.io/x/tx v0.10.0/go.mod h1:MKo9/b5wsoL8dd9y9pvD2yOP1CMvzHIWYxi1l2oLPFo=
-cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d h1:LH8NPa2+yoMFdCTxCFyQUX5zVDip4YDgtg7e0EecDqo=
-cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d/go.mod h1:+5jCm6Lk/CrQhQvtJFy/tmuLfhQKNMn/U0vwrRz/dxQ=
+cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig=
+cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
+cosmossdk.io/store v1.0.0 h1:6tnPgTpTSIskaTmw/4s5C9FARdgFflycIc9OX8i1tOI=
+cosmossdk.io/store v1.0.0/go.mod h1:ABMprwjvx6IpMp8l06TwuMrj6694/QP5NIW+X6jaTYc=
+cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs=
+cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w=
+cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk=
+cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw=
+cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk=
+cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU=
+cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U=
+cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0=
+cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE=
+cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
@@ -228,9 +228,19 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg=
+github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4=
+github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM=
+github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4=
+github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA=
+github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ=
github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
+github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc=
+github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw=
+github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc=
+github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
@@ -240,6 +250,10 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
+github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
+github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y=
+github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio=
github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I=
@@ -284,6 +298,8 @@ github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipus
github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
+github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ=
+github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o=
github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY=
github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE=
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
@@ -312,6 +328,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw=
+github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
@@ -330,8 +348,8 @@ github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZ
github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 h1:M4A5LioEhkZ/s+m0g0pWgiLBQr83p0jWnQUo320Qy+A=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0/go.mod h1:EDjiaAXc0FXiRmxDzcu1wIEJ093ohHMUWxrI6iku0XA=
+github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb h1:6Po+YYKT5B5ZXN0wd2rwFBaebM0LufPf8p4zxOd48Kg=
+github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc=
github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
@@ -355,8 +373,9 @@ github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0
github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U=
github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o=
github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d h1:dBD7O1D3lxfMwKjR71ooQanLzclJ17NZMHplL6qd8ZU=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d/go.mod h1:8rNGga/Gg9/NIFvpqO4URts+8Cz/XVB0wTr5ZDm22UM=
+github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw=
+github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA=
+github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
@@ -364,26 +383,38 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g=
github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y=
-github.com/cosmos/iavl v1.0.0-rc.1 h1:5+73BEWW1gZOIUJKlk/1fpD4lOqqeFBA8KuV+NpkCpU=
-github.com/cosmos/iavl v1.0.0-rc.1/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
-github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5 h1:OwYsRIM2gwe3ifuvi2sriEvDBd3t43vTF2GEi1SOchM=
-github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5/go.mod h1:YriReKrNl7ZKBW6FSmgV7v4BhrN84tm672YjU0Y2C2I=
+github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so=
+github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
+github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE=
+github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco=
github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM=
github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0=
-github.com/cosmos/ledger-cosmos-go v0.13.0 h1:ex0CvCxToSR7j5WjrghPu2Bu9sSXKikjnVvUryNnx4s=
-github.com/cosmos/ledger-cosmos-go v0.13.0/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI=
+github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM=
+github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4=
+github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
+github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI=
+github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
+github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA=
+github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E=
+github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU=
+github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60=
+github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
+github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM=
+github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I=
@@ -399,8 +430,8 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WA
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.6+incompatible h1:hceabKCtUgDqPu+qm0NgsaXf28Ljf4/pWFL7xjWWDgE=
-github.com/docker/docker v24.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
+github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
@@ -415,8 +446,8 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/emicklei/dot v1.5.0 h1:tc9eKdCBTgoR68vJ6OcgMtI0SdrGDwLPPVaPA6XhX50=
-github.com/emicklei/dot v1.5.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
+github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY=
+github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -428,13 +459,14 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/ethereum/go-ethereum v1.12.1 h1:1kXDPxhLfyySuQYIfRxVBGYuaHdxNNxevA73vjIwsgk=
+github.com/ethereum/go-ethereum v1.12.1/go.mod h1:zKetLweqBR8ZS+1O9iJWI8DvmmD2NzD19apjEWDCsnw=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
-github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
-github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
@@ -447,8 +479,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
-github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE=
-github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
+github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
@@ -473,6 +505,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -485,15 +519,17 @@ github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
+github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=
+github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
@@ -504,8 +540,8 @@ github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2
github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
-github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
+github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
+github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -544,8 +580,9 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
+github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
@@ -564,8 +601,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
@@ -594,20 +632,21 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b h1:Qcx5LM0fSiks9uCyFZwDBUasd3lxd1RM0GYpL+Li5o4=
-github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk=
+github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo=
+github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
-github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
+github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
+github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ=
+github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
@@ -617,18 +656,18 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99
github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
-github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4=
-github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
+github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
+github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
-github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
+github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
+github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
-github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
@@ -643,6 +682,11 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
+github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
+github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is=
+github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
+github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc=
+github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o=
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -661,8 +705,8 @@ github.com/hashicorp/go-metrics v0.5.1 h1:rfPwUqFU6uZXNvGl4hzjY8LEBsqFVU4si1H9/H
github.com/hashicorp/go-metrics v0.5.1/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-plugin v1.4.10 h1:xUbmA4jC6Dq163/fWcp8P3JuHilrHHMLNRxzGQJ9hNk=
-github.com/hashicorp/go-plugin v1.4.10/go.mod h1:6/1TEzT0eQznvI/gV2CM29DLSkAK/e58mUWKVsPaph0=
+github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y=
+github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
@@ -691,6 +735,8 @@ github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE
github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU=
github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo=
+github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o=
+github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c=
github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U=
@@ -709,8 +755,10 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
-github.com/jhump/protoreflect v1.15.2 h1:7YppbATX94jEt9KLAc5hICx4h6Yt3SaavhQRsIUEHP0=
-github.com/jhump/protoreflect v1.15.2/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
+github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
+github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
+github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls=
+github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
@@ -740,8 +788,10 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
-github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
-github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
+github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
+github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -760,10 +810,12 @@ github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
+github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHxYg=
+github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/linxGnu/grocksdb v1.8.0 h1:H4L/LhP7GOMf1j17oQAElHgVlbEje2h14A8Tz9cM2BE=
-github.com/linxGnu/grocksdb v1.8.0/go.mod h1:09CeBborffXhXdNpEcOeZrLKEnRtrZFEpFdPNI9Zjjg=
+github.com/linxGnu/grocksdb v1.8.4 h1:ZMsBpPpJNtRLHiKKp0mI7gW+NT4s7UgfD5xHxx1jVRo=
+github.com/linxGnu/grocksdb v1.8.4/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@@ -780,18 +832,26 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=
+github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk=
+github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU=
github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
+github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
+github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
+github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230913220906-b988ea7da0c2 h1:G/cVeTAbB9S/6FSWWqpFV0v49hiuHLbJPu9hTZ0UR2A=
+github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230913220906-b988ea7da0c2/go.mod h1:Q5BxOd9FxJqYp4vCiLGVdetecPcWTmUQIu0bRigYosU=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
@@ -816,8 +876,24 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
+github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
+github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
+github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
+github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
+github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
+github.com/multiformats/go-multiaddr v0.11.0 h1:XqGyJ8ufbCE0HmTDwx2kPdsrQ36AGPZNZX6s6xfJH10=
+github.com/multiformats/go-multiaddr v0.11.0/go.mod h1:gWUm0QLR4thQ6+ZF6SXUw8YjtwQSPapICM+NmCkxHSM=
+github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
+github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
+github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg=
+github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k=
+github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
+github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
+github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
+github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
@@ -833,8 +909,8 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce h1:/pEpMk55wH0X+E5zedGEMOdLuWmV8P4+4W3+LZaM6kg=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
@@ -849,8 +925,8 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
-github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ=
+github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc=
+github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
@@ -880,10 +956,12 @@ github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo=
+github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
@@ -893,8 +971,9 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
@@ -902,38 +981,37 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
-github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
+github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
-github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
+github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4=
github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI=
-github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
@@ -946,16 +1024,22 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo=
github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
-github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
+github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
+github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ=
+github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
+github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -967,31 +1051,31 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
-github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
+github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
+github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
-github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
+github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
-github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
-github.com/strangelove-ventures/interchaintest/v8 v8.0.0-20230913202406-3e11bf474a3b h1:B3VTNRBsh/kp9+TpMQVXsjUql38+82trUSxPOKd7R/k=
-github.com/strangelove-ventures/interchaintest/v8 v8.0.0-20230913202406-3e11bf474a3b/go.mod h1:ELE57+yyFCeMuxuFHHu50Wxs3/CPmHxH2uBlvCF1lq4=
+github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
+github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI=
+github.com/strangelove-ventures/interchaintest/v8 v8.0.0 h1:z6hz23NJEhRJxZUH1vuDNTVscRwnUii+K4En9lfyndc=
+github.com/strangelove-ventures/interchaintest/v8 v8.0.0/go.mod h1:0LEZ1dXKlAYOm18X6s8AC4y5e6uAjJ0L69A6JpUkjDc=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -1000,6 +1084,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -1012,22 +1097,30 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
-github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
-github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
-github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
+github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
+github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
+github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
+github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
+github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
+github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE=
+github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE=
+github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
+github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
-github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
@@ -1041,10 +1134,10 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo=
-github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
-github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c=
-github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320=
+github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
+github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
+github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw=
+github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
@@ -1079,6 +1172,7 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -1087,14 +1181,14 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1106,8 +1200,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1134,8 +1228,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
-golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1197,8 +1291,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1224,8 +1318,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
-golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8=
-golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
+golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
+golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1240,8 +1334,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1296,7 +1390,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1341,14 +1434,16 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1358,7 +1453,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
@@ -1419,7 +1513,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -1430,8 +1523,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
-golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
+golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
+golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1490,8 +1583,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ
google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
-google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o=
-google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
+google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA=
+google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1610,12 +1703,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw
google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@@ -1657,8 +1750,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
-google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
+google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -1691,6 +1784,8 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=
+gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
@@ -1709,8 +1804,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
-gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1719,6 +1814,10 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54=
+launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM=
+lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
+lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI=
lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw=
@@ -1729,16 +1828,16 @@ modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
-modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM=
-modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak=
-modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
-modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
-modernc.org/memory v1.6.0 h1:i6mzavxrE9a30whzMfwf7XWVODx2r5OYXvU46cirX7o=
-modernc.org/memory v1.6.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
+modernc.org/libc v1.29.0 h1:tTFRFq69YKCF2QyGNuRUQxKBm1uZZLubf6Cjh/pVHXs=
+modernc.org/libc v1.29.0/go.mod h1:DaG/4Q3LRRdqpiLyP0C2m1B8ZMGkQ+cCgOIjEtQlYhQ=
+modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
+modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
+modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
+modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
-modernc.org/sqlite v1.25.0 h1:AFweiwPNd/b3BoKnBOfFm+Y260guGMF+0UFk0savqeA=
-modernc.org/sqlite v1.25.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU=
+modernc.org/sqlite v1.27.0 h1:MpKAHoyYB7xqcwnUwkuD+npwEa0fojF0B5QRbN+auJ8=
+modernc.org/sqlite v1.27.0/go.mod h1:Qxpazz0zH8Z1xCFyi5GSL3FzbtZ3fvbjmywNogldEW0=
modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY=
@@ -1756,6 +1855,6 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/e2e/sample.config.yaml b/e2e/sample.config.yaml
index 3dd3371208f..569b5948c1e 100644
--- a/e2e/sample.config.yaml
+++ b/e2e/sample.config.yaml
@@ -24,7 +24,7 @@ activeRelayer: hermes # override with RELAYER_ID
relayers:
- id: hermes
image: ghcr.io/informalsystems/hermes
- tag: "bef2f53"
+ tag: "v1.7.0"
- id: rly
image: ghcr.io/cosmos/relayer
tag: "latest"
diff --git a/e2e/semverutil/semver.go b/e2e/semverutil/semver.go
index c8585d3cdd7..8c93920b9cc 100644
--- a/e2e/semverutil/semver.go
+++ b/e2e/semverutil/semver.go
@@ -25,7 +25,8 @@ func (fr FeatureReleases) IsSupported(versionStr string) bool {
const releasePrefix = "release-"
if strings.HasPrefix(versionStr, releasePrefix) {
versionStr = versionStr[len(releasePrefix):]
- versionStr = strings.ReplaceAll(versionStr, "x", "0")
+ // replace x with 999 so the release version is always larger than the others in the release line.
+ versionStr = strings.ReplaceAll(versionStr, "x", "999")
}
// assume any non-semantic version formatted version supports the feature
diff --git a/e2e/tests/core/02-client/client_test.go b/e2e/tests/core/02-client/client_test.go
index 9d6159b0942..dc517f0a246 100644
--- a/e2e/tests/core/02-client/client_test.go
+++ b/e2e/tests/core/02-client/client_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package client
import (
diff --git a/e2e/tests/core/03-connection/connection_test.go b/e2e/tests/core/03-connection/connection_test.go
index fc93db35b97..6a634986307 100644
--- a/e2e/tests/core/03-connection/connection_test.go
+++ b/e2e/tests/core/03-connection/connection_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package connection
import (
@@ -126,7 +128,8 @@ func (s *ConnectionTestSuite) TestMaxExpectedTimePerBlockParam() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID, 1)
- actualBalance, err := chainA.GetBalance(ctx, chainAAddress, chainAIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom())
+
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
diff --git a/e2e/tests/interchain_accounts/base_test.go b/e2e/tests/interchain_accounts/base_test.go
index 89e885db025..07a339fb0d6 100644
--- a/e2e/tests/interchain_accounts/base_test.go
+++ b/e2e/tests/interchain_accounts/base_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package interchainaccounts
import (
@@ -123,10 +125,10 @@ func (s *InterchainAccountsTestSuite) TestMsgSendTx_SuccessfulTransfer() {
})
t.Run("verify tokens transferred", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
- _, err = chainB.GetBalance(ctx, hostAccount, chainB.Config().Denom)
+ _, err = s.QueryBalance(ctx, chainB, hostAccount, chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
@@ -177,7 +179,8 @@ func (s *InterchainAccountsTestSuite) TestMsgSendTx_FailedTransfer_InsufficientF
t.Run("fail to execute bank transfer over ICA", func(t *testing.T) {
t.Run("verify empty host wallet", func(t *testing.T) {
- hostAccountBalance, err := chainB.GetBalance(ctx, hostAccount, chainB.Config().Denom)
+ hostAccountBalance, err := s.QueryBalance(ctx, chainB, hostAccount, chainB.Config().Denom)
+
s.Require().NoError(err)
s.Require().Zero(hostAccountBalance.Int64())
})
@@ -215,7 +218,7 @@ func (s *InterchainAccountsTestSuite) TestMsgSendTx_FailedTransfer_InsufficientF
})
t.Run("verify balance is the same", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.StartingTokenAmount
@@ -334,10 +337,10 @@ func (s *InterchainAccountsTestSuite) TestMsgSendTx_SuccessfulTransfer_AfterReop
})
t.Run("verify tokens not transferred", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
- _, err = chainB.GetBalance(ctx, hostAccount, chainB.Config().Denom)
+ _, err = s.QueryBalance(ctx, chainB, hostAccount, chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.StartingTokenAmount
@@ -397,7 +400,7 @@ func (s *InterchainAccountsTestSuite) TestMsgSendTx_SuccessfulTransfer_AfterReop
})
t.Run("verify tokens transferred", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
diff --git a/e2e/tests/interchain_accounts/gov_test.go b/e2e/tests/interchain_accounts/gov_test.go
index 19fded717fa..c84bb36954c 100644
--- a/e2e/tests/interchain_accounts/gov_test.go
+++ b/e2e/tests/interchain_accounts/gov_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package interchainaccounts
import (
@@ -106,10 +108,10 @@ func (s *InterchainAccountsGovTestSuite) TestInterchainAccountsGovIntegration()
})
t.Run("verify tokens transferred", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
- _, err = chainB.GetBalance(ctx, interchainAccAddr, chainB.Config().Denom)
+ _, err = s.QueryBalance(ctx, chainB, interchainAccAddr, chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
diff --git a/e2e/tests/interchain_accounts/groups_test.go b/e2e/tests/interchain_accounts/groups_test.go
index b7710f69f7f..1582126f166 100644
--- a/e2e/tests/interchain_accounts/groups_test.go
+++ b/e2e/tests/interchain_accounts/groups_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package interchainaccounts
import (
@@ -196,14 +198,14 @@ func (s *InterchainAccountsGroupsTestSuite) TestInterchainAccountsGroupsIntegrat
t.Run("verify tokens transferred", func(t *testing.T) {
s.Require().NoError(test.WaitForBlocks(ctx, 10, chainA, chainB), "failed to wait for blocks")
+ balance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainB.Config().Denom)
- balance, err := chainB.GetBalance(ctx, chainBAddress, chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
s.Require().Equal(expected, balance.Int64())
- balance, err = chainB.GetBalance(ctx, interchainAccAddr, chainB.Config().Denom)
+ balance, err = s.QueryBalance(ctx, chainB, interchainAccAddr, chainB.Config().Denom)
s.Require().NoError(err)
expected = testvalues.StartingTokenAmount - testvalues.IBCTransferAmount
diff --git a/e2e/tests/interchain_accounts/incentivized_test.go b/e2e/tests/interchain_accounts/incentivized_test.go
index e7025dfd088..32d51121ad1 100644
--- a/e2e/tests/interchain_accounts/incentivized_test.go
+++ b/e2e/tests/interchain_accounts/incentivized_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package interchainaccounts
import (
@@ -182,10 +184,10 @@ func (s *IncentivizedInterchainAccountsTestSuite) TestMsgSendTx_SuccessfulBankSe
})
t.Run("verify interchain account sent tokens", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
- _, err = chainB.GetBalance(ctx, interchainAcc, chainB.Config().Denom)
+ _, err = s.QueryBalance(ctx, chainB, interchainAcc, chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
@@ -351,10 +353,10 @@ func (s *IncentivizedInterchainAccountsTestSuite) TestMsgSendTx_FailedBankSend_I
})
t.Run("verify interchain account did not send tokens", func(t *testing.T) {
- balance, err := chainB.GetBalance(ctx, chainBAccount.FormattedAddress(), chainB.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chainB, chainBAccount.FormattedAddress(), chainB.Config().Denom)
s.Require().NoError(err)
- _, err = chainB.GetBalance(ctx, interchainAcc, chainB.Config().Denom)
+ _, err = s.QueryBalance(ctx, chainB, interchainAcc, chainB.Config().Denom)
s.Require().NoError(err)
expected := testvalues.StartingTokenAmount
diff --git a/e2e/tests/interchain_accounts/localhost_test.go b/e2e/tests/interchain_accounts/localhost_test.go
index dbf80bd8f7d..3d34f59e7c8 100644
--- a/e2e/tests/interchain_accounts/localhost_test.go
+++ b/e2e/tests/interchain_accounts/localhost_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package interchainaccounts
import (
@@ -181,7 +183,7 @@ func (s *LocalhostInterchainAccountsTestSuite) TestInterchainAccounts_Localhost(
})
t.Run("verify tokens transferred", func(t *testing.T) {
- balance, err := chainA.GetBalance(ctx, userBWallet.FormattedAddress(), chainADenom)
+ balance, err := s.QueryBalance(ctx, chainA, userBWallet.FormattedAddress(), chainADenom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
@@ -406,7 +408,7 @@ func (s *LocalhostInterchainAccountsTestSuite) TestInterchainAccounts_ReopenChan
s.Require().NoError(err)
s.Require().NotZero(len(interchainAccAddress))
- balance, err := chainA.GetBalance(ctx, interchainAccAddress, chainADenom)
+ balance, err := s.QueryBalance(ctx, chainA, interchainAccAddress, chainADenom)
s.Require().NoError(err)
expected := testvalues.StartingTokenAmount
@@ -465,7 +467,7 @@ func (s *LocalhostInterchainAccountsTestSuite) TestInterchainAccounts_ReopenChan
t.Run("verify tokens transferred", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, controllerPortID, msgChanOpenInitRes.ChannelId, 1)
- balance, err := chainA.GetBalance(ctx, userBWallet.FormattedAddress(), chainADenom)
+ balance, err := s.QueryBalance(ctx, chainA, userBWallet.FormattedAddress(), chainADenom)
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount + testvalues.StartingTokenAmount
diff --git a/e2e/tests/interchain_accounts/params_test.go b/e2e/tests/interchain_accounts/params_test.go
index 4853395920e..2ecfe91c3f9 100644
--- a/e2e/tests/interchain_accounts/params_test.go
+++ b/e2e/tests/interchain_accounts/params_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package interchainaccounts
import (
diff --git a/e2e/tests/transfer/authz_test.go b/e2e/tests/transfer/authz_test.go
index d9533035329..dd390ad3da5 100644
--- a/e2e/tests/transfer/authz_test.go
+++ b/e2e/tests/transfer/authz_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package transfer
import (
@@ -135,7 +137,8 @@ func (suite *AuthzTransferTestSuite) TestAuthz_MsgTransfer_Succeeds() {
t.Run("verify receiver wallet amount", func(t *testing.T) {
chainBIBCToken := testsuite.GetIBCToken(chainADenom, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID)
- actualBalance, err := chainB.GetBalance(ctx, receiverWalletAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := suite.QueryBalance(ctx, chainB, receiverWalletAddress, chainBIBCToken.IBCDenom())
+
suite.Require().NoError(err)
suite.Require().Equal(testvalues.IBCTransferAmount, actualBalance.Int64())
})
@@ -271,7 +274,8 @@ func (suite *AuthzTransferTestSuite) TestAuthz_InvalidTransferAuthorizations() {
t.Run("verify receiver wallet amount", func(t *testing.T) {
chainBIBCToken := testsuite.GetIBCToken(chainADenom, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID)
- actualBalance, err := chainB.GetBalance(ctx, receiverWalletAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := suite.QueryBalance(ctx, chainB, receiverWalletAddress, chainBIBCToken.IBCDenom())
+
suite.Require().NoError(err)
suite.Require().Equal(int64(0), actualBalance.Int64())
})
diff --git a/e2e/tests/transfer/base_test.go b/e2e/tests/transfer/base_test.go
index cd18973b1e9..e4da4afe3c3 100644
--- a/e2e/tests/transfer/base_test.go
+++ b/e2e/tests/transfer/base_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package transfer
import (
@@ -98,15 +100,11 @@ func (s *TransferTestSuite) TestMsgTransfer_Succeeds_Nonincentivized() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
s.Require().Equal(expected, actualBalance.Int64())
-
- if testvalues.DenomMetadataFeatureReleases.IsSupported(chainBVersion) {
- s.AssertHumanReadableDenom(ctx, chainB, chainADenom, channelA)
- }
})
if testvalues.TokenMetadataFeatureReleases.IsSupported(chainBVersion) {
@@ -121,7 +119,7 @@ func (s *TransferTestSuite) TestMsgTransfer_Succeeds_Nonincentivized() {
})
t.Run("tokens are escrowed", func(t *testing.T) {
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
s.Require().Equal(sdkmath.ZeroInt(), actualBalance)
@@ -360,8 +358,8 @@ func (s *TransferTestSuite) TestReceiveEnabledParam() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID, 1)
+ actualBalance, err := s.QueryBalance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom())
- actualBalance, err := chainA.GetBalance(ctx, chainAAddress, chainAIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
@@ -479,8 +477,8 @@ func (s *TransferTestSuite) TestMsgTransfer_WithMemo() {
t.Run("packets relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
if testvalues.MemoFeatureReleases.IsSupported(chainBVersion) {
diff --git a/e2e/tests/transfer/incentivized_test.go b/e2e/tests/transfer/incentivized_test.go
index 3ff5779df88..92a8109924a 100644
--- a/e2e/tests/transfer/incentivized_test.go
+++ b/e2e/tests/transfer/incentivized_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package transfer
import (
diff --git a/e2e/tests/transfer/localhost_test.go b/e2e/tests/transfer/localhost_test.go
index 8e50c335bb0..df8a0bf976c 100644
--- a/e2e/tests/transfer/localhost_test.go
+++ b/e2e/tests/transfer/localhost_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package transfer
import (
@@ -165,7 +167,8 @@ func (s *LocalhostTransferTestSuite) TestMsgTransfer_Localhost() {
s.AssertPacketRelayed(ctx, chainA, transfertypes.PortID, msgChanOpenInitRes.ChannelId, 1)
ibcToken := testsuite.GetIBCToken(chainADenom, transfertypes.PortID, msgChanOpenTryRes.ChannelId)
- actualBalance, err := chainA.GetBalance(ctx, userBWallet.FormattedAddress(), ibcToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainA, userBWallet.FormattedAddress(), ibcToken.IBCDenom())
+
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
diff --git a/e2e/tests/upgrades/genesis_test.go b/e2e/tests/upgrades/genesis_test.go
index 9d1d367d4c0..be6055ac363 100644
--- a/e2e/tests/upgrades/genesis_test.go
+++ b/e2e/tests/upgrades/genesis_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package upgrades
import (
@@ -100,7 +102,8 @@ func (s *GenesisTestSuite) TestIBCGenesis() {
t.Run("ics20: packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
+
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
@@ -194,7 +197,7 @@ func (s *GenesisTestSuite) HaltChainAndExportGenesis(ctx context.Context, chain
err = chain.StopAllNodes(ctx)
s.Require().NoError(err, "error stopping node(s)")
- state, err := chain.ExportState(ctx, int64(haltHeight))
+ state, err := chain.ExportState(ctx, haltHeight)
s.Require().NoError(err)
appTomlOverrides := make(test.Toml)
diff --git a/e2e/tests/upgrades/upgrade_test.go b/e2e/tests/upgrades/upgrade_test.go
index 3dee14ce45f..49eca1c9e0a 100644
--- a/e2e/tests/upgrades/upgrade_test.go
+++ b/e2e/tests/upgrades/upgrade_test.go
@@ -1,3 +1,5 @@
+//go:build !test_e2e
+
package upgrades
import (
@@ -6,9 +8,7 @@ import (
"testing"
"time"
- govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/cosmos/gogoproto/proto"
-
interchaintest "github.com/strangelove-ventures/interchaintest/v8"
"github.com/strangelove-ventures/interchaintest/v8/chain/cosmos"
"github.com/strangelove-ventures/interchaintest/v8/ibc"
@@ -19,6 +19,7 @@ import (
upgradetypes "cosmossdk.io/x/upgrade/types"
sdk "github.com/cosmos/cosmos-sdk/types"
+ govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
e2erelayer "github.com/cosmos/ibc-go/e2e/relayer"
"github.com/cosmos/ibc-go/e2e/testsuite"
@@ -143,7 +144,8 @@ func (s *UpgradeTestSuite) TestIBCChainUpgrade() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
+
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
@@ -170,8 +172,8 @@ func (s *UpgradeTestSuite) TestIBCChainUpgrade() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 2)
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount * 2
@@ -189,7 +191,8 @@ func (s *UpgradeTestSuite) TestIBCChainUpgrade() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID, 1)
- actualBalance, err := chainA.GetBalance(ctx, chainAAddress, chainAIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom())
+
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
@@ -219,7 +222,7 @@ func (s *UpgradeTestSuite) TestChainUpgrade() {
})
t.Run("verify tokens sent", func(t *testing.T) {
- balance, err := chain.GetBalance(ctx, userWalletAddr, chain.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chain, userWalletAddr, chain.Config().Denom)
s.Require().NoError(err)
expected := testvalues.StartingTokenAmount * 2
@@ -243,7 +246,7 @@ func (s *UpgradeTestSuite) TestChainUpgrade() {
})
t.Run("verify tokens sent", func(t *testing.T) {
- balance, err := chain.GetBalance(ctx, userWalletAddr, chain.Config().Denom)
+ balance, err := s.QueryBalance(ctx, chain, userWalletAddr, chain.Config().Denom)
s.Require().NoError(err)
expected := testvalues.StartingTokenAmount * 3
@@ -355,7 +358,7 @@ func (s *UpgradeTestSuite) TestV6ToV7ChainUpgrade() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
@@ -396,7 +399,7 @@ func (s *UpgradeTestSuite) TestV6ToV7ChainUpgrade() {
t.Run("packets are relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount * 2
@@ -450,7 +453,7 @@ func (s *UpgradeTestSuite) TestV7ToV7_1ChainUpgrade() {
t.Run("packet is relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
@@ -541,7 +544,7 @@ func (s *UpgradeTestSuite) TestV7ToV8ChainUpgrade() {
t.Run("packet is relayed", func(t *testing.T) {
s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1)
- actualBalance, err := chainB.GetBalance(ctx, chainBAddress, chainBIBCToken.IBCDenom())
+ actualBalance, err := s.QueryBalance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom())
s.Require().NoError(err)
expected := testvalues.IBCTransferAmount
diff --git a/e2e/testsuite/codec.go b/e2e/testsuite/codec.go
index 649422c6620..8eb1d050b30 100644
--- a/e2e/testsuite/codec.go
+++ b/e2e/testsuite/codec.go
@@ -5,13 +5,13 @@ import (
"encoding/hex"
"fmt"
- codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/gogoproto/jsonpb"
"github.com/cosmos/gogoproto/proto"
upgradetypes "cosmossdk.io/x/upgrade/types"
"github.com/cosmos/cosmos-sdk/codec"
+ codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module/testutil"
diff --git a/e2e/testsuite/grpc_query.go b/e2e/testsuite/grpc_query.go
index ae0257da567..954841e032a 100644
--- a/e2e/testsuite/grpc_query.go
+++ b/e2e/testsuite/grpc_query.go
@@ -11,6 +11,7 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
+ "cosmossdk.io/math"
upgradetypes "cosmossdk.io/x/upgrade/types"
"github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"
@@ -262,6 +263,20 @@ func (s *E2ETestSuite) QueryCounterPartyPayee(ctx context.Context, chain ibc.Cha
return res.CounterpartyPayee, nil
}
+// QueryBalance returns the balance of a specific denomination for a given account by address.
+func (s *E2ETestSuite) QueryBalance(ctx context.Context, chain ibc.Chain, address string, denom string) (math.Int, error) {
+ queryClient := s.GetChainGRCPClients(chain).BankQueryClient
+ res, err := queryClient.Balance(ctx, &banktypes.QueryBalanceRequest{
+ Address: address,
+ Denom: denom,
+ })
+ if err != nil {
+ return math.Int{}, err
+ }
+
+ return res.Balance.Amount, nil
+}
+
// QueryProposalV1Beta1 queries the governance proposal on the given chain with the given proposal ID.
func (s *E2ETestSuite) QueryProposalV1Beta1(ctx context.Context, chain ibc.Chain, proposalID uint64) (govtypesv1beta1.Proposal, error) {
queryClient := s.GetChainGRCPClients(chain).GovQueryClient
diff --git a/e2e/testsuite/testconfig.go b/e2e/testsuite/testconfig.go
index 6c213b6ebad..0524abee8aa 100644
--- a/e2e/testsuite/testconfig.go
+++ b/e2e/testsuite/testconfig.go
@@ -8,7 +8,6 @@ import (
"path"
"strings"
- tmjson "github.com/cometbft/cometbft/libs/json"
"github.com/strangelove-ventures/interchaintest/v8/ibc"
interchaintestutil "github.com/strangelove-ventures/interchaintest/v8/testutil"
"gopkg.in/yaml.v2"
@@ -21,6 +20,8 @@ import (
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
+ tmjson "github.com/cometbft/cometbft/libs/json"
+
"github.com/cosmos/ibc-go/e2e/relayer"
"github.com/cosmos/ibc-go/e2e/semverutil"
"github.com/cosmos/ibc-go/e2e/testvalues"
@@ -52,11 +53,9 @@ const (
// all images are here https://github.com/cosmos/relayer/pkgs/container/relayer/versions
defaultRlyTag = "latest"
// defaultHermesTag is the tag that will be used if no relayer tag is specified for hermes.
- defaultHermesTag = "bef2f53"
+ defaultHermesTag = "v1.7.0"
// defaultChainTag is the tag that will be used for the chains if none is specified.
defaultChainTag = "main"
- // defaultRelayerType is the default relayer that will be used if none is specified.
- defaultRelayerType = relayer.Hermes
// defaultConfigFileName is the default filename for the config file that can be used to configure
// e2e tests. See sample.config.yaml as an example for what this should look like.
defaultConfigFileName = ".ibc-go-e2e-config.yaml"
diff --git a/e2e/testsuite/testsuite.go b/e2e/testsuite/testsuite.go
index 47fc9d8e441..a62c94fd7a5 100644
--- a/e2e/testsuite/testsuite.go
+++ b/e2e/testsuite/testsuite.go
@@ -273,7 +273,7 @@ func (s *E2ETestSuite) RecoverRelayerWallets(ctx context.Context, ibcrelayer ibc
// StartRelayer starts the given ibcrelayer.
func (s *E2ETestSuite) StartRelayer(ibcrelayer ibc.Relayer) {
if s.startRelayerFn == nil {
- panic(errors.New("cannot start relayer before it is created!"))
+ panic(errors.New("cannot start relayer before it is created"))
}
s.startRelayerFn(ibcrelayer)
@@ -306,13 +306,22 @@ func (s *E2ETestSuite) CreateUserOnChainB(ctx context.Context, amount int64) ibc
// GetChainANativeBalance gets the balance of a given user on chain A.
func (s *E2ETestSuite) GetChainANativeBalance(ctx context.Context, user ibc.Wallet) (int64, error) {
chainA, _ := s.GetChains()
- return GetNativeChainBalance(ctx, chainA, user)
+
+ balance, err := s.QueryBalance(ctx, chainA, user.FormattedAddress(), chainA.Config().Denom)
+ if err != nil {
+ return 0, err
+ }
+ return balance.Int64(), nil
}
// GetChainBNativeBalance gets the balance of a given user on chain B.
func (s *E2ETestSuite) GetChainBNativeBalance(ctx context.Context, user ibc.Wallet) (int64, error) {
_, chainB := s.GetChains()
- return GetNativeChainBalance(ctx, chainB, user)
+ balance, err := s.QueryBalance(ctx, chainB, user.FormattedAddress(), chainB.Config().Denom)
+ if err != nil {
+ return -1, err
+ }
+ return balance.Int64(), nil
}
// GetChainGRCPClients gets the GRPC clients associated with the given chain.
@@ -397,15 +406,6 @@ func (s *E2ETestSuite) GetTimeoutHeight(ctx context.Context, chain *cosmos.Cosmo
return clienttypes.NewHeight(clienttypes.ParseChainID(chain.Config().ChainID), height+1000)
}
-// GetNativeChainBalance returns the balance of a specific user on a chain using the native denom.
-func GetNativeChainBalance(ctx context.Context, chain ibc.Chain, user ibc.Wallet) (int64, error) {
- bal, err := chain.GetBalance(ctx, user.FormattedAddress(), chain.Config().Denom)
- if err != nil {
- return -1, err
- }
- return bal.Int64(), nil
-}
-
// GetIBCToken returns the denomination of the full token denom sent to the receiving channel
func GetIBCToken(fullTokenDenom string, portID, channelID string) transfertypes.DenomTrace {
return transfertypes.ParseDenomTrace(fmt.Sprintf("%s/%s/%s", portID, channelID, fullTokenDenom))
diff --git a/e2e/testsuite/tx.go b/e2e/testsuite/tx.go
index 068531f26f6..c548c163fb1 100644
--- a/e2e/testsuite/tx.go
+++ b/e2e/testsuite/tx.go
@@ -3,6 +3,7 @@ package testsuite
import (
"context"
"fmt"
+ "slices"
"strconv"
"strings"
"time"
@@ -80,7 +81,8 @@ func (s *E2ETestSuite) retryNtimes(f func() (sdk.TxResponse, error), attempts in
if err != nil {
return sdk.TxResponse{}, err
}
- if !containsMessage(resp.RawLog, retryMessages) {
+ // If the response's raw log doesn't contain any of the allowed prefixes we return, else, we retry.
+ if !slices.ContainsFunc(retryMessages, func(s string) bool { return strings.Contains(resp.RawLog, s) }) {
return resp, err
}
s.T().Logf("retrying tx due to non deterministic failure: %+v", resp)
@@ -88,16 +90,6 @@ func (s *E2ETestSuite) retryNtimes(f func() (sdk.TxResponse, error), attempts in
return resp, err
}
-// containsMessages returns true if the string s contains any of the messages in the slice.
-func containsMessage(s string, messages []string) bool {
- for _, message := range messages {
- if strings.Contains(s, message) {
- return true
- }
- }
- return false
-}
-
// AssertTxFailure verifies that an sdk.TxResponse has failed.
func (s *E2ETestSuite) AssertTxFailure(resp sdk.TxResponse, expectedError *errorsmod.Error) {
errorMsg := fmt.Sprintf("%+v", resp)
diff --git a/e2e/testvalues/values.go b/e2e/testvalues/values.go
index 9b2f7b6d4df..12e12b45574 100644
--- a/e2e/testvalues/values.go
+++ b/e2e/testvalues/values.go
@@ -77,6 +77,7 @@ var MemoFeatureReleases = semverutil.FeatureReleases{
// TotalEscrowFeatureReleases represents the releases the total escrow state entry was released in.
var TotalEscrowFeatureReleases = semverutil.FeatureReleases{
+ MajorVersion: "v8",
MinorVersions: []string{
"v7.1",
},
@@ -84,17 +85,13 @@ var TotalEscrowFeatureReleases = semverutil.FeatureReleases{
// IbcErrorsFeatureReleases represents the releases the IBC module level errors was released in.
var IbcErrorsFeatureReleases = semverutil.FeatureReleases{
- MajorVersion: "v8.0",
+ MajorVersion: "v8",
}
// LocalhostClientFeatureReleases represents the releases the localhost client was released in.
var LocalhostClientFeatureReleases = semverutil.FeatureReleases{
+ MajorVersion: "v8",
MinorVersions: []string{
"v7.1",
},
}
-
-// DenomMetadataFeatureReleases represents the releases the human readable denom feature was released in.
-var DenomMetadataFeatureReleases = semverutil.FeatureReleases{
- MajorVersion: "v8",
-}
diff --git a/go.mod b/go.mod
index f068ca7e84d..45ea7c69613 100644
--- a/go.mod
+++ b/go.mod
@@ -3,44 +3,44 @@ go 1.21
module github.com/cosmos/ibc-go/v8
require (
- cosmossdk.io/api v0.7.1
- cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508
+ cosmossdk.io/api v0.7.2
+ cosmossdk.io/client/v2 v2.0.0-beta.1
cosmossdk.io/core v0.11.0
cosmossdk.io/errors v1.0.0
cosmossdk.io/log v1.2.1
- cosmossdk.io/math v1.1.2
- cosmossdk.io/store v1.0.0-rc.0
- cosmossdk.io/tools/confix v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/tx v0.10.0
- cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d
+ cosmossdk.io/math v1.2.0
+ cosmossdk.io/store v1.0.0
+ cosmossdk.io/tools/confix v0.1.0
+ cosmossdk.io/x/circuit v0.1.0
+ cosmossdk.io/x/evidence v0.1.0
+ cosmossdk.io/x/feegrant v0.1.0
+ cosmossdk.io/x/tx v0.12.0
+ cosmossdk.io/x/upgrade v0.1.0
github.com/cometbft/cometbft v0.38.0
github.com/cosmos/cosmos-db v1.0.0
github.com/cosmos/cosmos-proto v1.0.0-beta.3
- github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d
+ github.com/cosmos/cosmos-sdk v0.50.1
github.com/cosmos/gogoproto v1.4.11
- github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5
+ github.com/cosmos/ibc-go/modules/capability v1.0.0
github.com/cosmos/ics23/go v0.10.0
github.com/golang/protobuf v1.5.3
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/hashicorp/go-metrics v0.5.1
github.com/spf13/cast v1.5.1
- github.com/spf13/cobra v1.7.0
- github.com/spf13/viper v1.16.0
+ github.com/spf13/cobra v1.8.0
+ github.com/spf13/viper v1.17.0
github.com/stretchr/testify v1.8.4
- google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e
- google.golang.org/grpc v1.58.2
+ google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a
+ google.golang.org/grpc v1.59.0
google.golang.org/protobuf v1.31.0
gopkg.in/yaml.v2 v2.4.0
)
require (
- cloud.google.com/go v0.110.6 // indirect
- cloud.google.com/go/compute v1.23.0 // indirect
+ cloud.google.com/go v0.110.8 // indirect
+ cloud.google.com/go/compute v1.23.1 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- cloud.google.com/go/iam v1.1.1 // indirect
+ cloud.google.com/go/iam v1.1.3 // indirect
cloud.google.com/go/storage v1.30.1 // indirect
cosmossdk.io/collections v0.4.0 // indirect
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
@@ -61,19 +61,19 @@ require (
github.com/cockroachdb/apd/v2 v2.0.2 // indirect
github.com/cockroachdb/errors v1.11.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
- github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 // indirect
+ github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cometbft/cometbft-db v0.8.0 // indirect
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
- github.com/cosmos/iavl v1.0.0-rc.1 // indirect
- github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect
+ github.com/cosmos/iavl v1.0.0 // indirect
+ github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect
github.com/creachadair/atomicfile v0.3.1 // indirect
github.com/creachadair/tomledit v0.0.24 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
@@ -81,30 +81,30 @@ require (
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
- github.com/emicklei/dot v1.5.0 // indirect
+ github.com/emicklei/dot v1.6.0 // indirect
github.com/fatih/color v1.15.0 // indirect
- github.com/felixge/httpsnoop v1.0.2 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
- github.com/getsentry/sentry-go v0.23.0 // indirect
+ github.com/getsentry/sentry-go v0.25.0 // indirect
github.com/go-kit/kit v0.12.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/glog v1.1.0 // indirect
+ github.com/golang/glog v1.1.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
- github.com/google/go-cmp v0.5.9 // indirect
+ github.com/google/go-cmp v0.6.0 // indirect
github.com/google/orderedcode v0.0.1 // indirect
- github.com/google/s2a-go v0.1.4 // indirect
- github.com/google/uuid v1.3.0 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
- github.com/googleapis/gax-go/v2 v2.11.0 // indirect
- github.com/gorilla/handlers v1.5.1 // indirect
- github.com/gorilla/mux v1.8.0 // indirect
+ github.com/google/s2a-go v0.1.7 // indirect
+ github.com/google/uuid v1.3.1 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.0 // indirect
+ github.com/gorilla/handlers v1.5.2 // indirect
+ github.com/gorilla/mux v1.8.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
@@ -112,9 +112,8 @@ require (
github.com/hashicorp/go-getter v1.7.1 // indirect
github.com/hashicorp/go-hclog v1.5.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
- github.com/hashicorp/go-plugin v1.4.10 // indirect
+ github.com/hashicorp/go-plugin v1.5.2 // indirect
github.com/hashicorp/go-safetemp v1.0.0 // indirect
- github.com/hashicorp/go-uuid v1.0.2 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
@@ -126,68 +125,71 @@ require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
- github.com/klauspost/compress v1.16.7 // indirect
+ github.com/klauspost/compress v1.17.2 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lib/pq v1.10.7 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
- github.com/linxGnu/grocksdb v1.8.0 // indirect
+ github.com/linxGnu/grocksdb v1.8.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/manifoldco/promptui v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/minio/highwayhash v1.0.2 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mtibben/percent v0.2.1 // indirect
- github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce // indirect
+ github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect
github.com/oklog/run v1.1.0 // indirect
- github.com/pelletier/go-toml/v2 v2.0.9 // indirect
- github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect
+ github.com/pelletier/go-toml/v2 v2.1.0 // indirect
+ github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/prometheus/client_golang v1.16.0 // indirect
- github.com/prometheus/client_model v0.4.0 // indirect
- github.com/prometheus/common v0.44.0 // indirect
- github.com/prometheus/procfs v0.11.1 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.17.0 // indirect
+ github.com/prometheus/client_model v0.5.0 // indirect
+ github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/rs/cors v1.8.3 // indirect
- github.com/rs/zerolog v1.30.0 // indirect
+ github.com/rs/zerolog v1.31.0 // indirect
+ github.com/sagikazarmark/locafero v0.3.0 // indirect
+ github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sasha-s/go-deadlock v0.3.1 // indirect
- github.com/spf13/afero v1.9.5 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
+ github.com/sourcegraph/conc v0.3.0 // indirect
+ github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
github.com/tendermint/go-amino v0.16.0 // indirect
- github.com/tidwall/btree v1.6.0 // indirect
+ github.com/tidwall/btree v1.7.0 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
- github.com/zondax/hid v0.9.1 // indirect
- github.com/zondax/ledger-go v0.14.1 // indirect
+ github.com/zondax/hid v0.9.2 // indirect
+ github.com/zondax/ledger-go v0.14.3 // indirect
go.etcd.io/bbolt v1.3.7 // indirect
go.opencensus.io v0.24.0 // indirect
- golang.org/x/crypto v0.13.0 // indirect
- golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
- golang.org/x/net v0.15.0 // indirect
- golang.org/x/oauth2 v0.10.0 // indirect
- golang.org/x/sync v0.3.0 // indirect
- golang.org/x/sys v0.12.0 // indirect
- golang.org/x/term v0.12.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ golang.org/x/crypto v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+ golang.org/x/net v0.17.0 // indirect
+ golang.org/x/oauth2 v0.12.0 // indirect
+ golang.org/x/sync v0.5.0 // indirect
+ golang.org/x/sys v0.13.0 // indirect
+ golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
- google.golang.org/api v0.126.0 // indirect
+ google.golang.org/api v0.143.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect
+ google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- gotest.tools/v3 v3.5.0 // indirect
+ gotest.tools/v3 v3.5.1 // indirect
nhooyr.io/websocket v1.8.6 // indirect
pgregory.net/rapid v1.1.0 // indirect
- sigs.k8s.io/yaml v1.3.0 // indirect
+ sigs.k8s.io/yaml v1.4.0 // indirect
)
replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
diff --git a/go.sum b/go.sum
index 0d6a345c083..51df9949de6 100644
--- a/go.sum
+++ b/go.sum
@@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9
cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
-cloud.google.com/go v0.110.6 h1:8uYAkj3YHTP/1iwReuHPxLSbdcyc+dSBbzFMrVwDR6Q=
-cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
+cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME=
+cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk=
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
@@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
-cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
-cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
+cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
@@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
-cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y=
-cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
+cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc=
+cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
@@ -187,10 +187,10 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
-cosmossdk.io/api v0.7.1 h1:PNQ1xN8+/0hj/sSD0ANqjkgfXFys+bZ5L8Hg7uzoUTU=
-cosmossdk.io/api v0.7.1/go.mod h1:ure9edhcROIHsngavM6mBLilMGFnfjhV/AaYhEMUkdo=
-cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508 h1:tt5OMwdouv7dkwkWJYxb8I9h322bOxnC9RmK2qGvWMs=
-cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508/go.mod h1:iHeSk2AT6O8RNGlfcEQq6Yty6Z/6gydQsXXBh5I715Q=
+cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4=
+cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38=
+cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q=
+cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU=
cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo=
@@ -201,22 +201,22 @@ cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04=
cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0=
cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk=
cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4=
-cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM=
-cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
-cosmossdk.io/store v1.0.0-rc.0 h1:9DwOjuUYxDtYxn/REkTxGQAmxlIGfRroB35MQ8TrxF4=
-cosmossdk.io/store v1.0.0-rc.0/go.mod h1:FtBDOJmwtOZfmKKF65bKZbTYgS3bDNjjo3nP76dAegk=
-cosmossdk.io/tools/confix v0.0.0-20230818115413-c402c51a1508 h1:axKhxRa3M9QW2GdKJUsSyzo44gxcwSOTGeomtkbQClM=
-cosmossdk.io/tools/confix v0.0.0-20230818115413-c402c51a1508/go.mod h1:qcJ1zwLIMefpDHZuYSa73yBe/k5HyQ5H1Jg9PWv30Ts=
-cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508 h1:9HRBpMbGgk+W4BIp4ezYH2EjbpuVl2fBlwyJ2GZgrS0=
-cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508/go.mod h1:BhFX0kD6lkctNQO3ZGYY3p6h0/wPLVbFhrOt3uQxEIM=
-cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508 h1:R9H1lDpcPSkrLOnt6IDE38o0Wp8xE/+BAxocb0oyX4I=
-cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508/go.mod h1:yjIo3J0QKDo9CJawK1QoTA1hBx0llafVJdPqI0+ry74=
-cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508 h1:TKqjhhTfLchU8nSo1WZRgaH7xZWzYUQXVRj9CePcbaw=
-cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508/go.mod h1:kOr8Rr10RoMeGGk/pfW5yo1R7GQTGu4KdRgKphVvjz4=
-cosmossdk.io/x/tx v0.10.0 h1:LxWF/hksVDbeQmFj4voLM5ZCHyVZ1cCNIqKenfH9plc=
-cosmossdk.io/x/tx v0.10.0/go.mod h1:MKo9/b5wsoL8dd9y9pvD2yOP1CMvzHIWYxi1l2oLPFo=
-cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d h1:LH8NPa2+yoMFdCTxCFyQUX5zVDip4YDgtg7e0EecDqo=
-cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d/go.mod h1:+5jCm6Lk/CrQhQvtJFy/tmuLfhQKNMn/U0vwrRz/dxQ=
+cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig=
+cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
+cosmossdk.io/store v1.0.0 h1:6tnPgTpTSIskaTmw/4s5C9FARdgFflycIc9OX8i1tOI=
+cosmossdk.io/store v1.0.0/go.mod h1:ABMprwjvx6IpMp8l06TwuMrj6694/QP5NIW+X6jaTYc=
+cosmossdk.io/tools/confix v0.1.0 h1:2OOZTtQsDT5e7P3FM5xqM0bPfluAxZlAwxqaDmYBE+E=
+cosmossdk.io/tools/confix v0.1.0/go.mod h1:TdXKVYs4gEayav5wM+JHT+kTU2J7fozFNqoVaN+8CdY=
+cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs=
+cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w=
+cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk=
+cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw=
+cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk=
+cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU=
+cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U=
+cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0=
+cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE=
+cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
@@ -328,8 +328,8 @@ github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZ
github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 h1:M4A5LioEhkZ/s+m0g0pWgiLBQr83p0jWnQUo320Qy+A=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0/go.mod h1:EDjiaAXc0FXiRmxDzcu1wIEJ093ohHMUWxrI6iku0XA=
+github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb h1:6Po+YYKT5B5ZXN0wd2rwFBaebM0LufPf8p4zxOd48Kg=
+github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc=
github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
@@ -353,8 +353,8 @@ github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0
github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U=
github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o=
github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d h1:dBD7O1D3lxfMwKjR71ooQanLzclJ17NZMHplL6qd8ZU=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d/go.mod h1:8rNGga/Gg9/NIFvpqO4URts+8Cz/XVB0wTr5ZDm22UM=
+github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw=
+github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
@@ -362,17 +362,17 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g=
github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y=
-github.com/cosmos/iavl v1.0.0-rc.1 h1:5+73BEWW1gZOIUJKlk/1fpD4lOqqeFBA8KuV+NpkCpU=
-github.com/cosmos/iavl v1.0.0-rc.1/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
-github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5 h1:OwYsRIM2gwe3ifuvi2sriEvDBd3t43vTF2GEi1SOchM=
-github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5/go.mod h1:YriReKrNl7ZKBW6FSmgV7v4BhrN84tm672YjU0Y2C2I=
+github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so=
+github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
+github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE=
+github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco=
github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM=
github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0=
-github.com/cosmos/ledger-cosmos-go v0.13.0 h1:ex0CvCxToSR7j5WjrghPu2Bu9sSXKikjnVvUryNnx4s=
-github.com/cosmos/ledger-cosmos-go v0.13.0/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI=
+github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM=
+github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creachadair/atomicfile v0.3.1 h1:yQORkHjSYySh/tv5th1dkKcn02NEW5JleB84sjt+W4Q=
github.com/creachadair/atomicfile v0.3.1/go.mod h1:mwfrkRxFKwpNAflYZzytbSwxvbK6fdGRRlp0KEQc0qU=
github.com/creachadair/tomledit v0.0.24 h1:5Xjr25R2esu1rKCbQEmjZYlrhFkDspoAbAKb6QKQDhQ=
@@ -382,8 +382,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
@@ -413,8 +414,8 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/emicklei/dot v1.5.0 h1:tc9eKdCBTgoR68vJ6OcgMtI0SdrGDwLPPVaPA6XhX50=
-github.com/emicklei/dot v1.5.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
+github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY=
+github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -430,9 +431,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
-github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
-github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
@@ -443,8 +443,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE=
-github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
+github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
@@ -503,8 +503,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
-github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
+github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
+github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -563,8 +563,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
@@ -594,17 +595,18 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
-github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
+github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
+github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ=
+github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
@@ -614,18 +616,18 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99
github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
-github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4=
-github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
+github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
+github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
-github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
+github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
+github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
-github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
@@ -658,8 +660,8 @@ github.com/hashicorp/go-metrics v0.5.1 h1:rfPwUqFU6uZXNvGl4hzjY8LEBsqFVU4si1H9/H
github.com/hashicorp/go-metrics v0.5.1/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-plugin v1.4.10 h1:xUbmA4jC6Dq163/fWcp8P3JuHilrHHMLNRxzGQJ9hNk=
-github.com/hashicorp/go-plugin v1.4.10/go.mod h1:6/1TEzT0eQznvI/gV2CM29DLSkAK/e58mUWKVsPaph0=
+github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y=
+github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
@@ -704,8 +706,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
-github.com/jhump/protoreflect v1.15.2 h1:7YppbATX94jEt9KLAc5hICx4h6Yt3SaavhQRsIUEHP0=
-github.com/jhump/protoreflect v1.15.2/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
+github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls=
+github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
@@ -735,8 +737,8 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
-github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
-github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
+github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -757,8 +759,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/linxGnu/grocksdb v1.8.0 h1:H4L/LhP7GOMf1j17oQAElHgVlbEje2h14A8Tz9cM2BE=
-github.com/linxGnu/grocksdb v1.8.0/go.mod h1:09CeBborffXhXdNpEcOeZrLKEnRtrZFEpFdPNI9Zjjg=
+github.com/linxGnu/grocksdb v1.8.4 h1:ZMsBpPpJNtRLHiKKp0mI7gW+NT4s7UgfD5xHxx1jVRo=
+github.com/linxGnu/grocksdb v1.8.4/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@@ -775,13 +777,14 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
@@ -822,8 +825,8 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce h1:/pEpMk55wH0X+E5zedGEMOdLuWmV8P4+4W3+LZaM6kg=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
@@ -832,8 +835,9 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
@@ -862,12 +866,12 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0=
-github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
+github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
+github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
@@ -879,8 +883,9 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
@@ -888,32 +893,32 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
-github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
+github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
-github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
+github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
@@ -927,12 +932,16 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo=
github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
-github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
+github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
+github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ=
+github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
@@ -948,29 +957,29 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
-github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
+github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
+github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
-github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
+github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
-github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
+github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
+github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -991,22 +1000,22 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
-github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
-github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
-github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
+github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
+github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
-github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
@@ -1020,10 +1029,10 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo=
-github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
-github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c=
-github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320=
+github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
+github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
+github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw=
+github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
@@ -1048,6 +1057,8 @@ go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
@@ -1064,10 +1075,9 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1079,8 +1089,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1107,8 +1117,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
-golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
+golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1170,8 +1180,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1197,8 +1207,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
-golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8=
-golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
+golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
+golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1213,8 +1223,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1314,13 +1324,14 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1330,7 +1341,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
@@ -1401,8 +1411,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E=
-golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
+golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
+golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1461,8 +1471,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ
google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
-google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o=
-google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
+google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA=
+google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1580,12 +1590,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw
google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@@ -1627,8 +1637,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
-google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
+google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -1679,8 +1689,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
-gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1697,6 +1707,6 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/modules/apps/27-interchain-accounts/controller/keeper/keeper.go b/modules/apps/27-interchain-accounts/controller/keeper/keeper.go
index 0ac0ececc24..63e606c395e 100644
--- a/modules/apps/27-interchain-accounts/controller/keeper/keeper.go
+++ b/modules/apps/27-interchain-accounts/controller/keeper/keeper.go
@@ -12,7 +12,6 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
- paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
"github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"
@@ -28,7 +27,7 @@ import (
type Keeper struct {
storeKey storetypes.StoreKey
cdc codec.Codec
- legacySubspace paramtypes.Subspace
+ legacySubspace icatypes.ParamSubspace
ics4Wrapper porttypes.ICS4Wrapper
channelKeeper icatypes.ChannelKeeper
portKeeper icatypes.PortKeeper
@@ -44,15 +43,10 @@ type Keeper struct {
// NewKeeper creates a new interchain accounts controller Keeper instance
func NewKeeper(
- cdc codec.Codec, key storetypes.StoreKey, legacySubspace paramtypes.Subspace,
+ cdc codec.Codec, key storetypes.StoreKey, legacySubspace icatypes.ParamSubspace,
ics4Wrapper porttypes.ICS4Wrapper, channelKeeper icatypes.ChannelKeeper, portKeeper icatypes.PortKeeper,
scopedKeeper exported.ScopedKeeper, msgRouter icatypes.MessageRouter, authority string,
) Keeper {
- // set KeyTable if it has not already been set
- if !legacySubspace.HasKeyTable() {
- legacySubspace = legacySubspace.WithKeyTable(types.ParamKeyTable())
- }
-
if strings.TrimSpace(authority) == "" {
panic(errors.New("authority must be non-empty"))
}
diff --git a/modules/apps/27-interchain-accounts/controller/types/codec.go b/modules/apps/27-interchain-accounts/controller/types/codec.go
index 01fcea71f68..abc4041b535 100644
--- a/modules/apps/27-interchain-accounts/controller/types/codec.go
+++ b/modules/apps/27-interchain-accounts/controller/types/codec.go
@@ -3,6 +3,7 @@ package types
import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
+ "github.com/cosmos/cosmos-sdk/types/msgservice"
)
// RegisterInterfaces registers the interchain accounts controller message types using the provided InterfaceRegistry
@@ -13,4 +14,5 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
&MsgSendTx{},
&MsgUpdateParams{},
)
+ msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
}
diff --git a/modules/apps/27-interchain-accounts/controller/types/codec_test.go b/modules/apps/27-interchain-accounts/controller/types/codec_test.go
new file mode 100644
index 00000000000..3b6e13a25f9
--- /dev/null
+++ b/modules/apps/27-interchain-accounts/controller/types/codec_test.go
@@ -0,0 +1,59 @@
+package types_test
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
+
+ ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts"
+ "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"
+)
+
+func TestCodecTypeRegistration(t *testing.T) {
+ testCases := []struct {
+ name string
+ typeURL string
+ expPass bool
+ }{
+ {
+ "success: MsgRegisterInterchainAccount",
+ sdk.MsgTypeURL(&types.MsgRegisterInterchainAccount{}),
+ true,
+ },
+ {
+ "success: MsgSendTx",
+ sdk.MsgTypeURL(&types.MsgSendTx{}),
+ true,
+ },
+ {
+ "success: MsgUpdateParams",
+ sdk.MsgTypeURL(&types.MsgUpdateParams{}),
+ true,
+ },
+ {
+ "type not registered on codec",
+ "ibc.invalid.MsgTypeURL",
+ false,
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ t.Run(tc.name, func(t *testing.T) {
+ encodingCfg := moduletestutil.MakeTestEncodingConfig(ica.AppModuleBasic{})
+ msg, err := encodingCfg.Codec.InterfaceRegistry().Resolve(tc.typeURL)
+
+ if tc.expPass {
+ require.NotNil(t, msg)
+ require.NoError(t, err)
+ } else {
+ require.Nil(t, msg)
+ require.Error(t, err)
+ }
+ })
+ }
+}
diff --git a/modules/apps/27-interchain-accounts/controller/types/msgs.go b/modules/apps/27-interchain-accounts/controller/types/msgs.go
index b600942bf01..213fcbfbc04 100644
--- a/modules/apps/27-interchain-accounts/controller/types/msgs.go
+++ b/modules/apps/27-interchain-accounts/controller/types/msgs.go
@@ -12,6 +12,8 @@ import (
ibcerrors "github.com/cosmos/ibc-go/v8/modules/core/errors"
)
+const MaximumOwnerLength = 2048 // maximum length of the owner in bytes (value chosen arbitrarily)
+
var (
_ sdk.Msg = (*MsgRegisterInterchainAccount)(nil)
_ sdk.Msg = (*MsgSendTx)(nil)
@@ -41,6 +43,10 @@ func (msg MsgRegisterInterchainAccount) ValidateBasic() error {
return errorsmod.Wrap(ibcerrors.ErrInvalidAddress, "owner address cannot be empty")
}
+ if len(msg.Owner) > MaximumOwnerLength {
+ return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "owner address must not exceed %d bytes", MaximumOwnerLength)
+ }
+
return nil
}
@@ -74,6 +80,10 @@ func (msg MsgSendTx) ValidateBasic() error {
return errorsmod.Wrap(ibcerrors.ErrInvalidAddress, "owner address cannot be empty")
}
+ if len(msg.Owner) > MaximumOwnerLength {
+ return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "owner address must not exceed %d bytes", MaximumOwnerLength)
+ }
+
if err := msg.PacketData.ValidateBasic(); err != nil {
return errorsmod.Wrap(err, "invalid interchain account packet data")
}
diff --git a/modules/apps/27-interchain-accounts/controller/types/msgs_test.go b/modules/apps/27-interchain-accounts/controller/types/msgs_test.go
index 13ef2c9ae1a..541f3830fb6 100644
--- a/modules/apps/27-interchain-accounts/controller/types/msgs_test.go
+++ b/modules/apps/27-interchain-accounts/controller/types/msgs_test.go
@@ -64,6 +64,13 @@ func TestMsgRegisterInterchainAccountValidateBasic(t *testing.T) {
},
false,
},
+ {
+ "owner address is too long",
+ func() {
+ msg.Owner = ibctesting.GenerateString(types.MaximumOwnerLength + 1)
+ },
+ false,
+ },
}
for i, tc := range testCases {
@@ -121,6 +128,13 @@ func TestMsgSendTxValidateBasic(t *testing.T) {
},
false,
},
+ {
+ "owner address is too long",
+ func() {
+ msg.Owner = ibctesting.GenerateString(types.MaximumOwnerLength + 1)
+ },
+ false,
+ },
{
"relative timeout is not set",
func() {
diff --git a/modules/apps/27-interchain-accounts/host/keeper/keeper.go b/modules/apps/27-interchain-accounts/host/keeper/keeper.go
index d063c9a932a..c426c4cc0cb 100644
--- a/modules/apps/27-interchain-accounts/host/keeper/keeper.go
+++ b/modules/apps/27-interchain-accounts/host/keeper/keeper.go
@@ -11,7 +11,6 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
- paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
genesistypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/genesis/types"
@@ -27,7 +26,7 @@ import (
type Keeper struct {
storeKey storetypes.StoreKey
cdc codec.Codec
- legacySubspace paramtypes.Subspace
+ legacySubspace icatypes.ParamSubspace
ics4Wrapper porttypes.ICS4Wrapper
channelKeeper icatypes.ChannelKeeper
@@ -45,7 +44,7 @@ type Keeper struct {
// NewKeeper creates a new interchain accounts host Keeper instance
func NewKeeper(
- cdc codec.Codec, key storetypes.StoreKey, legacySubspace paramtypes.Subspace,
+ cdc codec.Codec, key storetypes.StoreKey, legacySubspace icatypes.ParamSubspace,
ics4Wrapper porttypes.ICS4Wrapper, channelKeeper icatypes.ChannelKeeper, portKeeper icatypes.PortKeeper,
accountKeeper icatypes.AccountKeeper, scopedKeeper exported.ScopedKeeper, msgRouter icatypes.MessageRouter,
authority string,
@@ -55,11 +54,6 @@ func NewKeeper(
panic(errors.New("the Interchain Accounts module account has not been set"))
}
- // set KeyTable if it has not already been set
- if !legacySubspace.HasKeyTable() {
- legacySubspace = legacySubspace.WithKeyTable(types.ParamKeyTable())
- }
-
if strings.TrimSpace(authority) == "" {
panic(errors.New("authority must be non-empty"))
}
diff --git a/modules/apps/27-interchain-accounts/host/keeper/relay_test.go b/modules/apps/27-interchain-accounts/host/keeper/relay_test.go
index 3b12a0c5f5e..997000490b9 100644
--- a/modules/apps/27-interchain-accounts/host/keeper/relay_test.go
+++ b/modules/apps/27-interchain-accounts/host/keeper/relay_test.go
@@ -20,6 +20,7 @@ import (
icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"
transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
+ ibcerrors "github.com/cosmos/ibc-go/v8/modules/core/errors"
ibctesting "github.com/cosmos/ibc-go/v8/testing"
)
@@ -33,7 +34,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
testCases := []struct {
msg string
malleate func(encoding string)
- expPass bool
+ expErr error
}{
{
"interchain account successfully executes an arbitrary message type using the * (allow all message types) param",
@@ -77,7 +78,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{"*"})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes banktypes.MsgSend",
@@ -104,7 +105,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes stakingtypes.MsgDelegate",
@@ -132,7 +133,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes stakingtypes.MsgDelegate and stakingtypes.MsgUndelegate sequentially",
@@ -166,7 +167,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msgDelegate), sdk.MsgTypeURL(msgUndelegate)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes govtypes.MsgSubmitProposal",
@@ -184,7 +185,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
msg := &govtypes.MsgSubmitProposal{
Content: protoAny,
- InitialDeposit: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(5000))),
+ InitialDeposit: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100000))),
Proposer: interchainAccountAddr,
}
@@ -201,7 +202,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes govtypes.MsgVote",
@@ -245,7 +246,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes disttypes.MsgFundCommunityPool",
@@ -271,7 +272,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes disttypes.MsgSetWithdrawAddress",
@@ -297,7 +298,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes transfertypes.MsgTransfer",
@@ -332,7 +333,41 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
+ },
+ {
+ "Msg fails its ValidateBasic: MsgTransfer has an empty receiver",
+ func(encoding string) {
+ transferPath := ibctesting.NewTransferPath(suite.chainB, suite.chainC)
+ suite.coordinator.Setup(transferPath)
+
+ interchainAccountAddr, found := suite.chainB.GetSimApp().ICAHostKeeper.GetInterchainAccountAddress(suite.chainB.GetContext(), ibctesting.FirstConnectionID, path.EndpointA.ChannelConfig.PortID)
+ suite.Require().True(found)
+
+ msg := &transfertypes.MsgTransfer{
+ SourcePort: transferPath.EndpointA.ChannelConfig.PortID,
+ SourceChannel: transferPath.EndpointA.ChannelID,
+ Token: sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100)),
+ Sender: interchainAccountAddr,
+ Receiver: "",
+ TimeoutHeight: suite.chainB.GetTimeoutHeight(),
+ TimeoutTimestamp: uint64(0),
+ }
+
+ data, err := icatypes.SerializeCosmosTx(suite.chainA.GetSimApp().AppCodec(), []proto.Message{msg}, encoding)
+ suite.Require().NoError(err)
+
+ icaPacketData := icatypes.InterchainAccountPacketData{
+ Type: icatypes.EXECUTE_TX,
+ Data: data,
+ }
+
+ packetData = icaPacketData.GetBytes()
+
+ params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
+ suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
+ },
+ ibcerrors.ErrInvalidAddress,
},
{
"unregistered sdk.Msg",
@@ -352,14 +387,14 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{"/" + proto.MessageName(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- false,
+ icatypes.ErrUnknownDataType,
},
{
"cannot unmarshal interchain account packet data",
func(encoding string) {
packetData = []byte{}
},
- false,
+ icatypes.ErrUnknownDataType,
},
{
"cannot deserialize interchain account packet data messages",
@@ -373,7 +408,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
packetData = icaPacketData.GetBytes()
},
- false,
+ icatypes.ErrUnknownDataType,
},
{
"invalid packet type - UNSPECIFIED",
@@ -388,7 +423,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
packetData = icaPacketData.GetBytes()
},
- false,
+ icatypes.ErrUnknownDataType,
},
{
"unauthorised: interchain account not found for controller port ID",
@@ -405,7 +440,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
packetData = icaPacketData.GetBytes()
},
- false,
+ icatypes.ErrInterchainAccountNotFound,
},
{
"unauthorised: message type not allowed", // NOTE: do not update params to explicitly force the error
@@ -426,7 +461,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
packetData = icaPacketData.GetBytes()
},
- false,
+ ibcerrors.ErrUnauthorized,
},
{
"unauthorised: signer address is not the interchain account associated with the controller portID",
@@ -450,7 +485,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL(msg)})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- false,
+ ibcerrors.ErrUnauthorized,
},
}
@@ -481,7 +516,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
interchainAccount := suite.chainB.GetSimApp().AccountKeeper.GetAccount(suite.chainB.GetContext(), icaAddr)
suite.Require().Equal(interchainAccount.GetAddress().String(), storedAddr)
- suite.fundICAWallet(suite.chainB.GetContext(), path.EndpointA.ChannelConfig.PortID, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(10000))))
+ suite.fundICAWallet(suite.chainB.GetContext(), path.EndpointA.ChannelConfig.PortID, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000000))))
tc.malleate(encoding) // malleate mutates test data
@@ -498,11 +533,12 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
txResponse, err := suite.chainB.GetSimApp().ICAHostKeeper.OnRecvPacket(suite.chainB.GetContext(), packet)
- if tc.expPass {
+ expPass := tc.expErr == nil
+ if expPass {
suite.Require().NoError(err)
suite.Require().NotNil(txResponse)
} else {
- suite.Require().Error(err)
+ suite.Require().ErrorIs(err, tc.expErr)
suite.Require().Nil(txResponse)
}
})
@@ -520,7 +556,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
testCases := []struct {
msg string
malleate func(icaAddress string)
- expPass bool
+ expErr error
}{
{
"interchain account successfully executes an arbitrary message type using the * (allow all message types) param",
@@ -564,7 +600,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{"*"})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes banktypes.MsgSend",
@@ -589,7 +625,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*banktypes.MsgSend)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes govtypes.MsgSubmitProposal",
@@ -603,7 +639,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
"title": "IBC Gov Proposal",
"description": "tokens for all!"
},
- "initial_deposit": [{ "denom": "stake", "amount": "5000" }],
+ "initial_deposit": [{ "denom": "stake", "amount": "100000" }],
"proposer": "` + icaAddress + `"
}
]
@@ -618,7 +654,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*govtypes.MsgSubmitProposal)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes govtypes.MsgVote",
@@ -660,7 +696,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*govtypes.MsgVote)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes govtypes.MsgSubmitProposal, govtypes.MsgDeposit, and then govtypes.MsgVote sequentially",
@@ -674,7 +710,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
"title": "IBC Gov Proposal",
"description": "tokens for all!"
},
- "initial_deposit": [{ "denom": "stake", "amount": "5000" }],
+ "initial_deposit": [{ "denom": "stake", "amount": "100000" }],
"proposer": "` + icaAddress + `"
},
{
@@ -701,7 +737,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*govtypes.MsgSubmitProposal)(nil)), sdk.MsgTypeURL((*govtypes.MsgDeposit)(nil)), sdk.MsgTypeURL((*govtypes.MsgVote)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"interchain account successfully executes transfertypes.MsgTransfer",
@@ -734,7 +770,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*transfertypes.MsgTransfer)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- true,
+ nil,
},
{
"unregistered sdk.Msg",
@@ -750,7 +786,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{"*"})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- false,
+ icatypes.ErrUnknownDataType,
},
{
"message type not allowed banktypes.MsgSend",
@@ -775,7 +811,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*transfertypes.MsgTransfer)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- false,
+ ibcerrors.ErrUnauthorized,
},
{
"unauthorised: signer address is not the interchain account associated with the controller portID",
@@ -784,7 +820,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
"messages": [
{
"@type": "/cosmos.bank.v1beta1.MsgSend",
- "from_address": "` + ibctesting.InvalidID + `",
+ "from_address": "` + suite.chainB.SenderAccount.GetAddress().String() + `", // unexpected signer
"to_address": "cosmos17dtl0mjt3t77kpuhg2edqzjpszulwhgzuj9ljs",
"amount": [{ "denom": "stake", "amount": "100" }]
}
@@ -800,7 +836,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
params := types.NewParams(true, []string{sdk.MsgTypeURL((*banktypes.MsgSend)(nil))})
suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params)
},
- false,
+ icatypes.ErrUnknownDataType,
},
}
@@ -840,11 +876,12 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() {
txResponse, err := suite.chainB.GetSimApp().ICAHostKeeper.OnRecvPacket(suite.chainB.GetContext(), packet)
- if tc.expPass {
+ expPass := tc.expErr == nil
+ if expPass {
suite.Require().NoError(err)
suite.Require().NotNil(txResponse)
} else {
- suite.Require().Error(err)
+ suite.Require().ErrorIs(err, tc.expErr)
suite.Require().Nil(txResponse)
}
})
diff --git a/modules/apps/27-interchain-accounts/host/types/codec.go b/modules/apps/27-interchain-accounts/host/types/codec.go
index ef94e88ae67..8752640e767 100644
--- a/modules/apps/27-interchain-accounts/host/types/codec.go
+++ b/modules/apps/27-interchain-accounts/host/types/codec.go
@@ -3,6 +3,7 @@ package types
import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
+ "github.com/cosmos/cosmos-sdk/types/msgservice"
)
// RegisterInterfaces registers the interchain accounts host message types using the provided InterfaceRegistry
@@ -11,4 +12,6 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
(*sdk.Msg)(nil),
&MsgUpdateParams{},
)
+
+ msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
}
diff --git a/modules/apps/27-interchain-accounts/host/types/codec_test.go b/modules/apps/27-interchain-accounts/host/types/codec_test.go
new file mode 100644
index 00000000000..6fb2591cf47
--- /dev/null
+++ b/modules/apps/27-interchain-accounts/host/types/codec_test.go
@@ -0,0 +1,49 @@
+package types_test
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
+
+ ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts"
+ "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"
+)
+
+func TestCodecTypeRegistration(t *testing.T) {
+ testCases := []struct {
+ name string
+ typeURL string
+ expPass bool
+ }{
+ {
+ "success: MsgUpdateParams",
+ sdk.MsgTypeURL(&types.MsgUpdateParams{}),
+ true,
+ },
+ {
+ "type not registered on codec",
+ "ibc.invalid.MsgTypeURL",
+ false,
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ t.Run(tc.name, func(t *testing.T) {
+ encodingCfg := moduletestutil.MakeTestEncodingConfig(ica.AppModuleBasic{})
+ msg, err := encodingCfg.Codec.InterfaceRegistry().Resolve(tc.typeURL)
+
+ if tc.expPass {
+ require.NotNil(t, msg)
+ require.NoError(t, err)
+ } else {
+ require.Nil(t, msg)
+ require.Error(t, err)
+ }
+ })
+ }
+}
diff --git a/modules/apps/27-interchain-accounts/module.go b/modules/apps/27-interchain-accounts/module.go
index 0c60f84185a..436c61a1a4f 100644
--- a/modules/apps/27-interchain-accounts/module.go
+++ b/modules/apps/27-interchain-accounts/module.go
@@ -121,27 +121,6 @@ func NewAppModule(controllerKeeper *controllerkeeper.Keeper, hostKeeper *hostkee
}
}
-// InitModule will initialize the interchain accounts module. It should only be
-// called once and as an alternative to InitGenesis.
-func (am AppModule) InitModule(ctx sdk.Context, controllerParams controllertypes.Params, hostParams hosttypes.Params) {
- if am.controllerKeeper != nil {
- controllerkeeper.InitGenesis(ctx, *am.controllerKeeper, genesistypes.ControllerGenesisState{
- Params: controllerParams,
- })
- }
-
- if am.hostKeeper != nil {
- if err := hostParams.Validate(); err != nil {
- panic(fmt.Errorf("could not set ica host params at initialization: %v", err))
- }
-
- hostkeeper.InitGenesis(ctx, *am.hostKeeper, genesistypes.HostGenesisState{
- Params: hostParams,
- Port: types.HostPortID,
- })
- }
-}
-
// RegisterServices registers module services
func (am AppModule) RegisterServices(cfg module.Configurator) {
if am.controllerKeeper != nil {
diff --git a/modules/apps/27-interchain-accounts/module_test.go b/modules/apps/27-interchain-accounts/module_test.go
index 0ca5f0f55b9..a3f722af0a9 100644
--- a/modules/apps/27-interchain-accounts/module_test.go
+++ b/modules/apps/27-interchain-accounts/module_test.go
@@ -3,20 +3,9 @@ package ica_test
import (
"testing"
- dbm "github.com/cosmos/cosmos-db"
testifysuite "github.com/stretchr/testify/suite"
- "cosmossdk.io/log"
-
- "github.com/cosmos/cosmos-sdk/baseapp"
- simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
-
- ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts"
- controllertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"
- hosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"
- "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"
ibctesting "github.com/cosmos/ibc-go/v8/testing"
- "github.com/cosmos/ibc-go/v8/testing/simapp"
)
type InterchainAccountsTestSuite struct {
@@ -32,93 +21,3 @@ func TestICATestSuite(t *testing.T) {
func (suite *InterchainAccountsTestSuite) SetupTest() {
suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2)
}
-
-func (suite *InterchainAccountsTestSuite) TestInitModule() {
- // setup and basic testing
- chainID := "testchain"
- app := simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.EmptyAppOptions{}, baseapp.SetChainID(chainID))
- appModule, ok := app.ModuleManager.Modules[types.ModuleName].(ica.AppModule)
- suite.Require().True(ok)
-
- ctx := app.GetBaseApp().NewContext(true)
-
- // ensure params are not set
- suite.Require().Panics(func() {
- app.ICAControllerKeeper.GetParams(ctx)
- })
- suite.Require().Panics(func() {
- app.ICAHostKeeper.GetParams(ctx)
- })
-
- controllerParams := controllertypes.DefaultParams()
- controllerParams.ControllerEnabled = true
-
- hostParams := hosttypes.DefaultParams()
- expAllowMessages := []string{"sdk.Msg"}
- hostParams.HostEnabled = true
- hostParams.AllowMessages = expAllowMessages
- suite.Require().False(app.IBCKeeper.PortKeeper.IsBound(ctx, types.HostPortID))
-
- testCases := []struct {
- name string
- malleate func()
- expControllerPass bool
- expHostPass bool
- }{
- {
- "both controller and host set", func() {
- var ok bool
- appModule, ok = app.ModuleManager.Modules[types.ModuleName].(ica.AppModule)
- suite.Require().True(ok)
- }, true, true,
- },
- {
- "neither controller or host is set", func() {
- appModule = ica.NewAppModule(nil, nil)
- }, false, false,
- },
- {
- "only controller is set", func() {
- appModule = ica.NewAppModule(&app.ICAControllerKeeper, nil)
- }, true, false,
- },
- {
- "only host is set", func() {
- appModule = ica.NewAppModule(nil, &app.ICAHostKeeper)
- }, false, true,
- },
- }
-
- for _, tc := range testCases {
- tc := tc
-
- suite.Run(tc.name, func() {
- suite.SetupTest() // reset
-
- // reset app state
- chainID := "testchain"
- app = simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.EmptyAppOptions{}, baseapp.SetChainID(chainID))
-
- ctx := app.GetBaseApp().NewContext(true)
-
- tc.malleate()
-
- suite.Require().NotPanics(func() {
- appModule.InitModule(ctx, controllerParams, hostParams)
- })
-
- if tc.expControllerPass {
- controllerParams = app.ICAControllerKeeper.GetParams(ctx)
- suite.Require().True(controllerParams.ControllerEnabled)
- }
-
- if tc.expHostPass {
- hostParams = app.ICAHostKeeper.GetParams(ctx)
- suite.Require().True(hostParams.HostEnabled)
- suite.Require().Equal(expAllowMessages, hostParams.AllowMessages)
-
- suite.Require().True(app.IBCKeeper.PortKeeper.IsBound(ctx, types.HostPortID))
- }
- })
- }
-}
diff --git a/modules/apps/27-interchain-accounts/types/account_test.go b/modules/apps/27-interchain-accounts/types/account_test.go
index 2130a46edf4..9ff7dc19841 100644
--- a/modules/apps/27-interchain-accounts/types/account_test.go
+++ b/modules/apps/27-interchain-accounts/types/account_test.go
@@ -79,7 +79,7 @@ func (suite *TypesTestSuite) TestValidateAccountAddress() {
},
{
"address is too long",
- ibctesting.LongString,
+ ibctesting.GenerateString(uint(types.DefaultMaxAddrLength) + 1),
false,
},
}
diff --git a/modules/apps/27-interchain-accounts/types/codec.go b/modules/apps/27-interchain-accounts/types/codec.go
index 6823b30d07c..ddb092ce030 100644
--- a/modules/apps/27-interchain-accounts/types/codec.go
+++ b/modules/apps/27-interchain-accounts/types/codec.go
@@ -84,7 +84,7 @@ func DeserializeCosmosTx(cdc codec.Codec, data []byte, encoding string) ([]sdk.M
switch encoding {
case EncodingProtobuf:
if err := cdc.Unmarshal(data, &cosmosTx); err != nil {
- return nil, errorsmod.Wrapf(err, "cannot unmarshal CosmosTx with protobuf")
+ return nil, errorsmod.Wrapf(ErrUnknownDataType, "cannot unmarshal CosmosTx with protobuf: %v", err)
}
case EncodingProto3JSON:
if err := cdc.UnmarshalJSON(data, &cosmosTx); err != nil {
diff --git a/modules/apps/27-interchain-accounts/types/expected_keepers.go b/modules/apps/27-interchain-accounts/types/expected_keepers.go
index 3f8d542e891..09cf6c22024 100644
--- a/modules/apps/27-interchain-accounts/types/expected_keepers.go
+++ b/modules/apps/27-interchain-accounts/types/expected_keepers.go
@@ -4,6 +4,7 @@ import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
+ paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
@@ -32,3 +33,8 @@ type PortKeeper interface {
BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability
IsBound(ctx sdk.Context, portID string) bool
}
+
+// ParamSubspace defines the expected Subspace interface for module parameters.
+type ParamSubspace interface {
+ GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet)
+}
diff --git a/modules/apps/29-fee/module.go b/modules/apps/29-fee/module.go
index ef411ca432f..c627d82ec61 100644
--- a/modules/apps/29-fee/module.go
+++ b/modules/apps/29-fee/module.go
@@ -48,7 +48,9 @@ func (AppModule) IsOnePerModuleType() {}
func (AppModule) IsAppModule() {}
// RegisterLegacyAminoCodec implements AppModuleBasic interface
-func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {}
+func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
+ types.RegisterLegacyAminoCodec(cdc)
+}
// RegisterInterfaces registers module concrete types into protobuf Any.
func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {
diff --git a/modules/apps/29-fee/types/codec.go b/modules/apps/29-fee/types/codec.go
index 5d4dfbbcbd5..4ac59323f1e 100644
--- a/modules/apps/29-fee/types/codec.go
+++ b/modules/apps/29-fee/types/codec.go
@@ -2,6 +2,7 @@ package types
import (
"github.com/cosmos/cosmos-sdk/codec"
+ "github.com/cosmos/cosmos-sdk/codec/legacy"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/msgservice"
@@ -10,10 +11,10 @@ import (
// RegisterLegacyAminoCodec registers the necessary x/ibc 29-fee interfaces and concrete types
// on the provided LegacyAmino codec. These types are used for Amino JSON serialization.
func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
- cdc.RegisterConcrete(&MsgPayPacketFee{}, "cosmos-sdk/MsgPayPacketFee", nil)
- cdc.RegisterConcrete(&MsgPayPacketFeeAsync{}, "cosmos-sdk/MsgPayPacketFeeAsync", nil)
- cdc.RegisterConcrete(&MsgRegisterPayee{}, "cosmos-sdk/MsgRegisterPayee", nil)
- cdc.RegisterConcrete(&MsgRegisterCounterpartyPayee{}, "cosmos-sdk/MsgRegisterCounterpartyPayee", nil)
+ legacy.RegisterAminoMsg(cdc, &MsgPayPacketFee{}, "cosmos-sdk/MsgPayPacketFee")
+ legacy.RegisterAminoMsg(cdc, &MsgPayPacketFeeAsync{}, "cosmos-sdk/MsgPayPacketFeeAsync")
+ legacy.RegisterAminoMsg(cdc, &MsgRegisterPayee{}, "cosmos-sdk/MsgRegisterPayee")
+ legacy.RegisterAminoMsg(cdc, &MsgRegisterCounterpartyPayee{}, "cosmos-sdk/MsgRegisterCounterpartyPayee")
}
// RegisterInterfaces register the 29-fee module interfaces to protobuf
@@ -30,18 +31,9 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
}
-var (
- amino = codec.NewLegacyAmino()
-
- // ModuleCdc references the global x/ibc 29-fee module codec. Note, the codec
- // should ONLY be used in certain instances of tests and for JSON encoding.
- //
- // The actual codec used for serialization should be provided to x/ibc 29-fee and
- // defined at the application level.
- ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
-)
-
-func init() {
- RegisterLegacyAminoCodec(amino)
- amino.Seal()
-}
+// ModuleCdc references the global x/ibc 29-fee module codec. Note, the codec
+// should ONLY be used in certain instances of tests and for JSON encoding.
+//
+// The actual codec used for serialization should be provided to x/ibc 29-fee and
+// defined at the application level.
+var ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
diff --git a/modules/apps/29-fee/types/codec_test.go b/modules/apps/29-fee/types/codec_test.go
new file mode 100644
index 00000000000..a6ce0edb292
--- /dev/null
+++ b/modules/apps/29-fee/types/codec_test.go
@@ -0,0 +1,64 @@
+package types_test
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
+
+ fee "github.com/cosmos/ibc-go/v8/modules/apps/29-fee"
+ "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"
+)
+
+func TestCodecTypeRegistration(t *testing.T) {
+ testCases := []struct {
+ name string
+ typeURL string
+ expPass bool
+ }{
+ {
+ "success: MsgPayPacketFee",
+ sdk.MsgTypeURL(&types.MsgPayPacketFee{}),
+ true,
+ },
+ {
+ "success: MsgPayPacketFeeAsync",
+ sdk.MsgTypeURL(&types.MsgPayPacketFeeAsync{}),
+ true,
+ },
+ {
+ "success: MsgRegisterPayee",
+ sdk.MsgTypeURL(&types.MsgRegisterPayee{}),
+ true,
+ },
+ {
+ "success: MsgRegisterCounterpartyPayee",
+ sdk.MsgTypeURL(&types.MsgRegisterCounterpartyPayee{}),
+ true,
+ },
+ {
+ "type not registered on codec",
+ "ibc.invalid.MsgTypeURL",
+ false,
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ t.Run(tc.name, func(t *testing.T) {
+ encodingCfg := moduletestutil.MakeTestEncodingConfig(fee.AppModuleBasic{})
+ msg, err := encodingCfg.Codec.InterfaceRegistry().Resolve(tc.typeURL)
+
+ if tc.expPass {
+ require.NotNil(t, msg)
+ require.NoError(t, err)
+ } else {
+ require.Nil(t, msg)
+ require.Error(t, err)
+ }
+ })
+ }
+}
diff --git a/modules/apps/29-fee/types/msgs.go b/modules/apps/29-fee/types/msgs.go
index 095d36a604d..af2a9287a65 100644
--- a/modules/apps/29-fee/types/msgs.go
+++ b/modules/apps/29-fee/types/msgs.go
@@ -12,6 +12,8 @@ import (
ibcerrors "github.com/cosmos/ibc-go/v8/modules/core/errors"
)
+const MaximumCounterpartyPayeeLength = 2048 // maximum length of the counterparty payee in bytes (value chosen arbitrarily)
+
var (
_ sdk.Msg = (*MsgRegisterPayee)(nil)
_ sdk.Msg = (*MsgRegisterCounterpartyPayee)(nil)
@@ -100,6 +102,10 @@ func (msg MsgRegisterCounterpartyPayee) ValidateBasic() error {
return ErrCounterpartyPayeeEmpty
}
+ if len(msg.CounterpartyPayee) > MaximumCounterpartyPayeeLength {
+ return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "counterparty payee address must not exceed %d bytes", MaximumCounterpartyPayeeLength)
+ }
+
return nil
}
diff --git a/modules/apps/29-fee/types/msgs_test.go b/modules/apps/29-fee/types/msgs_test.go
index 4c59160cb1e..6f1d2bce4eb 100644
--- a/modules/apps/29-fee/types/msgs_test.go
+++ b/modules/apps/29-fee/types/msgs_test.go
@@ -139,6 +139,13 @@ func TestMsgRegisterCountepartyPayeeValidation(t *testing.T) {
},
false,
},
+ {
+ "invalid counterparty payee address: too long",
+ func() {
+ msg.CounterpartyPayee = ibctesting.GenerateString(types.MaximumCounterpartyPayeeLength + 1)
+ },
+ false,
+ },
}
for i, tc := range testCases {
diff --git a/modules/apps/29-fee/types/tx.pb.go b/modules/apps/29-fee/types/tx.pb.go
index ab62f474390..5edfa58d14d 100644
--- a/modules/apps/29-fee/types/tx.pb.go
+++ b/modules/apps/29-fee/types/tx.pb.go
@@ -374,51 +374,51 @@ func init() {
func init() { proto.RegisterFile("ibc/applications/fee/v1/tx.proto", fileDescriptor_05c93128649f1b96) }
var fileDescriptor_05c93128649f1b96 = []byte{
- // 695 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xd3, 0x40,
- 0x10, 0x8e, 0x9b, 0xfe, 0x65, 0x5a, 0x28, 0xb1, 0x2a, 0x92, 0x9a, 0x36, 0x2d, 0x56, 0x05, 0x25,
- 0x52, 0xec, 0x26, 0x50, 0x01, 0x11, 0x48, 0xd0, 0x4a, 0x45, 0x3d, 0x54, 0x44, 0x39, 0x72, 0xa9,
- 0x1c, 0x67, 0xea, 0x9a, 0xc6, 0x5e, 0xcb, 0xeb, 0x44, 0xf8, 0x86, 0x38, 0x21, 0x4e, 0xf0, 0x06,
- 0x3c, 0x00, 0x87, 0x3e, 0x46, 0x8f, 0x3d, 0x22, 0x24, 0x10, 0x6a, 0x0f, 0x7d, 0x03, 0x6e, 0x48,
- 0x68, 0xd7, 0x6b, 0xcb, 0x4d, 0x9a, 0x2a, 0x20, 0x71, 0xb1, 0x3c, 0x33, 0xdf, 0x7e, 0x33, 0xdf,
- 0xa7, 0x1d, 0x2d, 0xac, 0xd8, 0x2d, 0x53, 0x37, 0x3c, 0xaf, 0x63, 0x9b, 0x46, 0x60, 0x13, 0x97,
- 0xea, 0xfb, 0x88, 0x7a, 0xaf, 0xaa, 0x07, 0x6f, 0x34, 0xcf, 0x27, 0x01, 0x91, 0x0b, 0x76, 0xcb,
- 0xd4, 0xd2, 0x08, 0x6d, 0x1f, 0x51, 0xeb, 0x55, 0x95, 0xbc, 0xe1, 0xd8, 0x2e, 0xd1, 0xf9, 0x37,
- 0xc2, 0x2a, 0xf3, 0x16, 0xb1, 0x08, 0xff, 0xd5, 0xd9, 0x9f, 0xc8, 0xde, 0x1e, 0xd6, 0x83, 0x11,
- 0xa5, 0x20, 0x26, 0xf1, 0x51, 0x37, 0x0f, 0x0c, 0xd7, 0xc5, 0x0e, 0x2b, 0x8b, 0x5f, 0x01, 0x29,
- 0x98, 0x84, 0x3a, 0x84, 0xea, 0x0e, 0xb5, 0x58, 0xd1, 0xa1, 0x56, 0x54, 0x50, 0xbf, 0x48, 0x70,
- 0x63, 0x97, 0x5a, 0x4d, 0xb4, 0x6c, 0x1a, 0xa0, 0xdf, 0x30, 0x42, 0x44, 0xb9, 0x00, 0x53, 0x1e,
- 0xf1, 0x83, 0x3d, 0xbb, 0x5d, 0x94, 0x56, 0xa4, 0xb5, 0x5c, 0x73, 0x92, 0x85, 0x3b, 0x6d, 0x79,
- 0x09, 0x40, 0xf0, 0xb2, 0xda, 0x18, 0xaf, 0xe5, 0x44, 0x66, 0xa7, 0x2d, 0x17, 0x61, 0xca, 0xc7,
- 0x8e, 0x11, 0xa2, 0x5f, 0xcc, 0xf2, 0x5a, 0x1c, 0xca, 0xf3, 0x30, 0xe1, 0x31, 0xea, 0xe2, 0x38,
- 0xcf, 0x47, 0x41, 0x7d, 0xfd, 0xfd, 0xe7, 0xe5, 0xcc, 0xbb, 0xf3, 0xa3, 0x72, 0x8c, 0xfb, 0x70,
- 0x7e, 0x54, 0xbe, 0x15, 0x8d, 0x5a, 0xa1, 0xed, 0x43, 0xbd, 0x7f, 0x32, 0x55, 0x81, 0x62, 0x7f,
- 0xae, 0x89, 0xd4, 0x23, 0x2e, 0x45, 0xf5, 0xbb, 0x04, 0x8b, 0xa9, 0xe2, 0x16, 0xe9, 0xba, 0x01,
- 0xfa, 0x9e, 0xe1, 0x07, 0xe1, 0xff, 0x92, 0x55, 0x01, 0xd9, 0x4c, 0xb5, 0xd9, 0x4b, 0x6b, 0xcc,
- 0x9b, 0xfd, 0x03, 0xd4, 0x9f, 0x5c, 0xa6, 0xf7, 0xee, 0xe5, 0x7a, 0x07, 0xc6, 0x57, 0xef, 0xc0,
- 0xea, 0x55, 0xf5, 0xc4, 0x87, 0xdf, 0x12, 0xcc, 0xed, 0x52, 0xab, 0x61, 0x84, 0x0d, 0xc3, 0x3c,
- 0xc4, 0x60, 0x1b, 0x51, 0x7e, 0x00, 0xd9, 0x7d, 0x44, 0x2e, 0x7b, 0xa6, 0xb6, 0xa8, 0x0d, 0xb9,
- 0x95, 0xda, 0x36, 0xe2, 0xe6, 0xf8, 0xf1, 0x8f, 0xe5, 0x4c, 0x93, 0xc1, 0xe5, 0x55, 0xb8, 0x4e,
- 0x49, 0xd7, 0x37, 0x71, 0x2f, 0xf6, 0x2d, 0xf2, 0x66, 0x36, 0xca, 0x36, 0x22, 0xf7, 0xca, 0x90,
- 0x17, 0xa8, 0x94, 0x89, 0x91, 0x51, 0x73, 0x51, 0x61, 0x2b, 0xb1, 0xf2, 0x26, 0x4c, 0x52, 0xdb,
- 0x72, 0xd1, 0x17, 0x26, 0x89, 0x48, 0x56, 0x60, 0x5a, 0x58, 0x42, 0x8b, 0x13, 0x2b, 0xd9, 0xb5,
- 0x5c, 0x33, 0x89, 0xeb, 0x5a, 0xec, 0x9a, 0x00, 0x33, 0xd3, 0x94, 0x8b, 0xa6, 0xa5, 0xb5, 0xaa,
- 0x0b, 0x50, 0xe8, 0x4b, 0x25, 0xd6, 0x7c, 0x93, 0x60, 0xbe, 0xaf, 0xf6, 0x9c, 0x86, 0xae, 0x29,
- 0x3f, 0x83, 0x9c, 0xc7, 0x33, 0xf1, 0xe5, 0x98, 0xa9, 0x2d, 0x71, 0x97, 0xd8, 0x5a, 0x69, 0xf1,
- 0x2e, 0xf5, 0xaa, 0x5a, 0x74, 0x6e, 0xa7, 0x2d, 0x6c, 0x9a, 0xf6, 0x44, 0x2c, 0xbf, 0x00, 0x10,
- 0x0c, 0xcc, 0xe8, 0x31, 0x4e, 0xa1, 0x0e, 0x35, 0x3a, 0x69, 0x2f, 0x78, 0x44, 0xf7, 0x6d, 0xc4,
- 0xfa, 0xc3, 0x58, 0x6e, 0x8a, 0x8f, 0x49, 0x5e, 0x1e, 0x2e, 0x99, 0x6b, 0x50, 0x4b, 0xfc, 0xfa,
- 0x0f, 0xe4, 0x63, 0xf1, 0xb5, 0x5f, 0x59, 0xc8, 0xee, 0x52, 0x4b, 0x76, 0xe0, 0xda, 0xc5, 0x75,
- 0xbf, 0x37, 0x74, 0xcc, 0xfe, 0x5d, 0x53, 0xaa, 0x23, 0x43, 0xe3, 0xb6, 0xf2, 0x27, 0x09, 0x16,
- 0x86, 0xef, 0xe4, 0xc6, 0x28, 0x84, 0x03, 0xc7, 0x94, 0xa7, 0xff, 0x74, 0x2c, 0x99, 0xe9, 0x35,
- 0xcc, 0x5e, 0x58, 0x8f, 0xb5, 0xab, 0xe8, 0xd2, 0x48, 0x65, 0x7d, 0x54, 0x64, 0xd2, 0x2b, 0x84,
- 0xfc, 0xe0, 0x7d, 0xab, 0x8c, 0x4a, 0xc3, 0xe1, 0xca, 0xc6, 0x5f, 0xc1, 0xe3, 0xd6, 0xca, 0xc4,
- 0xdb, 0xf3, 0xa3, 0xb2, 0xb4, 0xf9, 0xf2, 0xf8, 0xb4, 0x24, 0x9d, 0x9c, 0x96, 0xa4, 0x9f, 0xa7,
- 0x25, 0xe9, 0xe3, 0x59, 0x29, 0x73, 0x72, 0x56, 0xca, 0x7c, 0x3d, 0x2b, 0x65, 0x5e, 0x6d, 0x58,
- 0x76, 0x70, 0xd0, 0x6d, 0x69, 0x26, 0x71, 0x74, 0xf1, 0x42, 0xd8, 0x2d, 0xb3, 0x62, 0x11, 0xbd,
- 0xf7, 0x48, 0x77, 0x48, 0xbb, 0xdb, 0x41, 0xca, 0x1e, 0x1f, 0xaa, 0xd7, 0x1e, 0x57, 0xd8, 0xbb,
- 0x13, 0x84, 0x1e, 0xd2, 0xd6, 0x24, 0x7f, 0x3b, 0xee, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xa0,
- 0xae, 0xb3, 0x04, 0x00, 0x07, 0x00, 0x00,
+ // 699 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xbf, 0x6f, 0xd3, 0x40,
+ 0x14, 0x8e, 0x1b, 0xfa, 0x23, 0xaf, 0x85, 0x12, 0xab, 0x22, 0xa9, 0x69, 0xd3, 0x62, 0x55, 0x50,
+ 0x22, 0xc5, 0x6e, 0x82, 0x2a, 0x68, 0x04, 0x03, 0xad, 0xa8, 0x54, 0x89, 0x8a, 0x28, 0x23, 0x4b,
+ 0xe5, 0x38, 0xaf, 0xae, 0x69, 0xec, 0xb3, 0x7c, 0x4e, 0x84, 0x37, 0xd4, 0x09, 0x31, 0xc1, 0x7f,
+ 0xc0, 0xc8, 0xc0, 0xd0, 0x3f, 0xa3, 0x63, 0x47, 0x16, 0x10, 0x6a, 0x91, 0xfa, 0x1f, 0x30, 0xa3,
+ 0x3b, 0x9f, 0x2d, 0x37, 0x69, 0xaa, 0x80, 0xc4, 0x62, 0xf9, 0xde, 0xf7, 0xdd, 0x77, 0xef, 0xfb,
+ 0x74, 0x4f, 0x07, 0xcb, 0x76, 0xcb, 0xd4, 0x0d, 0xcf, 0xeb, 0xd8, 0xa6, 0x11, 0xd8, 0xc4, 0xa5,
+ 0xfa, 0x3e, 0xa2, 0xde, 0xab, 0xea, 0xc1, 0x5b, 0xcd, 0xf3, 0x49, 0x40, 0xe4, 0x82, 0xdd, 0x32,
+ 0xb5, 0x34, 0x43, 0xdb, 0x47, 0xd4, 0x7a, 0x55, 0x25, 0x6f, 0x38, 0xb6, 0x4b, 0x74, 0xfe, 0x8d,
+ 0xb8, 0xca, 0x9c, 0x45, 0x2c, 0xc2, 0x7f, 0x75, 0xf6, 0x27, 0xaa, 0xf7, 0x86, 0x9d, 0xc1, 0x84,
+ 0x52, 0x14, 0x93, 0xf8, 0xa8, 0x9b, 0x07, 0x86, 0xeb, 0x62, 0x87, 0xc1, 0xe2, 0x57, 0x50, 0x0a,
+ 0x26, 0xa1, 0x0e, 0xa1, 0xba, 0x43, 0x2d, 0x06, 0x3a, 0xd4, 0x8a, 0x00, 0xf5, 0xab, 0x04, 0xb7,
+ 0x77, 0xa9, 0xd5, 0x44, 0xcb, 0xa6, 0x01, 0xfa, 0x0d, 0x23, 0x44, 0x94, 0x0b, 0x30, 0xe9, 0x11,
+ 0x3f, 0xd8, 0xb3, 0xdb, 0x45, 0x69, 0x59, 0x5a, 0xcd, 0x35, 0x27, 0xd8, 0x72, 0xa7, 0x2d, 0x2f,
+ 0x02, 0x08, 0x5d, 0x86, 0x8d, 0x71, 0x2c, 0x27, 0x2a, 0x3b, 0x6d, 0xb9, 0x08, 0x93, 0x3e, 0x76,
+ 0x8c, 0x10, 0xfd, 0x62, 0x96, 0x63, 0xf1, 0x52, 0x9e, 0x83, 0x71, 0x8f, 0x49, 0x17, 0x6f, 0xf0,
+ 0x7a, 0xb4, 0xa8, 0xaf, 0xbd, 0xff, 0xbc, 0x94, 0x39, 0xba, 0x38, 0x2e, 0xc7, 0xbc, 0x0f, 0x17,
+ 0xc7, 0xe5, 0xbb, 0x51, 0xab, 0x15, 0xda, 0x3e, 0xd4, 0xfb, 0x3b, 0x53, 0x15, 0x28, 0xf6, 0xd7,
+ 0x9a, 0x48, 0x3d, 0xe2, 0x52, 0x54, 0xbf, 0x4b, 0xb0, 0x90, 0x02, 0xb7, 0x48, 0xd7, 0x0d, 0xd0,
+ 0xf7, 0x0c, 0x3f, 0x08, 0xff, 0x97, 0xad, 0x0a, 0xc8, 0x66, 0xea, 0x98, 0xbd, 0xb4, 0xc7, 0xbc,
+ 0xd9, 0xdf, 0x40, 0xfd, 0xe9, 0x55, 0x7e, 0x1f, 0x5c, 0xed, 0x77, 0xa0, 0x7d, 0xf5, 0x3e, 0xac,
+ 0x5c, 0x87, 0x27, 0x39, 0x1c, 0x8d, 0xc1, 0xec, 0x2e, 0xb5, 0x1a, 0x46, 0xd8, 0x30, 0xcc, 0x43,
+ 0x0c, 0xb6, 0x11, 0xe5, 0x0d, 0xc8, 0xee, 0x23, 0x72, 0xdb, 0xd3, 0xb5, 0x05, 0x6d, 0xc8, 0xad,
+ 0xd4, 0xb6, 0x11, 0x37, 0x73, 0x27, 0x3f, 0x96, 0x32, 0x5f, 0x2e, 0x8e, 0xcb, 0x52, 0x93, 0xed,
+ 0x91, 0x57, 0xe0, 0x16, 0x25, 0x5d, 0xdf, 0xc4, 0xbd, 0x38, 0xbc, 0x28, 0xa0, 0x99, 0xa8, 0xda,
+ 0x88, 0x22, 0x2c, 0x43, 0x5e, 0xb0, 0x52, 0x49, 0x46, 0x69, 0xcd, 0x46, 0xc0, 0x56, 0x92, 0xe7,
+ 0x1d, 0x98, 0xa0, 0xb6, 0xe5, 0xa2, 0x2f, 0x92, 0x12, 0x2b, 0x59, 0x81, 0x29, 0x91, 0x0b, 0x2d,
+ 0x8e, 0x2f, 0x67, 0x57, 0x73, 0xcd, 0x64, 0x5d, 0xd7, 0xe2, 0xe8, 0x04, 0x99, 0x25, 0xa7, 0x5c,
+ 0x4e, 0x2e, 0x6d, 0x58, 0x9d, 0x87, 0x42, 0x5f, 0x29, 0xc9, 0xe7, 0x97, 0x04, 0x73, 0x7d, 0xd8,
+ 0x73, 0x1a, 0xba, 0xa6, 0xfc, 0x02, 0x72, 0x1e, 0xaf, 0xc4, 0x37, 0x64, 0xba, 0xb6, 0xc8, 0xa3,
+ 0x62, 0xb3, 0xa5, 0xc5, 0x03, 0xd5, 0xab, 0x6a, 0xd1, 0xbe, 0x9d, 0x76, 0x3a, 0xab, 0x29, 0x4f,
+ 0x14, 0xe5, 0x97, 0x00, 0x42, 0x86, 0x45, 0x3e, 0xc6, 0x75, 0xd4, 0xa1, 0x91, 0x27, 0x3d, 0xa4,
+ 0xc5, 0x44, 0x1f, 0xdb, 0x88, 0xf5, 0xc7, 0xb1, 0xf1, 0x94, 0x28, 0x33, 0xbf, 0x34, 0xdc, 0x3c,
+ 0x77, 0xa3, 0x96, 0xf8, 0x34, 0x0c, 0xd4, 0xe3, 0x18, 0x6a, 0xbf, 0xb3, 0x90, 0xdd, 0xa5, 0x96,
+ 0xec, 0xc0, 0xcd, 0xcb, 0xd3, 0xff, 0x70, 0x68, 0xaf, 0xfd, 0xa3, 0xa7, 0x54, 0x47, 0xa6, 0xc6,
+ 0xc7, 0xca, 0x9f, 0x24, 0x98, 0x1f, 0x3e, 0xa2, 0xeb, 0xa3, 0x08, 0x0e, 0x6c, 0x53, 0x9e, 0xfd,
+ 0xd3, 0xb6, 0xa4, 0xa7, 0x37, 0x30, 0x73, 0x69, 0x5a, 0x56, 0xaf, 0x93, 0x4b, 0x33, 0x95, 0xb5,
+ 0x51, 0x99, 0xc9, 0x59, 0x21, 0xe4, 0x07, 0x6f, 0x5e, 0x65, 0x54, 0x19, 0x4e, 0x57, 0xd6, 0xff,
+ 0x8a, 0x1e, 0x1f, 0xad, 0x8c, 0xbf, 0x63, 0x97, 0x6b, 0xf3, 0xd5, 0xc9, 0x59, 0x49, 0x3a, 0x3d,
+ 0x2b, 0x49, 0x3f, 0xcf, 0x4a, 0xd2, 0xc7, 0xf3, 0x52, 0xe6, 0xf4, 0xbc, 0x94, 0xf9, 0x76, 0x5e,
+ 0xca, 0xbc, 0x5e, 0xb7, 0xec, 0xe0, 0xa0, 0xdb, 0xd2, 0x4c, 0xe2, 0xe8, 0xe2, 0xc1, 0xb0, 0x5b,
+ 0x66, 0xc5, 0x22, 0x7a, 0xef, 0x89, 0xee, 0x90, 0x76, 0xb7, 0x83, 0x94, 0xbd, 0x45, 0x54, 0xaf,
+ 0x6d, 0x54, 0xd8, 0x33, 0x14, 0x84, 0x1e, 0xd2, 0xd6, 0x04, 0x7f, 0x4a, 0x1e, 0xfd, 0x09, 0x00,
+ 0x00, 0xff, 0xff, 0xb7, 0x92, 0x13, 0xd2, 0x0f, 0x07, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
diff --git a/modules/apps/callbacks/go.mod b/modules/apps/callbacks/go.mod
index 390541db041..ab378c6cbcd 100644
--- a/modules/apps/callbacks/go.mod
+++ b/modules/apps/callbacks/go.mod
@@ -9,36 +9,36 @@ replace github.com/cosmos/ibc-go/v8 => ../../../
replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
require (
- cosmossdk.io/api v0.7.1
- cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508
+ cosmossdk.io/api v0.7.2
+ cosmossdk.io/client/v2 v2.0.0-beta.1
cosmossdk.io/core v0.11.0
cosmossdk.io/errors v1.0.0
cosmossdk.io/log v1.2.1
- cosmossdk.io/math v1.1.2
- cosmossdk.io/store v1.0.0-rc.0
- cosmossdk.io/tools/confix v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508
- cosmossdk.io/x/tx v0.10.0
- cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d
+ cosmossdk.io/math v1.2.0
+ cosmossdk.io/store v1.0.0
+ cosmossdk.io/tools/confix v0.1.0
+ cosmossdk.io/x/circuit v0.1.0
+ cosmossdk.io/x/evidence v0.1.0
+ cosmossdk.io/x/feegrant v0.1.0
+ cosmossdk.io/x/tx v0.12.0
+ cosmossdk.io/x/upgrade v0.1.0
github.com/cometbft/cometbft v0.38.0
github.com/cosmos/cosmos-db v1.0.0
- github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d
+ github.com/cosmos/cosmos-sdk v0.50.1
github.com/cosmos/gogoproto v1.4.11
- github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5
+ github.com/cosmos/ibc-go/modules/capability v1.0.0
github.com/cosmos/ibc-go/v8 v8.0.0
github.com/spf13/cast v1.5.1
- github.com/spf13/cobra v1.7.0
- github.com/spf13/viper v1.16.0
+ github.com/spf13/cobra v1.8.0
+ github.com/spf13/viper v1.17.0
github.com/stretchr/testify v1.8.4
)
require (
- cloud.google.com/go v0.110.6 // indirect
- cloud.google.com/go/compute v1.23.0 // indirect
+ cloud.google.com/go v0.110.8 // indirect
+ cloud.google.com/go/compute v1.23.1 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- cloud.google.com/go/iam v1.1.1 // indirect
+ cloud.google.com/go/iam v1.1.3 // indirect
cloud.google.com/go/storage v1.30.1 // indirect
cosmossdk.io/collections v0.4.0 // indirect
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
@@ -59,7 +59,7 @@ require (
github.com/cockroachdb/apd/v2 v2.0.2 // indirect
github.com/cockroachdb/errors v1.11.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
- github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 // indirect
+ github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cometbft/cometbft-db v0.8.0 // indirect
@@ -67,13 +67,13 @@ require (
github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
- github.com/cosmos/iavl v1.0.0-rc.1 // indirect
+ github.com/cosmos/iavl v1.0.0 // indirect
github.com/cosmos/ics23/go v0.10.0 // indirect
- github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect
+ github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect
github.com/creachadair/atomicfile v0.3.1 // indirect
github.com/creachadair/tomledit v0.0.24 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
@@ -81,31 +81,31 @@ require (
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
- github.com/emicklei/dot v1.5.0 // indirect
+ github.com/emicklei/dot v1.6.0 // indirect
github.com/fatih/color v1.15.0 // indirect
- github.com/felixge/httpsnoop v1.0.2 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
- github.com/getsentry/sentry-go v0.23.0 // indirect
+ github.com/getsentry/sentry-go v0.25.0 // indirect
github.com/go-kit/kit v0.12.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/glog v1.1.0 // indirect
+ github.com/golang/glog v1.1.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
- github.com/google/go-cmp v0.5.9 // indirect
+ github.com/google/go-cmp v0.6.0 // indirect
github.com/google/orderedcode v0.0.1 // indirect
- github.com/google/s2a-go v0.1.4 // indirect
- github.com/google/uuid v1.3.0 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
- github.com/googleapis/gax-go/v2 v2.11.0 // indirect
- github.com/gorilla/handlers v1.5.1 // indirect
- github.com/gorilla/mux v1.8.0 // indirect
+ github.com/google/s2a-go v0.1.7 // indirect
+ github.com/google/uuid v1.3.1 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.0 // indirect
+ github.com/gorilla/handlers v1.5.2 // indirect
+ github.com/gorilla/mux v1.8.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
@@ -115,7 +115,7 @@ require (
github.com/hashicorp/go-hclog v1.5.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-metrics v0.5.1 // indirect
- github.com/hashicorp/go-plugin v1.4.10 // indirect
+ github.com/hashicorp/go-plugin v1.5.2 // indirect
github.com/hashicorp/go-safetemp v1.0.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
@@ -128,70 +128,73 @@ require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
- github.com/klauspost/compress v1.16.7 // indirect
+ github.com/klauspost/compress v1.17.2 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lib/pq v1.10.7 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
- github.com/linxGnu/grocksdb v1.8.0 // indirect
+ github.com/linxGnu/grocksdb v1.8.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/manifoldco/promptui v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/minio/highwayhash v1.0.2 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mtibben/percent v0.2.1 // indirect
- github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce // indirect
+ github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect
github.com/oklog/run v1.1.0 // indirect
- github.com/pelletier/go-toml/v2 v2.0.9 // indirect
- github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect
+ github.com/pelletier/go-toml/v2 v2.1.0 // indirect
+ github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/prometheus/client_golang v1.16.0 // indirect
- github.com/prometheus/client_model v0.4.0 // indirect
- github.com/prometheus/common v0.44.0 // indirect
- github.com/prometheus/procfs v0.11.1 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.17.0 // indirect
+ github.com/prometheus/client_model v0.5.0 // indirect
+ github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/rs/cors v1.8.3 // indirect
- github.com/rs/zerolog v1.30.0 // indirect
+ github.com/rs/zerolog v1.31.0 // indirect
+ github.com/sagikazarmark/locafero v0.3.0 // indirect
+ github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sasha-s/go-deadlock v0.3.1 // indirect
- github.com/spf13/afero v1.9.5 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
+ github.com/sourcegraph/conc v0.3.0 // indirect
+ github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
github.com/tendermint/go-amino v0.16.0 // indirect
- github.com/tidwall/btree v1.6.0 // indirect
+ github.com/tidwall/btree v1.7.0 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
- github.com/zondax/hid v0.9.1 // indirect
- github.com/zondax/ledger-go v0.14.1 // indirect
+ github.com/zondax/hid v0.9.2 // indirect
+ github.com/zondax/ledger-go v0.14.3 // indirect
go.etcd.io/bbolt v1.3.7 // indirect
go.opencensus.io v0.24.0 // indirect
- golang.org/x/crypto v0.13.0 // indirect
- golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
- golang.org/x/net v0.15.0 // indirect
- golang.org/x/oauth2 v0.10.0 // indirect
- golang.org/x/sync v0.3.0 // indirect
- golang.org/x/sys v0.12.0 // indirect
- golang.org/x/term v0.12.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ golang.org/x/crypto v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+ golang.org/x/net v0.17.0 // indirect
+ golang.org/x/oauth2 v0.12.0 // indirect
+ golang.org/x/sync v0.5.0 // indirect
+ golang.org/x/sys v0.13.0 // indirect
+ golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
- google.golang.org/api v0.126.0 // indirect
+ google.golang.org/api v0.143.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect
- google.golang.org/grpc v1.58.2 // indirect
+ google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
+ google.golang.org/grpc v1.59.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- gotest.tools/v3 v3.5.0 // indirect
+ gotest.tools/v3 v3.5.1 // indirect
nhooyr.io/websocket v1.8.6 // indirect
pgregory.net/rapid v1.1.0 // indirect
- sigs.k8s.io/yaml v1.3.0 // indirect
+ sigs.k8s.io/yaml v1.4.0 // indirect
)
diff --git a/modules/apps/callbacks/go.sum b/modules/apps/callbacks/go.sum
index 0d6a345c083..51df9949de6 100644
--- a/modules/apps/callbacks/go.sum
+++ b/modules/apps/callbacks/go.sum
@@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9
cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
-cloud.google.com/go v0.110.6 h1:8uYAkj3YHTP/1iwReuHPxLSbdcyc+dSBbzFMrVwDR6Q=
-cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
+cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME=
+cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk=
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
@@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
-cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
-cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
+cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
@@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
-cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y=
-cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
+cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc=
+cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
@@ -187,10 +187,10 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
-cosmossdk.io/api v0.7.1 h1:PNQ1xN8+/0hj/sSD0ANqjkgfXFys+bZ5L8Hg7uzoUTU=
-cosmossdk.io/api v0.7.1/go.mod h1:ure9edhcROIHsngavM6mBLilMGFnfjhV/AaYhEMUkdo=
-cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508 h1:tt5OMwdouv7dkwkWJYxb8I9h322bOxnC9RmK2qGvWMs=
-cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508/go.mod h1:iHeSk2AT6O8RNGlfcEQq6Yty6Z/6gydQsXXBh5I715Q=
+cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4=
+cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38=
+cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q=
+cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU=
cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo=
@@ -201,22 +201,22 @@ cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04=
cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0=
cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk=
cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4=
-cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM=
-cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
-cosmossdk.io/store v1.0.0-rc.0 h1:9DwOjuUYxDtYxn/REkTxGQAmxlIGfRroB35MQ8TrxF4=
-cosmossdk.io/store v1.0.0-rc.0/go.mod h1:FtBDOJmwtOZfmKKF65bKZbTYgS3bDNjjo3nP76dAegk=
-cosmossdk.io/tools/confix v0.0.0-20230818115413-c402c51a1508 h1:axKhxRa3M9QW2GdKJUsSyzo44gxcwSOTGeomtkbQClM=
-cosmossdk.io/tools/confix v0.0.0-20230818115413-c402c51a1508/go.mod h1:qcJ1zwLIMefpDHZuYSa73yBe/k5HyQ5H1Jg9PWv30Ts=
-cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508 h1:9HRBpMbGgk+W4BIp4ezYH2EjbpuVl2fBlwyJ2GZgrS0=
-cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508/go.mod h1:BhFX0kD6lkctNQO3ZGYY3p6h0/wPLVbFhrOt3uQxEIM=
-cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508 h1:R9H1lDpcPSkrLOnt6IDE38o0Wp8xE/+BAxocb0oyX4I=
-cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508/go.mod h1:yjIo3J0QKDo9CJawK1QoTA1hBx0llafVJdPqI0+ry74=
-cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508 h1:TKqjhhTfLchU8nSo1WZRgaH7xZWzYUQXVRj9CePcbaw=
-cosmossdk.io/x/feegrant v0.0.0-20230818115413-c402c51a1508/go.mod h1:kOr8Rr10RoMeGGk/pfW5yo1R7GQTGu4KdRgKphVvjz4=
-cosmossdk.io/x/tx v0.10.0 h1:LxWF/hksVDbeQmFj4voLM5ZCHyVZ1cCNIqKenfH9plc=
-cosmossdk.io/x/tx v0.10.0/go.mod h1:MKo9/b5wsoL8dd9y9pvD2yOP1CMvzHIWYxi1l2oLPFo=
-cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d h1:LH8NPa2+yoMFdCTxCFyQUX5zVDip4YDgtg7e0EecDqo=
-cosmossdk.io/x/upgrade v0.0.0-20230915171831-2196edacb99d/go.mod h1:+5jCm6Lk/CrQhQvtJFy/tmuLfhQKNMn/U0vwrRz/dxQ=
+cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig=
+cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
+cosmossdk.io/store v1.0.0 h1:6tnPgTpTSIskaTmw/4s5C9FARdgFflycIc9OX8i1tOI=
+cosmossdk.io/store v1.0.0/go.mod h1:ABMprwjvx6IpMp8l06TwuMrj6694/QP5NIW+X6jaTYc=
+cosmossdk.io/tools/confix v0.1.0 h1:2OOZTtQsDT5e7P3FM5xqM0bPfluAxZlAwxqaDmYBE+E=
+cosmossdk.io/tools/confix v0.1.0/go.mod h1:TdXKVYs4gEayav5wM+JHT+kTU2J7fozFNqoVaN+8CdY=
+cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs=
+cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w=
+cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk=
+cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw=
+cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk=
+cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU=
+cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U=
+cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0=
+cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE=
+cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
@@ -328,8 +328,8 @@ github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZ
github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 h1:M4A5LioEhkZ/s+m0g0pWgiLBQr83p0jWnQUo320Qy+A=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0/go.mod h1:EDjiaAXc0FXiRmxDzcu1wIEJ093ohHMUWxrI6iku0XA=
+github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb h1:6Po+YYKT5B5ZXN0wd2rwFBaebM0LufPf8p4zxOd48Kg=
+github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc=
github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
@@ -353,8 +353,8 @@ github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0
github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U=
github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o=
github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d h1:dBD7O1D3lxfMwKjR71ooQanLzclJ17NZMHplL6qd8ZU=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d/go.mod h1:8rNGga/Gg9/NIFvpqO4URts+8Cz/XVB0wTr5ZDm22UM=
+github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw=
+github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
@@ -362,17 +362,17 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g=
github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y=
-github.com/cosmos/iavl v1.0.0-rc.1 h1:5+73BEWW1gZOIUJKlk/1fpD4lOqqeFBA8KuV+NpkCpU=
-github.com/cosmos/iavl v1.0.0-rc.1/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
-github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5 h1:OwYsRIM2gwe3ifuvi2sriEvDBd3t43vTF2GEi1SOchM=
-github.com/cosmos/ibc-go/modules/capability v1.0.0-rc5/go.mod h1:YriReKrNl7ZKBW6FSmgV7v4BhrN84tm672YjU0Y2C2I=
+github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so=
+github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
+github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE=
+github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco=
github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM=
github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0=
-github.com/cosmos/ledger-cosmos-go v0.13.0 h1:ex0CvCxToSR7j5WjrghPu2Bu9sSXKikjnVvUryNnx4s=
-github.com/cosmos/ledger-cosmos-go v0.13.0/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI=
+github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM=
+github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creachadair/atomicfile v0.3.1 h1:yQORkHjSYySh/tv5th1dkKcn02NEW5JleB84sjt+W4Q=
github.com/creachadair/atomicfile v0.3.1/go.mod h1:mwfrkRxFKwpNAflYZzytbSwxvbK6fdGRRlp0KEQc0qU=
github.com/creachadair/tomledit v0.0.24 h1:5Xjr25R2esu1rKCbQEmjZYlrhFkDspoAbAKb6QKQDhQ=
@@ -382,8 +382,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
@@ -413,8 +414,8 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/emicklei/dot v1.5.0 h1:tc9eKdCBTgoR68vJ6OcgMtI0SdrGDwLPPVaPA6XhX50=
-github.com/emicklei/dot v1.5.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
+github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY=
+github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -430,9 +431,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
-github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
-github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
@@ -443,8 +443,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE=
-github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
+github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
@@ -503,8 +503,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
-github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
+github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
+github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -563,8 +563,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
@@ -594,17 +595,18 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
-github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
+github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
+github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ=
+github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
@@ -614,18 +616,18 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99
github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
-github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4=
-github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
+github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
+github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
-github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
+github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
+github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
-github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
@@ -658,8 +660,8 @@ github.com/hashicorp/go-metrics v0.5.1 h1:rfPwUqFU6uZXNvGl4hzjY8LEBsqFVU4si1H9/H
github.com/hashicorp/go-metrics v0.5.1/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-plugin v1.4.10 h1:xUbmA4jC6Dq163/fWcp8P3JuHilrHHMLNRxzGQJ9hNk=
-github.com/hashicorp/go-plugin v1.4.10/go.mod h1:6/1TEzT0eQznvI/gV2CM29DLSkAK/e58mUWKVsPaph0=
+github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y=
+github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
@@ -704,8 +706,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
-github.com/jhump/protoreflect v1.15.2 h1:7YppbATX94jEt9KLAc5hICx4h6Yt3SaavhQRsIUEHP0=
-github.com/jhump/protoreflect v1.15.2/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
+github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls=
+github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
@@ -735,8 +737,8 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
-github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
-github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
+github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -757,8 +759,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/linxGnu/grocksdb v1.8.0 h1:H4L/LhP7GOMf1j17oQAElHgVlbEje2h14A8Tz9cM2BE=
-github.com/linxGnu/grocksdb v1.8.0/go.mod h1:09CeBborffXhXdNpEcOeZrLKEnRtrZFEpFdPNI9Zjjg=
+github.com/linxGnu/grocksdb v1.8.4 h1:ZMsBpPpJNtRLHiKKp0mI7gW+NT4s7UgfD5xHxx1jVRo=
+github.com/linxGnu/grocksdb v1.8.4/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@@ -775,13 +777,14 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
@@ -822,8 +825,8 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce h1:/pEpMk55wH0X+E5zedGEMOdLuWmV8P4+4W3+LZaM6kg=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
@@ -832,8 +835,9 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
@@ -862,12 +866,12 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0=
-github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
+github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
+github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
@@ -879,8 +883,9 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
@@ -888,32 +893,32 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
-github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
+github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
-github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
+github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
@@ -927,12 +932,16 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo=
github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
-github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
+github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
+github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ=
+github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
@@ -948,29 +957,29 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
-github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
+github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
+github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
-github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
+github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
-github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
+github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
+github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -991,22 +1000,22 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
-github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
-github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
-github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
+github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
+github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
-github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
@@ -1020,10 +1029,10 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo=
-github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
-github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c=
-github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320=
+github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
+github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
+github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw=
+github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
@@ -1048,6 +1057,8 @@ go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
@@ -1064,10 +1075,9 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1079,8 +1089,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1107,8 +1117,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
-golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
+golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1170,8 +1180,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1197,8 +1207,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
-golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8=
-golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
+golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
+golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1213,8 +1223,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1314,13 +1324,14 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1330,7 +1341,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
@@ -1401,8 +1411,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E=
-golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
+golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
+golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1461,8 +1471,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ
google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
-google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o=
-google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
+google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA=
+google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1580,12 +1590,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw
google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@@ -1627,8 +1637,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
-google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
+google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -1679,8 +1689,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
-gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1697,6 +1707,6 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/modules/apps/callbacks/testing/simapp/app.go b/modules/apps/callbacks/testing/simapp/app.go
index 44d9153520a..56cce8c58d2 100644
--- a/modules/apps/callbacks/testing/simapp/app.go
+++ b/modules/apps/callbacks/testing/simapp/app.go
@@ -611,8 +611,8 @@ func NewSimApp(
transfer.NewAppModule(app.TransferKeeper),
ibcfee.NewAppModule(app.IBCFeeKeeper),
ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper),
- ibctm.AppModuleBasic{},
- solomachine.AppModuleBasic{},
+ ibctm.NewAppModule(),
+ solomachine.NewAppModule(),
mockModule,
)
diff --git a/modules/apps/callbacks/testing/simapp/simd/cmd/root.go b/modules/apps/callbacks/testing/simapp/simd/cmd/root.go
index 5f5b33c9888..2b214f78ea7 100644
--- a/modules/apps/callbacks/testing/simapp/simd/cmd/root.go
+++ b/modules/apps/callbacks/testing/simapp/simd/cmd/root.go
@@ -257,7 +257,7 @@ func txCommand() *cobra.Command {
authcmd.GetBroadcastCommand(),
authcmd.GetEncodeCommand(),
authcmd.GetDecodeCommand(),
- authcmd.GetAuxToFeeCommand(),
+ authcmd.GetSimulateCmd(),
)
return cmd
diff --git a/modules/apps/transfer/keeper/keeper.go b/modules/apps/transfer/keeper/keeper.go
index 782fcdb94b8..04704a1f53b 100644
--- a/modules/apps/transfer/keeper/keeper.go
+++ b/modules/apps/transfer/keeper/keeper.go
@@ -13,7 +13,6 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
- paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
tmbytes "github.com/cometbft/cometbft/libs/bytes"
@@ -28,7 +27,7 @@ import (
type Keeper struct {
storeKey storetypes.StoreKey
cdc codec.BinaryCodec
- legacySubspace paramtypes.Subspace
+ legacySubspace types.ParamSubspace
ics4Wrapper porttypes.ICS4Wrapper
channelKeeper types.ChannelKeeper
@@ -46,7 +45,7 @@ type Keeper struct {
func NewKeeper(
cdc codec.BinaryCodec,
key storetypes.StoreKey,
- legacySubspace paramtypes.Subspace,
+ legacySubspace types.ParamSubspace,
ics4Wrapper porttypes.ICS4Wrapper,
channelKeeper types.ChannelKeeper,
portKeeper types.PortKeeper,
@@ -59,10 +58,6 @@ func NewKeeper(
if addr := authKeeper.GetModuleAddress(types.ModuleName); addr == nil {
panic(errors.New("the IBC transfer module account has not been set"))
}
- // set KeyTable if it has not already been set
- if !legacySubspace.HasKeyTable() {
- legacySubspace = legacySubspace.WithKeyTable(types.ParamKeyTable())
- }
if strings.TrimSpace(authority) == "" {
panic(errors.New("authority must be non-empty"))
diff --git a/modules/apps/transfer/types/codec.go b/modules/apps/transfer/types/codec.go
index 22da424c957..aef5c464632 100644
--- a/modules/apps/transfer/types/codec.go
+++ b/modules/apps/transfer/types/codec.go
@@ -7,6 +7,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"github.com/cosmos/cosmos-sdk/codec"
+ "github.com/cosmos/cosmos-sdk/codec/legacy"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/msgservice"
@@ -16,7 +17,7 @@ import (
// RegisterLegacyAminoCodec registers the necessary x/ibc transfer interfaces and concrete types
// on the provided LegacyAmino codec. These types are used for Amino JSON serialization.
func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
- cdc.RegisterConcrete(&MsgTransfer{}, "cosmos-sdk/MsgTransfer", nil)
+ legacy.RegisterAminoMsg(cdc, &MsgTransfer{}, "cosmos-sdk/MsgTransfer")
}
// RegisterInterfaces register the ibc transfer module interfaces to protobuf
@@ -32,21 +33,12 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
}
-var (
- amino = codec.NewLegacyAmino()
-
- // ModuleCdc references the global x/ibc-transfer module codec. Note, the codec
- // should ONLY be used in certain instances of tests and for JSON encoding.
- //
- // The actual codec used for serialization should be provided to x/ibc transfer and
- // defined at the application level.
- ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
-)
-
-func init() {
- RegisterLegacyAminoCodec(amino)
- amino.Seal()
-}
+// ModuleCdc references the global x/ibc-transfer module codec. Note, the codec
+// should ONLY be used in certain instances of tests and for JSON encoding.
+//
+// The actual codec used for serialization should be provided to x/ibc transfer and
+// defined at the application level.
+var ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
// mustProtoMarshalJSON provides an auxiliary function to return Proto3 JSON encoded
// bytes of a message.
diff --git a/modules/apps/transfer/types/codec_test.go b/modules/apps/transfer/types/codec_test.go
index 591f1748094..f1de06ef3d7 100644
--- a/modules/apps/transfer/types/codec_test.go
+++ b/modules/apps/transfer/types/codec_test.go
@@ -4,7 +4,9 @@ import (
"strings"
sdk "github.com/cosmos/cosmos-sdk/types"
+ moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
+ "github.com/cosmos/ibc-go/v8/modules/apps/transfer"
"github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
)
@@ -23,3 +25,49 @@ func (suite *TypesTestSuite) TestMustMarshalProtoJSON() {
exists = strings.Contains(string(bz), memo)
suite.Require().False(exists)
}
+
+func (suite *TypesTestSuite) TestCodecTypeRegistration() {
+ testCases := []struct {
+ name string
+ typeURL string
+ expPass bool
+ }{
+ {
+ "success: MsgTransfer",
+ sdk.MsgTypeURL(&types.MsgTransfer{}),
+ true,
+ },
+ {
+ "success: MsgUpdateParams",
+ sdk.MsgTypeURL(&types.MsgUpdateParams{}),
+ true,
+ },
+ {
+ "success: TransferAuthorization",
+ sdk.MsgTypeURL(&types.TransferAuthorization{}),
+ true,
+ },
+ {
+ "type not registered on codec",
+ "ibc.invalid.MsgTypeURL",
+ false,
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ suite.Run(tc.name, func() {
+ encodingCfg := moduletestutil.MakeTestEncodingConfig(transfer.AppModuleBasic{})
+ msg, err := encodingCfg.Codec.InterfaceRegistry().Resolve(tc.typeURL)
+
+ if tc.expPass {
+ suite.Require().NotNil(msg)
+ suite.Require().NoError(err)
+ } else {
+ suite.Require().Nil(msg)
+ suite.Require().Error(err)
+ }
+ })
+ }
+}
diff --git a/modules/apps/transfer/types/errors.go b/modules/apps/transfer/types/errors.go
index d62134b27cd..b3e45aa2ae2 100644
--- a/modules/apps/transfer/types/errors.go
+++ b/modules/apps/transfer/types/errors.go
@@ -15,4 +15,5 @@ var (
ErrReceiveDisabled = errorsmod.Register(ModuleName, 8, "fungible token transfers to this chain are disabled")
ErrMaxTransferChannels = errorsmod.Register(ModuleName, 9, "max transfer channels")
ErrInvalidAuthorization = errorsmod.Register(ModuleName, 10, "invalid transfer authorization")
+ ErrInvalidMemo = errorsmod.Register(ModuleName, 11, "invalid memo")
)
diff --git a/modules/apps/transfer/types/expected_keepers.go b/modules/apps/transfer/types/expected_keepers.go
index 434c873d8cf..7aee3eace68 100644
--- a/modules/apps/transfer/types/expected_keepers.go
+++ b/modules/apps/transfer/types/expected_keepers.go
@@ -5,6 +5,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
+ paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
@@ -54,3 +55,8 @@ type ConnectionKeeper interface {
type PortKeeper interface {
BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability
}
+
+// ParamSubspace defines the expected Subspace interface for module parameters.
+type ParamSubspace interface {
+ GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet)
+}
diff --git a/modules/apps/transfer/types/msgs.go b/modules/apps/transfer/types/msgs.go
index 33915637017..ad126d149c7 100644
--- a/modules/apps/transfer/types/msgs.go
+++ b/modules/apps/transfer/types/msgs.go
@@ -12,6 +12,11 @@ import (
ibcerrors "github.com/cosmos/ibc-go/v8/modules/core/errors"
)
+const (
+ MaximumReceiverLength = 2048 // maximum length of the receiver address in bytes (value chosen arbitrarily)
+ MaximumMemoLength = 32768 // maximum length of the memo in bytes (value chosen arbitrarily)
+)
+
var (
_ sdk.Msg = (*MsgUpdateParams)(nil)
_ sdk.Msg = (*MsgTransfer)(nil)
@@ -91,6 +96,12 @@ func (msg MsgTransfer) ValidateBasic() error {
if strings.TrimSpace(msg.Receiver) == "" {
return errorsmod.Wrap(ibcerrors.ErrInvalidAddress, "missing recipient address")
}
+ if len(msg.Receiver) > MaximumReceiverLength {
+ return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "recipient address must not exceed %d bytes", MaximumReceiverLength)
+ }
+ if len(msg.Memo) > MaximumMemoLength {
+ return errorsmod.Wrapf(ErrInvalidMemo, "memo must not exceed %d bytes", MaximumMemoLength)
+ }
return ValidateIBCDenom(msg.Token.Denom)
}
diff --git a/modules/apps/transfer/types/msgs_test.go b/modules/apps/transfer/types/msgs_test.go
index 3afae766edb..6dc2dedc31a 100644
--- a/modules/apps/transfer/types/msgs_test.go
+++ b/modules/apps/transfer/types/msgs_test.go
@@ -60,11 +60,13 @@ func TestMsgTransferValidation(t *testing.T) {
{"port id contains non-alpha", types.NewMsgTransfer(invalidPort, validChannel, coin, sender, receiver, timeoutHeight, 0, ""), false},
{"too short channel id", types.NewMsgTransfer(validPort, invalidShortChannel, coin, sender, receiver, timeoutHeight, 0, ""), false},
{"too long channel id", types.NewMsgTransfer(validPort, invalidLongChannel, coin, sender, receiver, timeoutHeight, 0, ""), false},
+ {"too long memo", types.NewMsgTransfer(validPort, validChannel, coin, sender, receiver, timeoutHeight, 0, ibctesting.GenerateString(types.MaximumMemoLength+1)), false},
{"channel id contains non-alpha", types.NewMsgTransfer(validPort, invalidChannel, coin, sender, receiver, timeoutHeight, 0, ""), false},
{"invalid denom", types.NewMsgTransfer(validPort, validChannel, invalidDenomCoin, sender, receiver, timeoutHeight, 0, ""), false},
{"zero coin", types.NewMsgTransfer(validPort, validChannel, zeroCoin, sender, receiver, timeoutHeight, 0, ""), false},
{"missing sender address", types.NewMsgTransfer(validPort, validChannel, coin, emptyAddr, receiver, timeoutHeight, 0, ""), false},
{"missing recipient address", types.NewMsgTransfer(validPort, validChannel, coin, sender, "", timeoutHeight, 0, ""), false},
+ {"too long recipient address", types.NewMsgTransfer(validPort, validChannel, coin, sender, ibctesting.GenerateString(types.MaximumReceiverLength+1), timeoutHeight, 0, ""), false},
{"empty coin", types.NewMsgTransfer(validPort, validChannel, sdk.Coin{}, sender, receiver, timeoutHeight, 0, ""), false},
}
diff --git a/modules/apps/transfer/types/tx.pb.go b/modules/apps/transfer/types/tx.pb.go
index 3e86ff234e4..6dbba5651c9 100644
--- a/modules/apps/transfer/types/tx.pb.go
+++ b/modules/apps/transfer/types/tx.pb.go
@@ -221,46 +221,46 @@ func init() {
}
var fileDescriptor_7401ed9bed2f8e09 = []byte{
- // 623 bytes of a gzipped FileDescriptorProto
+ // 613 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xcf, 0x4f, 0x13, 0x4f,
- 0x14, 0xef, 0x7e, 0x29, 0xfd, 0xe2, 0x54, 0x40, 0x56, 0x02, 0xcb, 0xc6, 0x6c, 0x49, 0x23, 0x09,
- 0x96, 0x30, 0x93, 0x62, 0x0c, 0x86, 0x63, 0x89, 0xd1, 0x0b, 0x09, 0x36, 0x78, 0xf1, 0x42, 0x76,
- 0xa7, 0xcf, 0xed, 0x84, 0xee, 0xcc, 0x3a, 0x33, 0x6d, 0xe4, 0x62, 0x8c, 0x07, 0x63, 0x3c, 0x79,
- 0xf6, 0xe4, 0x9f, 0xd0, 0x3f, 0x83, 0x23, 0x47, 0x4f, 0xc6, 0xc0, 0xa1, 0x17, 0xff, 0x08, 0x33,
- 0xb3, 0xd3, 0x5a, 0x3d, 0x54, 0xbd, 0xec, 0xbe, 0x1f, 0x9f, 0xf7, 0xeb, 0xf3, 0xe6, 0xa1, 0x2d,
- 0x96, 0x50, 0x12, 0xe7, 0x79, 0x8f, 0xd1, 0x58, 0x33, 0xc1, 0x15, 0xd1, 0x32, 0xe6, 0xea, 0x05,
- 0x48, 0x32, 0x68, 0x12, 0xfd, 0x0a, 0xe7, 0x52, 0x68, 0xe1, 0xdf, 0x61, 0x09, 0xc5, 0xd3, 0x30,
- 0x3c, 0x86, 0xe1, 0x41, 0x33, 0x5c, 0x89, 0x33, 0xc6, 0x05, 0xb1, 0xdf, 0x22, 0x20, 0x5c, 0x4d,
- 0x45, 0x2a, 0xac, 0x48, 0x8c, 0xe4, 0xac, 0xeb, 0x54, 0xa8, 0x4c, 0x28, 0x92, 0xa9, 0xd4, 0xa4,
- 0xcf, 0x54, 0xea, 0x1c, 0x91, 0x73, 0x24, 0xb1, 0x02, 0x32, 0x68, 0x26, 0xa0, 0xe3, 0x26, 0xa1,
- 0x82, 0x71, 0xe7, 0xaf, 0x99, 0x36, 0xa9, 0x90, 0x40, 0x68, 0x8f, 0x01, 0xd7, 0x26, 0xba, 0x90,
- 0x1c, 0x60, 0x67, 0xf6, 0x1c, 0xe3, 0x66, 0x2d, 0xb8, 0xfe, 0x6e, 0x0e, 0x55, 0x8f, 0x54, 0x7a,
- 0xe2, 0xac, 0x7e, 0x0d, 0x55, 0x95, 0xe8, 0x4b, 0x0a, 0xa7, 0xb9, 0x90, 0x3a, 0xf0, 0x36, 0xbd,
- 0xed, 0x1b, 0x6d, 0x54, 0x98, 0x8e, 0x85, 0xd4, 0xfe, 0x16, 0x5a, 0x72, 0x00, 0xda, 0x8d, 0x39,
- 0x87, 0x5e, 0xf0, 0x9f, 0xc5, 0x2c, 0x16, 0xd6, 0xc3, 0xc2, 0xe8, 0x3f, 0x42, 0xf3, 0x5a, 0x9c,
- 0x01, 0x0f, 0xe6, 0x36, 0xbd, 0xed, 0xea, 0xde, 0x06, 0x2e, 0xa6, 0xc2, 0x66, 0x2a, 0xec, 0xa6,
- 0xc2, 0x87, 0x82, 0xf1, 0xd6, 0xea, 0xc5, 0xd7, 0x5a, 0xe9, 0xd3, 0x68, 0xd8, 0xa8, 0xf6, 0x20,
- 0x8d, 0xe9, 0xf9, 0xa9, 0x99, 0xb5, 0x5d, 0x44, 0xfb, 0x6b, 0xa8, 0xa2, 0x80, 0x77, 0x40, 0x06,
- 0x65, 0x5b, 0xc5, 0x69, 0x7e, 0x88, 0x16, 0x24, 0x50, 0x60, 0x03, 0x90, 0xc1, 0xbc, 0xf5, 0x4c,
- 0x74, 0xff, 0x31, 0x5a, 0xd2, 0x2c, 0x03, 0xd1, 0xd7, 0xa7, 0x5d, 0x60, 0x69, 0x57, 0x07, 0x15,
- 0xdb, 0x43, 0x88, 0xcd, 0xe6, 0x0c, 0x73, 0xd8, 0xf1, 0x35, 0x68, 0xe2, 0x27, 0x16, 0xd1, 0x2a,
- 0x9b, 0x26, 0xda, 0x8b, 0x2e, 0xae, 0x30, 0xfa, 0x3b, 0x68, 0x65, 0x9c, 0xc8, 0xfc, 0x95, 0x8e,
- 0xb3, 0x3c, 0xf8, 0x7f, 0xd3, 0xdb, 0x2e, 0xb7, 0x6f, 0x39, 0xc7, 0xc9, 0xd8, 0xee, 0xfb, 0xa8,
- 0x9c, 0x41, 0x26, 0x82, 0x05, 0xdb, 0x8d, 0x95, 0x0f, 0x1a, 0xef, 0x3f, 0xd7, 0x4a, 0x6f, 0x47,
- 0xc3, 0x86, 0x6b, 0xfb, 0xc3, 0x68, 0xd8, 0x58, 0x2b, 0x88, 0xd8, 0x55, 0x9d, 0x33, 0x32, 0x45,
- 0x7c, 0x7d, 0x1f, 0xdd, 0x9e, 0x52, 0xdb, 0xa0, 0x72, 0xc1, 0x15, 0x98, 0x41, 0x15, 0xbc, 0xec,
- 0x03, 0xa7, 0x60, 0x97, 0x51, 0x6e, 0x4f, 0xf4, 0x83, 0xb2, 0x49, 0x5f, 0x7f, 0x8d, 0x96, 0x8f,
- 0x54, 0xfa, 0x2c, 0xef, 0xc4, 0x1a, 0x8e, 0x63, 0x19, 0x67, 0xca, 0xb2, 0xc6, 0x52, 0x0e, 0xd2,
- 0xed, 0xcf, 0x69, 0x7e, 0x0b, 0x55, 0x72, 0x8b, 0xb0, 0x3b, 0xab, 0xee, 0xdd, 0xc5, 0xb3, 0xde,
- 0x32, 0x2e, 0xb2, 0x39, 0x6e, 0x5c, 0xe4, 0xc1, 0xf2, 0xcf, 0x99, 0x6c, 0xd2, 0xfa, 0x06, 0x5a,
- 0xff, 0xad, 0xfe, 0xb8, 0xf9, 0xbd, 0xef, 0x1e, 0x9a, 0x3b, 0x52, 0xa9, 0xdf, 0x45, 0x0b, 0x93,
- 0x07, 0x76, 0x6f, 0x76, 0xcd, 0x29, 0x0e, 0xc2, 0xe6, 0x5f, 0x43, 0x27, 0x74, 0x69, 0x74, 0xf3,
- 0x17, 0x26, 0x76, 0xff, 0x98, 0x62, 0x1a, 0x1e, 0x3e, 0xf8, 0x27, 0xf8, 0xb8, 0x6a, 0x38, 0xff,
- 0x66, 0x34, 0x6c, 0x78, 0xad, 0xa7, 0x17, 0x57, 0x91, 0x77, 0x79, 0x15, 0x79, 0xdf, 0xae, 0x22,
- 0xef, 0xe3, 0x75, 0x54, 0xba, 0xbc, 0x8e, 0x4a, 0x5f, 0xae, 0xa3, 0xd2, 0xf3, 0xfd, 0x94, 0xe9,
- 0x6e, 0x3f, 0xc1, 0x54, 0x64, 0xc4, 0x9d, 0x37, 0x4b, 0xe8, 0x6e, 0x2a, 0xc8, 0xe0, 0x21, 0xc9,
- 0x44, 0xa7, 0xdf, 0x03, 0x65, 0x4e, 0x76, 0xea, 0x54, 0xf5, 0x79, 0x0e, 0x2a, 0xa9, 0xd8, 0x2b,
- 0xbd, 0xff, 0x23, 0x00, 0x00, 0xff, 0xff, 0xe0, 0xab, 0xc5, 0x1e, 0x9c, 0x04, 0x00, 0x00,
+ 0x14, 0xef, 0x7e, 0x29, 0xfd, 0xc2, 0x54, 0x40, 0x56, 0x03, 0xcb, 0xc6, 0x6c, 0x49, 0x23, 0x09,
+ 0x96, 0x30, 0x93, 0x62, 0x0c, 0xa6, 0xc7, 0x72, 0xf1, 0x20, 0x09, 0x36, 0x78, 0xf1, 0x42, 0x76,
+ 0xa7, 0xcf, 0xed, 0x84, 0xee, 0xcc, 0x3a, 0x33, 0x6d, 0xf4, 0x62, 0x88, 0x27, 0xe3, 0xc9, 0x3f,
+ 0xc1, 0xa3, 0x47, 0xfe, 0x0c, 0x8e, 0x1c, 0x3d, 0x19, 0x03, 0x07, 0x2e, 0xfe, 0x11, 0x66, 0x66,
+ 0xa7, 0x75, 0xf5, 0x50, 0xf5, 0xb2, 0xfb, 0x7e, 0x7c, 0xde, 0xaf, 0xcf, 0x9b, 0x87, 0xb6, 0x58,
+ 0x42, 0x49, 0x9c, 0xe7, 0x43, 0x46, 0x63, 0xcd, 0x04, 0x57, 0x44, 0xcb, 0x98, 0xab, 0x97, 0x20,
+ 0xc9, 0xb8, 0x4d, 0xf4, 0x6b, 0x9c, 0x4b, 0xa1, 0x85, 0x7f, 0x8f, 0x25, 0x14, 0x97, 0x61, 0x78,
+ 0x02, 0xc3, 0xe3, 0x76, 0xb8, 0x1a, 0x67, 0x8c, 0x0b, 0x62, 0xbf, 0x45, 0x40, 0x78, 0x37, 0x15,
+ 0xa9, 0xb0, 0x22, 0x31, 0x92, 0xb3, 0xae, 0x53, 0xa1, 0x32, 0xa1, 0x48, 0xa6, 0x52, 0x93, 0x3e,
+ 0x53, 0xa9, 0x73, 0x44, 0xce, 0x91, 0xc4, 0x0a, 0xc8, 0xb8, 0x9d, 0x80, 0x8e, 0xdb, 0x84, 0x0a,
+ 0xc6, 0x9d, 0xbf, 0x61, 0xda, 0xa4, 0x42, 0x02, 0xa1, 0x43, 0x06, 0x5c, 0x9b, 0xe8, 0x42, 0x72,
+ 0x80, 0x9d, 0xd9, 0x73, 0x4c, 0x9a, 0xb5, 0xe0, 0xe6, 0xd9, 0x1c, 0xaa, 0x1f, 0xaa, 0xf4, 0xd8,
+ 0x59, 0xfd, 0x06, 0xaa, 0x2b, 0x31, 0x92, 0x14, 0x4e, 0x72, 0x21, 0x75, 0xe0, 0x6d, 0x7a, 0xdb,
+ 0x8b, 0x3d, 0x54, 0x98, 0x8e, 0x84, 0xd4, 0xfe, 0x16, 0x5a, 0x76, 0x00, 0x3a, 0x88, 0x39, 0x87,
+ 0x61, 0xf0, 0x9f, 0xc5, 0x2c, 0x15, 0xd6, 0x83, 0xc2, 0xe8, 0x77, 0xd0, 0xbc, 0x16, 0xa7, 0xc0,
+ 0x83, 0xb9, 0x4d, 0x6f, 0xbb, 0xbe, 0xb7, 0x81, 0x8b, 0xa9, 0xb0, 0x99, 0x0a, 0xbb, 0xa9, 0xf0,
+ 0x81, 0x60, 0xbc, 0xbb, 0x78, 0xf1, 0xb5, 0x51, 0xf9, 0x7c, 0x73, 0xde, 0xf2, 0x7a, 0x45, 0x88,
+ 0xbf, 0x86, 0x6a, 0x0a, 0x78, 0x1f, 0x64, 0x50, 0xb5, 0xa9, 0x9d, 0xe6, 0x87, 0x68, 0x41, 0x02,
+ 0x05, 0x36, 0x06, 0x19, 0xcc, 0x5b, 0xcf, 0x54, 0xf7, 0x9f, 0xa2, 0x65, 0xcd, 0x32, 0x10, 0x23,
+ 0x7d, 0x32, 0x00, 0x96, 0x0e, 0x74, 0x50, 0xb3, 0x85, 0x43, 0x6c, 0xd6, 0x65, 0xe8, 0xc2, 0x8e,
+ 0xa4, 0x71, 0x1b, 0x3f, 0xb1, 0x88, 0x72, 0xe5, 0x25, 0x17, 0x5c, 0x78, 0xfc, 0x1d, 0xb4, 0x3a,
+ 0xc9, 0x66, 0xfe, 0x4a, 0xc7, 0x59, 0x1e, 0xfc, 0xbf, 0xe9, 0x6d, 0x57, 0x7b, 0xb7, 0x9d, 0xe3,
+ 0x78, 0x62, 0xf7, 0x7d, 0x54, 0xcd, 0x20, 0x13, 0xc1, 0x82, 0x6d, 0xc9, 0xca, 0x9d, 0xd6, 0xfb,
+ 0x4f, 0x8d, 0xca, 0xbb, 0x9b, 0xf3, 0x96, 0xeb, 0xfd, 0xc3, 0xcd, 0x79, 0x6b, 0xad, 0xa0, 0x60,
+ 0x57, 0xf5, 0x4f, 0x49, 0x89, 0xf2, 0xe6, 0x3e, 0xba, 0x53, 0x52, 0x7b, 0xa0, 0x72, 0xc1, 0x15,
+ 0x98, 0x69, 0x15, 0xbc, 0x1a, 0x01, 0xa7, 0x60, 0xd7, 0x50, 0xed, 0x4d, 0xf5, 0x4e, 0xd5, 0xa4,
+ 0x6f, 0xbe, 0x45, 0x2b, 0x87, 0x2a, 0x7d, 0x9e, 0xf7, 0x63, 0x0d, 0x47, 0xb1, 0x8c, 0x33, 0x65,
+ 0xa9, 0x63, 0x29, 0x07, 0xe9, 0x36, 0xe7, 0x34, 0xbf, 0x8b, 0x6a, 0xb9, 0x45, 0xd8, 0x6d, 0xd5,
+ 0xf7, 0xee, 0xe3, 0x59, 0xaf, 0x18, 0x17, 0xd9, 0xba, 0x55, 0x43, 0x50, 0xcf, 0x45, 0x76, 0x56,
+ 0x7e, 0xce, 0x64, 0x93, 0x36, 0x37, 0xd0, 0xfa, 0x6f, 0xf5, 0x27, 0xcd, 0xef, 0x7d, 0xf7, 0xd0,
+ 0xdc, 0xa1, 0x4a, 0xfd, 0x01, 0x5a, 0x98, 0x3e, 0xad, 0x07, 0xb3, 0x6b, 0x96, 0x38, 0x08, 0xdb,
+ 0x7f, 0x0d, 0x9d, 0xd2, 0xa5, 0xd1, 0xad, 0x5f, 0x98, 0xd8, 0xfd, 0x63, 0x8a, 0x32, 0x3c, 0x7c,
+ 0xf4, 0x4f, 0xf0, 0x49, 0xd5, 0x70, 0xfe, 0xcc, 0x3c, 0x9f, 0xee, 0xb3, 0x8b, 0xab, 0xc8, 0xbb,
+ 0xbc, 0x8a, 0xbc, 0x6f, 0x57, 0x91, 0xf7, 0xf1, 0x3a, 0xaa, 0x5c, 0x5e, 0x47, 0x95, 0x2f, 0xd7,
+ 0x51, 0xe5, 0xc5, 0x7e, 0xca, 0xf4, 0x60, 0x94, 0x60, 0x2a, 0x32, 0xe2, 0x0e, 0x9b, 0x25, 0x74,
+ 0x37, 0x15, 0x64, 0xfc, 0x98, 0x64, 0xa2, 0x3f, 0x1a, 0x82, 0x32, 0xc7, 0x5a, 0x3a, 0x52, 0xfd,
+ 0x26, 0x07, 0x95, 0xd4, 0xec, 0x7d, 0x3e, 0xfc, 0x11, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xda, 0xd1,
+ 0xc3, 0x96, 0x04, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
diff --git a/modules/capability/capability_test.go b/modules/capability/capability_test.go
index e725fdf1cb2..77c7170401d 100644
--- a/modules/capability/capability_test.go
+++ b/modules/capability/capability_test.go
@@ -39,7 +39,7 @@ type CapabilityTestSuite struct {
}
func (suite *CapabilityTestSuite) SetupTest() {
- encodingCfg := moduletestutil.MakeTestEncodingConfig(capability.AppModuleBasic{})
+ encodingCfg := moduletestutil.MakeTestEncodingConfig(capability.AppModule{})
suite.cdc = encodingCfg.Codec
suite.storeKey = storetypes.NewKVStoreKey(types.StoreKey)
diff --git a/modules/capability/go.mod b/modules/capability/go.mod
index 4b9181db8a3..f474e84b7d4 100644
--- a/modules/capability/go.mod
+++ b/modules/capability/go.mod
@@ -8,23 +8,22 @@ require (
cosmossdk.io/core v0.11.0
cosmossdk.io/errors v1.0.0
cosmossdk.io/log v1.2.1
- cosmossdk.io/math v1.1.2
- cosmossdk.io/store v1.0.0-rc.0
+ cosmossdk.io/math v1.2.0
+ cosmossdk.io/store v1.0.0
github.com/cometbft/cometbft v0.38.0
github.com/cosmos/cosmos-db v1.0.0
- github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d
+ github.com/cosmos/cosmos-sdk v0.50.1
github.com/cosmos/gogoproto v1.4.11
github.com/grpc-ecosystem/grpc-gateway v1.16.0
- github.com/spf13/cobra v1.7.0
github.com/stretchr/testify v1.8.4
sigs.k8s.io/yaml v1.3.0
)
require (
- cosmossdk.io/api v0.7.1 // indirect
+ cosmossdk.io/api v0.7.2 // indirect
cosmossdk.io/collections v0.4.0 // indirect
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
- cosmossdk.io/x/tx v0.10.0 // indirect
+ cosmossdk.io/x/tx v0.12.0 // indirect
filippo.io/edwards25519 v1.0.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.1 // indirect
@@ -37,7 +36,7 @@ require (
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/cockroachdb/errors v1.11.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
- github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 // indirect
+ github.com/cockroachdb/pebble v0.0.0-20231101195458-481da04154d6 // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cometbft/cometbft-db v0.8.0 // indirect
@@ -45,11 +44,11 @@ require (
github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
- github.com/cosmos/iavl v1.0.0-rc.1 // indirect
+ github.com/cosmos/iavl v1.0.0 // indirect
github.com/cosmos/ics23/go v0.10.0 // indirect
- github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect
+ github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
@@ -57,11 +56,11 @@ require (
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
- github.com/emicklei/dot v1.5.0 // indirect
+ github.com/emicklei/dot v1.6.0 // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/felixge/httpsnoop v1.0.2 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
- github.com/getsentry/sentry-go v0.23.0 // indirect
+ github.com/getsentry/sentry-go v0.25.0 // indirect
github.com/go-kit/kit v0.12.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
@@ -71,11 +70,11 @@ require (
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/glog v1.1.0 // indirect
+ github.com/golang/glog v1.1.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
- github.com/google/go-cmp v0.5.9 // indirect
+ github.com/google/go-cmp v0.6.0 // indirect
github.com/gorilla/handlers v1.5.1 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
@@ -84,7 +83,7 @@ require (
github.com/hashicorp/go-hclog v1.5.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-metrics v0.5.1 // indirect
- github.com/hashicorp/go-plugin v1.4.10 // indirect
+ github.com/hashicorp/go-plugin v1.5.2 // indirect
github.com/hashicorp/go-uuid v1.0.2 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
@@ -95,62 +94,66 @@ require (
github.com/improbable-eng/grpc-web v0.15.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
- github.com/klauspost/compress v1.16.7 // indirect
+ github.com/klauspost/compress v1.17.2 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
- github.com/linxGnu/grocksdb v1.8.0 // indirect
+ github.com/linxGnu/grocksdb v1.8.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mtibben/percent v0.2.1 // indirect
- github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce // indirect
+ github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/onsi/ginkgo v1.16.4 // indirect
- github.com/pelletier/go-toml/v2 v2.0.8 // indirect
- github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect
+ github.com/pelletier/go-toml/v2 v2.1.0 // indirect
+ github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/prometheus/client_golang v1.16.0 // indirect
- github.com/prometheus/client_model v0.4.0 // indirect
- github.com/prometheus/common v0.44.0 // indirect
- github.com/prometheus/procfs v0.11.1 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.17.0 // indirect
+ github.com/prometheus/client_model v0.5.0 // indirect
+ github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/rs/cors v1.8.3 // indirect
- github.com/rs/zerolog v1.30.0 // indirect
+ github.com/rs/zerolog v1.31.0 // indirect
+ github.com/sagikazarmark/locafero v0.3.0 // indirect
+ github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sasha-s/go-deadlock v0.3.1 // indirect
- github.com/spf13/afero v1.9.5 // indirect
+ github.com/sourcegraph/conc v0.3.0 // indirect
+ github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/cast v1.5.1 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
+ github.com/spf13/cobra v1.7.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/spf13/viper v1.16.0 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/spf13/viper v1.17.0 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
github.com/tendermint/go-amino v0.16.0 // indirect
- github.com/tidwall/btree v1.6.0 // indirect
+ github.com/tidwall/btree v1.7.0 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
- github.com/zondax/hid v0.9.1 // indirect
- github.com/zondax/ledger-go v0.14.1 // indirect
+ github.com/zondax/hid v0.9.2 // indirect
+ github.com/zondax/ledger-go v0.14.3 // indirect
go.etcd.io/bbolt v1.3.7 // indirect
- golang.org/x/crypto v0.13.0 // indirect
- golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
- golang.org/x/net v0.15.0 // indirect
- golang.org/x/sys v0.12.0 // indirect
- golang.org/x/term v0.12.0 // indirect
+ go.uber.org/multierr v1.10.0 // indirect
+ golang.org/x/crypto v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+ golang.org/x/net v0.17.0 // indirect
+ golang.org/x/sys v0.13.0 // indirect
+ golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
- google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect
- google.golang.org/grpc v1.58.2 // indirect
+ google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
+ google.golang.org/grpc v1.59.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- gotest.tools/v3 v3.5.0 // indirect
+ gotest.tools/v3 v3.5.1 // indirect
nhooyr.io/websocket v1.8.6 // indirect
pgregory.net/rapid v1.1.0 // indirect
)
diff --git a/modules/capability/go.sum b/modules/capability/go.sum
index b323ad99824..06345bf8e8c 100644
--- a/modules/capability/go.sum
+++ b/modules/capability/go.sum
@@ -35,8 +35,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
-cosmossdk.io/api v0.7.1 h1:PNQ1xN8+/0hj/sSD0ANqjkgfXFys+bZ5L8Hg7uzoUTU=
-cosmossdk.io/api v0.7.1/go.mod h1:ure9edhcROIHsngavM6mBLilMGFnfjhV/AaYhEMUkdo=
+cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4=
+cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38=
cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo=
@@ -47,12 +47,12 @@ cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04=
cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0=
cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk=
cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4=
-cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM=
-cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
-cosmossdk.io/store v1.0.0-rc.0 h1:9DwOjuUYxDtYxn/REkTxGQAmxlIGfRroB35MQ8TrxF4=
-cosmossdk.io/store v1.0.0-rc.0/go.mod h1:FtBDOJmwtOZfmKKF65bKZbTYgS3bDNjjo3nP76dAegk=
-cosmossdk.io/x/tx v0.10.0 h1:LxWF/hksVDbeQmFj4voLM5ZCHyVZ1cCNIqKenfH9plc=
-cosmossdk.io/x/tx v0.10.0/go.mod h1:MKo9/b5wsoL8dd9y9pvD2yOP1CMvzHIWYxi1l2oLPFo=
+cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig=
+cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0=
+cosmossdk.io/store v1.0.0 h1:6tnPgTpTSIskaTmw/4s5C9FARdgFflycIc9OX8i1tOI=
+cosmossdk.io/store v1.0.0/go.mod h1:ABMprwjvx6IpMp8l06TwuMrj6694/QP5NIW+X6jaTYc=
+cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U=
+cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
@@ -142,8 +142,8 @@ github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZ
github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0 h1:M4A5LioEhkZ/s+m0g0pWgiLBQr83p0jWnQUo320Qy+A=
-github.com/cockroachdb/pebble v0.0.0-20230817233644-564b068800e0/go.mod h1:EDjiaAXc0FXiRmxDzcu1wIEJ093ohHMUWxrI6iku0XA=
+github.com/cockroachdb/pebble v0.0.0-20231101195458-481da04154d6 h1:g+Y6IAf28JinY3zNdXwpw71SBGhLEb72kGQgiR5XKZM=
+github.com/cockroachdb/pebble v0.0.0-20231101195458-481da04154d6/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc=
github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
@@ -165,8 +165,8 @@ github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0
github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U=
github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o=
github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d h1:dBD7O1D3lxfMwKjR71ooQanLzclJ17NZMHplL6qd8ZU=
-github.com/cosmos/cosmos-sdk v0.50.0-rc.0.0.20230915171831-2196edacb99d/go.mod h1:8rNGga/Gg9/NIFvpqO4URts+8Cz/XVB0wTr5ZDm22UM=
+github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw=
+github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
@@ -174,12 +174,12 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g=
github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y=
-github.com/cosmos/iavl v1.0.0-rc.1 h1:5+73BEWW1gZOIUJKlk/1fpD4lOqqeFBA8KuV+NpkCpU=
-github.com/cosmos/iavl v1.0.0-rc.1/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
+github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so=
+github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc=
github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM=
github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0=
-github.com/cosmos/ledger-cosmos-go v0.13.0 h1:ex0CvCxToSR7j5WjrghPu2Bu9sSXKikjnVvUryNnx4s=
-github.com/cosmos/ledger-cosmos-go v0.13.0/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI=
+github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM=
+github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
@@ -188,8 +188,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
@@ -215,8 +216,8 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/emicklei/dot v1.5.0 h1:tc9eKdCBTgoR68vJ6OcgMtI0SdrGDwLPPVaPA6XhX50=
-github.com/emicklei/dot v1.5.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
+github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY=
+github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -245,8 +246,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
-github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE=
-github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
+github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
@@ -309,8 +310,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
-github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
+github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
+github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -362,8 +363,8 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
@@ -425,8 +426,8 @@ github.com/hashicorp/go-metrics v0.5.1 h1:rfPwUqFU6uZXNvGl4hzjY8LEBsqFVU4si1H9/H
github.com/hashicorp/go-metrics v0.5.1/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-plugin v1.4.10 h1:xUbmA4jC6Dq163/fWcp8P3JuHilrHHMLNRxzGQJ9hNk=
-github.com/hashicorp/go-plugin v1.4.10/go.mod h1:6/1TEzT0eQznvI/gV2CM29DLSkAK/e58mUWKVsPaph0=
+github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y=
+github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
@@ -467,8 +468,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
-github.com/jhump/protoreflect v1.15.2 h1:7YppbATX94jEt9KLAc5hICx4h6Yt3SaavhQRsIUEHP0=
-github.com/jhump/protoreflect v1.15.2/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
+github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls=
+github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=
github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=
@@ -493,8 +494,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
-github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
-github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
+github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -515,8 +516,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/linxGnu/grocksdb v1.8.0 h1:H4L/LhP7GOMf1j17oQAElHgVlbEje2h14A8Tz9cM2BE=
-github.com/linxGnu/grocksdb v1.8.0/go.mod h1:09CeBborffXhXdNpEcOeZrLKEnRtrZFEpFdPNI9Zjjg=
+github.com/linxGnu/grocksdb v1.8.4 h1:ZMsBpPpJNtRLHiKKp0mI7gW+NT4s7UgfD5xHxx1jVRo=
+github.com/linxGnu/grocksdb v1.8.4/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@@ -533,12 +534,13 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
@@ -578,8 +580,8 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce h1:/pEpMk55wH0X+E5zedGEMOdLuWmV8P4+4W3+LZaM6kg=
-github.com/oasisprotocol/curve25519-voi v0.0.0-20230110094441-db37f07504ce/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
@@ -611,12 +613,12 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
-github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
+github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
+github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE=
-github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA=
+github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
@@ -628,8 +630,9 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
@@ -637,32 +640,32 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
-github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
+github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
-github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
+github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
@@ -676,12 +679,16 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo=
github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
-github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
+github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
+github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ=
+github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
@@ -695,12 +702,14 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
-github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
+github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
+github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
@@ -709,15 +718,13 @@ github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tL
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
-github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
+github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
+github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -735,17 +742,16 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
-github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
-github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
-github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
+github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
+github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
@@ -761,10 +767,10 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo=
-github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
-github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c=
-github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320=
+github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
+github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
+github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw=
+github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
@@ -786,6 +792,8 @@ go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
+go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
@@ -802,8 +810,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -815,8 +823,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -886,8 +894,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -983,12 +991,13 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1136,12 +1145,12 @@ google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@@ -1168,8 +1177,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
-google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
+google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1217,8 +1226,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
-gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/modules/capability/keeper/keeper.go b/modules/capability/keeper/keeper.go
index e5d853f0285..8d43fae0b78 100644
--- a/modules/capability/keeper/keeper.go
+++ b/modules/capability/keeper/keeper.go
@@ -149,7 +149,7 @@ func (k *Keeper) InitMemStore(ctx sdk.Context) {
// IsInitialized returns true if the keeper is properly initialized, and false otherwise.
func (k *Keeper) IsInitialized(ctx sdk.Context) bool {
memStore := ctx.KVStore(k.memKey)
- return memStore.Get(types.KeyMemInitialized) != nil
+ return memStore.Has(types.KeyMemInitialized)
}
// InitializeIndex sets the index to one (or greater) in InitChain according
@@ -206,11 +206,11 @@ func (k Keeper) GetOwners(ctx sdk.Context, index uint64) (types.CapabilityOwners
func (k Keeper) InitializeCapability(ctx sdk.Context, index uint64, owners types.CapabilityOwners) {
memStore := ctx.KVStore(k.memKey)
- cap := types.NewCapability(index)
+ capability := types.NewCapability(index)
for _, owner := range owners.Owners {
// Set the forward mapping between the module and capability tuple and the
// capability name in the memKVStore
- memStore.Set(types.FwdCapabilityKey(owner.Module, cap), []byte(owner.Name))
+ memStore.Set(types.FwdCapabilityKey(owner.Module, capability), []byte(owner.Name))
// Set the reverse mapping between the module and capability name and the
// index in the in-memory store. Since marshalling and unmarshalling into a store
@@ -219,7 +219,7 @@ func (k Keeper) InitializeCapability(ctx sdk.Context, index uint64, owners types
memStore.Set(types.RevCapabilityKey(owner.Module, owner.Name), sdk.Uint64ToBigEndian(index))
// Set the mapping from index from index to in-memory capability in the go map
- k.capMap[index] = cap
+ k.capMap[index] = capability
}
}
@@ -244,10 +244,10 @@ func (sk ScopedKeeper) NewCapability(ctx sdk.Context, name string) (*types.Capab
// create new capability with the current global index
index := types.IndexFromKey(store.Get(types.KeyIndex))
- cap := types.NewCapability(index)
+ capability := types.NewCapability(index)
// update capability owner set
- if err := sk.addOwner(ctx, cap, name); err != nil {
+ if err := sk.addOwner(ctx, capability, name); err != nil {
return nil, err
}
@@ -258,7 +258,7 @@ func (sk ScopedKeeper) NewCapability(ctx sdk.Context, name string) (*types.Capab
// Set the forward mapping between the module and capability tuple and the
// capability name in the memKVStore
- memStore.Set(types.FwdCapabilityKey(sk.module, cap), []byte(name))
+ memStore.Set(types.FwdCapabilityKey(sk.module, capability), []byte(name))
// Set the reverse mapping between the module and capability name and the
// index in the in-memory store. Since marshalling and unmarshalling into a store
@@ -267,11 +267,11 @@ func (sk ScopedKeeper) NewCapability(ctx sdk.Context, name string) (*types.Capab
memStore.Set(types.RevCapabilityKey(sk.module, name), sdk.Uint64ToBigEndian(index))
// Set the mapping from index from index to in-memory capability in the go map
- sk.capMap[index] = cap
+ sk.capMap[index] = capability
logger(ctx).Info("created new capability", "module", sk.module, "name", name)
- return cap, nil
+ return capability, nil
}
// AuthenticateCapability attempts to authenticate a given capability and name
@@ -389,12 +389,12 @@ func (sk ScopedKeeper) GetCapability(ctx sdk.Context, name string) (*types.Capab
return nil, false
}
- cap := sk.capMap[index]
- if cap == nil {
+ capability := sk.capMap[index]
+ if capability == nil {
panic(errors.New("capability found in memstore is missing from map"))
}
- return cap, true
+ return capability, true
}
// GetCapabilityName allows a module to retrieve the name under which it stored a given
@@ -414,13 +414,13 @@ func (sk ScopedKeeper) GetOwners(ctx sdk.Context, name string) (*types.Capabilit
if strings.TrimSpace(name) == "" {
return nil, false
}
- cap, ok := sk.GetCapability(ctx, name)
+ capability, ok := sk.GetCapability(ctx, name)
if !ok {
return nil, false
}
prefixStore := prefix.NewStore(ctx.KVStore(sk.storeKey), types.KeyPrefixIndexCapability)
- indexKey := types.IndexToKey(cap.GetIndex())
+ indexKey := types.IndexToKey(capability.GetIndex())
var capOwners types.CapabilityOwners
@@ -442,7 +442,7 @@ func (sk ScopedKeeper) LookupModules(ctx sdk.Context, name string) ([]string, *t
if strings.TrimSpace(name) == "" {
return nil, nil, errorsmod.Wrap(types.ErrInvalidCapabilityName, "cannot lookup modules with empty capability name")
}
- cap, ok := sk.GetCapability(ctx, name)
+ capability, ok := sk.GetCapability(ctx, name)
if !ok {
return nil, nil, errorsmod.Wrap(types.ErrCapabilityNotFound, name)
}
@@ -457,7 +457,7 @@ func (sk ScopedKeeper) LookupModules(ctx sdk.Context, name string) ([]string, *t
mods[i] = co.Module
}
- return mods, cap, nil
+ return mods, capability, nil
}
func (sk ScopedKeeper) addOwner(ctx sdk.Context, cap *types.Capability, name string) error {
diff --git a/modules/capability/keeper/keeper_test.go b/modules/capability/keeper/keeper_test.go
index 357c2e72314..12ac910a7c2 100644
--- a/modules/capability/keeper/keeper_test.go
+++ b/modules/capability/keeper/keeper_test.go
@@ -4,9 +4,10 @@ import (
"fmt"
"testing"
- storetypes "cosmossdk.io/store/types"
testifysuite "github.com/stretchr/testify/suite"
+ storetypes "cosmossdk.io/store/types"
+
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
@@ -17,8 +18,8 @@ import (
)
var (
- stakingModuleName string = "staking"
- bankModuleName string = "bank"
+ stakingModuleName = "staking"
+ bankModuleName = "bank"
)
type KeeperTestSuite struct {
@@ -32,7 +33,7 @@ func (suite *KeeperTestSuite) SetupTest() {
key := storetypes.NewKVStoreKey(types.StoreKey)
testCtx := testutil.DefaultContextWithDB(suite.T(), key, storetypes.NewTransientStoreKey("transient_test"))
suite.ctx = testCtx.Ctx
- encCfg := moduletestutil.MakeTestEncodingConfig(capability.AppModuleBasic{})
+ encCfg := moduletestutil.MakeTestEncodingConfig(capability.AppModule{})
suite.keeper = keeper.NewKeeper(encCfg.Codec, key, key)
}
@@ -47,12 +48,12 @@ func (suite *KeeperTestSuite) TestSeal() {
prevIndex := suite.keeper.GetLatestIndex(suite.ctx)
for i := range caps {
- cap, err := sk.NewCapability(suite.ctx, fmt.Sprintf("transfer-%d", i))
+ transferCap, err := sk.NewCapability(suite.ctx, fmt.Sprintf("transfer-%d", i))
suite.Require().NoError(err)
- suite.Require().NotNil(cap)
- suite.Require().Equal(uint64(i)+prevIndex, cap.GetIndex())
+ suite.Require().NotNil(transferCap)
+ suite.Require().Equal(uint64(i)+prevIndex, transferCap.GetIndex())
- caps[i] = cap
+ caps[i] = transferCap
}
suite.Require().NotPanics(func() {
@@ -82,14 +83,14 @@ func (suite *KeeperTestSuite) TestNewCapability() {
suite.Require().False(ok)
suite.Require().Nil(got)
- cap, err := sk.NewCapability(suite.ctx, "transfer")
+ transferCap, err := sk.NewCapability(suite.ctx, "transfer")
suite.Require().NoError(err)
- suite.Require().NotNil(cap)
+ suite.Require().NotNil(transferCap)
got, ok = sk.GetCapability(suite.ctx, "transfer")
suite.Require().True(ok)
- suite.Require().Equal(cap, got)
- suite.Require().True(cap == got, "expected memory addresses to be equal")
+ suite.Require().Equal(transferCap, got)
+ suite.Require().True(transferCap == got, "expected memory addresses to be equal")
got, ok = sk.GetCapability(suite.ctx, "invalid")
suite.Require().False(ok)
@@ -97,8 +98,8 @@ func (suite *KeeperTestSuite) TestNewCapability() {
got, ok = sk.GetCapability(suite.ctx, "transfer")
suite.Require().True(ok)
- suite.Require().Equal(cap, got)
- suite.Require().True(cap == got, "expected memory addresses to be equal")
+ suite.Require().Equal(transferCap, got)
+ suite.Require().True(transferCap == got, "expected memory addresses to be equal")
cap2, err := sk.NewCapability(suite.ctx, "transfer")
suite.Require().Error(err)
@@ -106,12 +107,12 @@ func (suite *KeeperTestSuite) TestNewCapability() {
got, ok = sk.GetCapability(suite.ctx, "transfer")
suite.Require().True(ok)
- suite.Require().Equal(cap, got)
- suite.Require().True(cap == got, "expected memory addresses to be equal")
+ suite.Require().Equal(transferCap, got)
+ suite.Require().True(transferCap == got, "expected memory addresses to be equal")
- cap, err = sk.NewCapability(suite.ctx, " ")
+ transferCap, err = sk.NewCapability(suite.ctx, " ")
suite.Require().Error(err)
- suite.Require().Nil(cap)
+ suite.Require().Nil(transferCap)
}
func (suite *KeeperTestSuite) TestAuthenticateCapability() {
@@ -159,22 +160,22 @@ func (suite *KeeperTestSuite) TestClaimCapability() {
sk2 := suite.keeper.ScopeToModule(stakingModuleName)
sk3 := suite.keeper.ScopeToModule("foo")
- cap, err := sk1.NewCapability(suite.ctx, "transfer")
+ transferCap, err := sk1.NewCapability(suite.ctx, "transfer")
suite.Require().NoError(err)
- suite.Require().NotNil(cap)
+ suite.Require().NotNil(transferCap)
- suite.Require().Error(sk1.ClaimCapability(suite.ctx, cap, "transfer"))
- suite.Require().NoError(sk2.ClaimCapability(suite.ctx, cap, "transfer"))
+ suite.Require().Error(sk1.ClaimCapability(suite.ctx, transferCap, "transfer"))
+ suite.Require().NoError(sk2.ClaimCapability(suite.ctx, transferCap, "transfer"))
got, ok := sk1.GetCapability(suite.ctx, "transfer")
suite.Require().True(ok)
- suite.Require().Equal(cap, got)
+ suite.Require().Equal(transferCap, got)
got, ok = sk2.GetCapability(suite.ctx, "transfer")
suite.Require().True(ok)
- suite.Require().Equal(cap, got)
+ suite.Require().Equal(transferCap, got)
- suite.Require().Error(sk3.ClaimCapability(suite.ctx, cap, " "))
+ suite.Require().Error(sk3.ClaimCapability(suite.ctx, transferCap, " "))
suite.Require().Error(sk3.ClaimCapability(suite.ctx, nil, "transfer"))
}
@@ -185,12 +186,12 @@ func (suite *KeeperTestSuite) TestGetOwners() {
sks := []keeper.ScopedKeeper{sk1, sk2, sk3}
- cap, err := sk1.NewCapability(suite.ctx, "transfer")
+ transferCap, err := sk1.NewCapability(suite.ctx, "transfer")
suite.Require().NoError(err)
- suite.Require().NotNil(cap)
+ suite.Require().NotNil(transferCap)
- suite.Require().NoError(sk2.ClaimCapability(suite.ctx, cap, "transfer"))
- suite.Require().NoError(sk3.ClaimCapability(suite.ctx, cap, "transfer"))
+ suite.Require().NoError(sk2.ClaimCapability(suite.ctx, transferCap, "transfer"))
+ suite.Require().NoError(sk3.ClaimCapability(suite.ctx, transferCap, "transfer"))
expectedOrder := []string{bankModuleName, "foo", stakingModuleName}
// Ensure all scoped keepers can get owners
@@ -204,7 +205,7 @@ func (suite *KeeperTestSuite) TestGetOwners() {
suite.Require().NoError(err, "could not retrieve modules")
suite.Require().NotNil(gotCap, "capability is nil")
suite.Require().NotNil(mods, "modules is nil")
- suite.Require().Equal(cap, gotCap, "caps not equal")
+ suite.Require().Equal(transferCap, gotCap, "caps not equal")
suite.Require().Equal(len(expectedOrder), len(owners.Owners), "length of owners is unexpected")
for i, o := range owners.Owners {
@@ -215,7 +216,7 @@ func (suite *KeeperTestSuite) TestGetOwners() {
}
// foo module releases capability
- err = sk3.ReleaseCapability(suite.ctx, cap)
+ err = sk3.ReleaseCapability(suite.ctx, transferCap)
suite.Require().Nil(err, "could not release capability")
// new expected order and scoped capabilities
@@ -225,13 +226,13 @@ func (suite *KeeperTestSuite) TestGetOwners() {
// Ensure all scoped keepers can get owners
for _, sk := range sks {
owners, ok := sk.GetOwners(suite.ctx, "transfer")
- mods, cap, err := sk.LookupModules(suite.ctx, "transfer")
+ mods, transferCap, err := sk.LookupModules(suite.ctx, "transfer")
suite.Require().True(ok, "could not retrieve owners")
suite.Require().NotNil(owners, "owners is nil")
suite.Require().NoError(err, "could not retrieve modules")
- suite.Require().NotNil(cap, "capability is nil")
+ suite.Require().NotNil(transferCap, "capability is nil")
suite.Require().NotNil(mods, "modules is nil")
suite.Require().Equal(len(expectedOrder), len(owners.Owners), "length of owners is unexpected")
@@ -284,14 +285,14 @@ func (suite *KeeperTestSuite) TestRevertCapability() {
cacheCtx := suite.ctx.WithMultiStore(msCache)
capName := "revert"
- // Create capability on cached context
- cap, err := sk.NewCapability(cacheCtx, capName)
+ // Create cachedCap on cached context
+ cachedCap, err := sk.NewCapability(cacheCtx, capName)
suite.Require().NoError(err, "could not create capability")
// Check that capability written in cached context
gotCache, ok := sk.GetCapability(cacheCtx, capName)
suite.Require().True(ok, "could not retrieve capability from cached context")
- suite.Require().Equal(cap, gotCache, "did not get correct capability from cached context")
+ suite.Require().Equal(cachedCap, gotCache, "did not get correct capability from cached context")
// Check that capability is NOT written to original context
got, ok := sk.GetCapability(suite.ctx, capName)
@@ -303,7 +304,7 @@ func (suite *KeeperTestSuite) TestRevertCapability() {
got, ok = sk.GetCapability(suite.ctx, capName)
suite.Require().True(ok, "could not retrieve capability from context")
- suite.Require().Equal(cap, got, "did not get correct capability from context")
+ suite.Require().Equal(cachedCap, got, "did not get correct capability from context")
}
func TestKeeperTestSuite(t *testing.T) {
diff --git a/modules/capability/module.go b/modules/capability/module.go
index ab9bc97a9db..786e41cf6e8 100644
--- a/modules/capability/module.go
+++ b/modules/capability/module.go
@@ -7,7 +7,6 @@ import (
"time"
gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
- "github.com/spf13/cobra"
"cosmossdk.io/core/appmodule"
@@ -26,7 +25,6 @@ import (
var (
_ module.AppModule = (*AppModule)(nil)
- _ module.AppModuleBasic = (*AppModuleBasic)(nil)
_ module.AppModuleSimulation = (*AppModule)(nil)
_ module.HasName = (*AppModule)(nil)
_ module.HasConsensusVersion = (*AppModule)(nil)
@@ -49,7 +47,7 @@ func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic {
}
// Name returns the capability module's name.
-func (AppModuleBasic) Name() string {
+func (am AppModuleBasic) Name() string {
return types.ModuleName
}
@@ -77,12 +75,6 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncod
func (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *gwruntime.ServeMux) {
}
-// GetTxCmd returns the capability module's root tx command.
-func (AppModuleBasic) GetTxCmd() *cobra.Command { return nil }
-
-// GetQueryCmd returns the capability module's root query command.
-func (AppModuleBasic) GetQueryCmd() *cobra.Command { return nil }
-
// ----------------------------------------------------------------------------
// AppModule
// ----------------------------------------------------------------------------
@@ -110,11 +102,6 @@ func (AppModule) IsOnePerModuleType() {}
// IsAppModule implements the appmodule.AppModule interface.
func (AppModule) IsAppModule() {}
-// Name returns the capability module's name.
-func (am AppModule) Name() string {
- return am.AppModuleBasic.Name()
-}
-
// InitGenesis performs the capability module's genesis initialization It returns
// no validator updates.
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) {
diff --git a/modules/capability/simulation/decoder_test.go b/modules/capability/simulation/decoder_test.go
index c47ce7dc9bc..b5115e66139 100644
--- a/modules/capability/simulation/decoder_test.go
+++ b/modules/capability/simulation/decoder_test.go
@@ -16,7 +16,7 @@ import (
)
func TestDecodeStore(t *testing.T) {
- encodingCfg := moduletestutil.MakeTestEncodingConfig(capability.AppModuleBasic{})
+ encodingCfg := moduletestutil.MakeTestEncodingConfig(capability.AppModule{})
dec := simulation.NewDecodeStore(encodingCfg.Codec)
capOwners := types.CapabilityOwners{
diff --git a/modules/capability/types/keys_test.go b/modules/capability/types/keys_test.go
index d0874ea27b0..c79cf2723ec 100644
--- a/modules/capability/types/keys_test.go
+++ b/modules/capability/types/keys_test.go
@@ -15,9 +15,9 @@ func TestRevCapabilityKey(t *testing.T) {
}
func TestFwdCapabilityKey(t *testing.T) {
- cap := types.NewCapability(23)
- expected := []byte(fmt.Sprintf("bank/fwd/%#016p", cap))
- require.Equal(t, expected, types.FwdCapabilityKey("bank", cap))
+ capability := types.NewCapability(23)
+ expected := []byte(fmt.Sprintf("bank/fwd/%#016p", capability))
+ require.Equal(t, expected, types.FwdCapabilityKey("bank", capability))
}
func TestIndexToKey(t *testing.T) {
diff --git a/modules/capability/types/types_test.go b/modules/capability/types/types_test.go
index b81d79877da..0e623aaefa7 100644
--- a/modules/capability/types/types_test.go
+++ b/modules/capability/types/types_test.go
@@ -12,9 +12,9 @@ import (
func TestCapabilityKey(t *testing.T) {
idx := uint64(3162)
- cap := types.NewCapability(idx)
- require.Equal(t, idx, cap.GetIndex())
- require.Equal(t, fmt.Sprintf("Capability{%p, %d}", cap, idx), cap.String())
+ capability := types.NewCapability(idx)
+ require.Equal(t, idx, capability.GetIndex())
+ require.Equal(t, fmt.Sprintf("Capability{%p, %d}", capability, idx), capability.String())
}
func TestOwner(t *testing.T) {
diff --git a/modules/core/02-client/client/cli/tx.go b/modules/core/02-client/client/cli/tx.go
index 46d46678742..19fd8b3f90b 100644
--- a/modules/core/02-client/client/cli/tx.go
+++ b/modules/core/02-client/client/cli/tx.go
@@ -161,7 +161,7 @@ func newSubmitMisbehaviourCmd() *cobra.Command {
return fmt.Errorf("neither JSON input nor path to .json file for misbehaviour were provided: %w", err)
}
- if err := cdc.UnmarshalInterfaceJSON(contents, misbehaviour); err != nil {
+ if err := cdc.UnmarshalInterfaceJSON(contents, &misbehaviour); err != nil {
return fmt.Errorf("error unmarshalling misbehaviour file: %w", err)
}
}
diff --git a/modules/core/02-client/keeper/client.go b/modules/core/02-client/keeper/client.go
index d17d41679b8..db24eee27b6 100644
--- a/modules/core/02-client/keeper/client.go
+++ b/modules/core/02-client/keeper/client.go
@@ -181,7 +181,7 @@ func (k Keeper) RecoverClient(ctx sdk.Context, subjectClientID, substituteClient
substituteClientStore := k.ClientStore(ctx, substituteClientID)
if status := k.GetClientStatus(ctx, substituteClientState, substituteClientID); status != exported.Active {
- return errorsmod.Wrapf(types.ErrClientNotActive, "substitute client is not %s, status is %s", status, exported.Active)
+ return errorsmod.Wrapf(types.ErrClientNotActive, "substitute client is not %s, status is %s", exported.Active, status)
}
if err := subjectClientState.CheckSubstituteAndUpdateState(ctx, k.cdc, subjectClientStore, substituteClientStore, substituteClientState); err != nil {
diff --git a/modules/core/02-client/keeper/keeper.go b/modules/core/02-client/keeper/keeper.go
index 887587ce9c9..a635fbef5a7 100644
--- a/modules/core/02-client/keeper/keeper.go
+++ b/modules/core/02-client/keeper/keeper.go
@@ -14,7 +14,6 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
- paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/cometbft/cometbft/light"
@@ -32,18 +31,13 @@ import (
type Keeper struct {
storeKey storetypes.StoreKey
cdc codec.BinaryCodec
- legacySubspace paramtypes.Subspace
+ legacySubspace types.ParamSubspace
stakingKeeper types.StakingKeeper
upgradeKeeper types.UpgradeKeeper
}
// NewKeeper creates a new NewKeeper instance
-func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace paramtypes.Subspace, sk types.StakingKeeper, uk types.UpgradeKeeper) Keeper {
- // set KeyTable if it has not already been set
- if !legacySubspace.HasKeyTable() {
- legacySubspace = legacySubspace.WithKeyTable(types.ParamKeyTable())
- }
-
+func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace types.ParamSubspace, sk types.StakingKeeper, uk types.UpgradeKeeper) Keeper {
return Keeper{
storeKey: key,
cdc: cdc,
diff --git a/modules/core/02-client/keeper/migrations.go b/modules/core/02-client/keeper/migrations.go
index b41f7024556..54620867928 100644
--- a/modules/core/02-client/keeper/migrations.go
+++ b/modules/core/02-client/keeper/migrations.go
@@ -39,10 +39,10 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error {
func (m Migrator) MigrateParams(ctx sdk.Context) error {
var params types.Params
m.keeper.legacySubspace.GetParamSet(ctx, ¶ms)
-
if err := params.Validate(); err != nil {
return err
}
+
m.keeper.SetParams(ctx, params)
m.keeper.Logger(ctx).Info("successfully migrated client to self-manage params")
return nil
diff --git a/modules/core/02-client/types/expected_keepers.go b/modules/core/02-client/types/expected_keepers.go
index ea56078ed26..6f4cd34557a 100644
--- a/modules/core/02-client/types/expected_keepers.go
+++ b/modules/core/02-client/types/expected_keepers.go
@@ -6,6 +6,8 @@ import (
upgradetypes "cosmossdk.io/x/upgrade/types"
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)
@@ -25,3 +27,8 @@ type UpgradeKeeper interface {
SetUpgradedConsensusState(ctx context.Context, planHeight int64, bz []byte) error
ScheduleUpgrade(ctx context.Context, plan upgradetypes.Plan) error
}
+
+// ParamSubspace defines the expected Subspace interface for module parameters.
+type ParamSubspace interface {
+ GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet)
+}
diff --git a/modules/core/03-connection/keeper/keeper.go b/modules/core/03-connection/keeper/keeper.go
index d6621a52473..cd18555f56e 100644
--- a/modules/core/03-connection/keeper/keeper.go
+++ b/modules/core/03-connection/keeper/keeper.go
@@ -9,7 +9,6 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
- paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
"github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
@@ -24,18 +23,13 @@ type Keeper struct {
types.QueryServer
storeKey storetypes.StoreKey
- legacySubspace paramtypes.Subspace
+ legacySubspace types.ParamSubspace
cdc codec.BinaryCodec
clientKeeper types.ClientKeeper
}
// NewKeeper creates a new IBC connection Keeper instance
-func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace paramtypes.Subspace, ck types.ClientKeeper) Keeper {
- // set KeyTable if it has not already been set
- if !legacySubspace.HasKeyTable() {
- legacySubspace = legacySubspace.WithKeyTable(types.ParamKeyTable())
- }
-
+func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace types.ParamSubspace, ck types.ClientKeeper) Keeper {
return Keeper{
storeKey: key,
cdc: cdc,
diff --git a/modules/core/03-connection/keeper/migrations.go b/modules/core/03-connection/keeper/migrations.go
index 528bc86c9d7..64b84e7885e 100644
--- a/modules/core/03-connection/keeper/migrations.go
+++ b/modules/core/03-connection/keeper/migrations.go
@@ -30,10 +30,10 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error {
func (m Migrator) MigrateParams(ctx sdk.Context) error {
var params types.Params
m.keeper.legacySubspace.GetParamSet(ctx, ¶ms)
-
if err := params.Validate(); err != nil {
return err
}
+
m.keeper.SetParams(ctx, params)
m.keeper.Logger(ctx).Info("successfully migrated connection to self-manage params")
return nil
diff --git a/modules/core/03-connection/keeper/migrations_test.go b/modules/core/03-connection/keeper/migrations_test.go
index ee1db7e6c20..36907ff4f96 100644
--- a/modules/core/03-connection/keeper/migrations_test.go
+++ b/modules/core/03-connection/keeper/migrations_test.go
@@ -18,7 +18,7 @@ func (suite *KeeperTestSuite) TestMigrateParams() {
func() {
params := types.DefaultParams()
subspace := suite.chainA.GetSimApp().GetSubspace(ibcexported.ModuleName)
- subspace.SetParamSet(suite.chainA.GetContext(), ¶ms) // set params
+ subspace.SetParamSet(suite.chainA.GetContext(), ¶ms)
},
types.DefaultParams(),
},
diff --git a/modules/core/03-connection/types/expected_keepers.go b/modules/core/03-connection/types/expected_keepers.go
index b470bf6520f..a37605b64cf 100644
--- a/modules/core/03-connection/types/expected_keepers.go
+++ b/modules/core/03-connection/types/expected_keepers.go
@@ -4,6 +4,7 @@ import (
storetypes "cosmossdk.io/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
+ paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/cosmos/ibc-go/v8/modules/core/exported"
)
@@ -18,3 +19,8 @@ type ClientKeeper interface {
IterateClientStates(ctx sdk.Context, prefix []byte, cb func(string, exported.ClientState) bool)
ClientStore(ctx sdk.Context, clientID string) storetypes.KVStore
}
+
+// ParamSubspace defines the expected Subspace interface for module parameters.
+type ParamSubspace interface {
+ GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet)
+}
diff --git a/modules/core/04-channel/keeper/packet_test.go b/modules/core/04-channel/keeper/packet_test.go
index b549725ab38..8c10435189d 100644
--- a/modules/core/04-channel/keeper/packet_test.go
+++ b/modules/core/04-channel/keeper/packet_test.go
@@ -3,6 +3,8 @@ package keeper_test
import (
"fmt"
+ "cosmossdk.io/errors"
+
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
@@ -729,6 +731,32 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
channelCap *capabilitytypes.Capability
)
+ assertErr := func(errType *errors.Error) func(commitment []byte, err error) {
+ return func(commitment []byte, err error) {
+ suite.Require().Error(err)
+ suite.Require().ErrorIs(err, errType)
+ suite.Require().NotNil(commitment)
+ }
+ }
+
+ assertNoOp := func(commitment []byte, err error) {
+ suite.Require().Error(err)
+ suite.Require().ErrorIs(err, types.ErrNoOpMsg)
+ suite.Require().Nil(commitment)
+ }
+
+ assertSuccess := func(seq func() uint64, msg string) func(commitment []byte, err error) {
+ return func(commitment []byte, err error) {
+ suite.Require().NoError(err)
+ suite.Require().Nil(commitment)
+
+ nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel())
+
+ suite.Require().True(found)
+ suite.Require().Equal(seq(), nextSequenceAck, msg)
+ }
+ }
+
testCases := []struct {
name string
malleate func()
@@ -751,14 +779,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().NoError(err)
- suite.Require().Nil(commitment)
-
- nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel())
- suite.Require().True(found)
- suite.Require().Equal(packet.GetSequence()+1, nextSequenceAck, "sequence not incremented in ordered channel")
- },
+ expResult: assertSuccess(func() uint64 { return packet.GetSequence() + 1 }, "sequence not incremented in ordered channel"),
},
{
name: "success on unordered channel",
@@ -777,14 +798,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().NoError(err)
- suite.Require().Nil(commitment)
-
- nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel())
- suite.Require().True(found)
- suite.Require().Equal(uint64(1), nextSequenceAck, "sequence incremented for UNORDERED channel")
- },
+ expResult: assertSuccess(func() uint64 { return uint64(1) }, "sequence incremented for UNORDERED channel"),
},
{
name: "success on channel in flushing state",
@@ -937,11 +951,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
err = path.EndpointA.AcknowledgePacket(packet, ack.Acknowledgement())
suite.Require().NoError(err)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrNoOpMsg)
- suite.Require().Nil(commitment)
- },
+ expResult: assertNoOp,
},
{
name: "packet already acknowledged unordered channel (no-op)",
@@ -963,11 +973,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
err = path.EndpointA.AcknowledgePacket(packet, ack.Acknowledgement())
suite.Require().NoError(err)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrNoOpMsg)
- suite.Require().Nil(commitment)
- },
+ expResult: assertNoOp,
},
{
name: "channel not found",
@@ -981,11 +987,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
packet = types.NewPacket(ibctesting.MockPacketData, sequence, ibctesting.InvalidID, ibctesting.InvalidID, path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, defaultTimeoutHeight, disabledTimeoutTimestamp)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrChannelNotFound)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrChannelNotFound),
},
{
name: "channel not open",
@@ -1002,11 +1004,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
suite.Require().NoError(err)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrInvalidChannelState)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrInvalidChannelState),
},
{
name: "channel in flush complete state",
@@ -1043,11 +1041,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
channelCap = capabilitytypes.NewCapability(3)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrInvalidChannelCapability)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrInvalidChannelCapability),
},
{
name: "packet destination port ≠ channel counterparty port",
@@ -1062,11 +1056,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
packet = types.NewPacket(ibctesting.MockPacketData, sequence, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, ibctesting.InvalidID, path.EndpointB.ChannelID, defaultTimeoutHeight, disabledTimeoutTimestamp)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrInvalidPacket)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrInvalidPacket),
},
{
name: "packet destination channel ID ≠ channel counterparty channel ID",
@@ -1081,11 +1071,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
packet = types.NewPacket(ibctesting.MockPacketData, sequence, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, path.EndpointB.ChannelConfig.PortID, ibctesting.InvalidID, defaultTimeoutHeight, disabledTimeoutTimestamp)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrInvalidPacket)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrInvalidPacket),
},
{
name: "connection not found",
@@ -1108,11 +1094,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
suite.chainA.CreateChannelCapability(suite.chainA.GetSimApp().ScopedIBCMockKeeper, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, connectiontypes.ErrConnectionNotFound)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(connectiontypes.ErrConnectionNotFound),
},
{
name: "connection not OPEN",
@@ -1138,11 +1120,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
suite.chainA.CreateChannelCapability(suite.chainA.GetSimApp().ScopedIBCMockKeeper, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, connectiontypes.ErrInvalidConnectionState)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(connectiontypes.ErrInvalidConnectionState),
},
{
name: "packet hasn't been sent",
@@ -1152,11 +1130,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
packet = types.NewPacket(ibctesting.MockPacketData, 1, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, defaultTimeoutHeight, disabledTimeoutTimestamp)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrNoOpMsg) // NOTE: ibc core does not distinguish between unsent and already relayed packets.
- suite.Require().Nil(commitment)
- },
+ expResult: assertNoOp, // NOTE: ibc core does not distinguish between unsent and already relayed packets.
},
{
name: "packet ack verification failed",
@@ -1172,11 +1146,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
packet = types.NewPacket(ibctesting.MockPacketData, sequence, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, defaultTimeoutHeight, disabledTimeoutTimestamp)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, commitmenttypes.ErrInvalidProof)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(commitmenttypes.ErrInvalidProof),
},
{
name: "packet commitment bytes do not match",
@@ -1197,11 +1167,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
packet.Data = []byte("invalid packet commitment")
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrInvalidPacket)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrInvalidPacket),
},
{
name: "next ack sequence not found",
@@ -1225,11 +1191,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrSequenceAckNotFound)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrSequenceAckNotFound),
},
{
name: "next ack sequence mismatch ORDERED",
@@ -1250,11 +1212,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
suite.chainA.App.GetIBCKeeper().ChannelKeeper.SetNextSequenceAck(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, 10)
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
},
- expResult: func(commitment []byte, err error) {
- suite.Require().Error(err)
- suite.Require().ErrorIs(err, types.ErrPacketSequenceOutOfOrder)
- suite.Require().NotNil(commitment)
- },
+ expResult: assertErr(types.ErrPacketSequenceOutOfOrder),
},
}
diff --git a/modules/core/23-commitment/types/merkle_test.go b/modules/core/23-commitment/types/merkle_test.go
index 74ea939abb9..17181358743 100644
--- a/modules/core/23-commitment/types/merkle_test.go
+++ b/modules/core/23-commitment/types/merkle_test.go
@@ -151,4 +151,12 @@ func TestApplyPrefix(t *testing.T) {
prefixedPath, err := types.ApplyPrefix(prefix, path)
require.NoError(t, err, "valid prefix returns error")
require.Len(t, prefixedPath.GetKeyPath(), 2, "unexpected key path length")
+
+ key0, err := prefixedPath.GetKey(0)
+ require.NoError(t, err, "get key 0 returns error")
+ require.Equal(t, prefix.KeyPrefix, key0, "key 0 does not match expected value")
+
+ key1, err := prefixedPath.GetKey(1)
+ require.NoError(t, err, "get key 1 returns error")
+ require.Equal(t, []byte(pathStr), key1, "key 1 does not match expected value")
}
diff --git a/modules/core/keeper/keeper.go b/modules/core/keeper/keeper.go
index 1b9bcb14de8..08ee5dc027e 100644
--- a/modules/core/keeper/keeper.go
+++ b/modules/core/keeper/keeper.go
@@ -8,13 +8,11 @@ import (
storetypes "cosmossdk.io/store/types"
"github.com/cosmos/cosmos-sdk/codec"
- paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper"
clientkeeper "github.com/cosmos/ibc-go/v8/modules/core/02-client/keeper"
clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
connectionkeeper "github.com/cosmos/ibc-go/v8/modules/core/03-connection/keeper"
- connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
channelkeeper "github.com/cosmos/ibc-go/v8/modules/core/04-channel/keeper"
portkeeper "github.com/cosmos/ibc-go/v8/modules/core/05-port/keeper"
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
@@ -41,18 +39,10 @@ type Keeper struct {
// NewKeeper creates a new ibc Keeper
func NewKeeper(
- cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace paramtypes.Subspace,
+ cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace types.ParamSubspace,
stakingKeeper clienttypes.StakingKeeper, upgradeKeeper clienttypes.UpgradeKeeper,
scopedKeeper capabilitykeeper.ScopedKeeper, authority string,
) *Keeper {
- // register paramSpace at top level keeper
- // set KeyTable if it has not already been set
- if !paramSpace.HasKeyTable() {
- keyTable := clienttypes.ParamKeyTable()
- keyTable.RegisterParamSet(&connectiontypes.Params{})
- paramSpace = paramSpace.WithKeyTable(keyTable)
- }
-
// panic if any of the keepers passed in is empty
if isEmpty(stakingKeeper) {
panic(errors.New("cannot initialize IBC keeper: empty staking keeper"))
diff --git a/modules/core/types/expected_interfaces.go b/modules/core/types/expected_interfaces.go
new file mode 100644
index 00000000000..c6aca313696
--- /dev/null
+++ b/modules/core/types/expected_interfaces.go
@@ -0,0 +1,11 @@
+package types
+
+import (
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
+)
+
+// ParamSubspace defines the expected Subspace interface for module parameters.
+type ParamSubspace interface {
+ GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet)
+}
diff --git a/modules/light-clients/06-solomachine/module.go b/modules/light-clients/06-solomachine/module.go
index fea0450e1fd..82aed1e2962 100644
--- a/modules/light-clients/06-solomachine/module.go
+++ b/modules/light-clients/06-solomachine/module.go
@@ -6,13 +6,18 @@ import (
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/spf13/cobra"
+ "cosmossdk.io/core/appmodule"
+
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/types/module"
)
-var _ module.AppModuleBasic = (*AppModuleBasic)(nil)
+var (
+ _ module.AppModuleBasic = (*AppModuleBasic)(nil)
+ _ appmodule.AppModule = (*AppModule)(nil)
+)
// AppModuleBasic defines the basic application module used by the solo machine light client.
// Only the RegisterInterfaces function needs to be implemented. All other function perform
@@ -24,6 +29,12 @@ func (AppModuleBasic) Name() string {
return ModuleName
}
+// IsOnePerModuleType implements the depinject.OnePerModuleType interface.
+func (AppModule) IsOnePerModuleType() {}
+
+// IsAppModule implements the appmodule.AppModule interface.
+func (AppModule) IsAppModule() {}
+
// RegisterLegacyAminoCodec performs a no-op. The solo machine client does not support amino.
func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {}
@@ -55,3 +66,13 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command {
func (AppModuleBasic) GetQueryCmd() *cobra.Command {
return nil
}
+
+// AppModule is the application module for the Solomachine client module
+type AppModule struct {
+ AppModuleBasic
+}
+
+// NewAppModule creates a new Solomachine client module
+func NewAppModule() AppModule {
+ return AppModule{}
+}
diff --git a/modules/light-clients/07-tendermint/client_state_test.go b/modules/light-clients/07-tendermint/client_state_test.go
index 10413f1228e..56a7c0925ed 100644
--- a/modules/light-clients/07-tendermint/client_state_test.go
+++ b/modules/light-clients/07-tendermint/client_state_test.go
@@ -71,6 +71,71 @@ func (suite *TendermintTestSuite) TestStatus() {
}
}
+func (suite *TendermintTestSuite) TestGetTimestampAtHeight() {
+ var (
+ path *ibctesting.Path
+ height exported.Height
+ )
+ expectedTimestamp := time.Unix(1, 0)
+
+ testCases := []struct {
+ name string
+ malleate func()
+ expErr error
+ }{
+ {
+ "success",
+ func() {},
+ nil,
+ },
+ {
+ "failure: consensus state not found for height",
+ func() {
+ clientState := path.EndpointA.GetClientState()
+ height = clientState.GetLatestHeight().Increment()
+ },
+ clienttypes.ErrConsensusStateNotFound,
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+ suite.Run(tc.name, func() {
+ suite.SetupTest()
+
+ path = ibctesting.NewPath(suite.chainA, suite.chainB)
+ suite.coordinator.SetupClients(path)
+
+ clientState := path.EndpointA.GetClientState()
+ height = clientState.GetLatestHeight()
+
+ store := suite.chainA.App.GetIBCKeeper().ClientKeeper.ClientStore(suite.chainA.GetContext(), path.EndpointA.ClientID)
+
+ // grab consensusState from store and update with a predefined timestamp
+ consensusState := path.EndpointA.GetConsensusState(height)
+ tmConsensusState, ok := consensusState.(*ibctm.ConsensusState)
+ suite.Require().True(ok)
+
+ tmConsensusState.Timestamp = expectedTimestamp
+ path.EndpointA.SetConsensusState(tmConsensusState, height)
+
+ tc.malleate()
+
+ timestamp, err := clientState.GetTimestampAtHeight(suite.chainA.GetContext(), store, suite.chainA.Codec, height)
+
+ expPass := tc.expErr == nil
+ if expPass {
+ suite.Require().NoError(err)
+
+ expectedTimestamp := uint64(expectedTimestamp.UnixNano())
+ suite.Require().Equal(expectedTimestamp, timestamp)
+ } else {
+ suite.Require().ErrorIs(err, tc.expErr)
+ }
+ })
+ }
+}
+
func (suite *TendermintTestSuite) TestValidate() {
testCases := []struct {
name string
diff --git a/modules/light-clients/07-tendermint/module.go b/modules/light-clients/07-tendermint/module.go
index 516d7368afe..3a59baf10b6 100644
--- a/modules/light-clients/07-tendermint/module.go
+++ b/modules/light-clients/07-tendermint/module.go
@@ -6,13 +6,18 @@ import (
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/spf13/cobra"
+ "cosmossdk.io/core/appmodule"
+
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/types/module"
)
-var _ module.AppModuleBasic = (*AppModuleBasic)(nil)
+var (
+ _ module.AppModuleBasic = (*AppModuleBasic)(nil)
+ _ appmodule.AppModule = (*AppModule)(nil)
+)
// AppModuleBasic defines the basic application module used by the tendermint light client.
// Only the RegisterInterfaces function needs to be implemented. All other function perform
@@ -24,6 +29,12 @@ func (AppModuleBasic) Name() string {
return ModuleName
}
+// IsOnePerModuleType implements the depinject.OnePerModuleType interface.
+func (AppModule) IsOnePerModuleType() {}
+
+// IsAppModule implements the appmodule.AppModule interface.
+func (AppModule) IsAppModule() {}
+
// RegisterLegacyAminoCodec performs a no-op. The Tendermint client does not support amino.
func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {}
@@ -55,3 +66,13 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command {
func (AppModuleBasic) GetQueryCmd() *cobra.Command {
return nil
}
+
+// AppModule is the application module for the Tendermint client module
+type AppModule struct {
+ AppModuleBasic
+}
+
+// NewAppModule creates a new Tendermint client module
+func NewAppModule() AppModule {
+ return AppModule{}
+}
diff --git a/proto/ibc/applications/fee/v1/tx.proto b/proto/ibc/applications/fee/v1/tx.proto
index cc037aed2e2..e59dddfd17a 100644
--- a/proto/ibc/applications/fee/v1/tx.proto
+++ b/proto/ibc/applications/fee/v1/tx.proto
@@ -91,7 +91,7 @@ message MsgPayPacketFee {
option (gogoproto.goproto_getters) = false;
// fee encapsulates the recv, ack and timeout fees associated with an IBC packet
- ibc.applications.fee.v1.Fee fee = 1 [(gogoproto.nullable) = false];
+ ibc.applications.fee.v1.Fee fee = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
// the source port unique identifier
string source_port_id = 2;
// the source channel unique identifer
@@ -113,9 +113,9 @@ message MsgPayPacketFeeAsync {
option (gogoproto.goproto_getters) = false;
// unique packet identifier comprised of the channel ID, port ID and sequence
- ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false];
+ ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
// the packet fee associated with a particular IBC packet
- PacketFee packet_fee = 2 [(gogoproto.nullable) = false];
+ PacketFee packet_fee = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
}
// MsgPayPacketFeeAsyncResponse defines the response type for the PayPacketFeeAsync rpc
diff --git a/proto/ibc/applications/transfer/v1/tx.proto b/proto/ibc/applications/transfer/v1/tx.proto
index 477865f177b..42c70d3bedc 100644
--- a/proto/ibc/applications/transfer/v1/tx.proto
+++ b/proto/ibc/applications/transfer/v1/tx.proto
@@ -36,14 +36,14 @@ message MsgTransfer {
// the channel by which the packet will be sent
string source_channel = 2;
// the tokens to be transferred
- cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false, (amino.encoding) = "legacy_coin"];
+ cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
// the sender address
string sender = 4;
// the recipient address on the destination chain
string receiver = 5;
// Timeout height relative to the current block height.
// The timeout is disabled when set to 0.
- ibc.core.client.v1.Height timeout_height = 6 [(gogoproto.nullable) = false];
+ ibc.core.client.v1.Height timeout_height = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
// Timeout timestamp in absolute nanoseconds since unix epoch.
// The timeout is disabled when set to 0.
uint64 timeout_timestamp = 7;
diff --git a/scripts/go-lint-all.sh b/scripts/go-lint-all.sh
new file mode 100755
index 00000000000..7a7883b36aa
--- /dev/null
+++ b/scripts/go-lint-all.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+set -e -o pipefail
+
+REPO_ROOT="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd )"
+export REPO_ROOT
+
+lint_module() {
+ local root="$1"
+ shift
+ cd "$(dirname "$root")" &&
+ echo "linting $(grep "^module" go.mod) [$(date -Iseconds -u)]" &&
+ golangci-lint run ./... -c "${REPO_ROOT}/.golangci.yml" "$@"
+}
+export -f lint_module
+
+find "${REPO_ROOT}" -type f -name go.mod -print0 |
+ xargs -0 -I{} bash -c 'lint_module "$@"' _ {} "$@"
\ No newline at end of file
diff --git a/scripts/go-mod-tidy-all.sh b/scripts/go-mod-tidy-all.sh
new file mode 100755
index 00000000000..72b2b9d0e2f
--- /dev/null
+++ b/scripts/go-mod-tidy-all.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+for modfile in $(find . -name go.mod); do
+ echo "Updating $modfile"
+ DIR=$(dirname $modfile)
+ (cd $DIR; go mod tidy)
+done
\ No newline at end of file
diff --git a/scripts/go-test-all.py b/scripts/go-test-all.py
new file mode 100755
index 00000000000..2ce44e7f455
--- /dev/null
+++ b/scripts/go-test-all.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+"""
+The purpose of this script is to run unit tests for all go modules in the current
+directory. It works by recursively searching for all go.mod files in the directory and
+subdirectories and then running `go test` on each of them.
+
+It is not intended to be run directly, but rather to be called by the Makefile.
+"""
+import os
+import subprocess
+
+def require_env_var(name):
+ """ Require an environment variable to be set. """
+ value = os.environ.get(name, None)
+ if value is None:
+ print(f"Error: {name} environment variable is not set")
+ exit(1)
+ return value
+
+def find_go_modules(directory):
+ """ Find all go.mod files in the current directory and subdirectories. """
+ go_mod_files = []
+ for root, _, files in os.walk(directory):
+ if 'go.mod' in files:
+ go_mod_files.append(root)
+ return go_mod_files
+
+def run_tests_for_module(module, *runargs):
+ """ Run the unit tests for the given module. """
+ os.chdir(module)
+
+ print(f"Running unit tests for {module}")
+
+ # add runargs to test_command
+ test_command = f'go test -mod=readonly {" ".join(runargs)} ./...'
+ result = subprocess.run(test_command, shell=True)
+ return result.returncode
+
+
+def run_tests(directory, *runargs):
+ """ Run the unit tests for all modules in dir. """
+ print("Starting unit tests")
+
+ # Find all go.mod files and get their directory names
+ go_modules = find_go_modules(directory)
+
+ exit_code = 0
+ for gomod in sorted(go_modules):
+ res = run_tests_for_module(gomod, *runargs)
+ if res != 0:
+ exit_code = res
+ exit(exit_code)
+
+if __name__ == '__main__':
+ # Get the environment variables given to us by the Makefile
+ ARGS = require_env_var('ARGS')
+ EXTRA_ARGS = require_env_var('EXTRA_ARGS')
+ TEST_PACKAGES = require_env_var('TEST_PACKAGES')
+
+ run_tests(os.getcwd(), ARGS, EXTRA_ARGS, TEST_PACKAGES)
diff --git a/scripts/init-simapp.sh b/scripts/init-simapp.sh
new file mode 100755
index 00000000000..722a86d2a52
--- /dev/null
+++ b/scripts/init-simapp.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+SIMD_BIN=${SIMD_BIN:=$(which simd 2>/dev/null)}
+
+if [ -z "$SIMD_BIN" ]; then echo "SIMD_BIN is not set. Make sure to run make install before"; exit 1; fi
+echo "using $SIMD_BIN"
+if [ -d "$($SIMD_BIN config home)" ]; then rm -r $($SIMD_BIN config home); fi
+$SIMD_BIN config set client chain-id simapp-1
+$SIMD_BIN config set client keyring-backend test
+$SIMD_BIN config set app api.enable true
+$SIMD_BIN keys add alice
+$SIMD_BIN keys add bob
+$SIMD_BIN init test --chain-id simapp-1
+$SIMD_BIN genesis add-genesis-account alice 5000000000stake --keyring-backend test
+$SIMD_BIN genesis add-genesis-account bob 5000000000stake --keyring-backend test
+$SIMD_BIN genesis gentx alice 1000000stake --chain-id simapp-1
+$SIMD_BIN genesis collect-gentxs
\ No newline at end of file
diff --git a/testing/mock/mock.go b/testing/mock/mock.go
index e23591941e8..89ca0db03a7 100644
--- a/testing/mock/mock.go
+++ b/testing/mock/mock.go
@@ -7,6 +7,8 @@ import (
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/spf13/cobra"
+ "cosmossdk.io/core/appmodule"
+
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
@@ -47,7 +49,12 @@ var (
MockApplicationCallbackError error = &applicationCallbackError{}
)
-var _ porttypes.IBCModule = (*IBCModule)(nil)
+var (
+ _ module.AppModuleBasic = (*AppModuleBasic)(nil)
+ _ appmodule.AppModule = (*AppModule)(nil)
+
+ _ porttypes.IBCModule = (*IBCModule)(nil)
+)
// Expected Interface
// PortKeeper defines the expected IBC port keeper
@@ -64,6 +71,12 @@ func (AppModuleBasic) Name() string {
return ModuleName
}
+// IsOnePerModuleType implements the depinject.OnePerModuleType interface.
+func (AppModule) IsOnePerModuleType() {}
+
+// IsAppModule implements the appmodule.AppModule interface.
+func (AppModule) IsAppModule() {}
+
// RegisterLegacyAminoCodec implements AppModuleBasic interface.
func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {}
diff --git a/testing/simapp/app.go b/testing/simapp/app.go
index 5e20cc30fdd..7c63fc97340 100644
--- a/testing/simapp/app.go
+++ b/testing/simapp/app.go
@@ -123,6 +123,7 @@ import (
ibc "github.com/cosmos/ibc-go/v8/modules/core"
ibcclient "github.com/cosmos/ibc-go/v8/modules/core/02-client"
ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
+ ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported"
ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper"
@@ -596,8 +597,8 @@ func NewSimApp(
transfer.NewAppModule(app.TransferKeeper),
ibcfee.NewAppModule(app.IBCFeeKeeper),
ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper),
- ibctm.AppModuleBasic{},
- solomachine.AppModuleBasic{},
+ ibctm.NewAppModule(),
+ solomachine.NewAppModule(),
mockModule,
)
@@ -892,11 +893,8 @@ func (app *SimApp) AutoCliOpts() autocli.AppOptions {
}
return autocli.AppOptions{
- Modules: modules,
- ModuleOptions: runtimeservices.ExtractAutoCLIOptions(app.ModuleManager.Modules),
- AddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()),
- ValidatorAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix()),
- ConsensusAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()),
+ Modules: modules,
+ ModuleOptions: runtimeservices.ExtractAutoCLIOptions(app.ModuleManager.Modules),
}
}
@@ -1007,12 +1005,13 @@ func BlockedAddresses() map[string]bool {
func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper {
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
- // TODO: ibc module subspaces can be removed after migration of params
- // https://github.com/cosmos/ibc-go/issues/2010
- paramsKeeper.Subspace(ibctransfertypes.ModuleName)
- paramsKeeper.Subspace(ibcexported.ModuleName)
- paramsKeeper.Subspace(icacontrollertypes.SubModuleName)
- paramsKeeper.Subspace(icahosttypes.SubModuleName)
+ // register the key tables for legacy param subspaces
+ keyTable := ibcclienttypes.ParamKeyTable()
+ keyTable.RegisterParamSet(&ibcconnectiontypes.Params{})
+ paramsKeeper.Subspace(ibcexported.ModuleName).WithKeyTable(keyTable)
+ paramsKeeper.Subspace(ibctransfertypes.ModuleName).WithKeyTable(ibctransfertypes.ParamKeyTable())
+ paramsKeeper.Subspace(icacontrollertypes.SubModuleName).WithKeyTable(icacontrollertypes.ParamKeyTable())
+ paramsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable())
return paramsKeeper
}
diff --git a/testing/simapp/simd/cmd/root.go b/testing/simapp/simd/cmd/root.go
index 77377fcabc2..58990794d06 100644
--- a/testing/simapp/simd/cmd/root.go
+++ b/testing/simapp/simd/cmd/root.go
@@ -9,6 +9,7 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
+ "cosmossdk.io/client/v2/autocli"
"cosmossdk.io/log"
confixcmd "cosmossdk.io/tools/confix/cmd"
@@ -21,6 +22,8 @@ import (
"github.com/cosmos/cosmos-sdk/client/rpc"
"github.com/cosmos/cosmos-sdk/client/snapshot"
"github.com/cosmos/cosmos-sdk/codec"
+ addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
+ "github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/cosmos/cosmos-sdk/server"
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
@@ -84,20 +87,22 @@ func NewRootCmd() *cobra.Command {
}
// This needs to go after ReadFromClientConfig, as that function
- // sets the RPC client needed for SIGN_MODE_TEXTUAL.
- enabledSignModes := append(tx.DefaultSignModes, signing.SignMode_SIGN_MODE_TEXTUAL) //nolint:gocritic // we know we aren't appending to the same slice
- txConfigOpts := tx.ConfigOptions{
- EnabledSignModes: enabledSignModes,
- TextualCoinMetadataQueryFn: txmodule.NewGRPCCoinMetadataQueryFn(initClientCtx),
+ // sets the RPC client needed for SIGN_MODE_TEXTUAL. This sign mode
+ // is only available if the client is online.
+ if !initClientCtx.Offline {
+ txConfigOpts := tx.ConfigOptions{
+ EnabledSignModes: append(tx.DefaultSignModes, signing.SignMode_SIGN_MODE_TEXTUAL),
+ TextualCoinMetadataQueryFn: txmodule.NewGRPCCoinMetadataQueryFn(initClientCtx),
+ }
+ txConfigWithTextual, err := tx.NewTxConfigWithOptions(
+ codec.NewProtoCodec(encodingConfig.InterfaceRegistry),
+ txConfigOpts,
+ )
+ if err != nil {
+ return err
+ }
+ initClientCtx = initClientCtx.WithTxConfig(txConfigWithTextual)
}
- txConfigWithTextual, err := tx.NewTxConfigWithOptions(
- codec.NewProtoCodec(encodingConfig.InterfaceRegistry),
- txConfigOpts,
- )
- if err != nil {
- return err
- }
- initClientCtx = initClientCtx.WithTxConfig(txConfigWithTextual)
if err := client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil {
return err
@@ -112,13 +117,38 @@ func NewRootCmd() *cobra.Command {
initRootCmd(rootCmd, encodingConfig, tempApp.BasicModuleManager)
- if err := tempApp.AutoCliOpts().EnhanceRootCommand(rootCmd); err != nil {
+ autoCliOpts, err := enrichAutoCliOpts(tempApp.AutoCliOpts(), initClientCtx)
+ if err != nil {
+ panic(err)
+ }
+
+ if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil {
panic(err)
}
return rootCmd
}
+func enrichAutoCliOpts(autoCliOpts autocli.AppOptions, clientCtx client.Context) (autocli.AppOptions, error) {
+ autoCliOpts.AddressCodec = addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix())
+ autoCliOpts.ValidatorAddressCodec = addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix())
+ autoCliOpts.ConsensusAddressCodec = addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix())
+
+ var err error
+ clientCtx, err = config.ReadFromClientConfig(clientCtx)
+ if err != nil {
+ return autocli.AppOptions{}, err
+ }
+
+ autoCliOpts.ClientCtx = clientCtx
+ autoCliOpts.Keyring, err = keyring.NewAutoCLIKeyring(clientCtx.Keyring)
+ if err != nil {
+ return autocli.AppOptions{}, err
+ }
+
+ return autoCliOpts, nil
+}
+
// initCometBFTConfig helps to override default CometBFT Config values.
// return cmtcfg.DefaultConfig if no custom configuration is required for the application.
func initCometBFTConfig() *cmtcfg.Config {
@@ -257,7 +287,7 @@ func txCommand() *cobra.Command {
authcmd.GetBroadcastCommand(),
authcmd.GetEncodeCommand(),
authcmd.GetDecodeCommand(),
- authcmd.GetAuxToFeeCommand(),
+ authcmd.GetSimulateCmd(),
)
return cmd
diff --git a/testing/utils.go b/testing/utils.go
index 2123d99f271..907dae0f0e7 100644
--- a/testing/utils.go
+++ b/testing/utils.go
@@ -2,6 +2,7 @@ package ibctesting
import (
"fmt"
+ "math/rand"
"testing"
"github.com/stretchr/testify/require"
@@ -49,3 +50,12 @@ func VoteAndCheckProposalStatus(endpoint *Endpoint, proposalID uint64) error {
}
return nil
}
+
+// GenerateString generates a random string of the given length in bytes
+func GenerateString(length uint) string {
+ bytes := make([]byte, length)
+ for i := range bytes {
+ bytes[i] = charset[rand.Intn(len(charset))]
+ }
+ return string(bytes)
+}
diff --git a/testing/values.go b/testing/values.go
index 2741b1a5fed..115f3b39281 100644
--- a/testing/values.go
+++ b/testing/values.go
@@ -43,7 +43,8 @@ const (
Title = "title"
Description = "description"
- LongString = "LoremipsumdolorsitameconsecteturadipiscingeliseddoeiusmodtemporincididuntutlaboreetdoloremagnaaliquUtenimadminimveniamquisnostrudexercitationullamcolaborisnisiutaliquipexeacommodoconsequDuisauteiruredolorinreprehenderitinvoluptateelitsseillumoloreufugiatnullaariaturEcepteurintoccaectupidatatonroidentuntnulpauifficiaeseruntmollitanimidestlaborum"
+ // character set used for generating a random string in GenerateString
+ charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
)
var (