From f44b60c92837b52d9f437e68cc941d25621485c0 Mon Sep 17 00:00:00 2001 From: son trinh Date: Mon, 15 Jan 2024 20:47:22 +0700 Subject: [PATCH 1/8] feat(statemachine)!: Add allow all client wildcard to AllowedClients param (#5429) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add wildcard allow all client * minor * fix lint * minor and doc update * review comments * if allow all clients is present, no other client types should be in the allow list * clean up code to allow wasm client type * remove unused variable * Fix build failures, tweak err message. * modify allow clients list in genesis with feature releases * chore: adding v8.1 to minor versions in e2e feat releases struct * update docs * chore: doc lint fixes --------- Co-authored-by: GnaD <89174180+GNaD13@users.noreply.github.com> Co-authored-by: Du Nguyen <61083705+lichdu29@users.noreply.github.com> Co-authored-by: Carlos Rodriguez Co-authored-by: DimitrisJim Co-authored-by: Damian Nolan Co-authored-by: Đỗ Việt Hoàng Co-authored-by: Charly (cherry picked from commit d5949b1a722eafc2eff6508fbdf757425949611a) # Conflicts: # docs/docs/03-light-clients/04-wasm/03-integration.md # e2e/tests/wasm/grandpa_test.go # e2e/testsuite/testconfig.go # e2e/testvalues/values.go # modules/core/02-client/types/params.go # modules/core/02-client/types/params_test.go # modules/light-clients/08-wasm/keeper/keeper_test.go # modules/light-clients/08-wasm/testing/wasm_endpoint.go # modules/light-clients/08-wasm/types/types_test.go --- docs/docs/01-ibc/11-troubleshooting.md | 2 +- .../01-developer-guide/09-setup.md | 2 + .../02-localhost/02-integration.md | 9 +- .../04-wasm/03-integration.md | 368 +++++++++ docs/params/params.md | 17 +- e2e/tests/wasm/grandpa_test.go | 768 ++++++++++++++++++ e2e/testsuite/testconfig.go | 725 +++++++++++++++++ e2e/testvalues/values.go | 101 +++ modules/core/02-client/types/keys.go | 4 + modules/core/02-client/types/params.go | 27 +- modules/core/02-client/types/params_test.go | 7 + .../08-wasm/keeper/keeper_test.go | 326 ++++++++ .../08-wasm/testing/wasm_endpoint.go | 52 ++ .../light-clients/08-wasm/types/types_test.go | 131 +++ 14 files changed, 2523 insertions(+), 16 deletions(-) create mode 100644 docs/docs/03-light-clients/04-wasm/03-integration.md create mode 100644 e2e/tests/wasm/grandpa_test.go create mode 100644 e2e/testsuite/testconfig.go create mode 100644 e2e/testvalues/values.go create mode 100644 modules/light-clients/08-wasm/keeper/keeper_test.go create mode 100644 modules/light-clients/08-wasm/testing/wasm_endpoint.go create mode 100644 modules/light-clients/08-wasm/types/types_test.go diff --git a/docs/docs/01-ibc/11-troubleshooting.md b/docs/docs/01-ibc/11-troubleshooting.md index ba9dde39256..4080f3b449b 100644 --- a/docs/docs/01-ibc/11-troubleshooting.md +++ b/docs/docs/01-ibc/11-troubleshooting.md @@ -12,4 +12,4 @@ slug: /ibc/troubleshooting 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. +Unless the client type is present in this array or the `AllowAllClients` wildcard (`"*"`) is used, all usage of clients of this type will be prevented. diff --git a/docs/docs/03-light-clients/01-developer-guide/09-setup.md b/docs/docs/03-light-clients/01-developer-guide/09-setup.md index f3bba760ec2..7ccbf4a5833 100644 --- a/docs/docs/03-light-clients/01-developer-guide/09-setup.md +++ b/docs/docs/03-light-clients/01-developer-guide/09-setup.md @@ -131,3 +131,5 @@ where `proposal.json` contains: "deposit": "100stake" } ``` + +If the `AllowedClients` list contains a single element that is equal to the wildcard `"*"`, then all client types are allowed and it is thus not necessary to submit a governance proposal to update the parameter. diff --git a/docs/docs/03-light-clients/02-localhost/02-integration.md b/docs/docs/03-light-clients/02-localhost/02-integration.md index 01f77fce67e..e1fc491a332 100644 --- a/docs/docs/03-light-clients/02-localhost/02-integration.md +++ b/docs/docs/03-light-clients/02-localhost/02-integration.md @@ -10,11 +10,10 @@ slug: /ibc/light-clients/localhost/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. +The localhost client is implicitly enabled by using the `AllowAllClients` wildcard (`"*"`) in the 02-client submodule default value for param [`allowed_clients`](https://github.com/cosmos/ibc-go/blob/v7.0.0/proto/ibc/core/client/v1/client.proto#L102). ```go -var ( - // DefaultAllowedClients are the default clients for the AllowedClients parameter. - DefaultAllowedClients = []string{exported.Solomachine, exported.Tendermint, exported.Localhost} -) +// DefaultAllowedClients are the default clients for the AllowedClients parameter. +// By default it allows all client types. +var DefaultAllowedClients = []string{AllowAllClients} ``` diff --git a/docs/docs/03-light-clients/04-wasm/03-integration.md b/docs/docs/03-light-clients/04-wasm/03-integration.md new file mode 100644 index 00000000000..3827203e6cd --- /dev/null +++ b/docs/docs/03-light-clients/04-wasm/03-integration.md @@ -0,0 +1,368 @@ +--- +title: Integration +sidebar_label: Integration +sidebar_position: 3 +slug: /ibc/light-clients/wasm/integration +--- + +# Integration + +Learn how to integrate the `08-wasm` module in a chain binary and about the recommended approaches depending on whether the [`x/wasm` module](https://github.com/CosmWasm/wasmd/tree/main/x/wasm) is already used in the chain. The following document only applies for Cosmos SDK chains. + +## `app.go` setup + +The sample code below shows the relevant integration points in `app.go` required to setup the `08-wasm` module in a chain binary. Since `08-wasm` is a light client module itself, please check out as well the section [Integrating light clients](../../01-ibc/02-integration.md#integrating-light-clients) for more information: + +```go +// app.go +import ( + ... + "github.com/cosmos/cosmos-sdk/runtime" + + cmtos "github.com/cometbft/cometbft/libs/os" + + ibcwasm "github.com/cosmos/ibc-go/modules/light-clients/08-wasm" + ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" + ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + ... +) + +... + +// Register the AppModule for the 08-wasm module +ModuleBasics = module.NewBasicManager( + ... + ibcwasm.AppModuleBasic{}, + ... +) + +// Add 08-wasm Keeper +type SimApp struct { + ... + WasmClientKeeper ibcwasmkeeper.Keeper + ... +} + +func NewSimApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + loadLatest bool, + appOpts servertypes.AppOptions, + baseAppOptions ...func(*baseapp.BaseApp), +) *SimApp { + ... + keys := sdk.NewKVStoreKeys( + ... + ibcwasmtypes.StoreKey, + ) + + // Instantiate 08-wasm's keeper + // This sample code uses a constructor function that + // accepts a pointer to an existing instance of Wasm VM. + // This is the recommended approach when the chain + // also uses `x/wasm`, and then the Wasm VM instance + // can be shared. + app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( + appCodec, + runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), + app.IBCKeeper.ClientKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmVM, + app.GRPCQueryRouter(), + ) + app.ModuleManager = module.NewManager( + // SDK app modules + ... + ibcwasm.NewAppModule(app.WasmClientKeeper), + ) + app.ModuleManager.SetOrderBeginBlockers( + ... + ibcwasmtypes.ModuleName, + ... + ) + app.ModuleManager.SetOrderEndBlockers( + ... + ibcwasmtypes.ModuleName, + ... + ) + genesisModuleOrder := []string{ + ... + ibcwasmtypes.ModuleName, + ... + } + app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) + app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) + ... + + // initialize BaseApp + app.SetInitChainer(app.InitChainer) + ... + + // must be before Loading version + if manager := app.SnapshotManager(); manager != nil { + err := manager.RegisterExtensions( + ibcwasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.WasmClientKeeper), + ) + if err != nil { + panic(fmt.Errorf("failed to register snapshot extension: %s", err)) + } + } + ... + + if loadLatest { + ... + + ctx := app.BaseApp.NewUncachedContext(true, cmtproto.Header{}) + + // Initialize pinned codes in wasmvm as they are not persisted there + if err := ibcwasmkeeper.InitializePinnedCodes(ctx); err != nil { + cmtos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) + } + } +} +``` + +## Keeper instantiation + +When it comes to instantiating `08-wasm`'s keeper there are two recommended ways of doing it. Choosing one or the other will depend on whether the chain already integrates [`x/wasm`](https://github.com/CosmWasm/wasmd/tree/main/x/wasm) or not. + +### If `x/wasm` is present + +If the chain where the module is integrated uses `x/wasm` then we recommend that both `08-wasm` and `x/wasm` share the same Wasm VM instance. Having two separate Wasm VM instances is still possible, but care should be taken to make sure that both instances do not share the directory when the VM stores blobs and various caches, otherwise unexpected behaviour is likely to happen. + +In order to share the Wasm VM instance please follow the guideline below. Please note that this requires `x/wasm`v0.41 or above. + +- Instantiate the Wasm VM in `app.go` with the parameters of your choice. +- [Create an `Option` with this Wasm VM instance](https://github.com/CosmWasm/wasmd/blob/db93d7b6c7bb6f4a340d74b96a02cec885729b59/x/wasm/keeper/options.go#L21-L25). +- Add the option created in the previous step to a slice and [pass it to the `x/wasm NewKeeper` constructor function](https://github.com/CosmWasm/wasmd/blob/db93d7b6c7bb6f4a340d74b96a02cec885729b59/x/wasm/keeper/keeper_cgo.go#L36). +- Pass the pointer to the Wasm VM instance to `08-wasm` [NewKeeperWithVM constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47). + +The code to set this up would look something like this: + +```go +// app.go +import ( + ... + "github.com/cosmos/cosmos-sdk/runtime" + + wasmvm "github.com/CosmWasm/wasmvm" + ibcwasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + ... +) + +... + +// instantiate the Wasm VM with the chosen parameters +wasmer, err := wasmvm.NewVM( + dataDir, + availableCapabilities, + contractMemoryLimit, // default of 32 + contractDebugMode, + memoryCacheSize, +) +if err != nil { + panic(err) +} + +// create an Option slice (or append to an existing one) +// with the option to use a custom Wasm VM instance +wasmOpts = []ibcwasmkeeper.Option{ + ibcwasmkeeper.WithWasmEngine(wasmer), +} + +// the keeper will use the provided Wasm VM instance, +// instead of instantiating a new one +app.WasmKeeper = ibcwasmkeeper.NewKeeper( + appCodec, + keys[ibcwasmtypes.StoreKey], + app.AccountKeeper, + app.BankKeeper, + app.StakingKeeper, + distrkeeper.NewQuerier(app.DistrKeeper), + app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + scopedWasmKeeper, + app.TransferKeeper, + app.MsgServiceRouter(), + app.GRPCQueryRouter(), + wasmDir, + wasmConfig, + availableCapabilities, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmOpts..., +) + +app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( + appCodec, + runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), + app.IBCKeeper.ClientKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmer, // pass the Wasm VM instance to `08-wasm` keeper constructor + app.GRPCQueryRouter(), +) +... +``` + +### If `x/wasm` is not present + +If the chain does not use [`x/wasm`](https://github.com/CosmWasm/wasmd/tree/main/x/wasm), even though it is still possible to use the method above from the previous section +(e.g. instantiating a Wasm VM in app.go an pass it to 08-wasm's [`NewKeeperWithVM` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47), since there would be no need in this case to share the Wasm VM instance with another module, you can use the [`NewKeeperWithConfig`` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L88-L96) and provide the Wasm VM configuration parameters of your choice instead. A Wasm VM instance will be created in`NewKeeperWithConfig`. The parameters that can set are: + +- `DataDir` is the [directory for Wasm blobs and various caches](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L25). In `wasmd` this is set to the [`wasm` folder under the home directory](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L578). +- `SupportedCapabilities` is a comma separated [list of capabilities supported by the chain](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L26). [`wasmd` sets this to all the available capabilities](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L586), but 08-wasm only requires `iterator`. +- `MemoryCacheSize` sets [the size in MiB of an in-memory cache for e.g. module caching](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L29C16-L29C104). It is not consensus-critical and should be defined on a per-node basis, often in the range 100 to 1000 MB. [`wasmd` reads this value of](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L579). Default value is 256. +- `ContractDebugMode` is a [flag to enable/disable printing debug logs from the contract to STDOUT](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L28). This should be false in production environments. Default value is false. + +Another configuration parameter of the Wasm VM is the contract memory limit (in MiB), which is [set to 32](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L8), [following the example of `wasmd`](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/x/wasm/keeper/keeper.go#L32-L34). This parameter is not configurable by users of `08-wasm`. + +The following sample code shows how the keeper would be constructed using this method: + +```go +// app.go +import ( + ... + "github.com/cosmos/cosmos-sdk/runtime" + + ibcwasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + ... +) +... +wasmConfig := ibcwasmtypes.WasmConfig{ + DataDir: "ibc_08-wasm_client_data", + SupportedCapabilities: "iterator", + ContractDebugMode: false, +} +app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( + appCodec, + runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), + app.IBCKeeper.ClientKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmConfig, + app.GRPCQueryRouter(), +) +``` + +Check out also the [`WasmConfig` type definition](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L21-L31) for more information on each of the configurable parameters. Some parameters allow node-level configurations. There is additionally the function [`DefaultWasmConfig`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L36-L42) available that returns a configuration with the default values. + +### Options + +The `08-wasm` module comes with an options API inspired by the one in `x/wasm`. +Currently the only option available is the `WithQueryPlugins` option, which allows registration of custom query plugins for the `08-wasm` module. The use of this API is optional and it is only required if the chain wants to register custom query plugins for the `08-wasm` module. + +#### `WithQueryPlugins` + +By default, the `08-wasm` module does not support any queries. However, it is possible to register custom query plugins for [`QueryRequest::Custom`](https://github.com/CosmWasm/cosmwasm/blob/v1.5.0/packages/std/src/query/mod.rs#L45) and [`QueryRequest::Stargate`](https://github.com/CosmWasm/cosmwasm/blob/v1.5.0/packages/std/src/query/mod.rs#L54-L61). + +Assuming that the keeper is not yet instantiated, the following sample code shows how to register query plugins for the `08-wasm` module. + +We first construct a [`QueryPlugins`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/querier.go#L78-L87) object with the desired query plugins: + +```go +queryPlugins := ibcwasmtypes.QueryPlugins { + Custom: MyCustomQueryPlugin(), + // `myAcceptList` is a `[]string` containing the list of gRPC query paths that the chain wants to allow for the `08-wasm` module to query. + // These queries must be registered in the chain's gRPC query router, be deterministic, and track their gas usage. + // The `AcceptListStargateQuerier` function will return a query plugin that will only allow queries for the paths in the `myAcceptList`. + // The query responses are encoded in protobuf unlike the implementation in `x/wasm`. + Stargate: ibcwasmtypes.AcceptListStargateQuerier(myAcceptList), +} +``` + +You may leave any of the fields in the `QueryPlugins` object as `nil` if you do not want to register a query plugin for that query type. + +Then, we pass the `QueryPlugins` object to the `WithQueryPlugins` option: + +```go +querierOption := ibcwasmkeeper.WithQueryPlugins(&queryPlugins) +``` + +Finally, we pass the option to the `NewKeeperWithConfig` or `NewKeeperWithVM` constructor function during [Keeper instantiation](#keeper-instantiation): + +```diff +app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( + appCodec, + runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), + app.IBCKeeper.ClientKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmConfig, + app.GRPCQueryRouter(), ++ querierOption, +) +``` + +```diff +app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( + appCodec, + runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), + app.IBCKeeper.ClientKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmer, // pass the Wasm VM instance to `08-wasm` keeper constructor + app.GRPCQueryRouter(), ++ querierOption, +) +``` + +## Updating `AllowedClients` + +If the chain's 02-client submodule parameter `AllowedClients` contains the single wildcard `"*"` element, then it is not necessary to do anything in order to allow the creation of `08-wasm` clients. However, if the parameter contains a list of client types (e.g. `["06-solomachine", "07-tendermint"]`), then in order to use the `08-wasm` module chains must update the [`AllowedClients` parameter](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/client.proto#L64) of core IBC. This can be configured directly in the application upgrade handler with the sample code below: + +```go +import ( + ... + ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + ... +) + +... + +func CreateWasmUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + clientKeeper clientkeeper.Keeper, +) upgradetypes.UpgradeHandler { + return func(ctx context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + // explicitly update the IBC 02-client params, adding the wasm client type + params := clientKeeper.GetParams(ctx) + params.AllowedClients = append(params.AllowedClients, ibcwasmtypes.Wasm) + clientKeeper.SetParams(ctx, params) + + return mm.RunMigrations(ctx, configurator, vm) + } +} +``` + +Or alternatively the parameter can be updated via a governance proposal (see at the bottom of section [`Creating clients`](../01-developer-guide/09-setup.md#creating-clients) for an example of how to do this). + +## Adding the module to the store + +As part of the upgrade migration you must also add the module to the upgrades store. + +```go +func (app SimApp) RegisterUpgradeHandlers() { + + ... + + if upgradeInfo.Name == UpgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{ + Added: []string{ + ibcwasmtypes.ModuleName, + }, + } + + // configure store loader that checks if version == upgradeHeight and applies store upgrades + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) + } +} +``` + +## Adding snapshot support + +In order to use the `08-wasm` module chains are required to register the `WasmSnapshotter` extension in the snapshot manager. This snapshotter takes care of persisting the external state, in the form of contract code, of the Wasm VM instance to disk when the chain is snapshotted. [This code](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/testing/simapp/app.go#L775-L782) should be placed in `NewSimApp` function in `app.go`. + +## Pin byte codes at start + +Wasm byte codes should be pinned to the WasmVM cache on every application start, therefore [this code](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/testing/simapp/app.go#L825-L830) should be placed in `NewSimApp` function in `app.go`. diff --git a/docs/params/params.md b/docs/params/params.md index f588e09f413..d67191606d1 100644 --- a/docs/params/params.md +++ b/docs/params/params.md @@ -8,14 +8,17 @@ slug: /params.md The 02-client submodule contains the following parameters: -| Key | Type | Default Value | -| ---------------- | -------- | ------------------------------------------------- | -| `AllowedClients` | []string | `"06-solomachine","07-tendermint","09-localhost"` | +| Key | Type | Default Value | +| ---------------- | -------- | ------------- | +| `AllowedClients` | []string | `"*"` | ### AllowedClients -The allowed clients parameter defines an allowlist of client types supported by the chain. A client -that is not registered on this list will fail upon creation or on genesis validation. Note that, -since the client type is an arbitrary string, chains they must not register two light clients which -return the same value for the `ClientType()` function, otherwise the allowlist check can be +The allowed clients parameter defines an allow list of client types supported by the chain. The +default value is a single-element list containing the `AllowAllClients` wildcard (`"*"`). When the +wilcard is used, then all client types are supported by default. Alternatively, the parameter +may be set with a list of client types (e.g. `"06-solomachine","07-tendermint","09-localhost"`). +A client type that is not registered on this list will fail upon creation or on genesis validation. +Note that, since the client type is an arbitrary string, chains must not register two light clients +which return the same value for the `ClientType()` function, otherwise the allow list check can be bypassed. diff --git a/e2e/tests/wasm/grandpa_test.go b/e2e/tests/wasm/grandpa_test.go new file mode 100644 index 00000000000..b67a4c930e7 --- /dev/null +++ b/e2e/tests/wasm/grandpa_test.go @@ -0,0 +1,768 @@ +//go:build !test_e2e + +package wasm + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "fmt" + "io" + "os" + "testing" + "time" + + "github.com/strangelove-ventures/interchaintest/v8" + "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" + "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v8/testutil" + testifysuite "github.com/stretchr/testify/suite" + + sdkmath "cosmossdk.io/math" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + "github.com/cosmos/ibc-go/e2e/testsuite" + "github.com/cosmos/ibc-go/e2e/testvalues" + wasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibctesting "github.com/cosmos/ibc-go/v8/testing" +) + +const ( + composable = "composable" + simd = "simd" + wasmSimdImage = "ghcr.io/cosmos/ibc-go-wasm-simd" + + defaultWasmClientID = "08-wasm-0" +) + +func TestGrandpaTestSuite(t *testing.T) { + // this test suite only works with the hyperspace relayer, for now hard code this here. + // this will enforce that the hyperspace relayer is used in CI. + t.Setenv(testsuite.RelayerIDEnv, "hyperspace") + + // TODO: this value should be passed in via the config file / CI, not hard coded in the test. + // This configuration can be handled in https://github.com/cosmos/ibc-go/issues/4697 + if testsuite.IsCI() && !testsuite.IsFork() { + t.Setenv(testsuite.ChainImageEnv, wasmSimdImage) + } + + // wasm tests require a longer voting period to account for the time it takes to upload a contract. + testvalues.VotingPeriod = time.Minute * 5 + + validateTestConfig() + testifysuite.Run(t, new(GrandpaTestSuite)) +} + +type GrandpaTestSuite struct { + testsuite.E2ETestSuite +} + +// TestMsgTransfer_Succeeds_GrandpaContract features +// * sets up a Polkadot parachain +// * sets up a Cosmos chain +// * sets up the Hyperspace relayer +// * Funds a user wallet on both chains +// * Pushes a wasm client contract to the Cosmos chain +// * create client, connection, and channel in relayer +// * start relayer +// * send transfer over ibc +func (s *GrandpaTestSuite) TestMsgTransfer_Succeeds_GrandpaContract() { + ctx := context.Background() + t := s.T() + + chainA, chainB := s.GetGrandpaTestChains() + + polkadotChain := chainA.(*polkadot.PolkadotChain) + cosmosChain := chainB.(*cosmos.CosmosChain) + + // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. + r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { + options.SkipPathCreation = true + }) + + s.InitGRPCClients(cosmosChain) + + cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + + file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") + s.Require().NoError(err) + + checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) + + s.Require().NotEmpty(checksum, "checksum was empty but should not have been") + + eRep := s.GetRelayerExecReporter() + + // Set client contract hash in cosmos chain config + err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) + s.Require().NoError(err) + + // Ensure parachain has started (starts 1 session/epoch after relay chain) + err = testutil.WaitForBlocks(ctx, 1, polkadotChain) + s.Require().NoError(err, "polkadot chain failed to make blocks") + + // Fund users on both cosmos and parachain, mints Asset 1 for Alice + fundAmount := int64(12_333_000_000_000) + polkadotUser, cosmosUser := s.fundUsers(ctx, fundAmount, polkadotChain, cosmosChain) + + // TODO: this can be refactored to broadcast a MsgTransfer instead of CLI. + // https://github.com/cosmos/ibc-go/issues/4963 + amountToSend := int64(1_770_000) + transfer := ibc.WalletAmount{ + Address: polkadotUser.FormattedAddress(), + Denom: cosmosChain.Config().Denom, + Amount: sdkmath.NewInt(amountToSend), + } + + pathName := s.GetPathName(0) + + err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) + s.Require().NoError(err) + + // Create new clients + err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness + s.Require().NoError(err) + + // Create a new connection + err = r.CreateConnections(ctx, eRep, pathName) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // Create a new channel & get channels from each chain + err = r.CreateChannel(ctx, eRep, pathName, ibc.DefaultChannelOpts()) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // Start relayer + s.Require().NoError(r.StartRelayer(ctx, eRep, pathName)) + + t.Run("send successful IBC transfer from Cosmos to Polkadot parachain", func(t *testing.T) { + // Send 1.77 stake from cosmosUser to parachainUser + tx, err := cosmosChain.SendIBCTransfer(ctx, "channel-0", cosmosUser.KeyName(), transfer, ibc.TransferOptions{}) + s.Require().NoError(tx.Validate(), "source ibc transfer tx is invalid") + s.Require().NoError(err) + // verify token balance for cosmos user has decreased + balance, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) + s.Require().NoError(err) + s.Require().Equal(balance, sdkmath.NewInt(fundAmount-amountToSend), "unexpected cosmos user balance after first tx") + err = testutil.WaitForBlocks(ctx, 15, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // Verify tokens arrived on parachain user + parachainUserStake, err := polkadotChain.GetIbcBalance(ctx, string(polkadotUser.Address()), 2) + s.Require().NoError(err) + s.Require().Equal(amountToSend, parachainUserStake.Amount.Int64(), "unexpected parachain user balance after first tx") + }) + + t.Run("send two successful IBC transfers from Polkadot parachain to Cosmos, first with ibc denom, second with parachain denom", func(t *testing.T) { + // Send 1.16 stake from parachainUser to cosmosUser + amountToReflect := int64(1_160_000) + reflectTransfer := ibc.WalletAmount{ + Address: cosmosUser.FormattedAddress(), + Denom: "2", // stake + Amount: sdkmath.NewInt(amountToReflect), + } + _, err := polkadotChain.SendIBCTransfer(ctx, "channel-0", polkadotUser.KeyName(), reflectTransfer, ibc.TransferOptions{}) + s.Require().NoError(err) + + // Send 1.88 "UNIT" from Alice to cosmosUser + amountUnits := sdkmath.NewInt(1_880_000_000_000) + unitTransfer := ibc.WalletAmount{ + Address: cosmosUser.FormattedAddress(), + Denom: "1", // UNIT + Amount: amountUnits, + } + _, err = polkadotChain.SendIBCTransfer(ctx, "channel-0", "alice", unitTransfer, ibc.TransferOptions{}) + s.Require().NoError(err) + + // Wait for MsgRecvPacket on cosmos chain + finalStakeBal := sdkmath.NewInt(fundAmount - amountToSend + amountToReflect) + err = cosmos.PollForBalance(ctx, cosmosChain, 20, ibc.WalletAmount{ + Address: cosmosUser.FormattedAddress(), + Denom: cosmosChain.Config().Denom, + Amount: finalStakeBal, + }) + s.Require().NoError(err) + + // Wait for a new update state + err = testutil.WaitForBlocks(ctx, 5, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // Verify cosmos user's final "stake" balance + cosmosUserStakeBal, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) + s.Require().NoError(err) + s.Require().True(cosmosUserStakeBal.Equal(finalStakeBal)) + + // Verify cosmos user's final "unit" balance + unitDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", "UNIT")) + cosmosUserUnitBal, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), unitDenomTrace.IBCDenom()) + s.Require().NoError(err) + s.Require().True(cosmosUserUnitBal.Equal(amountUnits)) + + // Verify parachain user's final "unit" balance (will be less than expected due gas costs for stake tx) + parachainUserUnits, err := polkadotChain.GetIbcBalance(ctx, string(polkadotUser.Address()), 1) + s.Require().NoError(err) + s.Require().True(parachainUserUnits.Amount.LTE(sdkmath.NewInt(fundAmount)), "parachain user's final unit amount not expected") + + // Verify parachain user's final "stake" balance + parachainUserStake, err := polkadotChain.GetIbcBalance(ctx, string(polkadotUser.Address()), 2) + s.Require().NoError(err) + s.Require().True(parachainUserStake.Amount.Equal(sdkmath.NewInt(amountToSend-amountToReflect)), "parachain user's final stake amount not expected") + }) +} + +// TestMsgTransfer_TimesOut_GrandpaContract +// sets up cosmos and polkadot chains, hyperspace relayer, and funds users on both chains +// * sends transfer over ibc channel, this transfer should timeout +func (s *GrandpaTestSuite) TestMsgTransfer_TimesOut_GrandpaContract() { + ctx := context.Background() + t := s.T() + + chainA, chainB := s.GetGrandpaTestChains() + + polkadotChain := chainA.(*polkadot.PolkadotChain) + cosmosChain := chainB.(*cosmos.CosmosChain) + + // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. + r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { + options.SkipPathCreation = true + }) + + s.InitGRPCClients(cosmosChain) + + cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + + file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") + s.Require().NoError(err) + + checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) + + s.Require().NotEmpty(checksum, "checksum was empty but should not have been") + + eRep := s.GetRelayerExecReporter() + + // Set client contract hash in cosmos chain config + err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) + s.Require().NoError(err) + + // Ensure parachain has started (starts 1 session/epoch after relay chain) + err = testutil.WaitForBlocks(ctx, 1, polkadotChain) + s.Require().NoError(err, "polkadot chain failed to make blocks") + + // Fund users on both cosmos and parachain, mints Asset 1 for Alice + fundAmount := int64(12_333_000_000_000) + polkadotUser, cosmosUser := s.fundUsers(ctx, fundAmount, polkadotChain, cosmosChain) + + // TODO: this can be refactored to broadcast a MsgTransfer instead of CLI. + // https://github.com/cosmos/ibc-go/issues/4963 + amountToSend := int64(1_770_000) + transfer := ibc.WalletAmount{ + Address: polkadotUser.FormattedAddress(), + Denom: cosmosChain.Config().Denom, + Amount: sdkmath.NewInt(amountToSend), + } + + pathName := s.GetPathName(0) + + err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) + s.Require().NoError(err) + + // Create new clients + err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness + s.Require().NoError(err) + + // Create a new connection + err = r.CreateConnections(ctx, eRep, pathName) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // Create a new channel & get channels from each chain + err = r.CreateChannel(ctx, eRep, pathName, ibc.DefaultChannelOpts()) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // Start relayer + s.Require().NoError(r.StartRelayer(ctx, eRep, pathName)) + + t.Run("IBC transfer from Cosmos chain to Polkadot parachain times out", func(t *testing.T) { + // Stop relayer + s.Require().NoError(r.StopRelayer(ctx, s.GetRelayerExecReporter())) + + tx, err := cosmosChain.SendIBCTransfer(ctx, "channel-0", cosmosUser.KeyName(), transfer, ibc.TransferOptions{Timeout: testvalues.ImmediatelyTimeout()}) + s.Require().NoError(err) + s.Require().NoError(tx.Validate(), "source ibc transfer tx is invalid") + time.Sleep(time.Nanosecond * 1) // want it to timeout immediately + + // check that tokens are escrowed + actualBalance, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) + s.Require().NoError(err) + expected := fundAmount - amountToSend + s.Require().Equal(expected, actualBalance.Int64()) + + // start relayer + s.Require().NoError(r.StartRelayer(ctx, s.GetRelayerExecReporter(), s.GetPathName(0))) + err = testutil.WaitForBlocks(ctx, 15, polkadotChain, cosmosChain) + s.Require().NoError(err) + + // ensure that receiver on parachain did not receive any tokens + receiverBalance, err := polkadotChain.GetIbcBalance(ctx, polkadotUser.FormattedAddress(), 2) + s.Require().NoError(err) + s.Require().Equal(int64(0), receiverBalance.Amount.Int64()) + + // check that tokens have been refunded to sender address + senderBalance, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) + s.Require().NoError(err) + s.Require().Equal(fundAmount, senderBalance.Int64()) + }) +} + +// TestMsgMigrateContract_Success_GrandpaContract features +// * sets up a Polkadot parachain +// * sets up a Cosmos chain +// * sets up the Hyperspace relayer +// * Funds a user wallet on both chains +// * Pushes a wasm client contract to the Cosmos chain +// * create client in relayer +// * Pushes a new wasm client contract to the Cosmos chain +// * Migrates the wasm client contract +func (s *GrandpaTestSuite) TestMsgMigrateContract_Success_GrandpaContract() { + ctx := context.Background() + + chainA, chainB := s.GetGrandpaTestChains() + + polkadotChain := chainA.(*polkadot.PolkadotChain) + cosmosChain := chainB.(*cosmos.CosmosChain) + + // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. + r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { + options.SkipPathCreation = true + }) + + s.InitGRPCClients(cosmosChain) + + cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + + file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") + s.Require().NoError(err) + + checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) + + s.Require().NotEmpty(checksum, "checksum was empty but should not have been") + + eRep := s.GetRelayerExecReporter() + + // Set client contract hash in cosmos chain config + err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) + s.Require().NoError(err) + + // Ensure parachain has started (starts 1 session/epoch after relay chain) + err = testutil.WaitForBlocks(ctx, 1, polkadotChain) + s.Require().NoError(err, "polkadot chain failed to make blocks") + + pathName := s.GetPathName(0) + + err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) + s.Require().NoError(err) + + // Create new clients + err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness + s.Require().NoError(err) + + // Do not start relayer + + // This contract is a dummy contract that will always succeed migration. + // Other entry points are unimplemented. + migrateFile, err := os.Open("contracts/migrate_success.wasm.gz") + s.Require().NoError(err) + + // First Store the code + newChecksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, migrateFile) + s.Require().NotEmpty(newChecksum, "checksum was empty but should not have been") + + newChecksumBz, err := hex.DecodeString(newChecksum) + s.Require().NoError(err) + + // Attempt to migrate the contract + message := wasmtypes.NewMsgMigrateContract( + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + defaultWasmClientID, + newChecksumBz, + []byte("{}"), + ) + + s.ExecuteAndPassGovV1Proposal(ctx, message, cosmosChain, cosmosWallet) + + clientState, err := s.QueryClientState(ctx, cosmosChain, defaultWasmClientID) + s.Require().NoError(err) + + wasmClientState, ok := clientState.(*wasmtypes.ClientState) + s.Require().True(ok) + + s.Require().Equal(newChecksumBz, wasmClientState.Checksum) +} + +// TestMsgMigrateContract_ContractError_GrandpaContract features +// * sets up a Polkadot parachain +// * sets up a Cosmos chain +// * sets up the Hyperspace relayer +// * Funds a user wallet on both chains +// * Pushes a wasm client contract to the Cosmos chain +// * create client in relayer +// * Pushes a new wasm client contract to the Cosmos chain +// * Migrates the wasm client contract with a contract that will always fail migration +func (s *GrandpaTestSuite) TestMsgMigrateContract_ContractError_GrandpaContract() { + ctx := context.Background() + + chainA, chainB := s.GetGrandpaTestChains() + + polkadotChain := chainA.(*polkadot.PolkadotChain) + cosmosChain := chainB.(*cosmos.CosmosChain) + + // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. + r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { + options.SkipPathCreation = true + }) + + s.InitGRPCClients(cosmosChain) + + cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + + file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") + s.Require().NoError(err) + checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) + + s.Require().NotEmpty(checksum, "checksum was empty but should not have been") + + eRep := s.GetRelayerExecReporter() + + // Set client contract hash in cosmos chain config + err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) + s.Require().NoError(err) + + // Ensure parachain has started (starts 1 session/epoch after relay chain) + err = testutil.WaitForBlocks(ctx, 1, polkadotChain) + s.Require().NoError(err, "polkadot chain failed to make blocks") + + pathName := s.GetPathName(0) + + err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) + s.Require().NoError(err) + + // Create new clients + err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) + s.Require().NoError(err) + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness + s.Require().NoError(err) + + // Do not start the relayer + + // This contract is a dummy contract that will always fail migration. + // Other entry points are unimplemented. + migrateFile, err := os.Open("contracts/migrate_error.wasm.gz") + s.Require().NoError(err) + + // First Store the code + newChecksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, migrateFile) + s.Require().NotEmpty(newChecksum, "checksum was empty but should not have been") + + newChecksumBz, err := hex.DecodeString(newChecksum) + s.Require().NoError(err) + + // Attempt to migrate the contract + message := wasmtypes.NewMsgMigrateContract( + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + defaultWasmClientID, + newChecksumBz, + []byte("{}"), + ) + + err = s.ExecuteGovV1Proposal(ctx, message, cosmosChain, cosmosWallet) + s.Require().Error(err) + + version := cosmosChain.Nodes()[0].Image.Version + if govV1FailedReasonFeatureReleases.IsSupported(version) { + // This is the error string that is returned from the contract + s.Require().ErrorContains(err, "migration not supported") + } +} + +// TestRecoverClient_Succeeds_GrandpaContract features: +// * setup cosmos and polkadot substrates nodes +// * funds test user wallets on both chains +// * stores a wasm client contract on the cosmos chain +// * creates a subject client using the hyperspace relayer +// * waits the expiry period and asserts the subject client status has expired +// * creates a substitute client using the hyperspace relayer +// * executes a gov proposal to recover the expired client +// * asserts the status of the subject client has been restored to active +// NOTE: The testcase features a modified grandpa client contract compiled as: +// - ics10_grandpa_cw_expiry.wasm.gz +// This contract modifies the unbonding period to 1600s with the trusting period being calculated as (unbonding period / 3). +func (s *GrandpaTestSuite) TestRecoverClient_Succeeds_GrandpaContract() { + ctx := context.Background() + + // set the trusting period to a value which will still be valid upon client creation, but invalid before the first update + // the contract uses 1600s as the unbonding period with the trusting period evaluating to (unbonding period / 3) + modifiedTrustingPeriod := (1600 * time.Second) / 3 + + chainA, chainB := s.GetGrandpaTestChains() + + polkadotChain := chainA.(*polkadot.PolkadotChain) + cosmosChain := chainB.(*cosmos.CosmosChain) + + // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. + r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { + options.SkipPathCreation = true + }) + + s.InitGRPCClients(cosmosChain) + + cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + + file, err := os.Open("contracts/ics10_grandpa_cw_expiry.wasm.gz") + s.Require().NoError(err) + + codeHash := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) + s.Require().NotEmpty(codeHash, "codehash was empty but should not have been") + + eRep := s.GetRelayerExecReporter() + + // Set client contract hash in cosmos chain config + err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), codeHash) + s.Require().NoError(err) + + // Ensure parachain has started (starts 1 session/epoch after relay chain) + err = testutil.WaitForBlocks(ctx, 1, polkadotChain) + s.Require().NoError(err, "polkadot chain failed to make blocks") + + // Fund users on both cosmos and parachain, mints Asset 1 for Alice + fundAmount := int64(12_333_000_000_000) + _, cosmosUser := s.fundUsers(ctx, fundAmount, polkadotChain, cosmosChain) + + pathName := s.GetPathName(0) + err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) + s.Require().NoError(err) + + // create client pair with subject (bad trusting period) + subjectClientID := clienttypes.FormatClientIdentifier(wasmtypes.Wasm, 0) + // TODO: The hyperspace relayer makes no use of create client opts + // https://github.com/strangelove-ventures/interchaintest/blob/main/relayer/hyperspace/hyperspace_commander.go#L83 + s.SetupClients(ctx, r, ibc.CreateClientOptions{ + TrustingPeriod: modifiedTrustingPeriod.String(), // NOTE: this is hardcoded within the cw contract: ics10_grapnda_cw_expiry.wasm + }) + + // wait for block + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // wait the bad trusting period + time.Sleep(modifiedTrustingPeriod) + + // create client pair with substitute + substituteClientID := clienttypes.FormatClientIdentifier(wasmtypes.Wasm, 1) + s.SetupClients(ctx, r, ibc.DefaultClientOpts()) + + // wait for block + err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) + s.Require().NoError(err) + + // ensure subject client is expired + status, err := s.clientStatus(ctx, cosmosChain, subjectClientID) + s.Require().NoError(err) + s.Require().Equal(ibcexported.Expired.String(), status, "unexpected subject client status") + + // ensure substitute client is active + status, err = s.clientStatus(ctx, cosmosChain, substituteClientID) + s.Require().NoError(err) + s.Require().Equal(ibcexported.Active.String(), status, "unexpected substitute client status") + + version := cosmosChain.Nodes()[0].Image.Version + if govV1FeatureReleases.IsSupported(version) { + // create and execute a client recovery proposal + authority, err := s.QueryModuleAccountAddress(ctx, govtypes.ModuleName, cosmosChain) + s.Require().NoError(err) + + msgRecoverClient := clienttypes.NewMsgRecoverClient(authority.String(), subjectClientID, substituteClientID) + s.Require().NotNil(msgRecoverClient) + s.ExecuteAndPassGovV1Proposal(ctx, msgRecoverClient, cosmosChain, cosmosUser) + } else { + proposal := clienttypes.NewClientUpdateProposal(ibctesting.Title, ibctesting.Description, subjectClientID, substituteClientID) + s.ExecuteAndPassGovV1Beta1Proposal(ctx, cosmosChain, cosmosWallet, proposal) + } + + // ensure subject client is active + status, err = s.clientStatus(ctx, cosmosChain, subjectClientID) + s.Require().NoError(err) + s.Require().Equal(ibcexported.Active.String(), status) + + // ensure substitute client is active + status, err = s.clientStatus(ctx, cosmosChain, substituteClientID) + s.Require().NoError(err) + s.Require().Equal(ibcexported.Active.String(), status) +} + +// extractChecksumFromGzippedContent takes a gzipped wasm contract and returns the checksum. +func (s *GrandpaTestSuite) extractChecksumFromGzippedContent(zippedContent []byte) string { + content, err := wasmtypes.Uncompress(zippedContent, wasmtypes.MaxWasmByteSize()) + s.Require().NoError(err) + + checksum32 := sha256.Sum256(content) + return hex.EncodeToString(checksum32[:]) +} + +// PushNewWasmClientProposal submits a new wasm client governance proposal to the chain. +func (s *GrandpaTestSuite) PushNewWasmClientProposal(ctx context.Context, chain *cosmos.CosmosChain, wallet ibc.Wallet, proposalContentReader io.Reader) string { + zippedContent, err := io.ReadAll(proposalContentReader) + s.Require().NoError(err) + + computedChecksum := s.extractChecksumFromGzippedContent(zippedContent) + + s.Require().NoError(err) + message := wasmtypes.MsgStoreCode{ + Signer: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + WasmByteCode: zippedContent, + } + + s.ExecuteAndPassGovV1Proposal(ctx, &message, chain, wallet) + + checksumBz, err := s.QueryWasmCode(ctx, chain, computedChecksum) + s.Require().NoError(err) + + checksum32 := sha256.Sum256(checksumBz) + actualChecksum := hex.EncodeToString(checksum32[:]) + s.Require().Equal(computedChecksum, actualChecksum, "checksum returned from query did not match the computed checksum") + + return actualChecksum +} + +func (s *GrandpaTestSuite) clientStatus(ctx context.Context, chain ibc.Chain, clientID string) (string, error) { + queryClient := s.GetChainGRCPClients(chain).ClientQueryClient + res, err := queryClient.ClientStatus(ctx, &clienttypes.QueryClientStatusRequest{ + ClientId: clientID, + }) + if err != nil { + return "", err + } + + return res.Status, nil +} + +func (s *GrandpaTestSuite) fundUsers(ctx context.Context, fundAmount int64, polkadotChain ibc.Chain, cosmosChain ibc.Chain) (ibc.Wallet, ibc.Wallet) { + users := interchaintest.GetAndFundTestUsers(s.T(), ctx, "user", sdkmath.NewInt(fundAmount), polkadotChain, cosmosChain) + polkadotUser, cosmosUser := users[0], users[1] + err := testutil.WaitForBlocks(ctx, 2, polkadotChain, cosmosChain) // Only waiting 1 block is flaky for parachain + s.Require().NoError(err, "cosmos or polkadot chain failed to make blocks") + + // Check balances are correct + amount := sdkmath.NewInt(fundAmount) + polkadotUserAmount, err := polkadotChain.GetBalance(ctx, polkadotUser.FormattedAddress(), polkadotChain.Config().Denom) + s.Require().NoError(err) + s.Require().True(polkadotUserAmount.Equal(amount), "Initial polkadot user amount not expected") + + parachainUserAmount, err := polkadotChain.GetBalance(ctx, polkadotUser.FormattedAddress(), "") + s.Require().NoError(err) + s.Require().True(parachainUserAmount.Equal(amount), "Initial parachain user amount not expected") + + cosmosUserAmount, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) + s.Require().NoError(err) + s.Require().True(cosmosUserAmount.Equal(amount), "Initial cosmos user amount not expected") + + return polkadotUser, cosmosUser +} + +// validateTestConfig ensures that the given test config is valid for this test suite. +func validateTestConfig() { + tc := testsuite.LoadConfig() + if tc.ActiveRelayer != "hyperspace" { + panic(fmt.Errorf("hyperspace relayer must be specified")) + } +} + +// getConfigOverrides returns configuration overrides that will be applied to the simapp. +func getConfigOverrides() map[string]any { + consensusOverrides := make(testutil.Toml) + blockTime := 5 + blockT := (time.Duration(blockTime) * time.Second).String() + consensusOverrides["timeout_commit"] = blockT + consensusOverrides["timeout_propose"] = blockT + + configTomlOverrides := make(testutil.Toml) + configTomlOverrides["consensus"] = consensusOverrides + configTomlOverrides["log_level"] = "info" + + configFileOverrides := make(map[string]any) + configFileOverrides["config/config.toml"] = configTomlOverrides + return configFileOverrides +} + +// GetGrandpaTestChains returns the configured chains for the grandpa test suite. +func (s *GrandpaTestSuite) GetGrandpaTestChains() (ibc.Chain, ibc.Chain) { + return s.GetChains(func(options *testsuite.ChainOptions) { + // configure chain A (polkadot) + options.ChainASpec.ChainName = composable + options.ChainASpec.Type = "polkadot" + options.ChainASpec.ChainID = "rococo-local" + options.ChainASpec.Name = "composable" + options.ChainASpec.Images = []ibc.DockerImage{ + // TODO: https://github.com/cosmos/ibc-go/issues/4965 + { + Repository: "ghcr.io/misko9/polkadot-node", + Version: "v39", + UidGid: "1000:1000", + }, + { + Repository: "ghcr.io/misko9/parachain-node", + Version: "20231122v39", + UidGid: "1000:1000", + }, + } + options.ChainASpec.Bin = "polkadot" + options.ChainASpec.Bech32Prefix = composable + options.ChainASpec.Denom = "uDOT" + options.ChainASpec.GasPrices = "" + options.ChainASpec.GasAdjustment = 0 + options.ChainASpec.TrustingPeriod = "" + options.ChainASpec.CoinType = "354" + + // these values are set by default for our cosmos chains, we need to explicitly remove them here. + options.ChainASpec.ModifyGenesis = nil + options.ChainASpec.ConfigFileOverrides = nil + options.ChainASpec.EncodingConfig = nil + + // configure chain B (cosmos) + options.ChainBSpec.ChainName = simd // Set chain name so that a suffix with a "dash" is not appended (required for hyperspace) + options.ChainBSpec.Type = "cosmos" + options.ChainBSpec.Name = "simd" + options.ChainBSpec.ChainID = simd + options.ChainBSpec.Bin = simd + options.ChainBSpec.Bech32Prefix = "cosmos" + + // TODO: hyperspace relayer assumes a denom of "stake", hard code this here right now. + // https://github.com/cosmos/ibc-go/issues/4964 + options.ChainBSpec.Denom = "stake" + options.ChainBSpec.GasPrices = "0.00stake" + options.ChainBSpec.GasAdjustment = 1 + options.ChainBSpec.TrustingPeriod = "504h" + options.ChainBSpec.CoinType = "118" + + options.ChainBSpec.ChainConfig.NoHostMount = false + options.ChainBSpec.ConfigFileOverrides = getConfigOverrides() + options.ChainBSpec.EncodingConfig = testsuite.SDKEncodingConfig() + }) +} diff --git a/e2e/testsuite/testconfig.go b/e2e/testsuite/testconfig.go new file mode 100644 index 00000000000..f8cfe1b5b7a --- /dev/null +++ b/e2e/testsuite/testconfig.go @@ -0,0 +1,725 @@ +package testsuite + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "path" + "strings" + "time" + + "github.com/strangelove-ventures/interchaintest/v8" + "github.com/strangelove-ventures/interchaintest/v8/ibc" + interchaintestutil "github.com/strangelove-ventures/interchaintest/v8/testutil" + "gopkg.in/yaml.v2" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module/testutil" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + + cmtjson "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" + wasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibctypes "github.com/cosmos/ibc-go/v8/modules/core/types" +) + +const ( + // ChainImageEnv specifies the image that the chains will use. If left unspecified, it will + // default to being determined based on the specified binary. E.g. ghcr.io/cosmos/ibc-go-simd + ChainImageEnv = "CHAIN_IMAGE" + // ChainATagEnv specifies the tag that Chain A will use. + ChainATagEnv = "CHAIN_A_TAG" + // ChainBTagEnv specifies the tag that Chain B will use. If unspecified + // the value will default to the same value as Chain A. + ChainBTagEnv = "CHAIN_B_TAG" + // RelayerIDEnv specifies the ID of the relayer to use. + RelayerIDEnv = "RELAYER_ID" + // ChainBinaryEnv binary is the binary that will be used for both chains. + ChainBinaryEnv = "CHAIN_BINARY" + // ChainUpgradeTagEnv specifies the upgrade version tag + ChainUpgradeTagEnv = "CHAIN_UPGRADE_TAG" + // ChainUpgradePlanEnv specifies the upgrade plan name + ChainUpgradePlanEnv = "CHAIN_UPGRADE_PLAN" + // E2EConfigFilePathEnv allows you to specify a custom path for the config file to be used. + E2EConfigFilePathEnv = "E2E_CONFIG_PATH" + + // defaultBinary is the default binary that will be used by the chains. + defaultBinary = "simd" + // defaultRlyTag is the tag that will be used if no relayer tag is specified. + // all images are here https://github.com/cosmos/relayer/pkgs/container/relayer/versions + defaultRlyTag = "latest" + + // TODO: https://github.com/cosmos/ibc-go/issues/4965 + defaultHyperspaceTag = "20231122v39" + // defaultHermesTag is the tag that will be used if no relayer tag is specified for hermes. + defaultHermesTag = "luca_joss-channel-upgrade-authority" + // defaultChainTag is the tag that will be used for the chains if none is specified. + defaultChainTag = "main" + // 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" +) + +func getChainImage(binary string) string { + if binary == "" { + binary = defaultBinary + } + return fmt.Sprintf("ghcr.io/cosmos/ibc-go-%s", binary) +} + +// TestConfig holds configuration used throughout the different e2e tests. +type TestConfig struct { + // ChainConfigs holds configuration values related to the chains used in the tests. + ChainConfigs []ChainConfig `yaml:"chains"` + // RelayerConfig holds all known relayer configurations that can be used in the tests. + RelayerConfigs []relayer.Config `yaml:"relayers"` + // ActiveRelayer specifies the relayer that will be used. It must match the ID of one of the entries in RelayerConfigs. + ActiveRelayer string `yaml:"activeRelayer"` + // UpgradeConfig holds values used only for the upgrade tests. + UpgradeConfig UpgradeConfig `yaml:"upgrade"` + // CometBFTConfig holds values for configuring CometBFT. + CometBFTConfig CometBFTConfig `yaml:"cometbft"` + // DebugConfig holds configuration for miscellaneous options. + DebugConfig DebugConfig `yaml:"debug"` +} + +// Validate validates the test configuration is valid for use within the tests. +// this should be called before using the configuration. +func (tc TestConfig) Validate() error { + if err := tc.validateChains(); err != nil { + return fmt.Errorf("invalid chain configuration: %w", err) + } + + if err := tc.validateRelayers(); err != nil { + return fmt.Errorf("invalid relayer configuration: %w", err) + } + return nil +} + +// validateChains validates the chain configurations. +func (tc TestConfig) validateChains() error { + for _, cfg := range tc.ChainConfigs { + if cfg.Binary == "" { + return fmt.Errorf("chain config missing binary: %+v", cfg) + } + if cfg.Image == "" { + return fmt.Errorf("chain config missing image: %+v", cfg) + } + if cfg.Tag == "" { + return fmt.Errorf("chain config missing tag: %+v", cfg) + } + + // TODO: validate chainID in https://github.com/cosmos/ibc-go/issues/4697 + // these are not passed in the CI at the moment. Defaults are used. + if !IsCI() { + if cfg.ChainID == "" { + return fmt.Errorf("chain config missing chainID: %+v", cfg) + } + } + + // TODO: validate number of nodes in https://github.com/cosmos/ibc-go/issues/4697 + // these are not passed in the CI at the moment. + if !IsCI() { + if cfg.NumValidators == 0 && cfg.NumFullNodes == 0 { + return fmt.Errorf("chain config missing number of validators or full nodes: %+v", cfg) + } + } + } + return nil +} + +// validateRelayers validates relayer configuration. +func (tc TestConfig) validateRelayers() error { + if len(tc.RelayerConfigs) < 1 { + return fmt.Errorf("no relayer configurations specified") + } + + for _, r := range tc.RelayerConfigs { + if r.ID == "" { + return fmt.Errorf("relayer config missing ID: %+v", r) + } + if r.Image == "" { + return fmt.Errorf("relayer config missing image: %+v", r) + } + if r.Tag == "" { + return fmt.Errorf("relayer config missing tag: %+v", r) + } + } + + if tc.GetActiveRelayerConfig() == nil { + return fmt.Errorf("active relayer %s not found in relayer configs: %+v", tc.ActiveRelayer, tc.RelayerConfigs) + } + + return nil +} + +// GetActiveRelayerConfig returns the currently specified relayer config. +func (tc TestConfig) GetActiveRelayerConfig() *relayer.Config { + for _, r := range tc.RelayerConfigs { + if r.ID == tc.ActiveRelayer { + return &r + } + } + return nil +} + +// GetChainNumValidators returns the number of validators for the specific chain index. +// default 1 +func (tc TestConfig) GetChainNumValidators(idx int) int { + if tc.ChainConfigs[idx].NumValidators > 0 { + return tc.ChainConfigs[idx].NumValidators + } + return 1 +} + +// GetChainNumFullNodes returns the number of full nodes for the specific chain index. +// default 0 +func (tc TestConfig) GetChainNumFullNodes(idx int) int { + if tc.ChainConfigs[idx].NumFullNodes > 0 { + return tc.ChainConfigs[idx].NumFullNodes + } + return 0 +} + +// GetChainAID returns the chain-id for chain A. +func (tc TestConfig) GetChainAID() string { + if tc.ChainConfigs[0].ChainID != "" { + return tc.ChainConfigs[0].ChainID + } + return "chainA-1" +} + +// GetChainBID returns the chain-id for chain B. +func (tc TestConfig) GetChainBID() string { + if tc.ChainConfigs[1].ChainID != "" { + return tc.ChainConfigs[1].ChainID + } + return "chainB-1" +} + +// UpgradeConfig holds values relevant to upgrade tests. +type UpgradeConfig struct { + PlanName string `yaml:"planName"` + Tag string `yaml:"tag"` +} + +// ChainConfig holds information about an individual chain used in the tests. +type ChainConfig struct { + ChainID string `yaml:"chainId"` + Image string `yaml:"image"` + Tag string `yaml:"tag"` + Binary string `yaml:"binary"` + NumValidators int `yaml:"numValidators"` + NumFullNodes int `yaml:"numFullNodes"` +} + +type CometBFTConfig struct { + LogLevel string `yaml:"logLevel"` +} + +type DebugConfig struct { + // DumpLogs forces the logs to be collected before removing test containers. + DumpLogs bool `yaml:"dumpLogs"` +} + +// LoadConfig attempts to load a atest configuration from the default file path. +// if any environment variables are specified, they will take precedence over the individual configuration +// options. +func LoadConfig() TestConfig { + tc := getConfig() + if err := tc.Validate(); err != nil { + panic(err) + } + return tc +} + +// getConfig returns the TestConfig with any environment variable overrides. +func getConfig() TestConfig { + fileTc, foundFile := fromFile() + if !foundFile { + return fromEnv() + } + + return applyEnvironmentVariableOverrides(fileTc) +} + +// fromFile returns a TestConfig from a json file and a boolean indicating if the file was found. +func fromFile() (TestConfig, bool) { + var tc TestConfig + bz, err := os.ReadFile(getConfigFilePath()) + if err != nil { + return TestConfig{}, false + } + + if err := yaml.Unmarshal(bz, &tc); err != nil { + panic(err) + } + + return tc, true +} + +// applyEnvironmentVariableOverrides applies all environment variable changes to the config +// loaded from a file. +func applyEnvironmentVariableOverrides(fromFile TestConfig) TestConfig { + envTc := fromEnv() + + if os.Getenv(ChainATagEnv) != "" { + fromFile.ChainConfigs[0].Tag = envTc.ChainConfigs[0].Tag + } + + if os.Getenv(ChainBTagEnv) != "" { + fromFile.ChainConfigs[1].Tag = envTc.ChainConfigs[1].Tag + } + + if os.Getenv(ChainBinaryEnv) != "" { + for i := range fromFile.ChainConfigs { + fromFile.ChainConfigs[i].Binary = envTc.ChainConfigs[i].Binary + } + } + + if os.Getenv(ChainImageEnv) != "" { + for i := range fromFile.ChainConfigs { + fromFile.ChainConfigs[i].Image = envTc.ChainConfigs[i].Image + } + } + + if os.Getenv(RelayerIDEnv) != "" { + fromFile.ActiveRelayer = envTc.ActiveRelayer + } + + if os.Getenv(ChainUpgradePlanEnv) != "" { + fromFile.UpgradeConfig.PlanName = envTc.UpgradeConfig.PlanName + } + + if os.Getenv(ChainUpgradeTagEnv) != "" { + fromFile.UpgradeConfig.Tag = envTc.UpgradeConfig.Tag + } + + return fromFile +} + +// fromEnv returns a TestConfig constructed from environment variables. +func fromEnv() TestConfig { + return TestConfig{ + ChainConfigs: getChainConfigsFromEnv(), + UpgradeConfig: getUpgradePlanConfigFromEnv(), + ActiveRelayer: os.Getenv(RelayerIDEnv), + + // TODO: we can remove this, and specify these values in a config file for the CI + // in https://github.com/cosmos/ibc-go/issues/4697 + RelayerConfigs: []relayer.Config{ + getDefaultRlyRelayerConfig(), + getDefaultHermesRelayerConfig(), + getDefaultHyperspaceRelayerConfig(), + }, + CometBFTConfig: CometBFTConfig{LogLevel: "info"}, + } +} + +// getChainConfigsFromEnv returns the chain configs from environment variables. +func getChainConfigsFromEnv() []ChainConfig { + chainBinary, ok := os.LookupEnv(ChainBinaryEnv) + if !ok { + chainBinary = defaultBinary + } + + chainATag, ok := os.LookupEnv(ChainATagEnv) + if !ok { + chainATag = defaultChainTag + } + + chainBTag, ok := os.LookupEnv(ChainBTagEnv) + if !ok { + chainBTag = chainATag + } + + chainAImage := getChainImage(chainBinary) + specifiedChainImage, ok := os.LookupEnv(ChainImageEnv) + if ok { + chainAImage = specifiedChainImage + } + + numValidators := 4 + numFullNodes := 1 + + chainBImage := chainAImage + return []ChainConfig{ + { + Image: chainAImage, + Tag: chainATag, + Binary: chainBinary, + NumValidators: numValidators, + NumFullNodes: numFullNodes, + }, + { + Image: chainBImage, + Tag: chainBTag, + Binary: chainBinary, + NumValidators: numValidators, + NumFullNodes: numFullNodes, + }, + } +} + +// getConfigFilePath returns the absolute path where the e2e config file should be. +func getConfigFilePath() string { + if absoluteConfigPath := os.Getenv(E2EConfigFilePathEnv); absoluteConfigPath != "" { + return absoluteConfigPath + } + + homeDir, err := os.UserHomeDir() + if err != nil { + panic(err) + } + return path.Join(homeDir, defaultConfigFileName) +} + +// TODO: remove in https://github.com/cosmos/ibc-go/issues/4697 +// getDefaultHermesRelayerConfig returns the default config for the hermes relayer. +func getDefaultHermesRelayerConfig() relayer.Config { + return relayer.Config{ + Tag: defaultHermesTag, + ID: relayer.Hermes, + Image: relayer.HermesRelayerRepository, + } +} + +// TODO: remove in https://github.com/cosmos/ibc-go/issues/4697 +// getDefaultRlyRelayerConfig returns the default config for the golang relayer. +func getDefaultRlyRelayerConfig() relayer.Config { + return relayer.Config{ + Tag: defaultRlyTag, + ID: relayer.Rly, + Image: relayer.RlyRelayerRepository, + } +} + +// TODO: remove in https://github.com/cosmos/ibc-go/issues/4697 +// getDefaultHyperspaceRelayerConfig returns the default config for the hyperspace relayer. +func getDefaultHyperspaceRelayerConfig() relayer.Config { + return relayer.Config{ + Tag: defaultHyperspaceTag, + ID: relayer.Hyperspace, + Image: relayer.HyperspaceRelayerRepository, + } +} + +// getUpgradePlanConfigFromEnv returns the upgrade config from environment variables. +func getUpgradePlanConfigFromEnv() UpgradeConfig { + upgradeTag, ok := os.LookupEnv(ChainUpgradeTagEnv) + if !ok { + upgradeTag = "" + } + + upgradePlan, ok := os.LookupEnv(ChainUpgradePlanEnv) + if !ok { + upgradePlan = "" + } + return UpgradeConfig{ + PlanName: upgradePlan, + Tag: upgradeTag, + } +} + +func GetChainATag() string { + return LoadConfig().ChainConfigs[0].Tag +} + +func GetChainBTag() string { + if chainBTag := LoadConfig().ChainConfigs[1].Tag; chainBTag != "" { + return chainBTag + } + return GetChainATag() +} + +// IsCI returns true if the tests are running in CI, false is returned +// if the tests are running locally. +// Note: github actions passes a CI env value of true by default to all runners. +func IsCI() bool { + return strings.ToLower(os.Getenv("CI")) == "true" +} + +// IsFork returns true if the tests are running in fork mode, false is returned otherwise. +func IsFork() bool { + return strings.ToLower(os.Getenv("FORK")) == "true" +} + +// ChainOptions stores chain configurations for the chains that will be +// created for the tests. They can be modified by passing ChainOptionConfiguration +// to E2ETestSuite.GetChains. +type ChainOptions struct { + ChainASpec *interchaintest.ChainSpec + ChainBSpec *interchaintest.ChainSpec + SkipPathCreation bool +} + +// ChainOptionConfiguration enables arbitrary configuration of ChainOptions. +type ChainOptionConfiguration func(options *ChainOptions) + +// DefaultChainOptions returns the default configuration for the chains. +// These options can be configured by passing configuration functions to E2ETestSuite.GetChains. +func DefaultChainOptions() ChainOptions { + tc := LoadConfig() + + chainACfg := newDefaultSimappConfig(tc.ChainConfigs[0], "simapp-a", tc.GetChainAID(), "atoma", tc.CometBFTConfig) + chainBCfg := newDefaultSimappConfig(tc.ChainConfigs[1], "simapp-b", tc.GetChainBID(), "atomb", tc.CometBFTConfig) + + chainAVal, chainAFn := getValidatorsAndFullNodes(0) + chainBVal, chainBFn := getValidatorsAndFullNodes(1) + + return ChainOptions{ + ChainASpec: &interchaintest.ChainSpec{ + ChainConfig: chainACfg, + NumFullNodes: &chainAFn, + NumValidators: &chainAVal, + }, + ChainBSpec: &interchaintest.ChainSpec{ + ChainConfig: chainBCfg, + NumFullNodes: &chainBFn, + NumValidators: &chainBVal, + }, + } +} + +// newDefaultSimappConfig creates an ibc configuration for simd. +func newDefaultSimappConfig(cc ChainConfig, name, chainID, denom string, cometCfg CometBFTConfig) ibc.ChainConfig { + configFileOverrides := make(map[string]any) + tmTomlOverrides := make(interchaintestutil.Toml) + + tmTomlOverrides["log_level"] = cometCfg.LogLevel // change to debug in ~/.ibc-go-e2e-config.json to increase cometbft logging. + configFileOverrides["config/config.toml"] = tmTomlOverrides + + return ibc.ChainConfig{ + Type: "cosmos", + Name: name, + ChainID: chainID, + Images: []ibc.DockerImage{ + { + Repository: cc.Image, + Version: cc.Tag, + UidGid: "1000:1000", + }, + }, + Bin: cc.Binary, + Bech32Prefix: "cosmos", + CoinType: fmt.Sprint(sdk.GetConfig().GetCoinType()), + Denom: denom, + EncodingConfig: SDKEncodingConfig(), + GasPrices: fmt.Sprintf("0.00%s", denom), + GasAdjustment: 1.3, + TrustingPeriod: "508h", + NoHostMount: false, + ModifyGenesis: getGenesisModificationFunction(cc), + ConfigFileOverrides: configFileOverrides, + } +} + +// getGenesisModificationFunction returns a genesis modification function that handles the GenesisState type +// correctly depending on if the govv1beta1 gov module is used or if govv1 is being used. +func getGenesisModificationFunction(cc ChainConfig) func(ibc.ChainConfig, []byte) ([]byte, error) { + binary := cc.Binary + version := cc.Tag + + simdSupportsGovV1Genesis := binary == defaultBinary && testvalues.GovGenesisFeatureReleases.IsSupported(version) + + if simdSupportsGovV1Genesis { + return defaultGovv1ModifyGenesis(version) + } + + return defaultGovv1Beta1ModifyGenesis(version) +} + +// defaultGovv1ModifyGenesis will only modify governance params to ensure the voting period and minimum deposit +// are functional for e2e testing purposes. +func defaultGovv1ModifyGenesis(version string) func(ibc.ChainConfig, []byte) ([]byte, error) { + stdlibJSONMarshalling := semverutil.FeatureReleases{MajorVersion: "v8"} + return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { + appGenesis, err := genutiltypes.AppGenesisFromReader(bytes.NewReader(genbz)) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis bytes into genesis doc: %w", err) + } + + var appState genutiltypes.AppMap + if err := json.Unmarshal(appGenesis.AppState, &appState); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis bytes into app state: %w", err) + } + + govGenBz, err := modifyGovV1AppState(chainConfig, appState[govtypes.ModuleName]) + if err != nil { + return nil, err + } + appState[govtypes.ModuleName] = govGenBz + + if !testvalues.AllowAllClientsWildcardFeatureReleases.IsSupported(version) { + ibcGenBz, err := modifyClientGenesisAppState(chainConfig, appState[ibcexported.ModuleName]) + if err != nil { + return nil, err + } + appState[ibcexported.ModuleName] = ibcGenBz + } + + appGenesis.AppState, err = json.Marshal(appState) + if err != nil { + return nil, err + } + + // in older version < v8, tmjson marshal must be used. + // regular json marshalling must be used for v8 and above as the + // sdk is de-coupled from comet. + marshalIndentFn := cmtjson.MarshalIndent + if stdlibJSONMarshalling.IsSupported(version) { + marshalIndentFn = json.MarshalIndent + } + + bz, err := marshalIndentFn(appGenesis, "", " ") + if err != nil { + return nil, err + } + + return bz, nil + } +} + +// defaultGovv1Beta1ModifyGenesis will only modify governance params to ensure the voting period and minimum deposit +// // are functional for e2e testing purposes. +func defaultGovv1Beta1ModifyGenesis(version string) func(ibc.ChainConfig, []byte) ([]byte, error) { + const appStateKey = "app_state" + return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { + genesisDocMap := map[string]interface{}{} + err := json.Unmarshal(genbz, &genesisDocMap) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis bytes into genesis doc: %w", err) + } + + appStateMap, ok := genesisDocMap[appStateKey].(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("failed to extract to app_state") + } + + govModuleBytes, err := json.Marshal(appStateMap[govtypes.ModuleName]) + if err != nil { + return nil, fmt.Errorf("failed to extract gov genesis bytes: %s", err) + } + + govModuleGenesisBytes, err := modifyGovv1Beta1AppState(chainConfig, govModuleBytes) + if err != nil { + return nil, err + } + + govModuleGenesisMap := map[string]interface{}{} + err = json.Unmarshal(govModuleGenesisBytes, &govModuleGenesisMap) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal gov genesis bytes into map: %w", err) + } + + if !testvalues.AllowAllClientsWildcardFeatureReleases.IsSupported(version) { + ibcModuleBytes, err := json.Marshal(appStateMap[ibcexported.ModuleName]) + if err != nil { + return nil, fmt.Errorf("failed to extract ibc genesis bytes: %s", err) + } + + ibcGenesisBytes, err := modifyClientGenesisAppState(chainConfig, ibcModuleBytes) + if err != nil { + return nil, err + } + + ibcModuleGenesisMap := map[string]interface{}{} + err = json.Unmarshal(ibcGenesisBytes, &ibcModuleGenesisMap) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal gov genesis bytes into map: %w", err) + } + } + + appStateMap[govtypes.ModuleName] = govModuleGenesisMap + genesisDocMap[appStateKey] = appStateMap + + finalGenesisDocBytes, err := json.MarshalIndent(genesisDocMap, "", " ") + if err != nil { + return nil, err + } + + return finalGenesisDocBytes, nil + } +} + +// modifyGovV1AppState takes the existing gov app state and marshals it to a govv1 GenesisState. +func modifyGovV1AppState(chainConfig ibc.ChainConfig, govAppState []byte) ([]byte, error) { + cfg := testutil.MakeTestEncodingConfig() + + cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) + govv1.RegisterInterfaces(cfg.InterfaceRegistry) + + govGenesisState := &govv1.GenesisState{} + + if err := cdc.UnmarshalJSON(govAppState, govGenesisState); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis bytes into gov genesis state: %w", err) + } + + if govGenesisState.Params == nil { + govGenesisState.Params = &govv1.Params{} + } + + govGenesisState.Params.MinDeposit = sdk.NewCoins(sdk.NewCoin(chainConfig.Denom, govv1beta1.DefaultMinDepositTokens)) + maxDep := time.Second * 10 + govGenesisState.Params.MaxDepositPeriod = &maxDep + vp := testvalues.VotingPeriod + govGenesisState.Params.VotingPeriod = &vp + + govGenBz := MustProtoMarshalJSON(govGenesisState) + + return govGenBz, nil +} + +// modifyGovv1Beta1AppState takes the existing gov app state and marshals it to a govv1beta1 GenesisState. +func modifyGovv1Beta1AppState(chainConfig ibc.ChainConfig, govAppState []byte) ([]byte, error) { + cfg := testutil.MakeTestEncodingConfig() + + cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) + govv1beta1.RegisterInterfaces(cfg.InterfaceRegistry) + + govGenesisState := &govv1beta1.GenesisState{} + if err := cdc.UnmarshalJSON(govAppState, govGenesisState); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis bytes into govv1beta1 genesis state: %w", err) + } + + govGenesisState.DepositParams.MinDeposit = sdk.NewCoins(sdk.NewCoin(chainConfig.Denom, govv1beta1.DefaultMinDepositTokens)) + govGenesisState.VotingParams.VotingPeriod = testvalues.VotingPeriod + + govGenBz, err := cdc.MarshalJSON(govGenesisState) + if err != nil { + return nil, fmt.Errorf("failed to marshal gov genesis state: %w", err) + } + + return govGenBz, nil +} + +// modifyClientGenesisAppState takes the existing ibc app state and marshals it to a ibc GenesisState. +func modifyClientGenesisAppState(chainConfig ibc.ChainConfig, ibcAppState []byte) ([]byte, error) { + cfg := testutil.MakeTestEncodingConfig() + + cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) + clienttypes.RegisterInterfaces(cfg.InterfaceRegistry) + + ibcGenesisState := &ibctypes.GenesisState{} + if err := cdc.UnmarshalJSON(ibcAppState, ibcGenesisState); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis bytes into client genesis state: %w", err) + } + + ibcGenesisState.ClientGenesis.Params.AllowedClients = append(ibcGenesisState.ClientGenesis.Params.AllowedClients, wasmtypes.Wasm) + ibcGenBz, err := cdc.MarshalJSON(ibcGenesisState) + if err != nil { + return nil, fmt.Errorf("failed to marshal gov genesis state: %w", err) + } + + return ibcGenBz, nil +} diff --git a/e2e/testvalues/values.go b/e2e/testvalues/values.go new file mode 100644 index 00000000000..bab1aee577e --- /dev/null +++ b/e2e/testvalues/values.go @@ -0,0 +1,101 @@ +package testvalues + +import ( + "fmt" + "time" + + "github.com/strangelove-ventures/interchaintest/v8/ibc" + + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cosmos/ibc-go/e2e/semverutil" + feetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" +) + +const ( + StartingTokenAmount int64 = 500_000_000_000 + IBCTransferAmount int64 = 10_000 + InvalidAddress string = "" + DefaultGovV1ProposalTokenAmount = 500_000_000 +) + +// VotingPeriod may differ per test. +var VotingPeriod = time.Second * 30 + +// ImmediatelyTimeout returns an ibc.IBCTimeout which will cause an IBC transfer to timeout immediately. +func ImmediatelyTimeout() *ibc.IBCTimeout { + return &ibc.IBCTimeout{ + NanoSeconds: 1, + } +} + +func DefaultFee(denom string) feetypes.Fee { + return feetypes.Fee{ + RecvFee: sdk.NewCoins(sdk.NewCoin(denom, sdkmath.NewInt(50))), + AckFee: sdk.NewCoins(sdk.NewCoin(denom, sdkmath.NewInt(25))), + TimeoutFee: sdk.NewCoins(sdk.NewCoin(denom, sdkmath.NewInt(10))), + } +} + +func DefaultTransferAmount(denom string) sdk.Coin { + return sdk.Coin{Denom: denom, Amount: sdkmath.NewInt(IBCTransferAmount)} +} + +func TransferAmount(amount int64, denom string) sdk.Coin { + return sdk.Coin{Denom: denom, Amount: sdkmath.NewInt(amount)} +} + +func TendermintClientID(id int) string { + return fmt.Sprintf("07-tendermint-%d", id) +} + +func SolomachineClientID(id int) string { + return fmt.Sprintf("06-solomachine-%d", id) +} + +// TokenMetadataFeatureReleases represents the releases the token metadata was released in. +var TokenMetadataFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v8", +} + +// GovGenesisFeatureReleases represents the releases the governance module genesis +// was upgraded from v1beta1 to v1. +var GovGenesisFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v7", +} + +// SelfParamsFeatureReleases represents the releases the transfer module started managing its own params. +var SelfParamsFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v8", +} + +// TotalEscrowFeatureReleases represents the releases the total escrow state entry was released in. +var TotalEscrowFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v8", + MinorVersions: []string{ + "v7.1", + }, +} + +// IbcErrorsFeatureReleases represents the releases the IBC module level errors was released in. +var IbcErrorsFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v8", +} + +// LocalhostClientFeatureReleases represents the releases the localhost client was released in. +var LocalhostClientFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v8", + MinorVersions: []string{ + "v7.1", + }, +} + +// AllowAllClientsWildcardFeatureReleases represents the releases the allow all clients wildcard was released in. +var AllowAllClientsWildcardFeatureReleases = semverutil.FeatureReleases{ + MajorVersion: "v9", + MinorVersions: []string{ + "v8.1", + }, +} diff --git a/modules/core/02-client/types/keys.go b/modules/core/02-client/types/keys.go index 86b132c5195..119fdc728d3 100644 --- a/modules/core/02-client/types/keys.go +++ b/modules/core/02-client/types/keys.go @@ -28,6 +28,10 @@ const ( // ParamsKey is the store key for the IBC client parameters ParamsKey = "clientParams" + + // AllowAllClients is the value that if set in AllowedClients param + // would allow any wired up light client modules to be allowed + AllowAllClients = "*" ) // FormatClientIdentifier returns the client identifier with the sequence appended. diff --git a/modules/core/02-client/types/params.go b/modules/core/02-client/types/params.go index 2234f049e66..e6b4714c668 100644 --- a/modules/core/02-client/types/params.go +++ b/modules/core/02-client/types/params.go @@ -4,12 +4,11 @@ import ( "fmt" "slices" "strings" - - "github.com/cosmos/ibc-go/v8/modules/core/exported" ) // DefaultAllowedClients are the default clients for the AllowedClients parameter. -var DefaultAllowedClients = []string{exported.Solomachine, exported.Tendermint, exported.Localhost} +// By default it allows all client types. +var DefaultAllowedClients = []string{AllowAllClients} // NewParams creates a new parameter configuration for the ibc client module func NewParams(allowedClients ...string) Params { @@ -30,11 +29,33 @@ func (p Params) Validate() error { // IsAllowedClient checks if the given client type is registered on the allowlist. func (p Params) IsAllowedClient(clientType string) bool { + // Still need to check for blank client type + if strings.TrimSpace(clientType) == "" { + return false + } + + // Check for allow all client wildcard + // If exist then allow all type of client + if len(p.AllowedClients) == 1 && p.AllowedClients[0] == AllowAllClients { + return true + } + return slices.Contains(p.AllowedClients, clientType) } +<<<<<<< HEAD // validateClients checks that the given clients are not blank. func validateClients(clients []string) error { +======= +// validateClients checks that the given clients are not blank and there are no duplicates. +// If AllowAllClients wildcard (*) is used, then there should no other client types in the allow list +func validateClients(clients []string) error { + if slices.Contains(clients, AllowAllClients) && len(clients) > 1 { + return fmt.Errorf("allow list must have only one element because the allow all clients wildcard (%s) is present", AllowAllClients) + } + + foundClients := make(map[string]bool, len(clients)) +>>>>>>> d5949b1a (feat(statemachine)!: Add allow all client wildcard to AllowedClients param (#5429)) for i, clientType := range clients { if strings.TrimSpace(clientType) == "" { return fmt.Errorf("client type %d cannot be blank", i) diff --git a/modules/core/02-client/types/params_test.go b/modules/core/02-client/types/params_test.go index 404118c0528..15397df231d 100644 --- a/modules/core/02-client/types/params_test.go +++ b/modules/core/02-client/types/params_test.go @@ -19,6 +19,8 @@ func TestIsAllowedClient(t *testing.T) { {"success: valid client with custom params", exported.Tendermint, NewParams(exported.Tendermint), true}, {"success: invalid blank client", " ", DefaultParams(), false}, {"success: invalid client with custom params", exported.Localhost, NewParams(exported.Tendermint), false}, + {"success: wildcard allow all clients", "test-client-type", NewParams(AllowAllClients), true}, + {"success: wildcard allow all clients with blank client", " ", NewParams(AllowAllClients), false}, } for _, tc := range testCases { @@ -36,6 +38,11 @@ func TestValidateParams(t *testing.T) { {"default params", DefaultParams(), true}, {"custom params", NewParams(exported.Tendermint), true}, {"blank client", NewParams(" "), false}, +<<<<<<< HEAD +======= + {"duplicate clients", NewParams(exported.Tendermint, exported.Tendermint), false}, + {"allow all clients plus valid client", NewParams(AllowAllClients, exported.Tendermint), false}, +>>>>>>> d5949b1a (feat(statemachine)!: Add allow all client wildcard to AllowedClients param (#5429)) } for _, tc := range testCases { diff --git a/modules/light-clients/08-wasm/keeper/keeper_test.go b/modules/light-clients/08-wasm/keeper/keeper_test.go new file mode 100644 index 00000000000..73810c74b42 --- /dev/null +++ b/modules/light-clients/08-wasm/keeper/keeper_test.go @@ -0,0 +1,326 @@ +package keeper_test + +import ( + "encoding/json" + "errors" + "testing" + + wasmvm "github.com/CosmWasm/wasmvm" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + dbm "github.com/cosmos/cosmos-db" + testifysuite "github.com/stretchr/testify/suite" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/runtime" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" + wasmtesting "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing/simapp" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibctesting "github.com/cosmos/ibc-go/v8/testing" +) + +const ( + defaultWasmClientID = "08-wasm-0" +) + +type KeeperTestSuite struct { + testifysuite.Suite + + coordinator *ibctesting.Coordinator + + // mockVM is a mock wasm VM that implements the WasmEngine interface + mockVM *wasmtesting.MockWasmEngine + chainA *ibctesting.TestChain +} + +func init() { + ibctesting.DefaultTestingAppInit = setupTestingApp +} + +// setupTestingApp provides the duplicated simapp which is specific to the 08-wasm module on chain creation. +func setupTestingApp() (ibctesting.TestingApp, map[string]json.RawMessage) { + db := dbm.NewMemDB() + app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, nil) + return app, app.DefaultGenesis() +} + +// GetSimApp returns the duplicated SimApp from within the 08-wasm directory. +// This must be used instead of chain.GetSimApp() for tests within this directory. +func GetSimApp(chain *ibctesting.TestChain) *simapp.SimApp { + app, ok := chain.App.(*simapp.SimApp) + if !ok { + panic(errors.New("chain is not a simapp.SimApp")) + } + return app +} + +func (suite *KeeperTestSuite) SetupTest() { + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + + queryHelper := baseapp.NewQueryServerTestHelper(suite.chainA.GetContext(), GetSimApp(suite.chainA).InterfaceRegistry()) + types.RegisterQueryServer(queryHelper, GetSimApp(suite.chainA).WasmClientKeeper) +} + +// SetupWasmWithMockVM sets up mock cometbft chain with a mock vm. +func (suite *KeeperTestSuite) SetupWasmWithMockVM() { + ibctesting.DefaultTestingAppInit = suite.setupWasmWithMockVM + + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) +} + +func (suite *KeeperTestSuite) setupWasmWithMockVM() (ibctesting.TestingApp, map[string]json.RawMessage) { + suite.mockVM = wasmtesting.NewMockWasmEngine() + + suite.mockVM.InstantiateFn = func(checksum wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { + var payload types.InstantiateMessage + err := json.Unmarshal(initMsg, &payload) + suite.Require().NoError(err) + + wrappedClientState := clienttypes.MustUnmarshalClientState(suite.chainA.App.AppCodec(), payload.ClientState) + + clientState := types.NewClientState(payload.ClientState, payload.Checksum, wrappedClientState.GetLatestHeight().(clienttypes.Height)) + clientStateBz := clienttypes.MustMarshalClientState(suite.chainA.App.AppCodec(), clientState) + store.Set(host.ClientStateKey(), clientStateBz) + + consensusState := types.NewConsensusState(payload.ConsensusState) + consensusStateBz := clienttypes.MustMarshalConsensusState(suite.chainA.App.AppCodec(), consensusState) + store.Set(host.ConsensusStateKey(clientState.GetLatestHeight()), consensusStateBz) + + resp, err := json.Marshal(types.EmptyResult{}) + suite.Require().NoError(err) + + return &wasmvmtypes.Response{Data: resp}, 0, nil + } + + suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(checksum wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) ([]byte, uint64, error) { + resp, err := json.Marshal(types.StatusResult{Status: exported.Active.String()}) + suite.Require().NoError(err) + return resp, wasmtesting.DefaultGasUsed, nil + }) + + db := dbm.NewMemDB() + app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, suite.mockVM) + + // reset DefaultTestingAppInit to its original value + ibctesting.DefaultTestingAppInit = setupTestingApp + return app, app.DefaultGenesis() +} + +// storeWasmCode stores the wasm code on chain and returns the checksum. +func storeWasmCode(suite *KeeperTestSuite, wasmCode []byte) []byte { + ctx := suite.chainA.GetContext().WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) + + msg := types.NewMsgStoreCode(authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmCode) + response, err := GetSimApp(suite.chainA).WasmClientKeeper.StoreCode(ctx, msg) + suite.Require().NoError(err) + suite.Require().NotNil(response.Checksum) + return response.Checksum +} + +func (suite *KeeperTestSuite) SetupSnapshotterWithMockVM() *simapp.SimApp { + suite.mockVM = wasmtesting.NewMockWasmEngine() + + return simapp.SetupWithSnapshotter(suite.T(), suite.mockVM) +} + +func TestKeeperTestSuite(t *testing.T) { + testifysuite.Run(t, new(KeeperTestSuite)) +} + +func (suite *KeeperTestSuite) TestNewKeeper() { + testCases := []struct { + name string + instantiateFn func() + expPass bool + expError error + }{ + { + "success", + func() { + keeper.NewKeeperWithVM( + GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), + GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, + GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), + ibcwasm.GetVM(), + GetSimApp(suite.chainA).GRPCQueryRouter(), + ) + }, + true, + nil, + }, + { + "failure: empty authority", + func() { + keeper.NewKeeperWithVM( + GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), + GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, + "", // authority + ibcwasm.GetVM(), + GetSimApp(suite.chainA).GRPCQueryRouter(), + ) + }, + false, + errors.New("authority must be non-empty"), + }, + { + "failure: nil client keeper", + func() { + keeper.NewKeeperWithVM( + GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), + nil, // client keeper, + GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), + ibcwasm.GetVM(), + GetSimApp(suite.chainA).GRPCQueryRouter(), + ) + }, + false, + errors.New("client keeper must be not nil"), + }, + { + "failure: nil wasm VM", + func() { + keeper.NewKeeperWithVM( + GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), + GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, + GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), + nil, + GetSimApp(suite.chainA).GRPCQueryRouter(), + ) + }, + false, + errors.New("wasm VM must be not nil"), + }, + { + "failure: nil store service", + func() { + keeper.NewKeeperWithVM( + GetSimApp(suite.chainA).AppCodec(), + nil, + GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, + GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), + ibcwasm.GetVM(), + GetSimApp(suite.chainA).GRPCQueryRouter(), + ) + }, + false, + errors.New("store service must be not nil"), + }, + { + "failure: nil query router", + func() { + keeper.NewKeeperWithVM( + GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), + GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, + GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), + ibcwasm.GetVM(), + nil, + ) + }, + false, + errors.New("query router must be not nil"), + }, + } + + for _, tc := range testCases { + tc := tc + suite.SetupTest() + + suite.Run(tc.name, func() { + if tc.expPass { + suite.Require().NotPanics( + tc.instantiateFn, + ) + } else { + suite.Require().PanicsWithError(tc.expError.Error(), func() { + tc.instantiateFn() + }) + } + }) + } +} + +func (suite *KeeperTestSuite) TestInitializedPinnedCodes() { + var capturedChecksums []wasmvm.Checksum + + testCases := []struct { + name string + malleate func() + expError error + }{ + { + "success", + func() { + suite.mockVM.PinFn = func(checksum wasmvm.Checksum) error { + capturedChecksums = append(capturedChecksums, checksum) + return nil + } + }, + nil, + }, + { + "failure: pin error", + func() { + suite.mockVM.PinFn = func(checksum wasmvm.Checksum) error { + return wasmtesting.ErrMockVM + } + }, + wasmtesting.ErrMockVM, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupWasmWithMockVM() + + ctx := suite.chainA.GetContext() + wasmClientKeeper := GetSimApp(suite.chainA).WasmClientKeeper + + contracts := [][]byte{wasmtesting.Code, wasmtesting.CreateMockContract([]byte("gzipped-contract"))} + checksumIDs := make([]types.Checksum, len(contracts)) + signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() + + // store contract on chain + for i, contract := range contracts { + msg := types.NewMsgStoreCode(signer, contract) + + res, err := wasmClientKeeper.StoreCode(ctx, msg) + suite.Require().NoError(err) + + checksumIDs[i] = res.Checksum + } + + // malleate after storing contracts + tc.malleate() + + err := keeper.InitializePinnedCodes(ctx) + + expPass := tc.expError == nil + if expPass { + suite.Require().NoError(err) + suite.ElementsMatch(checksumIDs, capturedChecksums) + } else { + suite.Require().ErrorIs(err, tc.expError) + } + }) + } +} diff --git a/modules/light-clients/08-wasm/testing/wasm_endpoint.go b/modules/light-clients/08-wasm/testing/wasm_endpoint.go new file mode 100644 index 00000000000..6d126ea35c9 --- /dev/null +++ b/modules/light-clients/08-wasm/testing/wasm_endpoint.go @@ -0,0 +1,52 @@ +package testing + +import ( + "github.com/stretchr/testify/require" + + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" +) + +// WasmEndpoint is a wrapper around the ibctesting pkg Endpoint struct. +// It will override any functions which require special handling for the wasm client. +type WasmEndpoint struct { + *ibctesting.Endpoint +} + +// NewWasmEndpoint returns a wasm endpoint with the default ibctesting pkg +// Endpoint embedded. +func NewWasmEndpoint(chain *ibctesting.TestChain) *WasmEndpoint { + return &WasmEndpoint{ + Endpoint: ibctesting.NewDefaultEndpoint(chain), + } +} + +// CreateClient creates an wasm client on a mock cometbft chain. +// The client and consensus states are represented by byte slices +// and the starting height is 1. +func (endpoint *WasmEndpoint) CreateClient() error { + checksum, err := types.CreateChecksum(Code) + require.NoError(endpoint.Chain.TB, err) + + wrappedClientStateBz := clienttypes.MustMarshalClientState(endpoint.Chain.App.AppCodec(), CreateMockTendermintClientState(clienttypes.NewHeight(1, 5))) + wrappedClientConsensusStateBz := clienttypes.MustMarshalConsensusState(endpoint.Chain.App.AppCodec(), MockTendermintClientConsensusState) + + clientState := types.NewClientState(wrappedClientStateBz, checksum, clienttypes.NewHeight(0, 1)) + consensusState := types.NewConsensusState(wrappedClientConsensusStateBz) + + msg, err := clienttypes.NewMsgCreateClient( + clientState, consensusState, endpoint.Chain.SenderAccount.GetAddress().String(), + ) + require.NoError(endpoint.Chain.TB, err) + + res, err := endpoint.Chain.SendMsgs(msg) + if err != nil { + return err + } + + endpoint.ClientID, err = ibctesting.ParseClientIDFromEvents(res.Events) + require.NoError(endpoint.Chain.TB, err) + + return nil +} diff --git a/modules/light-clients/08-wasm/types/types_test.go b/modules/light-clients/08-wasm/types/types_test.go new file mode 100644 index 00000000000..e1729f66997 --- /dev/null +++ b/modules/light-clients/08-wasm/types/types_test.go @@ -0,0 +1,131 @@ +package types_test + +import ( + "encoding/json" + "errors" + "testing" + + wasmvm "github.com/CosmWasm/wasmvm" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + dbm "github.com/cosmos/cosmos-db" + testifysuite "github.com/stretchr/testify/suite" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + wasmtesting "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing" + simapp "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing/simapp" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibctesting "github.com/cosmos/ibc-go/v8/testing" +) + +const ( + tmClientID = "07-tendermint-0" + defaultWasmClientID = "08-wasm-0" +) + +type TypesTestSuite struct { + testifysuite.Suite + coordinator *ibctesting.Coordinator + chainA *ibctesting.TestChain + mockVM *wasmtesting.MockWasmEngine + + checksum types.Checksum +} + +func TestWasmTestSuite(t *testing.T) { + testifysuite.Run(t, new(TypesTestSuite)) +} + +func (suite *TypesTestSuite) SetupTest() { + ibctesting.DefaultTestingAppInit = setupTestingApp + + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) +} + +func init() { + ibctesting.DefaultTestingAppInit = setupTestingApp +} + +// GetSimApp returns the duplicated SimApp from within the 08-wasm directory. +// This must be used instead of chain.GetSimApp() for tests within this directory. +func GetSimApp(chain *ibctesting.TestChain) *simapp.SimApp { + app, ok := chain.App.(*simapp.SimApp) + if !ok { + panic(errors.New("chain is not a simapp.SimApp")) + } + return app +} + +// setupTestingApp provides the duplicated simapp which is specific to the 08-wasm module on chain creation. +func setupTestingApp() (ibctesting.TestingApp, map[string]json.RawMessage) { + db := dbm.NewMemDB() + app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, nil) + return app, app.DefaultGenesis() +} + +// SetupWasmWithMockVM sets up mock cometbft chain with a mock vm. +func (suite *TypesTestSuite) SetupWasmWithMockVM() { + ibctesting.DefaultTestingAppInit = suite.setupWasmWithMockVM + + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + suite.checksum = storeWasmCode(suite, wasmtesting.Code) +} + +func (suite *TypesTestSuite) setupWasmWithMockVM() (ibctesting.TestingApp, map[string]json.RawMessage) { + suite.mockVM = wasmtesting.NewMockWasmEngine() + + suite.mockVM.InstantiateFn = func(checksum wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { + var payload types.InstantiateMessage + err := json.Unmarshal(initMsg, &payload) + suite.Require().NoError(err) + + wrappedClientState := clienttypes.MustUnmarshalClientState(suite.chainA.App.AppCodec(), payload.ClientState) + + clientState := types.NewClientState(payload.ClientState, payload.Checksum, wrappedClientState.GetLatestHeight().(clienttypes.Height)) + clientStateBz := clienttypes.MustMarshalClientState(suite.chainA.App.AppCodec(), clientState) + store.Set(host.ClientStateKey(), clientStateBz) + + consensusState := types.NewConsensusState(payload.ConsensusState) + consensusStateBz := clienttypes.MustMarshalConsensusState(suite.chainA.App.AppCodec(), consensusState) + store.Set(host.ConsensusStateKey(clientState.GetLatestHeight()), consensusStateBz) + + resp, err := json.Marshal(types.EmptyResult{}) + suite.Require().NoError(err) + + return &wasmvmtypes.Response{Data: resp}, 0, nil + } + + suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(checksum wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) ([]byte, uint64, error) { + resp, err := json.Marshal(types.StatusResult{Status: exported.Active.String()}) + suite.Require().NoError(err) + return resp, wasmtesting.DefaultGasUsed, nil + }) + + db := dbm.NewMemDB() + app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, suite.mockVM) + + // reset DefaultTestingAppInit to its original value + ibctesting.DefaultTestingAppInit = setupTestingApp + return app, app.DefaultGenesis() +} + +// storeWasmCode stores the wasm code on chain and returns the checksum. +func storeWasmCode(suite *TypesTestSuite, wasmCode []byte) types.Checksum { + ctx := suite.chainA.GetContext().WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) + + msg := types.NewMsgStoreCode(authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmCode) + response, err := GetSimApp(suite.chainA).WasmClientKeeper.StoreCode(ctx, msg) + suite.Require().NoError(err) + suite.Require().NotNil(response.Checksum) + return response.Checksum +} From d406f3d487d462474616dbd005171b7ebe956a84 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 15 Jan 2024 14:56:08 +0100 Subject: [PATCH 2/8] chore: rm -rf e2e --- e2e/tests/wasm/grandpa_test.go | 768 --------------------------------- e2e/testsuite/testconfig.go | 725 ------------------------------- e2e/testvalues/values.go | 101 ----- 3 files changed, 1594 deletions(-) delete mode 100644 e2e/tests/wasm/grandpa_test.go delete mode 100644 e2e/testsuite/testconfig.go delete mode 100644 e2e/testvalues/values.go diff --git a/e2e/tests/wasm/grandpa_test.go b/e2e/tests/wasm/grandpa_test.go deleted file mode 100644 index b67a4c930e7..00000000000 --- a/e2e/tests/wasm/grandpa_test.go +++ /dev/null @@ -1,768 +0,0 @@ -//go:build !test_e2e - -package wasm - -import ( - "context" - "crypto/sha256" - "encoding/hex" - "fmt" - "io" - "os" - "testing" - "time" - - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" - testifysuite "github.com/stretchr/testify/suite" - - sdkmath "cosmossdk.io/math" - - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - "github.com/cosmos/ibc-go/e2e/testsuite" - "github.com/cosmos/ibc-go/e2e/testvalues" - wasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibctesting "github.com/cosmos/ibc-go/v8/testing" -) - -const ( - composable = "composable" - simd = "simd" - wasmSimdImage = "ghcr.io/cosmos/ibc-go-wasm-simd" - - defaultWasmClientID = "08-wasm-0" -) - -func TestGrandpaTestSuite(t *testing.T) { - // this test suite only works with the hyperspace relayer, for now hard code this here. - // this will enforce that the hyperspace relayer is used in CI. - t.Setenv(testsuite.RelayerIDEnv, "hyperspace") - - // TODO: this value should be passed in via the config file / CI, not hard coded in the test. - // This configuration can be handled in https://github.com/cosmos/ibc-go/issues/4697 - if testsuite.IsCI() && !testsuite.IsFork() { - t.Setenv(testsuite.ChainImageEnv, wasmSimdImage) - } - - // wasm tests require a longer voting period to account for the time it takes to upload a contract. - testvalues.VotingPeriod = time.Minute * 5 - - validateTestConfig() - testifysuite.Run(t, new(GrandpaTestSuite)) -} - -type GrandpaTestSuite struct { - testsuite.E2ETestSuite -} - -// TestMsgTransfer_Succeeds_GrandpaContract features -// * sets up a Polkadot parachain -// * sets up a Cosmos chain -// * sets up the Hyperspace relayer -// * Funds a user wallet on both chains -// * Pushes a wasm client contract to the Cosmos chain -// * create client, connection, and channel in relayer -// * start relayer -// * send transfer over ibc -func (s *GrandpaTestSuite) TestMsgTransfer_Succeeds_GrandpaContract() { - ctx := context.Background() - t := s.T() - - chainA, chainB := s.GetGrandpaTestChains() - - polkadotChain := chainA.(*polkadot.PolkadotChain) - cosmosChain := chainB.(*cosmos.CosmosChain) - - // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. - r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { - options.SkipPathCreation = true - }) - - s.InitGRPCClients(cosmosChain) - - cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) - - file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") - s.Require().NoError(err) - - checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) - - s.Require().NotEmpty(checksum, "checksum was empty but should not have been") - - eRep := s.GetRelayerExecReporter() - - // Set client contract hash in cosmos chain config - err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) - s.Require().NoError(err) - - // Ensure parachain has started (starts 1 session/epoch after relay chain) - err = testutil.WaitForBlocks(ctx, 1, polkadotChain) - s.Require().NoError(err, "polkadot chain failed to make blocks") - - // Fund users on both cosmos and parachain, mints Asset 1 for Alice - fundAmount := int64(12_333_000_000_000) - polkadotUser, cosmosUser := s.fundUsers(ctx, fundAmount, polkadotChain, cosmosChain) - - // TODO: this can be refactored to broadcast a MsgTransfer instead of CLI. - // https://github.com/cosmos/ibc-go/issues/4963 - amountToSend := int64(1_770_000) - transfer := ibc.WalletAmount{ - Address: polkadotUser.FormattedAddress(), - Denom: cosmosChain.Config().Denom, - Amount: sdkmath.NewInt(amountToSend), - } - - pathName := s.GetPathName(0) - - err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) - s.Require().NoError(err) - - // Create new clients - err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness - s.Require().NoError(err) - - // Create a new connection - err = r.CreateConnections(ctx, eRep, pathName) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // Create a new channel & get channels from each chain - err = r.CreateChannel(ctx, eRep, pathName, ibc.DefaultChannelOpts()) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // Start relayer - s.Require().NoError(r.StartRelayer(ctx, eRep, pathName)) - - t.Run("send successful IBC transfer from Cosmos to Polkadot parachain", func(t *testing.T) { - // Send 1.77 stake from cosmosUser to parachainUser - tx, err := cosmosChain.SendIBCTransfer(ctx, "channel-0", cosmosUser.KeyName(), transfer, ibc.TransferOptions{}) - s.Require().NoError(tx.Validate(), "source ibc transfer tx is invalid") - s.Require().NoError(err) - // verify token balance for cosmos user has decreased - balance, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) - s.Require().NoError(err) - s.Require().Equal(balance, sdkmath.NewInt(fundAmount-amountToSend), "unexpected cosmos user balance after first tx") - err = testutil.WaitForBlocks(ctx, 15, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // Verify tokens arrived on parachain user - parachainUserStake, err := polkadotChain.GetIbcBalance(ctx, string(polkadotUser.Address()), 2) - s.Require().NoError(err) - s.Require().Equal(amountToSend, parachainUserStake.Amount.Int64(), "unexpected parachain user balance after first tx") - }) - - t.Run("send two successful IBC transfers from Polkadot parachain to Cosmos, first with ibc denom, second with parachain denom", func(t *testing.T) { - // Send 1.16 stake from parachainUser to cosmosUser - amountToReflect := int64(1_160_000) - reflectTransfer := ibc.WalletAmount{ - Address: cosmosUser.FormattedAddress(), - Denom: "2", // stake - Amount: sdkmath.NewInt(amountToReflect), - } - _, err := polkadotChain.SendIBCTransfer(ctx, "channel-0", polkadotUser.KeyName(), reflectTransfer, ibc.TransferOptions{}) - s.Require().NoError(err) - - // Send 1.88 "UNIT" from Alice to cosmosUser - amountUnits := sdkmath.NewInt(1_880_000_000_000) - unitTransfer := ibc.WalletAmount{ - Address: cosmosUser.FormattedAddress(), - Denom: "1", // UNIT - Amount: amountUnits, - } - _, err = polkadotChain.SendIBCTransfer(ctx, "channel-0", "alice", unitTransfer, ibc.TransferOptions{}) - s.Require().NoError(err) - - // Wait for MsgRecvPacket on cosmos chain - finalStakeBal := sdkmath.NewInt(fundAmount - amountToSend + amountToReflect) - err = cosmos.PollForBalance(ctx, cosmosChain, 20, ibc.WalletAmount{ - Address: cosmosUser.FormattedAddress(), - Denom: cosmosChain.Config().Denom, - Amount: finalStakeBal, - }) - s.Require().NoError(err) - - // Wait for a new update state - err = testutil.WaitForBlocks(ctx, 5, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // Verify cosmos user's final "stake" balance - cosmosUserStakeBal, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) - s.Require().NoError(err) - s.Require().True(cosmosUserStakeBal.Equal(finalStakeBal)) - - // Verify cosmos user's final "unit" balance - unitDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", "UNIT")) - cosmosUserUnitBal, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), unitDenomTrace.IBCDenom()) - s.Require().NoError(err) - s.Require().True(cosmosUserUnitBal.Equal(amountUnits)) - - // Verify parachain user's final "unit" balance (will be less than expected due gas costs for stake tx) - parachainUserUnits, err := polkadotChain.GetIbcBalance(ctx, string(polkadotUser.Address()), 1) - s.Require().NoError(err) - s.Require().True(parachainUserUnits.Amount.LTE(sdkmath.NewInt(fundAmount)), "parachain user's final unit amount not expected") - - // Verify parachain user's final "stake" balance - parachainUserStake, err := polkadotChain.GetIbcBalance(ctx, string(polkadotUser.Address()), 2) - s.Require().NoError(err) - s.Require().True(parachainUserStake.Amount.Equal(sdkmath.NewInt(amountToSend-amountToReflect)), "parachain user's final stake amount not expected") - }) -} - -// TestMsgTransfer_TimesOut_GrandpaContract -// sets up cosmos and polkadot chains, hyperspace relayer, and funds users on both chains -// * sends transfer over ibc channel, this transfer should timeout -func (s *GrandpaTestSuite) TestMsgTransfer_TimesOut_GrandpaContract() { - ctx := context.Background() - t := s.T() - - chainA, chainB := s.GetGrandpaTestChains() - - polkadotChain := chainA.(*polkadot.PolkadotChain) - cosmosChain := chainB.(*cosmos.CosmosChain) - - // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. - r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { - options.SkipPathCreation = true - }) - - s.InitGRPCClients(cosmosChain) - - cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) - - file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") - s.Require().NoError(err) - - checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) - - s.Require().NotEmpty(checksum, "checksum was empty but should not have been") - - eRep := s.GetRelayerExecReporter() - - // Set client contract hash in cosmos chain config - err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) - s.Require().NoError(err) - - // Ensure parachain has started (starts 1 session/epoch after relay chain) - err = testutil.WaitForBlocks(ctx, 1, polkadotChain) - s.Require().NoError(err, "polkadot chain failed to make blocks") - - // Fund users on both cosmos and parachain, mints Asset 1 for Alice - fundAmount := int64(12_333_000_000_000) - polkadotUser, cosmosUser := s.fundUsers(ctx, fundAmount, polkadotChain, cosmosChain) - - // TODO: this can be refactored to broadcast a MsgTransfer instead of CLI. - // https://github.com/cosmos/ibc-go/issues/4963 - amountToSend := int64(1_770_000) - transfer := ibc.WalletAmount{ - Address: polkadotUser.FormattedAddress(), - Denom: cosmosChain.Config().Denom, - Amount: sdkmath.NewInt(amountToSend), - } - - pathName := s.GetPathName(0) - - err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) - s.Require().NoError(err) - - // Create new clients - err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness - s.Require().NoError(err) - - // Create a new connection - err = r.CreateConnections(ctx, eRep, pathName) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // Create a new channel & get channels from each chain - err = r.CreateChannel(ctx, eRep, pathName, ibc.DefaultChannelOpts()) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // Start relayer - s.Require().NoError(r.StartRelayer(ctx, eRep, pathName)) - - t.Run("IBC transfer from Cosmos chain to Polkadot parachain times out", func(t *testing.T) { - // Stop relayer - s.Require().NoError(r.StopRelayer(ctx, s.GetRelayerExecReporter())) - - tx, err := cosmosChain.SendIBCTransfer(ctx, "channel-0", cosmosUser.KeyName(), transfer, ibc.TransferOptions{Timeout: testvalues.ImmediatelyTimeout()}) - s.Require().NoError(err) - s.Require().NoError(tx.Validate(), "source ibc transfer tx is invalid") - time.Sleep(time.Nanosecond * 1) // want it to timeout immediately - - // check that tokens are escrowed - actualBalance, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) - s.Require().NoError(err) - expected := fundAmount - amountToSend - s.Require().Equal(expected, actualBalance.Int64()) - - // start relayer - s.Require().NoError(r.StartRelayer(ctx, s.GetRelayerExecReporter(), s.GetPathName(0))) - err = testutil.WaitForBlocks(ctx, 15, polkadotChain, cosmosChain) - s.Require().NoError(err) - - // ensure that receiver on parachain did not receive any tokens - receiverBalance, err := polkadotChain.GetIbcBalance(ctx, polkadotUser.FormattedAddress(), 2) - s.Require().NoError(err) - s.Require().Equal(int64(0), receiverBalance.Amount.Int64()) - - // check that tokens have been refunded to sender address - senderBalance, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) - s.Require().NoError(err) - s.Require().Equal(fundAmount, senderBalance.Int64()) - }) -} - -// TestMsgMigrateContract_Success_GrandpaContract features -// * sets up a Polkadot parachain -// * sets up a Cosmos chain -// * sets up the Hyperspace relayer -// * Funds a user wallet on both chains -// * Pushes a wasm client contract to the Cosmos chain -// * create client in relayer -// * Pushes a new wasm client contract to the Cosmos chain -// * Migrates the wasm client contract -func (s *GrandpaTestSuite) TestMsgMigrateContract_Success_GrandpaContract() { - ctx := context.Background() - - chainA, chainB := s.GetGrandpaTestChains() - - polkadotChain := chainA.(*polkadot.PolkadotChain) - cosmosChain := chainB.(*cosmos.CosmosChain) - - // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. - r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { - options.SkipPathCreation = true - }) - - s.InitGRPCClients(cosmosChain) - - cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) - - file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") - s.Require().NoError(err) - - checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) - - s.Require().NotEmpty(checksum, "checksum was empty but should not have been") - - eRep := s.GetRelayerExecReporter() - - // Set client contract hash in cosmos chain config - err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) - s.Require().NoError(err) - - // Ensure parachain has started (starts 1 session/epoch after relay chain) - err = testutil.WaitForBlocks(ctx, 1, polkadotChain) - s.Require().NoError(err, "polkadot chain failed to make blocks") - - pathName := s.GetPathName(0) - - err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) - s.Require().NoError(err) - - // Create new clients - err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness - s.Require().NoError(err) - - // Do not start relayer - - // This contract is a dummy contract that will always succeed migration. - // Other entry points are unimplemented. - migrateFile, err := os.Open("contracts/migrate_success.wasm.gz") - s.Require().NoError(err) - - // First Store the code - newChecksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, migrateFile) - s.Require().NotEmpty(newChecksum, "checksum was empty but should not have been") - - newChecksumBz, err := hex.DecodeString(newChecksum) - s.Require().NoError(err) - - // Attempt to migrate the contract - message := wasmtypes.NewMsgMigrateContract( - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - defaultWasmClientID, - newChecksumBz, - []byte("{}"), - ) - - s.ExecuteAndPassGovV1Proposal(ctx, message, cosmosChain, cosmosWallet) - - clientState, err := s.QueryClientState(ctx, cosmosChain, defaultWasmClientID) - s.Require().NoError(err) - - wasmClientState, ok := clientState.(*wasmtypes.ClientState) - s.Require().True(ok) - - s.Require().Equal(newChecksumBz, wasmClientState.Checksum) -} - -// TestMsgMigrateContract_ContractError_GrandpaContract features -// * sets up a Polkadot parachain -// * sets up a Cosmos chain -// * sets up the Hyperspace relayer -// * Funds a user wallet on both chains -// * Pushes a wasm client contract to the Cosmos chain -// * create client in relayer -// * Pushes a new wasm client contract to the Cosmos chain -// * Migrates the wasm client contract with a contract that will always fail migration -func (s *GrandpaTestSuite) TestMsgMigrateContract_ContractError_GrandpaContract() { - ctx := context.Background() - - chainA, chainB := s.GetGrandpaTestChains() - - polkadotChain := chainA.(*polkadot.PolkadotChain) - cosmosChain := chainB.(*cosmos.CosmosChain) - - // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. - r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { - options.SkipPathCreation = true - }) - - s.InitGRPCClients(cosmosChain) - - cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) - - file, err := os.Open("contracts/ics10_grandpa_cw.wasm.gz") - s.Require().NoError(err) - checksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) - - s.Require().NotEmpty(checksum, "checksum was empty but should not have been") - - eRep := s.GetRelayerExecReporter() - - // Set client contract hash in cosmos chain config - err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), checksum) - s.Require().NoError(err) - - // Ensure parachain has started (starts 1 session/epoch after relay chain) - err = testutil.WaitForBlocks(ctx, 1, polkadotChain) - s.Require().NoError(err, "polkadot chain failed to make blocks") - - pathName := s.GetPathName(0) - - err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) - s.Require().NoError(err) - - // Create new clients - err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) - s.Require().NoError(err) - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) // these 1 block waits seem to be needed to reduce flakiness - s.Require().NoError(err) - - // Do not start the relayer - - // This contract is a dummy contract that will always fail migration. - // Other entry points are unimplemented. - migrateFile, err := os.Open("contracts/migrate_error.wasm.gz") - s.Require().NoError(err) - - // First Store the code - newChecksum := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, migrateFile) - s.Require().NotEmpty(newChecksum, "checksum was empty but should not have been") - - newChecksumBz, err := hex.DecodeString(newChecksum) - s.Require().NoError(err) - - // Attempt to migrate the contract - message := wasmtypes.NewMsgMigrateContract( - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - defaultWasmClientID, - newChecksumBz, - []byte("{}"), - ) - - err = s.ExecuteGovV1Proposal(ctx, message, cosmosChain, cosmosWallet) - s.Require().Error(err) - - version := cosmosChain.Nodes()[0].Image.Version - if govV1FailedReasonFeatureReleases.IsSupported(version) { - // This is the error string that is returned from the contract - s.Require().ErrorContains(err, "migration not supported") - } -} - -// TestRecoverClient_Succeeds_GrandpaContract features: -// * setup cosmos and polkadot substrates nodes -// * funds test user wallets on both chains -// * stores a wasm client contract on the cosmos chain -// * creates a subject client using the hyperspace relayer -// * waits the expiry period and asserts the subject client status has expired -// * creates a substitute client using the hyperspace relayer -// * executes a gov proposal to recover the expired client -// * asserts the status of the subject client has been restored to active -// NOTE: The testcase features a modified grandpa client contract compiled as: -// - ics10_grandpa_cw_expiry.wasm.gz -// This contract modifies the unbonding period to 1600s with the trusting period being calculated as (unbonding period / 3). -func (s *GrandpaTestSuite) TestRecoverClient_Succeeds_GrandpaContract() { - ctx := context.Background() - - // set the trusting period to a value which will still be valid upon client creation, but invalid before the first update - // the contract uses 1600s as the unbonding period with the trusting period evaluating to (unbonding period / 3) - modifiedTrustingPeriod := (1600 * time.Second) / 3 - - chainA, chainB := s.GetGrandpaTestChains() - - polkadotChain := chainA.(*polkadot.PolkadotChain) - cosmosChain := chainB.(*cosmos.CosmosChain) - - // we explicitly skip path creation as the contract needs to be uploaded before we can create clients. - r := s.ConfigureRelayer(ctx, polkadotChain, cosmosChain, nil, func(options *interchaintest.InterchainBuildOptions) { - options.SkipPathCreation = true - }) - - s.InitGRPCClients(cosmosChain) - - cosmosWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) - - file, err := os.Open("contracts/ics10_grandpa_cw_expiry.wasm.gz") - s.Require().NoError(err) - - codeHash := s.PushNewWasmClientProposal(ctx, cosmosChain, cosmosWallet, file) - s.Require().NotEmpty(codeHash, "codehash was empty but should not have been") - - eRep := s.GetRelayerExecReporter() - - // Set client contract hash in cosmos chain config - err = r.SetClientContractHash(ctx, eRep, cosmosChain.Config(), codeHash) - s.Require().NoError(err) - - // Ensure parachain has started (starts 1 session/epoch after relay chain) - err = testutil.WaitForBlocks(ctx, 1, polkadotChain) - s.Require().NoError(err, "polkadot chain failed to make blocks") - - // Fund users on both cosmos and parachain, mints Asset 1 for Alice - fundAmount := int64(12_333_000_000_000) - _, cosmosUser := s.fundUsers(ctx, fundAmount, polkadotChain, cosmosChain) - - pathName := s.GetPathName(0) - err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, polkadotChain.Config().ChainID, pathName) - s.Require().NoError(err) - - // create client pair with subject (bad trusting period) - subjectClientID := clienttypes.FormatClientIdentifier(wasmtypes.Wasm, 0) - // TODO: The hyperspace relayer makes no use of create client opts - // https://github.com/strangelove-ventures/interchaintest/blob/main/relayer/hyperspace/hyperspace_commander.go#L83 - s.SetupClients(ctx, r, ibc.CreateClientOptions{ - TrustingPeriod: modifiedTrustingPeriod.String(), // NOTE: this is hardcoded within the cw contract: ics10_grapnda_cw_expiry.wasm - }) - - // wait for block - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // wait the bad trusting period - time.Sleep(modifiedTrustingPeriod) - - // create client pair with substitute - substituteClientID := clienttypes.FormatClientIdentifier(wasmtypes.Wasm, 1) - s.SetupClients(ctx, r, ibc.DefaultClientOpts()) - - // wait for block - err = testutil.WaitForBlocks(ctx, 1, cosmosChain, polkadotChain) - s.Require().NoError(err) - - // ensure subject client is expired - status, err := s.clientStatus(ctx, cosmosChain, subjectClientID) - s.Require().NoError(err) - s.Require().Equal(ibcexported.Expired.String(), status, "unexpected subject client status") - - // ensure substitute client is active - status, err = s.clientStatus(ctx, cosmosChain, substituteClientID) - s.Require().NoError(err) - s.Require().Equal(ibcexported.Active.String(), status, "unexpected substitute client status") - - version := cosmosChain.Nodes()[0].Image.Version - if govV1FeatureReleases.IsSupported(version) { - // create and execute a client recovery proposal - authority, err := s.QueryModuleAccountAddress(ctx, govtypes.ModuleName, cosmosChain) - s.Require().NoError(err) - - msgRecoverClient := clienttypes.NewMsgRecoverClient(authority.String(), subjectClientID, substituteClientID) - s.Require().NotNil(msgRecoverClient) - s.ExecuteAndPassGovV1Proposal(ctx, msgRecoverClient, cosmosChain, cosmosUser) - } else { - proposal := clienttypes.NewClientUpdateProposal(ibctesting.Title, ibctesting.Description, subjectClientID, substituteClientID) - s.ExecuteAndPassGovV1Beta1Proposal(ctx, cosmosChain, cosmosWallet, proposal) - } - - // ensure subject client is active - status, err = s.clientStatus(ctx, cosmosChain, subjectClientID) - s.Require().NoError(err) - s.Require().Equal(ibcexported.Active.String(), status) - - // ensure substitute client is active - status, err = s.clientStatus(ctx, cosmosChain, substituteClientID) - s.Require().NoError(err) - s.Require().Equal(ibcexported.Active.String(), status) -} - -// extractChecksumFromGzippedContent takes a gzipped wasm contract and returns the checksum. -func (s *GrandpaTestSuite) extractChecksumFromGzippedContent(zippedContent []byte) string { - content, err := wasmtypes.Uncompress(zippedContent, wasmtypes.MaxWasmByteSize()) - s.Require().NoError(err) - - checksum32 := sha256.Sum256(content) - return hex.EncodeToString(checksum32[:]) -} - -// PushNewWasmClientProposal submits a new wasm client governance proposal to the chain. -func (s *GrandpaTestSuite) PushNewWasmClientProposal(ctx context.Context, chain *cosmos.CosmosChain, wallet ibc.Wallet, proposalContentReader io.Reader) string { - zippedContent, err := io.ReadAll(proposalContentReader) - s.Require().NoError(err) - - computedChecksum := s.extractChecksumFromGzippedContent(zippedContent) - - s.Require().NoError(err) - message := wasmtypes.MsgStoreCode{ - Signer: authtypes.NewModuleAddress(govtypes.ModuleName).String(), - WasmByteCode: zippedContent, - } - - s.ExecuteAndPassGovV1Proposal(ctx, &message, chain, wallet) - - checksumBz, err := s.QueryWasmCode(ctx, chain, computedChecksum) - s.Require().NoError(err) - - checksum32 := sha256.Sum256(checksumBz) - actualChecksum := hex.EncodeToString(checksum32[:]) - s.Require().Equal(computedChecksum, actualChecksum, "checksum returned from query did not match the computed checksum") - - return actualChecksum -} - -func (s *GrandpaTestSuite) clientStatus(ctx context.Context, chain ibc.Chain, clientID string) (string, error) { - queryClient := s.GetChainGRCPClients(chain).ClientQueryClient - res, err := queryClient.ClientStatus(ctx, &clienttypes.QueryClientStatusRequest{ - ClientId: clientID, - }) - if err != nil { - return "", err - } - - return res.Status, nil -} - -func (s *GrandpaTestSuite) fundUsers(ctx context.Context, fundAmount int64, polkadotChain ibc.Chain, cosmosChain ibc.Chain) (ibc.Wallet, ibc.Wallet) { - users := interchaintest.GetAndFundTestUsers(s.T(), ctx, "user", sdkmath.NewInt(fundAmount), polkadotChain, cosmosChain) - polkadotUser, cosmosUser := users[0], users[1] - err := testutil.WaitForBlocks(ctx, 2, polkadotChain, cosmosChain) // Only waiting 1 block is flaky for parachain - s.Require().NoError(err, "cosmos or polkadot chain failed to make blocks") - - // Check balances are correct - amount := sdkmath.NewInt(fundAmount) - polkadotUserAmount, err := polkadotChain.GetBalance(ctx, polkadotUser.FormattedAddress(), polkadotChain.Config().Denom) - s.Require().NoError(err) - s.Require().True(polkadotUserAmount.Equal(amount), "Initial polkadot user amount not expected") - - parachainUserAmount, err := polkadotChain.GetBalance(ctx, polkadotUser.FormattedAddress(), "") - s.Require().NoError(err) - s.Require().True(parachainUserAmount.Equal(amount), "Initial parachain user amount not expected") - - cosmosUserAmount, err := cosmosChain.GetBalance(ctx, cosmosUser.FormattedAddress(), cosmosChain.Config().Denom) - s.Require().NoError(err) - s.Require().True(cosmosUserAmount.Equal(amount), "Initial cosmos user amount not expected") - - return polkadotUser, cosmosUser -} - -// validateTestConfig ensures that the given test config is valid for this test suite. -func validateTestConfig() { - tc := testsuite.LoadConfig() - if tc.ActiveRelayer != "hyperspace" { - panic(fmt.Errorf("hyperspace relayer must be specified")) - } -} - -// getConfigOverrides returns configuration overrides that will be applied to the simapp. -func getConfigOverrides() map[string]any { - consensusOverrides := make(testutil.Toml) - blockTime := 5 - blockT := (time.Duration(blockTime) * time.Second).String() - consensusOverrides["timeout_commit"] = blockT - consensusOverrides["timeout_propose"] = blockT - - configTomlOverrides := make(testutil.Toml) - configTomlOverrides["consensus"] = consensusOverrides - configTomlOverrides["log_level"] = "info" - - configFileOverrides := make(map[string]any) - configFileOverrides["config/config.toml"] = configTomlOverrides - return configFileOverrides -} - -// GetGrandpaTestChains returns the configured chains for the grandpa test suite. -func (s *GrandpaTestSuite) GetGrandpaTestChains() (ibc.Chain, ibc.Chain) { - return s.GetChains(func(options *testsuite.ChainOptions) { - // configure chain A (polkadot) - options.ChainASpec.ChainName = composable - options.ChainASpec.Type = "polkadot" - options.ChainASpec.ChainID = "rococo-local" - options.ChainASpec.Name = "composable" - options.ChainASpec.Images = []ibc.DockerImage{ - // TODO: https://github.com/cosmos/ibc-go/issues/4965 - { - Repository: "ghcr.io/misko9/polkadot-node", - Version: "v39", - UidGid: "1000:1000", - }, - { - Repository: "ghcr.io/misko9/parachain-node", - Version: "20231122v39", - UidGid: "1000:1000", - }, - } - options.ChainASpec.Bin = "polkadot" - options.ChainASpec.Bech32Prefix = composable - options.ChainASpec.Denom = "uDOT" - options.ChainASpec.GasPrices = "" - options.ChainASpec.GasAdjustment = 0 - options.ChainASpec.TrustingPeriod = "" - options.ChainASpec.CoinType = "354" - - // these values are set by default for our cosmos chains, we need to explicitly remove them here. - options.ChainASpec.ModifyGenesis = nil - options.ChainASpec.ConfigFileOverrides = nil - options.ChainASpec.EncodingConfig = nil - - // configure chain B (cosmos) - options.ChainBSpec.ChainName = simd // Set chain name so that a suffix with a "dash" is not appended (required for hyperspace) - options.ChainBSpec.Type = "cosmos" - options.ChainBSpec.Name = "simd" - options.ChainBSpec.ChainID = simd - options.ChainBSpec.Bin = simd - options.ChainBSpec.Bech32Prefix = "cosmos" - - // TODO: hyperspace relayer assumes a denom of "stake", hard code this here right now. - // https://github.com/cosmos/ibc-go/issues/4964 - options.ChainBSpec.Denom = "stake" - options.ChainBSpec.GasPrices = "0.00stake" - options.ChainBSpec.GasAdjustment = 1 - options.ChainBSpec.TrustingPeriod = "504h" - options.ChainBSpec.CoinType = "118" - - options.ChainBSpec.ChainConfig.NoHostMount = false - options.ChainBSpec.ConfigFileOverrides = getConfigOverrides() - options.ChainBSpec.EncodingConfig = testsuite.SDKEncodingConfig() - }) -} diff --git a/e2e/testsuite/testconfig.go b/e2e/testsuite/testconfig.go deleted file mode 100644 index f8cfe1b5b7a..00000000000 --- a/e2e/testsuite/testconfig.go +++ /dev/null @@ -1,725 +0,0 @@ -package testsuite - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "path" - "strings" - "time" - - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - interchaintestutil "github.com/strangelove-ventures/interchaintest/v8/testutil" - "gopkg.in/yaml.v2" - - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module/testutil" - genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - - cmtjson "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" - wasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibctypes "github.com/cosmos/ibc-go/v8/modules/core/types" -) - -const ( - // ChainImageEnv specifies the image that the chains will use. If left unspecified, it will - // default to being determined based on the specified binary. E.g. ghcr.io/cosmos/ibc-go-simd - ChainImageEnv = "CHAIN_IMAGE" - // ChainATagEnv specifies the tag that Chain A will use. - ChainATagEnv = "CHAIN_A_TAG" - // ChainBTagEnv specifies the tag that Chain B will use. If unspecified - // the value will default to the same value as Chain A. - ChainBTagEnv = "CHAIN_B_TAG" - // RelayerIDEnv specifies the ID of the relayer to use. - RelayerIDEnv = "RELAYER_ID" - // ChainBinaryEnv binary is the binary that will be used for both chains. - ChainBinaryEnv = "CHAIN_BINARY" - // ChainUpgradeTagEnv specifies the upgrade version tag - ChainUpgradeTagEnv = "CHAIN_UPGRADE_TAG" - // ChainUpgradePlanEnv specifies the upgrade plan name - ChainUpgradePlanEnv = "CHAIN_UPGRADE_PLAN" - // E2EConfigFilePathEnv allows you to specify a custom path for the config file to be used. - E2EConfigFilePathEnv = "E2E_CONFIG_PATH" - - // defaultBinary is the default binary that will be used by the chains. - defaultBinary = "simd" - // defaultRlyTag is the tag that will be used if no relayer tag is specified. - // all images are here https://github.com/cosmos/relayer/pkgs/container/relayer/versions - defaultRlyTag = "latest" - - // TODO: https://github.com/cosmos/ibc-go/issues/4965 - defaultHyperspaceTag = "20231122v39" - // defaultHermesTag is the tag that will be used if no relayer tag is specified for hermes. - defaultHermesTag = "luca_joss-channel-upgrade-authority" - // defaultChainTag is the tag that will be used for the chains if none is specified. - defaultChainTag = "main" - // 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" -) - -func getChainImage(binary string) string { - if binary == "" { - binary = defaultBinary - } - return fmt.Sprintf("ghcr.io/cosmos/ibc-go-%s", binary) -} - -// TestConfig holds configuration used throughout the different e2e tests. -type TestConfig struct { - // ChainConfigs holds configuration values related to the chains used in the tests. - ChainConfigs []ChainConfig `yaml:"chains"` - // RelayerConfig holds all known relayer configurations that can be used in the tests. - RelayerConfigs []relayer.Config `yaml:"relayers"` - // ActiveRelayer specifies the relayer that will be used. It must match the ID of one of the entries in RelayerConfigs. - ActiveRelayer string `yaml:"activeRelayer"` - // UpgradeConfig holds values used only for the upgrade tests. - UpgradeConfig UpgradeConfig `yaml:"upgrade"` - // CometBFTConfig holds values for configuring CometBFT. - CometBFTConfig CometBFTConfig `yaml:"cometbft"` - // DebugConfig holds configuration for miscellaneous options. - DebugConfig DebugConfig `yaml:"debug"` -} - -// Validate validates the test configuration is valid for use within the tests. -// this should be called before using the configuration. -func (tc TestConfig) Validate() error { - if err := tc.validateChains(); err != nil { - return fmt.Errorf("invalid chain configuration: %w", err) - } - - if err := tc.validateRelayers(); err != nil { - return fmt.Errorf("invalid relayer configuration: %w", err) - } - return nil -} - -// validateChains validates the chain configurations. -func (tc TestConfig) validateChains() error { - for _, cfg := range tc.ChainConfigs { - if cfg.Binary == "" { - return fmt.Errorf("chain config missing binary: %+v", cfg) - } - if cfg.Image == "" { - return fmt.Errorf("chain config missing image: %+v", cfg) - } - if cfg.Tag == "" { - return fmt.Errorf("chain config missing tag: %+v", cfg) - } - - // TODO: validate chainID in https://github.com/cosmos/ibc-go/issues/4697 - // these are not passed in the CI at the moment. Defaults are used. - if !IsCI() { - if cfg.ChainID == "" { - return fmt.Errorf("chain config missing chainID: %+v", cfg) - } - } - - // TODO: validate number of nodes in https://github.com/cosmos/ibc-go/issues/4697 - // these are not passed in the CI at the moment. - if !IsCI() { - if cfg.NumValidators == 0 && cfg.NumFullNodes == 0 { - return fmt.Errorf("chain config missing number of validators or full nodes: %+v", cfg) - } - } - } - return nil -} - -// validateRelayers validates relayer configuration. -func (tc TestConfig) validateRelayers() error { - if len(tc.RelayerConfigs) < 1 { - return fmt.Errorf("no relayer configurations specified") - } - - for _, r := range tc.RelayerConfigs { - if r.ID == "" { - return fmt.Errorf("relayer config missing ID: %+v", r) - } - if r.Image == "" { - return fmt.Errorf("relayer config missing image: %+v", r) - } - if r.Tag == "" { - return fmt.Errorf("relayer config missing tag: %+v", r) - } - } - - if tc.GetActiveRelayerConfig() == nil { - return fmt.Errorf("active relayer %s not found in relayer configs: %+v", tc.ActiveRelayer, tc.RelayerConfigs) - } - - return nil -} - -// GetActiveRelayerConfig returns the currently specified relayer config. -func (tc TestConfig) GetActiveRelayerConfig() *relayer.Config { - for _, r := range tc.RelayerConfigs { - if r.ID == tc.ActiveRelayer { - return &r - } - } - return nil -} - -// GetChainNumValidators returns the number of validators for the specific chain index. -// default 1 -func (tc TestConfig) GetChainNumValidators(idx int) int { - if tc.ChainConfigs[idx].NumValidators > 0 { - return tc.ChainConfigs[idx].NumValidators - } - return 1 -} - -// GetChainNumFullNodes returns the number of full nodes for the specific chain index. -// default 0 -func (tc TestConfig) GetChainNumFullNodes(idx int) int { - if tc.ChainConfigs[idx].NumFullNodes > 0 { - return tc.ChainConfigs[idx].NumFullNodes - } - return 0 -} - -// GetChainAID returns the chain-id for chain A. -func (tc TestConfig) GetChainAID() string { - if tc.ChainConfigs[0].ChainID != "" { - return tc.ChainConfigs[0].ChainID - } - return "chainA-1" -} - -// GetChainBID returns the chain-id for chain B. -func (tc TestConfig) GetChainBID() string { - if tc.ChainConfigs[1].ChainID != "" { - return tc.ChainConfigs[1].ChainID - } - return "chainB-1" -} - -// UpgradeConfig holds values relevant to upgrade tests. -type UpgradeConfig struct { - PlanName string `yaml:"planName"` - Tag string `yaml:"tag"` -} - -// ChainConfig holds information about an individual chain used in the tests. -type ChainConfig struct { - ChainID string `yaml:"chainId"` - Image string `yaml:"image"` - Tag string `yaml:"tag"` - Binary string `yaml:"binary"` - NumValidators int `yaml:"numValidators"` - NumFullNodes int `yaml:"numFullNodes"` -} - -type CometBFTConfig struct { - LogLevel string `yaml:"logLevel"` -} - -type DebugConfig struct { - // DumpLogs forces the logs to be collected before removing test containers. - DumpLogs bool `yaml:"dumpLogs"` -} - -// LoadConfig attempts to load a atest configuration from the default file path. -// if any environment variables are specified, they will take precedence over the individual configuration -// options. -func LoadConfig() TestConfig { - tc := getConfig() - if err := tc.Validate(); err != nil { - panic(err) - } - return tc -} - -// getConfig returns the TestConfig with any environment variable overrides. -func getConfig() TestConfig { - fileTc, foundFile := fromFile() - if !foundFile { - return fromEnv() - } - - return applyEnvironmentVariableOverrides(fileTc) -} - -// fromFile returns a TestConfig from a json file and a boolean indicating if the file was found. -func fromFile() (TestConfig, bool) { - var tc TestConfig - bz, err := os.ReadFile(getConfigFilePath()) - if err != nil { - return TestConfig{}, false - } - - if err := yaml.Unmarshal(bz, &tc); err != nil { - panic(err) - } - - return tc, true -} - -// applyEnvironmentVariableOverrides applies all environment variable changes to the config -// loaded from a file. -func applyEnvironmentVariableOverrides(fromFile TestConfig) TestConfig { - envTc := fromEnv() - - if os.Getenv(ChainATagEnv) != "" { - fromFile.ChainConfigs[0].Tag = envTc.ChainConfigs[0].Tag - } - - if os.Getenv(ChainBTagEnv) != "" { - fromFile.ChainConfigs[1].Tag = envTc.ChainConfigs[1].Tag - } - - if os.Getenv(ChainBinaryEnv) != "" { - for i := range fromFile.ChainConfigs { - fromFile.ChainConfigs[i].Binary = envTc.ChainConfigs[i].Binary - } - } - - if os.Getenv(ChainImageEnv) != "" { - for i := range fromFile.ChainConfigs { - fromFile.ChainConfigs[i].Image = envTc.ChainConfigs[i].Image - } - } - - if os.Getenv(RelayerIDEnv) != "" { - fromFile.ActiveRelayer = envTc.ActiveRelayer - } - - if os.Getenv(ChainUpgradePlanEnv) != "" { - fromFile.UpgradeConfig.PlanName = envTc.UpgradeConfig.PlanName - } - - if os.Getenv(ChainUpgradeTagEnv) != "" { - fromFile.UpgradeConfig.Tag = envTc.UpgradeConfig.Tag - } - - return fromFile -} - -// fromEnv returns a TestConfig constructed from environment variables. -func fromEnv() TestConfig { - return TestConfig{ - ChainConfigs: getChainConfigsFromEnv(), - UpgradeConfig: getUpgradePlanConfigFromEnv(), - ActiveRelayer: os.Getenv(RelayerIDEnv), - - // TODO: we can remove this, and specify these values in a config file for the CI - // in https://github.com/cosmos/ibc-go/issues/4697 - RelayerConfigs: []relayer.Config{ - getDefaultRlyRelayerConfig(), - getDefaultHermesRelayerConfig(), - getDefaultHyperspaceRelayerConfig(), - }, - CometBFTConfig: CometBFTConfig{LogLevel: "info"}, - } -} - -// getChainConfigsFromEnv returns the chain configs from environment variables. -func getChainConfigsFromEnv() []ChainConfig { - chainBinary, ok := os.LookupEnv(ChainBinaryEnv) - if !ok { - chainBinary = defaultBinary - } - - chainATag, ok := os.LookupEnv(ChainATagEnv) - if !ok { - chainATag = defaultChainTag - } - - chainBTag, ok := os.LookupEnv(ChainBTagEnv) - if !ok { - chainBTag = chainATag - } - - chainAImage := getChainImage(chainBinary) - specifiedChainImage, ok := os.LookupEnv(ChainImageEnv) - if ok { - chainAImage = specifiedChainImage - } - - numValidators := 4 - numFullNodes := 1 - - chainBImage := chainAImage - return []ChainConfig{ - { - Image: chainAImage, - Tag: chainATag, - Binary: chainBinary, - NumValidators: numValidators, - NumFullNodes: numFullNodes, - }, - { - Image: chainBImage, - Tag: chainBTag, - Binary: chainBinary, - NumValidators: numValidators, - NumFullNodes: numFullNodes, - }, - } -} - -// getConfigFilePath returns the absolute path where the e2e config file should be. -func getConfigFilePath() string { - if absoluteConfigPath := os.Getenv(E2EConfigFilePathEnv); absoluteConfigPath != "" { - return absoluteConfigPath - } - - homeDir, err := os.UserHomeDir() - if err != nil { - panic(err) - } - return path.Join(homeDir, defaultConfigFileName) -} - -// TODO: remove in https://github.com/cosmos/ibc-go/issues/4697 -// getDefaultHermesRelayerConfig returns the default config for the hermes relayer. -func getDefaultHermesRelayerConfig() relayer.Config { - return relayer.Config{ - Tag: defaultHermesTag, - ID: relayer.Hermes, - Image: relayer.HermesRelayerRepository, - } -} - -// TODO: remove in https://github.com/cosmos/ibc-go/issues/4697 -// getDefaultRlyRelayerConfig returns the default config for the golang relayer. -func getDefaultRlyRelayerConfig() relayer.Config { - return relayer.Config{ - Tag: defaultRlyTag, - ID: relayer.Rly, - Image: relayer.RlyRelayerRepository, - } -} - -// TODO: remove in https://github.com/cosmos/ibc-go/issues/4697 -// getDefaultHyperspaceRelayerConfig returns the default config for the hyperspace relayer. -func getDefaultHyperspaceRelayerConfig() relayer.Config { - return relayer.Config{ - Tag: defaultHyperspaceTag, - ID: relayer.Hyperspace, - Image: relayer.HyperspaceRelayerRepository, - } -} - -// getUpgradePlanConfigFromEnv returns the upgrade config from environment variables. -func getUpgradePlanConfigFromEnv() UpgradeConfig { - upgradeTag, ok := os.LookupEnv(ChainUpgradeTagEnv) - if !ok { - upgradeTag = "" - } - - upgradePlan, ok := os.LookupEnv(ChainUpgradePlanEnv) - if !ok { - upgradePlan = "" - } - return UpgradeConfig{ - PlanName: upgradePlan, - Tag: upgradeTag, - } -} - -func GetChainATag() string { - return LoadConfig().ChainConfigs[0].Tag -} - -func GetChainBTag() string { - if chainBTag := LoadConfig().ChainConfigs[1].Tag; chainBTag != "" { - return chainBTag - } - return GetChainATag() -} - -// IsCI returns true if the tests are running in CI, false is returned -// if the tests are running locally. -// Note: github actions passes a CI env value of true by default to all runners. -func IsCI() bool { - return strings.ToLower(os.Getenv("CI")) == "true" -} - -// IsFork returns true if the tests are running in fork mode, false is returned otherwise. -func IsFork() bool { - return strings.ToLower(os.Getenv("FORK")) == "true" -} - -// ChainOptions stores chain configurations for the chains that will be -// created for the tests. They can be modified by passing ChainOptionConfiguration -// to E2ETestSuite.GetChains. -type ChainOptions struct { - ChainASpec *interchaintest.ChainSpec - ChainBSpec *interchaintest.ChainSpec - SkipPathCreation bool -} - -// ChainOptionConfiguration enables arbitrary configuration of ChainOptions. -type ChainOptionConfiguration func(options *ChainOptions) - -// DefaultChainOptions returns the default configuration for the chains. -// These options can be configured by passing configuration functions to E2ETestSuite.GetChains. -func DefaultChainOptions() ChainOptions { - tc := LoadConfig() - - chainACfg := newDefaultSimappConfig(tc.ChainConfigs[0], "simapp-a", tc.GetChainAID(), "atoma", tc.CometBFTConfig) - chainBCfg := newDefaultSimappConfig(tc.ChainConfigs[1], "simapp-b", tc.GetChainBID(), "atomb", tc.CometBFTConfig) - - chainAVal, chainAFn := getValidatorsAndFullNodes(0) - chainBVal, chainBFn := getValidatorsAndFullNodes(1) - - return ChainOptions{ - ChainASpec: &interchaintest.ChainSpec{ - ChainConfig: chainACfg, - NumFullNodes: &chainAFn, - NumValidators: &chainAVal, - }, - ChainBSpec: &interchaintest.ChainSpec{ - ChainConfig: chainBCfg, - NumFullNodes: &chainBFn, - NumValidators: &chainBVal, - }, - } -} - -// newDefaultSimappConfig creates an ibc configuration for simd. -func newDefaultSimappConfig(cc ChainConfig, name, chainID, denom string, cometCfg CometBFTConfig) ibc.ChainConfig { - configFileOverrides := make(map[string]any) - tmTomlOverrides := make(interchaintestutil.Toml) - - tmTomlOverrides["log_level"] = cometCfg.LogLevel // change to debug in ~/.ibc-go-e2e-config.json to increase cometbft logging. - configFileOverrides["config/config.toml"] = tmTomlOverrides - - return ibc.ChainConfig{ - Type: "cosmos", - Name: name, - ChainID: chainID, - Images: []ibc.DockerImage{ - { - Repository: cc.Image, - Version: cc.Tag, - UidGid: "1000:1000", - }, - }, - Bin: cc.Binary, - Bech32Prefix: "cosmos", - CoinType: fmt.Sprint(sdk.GetConfig().GetCoinType()), - Denom: denom, - EncodingConfig: SDKEncodingConfig(), - GasPrices: fmt.Sprintf("0.00%s", denom), - GasAdjustment: 1.3, - TrustingPeriod: "508h", - NoHostMount: false, - ModifyGenesis: getGenesisModificationFunction(cc), - ConfigFileOverrides: configFileOverrides, - } -} - -// getGenesisModificationFunction returns a genesis modification function that handles the GenesisState type -// correctly depending on if the govv1beta1 gov module is used or if govv1 is being used. -func getGenesisModificationFunction(cc ChainConfig) func(ibc.ChainConfig, []byte) ([]byte, error) { - binary := cc.Binary - version := cc.Tag - - simdSupportsGovV1Genesis := binary == defaultBinary && testvalues.GovGenesisFeatureReleases.IsSupported(version) - - if simdSupportsGovV1Genesis { - return defaultGovv1ModifyGenesis(version) - } - - return defaultGovv1Beta1ModifyGenesis(version) -} - -// defaultGovv1ModifyGenesis will only modify governance params to ensure the voting period and minimum deposit -// are functional for e2e testing purposes. -func defaultGovv1ModifyGenesis(version string) func(ibc.ChainConfig, []byte) ([]byte, error) { - stdlibJSONMarshalling := semverutil.FeatureReleases{MajorVersion: "v8"} - return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { - appGenesis, err := genutiltypes.AppGenesisFromReader(bytes.NewReader(genbz)) - if err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into genesis doc: %w", err) - } - - var appState genutiltypes.AppMap - if err := json.Unmarshal(appGenesis.AppState, &appState); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into app state: %w", err) - } - - govGenBz, err := modifyGovV1AppState(chainConfig, appState[govtypes.ModuleName]) - if err != nil { - return nil, err - } - appState[govtypes.ModuleName] = govGenBz - - if !testvalues.AllowAllClientsWildcardFeatureReleases.IsSupported(version) { - ibcGenBz, err := modifyClientGenesisAppState(chainConfig, appState[ibcexported.ModuleName]) - if err != nil { - return nil, err - } - appState[ibcexported.ModuleName] = ibcGenBz - } - - appGenesis.AppState, err = json.Marshal(appState) - if err != nil { - return nil, err - } - - // in older version < v8, tmjson marshal must be used. - // regular json marshalling must be used for v8 and above as the - // sdk is de-coupled from comet. - marshalIndentFn := cmtjson.MarshalIndent - if stdlibJSONMarshalling.IsSupported(version) { - marshalIndentFn = json.MarshalIndent - } - - bz, err := marshalIndentFn(appGenesis, "", " ") - if err != nil { - return nil, err - } - - return bz, nil - } -} - -// defaultGovv1Beta1ModifyGenesis will only modify governance params to ensure the voting period and minimum deposit -// // are functional for e2e testing purposes. -func defaultGovv1Beta1ModifyGenesis(version string) func(ibc.ChainConfig, []byte) ([]byte, error) { - const appStateKey = "app_state" - return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { - genesisDocMap := map[string]interface{}{} - err := json.Unmarshal(genbz, &genesisDocMap) - if err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into genesis doc: %w", err) - } - - appStateMap, ok := genesisDocMap[appStateKey].(map[string]interface{}) - if !ok { - return nil, fmt.Errorf("failed to extract to app_state") - } - - govModuleBytes, err := json.Marshal(appStateMap[govtypes.ModuleName]) - if err != nil { - return nil, fmt.Errorf("failed to extract gov genesis bytes: %s", err) - } - - govModuleGenesisBytes, err := modifyGovv1Beta1AppState(chainConfig, govModuleBytes) - if err != nil { - return nil, err - } - - govModuleGenesisMap := map[string]interface{}{} - err = json.Unmarshal(govModuleGenesisBytes, &govModuleGenesisMap) - if err != nil { - return nil, fmt.Errorf("failed to unmarshal gov genesis bytes into map: %w", err) - } - - if !testvalues.AllowAllClientsWildcardFeatureReleases.IsSupported(version) { - ibcModuleBytes, err := json.Marshal(appStateMap[ibcexported.ModuleName]) - if err != nil { - return nil, fmt.Errorf("failed to extract ibc genesis bytes: %s", err) - } - - ibcGenesisBytes, err := modifyClientGenesisAppState(chainConfig, ibcModuleBytes) - if err != nil { - return nil, err - } - - ibcModuleGenesisMap := map[string]interface{}{} - err = json.Unmarshal(ibcGenesisBytes, &ibcModuleGenesisMap) - if err != nil { - return nil, fmt.Errorf("failed to unmarshal gov genesis bytes into map: %w", err) - } - } - - appStateMap[govtypes.ModuleName] = govModuleGenesisMap - genesisDocMap[appStateKey] = appStateMap - - finalGenesisDocBytes, err := json.MarshalIndent(genesisDocMap, "", " ") - if err != nil { - return nil, err - } - - return finalGenesisDocBytes, nil - } -} - -// modifyGovV1AppState takes the existing gov app state and marshals it to a govv1 GenesisState. -func modifyGovV1AppState(chainConfig ibc.ChainConfig, govAppState []byte) ([]byte, error) { - cfg := testutil.MakeTestEncodingConfig() - - cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) - govv1.RegisterInterfaces(cfg.InterfaceRegistry) - - govGenesisState := &govv1.GenesisState{} - - if err := cdc.UnmarshalJSON(govAppState, govGenesisState); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into gov genesis state: %w", err) - } - - if govGenesisState.Params == nil { - govGenesisState.Params = &govv1.Params{} - } - - govGenesisState.Params.MinDeposit = sdk.NewCoins(sdk.NewCoin(chainConfig.Denom, govv1beta1.DefaultMinDepositTokens)) - maxDep := time.Second * 10 - govGenesisState.Params.MaxDepositPeriod = &maxDep - vp := testvalues.VotingPeriod - govGenesisState.Params.VotingPeriod = &vp - - govGenBz := MustProtoMarshalJSON(govGenesisState) - - return govGenBz, nil -} - -// modifyGovv1Beta1AppState takes the existing gov app state and marshals it to a govv1beta1 GenesisState. -func modifyGovv1Beta1AppState(chainConfig ibc.ChainConfig, govAppState []byte) ([]byte, error) { - cfg := testutil.MakeTestEncodingConfig() - - cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) - govv1beta1.RegisterInterfaces(cfg.InterfaceRegistry) - - govGenesisState := &govv1beta1.GenesisState{} - if err := cdc.UnmarshalJSON(govAppState, govGenesisState); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into govv1beta1 genesis state: %w", err) - } - - govGenesisState.DepositParams.MinDeposit = sdk.NewCoins(sdk.NewCoin(chainConfig.Denom, govv1beta1.DefaultMinDepositTokens)) - govGenesisState.VotingParams.VotingPeriod = testvalues.VotingPeriod - - govGenBz, err := cdc.MarshalJSON(govGenesisState) - if err != nil { - return nil, fmt.Errorf("failed to marshal gov genesis state: %w", err) - } - - return govGenBz, nil -} - -// modifyClientGenesisAppState takes the existing ibc app state and marshals it to a ibc GenesisState. -func modifyClientGenesisAppState(chainConfig ibc.ChainConfig, ibcAppState []byte) ([]byte, error) { - cfg := testutil.MakeTestEncodingConfig() - - cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) - clienttypes.RegisterInterfaces(cfg.InterfaceRegistry) - - ibcGenesisState := &ibctypes.GenesisState{} - if err := cdc.UnmarshalJSON(ibcAppState, ibcGenesisState); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into client genesis state: %w", err) - } - - ibcGenesisState.ClientGenesis.Params.AllowedClients = append(ibcGenesisState.ClientGenesis.Params.AllowedClients, wasmtypes.Wasm) - ibcGenBz, err := cdc.MarshalJSON(ibcGenesisState) - if err != nil { - return nil, fmt.Errorf("failed to marshal gov genesis state: %w", err) - } - - return ibcGenBz, nil -} diff --git a/e2e/testvalues/values.go b/e2e/testvalues/values.go deleted file mode 100644 index bab1aee577e..00000000000 --- a/e2e/testvalues/values.go +++ /dev/null @@ -1,101 +0,0 @@ -package testvalues - -import ( - "fmt" - "time" - - "github.com/strangelove-ventures/interchaintest/v8/ibc" - - sdkmath "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/cosmos/ibc-go/e2e/semverutil" - feetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" -) - -const ( - StartingTokenAmount int64 = 500_000_000_000 - IBCTransferAmount int64 = 10_000 - InvalidAddress string = "" - DefaultGovV1ProposalTokenAmount = 500_000_000 -) - -// VotingPeriod may differ per test. -var VotingPeriod = time.Second * 30 - -// ImmediatelyTimeout returns an ibc.IBCTimeout which will cause an IBC transfer to timeout immediately. -func ImmediatelyTimeout() *ibc.IBCTimeout { - return &ibc.IBCTimeout{ - NanoSeconds: 1, - } -} - -func DefaultFee(denom string) feetypes.Fee { - return feetypes.Fee{ - RecvFee: sdk.NewCoins(sdk.NewCoin(denom, sdkmath.NewInt(50))), - AckFee: sdk.NewCoins(sdk.NewCoin(denom, sdkmath.NewInt(25))), - TimeoutFee: sdk.NewCoins(sdk.NewCoin(denom, sdkmath.NewInt(10))), - } -} - -func DefaultTransferAmount(denom string) sdk.Coin { - return sdk.Coin{Denom: denom, Amount: sdkmath.NewInt(IBCTransferAmount)} -} - -func TransferAmount(amount int64, denom string) sdk.Coin { - return sdk.Coin{Denom: denom, Amount: sdkmath.NewInt(amount)} -} - -func TendermintClientID(id int) string { - return fmt.Sprintf("07-tendermint-%d", id) -} - -func SolomachineClientID(id int) string { - return fmt.Sprintf("06-solomachine-%d", id) -} - -// TokenMetadataFeatureReleases represents the releases the token metadata was released in. -var TokenMetadataFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v8", -} - -// GovGenesisFeatureReleases represents the releases the governance module genesis -// was upgraded from v1beta1 to v1. -var GovGenesisFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v7", -} - -// SelfParamsFeatureReleases represents the releases the transfer module started managing its own params. -var SelfParamsFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v8", -} - -// TotalEscrowFeatureReleases represents the releases the total escrow state entry was released in. -var TotalEscrowFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v8", - MinorVersions: []string{ - "v7.1", - }, -} - -// IbcErrorsFeatureReleases represents the releases the IBC module level errors was released in. -var IbcErrorsFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v8", -} - -// LocalhostClientFeatureReleases represents the releases the localhost client was released in. -var LocalhostClientFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v8", - MinorVersions: []string{ - "v7.1", - }, -} - -// AllowAllClientsWildcardFeatureReleases represents the releases the allow all clients wildcard was released in. -var AllowAllClientsWildcardFeatureReleases = semverutil.FeatureReleases{ - MajorVersion: "v9", - MinorVersions: []string{ - "v8.1", - }, -} From cb2de9891b50c8f2d9d26eaa564dd291fcabee09 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 15 Jan 2024 15:01:16 +0100 Subject: [PATCH 3/8] chore: rm -rf modules/light-clients/08-wasm --- .../08-wasm/keeper/keeper_test.go | 326 ------------------ .../08-wasm/testing/wasm_endpoint.go | 52 --- .../light-clients/08-wasm/types/types_test.go | 131 ------- 3 files changed, 509 deletions(-) delete mode 100644 modules/light-clients/08-wasm/keeper/keeper_test.go delete mode 100644 modules/light-clients/08-wasm/testing/wasm_endpoint.go delete mode 100644 modules/light-clients/08-wasm/types/types_test.go diff --git a/modules/light-clients/08-wasm/keeper/keeper_test.go b/modules/light-clients/08-wasm/keeper/keeper_test.go deleted file mode 100644 index 73810c74b42..00000000000 --- a/modules/light-clients/08-wasm/keeper/keeper_test.go +++ /dev/null @@ -1,326 +0,0 @@ -package keeper_test - -import ( - "encoding/json" - "errors" - "testing" - - wasmvm "github.com/CosmWasm/wasmvm" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - dbm "github.com/cosmos/cosmos-db" - testifysuite "github.com/stretchr/testify/suite" - - "cosmossdk.io/log" - storetypes "cosmossdk.io/store/types" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/runtime" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - wasmtesting "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing/simapp" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" - "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibctesting "github.com/cosmos/ibc-go/v8/testing" -) - -const ( - defaultWasmClientID = "08-wasm-0" -) - -type KeeperTestSuite struct { - testifysuite.Suite - - coordinator *ibctesting.Coordinator - - // mockVM is a mock wasm VM that implements the WasmEngine interface - mockVM *wasmtesting.MockWasmEngine - chainA *ibctesting.TestChain -} - -func init() { - ibctesting.DefaultTestingAppInit = setupTestingApp -} - -// setupTestingApp provides the duplicated simapp which is specific to the 08-wasm module on chain creation. -func setupTestingApp() (ibctesting.TestingApp, map[string]json.RawMessage) { - db := dbm.NewMemDB() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, nil) - return app, app.DefaultGenesis() -} - -// GetSimApp returns the duplicated SimApp from within the 08-wasm directory. -// This must be used instead of chain.GetSimApp() for tests within this directory. -func GetSimApp(chain *ibctesting.TestChain) *simapp.SimApp { - app, ok := chain.App.(*simapp.SimApp) - if !ok { - panic(errors.New("chain is not a simapp.SimApp")) - } - return app -} - -func (suite *KeeperTestSuite) SetupTest() { - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) - - queryHelper := baseapp.NewQueryServerTestHelper(suite.chainA.GetContext(), GetSimApp(suite.chainA).InterfaceRegistry()) - types.RegisterQueryServer(queryHelper, GetSimApp(suite.chainA).WasmClientKeeper) -} - -// SetupWasmWithMockVM sets up mock cometbft chain with a mock vm. -func (suite *KeeperTestSuite) SetupWasmWithMockVM() { - ibctesting.DefaultTestingAppInit = suite.setupWasmWithMockVM - - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) -} - -func (suite *KeeperTestSuite) setupWasmWithMockVM() (ibctesting.TestingApp, map[string]json.RawMessage) { - suite.mockVM = wasmtesting.NewMockWasmEngine() - - suite.mockVM.InstantiateFn = func(checksum wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { - var payload types.InstantiateMessage - err := json.Unmarshal(initMsg, &payload) - suite.Require().NoError(err) - - wrappedClientState := clienttypes.MustUnmarshalClientState(suite.chainA.App.AppCodec(), payload.ClientState) - - clientState := types.NewClientState(payload.ClientState, payload.Checksum, wrappedClientState.GetLatestHeight().(clienttypes.Height)) - clientStateBz := clienttypes.MustMarshalClientState(suite.chainA.App.AppCodec(), clientState) - store.Set(host.ClientStateKey(), clientStateBz) - - consensusState := types.NewConsensusState(payload.ConsensusState) - consensusStateBz := clienttypes.MustMarshalConsensusState(suite.chainA.App.AppCodec(), consensusState) - store.Set(host.ConsensusStateKey(clientState.GetLatestHeight()), consensusStateBz) - - resp, err := json.Marshal(types.EmptyResult{}) - suite.Require().NoError(err) - - return &wasmvmtypes.Response{Data: resp}, 0, nil - } - - suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(checksum wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) ([]byte, uint64, error) { - resp, err := json.Marshal(types.StatusResult{Status: exported.Active.String()}) - suite.Require().NoError(err) - return resp, wasmtesting.DefaultGasUsed, nil - }) - - db := dbm.NewMemDB() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, suite.mockVM) - - // reset DefaultTestingAppInit to its original value - ibctesting.DefaultTestingAppInit = setupTestingApp - return app, app.DefaultGenesis() -} - -// storeWasmCode stores the wasm code on chain and returns the checksum. -func storeWasmCode(suite *KeeperTestSuite, wasmCode []byte) []byte { - ctx := suite.chainA.GetContext().WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) - - msg := types.NewMsgStoreCode(authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmCode) - response, err := GetSimApp(suite.chainA).WasmClientKeeper.StoreCode(ctx, msg) - suite.Require().NoError(err) - suite.Require().NotNil(response.Checksum) - return response.Checksum -} - -func (suite *KeeperTestSuite) SetupSnapshotterWithMockVM() *simapp.SimApp { - suite.mockVM = wasmtesting.NewMockWasmEngine() - - return simapp.SetupWithSnapshotter(suite.T(), suite.mockVM) -} - -func TestKeeperTestSuite(t *testing.T) { - testifysuite.Run(t, new(KeeperTestSuite)) -} - -func (suite *KeeperTestSuite) TestNewKeeper() { - testCases := []struct { - name string - instantiateFn func() - expPass bool - expError error - }{ - { - "success", - func() { - keeper.NewKeeperWithVM( - GetSimApp(suite.chainA).AppCodec(), - runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), - GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, - GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), - ibcwasm.GetVM(), - GetSimApp(suite.chainA).GRPCQueryRouter(), - ) - }, - true, - nil, - }, - { - "failure: empty authority", - func() { - keeper.NewKeeperWithVM( - GetSimApp(suite.chainA).AppCodec(), - runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), - GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, - "", // authority - ibcwasm.GetVM(), - GetSimApp(suite.chainA).GRPCQueryRouter(), - ) - }, - false, - errors.New("authority must be non-empty"), - }, - { - "failure: nil client keeper", - func() { - keeper.NewKeeperWithVM( - GetSimApp(suite.chainA).AppCodec(), - runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), - nil, // client keeper, - GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), - ibcwasm.GetVM(), - GetSimApp(suite.chainA).GRPCQueryRouter(), - ) - }, - false, - errors.New("client keeper must be not nil"), - }, - { - "failure: nil wasm VM", - func() { - keeper.NewKeeperWithVM( - GetSimApp(suite.chainA).AppCodec(), - runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), - GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, - GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), - nil, - GetSimApp(suite.chainA).GRPCQueryRouter(), - ) - }, - false, - errors.New("wasm VM must be not nil"), - }, - { - "failure: nil store service", - func() { - keeper.NewKeeperWithVM( - GetSimApp(suite.chainA).AppCodec(), - nil, - GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, - GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), - ibcwasm.GetVM(), - GetSimApp(suite.chainA).GRPCQueryRouter(), - ) - }, - false, - errors.New("store service must be not nil"), - }, - { - "failure: nil query router", - func() { - keeper.NewKeeperWithVM( - GetSimApp(suite.chainA).AppCodec(), - runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), - GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, - GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), - ibcwasm.GetVM(), - nil, - ) - }, - false, - errors.New("query router must be not nil"), - }, - } - - for _, tc := range testCases { - tc := tc - suite.SetupTest() - - suite.Run(tc.name, func() { - if tc.expPass { - suite.Require().NotPanics( - tc.instantiateFn, - ) - } else { - suite.Require().PanicsWithError(tc.expError.Error(), func() { - tc.instantiateFn() - }) - } - }) - } -} - -func (suite *KeeperTestSuite) TestInitializedPinnedCodes() { - var capturedChecksums []wasmvm.Checksum - - testCases := []struct { - name string - malleate func() - expError error - }{ - { - "success", - func() { - suite.mockVM.PinFn = func(checksum wasmvm.Checksum) error { - capturedChecksums = append(capturedChecksums, checksum) - return nil - } - }, - nil, - }, - { - "failure: pin error", - func() { - suite.mockVM.PinFn = func(checksum wasmvm.Checksum) error { - return wasmtesting.ErrMockVM - } - }, - wasmtesting.ErrMockVM, - }, - } - - for _, tc := range testCases { - tc := tc - - suite.Run(tc.name, func() { - suite.SetupWasmWithMockVM() - - ctx := suite.chainA.GetContext() - wasmClientKeeper := GetSimApp(suite.chainA).WasmClientKeeper - - contracts := [][]byte{wasmtesting.Code, wasmtesting.CreateMockContract([]byte("gzipped-contract"))} - checksumIDs := make([]types.Checksum, len(contracts)) - signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() - - // store contract on chain - for i, contract := range contracts { - msg := types.NewMsgStoreCode(signer, contract) - - res, err := wasmClientKeeper.StoreCode(ctx, msg) - suite.Require().NoError(err) - - checksumIDs[i] = res.Checksum - } - - // malleate after storing contracts - tc.malleate() - - err := keeper.InitializePinnedCodes(ctx) - - expPass := tc.expError == nil - if expPass { - suite.Require().NoError(err) - suite.ElementsMatch(checksumIDs, capturedChecksums) - } else { - suite.Require().ErrorIs(err, tc.expError) - } - }) - } -} diff --git a/modules/light-clients/08-wasm/testing/wasm_endpoint.go b/modules/light-clients/08-wasm/testing/wasm_endpoint.go deleted file mode 100644 index 6d126ea35c9..00000000000 --- a/modules/light-clients/08-wasm/testing/wasm_endpoint.go +++ /dev/null @@ -1,52 +0,0 @@ -package testing - -import ( - "github.com/stretchr/testify/require" - - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v8/testing" -) - -// WasmEndpoint is a wrapper around the ibctesting pkg Endpoint struct. -// It will override any functions which require special handling for the wasm client. -type WasmEndpoint struct { - *ibctesting.Endpoint -} - -// NewWasmEndpoint returns a wasm endpoint with the default ibctesting pkg -// Endpoint embedded. -func NewWasmEndpoint(chain *ibctesting.TestChain) *WasmEndpoint { - return &WasmEndpoint{ - Endpoint: ibctesting.NewDefaultEndpoint(chain), - } -} - -// CreateClient creates an wasm client on a mock cometbft chain. -// The client and consensus states are represented by byte slices -// and the starting height is 1. -func (endpoint *WasmEndpoint) CreateClient() error { - checksum, err := types.CreateChecksum(Code) - require.NoError(endpoint.Chain.TB, err) - - wrappedClientStateBz := clienttypes.MustMarshalClientState(endpoint.Chain.App.AppCodec(), CreateMockTendermintClientState(clienttypes.NewHeight(1, 5))) - wrappedClientConsensusStateBz := clienttypes.MustMarshalConsensusState(endpoint.Chain.App.AppCodec(), MockTendermintClientConsensusState) - - clientState := types.NewClientState(wrappedClientStateBz, checksum, clienttypes.NewHeight(0, 1)) - consensusState := types.NewConsensusState(wrappedClientConsensusStateBz) - - msg, err := clienttypes.NewMsgCreateClient( - clientState, consensusState, endpoint.Chain.SenderAccount.GetAddress().String(), - ) - require.NoError(endpoint.Chain.TB, err) - - res, err := endpoint.Chain.SendMsgs(msg) - if err != nil { - return err - } - - endpoint.ClientID, err = ibctesting.ParseClientIDFromEvents(res.Events) - require.NoError(endpoint.Chain.TB, err) - - return nil -} diff --git a/modules/light-clients/08-wasm/types/types_test.go b/modules/light-clients/08-wasm/types/types_test.go deleted file mode 100644 index e1729f66997..00000000000 --- a/modules/light-clients/08-wasm/types/types_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package types_test - -import ( - "encoding/json" - "errors" - "testing" - - wasmvm "github.com/CosmWasm/wasmvm" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - dbm "github.com/cosmos/cosmos-db" - testifysuite "github.com/stretchr/testify/suite" - - "cosmossdk.io/log" - storetypes "cosmossdk.io/store/types" - - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - wasmtesting "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing" - simapp "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing/simapp" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" - "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibctesting "github.com/cosmos/ibc-go/v8/testing" -) - -const ( - tmClientID = "07-tendermint-0" - defaultWasmClientID = "08-wasm-0" -) - -type TypesTestSuite struct { - testifysuite.Suite - coordinator *ibctesting.Coordinator - chainA *ibctesting.TestChain - mockVM *wasmtesting.MockWasmEngine - - checksum types.Checksum -} - -func TestWasmTestSuite(t *testing.T) { - testifysuite.Run(t, new(TypesTestSuite)) -} - -func (suite *TypesTestSuite) SetupTest() { - ibctesting.DefaultTestingAppInit = setupTestingApp - - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) -} - -func init() { - ibctesting.DefaultTestingAppInit = setupTestingApp -} - -// GetSimApp returns the duplicated SimApp from within the 08-wasm directory. -// This must be used instead of chain.GetSimApp() for tests within this directory. -func GetSimApp(chain *ibctesting.TestChain) *simapp.SimApp { - app, ok := chain.App.(*simapp.SimApp) - if !ok { - panic(errors.New("chain is not a simapp.SimApp")) - } - return app -} - -// setupTestingApp provides the duplicated simapp which is specific to the 08-wasm module on chain creation. -func setupTestingApp() (ibctesting.TestingApp, map[string]json.RawMessage) { - db := dbm.NewMemDB() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, nil) - return app, app.DefaultGenesis() -} - -// SetupWasmWithMockVM sets up mock cometbft chain with a mock vm. -func (suite *TypesTestSuite) SetupWasmWithMockVM() { - ibctesting.DefaultTestingAppInit = suite.setupWasmWithMockVM - - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 1) - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) - suite.checksum = storeWasmCode(suite, wasmtesting.Code) -} - -func (suite *TypesTestSuite) setupWasmWithMockVM() (ibctesting.TestingApp, map[string]json.RawMessage) { - suite.mockVM = wasmtesting.NewMockWasmEngine() - - suite.mockVM.InstantiateFn = func(checksum wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { - var payload types.InstantiateMessage - err := json.Unmarshal(initMsg, &payload) - suite.Require().NoError(err) - - wrappedClientState := clienttypes.MustUnmarshalClientState(suite.chainA.App.AppCodec(), payload.ClientState) - - clientState := types.NewClientState(payload.ClientState, payload.Checksum, wrappedClientState.GetLatestHeight().(clienttypes.Height)) - clientStateBz := clienttypes.MustMarshalClientState(suite.chainA.App.AppCodec(), clientState) - store.Set(host.ClientStateKey(), clientStateBz) - - consensusState := types.NewConsensusState(payload.ConsensusState) - consensusStateBz := clienttypes.MustMarshalConsensusState(suite.chainA.App.AppCodec(), consensusState) - store.Set(host.ConsensusStateKey(clientState.GetLatestHeight()), consensusStateBz) - - resp, err := json.Marshal(types.EmptyResult{}) - suite.Require().NoError(err) - - return &wasmvmtypes.Response{Data: resp}, 0, nil - } - - suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(checksum wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) ([]byte, uint64, error) { - resp, err := json.Marshal(types.StatusResult{Status: exported.Active.String()}) - suite.Require().NoError(err) - return resp, wasmtesting.DefaultGasUsed, nil - }) - - db := dbm.NewMemDB() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{}, suite.mockVM) - - // reset DefaultTestingAppInit to its original value - ibctesting.DefaultTestingAppInit = setupTestingApp - return app, app.DefaultGenesis() -} - -// storeWasmCode stores the wasm code on chain and returns the checksum. -func storeWasmCode(suite *TypesTestSuite, wasmCode []byte) types.Checksum { - ctx := suite.chainA.GetContext().WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) - - msg := types.NewMsgStoreCode(authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmCode) - response, err := GetSimApp(suite.chainA).WasmClientKeeper.StoreCode(ctx, msg) - suite.Require().NoError(err) - suite.Require().NotNil(response.Checksum) - return response.Checksum -} From e1650730105b1420af05acf181bc5d70908eef55 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 15 Jan 2024 15:01:31 +0100 Subject: [PATCH 4/8] chore: fix conflicts in 02-client/types/params and tests --- modules/core/02-client/types/params.go | 5 ----- modules/core/02-client/types/params_test.go | 3 --- 2 files changed, 8 deletions(-) diff --git a/modules/core/02-client/types/params.go b/modules/core/02-client/types/params.go index e6b4714c668..8bfa361feb9 100644 --- a/modules/core/02-client/types/params.go +++ b/modules/core/02-client/types/params.go @@ -43,10 +43,6 @@ func (p Params) IsAllowedClient(clientType string) bool { return slices.Contains(p.AllowedClients, clientType) } -<<<<<<< HEAD -// validateClients checks that the given clients are not blank. -func validateClients(clients []string) error { -======= // validateClients checks that the given clients are not blank and there are no duplicates. // If AllowAllClients wildcard (*) is used, then there should no other client types in the allow list func validateClients(clients []string) error { @@ -55,7 +51,6 @@ func validateClients(clients []string) error { } foundClients := make(map[string]bool, len(clients)) ->>>>>>> d5949b1a (feat(statemachine)!: Add allow all client wildcard to AllowedClients param (#5429)) for i, clientType := range clients { if strings.TrimSpace(clientType) == "" { return fmt.Errorf("client type %d cannot be blank", i) diff --git a/modules/core/02-client/types/params_test.go b/modules/core/02-client/types/params_test.go index 15397df231d..347b913450f 100644 --- a/modules/core/02-client/types/params_test.go +++ b/modules/core/02-client/types/params_test.go @@ -38,11 +38,8 @@ func TestValidateParams(t *testing.T) { {"default params", DefaultParams(), true}, {"custom params", NewParams(exported.Tendermint), true}, {"blank client", NewParams(" "), false}, -<<<<<<< HEAD -======= {"duplicate clients", NewParams(exported.Tendermint, exported.Tendermint), false}, {"allow all clients plus valid client", NewParams(AllowAllClients, exported.Tendermint), false}, ->>>>>>> d5949b1a (feat(statemachine)!: Add allow all client wildcard to AllowedClients param (#5429)) } for _, tc := range testCases { From d4b0f1c025b30ac5e775057aa04d9183a96a5a5a Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 15 Jan 2024 15:05:40 +0100 Subject: [PATCH 5/8] fix: validateClients duplicates --- modules/core/02-client/types/params.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/core/02-client/types/params.go b/modules/core/02-client/types/params.go index 8bfa361feb9..da5ce32ff46 100644 --- a/modules/core/02-client/types/params.go +++ b/modules/core/02-client/types/params.go @@ -55,6 +55,10 @@ func validateClients(clients []string) error { if strings.TrimSpace(clientType) == "" { return fmt.Errorf("client type %d cannot be blank", i) } + if foundClients[clientType] { + return fmt.Errorf("duplicate client type: %s", clientType) + } + foundClients[clientType] = true } return nil From 620150deb1ea97adbaf16f282591a111e2fbb984 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 15 Jan 2024 15:08:22 +0100 Subject: [PATCH 6/8] chore: rm -rf docs --- docs/.gitignore | 20 - docs/README.md | 268 - docs/architecture/README.md | 48 - .../adr-001-coin-source-tracing.md | 375 - .../adr-002-go-module-versioning.md | 112 - .../adr-003-ics27-acknowledgement.md | 120 - .../adr-004-ics29-lock-fee-module.md | 58 - .../adr-005-consensus-height-events.md | 92 - .../adr-006-02-client-refactor.md | 203 - .../adr-007-solomachine-signbytes.md | 52 - docs/architecture/adr-008-app-caller-cbs.md | 544 - .../adr-009-v6-ics27-msgserver.md | 115 - .../adr-010-light-clients-as-sdk-modules.md | 106 - ...r-011-transfer-total-escrow-state-entry.md | 145 - .../adr-015-ibc-packet-receiver.md | 299 - .../adr-025-ibc-passive-channels.md | 141 - .../adr-026-ibc-client-recovery-mechanisms.md | 90 - docs/architecture/adr-027-ibc-wasm.md | 149 - docs/architecture/adr.template.md | 38 - .../Trail of Bits audit - Final Report.pdf | Bin 1147519 -> 0 bytes docs/babel.config.js | 3 - docs/client/config.json | 66 - docs/client/swagger-ui/swagger.yaml | 20801 -------------- docs/dev/development-setup.md | 62 - docs/dev/go-style-guide.md | 119 - docs/dev/project-structure.md | 46 - docs/dev/pull-requests.md | 68 - docs/dev/release-management.md | 87 - docs/docs/00-intro.md | 16 - docs/docs/01-ibc/01-overview.md | 297 - docs/docs/01-ibc/02-integration.md | 230 - docs/docs/01-ibc/03-apps/01-apps.md | 494 - docs/docs/01-ibc/03-apps/02-ibcmodule.md | 379 - docs/docs/01-ibc/03-apps/03-bindports.md | 122 - docs/docs/01-ibc/03-apps/04-keeper.md | 96 - docs/docs/01-ibc/03-apps/05-packets_acks.md | 166 - docs/docs/01-ibc/03-apps/06-routing.md | 44 - docs/docs/01-ibc/03-apps/_category_.json | 5 - .../01-ibc/03-apps/images/packet_flow.png | Bin 352988 -> 0 bytes docs/docs/01-ibc/04-middleware/01-overview.md | 55 - docs/docs/01-ibc/04-middleware/02-develop.md | 519 - .../01-ibc/04-middleware/03-integration.md | 74 - .../docs/01-ibc/04-middleware/_category_.json | 5 - .../04-middleware/images/middleware-stack.png | Bin 194858 -> 0 bytes docs/docs/01-ibc/05-upgrades/00-intro.md | 15 - .../docs/01-ibc/05-upgrades/01-quick-guide.md | 60 - .../01-ibc/05-upgrades/02-developer-guide.md | 14 - .../01-ibc/05-upgrades/03-genesis-restart.md | 52 - docs/docs/01-ibc/05-upgrades/_category_.json | 5 - docs/docs/01-ibc/06-channel-upgrades.md | 110 - docs/docs/01-ibc/07-proposals.md | 118 - docs/docs/01-ibc/08-relayer.md | 53 - docs/docs/01-ibc/09-proto-docs.md | 11 - docs/docs/01-ibc/10-roadmap.md | 52 - docs/docs/01-ibc/11-troubleshooting.md | 15 - docs/docs/01-ibc/12-capability-module.md | 139 - docs/docs/01-ibc/_category_.json | 5 - docs/docs/02-apps/01-transfer/01-overview.md | 128 - docs/docs/02-apps/01-transfer/02-state.md | 13 - .../01-transfer/03-state-transitions.md | 37 - docs/docs/02-apps/01-transfer/04-messages.md | 58 - docs/docs/02-apps/01-transfer/05-events.md | 54 - docs/docs/02-apps/01-transfer/06-metrics.md | 18 - docs/docs/02-apps/01-transfer/07-params.md | 94 - .../02-apps/01-transfer/08-authorizations.md | 59 - docs/docs/02-apps/01-transfer/09-client.md | 69 - docs/docs/02-apps/01-transfer/_category_.json | 5 - .../02-interchain-accounts/01-overview.md | 39 - .../02-interchain-accounts/02-development.md | 40 - .../02-interchain-accounts/03-auth-modules.md | 27 - .../02-interchain-accounts/04-integration.md | 199 - .../02-interchain-accounts/05-messages.md | 78 - .../02-interchain-accounts/06-parameters.md | 65 - .../02-interchain-accounts/07-tx-encoding.md | 58 - .../02-interchain-accounts/08-client.md | 183 - .../09-active-channels.md | 39 - .../10-legacy/01-auth-modules.md | 274 - .../10-legacy/02-integration.md | 201 - .../10-legacy/03-keeper-api.md | 125 - .../10-legacy/_category_.json | 5 - .../10-legacy/images/ica-pre-v6.png | Bin 34698 -> 0 bytes .../02-interchain-accounts/_category_.json | 5 - .../02-interchain-accounts/images/ica-v6.png | Bin 163580 -> 0 bytes docs/docs/02-apps/_category_.json | 5 - .../01-developer-guide/01-overview.md | 79 - .../01-developer-guide/02-client-state.md | 79 - .../01-developer-guide/03-consensus-state.md | 27 - .../04-updates-and-misbehaviour.md | 98 - .../01-developer-guide/05-upgrades.md | 66 - .../01-developer-guide/06-proofs.md | 66 - .../01-developer-guide/07-proposals.md | 36 - .../01-developer-guide/08-genesis.md | 45 - .../01-developer-guide/09-setup.md | 135 - .../01-developer-guide/_category_.json | 5 - .../02-localhost/01-overview.md | 46 - .../02-localhost/02-integration.md | 19 - .../02-localhost/03-client-state.md | 64 - .../02-localhost/04-connection.md | 29 - .../02-localhost/05-state-verification.md | 22 - .../02-localhost/_category_.json | 5 - .../03-solomachine/01-solomachine.md | 26 - .../03-solomachine/02-concepts.md | 168 - .../03-solomachine/03-state.md | 12 - .../03-solomachine/04-state_transitions.md | 43 - .../03-solomachine/_category_.json | 5 - .../04-wasm/03-integration.md | 368 - docs/docs/03-light-clients/_category_.json | 5 - .../04-middleware/01-ics29-fee/01-overview.md | 54 - .../01-ics29-fee/02-integration.md | 177 - .../04-middleware/01-ics29-fee/03-msgs.md | 95 - .../01-ics29-fee/04-fee-distribution.md | 117 - .../04-middleware/01-ics29-fee/05-events.md | 43 - .../01-ics29-fee/06-end-users.md | 39 - .../01-ics29-fee/_category_.json | 5 - .../01-ics29-fee/images/feeflow.png | Bin 394717 -> 0 bytes .../01-ics29-fee/images/msgpaypacket.png | Bin 150696 -> 0 bytes .../01-ics29-fee/images/paypacketfeeasync.png | Bin 142753 -> 0 bytes .../04-middleware/02-callbacks/01-overview.md | 51 - .../02-callbacks/02-integration.md | 95 - .../02-callbacks/03-interfaces.md | 151 - .../04-middleware/02-callbacks/04-events.md | 39 - .../02-callbacks/05-end-users.md | 96 - .../docs/04-middleware/02-callbacks/06-gas.md | 77 - .../02-callbacks/_category_.json | 5 - .../02-callbacks/images/callbackflow.svg | 43 - .../02-callbacks/images/ics4-callbackflow.svg | 43 - docs/docs/04-middleware/_category_.json | 5 - .../01-support-denoms-with-slashes.md | 87 - docs/docs/05-migrations/02-sdk-to-v1.md | 195 - docs/docs/05-migrations/03-v1-to-v2.md | 59 - docs/docs/05-migrations/04-v2-to-v3.md | 186 - docs/docs/05-migrations/05-v3-to-v4.md | 159 - docs/docs/05-migrations/06-v4-to-v5.md | 441 - docs/docs/05-migrations/07-v5-to-v6.md | 299 - docs/docs/05-migrations/08-v6-to-v7.md | 357 - docs/docs/05-migrations/09-v7-to-v7_1.md | 66 - docs/docs/05-migrations/10-v7_2-to-v7_3.md | 50 - docs/docs/05-migrations/11-v7-to-v8.md | 211 - docs/docs/05-migrations/_category_.json | 5 - .../images/auth-module-decision-tree.png | Bin 80522 -> 0 bytes docs/docs/05-migrations/migration.template.md | 28 - docs/docusaurus.config.js | 285 - docs/events/events.md | 272 - docs/package-lock.json | 22744 ---------------- docs/package.json | 52 - docs/params/params.md | 24 - docs/requirements/ics27-requirements.md | 118 - docs/requirements/ics27-v2-requirements.md | 87 - docs/requirements/ics29-v1-requirements.md | 177 - docs/requirements/localhost-requirements.md | 69 - docs/requirements/requirements-template.md | 53 - docs/sidebars.js | 67 - docs/src/css/base.css | 32 - docs/src/css/custom.css | 524 - docs/src/css/fonts.css | 64 - docs/static/.nojekyll | 0 docs/static/CNAME | 1 - docs/static/fonts/inter/Inter-Black.woff | Bin 138764 -> 0 bytes docs/static/fonts/inter/Inter-Black.woff2 | Bin 102868 -> 0 bytes .../static/fonts/inter/Inter-BlackItalic.woff | Bin 146824 -> 0 bytes .../fonts/inter/Inter-BlackItalic.woff2 | Bin 108752 -> 0 bytes docs/static/fonts/inter/Inter-Bold.woff | Bin 143208 -> 0 bytes docs/static/fonts/inter/Inter-Bold.woff2 | Bin 106140 -> 0 bytes docs/static/fonts/inter/Inter-BoldItalic.woff | Bin 151052 -> 0 bytes .../static/fonts/inter/Inter-BoldItalic.woff2 | Bin 111808 -> 0 bytes docs/static/fonts/inter/Inter-ExtraBold.woff | Bin 142920 -> 0 bytes docs/static/fonts/inter/Inter-ExtraBold.woff2 | Bin 106108 -> 0 bytes .../fonts/inter/Inter-ExtraBoldItalic.woff | Bin 150628 -> 0 bytes .../fonts/inter/Inter-ExtraBoldItalic.woff2 | Bin 111708 -> 0 bytes docs/static/fonts/inter/Inter-ExtraLight.woff | Bin 140724 -> 0 bytes .../static/fonts/inter/Inter-ExtraLight.woff2 | Bin 104232 -> 0 bytes .../fonts/inter/Inter-ExtraLightItalic.woff | Bin 149996 -> 0 bytes .../fonts/inter/Inter-ExtraLightItalic.woff2 | Bin 111392 -> 0 bytes docs/static/fonts/inter/Inter-Italic.woff | Bin 144372 -> 0 bytes docs/static/fonts/inter/Inter-Italic.woff2 | Bin 106876 -> 0 bytes docs/static/fonts/inter/Inter-Light.woff | Bin 140632 -> 0 bytes docs/static/fonts/inter/Inter-Light.woff2 | Bin 104332 -> 0 bytes .../static/fonts/inter/Inter-LightItalic.woff | Bin 150092 -> 0 bytes .../fonts/inter/Inter-LightItalic.woff2 | Bin 111332 -> 0 bytes docs/static/fonts/inter/Inter-Medium.woff | Bin 142552 -> 0 bytes docs/static/fonts/inter/Inter-Medium.woff2 | Bin 105924 -> 0 bytes .../fonts/inter/Inter-MediumItalic.woff | Bin 150988 -> 0 bytes .../fonts/inter/Inter-MediumItalic.woff2 | Bin 112184 -> 0 bytes docs/static/fonts/inter/Inter-Regular.woff | Bin 133844 -> 0 bytes docs/static/fonts/inter/Inter-Regular.woff2 | Bin 98868 -> 0 bytes docs/static/fonts/inter/Inter-SemiBold.woff | Bin 142932 -> 0 bytes docs/static/fonts/inter/Inter-SemiBold.woff2 | Bin 105804 -> 0 bytes .../fonts/inter/Inter-SemiBoldItalic.woff | Bin 151180 -> 0 bytes .../fonts/inter/Inter-SemiBoldItalic.woff2 | Bin 112048 -> 0 bytes docs/static/fonts/inter/Inter-Thin.woff | Bin 135920 -> 0 bytes docs/static/fonts/inter/Inter-Thin.woff2 | Bin 99632 -> 0 bytes docs/static/fonts/inter/Inter-ThinItalic.woff | Bin 145480 -> 0 bytes .../static/fonts/inter/Inter-ThinItalic.woff2 | Bin 106496 -> 0 bytes .../static/fonts/inter/Inter-italic.var.woff2 | Bin 245036 -> 0 bytes docs/static/fonts/inter/Inter-roman.var.woff2 | Bin 227180 -> 0 bytes docs/static/fonts/intervar/Inter.var.woff2 | Bin 324864 -> 0 bytes .../jetbrainsmono/JetBrainsMono-Bold.woff2 | Bin 71180 -> 0 bytes .../JetBrainsMono-BoldItalic.woff2 | Bin 73976 -> 0 bytes .../JetBrainsMono-ExtraBold.woff2 | Bin 70124 -> 0 bytes .../JetBrainsMono-ExtraBoldItalic.woff2 | Bin 73264 -> 0 bytes .../JetBrainsMono-ExtraLight.woff2 | Bin 69780 -> 0 bytes .../JetBrainsMono-ExtraLightItalic.woff2 | Bin 72520 -> 0 bytes .../jetbrainsmono/JetBrainsMono-Italic.woff2 | Bin 72268 -> 0 bytes .../jetbrainsmono/JetBrainsMono-Light.woff2 | Bin 70416 -> 0 bytes .../JetBrainsMono-LightItalic.woff2 | Bin 73552 -> 0 bytes .../jetbrainsmono/JetBrainsMono-Medium.woff2 | Bin 70480 -> 0 bytes .../JetBrainsMono-MediumItalic.woff2 | Bin 73704 -> 0 bytes .../jetbrainsmono/JetBrainsMono-Regular.woff2 | Bin 69440 -> 0 bytes .../JetBrainsMono-SemiBold.woff2 | Bin 70820 -> 0 bytes .../JetBrainsMono-SemiBoldItalic.woff2 | Bin 74088 -> 0 bytes .../jetbrainsmono/JetBrainsMono-Thin.woff2 | Bin 68064 -> 0 bytes .../JetBrainsMono-ThinItalic.woff2 | Bin 71180 -> 0 bytes docs/static/img/black-ibc-logo.svg | 12 - docs/static/img/black-large-ibc-logo.svg | 52 - docs/static/img/cosmos-logo-bw.svg | 8 - docs/static/img/ibc-go-image.png | Bin 1454326 -> 0 bytes docs/static/img/ico-chevron.svg | 3 - docs/static/img/white-cosmos-icon.svg | 3 - docs/static/img/white-ibc-logo.svg | 12 - docs/static/img/white-large-ibc-logo.svg | 52 - docs/tailwind.config.js | 104 - .../versioned_docs/version-v4.4.x/00-intro.md | 16 - .../version-v4.4.x/01-ibc/01-overview.md | 297 - .../version-v4.4.x/01-ibc/02-integration.md | 222 - .../version-v4.4.x/01-ibc/03-apps/01-apps.md | 56 - .../01-ibc/03-apps/02-ibcmodule.md | 351 - .../01-ibc/03-apps/03-bindports.md | 122 - .../01-ibc/03-apps/04-keeper.md | 96 - .../01-ibc/03-apps/05-packets_acks.md | 108 - .../01-ibc/03-apps/06-routing.md | 44 - .../01-ibc/03-apps/_category_.json | 5 - .../01-ibc/03-apps/images/packet_flow.png | Bin 352988 -> 0 bytes .../01-ibc/04-middleware/01-develop.md | 422 - .../01-ibc/04-middleware/02-integration.md | 72 - .../01-ibc/04-middleware/_category_.json | 5 - .../01-ibc/05-upgrades/00-intro.md | 15 - .../01-ibc/05-upgrades/01-quick-guide.md | 60 - .../01-ibc/05-upgrades/02-developer-guide.md | 56 - .../01-ibc/05-upgrades/03-genesis-restart.md | 52 - .../01-ibc/05-upgrades/_category_.json | 5 - .../version-v4.4.x/01-ibc/06-proposals.md | 91 - .../version-v4.4.x/01-ibc/07-relayer.md | 53 - .../version-v4.4.x/01-ibc/08-proto-docs.md | 10 - .../version-v4.4.x/01-ibc/09-roadmap.md | 61 - .../version-v4.4.x/01-ibc/_category_.json | 5 - .../02-apps/01-transfer/01-overview.md | 128 - .../02-apps/01-transfer/02-state.md | 13 - .../01-transfer/03-state-transitions.md | 37 - .../02-apps/01-transfer/04-messages.md | 46 - .../02-apps/01-transfer/05-events.md | 54 - .../02-apps/01-transfer/06-metrics.md | 18 - .../02-apps/01-transfer/07-params.md | 34 - .../02-apps/01-transfer/_category_.json | 5 - .../02-interchain-accounts/01-overview.md | 47 - .../02-interchain-accounts/02-auth-modules.md | 402 - .../03-active-channels.md | 28 - .../02-interchain-accounts/04-integration.md | 193 - .../02-interchain-accounts/05-parameters.md | 65 - .../02-interchain-accounts/06-transactions.md | 27 - .../02-interchain-accounts/_category_.json | 5 - .../images/send-interchain-tx.png | Bin 168904 -> 0 bytes .../version-v4.4.x/02-apps/_category_.json | 5 - .../03-middleware/01-ics29-fee/01-overview.md | 54 - .../01-ics29-fee/02-integration.md | 174 - .../03-middleware/01-ics29-fee/03-msgs.md | 95 - .../01-ics29-fee/04-fee-distribution.md | 114 - .../03-middleware/01-ics29-fee/05-events.md | 43 - .../01-ics29-fee/06-end-users.md | 36 - .../01-ics29-fee/_category_.json | 5 - .../01-ics29-fee/images/feeflow.png | Bin 394717 -> 0 bytes .../01-ics29-fee/images/msgpaypacket.png | Bin 150696 -> 0 bytes .../01-ics29-fee/images/paypacketfeeasync.png | Bin 142753 -> 0 bytes .../03-middleware/_category_.json | 5 - .../01-support-denoms-with-slashes.md | 88 - .../04-migrations/02-sdk-to-v1.md | 195 - .../04-migrations/03-v1-to-v2.md | 60 - .../04-migrations/04-v2-to-v3.md | 186 - .../04-migrations/05-v3-to-v4.md | 160 - .../04-migrations/_category_.json | 5 - .../versioned_docs/version-v5.3.x/00-intro.md | 16 - .../version-v5.3.x/01-ibc/01-overview.md | 297 - .../version-v5.3.x/01-ibc/02-integration.md | 222 - .../version-v5.3.x/01-ibc/03-apps/01-apps.md | 56 - .../01-ibc/03-apps/02-ibcmodule.md | 351 - .../01-ibc/03-apps/03-bindports.md | 122 - .../01-ibc/03-apps/04-keeper.md | 96 - .../01-ibc/03-apps/05-packets_acks.md | 108 - .../01-ibc/03-apps/06-routing.md | 44 - .../01-ibc/03-apps/_category_.json | 5 - .../01-ibc/03-apps/images/packet_flow.png | Bin 352988 -> 0 bytes .../01-ibc/04-middleware/01-develop.md | 422 - .../01-ibc/04-middleware/02-integration.md | 72 - .../01-ibc/04-middleware/_category_.json | 5 - .../01-ibc/05-upgrades/00-intro.md | 8 - .../01-ibc/05-upgrades/01-quick-guide.md | 60 - .../01-ibc/05-upgrades/02-developer-guide.md | 56 - .../01-ibc/05-upgrades/03-genesis-restart.md | 52 - .../01-ibc/05-upgrades/_category_.json | 5 - .../version-v5.3.x/01-ibc/06-proposals.md | 130 - .../version-v5.3.x/01-ibc/07-relayer.md | 53 - .../version-v5.3.x/01-ibc/08-proto-docs.md | 10 - .../version-v5.3.x/01-ibc/09-roadmap.md | 60 - .../version-v5.3.x/01-ibc/_category_.json | 5 - .../02-apps/01-transfer/01-overview.md | 128 - .../02-apps/01-transfer/02-state.md | 13 - .../01-transfer/03-state-transitions.md | 37 - .../02-apps/01-transfer/04-messages.md | 46 - .../02-apps/01-transfer/05-events.md | 54 - .../02-apps/01-transfer/06-metrics.md | 18 - .../02-apps/01-transfer/07-params.md | 34 - .../02-apps/01-transfer/_category_.json | 5 - .../02-interchain-accounts/01-overview.md | 43 - .../02-interchain-accounts/02-auth-modules.md | 402 - .../03-active-channels.md | 28 - .../02-interchain-accounts/04-integration.md | 194 - .../02-interchain-accounts/05-parameters.md | 65 - .../02-interchain-accounts/06-transactions.md | 27 - .../02-interchain-accounts/_category_.json | 5 - .../images/send-interchain-tx.png | Bin 168904 -> 0 bytes .../version-v5.3.x/02-apps/_category_.json | 5 - .../03-middleware/01-ics29-fee/01-overview.md | 55 - .../01-ics29-fee/02-integration.md | 174 - .../03-middleware/01-ics29-fee/03-msgs.md | 96 - .../01-ics29-fee/04-fee-distribution.md | 114 - .../03-middleware/01-ics29-fee/05-events.md | 43 - .../01-ics29-fee/06-end-users.md | 36 - .../01-ics29-fee/_category_.json | 5 - .../01-ics29-fee/images/feeflow.png | Bin 394717 -> 0 bytes .../01-ics29-fee/images/msgpaypacket.png | Bin 150696 -> 0 bytes .../01-ics29-fee/images/paypacketfeeasync.png | Bin 142753 -> 0 bytes .../03-middleware/_category_.json | 5 - .../01-support-denoms-with-slashes.md | 88 - .../04-migrations/02-sdk-to-v1.md | 195 - .../04-migrations/03-v1-to-v2.md | 60 - .../04-migrations/04-v2-to-v3.md | 186 - .../04-migrations/05-v3-to-v4.md | 160 - .../04-migrations/_category_.json | 5 - .../versioned_docs/version-v6.2.x/00-intro.md | 16 - .../version-v6.2.x/01-ibc/01-overview.md | 297 - .../version-v6.2.x/01-ibc/02-integration.md | 222 - .../version-v6.2.x/01-ibc/03-apps/01-apps.md | 56 - .../01-ibc/03-apps/02-ibcmodule.md | 358 - .../01-ibc/03-apps/03-bindports.md | 122 - .../01-ibc/03-apps/04-keeper.md | 96 - .../01-ibc/03-apps/05-packets_acks.md | 118 - .../01-ibc/03-apps/06-routing.md | 44 - .../01-ibc/03-apps/_category_.json | 5 - .../01-ibc/03-apps/images/packet_flow.png | Bin 352988 -> 0 bytes .../01-ibc/04-middleware/01-develop.md | 453 - .../01-ibc/04-middleware/02-integration.md | 72 - .../01-ibc/04-middleware/_category_.json | 5 - .../01-ibc/05-upgrades/00-intro.md | 15 - .../01-ibc/05-upgrades/01-quick-guide.md | 60 - .../01-ibc/05-upgrades/02-developer-guide.md | 56 - .../01-ibc/05-upgrades/03-genesis-restart.md | 52 - .../01-ibc/05-upgrades/_category_.json | 5 - .../version-v6.2.x/01-ibc/06-proposals.md | 130 - .../version-v6.2.x/01-ibc/07-relayer.md | 53 - .../version-v6.2.x/01-ibc/08-proto-docs.md | 10 - .../version-v6.2.x/01-ibc/09-roadmap.md | 60 - .../version-v6.2.x/01-ibc/_category_.json | 5 - .../02-apps/01-transfer/01-overview.md | 128 - .../02-apps/01-transfer/02-state.md | 13 - .../01-transfer/03-state-transitions.md | 37 - .../02-apps/01-transfer/04-messages.md | 46 - .../02-apps/01-transfer/05-events.md | 54 - .../02-apps/01-transfer/06-metrics.md | 18 - .../02-apps/01-transfer/07-params.md | 34 - .../02-apps/01-transfer/08-authorizations.md | 54 - .../02-apps/01-transfer/_category_.json | 5 - .../02-interchain-accounts/01-overview.md | 39 - .../02-interchain-accounts/02-development.md | 40 - .../02-interchain-accounts/03-auth-modules.md | 27 - .../02-interchain-accounts/04-integration.md | 199 - .../02-interchain-accounts/05-messages.md | 77 - .../02-interchain-accounts/06-parameters.md | 65 - .../02-interchain-accounts/07-client.md | 184 - .../08-active-channels.md | 40 - .../09-legacy/01-auth-modules.md | 274 - .../09-legacy/02-integration.md | 201 - .../09-legacy/03-keeper-api.md | 125 - .../09-legacy/_category_.json | 5 - .../09-legacy/images/ica-pre-v6.png | Bin 34698 -> 0 bytes .../02-interchain-accounts/_category_.json | 5 - .../02-interchain-accounts/images/ica-v6.png | Bin 163580 -> 0 bytes .../version-v6.2.x/02-apps/_category_.json | 5 - .../03-middleware/01-ics29-fee/01-overview.md | 55 - .../01-ics29-fee/02-integration.md | 174 - .../03-middleware/01-ics29-fee/03-msgs.md | 95 - .../01-ics29-fee/04-fee-distribution.md | 114 - .../03-middleware/01-ics29-fee/05-events.md | 43 - .../01-ics29-fee/06-end-users.md | 36 - .../01-ics29-fee/_category_.json | 5 - .../01-ics29-fee/images/feeflow.png | Bin 394717 -> 0 bytes .../01-ics29-fee/images/msgpaypacket.png | Bin 150696 -> 0 bytes .../01-ics29-fee/images/paypacketfeeasync.png | Bin 142753 -> 0 bytes .../03-middleware/_category_.json | 5 - .../01-support-denoms-with-slashes.md | 88 - .../04-migrations/02-sdk-to-v1.md | 195 - .../04-migrations/03-v1-to-v2.md | 60 - .../04-migrations/04-v2-to-v3.md | 186 - .../04-migrations/05-v3-to-v4.md | 160 - .../04-migrations/06-v4-to-v5.md | 441 - .../04-migrations/07-v5-to-v6.md | 299 - .../04-migrations/_category_.json | 5 - .../images/auth-module-decision-tree.png | Bin 80522 -> 0 bytes .../versioned_docs/version-v7.3.x/00-intro.md | 16 - .../version-v7.3.x/01-ibc/01-overview.md | 297 - .../version-v7.3.x/01-ibc/02-integration.md | 235 - .../version-v7.3.x/01-ibc/03-apps/01-apps.md | 57 - .../01-ibc/03-apps/02-ibcmodule.md | 382 - .../01-ibc/03-apps/03-bindports.md | 122 - .../01-ibc/03-apps/04-keeper.md | 96 - .../01-ibc/03-apps/05-packets_acks.md | 167 - .../01-ibc/03-apps/06-routing.md | 44 - .../01-ibc/03-apps/_category_.json | 5 - .../01-ibc/03-apps/images/packet_flow.png | Bin 352988 -> 0 bytes .../01-ibc/04-middleware/01-develop.md | 473 - .../01-ibc/04-middleware/02-integration.md | 72 - .../01-ibc/04-middleware/_category_.json | 5 - .../01-ibc/05-upgrades/00-intro.md | 15 - .../01-ibc/05-upgrades/01-quick-guide.md | 60 - .../01-ibc/05-upgrades/02-developer-guide.md | 15 - .../01-ibc/05-upgrades/03-genesis-restart.md | 52 - .../01-ibc/05-upgrades/_category_.json | 5 - .../version-v7.3.x/01-ibc/06-proposals.md | 132 - .../version-v7.3.x/01-ibc/07-relayer.md | 53 - .../version-v7.3.x/01-ibc/08-proto-docs.md | 11 - .../version-v7.3.x/01-ibc/09-roadmap.md | 74 - .../01-ibc/10-troubleshooting.md | 15 - .../version-v7.3.x/01-ibc/_category_.json | 5 - .../02-apps/01-transfer/01-overview.md | 128 - .../02-apps/01-transfer/02-state.md | 13 - .../01-transfer/03-state-transitions.md | 37 - .../02-apps/01-transfer/04-messages.md | 58 - .../02-apps/01-transfer/05-events.md | 54 - .../02-apps/01-transfer/06-metrics.md | 18 - .../02-apps/01-transfer/07-params.md | 34 - .../02-apps/01-transfer/08-authorizations.md | 55 - .../02-apps/01-transfer/09-client.md | 70 - .../02-apps/01-transfer/_category_.json | 5 - .../02-interchain-accounts/01-overview.md | 39 - .../02-interchain-accounts/02-development.md | 40 - .../02-interchain-accounts/03-auth-modules.md | 27 - .../02-interchain-accounts/04-integration.md | 199 - .../02-interchain-accounts/05-messages.md | 78 - .../02-interchain-accounts/06-parameters.md | 65 - .../02-interchain-accounts/07-tx-encoding.md | 58 - .../02-interchain-accounts/08-client.md | 183 - .../09-active-channels.md | 39 - .../10-legacy/01-auth-modules.md | 274 - .../10-legacy/02-integration.md | 201 - .../10-legacy/03-keeper-api.md | 125 - .../10-legacy/_category_.json | 5 - .../10-legacy/images/ica-pre-v6.png | Bin 34698 -> 0 bytes .../02-interchain-accounts/_category_.json | 5 - .../02-interchain-accounts/images/ica-v6.png | Bin 163580 -> 0 bytes .../version-v7.3.x/02-apps/_category_.json | 5 - .../01-developer-guide/01-overview.md | 79 - .../01-developer-guide/02-client-state.md | 79 - .../01-developer-guide/03-consensus-state.md | 27 - .../04-updates-and-misbehaviour.md | 99 - .../01-developer-guide/05-upgrades.md | 66 - .../01-developer-guide/06-proofs.md | 66 - .../01-developer-guide/07-proposals.md | 36 - .../01-developer-guide/08-genesis.md | 42 - .../01-developer-guide/09-setup.md | 135 - .../01-developer-guide/_category_.json | 5 - .../02-solomachine/01-solomachine.md | 26 - .../02-solomachine/02-concepts.md | 168 - .../02-solomachine/03-state.md | 12 - .../02-solomachine/04-state_transitions.md | 43 - .../02-solomachine/_category_.json | 5 - .../03-localhost/01-overview.md | 46 - .../03-localhost/02-integration.md | 20 - .../03-localhost/03-client-state.md | 64 - .../03-localhost/04-connection.md | 29 - .../03-localhost/05-state-verification.md | 22 - .../03-localhost/_category_.json | 5 - .../03-light-clients/_category_.json | 5 - .../04-middleware/01-ics29-fee/01-overview.md | 54 - .../01-ics29-fee/02-integration.md | 174 - .../04-middleware/01-ics29-fee/03-msgs.md | 96 - .../01-ics29-fee/04-fee-distribution.md | 114 - .../04-middleware/01-ics29-fee/05-events.md | 43 - .../01-ics29-fee/06-end-users.md | 36 - .../01-ics29-fee/_category_.json | 5 - .../01-ics29-fee/images/feeflow.png | Bin 394717 -> 0 bytes .../01-ics29-fee/images/msgpaypacket.png | Bin 150696 -> 0 bytes .../01-ics29-fee/images/paypacketfeeasync.png | Bin 142753 -> 0 bytes .../04-middleware/02-callbacks/01-overview.md | 51 - .../02-callbacks/02-integration.md | 95 - .../02-callbacks/03-interfaces.md | 151 - .../04-middleware/02-callbacks/04-events.md | 39 - .../02-callbacks/05-end-users.md | 96 - .../04-middleware/02-callbacks/06-gas.md | 77 - .../02-callbacks/_category_.json | 5 - .../02-callbacks/images/callbackflow.svg | 43 - .../02-callbacks/images/ics4-callbackflow.svg | 43 - .../04-middleware/_category_.json | 5 - .../01-support-denoms-with-slashes.md | 88 - .../05-migrations/02-sdk-to-v1.md | 195 - .../05-migrations/03-v1-to-v2.md | 60 - .../05-migrations/04-v2-to-v3.md | 186 - .../05-migrations/05-v3-to-v4.md | 160 - .../05-migrations/06-v4-to-v5.md | 441 - .../05-migrations/07-v5-to-v6.md | 299 - .../05-migrations/08-v6-to-v7.md | 357 - .../05-migrations/09-v7-to-v7_1.md | 67 - .../05-migrations/10-v7_2-to-v7_3.md | 49 - .../05-migrations/_category_.json | 5 - .../images/auth-module-decision-tree.png | Bin 80522 -> 0 bytes .../version-v4.4.x-sidebars.json | 35 - .../version-v5.3.x-sidebars.json | 35 - .../version-v6.2.x-sidebars.json | 35 - .../version-v7.3.x-sidebars.json | 35 - docs/versions.json | 6 - 517 files changed, 82357 deletions(-) delete mode 100644 docs/.gitignore delete mode 100644 docs/README.md delete mode 100644 docs/architecture/README.md delete mode 100644 docs/architecture/adr-001-coin-source-tracing.md delete mode 100644 docs/architecture/adr-002-go-module-versioning.md delete mode 100644 docs/architecture/adr-003-ics27-acknowledgement.md delete mode 100644 docs/architecture/adr-004-ics29-lock-fee-module.md delete mode 100644 docs/architecture/adr-005-consensus-height-events.md delete mode 100644 docs/architecture/adr-006-02-client-refactor.md delete mode 100644 docs/architecture/adr-007-solomachine-signbytes.md delete mode 100644 docs/architecture/adr-008-app-caller-cbs.md delete mode 100644 docs/architecture/adr-009-v6-ics27-msgserver.md delete mode 100644 docs/architecture/adr-010-light-clients-as-sdk-modules.md delete mode 100644 docs/architecture/adr-011-transfer-total-escrow-state-entry.md delete mode 100644 docs/architecture/adr-015-ibc-packet-receiver.md delete mode 100644 docs/architecture/adr-025-ibc-passive-channels.md delete mode 100644 docs/architecture/adr-026-ibc-client-recovery-mechanisms.md delete mode 100644 docs/architecture/adr-027-ibc-wasm.md delete mode 100644 docs/architecture/adr.template.md delete mode 100644 docs/audits/Trail of Bits audit - Final Report.pdf delete mode 100644 docs/babel.config.js delete mode 100644 docs/client/config.json delete mode 100644 docs/client/swagger-ui/swagger.yaml delete mode 100644 docs/dev/development-setup.md delete mode 100644 docs/dev/go-style-guide.md delete mode 100644 docs/dev/project-structure.md delete mode 100644 docs/dev/pull-requests.md delete mode 100644 docs/dev/release-management.md delete mode 100644 docs/docs/00-intro.md delete mode 100644 docs/docs/01-ibc/01-overview.md delete mode 100644 docs/docs/01-ibc/02-integration.md delete mode 100644 docs/docs/01-ibc/03-apps/01-apps.md delete mode 100644 docs/docs/01-ibc/03-apps/02-ibcmodule.md delete mode 100644 docs/docs/01-ibc/03-apps/03-bindports.md delete mode 100644 docs/docs/01-ibc/03-apps/04-keeper.md delete mode 100644 docs/docs/01-ibc/03-apps/05-packets_acks.md delete mode 100644 docs/docs/01-ibc/03-apps/06-routing.md delete mode 100644 docs/docs/01-ibc/03-apps/_category_.json delete mode 100644 docs/docs/01-ibc/03-apps/images/packet_flow.png delete mode 100644 docs/docs/01-ibc/04-middleware/01-overview.md delete mode 100644 docs/docs/01-ibc/04-middleware/02-develop.md delete mode 100644 docs/docs/01-ibc/04-middleware/03-integration.md delete mode 100644 docs/docs/01-ibc/04-middleware/_category_.json delete mode 100644 docs/docs/01-ibc/04-middleware/images/middleware-stack.png delete mode 100644 docs/docs/01-ibc/05-upgrades/00-intro.md delete mode 100644 docs/docs/01-ibc/05-upgrades/01-quick-guide.md delete mode 100644 docs/docs/01-ibc/05-upgrades/02-developer-guide.md delete mode 100644 docs/docs/01-ibc/05-upgrades/03-genesis-restart.md delete mode 100644 docs/docs/01-ibc/05-upgrades/_category_.json delete mode 100644 docs/docs/01-ibc/06-channel-upgrades.md delete mode 100644 docs/docs/01-ibc/07-proposals.md delete mode 100644 docs/docs/01-ibc/08-relayer.md delete mode 100644 docs/docs/01-ibc/09-proto-docs.md delete mode 100644 docs/docs/01-ibc/10-roadmap.md delete mode 100644 docs/docs/01-ibc/11-troubleshooting.md delete mode 100644 docs/docs/01-ibc/12-capability-module.md delete mode 100644 docs/docs/01-ibc/_category_.json delete mode 100644 docs/docs/02-apps/01-transfer/01-overview.md delete mode 100644 docs/docs/02-apps/01-transfer/02-state.md delete mode 100644 docs/docs/02-apps/01-transfer/03-state-transitions.md delete mode 100644 docs/docs/02-apps/01-transfer/04-messages.md delete mode 100644 docs/docs/02-apps/01-transfer/05-events.md delete mode 100644 docs/docs/02-apps/01-transfer/06-metrics.md delete mode 100644 docs/docs/02-apps/01-transfer/07-params.md delete mode 100644 docs/docs/02-apps/01-transfer/08-authorizations.md delete mode 100644 docs/docs/02-apps/01-transfer/09-client.md delete mode 100644 docs/docs/02-apps/01-transfer/_category_.json delete mode 100644 docs/docs/02-apps/02-interchain-accounts/01-overview.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/02-development.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/03-auth-modules.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/04-integration.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/05-messages.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/06-parameters.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/07-tx-encoding.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/08-client.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/09-active-channels.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/10-legacy/02-integration.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md delete mode 100644 docs/docs/02-apps/02-interchain-accounts/10-legacy/_category_.json delete mode 100644 docs/docs/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png delete mode 100644 docs/docs/02-apps/02-interchain-accounts/_category_.json delete mode 100644 docs/docs/02-apps/02-interchain-accounts/images/ica-v6.png delete mode 100644 docs/docs/02-apps/_category_.json delete mode 100644 docs/docs/03-light-clients/01-developer-guide/01-overview.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/02-client-state.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/03-consensus-state.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/05-upgrades.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/06-proofs.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/07-proposals.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/08-genesis.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/09-setup.md delete mode 100644 docs/docs/03-light-clients/01-developer-guide/_category_.json delete mode 100644 docs/docs/03-light-clients/02-localhost/01-overview.md delete mode 100644 docs/docs/03-light-clients/02-localhost/02-integration.md delete mode 100644 docs/docs/03-light-clients/02-localhost/03-client-state.md delete mode 100644 docs/docs/03-light-clients/02-localhost/04-connection.md delete mode 100644 docs/docs/03-light-clients/02-localhost/05-state-verification.md delete mode 100644 docs/docs/03-light-clients/02-localhost/_category_.json delete mode 100644 docs/docs/03-light-clients/03-solomachine/01-solomachine.md delete mode 100644 docs/docs/03-light-clients/03-solomachine/02-concepts.md delete mode 100644 docs/docs/03-light-clients/03-solomachine/03-state.md delete mode 100644 docs/docs/03-light-clients/03-solomachine/04-state_transitions.md delete mode 100644 docs/docs/03-light-clients/03-solomachine/_category_.json delete mode 100644 docs/docs/03-light-clients/04-wasm/03-integration.md delete mode 100644 docs/docs/03-light-clients/_category_.json delete mode 100644 docs/docs/04-middleware/01-ics29-fee/01-overview.md delete mode 100644 docs/docs/04-middleware/01-ics29-fee/02-integration.md delete mode 100644 docs/docs/04-middleware/01-ics29-fee/03-msgs.md delete mode 100644 docs/docs/04-middleware/01-ics29-fee/04-fee-distribution.md delete mode 100644 docs/docs/04-middleware/01-ics29-fee/05-events.md delete mode 100644 docs/docs/04-middleware/01-ics29-fee/06-end-users.md delete mode 100644 docs/docs/04-middleware/01-ics29-fee/_category_.json delete mode 100644 docs/docs/04-middleware/01-ics29-fee/images/feeflow.png delete mode 100644 docs/docs/04-middleware/01-ics29-fee/images/msgpaypacket.png delete mode 100644 docs/docs/04-middleware/01-ics29-fee/images/paypacketfeeasync.png delete mode 100644 docs/docs/04-middleware/02-callbacks/01-overview.md delete mode 100644 docs/docs/04-middleware/02-callbacks/02-integration.md delete mode 100644 docs/docs/04-middleware/02-callbacks/03-interfaces.md delete mode 100644 docs/docs/04-middleware/02-callbacks/04-events.md delete mode 100644 docs/docs/04-middleware/02-callbacks/05-end-users.md delete mode 100644 docs/docs/04-middleware/02-callbacks/06-gas.md delete mode 100644 docs/docs/04-middleware/02-callbacks/_category_.json delete mode 100644 docs/docs/04-middleware/02-callbacks/images/callbackflow.svg delete mode 100644 docs/docs/04-middleware/02-callbacks/images/ics4-callbackflow.svg delete mode 100644 docs/docs/04-middleware/_category_.json delete mode 100644 docs/docs/05-migrations/01-support-denoms-with-slashes.md delete mode 100644 docs/docs/05-migrations/02-sdk-to-v1.md delete mode 100644 docs/docs/05-migrations/03-v1-to-v2.md delete mode 100644 docs/docs/05-migrations/04-v2-to-v3.md delete mode 100644 docs/docs/05-migrations/05-v3-to-v4.md delete mode 100644 docs/docs/05-migrations/06-v4-to-v5.md delete mode 100644 docs/docs/05-migrations/07-v5-to-v6.md delete mode 100644 docs/docs/05-migrations/08-v6-to-v7.md delete mode 100644 docs/docs/05-migrations/09-v7-to-v7_1.md delete mode 100644 docs/docs/05-migrations/10-v7_2-to-v7_3.md delete mode 100644 docs/docs/05-migrations/11-v7-to-v8.md delete mode 100644 docs/docs/05-migrations/_category_.json delete mode 100644 docs/docs/05-migrations/images/auth-module-decision-tree.png delete mode 100644 docs/docs/05-migrations/migration.template.md delete mode 100644 docs/docusaurus.config.js delete mode 100644 docs/events/events.md delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/params/params.md delete mode 100644 docs/requirements/ics27-requirements.md delete mode 100644 docs/requirements/ics27-v2-requirements.md delete mode 100644 docs/requirements/ics29-v1-requirements.md delete mode 100644 docs/requirements/localhost-requirements.md delete mode 100644 docs/requirements/requirements-template.md delete mode 100644 docs/sidebars.js delete mode 100644 docs/src/css/base.css delete mode 100644 docs/src/css/custom.css delete mode 100644 docs/src/css/fonts.css delete mode 100644 docs/static/.nojekyll delete mode 100644 docs/static/CNAME delete mode 100644 docs/static/fonts/inter/Inter-Black.woff delete mode 100644 docs/static/fonts/inter/Inter-Black.woff2 delete mode 100644 docs/static/fonts/inter/Inter-BlackItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-BlackItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-Bold.woff delete mode 100644 docs/static/fonts/inter/Inter-Bold.woff2 delete mode 100644 docs/static/fonts/inter/Inter-BoldItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-BoldItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-ExtraBold.woff delete mode 100644 docs/static/fonts/inter/Inter-ExtraBold.woff2 delete mode 100644 docs/static/fonts/inter/Inter-ExtraBoldItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-ExtraBoldItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-ExtraLight.woff delete mode 100644 docs/static/fonts/inter/Inter-ExtraLight.woff2 delete mode 100644 docs/static/fonts/inter/Inter-ExtraLightItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-ExtraLightItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-Italic.woff delete mode 100644 docs/static/fonts/inter/Inter-Italic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-Light.woff delete mode 100644 docs/static/fonts/inter/Inter-Light.woff2 delete mode 100644 docs/static/fonts/inter/Inter-LightItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-LightItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-Medium.woff delete mode 100644 docs/static/fonts/inter/Inter-Medium.woff2 delete mode 100644 docs/static/fonts/inter/Inter-MediumItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-MediumItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-Regular.woff delete mode 100644 docs/static/fonts/inter/Inter-Regular.woff2 delete mode 100644 docs/static/fonts/inter/Inter-SemiBold.woff delete mode 100644 docs/static/fonts/inter/Inter-SemiBold.woff2 delete mode 100644 docs/static/fonts/inter/Inter-SemiBoldItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-SemiBoldItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-Thin.woff delete mode 100644 docs/static/fonts/inter/Inter-Thin.woff2 delete mode 100644 docs/static/fonts/inter/Inter-ThinItalic.woff delete mode 100644 docs/static/fonts/inter/Inter-ThinItalic.woff2 delete mode 100644 docs/static/fonts/inter/Inter-italic.var.woff2 delete mode 100644 docs/static/fonts/inter/Inter-roman.var.woff2 delete mode 100644 docs/static/fonts/intervar/Inter.var.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-Bold.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-Light.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-Regular.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-SemiBold.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-SemiBoldItalic.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-Thin.woff2 delete mode 100644 docs/static/fonts/jetbrainsmono/JetBrainsMono-ThinItalic.woff2 delete mode 100644 docs/static/img/black-ibc-logo.svg delete mode 100644 docs/static/img/black-large-ibc-logo.svg delete mode 100644 docs/static/img/cosmos-logo-bw.svg delete mode 100644 docs/static/img/ibc-go-image.png delete mode 100644 docs/static/img/ico-chevron.svg delete mode 100644 docs/static/img/white-cosmos-icon.svg delete mode 100644 docs/static/img/white-ibc-logo.svg delete mode 100644 docs/static/img/white-large-ibc-logo.svg delete mode 100644 docs/tailwind.config.js delete mode 100644 docs/versioned_docs/version-v4.4.x/00-intro.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/01-overview.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/02-integration.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/01-apps.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/02-ibcmodule.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/03-bindports.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/04-keeper.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/05-packets_acks.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/06-routing.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/03-apps/images/packet_flow.png delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/01-develop.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/02-integration.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/00-intro.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/01-quick-guide.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/02-developer-guide.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/03-genesis-restart.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/05-upgrades/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/06-proposals.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/07-relayer.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/08-proto-docs.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/09-roadmap.md delete mode 100644 docs/versioned_docs/version-v4.4.x/01-ibc/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/01-overview.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/02-state.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/03-state-transitions.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/04-messages.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/05-events.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/06-metrics.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/07-params.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/01-transfer/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/01-overview.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/02-auth-modules.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/03-active-channels.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/04-integration.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/05-parameters.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/06-transactions.md delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/02-interchain-accounts/images/send-interchain-tx.png delete mode 100644 docs/versioned_docs/version-v4.4.x/02-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/01-overview.md delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/02-integration.md delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/03-msgs.md delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/04-fee-distribution.md delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/05-events.md delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/06-end-users.md delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/feeflow.png delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/msgpaypacket.png delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png delete mode 100644 docs/versioned_docs/version-v4.4.x/03-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v4.4.x/04-migrations/01-support-denoms-with-slashes.md delete mode 100644 docs/versioned_docs/version-v4.4.x/04-migrations/02-sdk-to-v1.md delete mode 100644 docs/versioned_docs/version-v4.4.x/04-migrations/03-v1-to-v2.md delete mode 100644 docs/versioned_docs/version-v4.4.x/04-migrations/04-v2-to-v3.md delete mode 100644 docs/versioned_docs/version-v4.4.x/04-migrations/05-v3-to-v4.md delete mode 100644 docs/versioned_docs/version-v4.4.x/04-migrations/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/00-intro.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/01-overview.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/02-integration.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/01-apps.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/02-ibcmodule.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/03-bindports.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/04-keeper.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/05-packets_acks.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/06-routing.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/03-apps/images/packet_flow.png delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/04-middleware/01-develop.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/04-middleware/02-integration.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/05-upgrades/00-intro.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/05-upgrades/01-quick-guide.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/05-upgrades/02-developer-guide.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/05-upgrades/03-genesis-restart.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/05-upgrades/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/06-proposals.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/07-relayer.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/08-proto-docs.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/09-roadmap.md delete mode 100644 docs/versioned_docs/version-v5.3.x/01-ibc/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/01-overview.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/02-state.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/03-state-transitions.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/04-messages.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/05-events.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/06-metrics.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/07-params.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/01-transfer/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/01-overview.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/02-auth-modules.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/03-active-channels.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/04-integration.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/05-parameters.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/06-transactions.md delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/02-interchain-accounts/images/send-interchain-tx.png delete mode 100644 docs/versioned_docs/version-v5.3.x/02-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/01-overview.md delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/02-integration.md delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/03-msgs.md delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/04-fee-distribution.md delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/05-events.md delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/06-end-users.md delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/images/feeflow.png delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/images/msgpaypacket.png delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png delete mode 100644 docs/versioned_docs/version-v5.3.x/03-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v5.3.x/04-migrations/01-support-denoms-with-slashes.md delete mode 100644 docs/versioned_docs/version-v5.3.x/04-migrations/02-sdk-to-v1.md delete mode 100644 docs/versioned_docs/version-v5.3.x/04-migrations/03-v1-to-v2.md delete mode 100644 docs/versioned_docs/version-v5.3.x/04-migrations/04-v2-to-v3.md delete mode 100644 docs/versioned_docs/version-v5.3.x/04-migrations/05-v3-to-v4.md delete mode 100644 docs/versioned_docs/version-v5.3.x/04-migrations/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/00-intro.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/01-overview.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/02-integration.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/01-apps.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/02-ibcmodule.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/03-bindports.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/04-keeper.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/05-packets_acks.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/06-routing.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/03-apps/images/packet_flow.png delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/04-middleware/01-develop.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/04-middleware/02-integration.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/05-upgrades/00-intro.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/05-upgrades/01-quick-guide.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/05-upgrades/02-developer-guide.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/05-upgrades/03-genesis-restart.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/05-upgrades/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/06-proposals.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/07-relayer.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/08-proto-docs.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/09-roadmap.md delete mode 100644 docs/versioned_docs/version-v6.2.x/01-ibc/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/01-overview.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/02-state.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/03-state-transitions.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/04-messages.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/05-events.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/06-metrics.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/07-params.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/08-authorizations.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/01-transfer/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/01-overview.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/02-development.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/03-auth-modules.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/04-integration.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/05-messages.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/06-parameters.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/07-client.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/08-active-channels.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/01-auth-modules.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/02-integration.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/03-keeper-api.md delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/09-legacy/images/ica-pre-v6.png delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/02-interchain-accounts/images/ica-v6.png delete mode 100644 docs/versioned_docs/version-v6.2.x/02-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/01-overview.md delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/02-integration.md delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/03-msgs.md delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/04-fee-distribution.md delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/05-events.md delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/06-end-users.md delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/images/feeflow.png delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/images/msgpaypacket.png delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/01-ics29-fee/images/paypacketfeeasync.png delete mode 100644 docs/versioned_docs/version-v6.2.x/03-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/01-support-denoms-with-slashes.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/02-sdk-to-v1.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/03-v1-to-v2.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/04-v2-to-v3.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/05-v3-to-v4.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/06-v4-to-v5.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/07-v5-to-v6.md delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/_category_.json delete mode 100644 docs/versioned_docs/version-v6.2.x/04-migrations/images/auth-module-decision-tree.png delete mode 100644 docs/versioned_docs/version-v7.3.x/00-intro.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/02-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/01-apps.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/02-ibcmodule.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/03-bindports.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/04-keeper.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/05-packets_acks.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/06-routing.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/03-apps/images/packet_flow.png delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/04-middleware/01-develop.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/04-middleware/02-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/00-intro.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/01-quick-guide.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/02-developer-guide.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/03-genesis-restart.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/05-upgrades/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/06-proposals.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/07-relayer.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/08-proto-docs.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/09-roadmap.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/10-troubleshooting.md delete mode 100644 docs/versioned_docs/version-v7.3.x/01-ibc/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/02-state.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/03-state-transitions.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/04-messages.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/05-events.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/06-metrics.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/07-params.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/08-authorizations.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/09-client.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/01-transfer/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/02-development.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/03-auth-modules.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/04-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/05-messages.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/06-parameters.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/07-tx-encoding.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/08-client.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/09-active-channels.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/02-interchain-accounts/images/ica-v6.png delete mode 100644 docs/versioned_docs/version-v7.3.x/02-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/02-client-state.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/03-consensus-state.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/05-upgrades.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/06-proofs.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/07-proposals.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/08-genesis.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/09-setup.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/01-developer-guide/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/01-solomachine.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/02-concepts.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/03-state.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/04-state_transitions.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/02-solomachine/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/02-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/03-client-state.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/04-connection.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/05-state-verification.md delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/03-localhost/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/03-light-clients/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/02-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/03-msgs.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/04-fee-distribution.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/05-events.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/06-end-users.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/images/feeflow.png delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/images/msgpaypacket.png delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/01-overview.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/02-integration.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/03-interfaces.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/04-events.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/05-end-users.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/06-gas.md delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/images/callbackflow.svg delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg delete mode 100644 docs/versioned_docs/version-v7.3.x/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/01-support-denoms-with-slashes.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/02-sdk-to-v1.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/03-v1-to-v2.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/04-v2-to-v3.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/05-v3-to-v4.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/06-v4-to-v5.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/07-v5-to-v6.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/08-v6-to-v7.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/09-v7-to-v7_1.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/10-v7_2-to-v7_3.md delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/_category_.json delete mode 100644 docs/versioned_docs/version-v7.3.x/05-migrations/images/auth-module-decision-tree.png delete mode 100644 docs/versioned_sidebars/version-v4.4.x-sidebars.json delete mode 100644 docs/versioned_sidebars/version-v5.3.x-sidebars.json delete mode 100644 docs/versioned_sidebars/version-v6.2.x-sidebars.json delete mode 100644 docs/versioned_sidebars/version-v7.3.x-sidebars.json delete mode 100644 docs/versions.json diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index b2d6de30624..00000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 00e11144e3e..00000000000 --- a/docs/README.md +++ /dev/null @@ -1,268 +0,0 @@ -# IBC-Go Documentation - -Welcome to the IBC-Go documentation! This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. - -## Table of Contents - -- [IBC-Go Documentation](#ibc-go-documentation) - - [Table of Contents](#table-of-contents) - - [Configuration](#configuration) - - [Local Development and Deployment](#local-development-and-deployment) - - [Installation](#installation) - - [Local Development](#local-development) - - [Build](#build) - - [Serve](#serve) - - [Updating the Documentation](#updating-the-documentation) - - [Best practices](#best-practices) - - [File and Directory Naming Conventions](#file-and-directory-naming-conventions) - - [Code Blocks](#code-blocks) - - [Links](#links) - - [Multi-Documentation Linking](#multi-documentation-linking) - - [Static Assets](#static-assets) - - [Raw Assets](#raw-assets) - - [Technical writing course](#technical-writing-course) - - [Versioning](#versioning) - - [Terminology](#terminology) - - [Overview](#overview) - - [Tagging a new version](#tagging-a-new-version) - - [Adding a new version](#adding-a-new-version) - - [Updating an existing version](#updating-an-existing-version) - - [Deleting a version](#deleting-a-version) - -## Configuration - -Docusaurus configuration file is located at `./docusaurus.config.js`. This file contains the configuration for the sidebar, navbar, footer, and other settings. Sidebars are created in `./sidebars.js`. - -## Local Development and Deployment - -### Installation - -```bash -npm install -``` - -### Local Development - -```bash -npm start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. However, in the local development environment, some plugins like `@docusaurus/plugin-client-redirects`, will not work at all. This is why the landing page is an error page in the local development environment, and why you have to click on the correct docs version to see the documentation. This is not the case in the production environment. To view the production environment, you must [build](#build) and [serve](#serve) the website locally. - -### Build - -```bash -npm run build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - -### Serve - -```bash -npm run serve -``` - -This command starts a local production server and opens up a browser window. - -## Updating the Documentation - -The documentation website is autogenerated from the markdown files found in [docs](./docs) directory. Each directory in `./docs/` represents a category to be displayed in the sidebar. If you create a new directory, you must create a `_category_.json` file in that directory with the following contents: - -```json -{ - "label": "Sidebar Label", - "position": 1, // position of the category in the sidebar - "link": null -} -``` - -The `position` key above is used to order the categories in the sidebar. This position key pertains to the order of this category in the parent directory. - -If you create a new markdown file within a category (`.docs/` directory is itself a category), you must add the following frontmatter to the top of the markdown file: - -```yaml ---- -title: Title of the file # title of the file in the sidebar -sidebar_label: Sidebar Label # title of the file in the sidebar -sidebar_position: 1 # position of the file in the sidebar -slug: /migrations/v5-to-v6 # the url of the file ---- -``` - -The `link` key in `_category_.json` determines if the category has an introductory page that comes before any content pages. If `link` is `null`, then the category does not have an introductory page. If there is a markdown file you wish to link, you should do - -```json -{ - "label": "Sidebar Label", - "position": 1, // position of the category in the sidebar - "link": { "type": "doc", "id": "intro" } -} -``` - -The `id` key can be defined in the frontmatter of the markdown file. Or, you can use the id tag as an extension to the url of the current page. For example, the following frontmatter on a markdown file in the same directory as the `_category_.json` file shown above will link to the markdown file: - -```yaml ---- -title: Title -sidebar_label: Sidebar Label -sidebar_position: 0 # should be zero for intro pages -slug: /ibc/upgrades/intro ---- -``` - -## Best practices - -- Check the spelling and grammar, even if you have to copy and paste from an external source. -- Use simple sentences. Easy-to-read sentences mean the reader can quickly use the guidance you share. -- Try to express your thoughts in a concise and clean way. -- Either Leave a space or use a `-` between the acronyms ADR and ICS and the corresponding number (e.g. ADR 008 or ADR-008, and ICS 27 or ICS-27). -- Don't overuse `code` format when writing in plain English. -- Follow Google developer documentation [style guide](https://developers.google.com/style). -- Check the meaning of words in Microsoft's [A-Z word list and term collections](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms) (use the search input!). -- We recommend using RFC keywords in user documentation (lowercase). The RFC keywords are: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL. They are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119). -- Lint the markdown files for documentation with [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli). Run `make docs-lint` (you will need to have `markdownlint-cli` installed, so please follow the [installation instructions](https://github.com/igorshubovych/markdownlint-cli#installation)). - -### File and Directory Naming Conventions - -Inside `/docs/docs/`: - -- All files should be named in `kebab-case`. -- All files should have a two digit prefix, indicating the order in which they should be read and displayed in their respective categories. For example, `01-overview.md` should be read before `02-integration.md`. If this order changes, the prefix should be updated. Note that the ordering is enforced by the frontmatter and not the file name. -- **All files that end in `.template.md` will be ignored by the build process.** -- The prefix `00-` is reserved for root links of categories (if a category has a root link this should be defined in `_category_.json`). For example, see [`docs/01-ibc/05-upgrades/00-intro.md`](./docs/01-ibc/05-upgrades/00-intro.md) and [`docs/01-ibc/05-upgrades/_category_.json`](./docs/01-ibc/05-upgrades/_category_.json). -- All category directories should be named in `kebab-case`. -- All category directories must have a `_category_.json` file. -- All category directories should have a two digit prefix (except for the root `./docs` category), indicating the order in which they should be read and displayed in their respective categories. For example, contents of `./docs/01-ibc/03-apps/` should be read before `./docs/01-ibc/07-relayer.md`. If this order changes, the prefix should be updated. Note that the ordering is enforced by the frontmatter of the markdown files and `_category_.json` files, not the file name. -- The images for each documentation should be kept in the same directory as the markdown file that uses them. This will likely require creating a new directory for each new category. The goal of this is to make versioning easier, discourage repeated use of the image, and make it easier to find images. - -### Code Blocks - -Code blocks in docusaurus are super-powered, read more about them [here](https://docusaurus.io/docs/markdown-features/code-blocks). Three most important features for us are: - -1. We can add a `title` to the code block, which will be displayed above the code block. (This should be used to display the file path of the code block.) -2. We can add a `reference` tag to the code block, which will reference github to create the code block. **You should always use hyperlinks in reference codeblocks.** Here is what a typical code block should look like: - -````ignore -```go reference title="modules/apps/transfer/keeper/keeper.go" -https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/transfer/keeper/keeper.go#L19-L31 -``` -```` - -3. We can highlight lines in the code block by adding `// highlight-next-line` before the line we want to highlight. For example, we should use this to highlight diffs. Here is an example: - -````ignore -```go -import ( - ... - // highlight-next-line -+ ibctm "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint" - ... -) -``` -```` - -### Links - -In docusaurus, there are three ways to link to other pages: - -1. File Paths (relative or absolute) -2. URLs (relative or absolute) -3. Hyperlinks - -In this section, we will discuss when to use each. - -#### Multi-Documentation Linking - -Technically, there are four docs being maintained in this repo: - -1. Found in `docs/docs/` (this is the one displayed on the website in the "Documentation" tab) -2. Found in `docs/architecture/` (this is the one displayed on the website in the "Architecture Decision Records" tab) -3. Found in `docs/events/` (depreciated, this is not displayed on the website, but is hosted under `/events/` url) -4. Found in `docs/params/` (depreciated, this is not displayed on the website, but is hosted under `/params/` url) - -When referencing a markdown file, you should use relative file paths if they are in the same docs directory from above. For example, if you are in `docs/docs/01-ibc` and want to link to `docs/docs/02-apps/01-transfer/01-overview.md`, you should use the relative link `../02-apps/01-transfer/01-overview.md`. - -If the file you are referencing is in a different docs directory, you should use a absolute URL. For example, if you are in `docs/docs/01-ibc` and want to link to `docs/architecture/adr-001-coin-source-tracing.md`, you should use the absolute URL (not absolute file path), in this case `/architecture/adr-001-coin-source-tracing`. You can find the absolute URL by looking at the slug in the frontmatter of the markdown file you want to link to. If the frontmatter slug is not set (such as in `docs/architecture/adr-001-coin-source-tracing.md`), you should use the url that docusaurus generates for it. You can find this by looking at the url of the page in the browser. - -Note that when referencing any file outside of the parent `docs/` directory, you should always use a hyperlink. - -#### Static Assets - -Static assets are the non-code files that are directly copied to the build output. They include **images**, stylesheets, favicons, fonts, etc. - -By default, you are suggested to put these assets in the `static/` directory. Every file you put into that directory will be copied into the root of the generated build folder with the directory hierarchy preserved. E.g. if you add a file named `sun.jpg` to the static folder, it will be copied to `build/sun.jpg`. - -These assets should be referenced using absolute URLs. For example, if you have an image in `static/img/cosmos-logo-bw.png`, you should reference it using `/img/cosmos-logo-bw.png`. - -#### Raw Assets - -If you want to link a raw file, you should link to it using `@site` + its base path. For example, if you want to link to the raw markdown file `/architecture/adr.template.md`, you should use the absolute URL `@site/architecture/adr.template.md`. - -### Technical writing course - -Google provides a free [course](https://developers.google.com/tech-writing/overview) for technical writing. - -## Versioning - -Versioning only applies to documentation and not the ADRs found in the `./architecture/` directory. - -### Terminology - -- Current version: The version placed in the `.docs/` folder. This version is the one that is displayed on the website by default, referred to as next. -- Latest version: This version is defined in `./docusaurus.config.js` file under the `lastVersion` key. - -### Overview - -A typical versioned doc site looks like below: - -```ignore -docs/ -├── sidebars.json # sidebar for the current docs version -├── docs/ # docs directory for the current docs version -│ ├── 01-foo/ -│ │ └── 01-bar.md # https://mysite.com/docs/next/01-foo/01-bar -│ └── 00-intro.md # https://mysite.com/docs/next/00-intro -├── versions.json # file to indicate what versions are available -├── versioned_docs/ -│ ├── version-v1.1.0/ -│ │ ├── 01-foo/ -│ │ │ └── 01-bar.md # https://mysite.com/docs/01-foo/01-bar -│ │ └── 00-intro.md -│ └── version-v1.0.0/ -│ ├── 01-foo/ -│ │ └── 01-bar.md # https://mysite.com/docs/v1.0.0/01-foo/01-bar -│ └── 00-intro.md -├── versioned_sidebars/ -│ ├── version-v1.1.0-sidebars.json -│ └── version-v1.0.0-sidebars.json -├── docusaurus.config.js -└── package.json -``` - -The `./versions.json` file is a list of version names, ordered from newest to oldest. - -### Tagging a new version - -It is possible to tag the current version of the docs as a new version. This will create the appropriate files in `./versioned_docs/` and `./versioned_sidebars/` directories, and modify the `./versions.json` file. To do this, run the following command: - -```bash -npm run docusaurus docs:version v7.1.0 -``` - -### Adding a new version - -To add a new version: - -1. Create a new directory in `./versioned_docs/` called `version-vX.Y.Z` where `X.Y.Z` is the version number. This directory should contain the markdown files for the new version. -2. Create a new file in `./versioned_sidebars/` called `version-vX.Y.Z-sidebars.json`. This file should contain the sidebar for the new version. -3. Add the version to the `./versions.json` file. The list should be ordered from newest to oldest. -4. If needed, make any configuration changes in `./docusaurus.config.js`. For example, updating the `lastVersion` key in `./docusaurus.config.js` to the latest version. - -### Updating an existing version - -You can update multiple docs versions at the same time because each directory in `./versioned_docs/` represents specific routes when published. Make changes by editing the markdown files in the appropriate version directory. - -### Deleting a version - -When a version is no longer supported, you can delete it by removing it from `versions.json` and deleting the corresponding files in `./versioned_docs/` and `./versioned_sidebars/`. diff --git a/docs/architecture/README.md b/docs/architecture/README.md deleted file mode 100644 index cae7778356f..00000000000 --- a/docs/architecture/README.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Architecture Decision Records (ADR) - -This is a location to record all high-level architecture decisions in the ibc-go project. - -You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). - -An ADR should provide: - -- Context on the relevant goals and the current state -- Proposed changes to achieve the goals -- Summary of pros and cons -- References -- Changelog - -Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and -justification for a change in architecture, or for the architecture of something -new. The spec is much more compressed and streamlined summary of everything as -it is or should be. - -If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. - -Note the context/background should be written in the present tense. - -To suggest an ADR, please make use of the [ADR template](@site/architecture/adr.template.md) provided. - -## Table of Contents - -| ADR \# | Description | Status | -| ------ | ----------- | ------ | -| [001](./adr-001-coin-source-tracing.md) | ICS-20 coin denomination format | Accepted, Implemented | -| [002](./adr-002-go-module-versioning.md) | Go module versioning | Accepted | -| [003](./adr-003-ics27-acknowledgement.md) | ICS27 acknowledgement format | Accepted | -| [004](./adr-004-ics29-lock-fee-module.md) | ICS29 module locking upon escrow out of balance | Accepted | -| [005](./adr-005-consensus-height-events.md) | `UpdateClient` events - `ClientState` consensus heights | Accepted | -| [006](./adr-006-02-client-refactor.md) | ICS02 client refactor | Accepted | -| [007](./adr-007-solomachine-signbytes.md) | ICS06 Solo machine sign bytes | -| [008](./adr-008-app-caller-cbs.md) | Callback to IBC ACtors | Accepted | -| [009](./adr-009-v6-ics27-msgserver.md) | ICS27 message server addition | Accepted | -| [010](./adr-010-light-clients-as-sdk-modules.md) | IBC light clients as SDK modules | Accepted | -| [011](./adr-011-transfer-total-escrow-state-entry.md) | ICS20 state entry for total amount of tokens in escrow | Accepted | -| [015](./adr-015-ibc-packet-receiver.md) | IBC Packet Routing | Accepted | -| [025](./adr-025-ibc-passive-channels.md) | IBC passive channels | Deprecated | -| [026](./adr-026-ibc-client-recovery-mechanisms.md) | IBC client recovery mechansisms | Accepted | -| [027](./adr-027-ibc-wasm.md) | Wasm based light clients | Accepted | diff --git a/docs/architecture/adr-001-coin-source-tracing.md b/docs/architecture/adr-001-coin-source-tracing.md deleted file mode 100644 index 7fb0999c290..00000000000 --- a/docs/architecture/adr-001-coin-source-tracing.md +++ /dev/null @@ -1,375 +0,0 @@ -# ADR 001: Coin Source Tracing - -## Changelog - -- 2020-07-09: Initial Draft -- 2020-08-11: Implementation changes - -## Status - -Accepted, Implemented - -## Context - -The specification for IBC cross-chain fungible token transfers -([ICS20](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer)), needs to -be aware of the origin of any token denomination in order to relay a `Packet` which contains the sender -and recipient addressed in the -[`FungibleTokenPacketData`](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures). - -The Packet relay sending works based in 2 cases (per -[specification](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#packet-relay) and [Colin Axnér](https://github.com/colin-axner)'s description): - -1. Sender chain is acting as the source zone. The coins are transferred -to an escrow address (i.e locked) on the sender chain and then transferred -to the receiving chain through IBC TAO logic. It is expected that the -receiving chain will mint vouchers to the receiving address. - -2. Sender chain is acting as the sink zone. The coins (vouchers) are burned -on the sender chain and then transferred to the receiving chain though IBC -TAO logic. It is expected that the receiving chain, which had previously -sent the original denomination, will unescrow the fungible token and send -it to the receiving address. - -Another way of thinking of source and sink zones is through the token's -timeline. 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. - -### Example - -Assume the following channel connections exist and that all channels use the port ID `transfer`: - -- chain `A` has channels with chain `B` and chain `C` with the IDs `channelToB` and `channelToC`, respectively -- chain `B` has channels with chain `A` and chain `C` with the IDs `channelToA` and `channelToC`, respectively -- chain `C` has channels with chain `A` and chain `B` with the IDs `channelToA` and `channelToB`, respectively - -These steps of transfer between chains occur in the following order: `A -> B -> C -> A -> C`. In particular: - -1. `A -> B`: sender chain is source zone. `A` sends packet with `denom` (escrowed on `A`), `B` receives `denom` and mints and sends voucher `transfer/channelToA/denom` to recipient. -2. `B -> C`: sender chain is source zone. `B` sends packet with `transfer/channelToA/denom` (escrowed on `B`), `C` receives `transfer/channelToA/denom` and mints and sends voucher `transfer/channelToB/transfer/channelToA/denom` to recipient. -3. `C -> A`: sender chain is source zone. `C` sends packet with `transfer/channelToB/transfer/channelToA/denom` (escrowed on `C`), `A` receives `transfer/channelToB/transfer/channelToA/denom` and mints and sends voucher `transfer/channelToC/transfer/channelToB/transfer/channelToA/denom` to recipient. -4. `A -> C`: sender chain is sink zone. `A` sends packet with `transfer/channelToC/transfer/channelToB/transfer/channelToA/denom` (burned on `A`), `C` receives `transfer/channelToC/transfer/channelToB/transfer/channelToA/denom`, and unescrows and sends `transfer/channelToB/transfer/channelToA/denom` to recipient. - -The token has a final denomination on chain `C` of `transfer/channelToB/transfer/channelToA/denom`, where `transfer/channelToB/transfer/channelToA` is the trace information. - -In this context, upon a receive of a cross-chain fungible token transfer, if the sender chain is the source of the token, the protocol prefixes the denomination with the port and channel identifiers in the following format: - -```typescript -prefix + denom = {destPortN}/{destChannelN}/.../{destPort0}/{destChannel0}/denom -``` - -Example: transferring `100 uatom` from port `HubPort` and channel `HubChannel` on the Hub to -Ethermint's port `EthermintPort` and channel `EthermintChannel` results in `100 -EthermintPort/EthermintChannel/uatom`, where `EthermintPort/EthermintChannel/uatom` is the new -denomination on the receiving chain. - -In the case those tokens are transferred back to the Hub (i.e the **source** chain), the prefix is -trimmed and the token denomination updated to the original one. - -### Problem - -The problem of adding additional information to the coin denomination is twofold: - -1. The ever increasing length if tokens are transferred to zones other than the source: - -If a token is transferred `n` times via IBC to a sink chain, the token denom will contain `n` pairs -of prefixes, as shown on the format example above. This poses a problem because, while port and -channel identifiers have a maximum length of 64 each, the SDK `Coin` type only accepts denoms up to -64 characters. Thus, a single cross-chain token, which again, is composed by the port and channels -identifiers plus the base denomination, can exceed the length validation for the SDK `Coins`. - -This can result in undesired behaviours such as tokens not being able to be transferred to multiple -sink chains if the denomination exceeds the length or unexpected `panics` due to denomination -validation failing on the receiving chain. - -2. The existence of special characters and uppercase letters on the denomination: - -In the SDK every time a `Coin` is initialized through the constructor function `NewCoin`, a validation -of a coin's denom is performed according to a -[Regex](https://github.com/cosmos/cosmos-sdk/blob/a940214a4923a3bf9a9161cd14bd3072299cd0c9/types/coin.go#L583), -where only lowercase alphanumeric characters are accepted. While this is desirable for native denominations -to keep a clean UX, it presents a challenge for IBC as ports and channels might be randomly -generated with special and uppercase characters as per the [ICS 024 - Host -Requirements](https://github.com/cosmos/ibc/tree/master/spec/core/ics-024-host-requirements#paths-identifiers-separators) -specification. - -## Decision - -The issues outlined above, are applicable only to SDK-based chains, and thus the proposed solution -are do not require specification changes that would result in modification to other implementations -of the ICS20 spec. - -Instead of adding the identifiers on the coin denomination directly, the proposed solution hashes -the denomination prefix in order to get a consistent length for all the cross-chain fungible tokens. - -This will be used for internal storage only, and when transferred via IBC to a different chain, the -denomination specified on the packed data will be the full prefix path of the identifiers needed to -trace the token back to the originating chain, as specified on ICS20. - -The new proposed format will be the following: - -```go -ibcDenom = "ibc/" + hash(trace path + "/" + base denom) -``` - -The hash function will be a SHA256 hash of the fields of the `DenomTrace`: - -```protobuf -// DenomTrace contains the base denomination for ICS20 fungible tokens and the source tracing -// information -message DenomTrace { - // chain of port/channel identifiers used for tracing the source of the fungible token - string path = 1; - // base denomination of the relayed fungible token - string base_denom = 2; -} -``` - -The `IBCDenom` function constructs the `Coin` denomination used when creating the ICS20 fungible token packet data: - -```go -// Hash returns the hex bytes of the SHA256 hash of the DenomTrace fields using the following formula: -// -// hash = sha256(tracePath + "/" + baseDenom) -func (dt DenomTrace) Hash() tmbytes.HexBytes { - return tmhash.Sum(dt.Path + "/" + dt.BaseDenom) -} - -// IBCDenom a coin denomination for an ICS20 fungible token in the format 'ibc/{hash(tracePath + baseDenom)}'. -// If the trace is empty, it will return the base denomination. -func (dt DenomTrace) IBCDenom() string { - if dt.Path != "" { - return fmt.Sprintf("ibc/%s", dt.Hash()) - } - return dt.BaseDenom -} -``` - -### `x/ibc-transfer` Changes - -In order to retrieve the trace information from an IBC denomination, a lookup table needs to be -added to the `ibc-transfer` module. These values need to also be persisted between upgrades, meaning -that a new `[]DenomTrace` `GenesisState` field state needs to be added to the module: - -```go -// GetDenomTrace retrieves the full identifiers trace and base denomination from the store. -func (k Keeper) GetDenomTrace(ctx Context, denomTraceHash []byte) (DenomTrace, bool) { - store := ctx.KVStore(k.storeKey) - bz := store.Get(types.KeyDenomTrace(traceHash)) - if bz == nil { - return &DenomTrace, false - } - - var denomTrace DenomTrace - k.cdc.MustUnmarshalBinaryBare(bz, &denomTrace) - return denomTrace, true -} - -// HasDenomTrace checks if a the key with the given trace hash exists on the store. -func (k Keeper) HasDenomTrace(ctx Context, denomTraceHash []byte) bool { - store := ctx.KVStore(k.storeKey) - return store.Has(types.KeyTrace(denomTraceHash)) -} - -// SetDenomTrace sets a new {trace hash -> trace} pair to the store. -func (k Keeper) SetDenomTrace(ctx Context, denomTrace DenomTrace) { - store := ctx.KVStore(k.storeKey) - bz := k.cdc.MustMarshalBinaryBare(&denomTrace) - store.Set(types.KeyTrace(denomTrace.Hash()), bz) -} -``` - -The `MsgTransfer` will validate that the `Coin` denomination from the `Token` field contains a valid -hash, if the trace info is provided, or that the base denominations matches: - -```go -func (msg MsgTransfer) ValidateBasic() error { - // ... - return ValidateIBCDenom(msg.Token.Denom) -} -``` - -```go -// ValidateIBCDenom validates that the given denomination is either: -// -// - A valid base denomination (eg: 'uatom') -// - A valid fungible token representation (i.e 'ibc/{hash}') per ADR 001 https://github.com/cosmos/ibc-go/blob/main/docs/architecture/adr-001-coin-source-tracing.md -func ValidateIBCDenom(denom string) error { - denomSplit := strings.SplitN(denom, "/", 2) - - switch { - case strings.TrimSpace(denom) == "", - len(denomSplit) == 1 && denomSplit[0] == "ibc", - len(denomSplit) == 2 && (denomSplit[0] != "ibc" || strings.TrimSpace(denomSplit[1]) == ""): - return sdkerrors.Wrapf(ErrInvalidDenomForTransfer, "denomination should be prefixed with the format 'ibc/{hash(trace + \"/\" + %s)}'", denom) - - case denomSplit[0] == denom && strings.TrimSpace(denom) != "": - return sdk.ValidateDenom(denom) - } - - if _, err := ParseHexHash(denomSplit[1]); err != nil { - return Wrapf(err, "invalid denom trace hash %s", denomSplit[1]) - } - - return nil -} -``` - -The denomination trace info only needs to be updated when token is received: - -- Receiver is **source** chain: The receiver created the token and must have the trace lookup already stored (if necessary *ie* native token case wouldn't need a lookup). -- Receiver is **not source** chain: Store the received info. For example, during step 1, when chain `B` receives `transfer/channelToA/denom`. - -```go -// SendTransfer -// ... - - fullDenomPath := token.Denom - -// deconstruct the token denomination into the denomination trace info -// to determine if the sender is the source chain -if strings.HasPrefix(token.Denom, "ibc/") { - fullDenomPath, err = k.DenomPathFromHash(ctx, token.Denom) - if err != nil { - return err - } -} - -if types.SenderChainIsSource(sourcePort, sourceChannel, fullDenomPath) { -//... -``` - -```go -// DenomPathFromHash returns the full denomination path prefix from an ibc denom with a hash -// component. -func (k Keeper) DenomPathFromHash(ctx sdk.Context, denom string) (string, error) { - hexHash := denom[4:] - hash, err := ParseHexHash(hexHash) - if err != nil { - return "", Wrap(ErrInvalidDenomForTransfer, err.Error()) - } - - denomTrace, found := k.GetDenomTrace(ctx, hash) - if !found { - return "", Wrap(ErrTraceNotFound, hexHash) - } - - fullDenomPath := denomTrace.GetFullDenomPath() - return fullDenomPath, nil -} -``` - -```go -// OnRecvPacket -// ... - -// This is the prefix that would have been prefixed to the denomination -// on sender chain IF and only if the token originally came from the -// receiving chain. -// -// NOTE: We use SourcePort and SourceChannel here, because the counterparty -// chain would have prefixed with DestPort and DestChannel when originally -// receiving this coin as seen in the "sender chain is the source" condition. -if ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) { - // sender chain is not the source, unescrow tokens - - // remove prefix added by sender chain - voucherPrefix := types.GetDenomPrefix(packet.GetSourcePort(), packet.GetSourceChannel()) - unprefixedDenom := data.Denom[len(voucherPrefix):] - token := sdk.NewCoin(unprefixedDenom, sdk.NewIntFromUint64(data.Amount)) - - // unescrow tokens - escrowAddress := types.GetEscrowAddress(packet.GetDestPort(), packet.GetDestChannel()) - return k.bankKeeper.SendCoins(ctx, escrowAddress, receiver, sdk.NewCoins(token)) -} - -// sender chain is the source, mint vouchers - -// since SendPacket did not prefix the denomination, we must prefix denomination here -sourcePrefix := types.GetDenomPrefix(packet.GetDestPort(), packet.GetDestChannel()) -// NOTE: sourcePrefix contains the trailing "/" -prefixedDenom := sourcePrefix + data.Denom - -// construct the denomination trace from the full raw denomination -denomTrace := types.ParseDenomTrace(prefixedDenom) - -// set the value to the lookup table if not stored already -traceHash := denomTrace.Hash() -if !k.HasDenomTrace(ctx, traceHash) { - k.SetDenomTrace(ctx, traceHash, denomTrace) -} - -voucherDenom := denomTrace.IBCDenom() -voucher := sdk.NewCoin(voucherDenom, sdk.NewIntFromUint64(data.Amount)) - -// mint new tokens if the source of the transfer is the same chain -if err := k.bankKeeper.MintCoins( - ctx, types.ModuleName, sdk.NewCoins(voucher), -); err != nil { - return err -} - -// send to receiver -return k.bankKeeper.SendCoinsFromModuleToAccount( - ctx, types.ModuleName, receiver, sdk.NewCoins(voucher), -) -``` - -```go -func NewDenomTraceFromRawDenom(denom string) DenomTrace{ - denomSplit := strings.Split(denom, "/") - trace := "" - if len(denomSplit) > 1 { - trace = strings.Join(denomSplit[:len(denomSplit)-1], "/") - } - return DenomTrace{ - BaseDenom: denomSplit[len(denomSplit)-1], - Trace: trace, - } -} -``` - -One final remark is that the `FungibleTokenPacketData` will remain the same, i.e with the prefixed full denomination, since the receiving chain may not be an SDK-based chain. - -### Coin Changes - -The coin denomination validation will need to be updated to reflect these changes. In particular, the denomination validation -function will now: - -- Accept slash separators (`"/"`) and uppercase characters (due to the `HexBytes` format) -- Bump the maximum character length to 128, as the hex representation used by Tendermint's - `HexBytes` type contains 64 characters. - -Additional validation logic, such as verifying the length of the hash, the may be added to the bank module in the future if the [custom base denomination validation](https://github.com/cosmos/cosmos-sdk/pull/6755) is integrated into the SDK. - -### Positive - -- Clearer separation of the source tracing behaviour of the token (transfer prefix) from the original - `Coin` denomination -- Consistent validation of `Coin` fields (i.e no special characters, fixed max length) -- Cleaner `Coin` and standard denominations for IBC -- No additional fields to SDK `Coin` - -### Negative - -- Store each set of tracing denomination identifiers on the `ibc-transfer` module store -- Clients will have to fetch the base denomination every time they receive a new relayed fungible token over IBC. This can be mitigated using a map/cache for already seen hashes on the client side. Other forms of mitigation, would be opening a websocket connection subscribe to incoming events. - -### Neutral - -- Slight difference with the ICS20 spec -- Additional validation logic for IBC coins on the `ibc-transfer` module -- Additional genesis fields -- Slightly increases the gas usage on cross-chain transfers due to access to the store. This should - be inter-block cached if transfers are frequent. - -## References - -- [ICS 20 - Fungible token transfer](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer) -- [Custom Coin Denomination validation](https://github.com/cosmos/cosmos-sdk/pull/6755) diff --git a/docs/architecture/adr-002-go-module-versioning.md b/docs/architecture/adr-002-go-module-versioning.md deleted file mode 100644 index 62e4a47c835..00000000000 --- a/docs/architecture/adr-002-go-module-versioning.md +++ /dev/null @@ -1,112 +0,0 @@ -# ADR 002: Go module versioning - -## Changelog - -- 05/01/2022: initial draft - -## Status - -Accepted - -## Context - -The IBC module was originally developed in the Cosmos SDK and released during with the Stargate release series (v0.42). -It was subsequently migrated to its own repository, ibc-go. -The first official release on ibc-go was v1.0.0. -v1.0.0 was decided to be used instead of v0.1.0 primarily for the following reasons: - -- Maintaining compatibility with the IBC specification v1 requires stronger support/guarantees. -- Using the major, minor, and patch numbers allows for easier communication of what breaking changes are included in a release. -- The IBC module is being used by numerous high value projects which require stability. - -### Problems - -#### Go module version must be incremented - -When a Go module is released under v1.0.0, all following releases must follow Go semantic versioning. -Thus when the go API is broken, the Go module major version **must** be incremented. -For example, changing the go package version from `v2` to `v3` bumps the import from `github.com/cosmos/ibc-go/v2` to `github.com/cosmos/ibc-go/v3`. - -If the Go module version is not incremented then attempting to go get a module @v3.0.0 without the suffix results in: -`invalid version: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v3` - -Version validation was added in Go 1.13. This means is that in order to release a v3.0.0 git tag without a /v3 suffix on the module definition, the tag must explicitly **not** contain a go.mod file. -Not including a go.mod in our release is not a viable option. - -#### Attempting to import multiple go module versions for ibc-go - -Attempting to import two versions of ibc-go, such as `github.com/cosmos/ibc-go/v2` and `github.com/cosmos/ibc-go/v3`, will result in multiple issues. - -The Cosmos SDK does global registration of error and governance proposal types. -The errors and proposals used in ibc-go would need to now register their naming based on the go module version. - -The more concerning problem is that protobuf definitions will also reach a namespace collision. -ibc-go and the Cosmos SDK in general rely heavily on using extended functions for go structs generated from protobuf definitions. -This requires the go structs to be defined in the same package as the extended functions. -Thus, bumping the import versioning causes the protobuf definitions to be generated in two places (in v2 and v3). -When registering these types at compile time, the go compiler will panic. -The generated types need to be registered against the proto codec, but there exist two definitions for the same name. - -The protobuf conflict policy can be overriden via the environment variable `GOLANG_PROTOBUF_REGISTRATION_CONFLICT`, but it is possible this could lead to various runtime errors or unexpected behaviour (see [here](https://github.com/protocolbuffers/protobuf-go/blob/master/reflect/protoregistry/registry.go#L46)). -More information [here](https://developers.google.com/protocol-buffers/docs/reference/go/faq#namespace-conflict) on namespace conflicts for protobuf versioning. - -### Potential solutions - -#### Changing the protobuf definition version - -The protobuf definitions all have a type URL containing the protobuf version for this type. -Changing the protobuf version would solve the namespace collision which arise from importing multiple versions of ibc-go, but it leads to new issues. - -In the Cosmos SDK, `Any`s are unpacked and decoded using the type URL. -Changing the type URL thus is creating a distinctly different type. -The same registration on the proto codec cannot be used to unpack the new type. -For example: - -All Cosmos SDK messages are packed into `Any`s. If we incremented the protobuf version for our IBC messages, clients which submitted the v1 of our Cosmos SDK messages would now be rejected since the old type is not registered on the codec. -The clients must know to submit the v2 of these messages. This pushes the burden of versioning onto relayers and wallets. - -A more serious problem is that the `ClientState` and `ConsensusState` are packed as `Any`s. Changing the protobuf versioning of these types would break compatibility with IBC specification v1. - -#### Moving protobuf definitions to their own go module - -The protobuf definitions could be moved to their own go module which uses 0.x versioning and will never go to 1.0. -This prevents the Go module version from being incremented with breaking changes. -It also requires all extended functions to live in the same Go module, disrupting the existing code structure. - -The version that implements this change will still be incompatible with previous versions, but future versions could be imported together without namespace collisions. -For example, lets say this solution is implemented in v3. Then - -`github.com/cosmos/ibc-go/v2` cannot be imported with any other ibc-go version - -`github.com/cosmos/ibc-go/v3` cannot be imported with any previous ibc-go versions - -`github.com/cosmos/ibc-go/v4` may be imported with ibc-go versions v3+ - -`github.com/cosmos/ibc-go/v5` may be imported with ibc-go versions v3+ - -## Decision - -Supporting importing multiple versions of ibc-go requires a non-trivial amount of complexity. -It is unclear when a user of the ibc-go code would need multiple versions of ibc-go. -Until there is an overwhelming reason to support importing multiple versions of ibc-go: - -**Major releases cannot be imported simultaneously**. -Releases should focus on keeping backwards compatibility for go code clients, within reason. -Old functionality should be marked as deprecated and there should exist upgrade paths between major versions. -Deprecated functionality may be removed when no clients rely on that functionality. -How this is determined is to be decided. - -**Error and proposal type registration will not be changed between go module version increments**. -This explicitly stops external clients from trying to import two major versions (potentially risking a bug due to the instability of proto name collisions override). - -## Consequences - -This only affects clients relying directly on the go code. - -### Positive - -### Negative - -Multiple ibc-go versions cannot be imported. - -### Neutral diff --git a/docs/architecture/adr-003-ics27-acknowledgement.md b/docs/architecture/adr-003-ics27-acknowledgement.md deleted file mode 100644 index 635d5e8fc12..00000000000 --- a/docs/architecture/adr-003-ics27-acknowledgement.md +++ /dev/null @@ -1,120 +0,0 @@ -# ADR 003: ICS27 Acknowledgement Format - -## Changelog - -- January 28th, 2022: Initial Draft - -## Status - -Accepted - -## Context - -Upon receiving an IBC packet, an IBC application can optionally return an acknowledgement. -This acknowledgement will be hashed and written into state. Thus any changes to the information included in an acknowledgement are state machine breaking. - -ICS27 executes transactions on behalf of a controller chain. Information such as the message result or message error may be returned from other SDK modules outside the control of the ICS27 module. -It might be very valuable to return message execution information inside the ICS27 acknowledgement so that controller chain interchain account auth modules can act upon this information. -Only determinstic information returned from the message execution is allowed to be returned in the packet acknowledgement otherwise the network will halt due to a fork in the expected app hash. - -## Decision - -At the time of this writing, Tendermint includes the following information in the [ABCI.ResponseDeliverTx](https://github.com/tendermint/tendermint/blob/release/v0.34.13/types/results.go#L47-#L53): - -```go -// deterministicResponseDeliverTx strips non-deterministic fields from -// ResponseDeliverTx and returns another ResponseDeliverTx. -func deterministicResponseDeliverTx(response *abci.ResponseDeliverTx) *abci.ResponseDeliverTx { - return &abci.ResponseDeliverTx{ - Code: response.Code, - Data: response.Data, - GasWanted: response.GasWanted, - GasUsed: response.GasUsed, - } -} -``` - -### Successful acknowledgements - -Successful acknowledgements should return information about the transaction execution. -Given the determinstic fields in the `abci.ResponseDeliverTx`, the transaction `Data` can be used to indicate information about the transaction execution. -The `abci.ResponseDeliverTx.Data` will be set in the ICS27 packet acknowledgement upon successful transaction execution. - -The format for the `abci.ResponseDeliverTx.Data` is constructed by the SDK. - -At the time of this writing, the next major release of the SDK will change the format for constructing the transaction response data. - -#### v0.45 format - -The current version, v0.45 constructs the transaction response as follows: - -```go -proto.Marshal(&sdk.TxMsgData{ - Data: []*sdk.MsgData{msgResponses...}, -} -``` - -Where `msgResponses` is a slice of `*sdk.MsgData`. -The `MsgData.MsgType` contains the `sdk.MsgTypeURL` of the `sdk.Msg` being executed. -The `MsgData.Data` contains the proto marshaled `MsgResponse` for the associated message executed. - -#### Next major version format - -The next major version will construct the transaction response as follows: - -```go -proto.Marshal(&sdk.TxMsgData{ - MsgResponses: []*codectypes.Any{msgResponses...}, -} -``` - -Where `msgResponses` is a slice of the `MsgResponse`s packed into `Any`s. - -#### Forwards compatible approach - -A forwards compatible approach was deemed infeasible. -The `handler` provided by the `MsgServiceRouter` will only include the `*sdk.Result` and an error (if one occurred). -In v0.45 of the SDK, the `*sdk.Result.Data` will contain the MsgResponse marshaled data. -However, the MsgResponse is not packed and marshaled as a `*codectypes.Any`, thus making it impossible from a generalized point of view to unmarshal the bytes. -If the bytes could be unmarshaled, then they could be packed into an `*codectypes.Any` in anticipation of the upcoming format. - -Intercepting the MsgResponse before it becomes marshaled requires replicating this [code](https://github.com/cosmos/cosmos-sdk/blob/dfd47f5b449f558a855da284a9a7eabbfbad435d/baseapp/msg_service_router.go#L109-#L128). -It may not even be possible to replicate the linked code. The method handler would need to be accessed somehow. - -For these reasons it is deemed infeasible to attempt a fowards compatible approach. - -ICA auth developers can interpret which format was used when constructing the transaction response by checking if the `sdk.TxMsgData.Data` field is non-empty. -If the `sdk.TxMsgData.Data` field is not empty then the format for v0.45 was used, otherwise ICA auth developers can assume the transaction response uses the newer format. - -#### Decision - -Replicate the transaction response format as provided by the current SDK verison. -When the SDK version changes, adjust the transaction response format to use the updated transaction response format. -Include the transaction response bytes in the result channel acknowledgement. - -A test has been [written](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/ibc_module_test.go#L716-#L774) to fail if the `MsgResponse` is no longer included in consensus. - -### Error acknowledgements - -As indicated above, the `abci.ResponseDeliverTx.Code` is determinstic. -Upon transaction execution errors, an error acknowledgement should be returned including the abci code. - -A test has been [written](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/types/ack_test.go#L41-#L82) to fail if the ABCI code is no longer determinstic. - -## Consequences - -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. - -### Positive - -- interchain account auth modules can act upon transaction results without requiring a query module -- transaction results align with those returned by execution of a normal SDK message. - -### Negative - -- the security assumptions of this decision rest on the inclusion of the ABCI error code and the Msg response in the ResponseDeliverTx hash created by Tendermint -- events are non-determinstic and cannot be included in the packet acknowledgement - -### Neutral - -No neutral consequences. diff --git a/docs/architecture/adr-004-ics29-lock-fee-module.md b/docs/architecture/adr-004-ics29-lock-fee-module.md deleted file mode 100644 index 5e6a0e927d8..00000000000 --- a/docs/architecture/adr-004-ics29-lock-fee-module.md +++ /dev/null @@ -1,58 +0,0 @@ -# ADR 004: Lock fee module upon escrow out of balance - -## Changelog - -- 03/03/2022: initial draft - -## Status - -Accepted - -## Context - -The fee module maintains an escrow account for all fees escrowed to incentivize packet relays. -It also tracks each packet fee escrowed separately from the escrow account. This is because the escrow account only maintains a total balance. It has no reference for which coins belonged to which packet fee. -In the presence of a severe bug, it is possible the escrow balance will become out of sync with the packet fees marked as escrowed. -The ICS29 module should be capable of elegantly handling such a scenario. - -## Decision - -We will allow for the ICS29 module to become "locked" if the escrow balance is determined to be out of sync with the packet fees marked as escrowed. -A "locked" fee module will not allow for packet escrows to occur nor will it distribute fees. All IBC callbacks will skip performing fee logic, similar to fee disabled channels. - -Manual intervention will be needed to unlock the fee module. - -### Sending side - -Special behaviour will have to be accounted for in `OnAcknowledgementPacket`. Since the counterparty will continue to send incentivized acknowledgements for fee enabled channels, the acknowledgement will still need to be unmarshalled into an incentivized acknowledgement before calling the underlying application `OnAcknowledgePacket` callback. - -When distributing fees, a cached context should be used. If the escrow account balance would become negative, the current state changes should be discarded and the fee module should be locked using the uncached context. This prevents fees from being partially distributed for a given packetID. - -### Receiving side - -`OnRecvPacket` should remain unaffected by the fee module becoming locked since escrow accounts only affect the sending side. - -## Consequences - -### Positive - -The fee module can be elegantly disabled in the presence of severe bugs. - -### Negative - -Extra logic is added to account for edge cases which are only possible in the presence of bugs. - -### Neutral - -## References - -Issues: - -- [#821](https://github.com/cosmos/ibc-go/issues/821) -- [#860](https://github.com/cosmos/ibc-go/issues/860) - -PR's: - -- [#1031](https://github.com/cosmos/ibc-go/pull/1031) -- [#1029](https://github.com/cosmos/ibc-go/pull/1029) -- [#1056](https://github.com/cosmos/ibc-go/pull/1056) diff --git a/docs/architecture/adr-005-consensus-height-events.md b/docs/architecture/adr-005-consensus-height-events.md deleted file mode 100644 index eb0527b4532..00000000000 --- a/docs/architecture/adr-005-consensus-height-events.md +++ /dev/null @@ -1,92 +0,0 @@ -# ADR 005: UpdateClient Events - ClientState Consensus Heights - -## Changelog - -- 25/04/2022: initial draft - -## Status - -Accepted - -## Context - -The `ibc-go` implementation leverages the [Cosmos-SDK's EventManager](https://github.com/cosmos/cosmos-sdk/blob/v0.45.4/docs/core/events.md#EventManager) to provide subscribers a method of reacting to application specific events. -Some IBC relayers depend on the [`consensus_height`](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/core/02-client/keeper/events.go#L33) attribute emitted as part of `UpdateClient` events in order to run `07-tendermint` misbehaviour detection by cross-checking the details of the *Header* emitted at a given consensus height against those of the *Header* from the originating chain. This includes such details as: - -- The `SignedHeader` containing the commitment root. -- The `ValidatorSet` that signed the *Header*. -- The `TrustedHeight` seen by the client at less than or equal to the height of *Header*. -- The last `TrustedValidatorSet` at the trusted height. - -Following the refactor of the `02-client` submodule and associated `ClientState` interfaces, it will now be possible for -light client implementations to perform such actions as batch updates, inserting `N` number of `ConsensusState`s into the application state tree with a single `UpdateClient` message. This flexibility is provided in `ibc-go` by the usage of the [Protobuf `Any`](https://developers.google.com/protocol-buffers/docs/proto3#any) field contained within the [`UpdateClient`](https://github.com/cosmos/ibc-go/blob/v3.0.0/proto/ibc/core/client/v1/tx.proto#L44) message. -For example, a batched client update message serialized as a Protobuf `Any` type for the `07-tendermint` lightclient implementation could be defined as follows: - -```protobuf -message BatchedHeaders { - repeated Header headers = 1; -} -``` - -To complement this flexibility, the `UpdateClient` handler will now support the submission of [client misbehaviour](https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics#misbehaviour) by consolidating the `Header` and `Misbehaviour` interfaces into a single `ClientMessage` interface type: - -```go -// ClientMessage is an interface used to update an IBC client. -// The update may be done by a single header, a batch of headers, misbehaviour, or any type which when verified produces -// a change to state of the IBC client -type ClientMessage interface { - proto.Message - - ClientType() string - ValidateBasic() error -} -``` - -To support this functionality the `GetHeight()` method has been omitted from the new `ClientMessage` interface. -Emission of standardised events from the `02-client` submodule now becomes problematic and is two-fold: - -1. The `02-client` submodule previously depended upon the `GetHeight()` method of `Header` types in order to [retrieve the updated consensus height](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/core/02-client/keeper/client.go#L90). -2. Emitting a single `consensus_height` event attribute is not sufficient in the case of a batched client update containing multiple *Headers*. - -## Decision - -The following decisions have been made in order to provide flexibility to consumers of `UpdateClient` events in a non-breaking fashion: - -1. Return a list of updated consensus heights `[]exported.Height` from the new `UpdateState` method of the `ClientState` interface. - -```go -// UpdateState updates and stores as necessary any associated information for an IBC client, such as the ClientState and corresponding ConsensusState. -// Upon successful update, a list of consensus heights is returned. It assumes the ClientMessage has already been verified. -UpdateState(sdk.Context, codec.BinaryCodec, sdk.KVStore, ClientMessage) []Height -``` - -2. Maintain the `consensus_height` event attribute emitted from the `02-client` update handler, but mark as deprecated for future removal. For example, with tendermint lightclients this will simply be `consensusHeights[0]` following a successful update using a single *Header*. - -3. Add an additional `consensus_heights` event attribute, containing a comma separated list of updated heights. This provides flexibility for emitting a single consensus height or multiple consensus heights in the example use-case of batched header updates. - -## Consequences - -### Positive - -- Subscribers of IBC core events can act upon `UpdateClient` events containing one or more consensus heights. -- Deprecation of the existing `consensus_height` attribute allows consumers to continue to process `UpdateClient` events as normal, with a path to upgrade to using the `consensus_heights` attribute moving forward. - -### Negative - -- Consumers of IBC core `UpdateClient` events are forced to make future code changes. - -### Neutral - -## References - -Discussions: - -- [#1208](https://github.com/cosmos/ibc-go/pull/1208#discussion_r839691927) - -Issues: - -- [#594](https://github.com/cosmos/ibc-go/issues/594) - -PRs: - -- [#1285](https://github.com/cosmos/ibc-go/pull/1285) diff --git a/docs/architecture/adr-006-02-client-refactor.md b/docs/architecture/adr-006-02-client-refactor.md deleted file mode 100644 index 33dd9977959..00000000000 --- a/docs/architecture/adr-006-02-client-refactor.md +++ /dev/null @@ -1,203 +0,0 @@ -# ADR 006: ICS-02 client refactor - -## Changelog - -- 2022-08-01: Initial Draft - -## Status - -Accepted and applied in v7 of ibc-go - -## Context - -During the initial development of the 02-client submodule, each light client supported (06-solomachine, 07-tendermint, 09-localhost) was referenced through hardcoding. -Here is an example of the [code](https://github.com/cosmos/cosmos-sdk/commit/b93300288e3a04faef9c0774b75c13b24450ba1c#diff-c5f6b956947375f28d611f18d0e670cf28f8f305300a89c5a9b239b0eeec5064R83) that existed in the 02-client submodule: - -```go -func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.Header) (exported.ClientState, error) { - ... - - switch clientType { - case exported.Tendermint: - clientState, consensusState, err = tendermint.CheckValidityAndUpdateState( - clientState, header, ctx.BlockTime(), - ) - case exported.Localhost: - // override client state and update the block height - clientState = localhosttypes.NewClientState( - ctx.ChainID(), // use the chain ID from context since the client is from the running chain (i.e self). - ctx.BlockHeight(), - ) - default: - err = types.ErrInvalidClientType - } -``` - -To add additional light clients, code would need to be added directly to the 02-client submodule. -Evidently, this would likely become problematic as IBC scaled to many chains using consensus mechanisms beyond the initial supported light clients. -Issue [#6064](https://github.com/cosmos/cosmos-sdk/issues/6064) on the SDK addressed this problem by creating a more modular 02-client submodule. -The 02-client submodule would now interact with each light client via an interface. -While, this change was positive in development, increasing the flexibility and adoptability of IBC, it also opened the door to new problems. - -The difficulty of generalizing light clients became apparent once changes to those light clients were required. -Each light client represents a different consensus algorithm which may contain a host of complexity and nuances. -Here are some examples of issues which arose for light clients that are not applicable to all the light clients supported (06-solomachine, 07-tendermint, 09-localhost): - -### Tendermint non-zero height upgrades - -Before the launch of IBC, it was determined that the golang implementation of [tendermint](https://github.com/tendermint/tendermint) would not be capable of supporting non-zero height upgrades. -This implies that any upgrade would require changing of the chain ID and resetting the height to 0. -A chain is uniquely identified by its chain-id and validator set. -Two different chain ID's can be viewed as different chains and thus a normal update produced by a validator set cannot change the chain ID. -To work around the lack of support for non-zero height upgrades, an abstract height type was created along with an upgrade mechanism. -This type would indicate the revision number (the number of times the chain ID has been changed) and revision height (the current height of the blockchain). - -Refs: - -- Issue [#439](https://github.com/cosmos/ibc/issues/439) on IBC specification repository. -- Specification changes in [#447](https://github.com/cosmos/ibc/pull/447) -- Implementation changes for the abstract height type, [SDK#7211](https://github.com/cosmos/cosmos-sdk/pull/7211) - -### Tendermint requires misbehaviour detection during updates - -The initial release of the IBC module and the 07-tendermint light client implementation did not support misbehaviour detection during update nor did it prevent overwriting of previous updates. -Despite the fact that we designed the `ClientState` interface and developed the 07-tendermint client, we failed to detect even a duplicate update that constituted misbehaviour and thus should freeze the client. -This was fixed in PR [#141](https://github.com/cosmos/ibc-go/pull/141) which required light client implementations to be aware that they must handle duplicate updates and misbehaviour detection. -Misbehaviour detection during updates is not applicable to the solomachine nor localhost. -It is also not obvious that `CheckHeaderAndUpdateState` should be performing this functionality. - -### Localhost requires access to the entire client store - -The localhost has been broken since the initial version of the IBC module. -The localhost tried to be developed underneath the 02-client interfaces without special exception, but this proved to be impossible. -The issues were outlined in [#27](https://github.com/cosmos/ibc-go/issues/27) and further discussed in the attempted ADR in [#75](https://github.com/cosmos/ibc-go/pull/75). -Unlike all other clients, the localhost requires access to the entire IBC store and not just the prefixed client store. - -### Solomachine doesn't set consensus states - -The 06-solomachine does not set the consensus states within the prefixed client store. -It has a single consensus state that is stored within the client state. -This causes setting of the consensus state at the 02-client level to use unnecessary storage. -It also causes timeouts to fail with solo machines. -Previously, the timeout logic within IBC would obtain the consensus state at the height a timeout is being proved. -This is problematic for the solo machine as no consensus state is set. -See issue [#562](https://github.com/cosmos/ibc/issues/562) on the IBC specification repo. - -### New clients may want to do batch updates - -New light clients may not function in a similar fashion to 06-solomachine and 07-tendermint. -They may require setting many consensus states in a single update. -As @seunlanlege [states](https://github.com/cosmos/ibc-go/issues/284#issuecomment-1005583679): - -> I'm in support of these changes for 2 reasons: -> -> - This would allow light clients handle batch header updates in CheckHeaderAndUpdateState, for the special case of 11-beefy proving the finality for a batch of headers is much more space and time efficient than the space/time complexity of proving each individual headers in that batch, combined. -> -> - This also allows for a single light client instance of 11-beefy be used to prove finality for every parachain connected to the relay chain (Polkadot/Kusama). We achieve this by setting the appropriate ConsensusState for individual parachain headers in CheckHeaderAndUpdateState - -## Decision - -### Require light clients to set client and consensus states - -The IBC specification states: - -> If the provided header was valid, the client MUST also mutate internal state to store now-finalised consensus roots and update any necessary signature authority tracking (e.g. changes to the validator set) for future calls to the validity predicate. - -The initial version of the IBC go SDK based module did not fulfill this requirement. -Instead, the 02-client submodule required each light client to return the client and consensus state which should be updated in the client prefixed store. -This decision lead to the issues "Solomachine doesn't set consensus states" and "New clients may want to do batch updates". - -Each light client should be required to set its own client and consensus states on any update necessary. -The go implementation should be changed to match the specification requirements. -This will allow more flexibility for light clients to manage their own internal storage and do batch updates. - -### Merge `Header`/`Misbehaviour` interface and rename to `ClientMessage` - -Remove `GetHeight()` from the header interface (as light clients now set the client/consensus states). -This results in the `Header`/`Misbehaviour` interfaces being the same. -To reduce complexity of the codebase, the `Header`/`Misbehaviour` interfaces should be merged into `ClientMessage`. -`ClientMessage` will provide the client with some authenticated information which may result in regular updates, misbehaviour detection, batch updates, or other custom functionality a light client requires. - -### Split `CheckHeaderAndUpdateState` into 4 functions - -See [#668](https://github.com/cosmos/ibc-go/issues/668). - -Split `CheckHeaderAndUpdateState` into 4 functions: - -- `VerifyClientMessage` -- `CheckForMisbehaviour` -- `UpdateStateOnMisbehaviour` -- `UpdateState` - -`VerifyClientMessage` checks the that the structure of a `ClientMessage` is correct and that all authentication data provided is valid. - -`CheckForMisbehaviour` checks to see if a `ClientMessage` is evidence of misbehaviour. - -`UpdateStateOnMisbehaviour` freezes the client and updates its state accordingly. - -`UpdateState` performs a regular update or a no-op on duplicate updates. - -The code roughly looks like: - -```go -func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.Header) error { - ... - - if err := clientState.VerifyClientMessage(clientMessage); err != nil { - return err - } - - foundMisbehaviour := clientState.CheckForMisbehaviour(clientMessage) - if foundMisbehaviour { - clientState.UpdateStateOnMisbehaviour(header) - // emit misbehaviour event - return - } - - clientState.UpdateState(clientMessage) // expects no-op on duplicate header - // emit update event - return -} -``` - -### Add `GetTimestampAtHeight` to the client state interface - -By adding `GetTimestampAtHeight` to the ClientState interface, we allow light clients which do non-traditional consensus state/timestamp storage to process timeouts correctly. -This fixes the issues outlined for the solo machine client. - -### Add generic verification functions - -As the complexity and the functionality grows, new verification functions will be required for additional paths. -This was explained in [#684](https://github.com/cosmos/ibc/issues/684) on the specification repo. -These generic verification functions would be immediately useful for the new paths added in connection/channel upgradability as well as for custom paths defined by IBC applications such as Interchain Queries. -The old verification functions (`VerifyClientState`, `VerifyConnection`, etc) should be removed in favor of the generic verification functions. - -## Consequences - -### Positive - -- Flexibility for light client implementations -- Well defined interfaces and their required functionality -- Generic verification functions -- Applies changes necessary for future client/connection/channel upgrabability features -- Timeout processing for solo machines -- Reduced code complexity - -### Negative - -- The refactor touches on sensitive areas of the ibc-go codebase -- Changing of established naming (`Header`/`Misbehaviour` to `ClientMessage`) - -### Neutral - -No notable consequences - -## References - -Issues: - -- [#284](https://github.com/cosmos/ibc-go/issues/284) - -PRs: - -- [#1871](https://github.com/cosmos/ibc-go/pull/1871) diff --git a/docs/architecture/adr-007-solomachine-signbytes.md b/docs/architecture/adr-007-solomachine-signbytes.md deleted file mode 100644 index 7407867e44e..00000000000 --- a/docs/architecture/adr-007-solomachine-signbytes.md +++ /dev/null @@ -1,52 +0,0 @@ -# ADR 007: Solo machine sign bytes - -## Changelog - -- 2022-08-02: Initial draft - -## Status - -Accepted, applied in v7 - -## Context - -The `06-solomachine` implemention up until ibc-go v7 constructed sign bytes using a `DataType` which described what type of data was being signed. -This design decision arose from a misunderstanding of the security implications. -It was noted that the proto definitions do not [provide uniqueness](https://github.com/cosmos/cosmos-sdk/pull/7237#discussion_r484264573) which is a necessity for ensuring two signatures over different data types can never be the same. -What was missed is that the uniqueness is not provided by the proto definition, but by the usage of the proto definition. -The path provided by core IBC will be unique and is already encoded into the signature data. -Thus two different paths with the same data values will encode differently which provides signature uniqueness. - -Furthermore, the current construction does not support the proposed changes in the spec repo to support [Generic Verification functions](https://github.com/cosmos/ibc/issues/684). -This is because in order to verify a new path, a new `DataType` must be added for that path. - -## Decision - -Remove `DataType` and change the `DataType` in the `SignBytes` and `SignatureAndData` to be `Path`. -The new `Path` field should be bytes. -Remove all `...Data` proto definitions except for `HeaderData` -These `...Data` definitions were created previously for each `DataType`. -The proto version of the solo machine proto definitions should be bumped to `v3`. - -This removes an extra layer of complexity from signature construction and allows for support of generic verification. - -## Consequences - -### Positive - -- Simplification of solo machine signature construction -- Support for generic verification - -### Negative - -- Breaks existing signature construction in a non-backwards compatible way -- Solo machines must update to handle the new format -- Migration required for solo machine client and consensus states - -### Neutral - -No notable consequences - -## References - -- [#1141](https://github.com/cosmos/ibc-go/issues/1141) diff --git a/docs/architecture/adr-008-app-caller-cbs.md b/docs/architecture/adr-008-app-caller-cbs.md deleted file mode 100644 index 3304cab8971..00000000000 --- a/docs/architecture/adr-008-app-caller-cbs.md +++ /dev/null @@ -1,544 +0,0 @@ -# ADR 008: Callback to IBC Actors - -## Changelog - -- 2022-08-10: Initial Draft -- 2023-03-22: Merged -- 2023-09-13: Updated with decisions made in implementation - -## Status - -Accepted, middleware implemented - -## Context - -IBC was designed with callbacks between core IBC and IBC applications. IBC apps would send a packet to core IBC. When the result of the packet lifecycle eventually resolved into either an acknowledgement or a timeout, core IBC called a callback on the IBC application so that the IBC application could take action on the basis of the result (e.g. unescrow tokens for ICS-20). - -This setup worked well for off-chain users interacting with IBC applications. - -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 the basis of the packet result. Or to receive a packet from IBC and do some logic upon receipt. - -Example Usecases: - -- Send an ICS-20 packet, and if it is successful, then send an ICA-packet to swap tokens on LP and return funds to sender -- Execute some logic upon receipt of token transfer to a smart contract address - -This requires a second layer of callbacks. The IBC application already gets the result of the packet from core IBC, but currently there is no standardized way to pass this information on to an actor module/smart contract. - -## Definitions - -- Actor: an actor is an on-chain module (this may be a hardcoded module in the chain binary or a smart contract) that wishes to execute custom logic whenever IBC receives a packet flow that it has either sent or received. It **must** be addressable by a string value. - -## Decision - -Create a middleware that can interface between IBC applications and smart contract VMs. The IBC applications and smart contract VMs will implement respective interfaces that will then be composed together by the callback middleware to allow a smart contract of any compatible VM to interact programmatically with an IBC application. - -## Data structures - -The `CallbackPacketData` struct will get constructed from custom callback data in the application packet. The `CallbackAddress` is the IBC Actor address on which the callback should be called on. The `SenderAddress` is also provided to optionally allow a VM to ensure that the sender is the same as the callback address. - -The struct also defines a `CommitGasLimit` which is the maximum gas a callback is allowed to use. If the callback exceeds this limit, the callback will panic and the tx will commit without the callback's state changes. - -The `ExecutionGasLimit` is the practical limit of the tx execution that is set in the context gas meter. It is the minimum of the `CommitGasLimit` and the gas left in the context gas meter which is determined by the relayer's choice of tx gas limit. If `ExecutionGasLimit < CommitGasLimit`, then an out-of-gas error will revert the entire transaction without committing anything, allowing for a different relayer to retry with a larger tx gas limit. - -Any middleware targeting this interface for callback handling should define a global limit that caps the gas that a callback is allowed to take (especially on AcknowledgePacket and TimeoutPacket) so that a custom callback does not prevent the packet lifecycle from completing. However, since this is a global cap it is likely to be very large. Thus, users may specify a smaller limit to cap the amount of fees a relayer must pay in order to complete the packet lifecycle on the user's behalf. - -```go -// Implemented by any packet data type that wants to support PacketActor callbacks -// PacketActor's will be unable to act on any packet data type that does not implement -// this interface. -type CallbackPacketData struct { - CallbackAddress: string - ExecutionGasLimit: uint64 - SenderAddress: string - CommitGasLimit: uint64 -} -``` - -IBC Apps or middleware can then call the IBCActor callbacks like so in their own callbacks: - -### Callback Middleware - -The CallbackMiddleware wraps an underlying IBC application along with a contractKeeper that delegates the callback to a virtual machine. This allows the Callback middleware to interface any compatible IBC application with any compatible VM (e.g. EVM, WASM) so long as the application implements the `CallbacksCompatibleModule` interface and the VM implements the `ContractKeeper` interface. - -```go -// IBCMiddleware implements the ICS26 callbacks for the ibc-callbacks middleware given -// the underlying application. -type IBCMiddleware struct { - app types.CallbacksCompatibleModule - ics4Wrapper porttypes.ICS4Wrapper - - contractKeeper types.ContractKeeper - - // maxCallbackGas defines the maximum amount of gas that a callback actor can ask the - // relayer to pay for. If a callback fails due to insufficient gas, the entire tx - // is reverted if the relayer hadn't provided the minimum(userDefinedGas, maxCallbackGas). - // If the actor hasn't defined a gas limit, then it is assumed to be the maxCallbackGas. - maxCallbackGas uint64 -} -``` - -### Callback-Compatible IBC Application - -The `CallbacksCompatibleModule` extends `porttypes.IBCModule` to include an `UnmarshalPacketData` function that allows the middleware to request that the underlying app unmarshal the packet data. This will then allow the middleware to retrieve the callback specific data from an arbitrary set of IBC application packets. - -```go -// CallbacksCompatibleModule is an interface that combines the IBCModule and PacketDataUnmarshaler -// interfaces to assert that the underlying application supports both. -type CallbacksCompatibleModule interface { - porttypes.IBCModule - porttypes.PacketDataUnmarshaler -} - -// 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 application's packet data must additionally implement the following interfaces: - -```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 -} - -// 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 callback data can be embedded in an application packet by providing custom packet data for source and destination callback in the custom packet data under the appropriate key. - -```jsonc -// Custom Packet data embedded as a JSON object in the packet data - -// src callback custom data -{ - "src_callback": { - "address": "callbackAddressString", - // optional - "gas_limit": "userDefinedGasLimitString", - } -} - -// dest callback custom data -{ - "dest_callback": { - "address": "callbackAddressString", - // optional - "gas_limit": "userDefinedGasLimitString", - } -} - -// src and dest callback custom data embedded together -{ - "src_callback": { - "address": "callbackAddressString", - // optional - "gas_limit": "userDefinedGasLimitString", - }, - "dest_callback": { - "address": "callbackAddressString", - // optional - "gas_limit": "userDefinedGasLimitString", - } -} -``` - -## ContractKeeper - -The `ContractKeeper` interface must be implemented by any VM that wants to support IBC callbacks. This allows for separation of concerns -between the middleware which is handling logic intended for all VMs (e.g. setting gas meter, extracting callback data, emitting events), -while the ContractKeeper can handle the specific details of calling into the VM in question. - -The `ContractKeeper` **may** impose additional checks such as ensuring that the contract address is the same as the packet sender in source callbacks. -It may also disable certain callback methods by simply performing a no-op. - -```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 -} -``` - -### PacketCallbacks - -The packet callbacks implemented in the middleware will first call the underlying application and then route to the IBC actor callback in the post-processing step. -It will extract the callback data from the application packet and set the callback gas meter depending on the global limit, the user limit, and the gas left in the transaction gas meter. -The callback will then be routed through the callback keeper which will either panic or return a result (success or failure). In the event of a (non-oog) panic or an error, the callback state changes -are discarded and the transaction is committed. - -If the relayer-defined gas limit is exceeded before the user-defined gas limit or global callback gas limit is exceeded, then the entire transaction is reverted to allow for resubmission. If the chain-defined or user-defined gas limit is reached, -the callback state changes are reverted and the transaction is committed. - -For the `SendPacket` callback, we will revert the entire transaction on any kind of error or panic. This is because the packet lifecycle has not yet started, so we can revert completely to avoid starting the packet lifecycle if the callback is not successful. - -```go -// SendPacket implements source callbacks for sending packets. -// It defers to the underlying application and then calls the contract callback. -// If the contract callback returns an error, panics, or runs out of gas, then -// the packet send is rejected. -func (im IBCMiddleware) SendPacket( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - sourcePort string, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - data []byte, -) (uint64, error) { - // run underlying app logic first - // IBCActor logic will postprocess - seq, err := im.ics4Wrapper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) - if err != nil { - return 0, err - } - - // use underlying app to get source callback information from packet data - callbackData, err := types.GetSourceCallbackData(im.app, data, sourcePort, ctx.GasMeter().GasRemaining(), im.maxCallbackGas) - // SendPacket is not blocked if the packet does not opt-in to callbacks - if err != nil { - return seq, nil - } - - callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCSendPacketCallback( - cachedCtx, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data, callbackData.CallbackAddress, callbackData.SenderAddress, - ) - } - - err = im.processCallback(ctx, types.CallbackTypeSendPacket, callbackData, callbackExecutor) - // contract keeper is allowed to reject the packet send. - if err != nil { - return 0, err - } - - types.EmitCallbackEvent(ctx, sourcePort, sourceChannel, seq, types.CallbackTypeSendPacket, callbackData, nil) - return seq, nil -} - -// WriteAcknowledgement implements the ReceivePacket destination callbacks for the ibc-callbacks middleware -// during asynchronous packet acknowledgement. -// It defers to the underlying application and then calls the contract callback. -// If the contract callback runs out of gas and may be retried with a higher gas limit then the state changes are -// reverted via a panic. -func (im IBCMiddleware) WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet ibcexported.PacketI, - ack ibcexported.Acknowledgement, -) error { - // run underlying app logic first - // IBCActor logic will postprocess - err := im.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, ack) - if err != nil { - return err - } - - // use underlying app to get destination callback information from packet data - callbackData, err := types.GetDestCallbackData( - im.app, packet.GetData(), packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), im.maxCallbackGas, - ) - // WriteAcknowledgement is not blocked if the packet does not opt-in to callbacks - if err != nil { - return nil - } - - callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCReceivePacketCallback(cachedCtx, packet, ack, callbackData.CallbackAddress) - } - - // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions - err = im.processCallback(ctx, types.CallbackTypeReceivePacket, callbackData, callbackExecutor) - // emit events - types.EmitCallbackEvent( - ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence(), - types.CallbackTypeAcknowledgementPacket, callbackData, err, - ) - - return nil -} - -// Call the IBCActor recvPacket callback after processing the packet -// if the recvPacket callback exists. If the callback returns an error -// then return an error ack to revert all packet data processing. -func (im IBCMiddleware) OnRecvPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) (ack exported.Acknowledgement) { - // run underlying app logic first - // IBCActor logic will postprocess - ack := im.app.OnRecvPacket(ctx, packet, relayer) - // if ack is nil (asynchronous acknowledgements), then the callback will be handled in WriteAcknowledgement - // if ack is not successful, all state changes are reverted. If a packet cannot be received, then there is - // no need to execute a callback on the receiving chain. - if ack == nil || !ack.Success() { - return ack - } - - // use underlying app to get destination callback information from packet data - callbackData, err := types.GetDestCallbackData( - im.app, packet.GetData(), packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), im.maxCallbackGas, - ) - // OnRecvPacket is not blocked if the packet does not opt-in to callbacks - if err != nil { - return ack - } - - callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCReceivePacketCallback(cachedCtx, packet, ack, callbackData.CallbackAddress) - } - - // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions - err = im.processCallback(ctx, types.CallbackTypeReceivePacket, callbackData, callbackExecutor) - types.EmitCallbackEvent( - ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence(), - types.CallbackTypeReceivePacket, callbackData, err, - ) - - return ack -} - -// Call the IBCActor acknowledgementPacket callback after processing the packet -// if the ackPacket callback exists and returns an error -// DO NOT return the error upstream. The acknowledgement must complete for the packet -// lifecycle to end, so the custom callback cannot block completion. -// Instead we emit error events and set the error in state -// so that users and on-chain logic can handle this appropriately -func (im IBCModule) OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, - relayer sdk.AccAddress, -) error { - // we first call the underlying app to handle the acknowledgement - // IBCActor logic will postprocess - err := im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) - if err != nil { - return err - } - - // use underlying app to get source callback information from packet data - callbackData, err := types.GetSourceCallbackData( - im.app, packet.GetData(), packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), im.maxCallbackGas, - ) - // OnAcknowledgementPacket is not blocked if the packet does not opt-in to callbacks - if err != nil { - return nil - } - - callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCOnAcknowledgementPacketCallback( - cachedCtx, packet, acknowledgement, relayer, callbackData.CallbackAddress, callbackData.SenderAddress, - ) - } - - // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions - err = im.processCallback(ctx, types.CallbackTypeAcknowledgementPacket, callbackData, callbackExecutor) - types.EmitCallbackEvent( - ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence(), - types.CallbackTypeAcknowledgementPacket, callbackData, err, - ) - - return nil -} - -// Call the IBCActor timeoutPacket callback after processing the packet -// if the timeoutPacket callback exists and returns an error -// DO NOT return the error upstream. The timeout must complete for the packet -// lifecycle to end, so the custom callback cannot block completion. -// Instead we emit error events and set the error in state -// so that users and on-chain logic can handle this appropriately -func (im IBCModule) OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) error { - // application-specific onTimeoutPacket logic - err := im.app.OnTimeoutPacket(ctx, packet, relayer) - if err != nil { - return err - } - - // use underlying app to get source callback information from packet data - callbackData, err := types.GetSourceCallbackData( - im.app, packet.GetData(), packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), im.maxCallbackGas, - ) - // OnTimeoutPacket is not blocked if the packet does not opt-in to callbacks - if err != nil { - return nil - } - - callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCOnTimeoutPacketCallback(cachedCtx, packet, relayer, callbackData.CallbackAddress, callbackData.SenderAddress) - } - - // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions - err = im.processCallback(ctx, types.CallbackTypeTimeoutPacket, callbackData, callbackExecutor) - types.EmitCallbackEvent( - ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence(), - types.CallbackTypeTimeoutPacket, callbackData, err, - ) - - return nil -} - -// processCallback executes the callbackExecutor and reverts contract changes if the callbackExecutor fails. -// -// Error Precedence and Returns: -// - oogErr: Takes the highest precedence. If the callback runs out of gas, an error wrapped with types.ErrCallbackOutOfGas is returned. -// - panicErr: Takes the second-highest precedence. If a panic occurs and it is not propagated, an error wrapped with types.ErrCallbackPanic is returned. -// - callbackErr: If the callbackExecutor returns an error, it is returned as-is. -// -// panics if -// - the contractExecutor panics for any reason, and the callbackType is SendPacket, or -// - the contractExecutor runs out of gas and the relayer has not reserved gas grater than or equal to -// CommitGasLimit. -func (IBCMiddleware) processCallback( - ctx sdk.Context, callbackType types.CallbackType, - callbackData types.CallbackData, callbackExecutor func(sdk.Context) error, -) (err error) { - cachedCtx, writeFn := ctx.CacheContext() - cachedCtx = cachedCtx.WithGasMeter(storetypes.NewGasMeter(callbackData.ExecutionGasLimit)) - - defer func() { - // consume the minimum of g.consumed and g.limit - ctx.GasMeter().ConsumeGas(cachedCtx.GasMeter().GasConsumedToLimit(), fmt.Sprintf("ibc %s callback", callbackType)) - - // recover from all panics except during SendPacket callbacks - if r := recover(); r != nil { - if callbackType == types.CallbackTypeSendPacket { - panic(r) - } - err = errorsmod.Wrapf(types.ErrCallbackPanic, "ibc %s callback panicked with: %v", callbackType, r) - } - - // if the callback ran out of gas and the relayer has not reserved enough gas, then revert the state - if cachedCtx.GasMeter().IsPastLimit() { - if callbackData.AllowRetry() { - panic(storetypes.ErrorOutOfGas{Descriptor: fmt.Sprintf("ibc %s callback out of gas; commitGasLimit: %d", callbackType, callbackData.CommitGasLimit)}) - } - err = errorsmod.Wrapf(types.ErrCallbackOutOfGas, "ibc %s callback out of gas", callbackType) - } - - // allow the transaction to be committed, continuing the packet lifecycle - }() - - err = callbackExecutor(cachedCtx) - if err == nil { - writeFn() - } - - return err -} -``` - -Chains are expected to specify a `maxCallbackGas` to ensure that callbacks do not consume an arbitrary amount of gas. Thus, it should always be possible for a relayer to complete the packet lifecycle even if the actor callbacks cannot run successfully. - -## Consequences - -### Positive - -- IBC Actors can now programmatically execute logic that involves sending a packet and then performing some additional logic once the packet lifecycle is complete -- Middleware implementing ADR-8 can be generally used for any application -- Leverages a similar callback architecture to the one used between core IBC and IBC applications - -### Negative - -- Callbacks may now have unbounded gas consumption since the actor may execute arbitrary logic. Chains implementing this feature should take care to place limitations on how much gas an actor callback can consume. -- The relayer pays for the callback gas instead of the IBCActor - -### Neutral - -- Application packets that want to support ADR-8 must additionally have their packet data implement `PacketDataProvider` and `PacketData` interfaces. -- Applications must implement `PacketDataUnmarshaler` interface -- Callback receiving module must implement the `ContractKeeper` interface - -## References - -- [Original issue](https://github.com/cosmos/ibc-go/issues/1660) -- [CallbackPacketData interface implementation](https://github.com/cosmos/ibc-go/pull/3287) -- [ICS 20, ICS 27 implementations of the CallbackPacketData interface](https://github.com/cosmos/ibc-go/pull/3287) diff --git a/docs/architecture/adr-009-v6-ics27-msgserver.md b/docs/architecture/adr-009-v6-ics27-msgserver.md deleted file mode 100644 index 7a60d1fcaed..00000000000 --- a/docs/architecture/adr-009-v6-ics27-msgserver.md +++ /dev/null @@ -1,115 +0,0 @@ -# ADR 009: ICS27 message server addition - -## Changelog - -- 2022/09/07: Initial draft - -## Status - -Accepted, implemented in v6 of ibc-go - -## Context - -ICS 27 (Interchain Accounts) brought a cross-chain account management protocol built upon IBC. -It enabled chains to programatically create accounts on behalf of counterparty chains which may enable a variety of authentication methods for this interchain account. -The initial release of ICS 27 focused on enabling authentication schemes which may not require signing with a private key, such as via on-chain mechanisms like governance. - -Following the initial release of ICS 27 it became evident that: - -- a default authentication module would enable more usage of ICS 27 -- generic authentication modules should be capable of authenticating an interchain account registration -- application logic which wraps ICS 27 packet sends do not need to be associated with the authentication logic - -## Decision - -The controller module should be simplified to remove the correlation between the authentication logic for an interchain account and the application logic for an interchain account. -To minimize disruption to developers working on the original design of the ICS 27 controller module, all changes will be made in a backwards compatible fashion. - -### Msg server - -To acheive this, as stated by [@damiannolan](https://github.com/cosmos/ibc-go/issues/2026#issue-1341640594), it was proposed to: - -> Add a new `MsgServer` to `27-interchain-accounts` which exposes two distinct rpc endpoints: -> -> - `RegisterInterchainAccount` -> - `SendTx` - -This will enable any SDK (authentication) module to register interchain accounts and send transactions on their behalf. -Examples of existing SDK modules which would benefit from this change include: - -- x/auth -- x/gov -- x/group - -The existing go functions: `RegisterInterchainAccount()` and `SendTx()` will remain to operate as they did in previous release versions. - -This will be possible for SDK v0.46.x and above. - -### Allow `nil` underlying applications - -Authentication modules should interact with the controller module via the message server and should not be associated with application logic. -For now, it will be allowed to set a `nil` underlying application. -A future version may remove the underlying application entirely. - -See issue [#2040](https://github.com/cosmos/ibc-go/issues/2040) - -### Channel capability claiming - -The controller module will now claim the channel capability in `OnChanOpenInit`. -Underlying applications will be passed a `nil` capability in `OnChanOpenInit`. - -Channel capability migrations will be added in two steps: - -- Upgrade handler migration which modifies the channel capability owner from the underlying app to the controller module -- ICS 27 module automatic migration which asserts the upgrade handler channel capability migration has been performed successfully - -See issue [#2033](https://github.com/cosmos/ibc-go/issues/2033) - -### Middleware enabled channels - -In order to maintain backwards compatibility and avoid requiring underlying application developers to account for interchain accounts they did not register, a boolean mapping has been added to track the behaviour of how an account was created. - -If the account was created via the legacy API, then the underlying application callbacks will be executed. - -If the account was created with the new API (message server), then the underlying application callbacks will not be executed. - -See issue [#2145](https://github.com/cosmos/ibc-go/issues/2145) - -### Future considerations - -[ADR 008](https://github.com/cosmos/ibc-go/pull/1976) proposes the creation of a middleware which enables callers of an IBC packet send to perform application logic in conjunction with the IBC application. -The underlying application can be removed at the availablity of such a middleware as that will be the preferred method for executing application logic upon a ICS 27 packet send. - -### Miscellanous - -In order to avoid import cycles, the genesis types have been moved to their own directory. -A new protobuf package has been created for the genesis types. - -See PR [#2133](https://github.com/cosmos/ibc-go/pull/2133) - -An additional field has been added to the `ActiveChannel` type to store the `IsMiddlewareEnabled` field upon genesis import/export. - -See issue [#2165](https://github.com/cosmos/ibc-go/issues/2165) - -## Consequences - -### Positive - -- default authentication modules are provided (x/auth, x/group, x/gov) -- any SDK authentication module may now be used with ICS 27 -- separation of authentication from application logic in relation to ICS 27 -- minimized disruption to existing development around ICS 27 controller module -- underlying applications no longer have to handle capabilities -- removal of the underlying application upon the creation of ADR 008 may be done in a minimally disruptive fashion -- only underlying applications which registered the interchain account will perform application logic for that account (underlying applications do not need to be aware of accounts they did not register) - -### Negative - -- the security model has been reduced to that of the SDK. SDK modules may send packets for any interchain account. -- additional maintenance of the messages added and the middleware enabled flag -- underlying applications which will become ADR 008 modules are not required to be aware of accounts they did not register -- calling legacy API vs the new API results in different behaviour for ICS 27 application stacks which have an underlying application - -### Neutral - -- A major release is required diff --git a/docs/architecture/adr-010-light-clients-as-sdk-modules.md b/docs/architecture/adr-010-light-clients-as-sdk-modules.md deleted file mode 100644 index 83140973376..00000000000 --- a/docs/architecture/adr-010-light-clients-as-sdk-modules.md +++ /dev/null @@ -1,106 +0,0 @@ -# ADR 010: IBC light clients as SDK modules - -## Changelog - -- 12/12/2022: initial draft - -## Status - -Proposed - -## Context - -ibc-go has 3 main consumers: - -- IBC light clients -- IBC applications -- relayers - -Relayers listen and respond to events emitted by ibc-go while IBC light clients and applications are invoked by core IBC. -Currently there exists two different approaches to callbacks being invoked by core IBC. - -IBC light clients currently are invoked by a `ClientState` and `ConsensusState` interface as defined by [core IBC](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L36). -The 02-client submodule will retrieve the `ClientState` or `ConsensusState` from the IBC store in order to perform callbacks to the light client. -This design requires all required information for the light client to function to be stored in the `ClientState` or `ConsensusState` or potentially under metadata keys for a specific client instance. -Additional information may be provided by core IBC via the defined interface arguments if that information is generic enough to be useful to all IBC light clients. -This constraint has proved problematic as pass through clients (such as wasm) cannot maintain easy access to a VM instance. -In addition, without increasing the size of the defined `ClientState` interface, light clients are unable to take advantage of basic built-in SDK functionality such as genesis import/export and migrations. - -The other approach used to perform callback logic is via registered SDK modules. -This approach is used by core IBC to interact with IBC applications. -IBC applications will register their callbacks on the IBC router at compile time. -When a packet comes in, core IBC will use the IBC router to lookup the registered callback functions for the provided packet. -The benefit of registered callbacks opposed to interface functions is that additional information may be accessed via external keepers. -Because the IBC applications are also SDK modules, they additionally get access to a host of functionality provided by the SDK. -This includes: genesis import/export, migrations, query/transaction CLI commands, type registration, gRPC query registration, and message server registration. - -As described in [ADR 006](./adr-006-02-client-refactor.md), generalizing light client behaviour is difficult. -IBC light clients will obtain greater flexibility and control via the registered SDK module approach. - -## Decision - -Instead of using two different approaches to invoking callbacks, IBC light clients should be invoked as SDK modules. -Over time and as necessary, core IBC should adjust its interactions with light clients such that they are SDK modules as opposed to interfaces. - -One immediate decision that has already been applied is to formalize light client type registration via the inclusion of an `AppModuleBasic` within the `ModuleManager` for a chain. -The [tendermint](https://github.com/cosmos/ibc-go/pull/2825) and [solo machine](https://github.com/cosmos/ibc-go/pull/2826) clients were refactored to include this `AppModuleBasic` implementation and core IBC will no longer include either type as registered by default. - -Longer term solutions include using internal module communication as described in [ADR 033](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-033-protobuf-inter-module-comm.md) on the SDK. -The following functions should become callbacks invoked via intermodule communication: - -- `Status` -- `GetTimestampAtHeight` -- `VerifyMembership` -- `VerifyNonMembership` -- `Initialize` -- `VerifyClientMessage` -- `CheckForMisbehaviour` -- `UpdateStateOnMisbehaviour` -- `UpdateState` -- `CheckSubstituteAndUpdateState` -- `VerifyUpgradeAndUpdateState` - -The ClientState interface should eventually be trimmed down to something along the lines of: - -```go -type ClientState interface { - proto.Message - - ClientType() string - GetLatestHeight() Height - Validate() error - - ZeroCustomFields() ClientState - - // ADDITION - Route() string // route used for intermodule communication -} -``` - -For the most part, any functions which require access to the client store should likely not be an interface function of the `ClientState`. - -`ExportMetadata` should eventually be replaced by a light client's ability to import/export it's own genesis information. - -### Intermodule communication - -To keep the transition from interface callbacks to SDK module callbacks as simple as possible, intermodule communication (when available) should be used to route to light client modules. -Without intermodule communication, a routing system would need to be developed/maintained to register callbacks. -This functionality of routing to another SDK module should and will be provided by the SDK. -Once it is possible to route to SDK modules, a `ClientState` type could expose the function `Route` which returns the callback route used to call the light client module. - -## Consequences - -### Positive - -- use a single approach for interacting with callbacks -- greater flexibilty and control for IBC light clients -- does not require developing another routing system - -### Negative - -- requires breaking changes -- requires waiting for intermodule communication - -### Neutral - -N/A diff --git a/docs/architecture/adr-011-transfer-total-escrow-state-entry.md b/docs/architecture/adr-011-transfer-total-escrow-state-entry.md deleted file mode 100644 index 2747c5cb615..00000000000 --- a/docs/architecture/adr-011-transfer-total-escrow-state-entry.md +++ /dev/null @@ -1,145 +0,0 @@ -# ADR 011: ICS-20 transfer state entry for total amount of tokens in escrow - -## Changelog - -- 2023-05-24: Initial draft - -## Status - -Accepted and applied in v7.1 of ibc-go - -## Context - -Every ICS-20 transfer channel has its own escrow bank account. This account is used to lock tokens that are transferred out of a chain that acts as the source of the tokens (i.e. when the tokens being transferred have not returned to the originating chain). This design makes it easy to query the balance of the escrow accounts and find out the total amount of tokens in escrow in a particular channel. However, there are use cases where it would be useful to determine the total escrowed amount of a given denomination across all channels where those tokens have been transferred out. - -For example: assuming that there are three channels between Cosmos Hub to Osmosis and 10 ATOM have been transferred from the Cosmos Hub to Osmosis on each of those channels, then we would like to know that 30 ATOM have been transferred (i.e. are locked in the escrow accounts of each channel) without needing to iterate over each escrow account to add up the balances of each. - -For a sample use case where this feature would be useful, please refer to Osmosis' rate limiting use case described in [#2664](https://github.com/cosmos/ibc-go/issues/2664). - -## Decision - -### State entry denom -> amount - -The total amount of tokens in escrow (across all transfer channels) for a given denomination is stored in state in an entry keyed by the denomination: `totalEscrowForDenom/{denom}`. - -### Panic if amount is negative - -If a negative amount is ever attempted to be stored, then the keeper function will panic: - -```go -if coin.Amount.IsNegative() { - panic(fmt.Sprintf("amount cannot be negative: %s", coin.Amount)) -} -``` - -### Delete state entry if amount is zero - -When setting the amount for a particular denomination, the value might be zero if all tokens that were transferred out of the chain have been transferred back. If this happens, then the state entry for this particular denomination will be deleted, since Cosmos SDK's `x/bank` module prunes any non-zero balances: - -```go -if coin.Amount.IsZero() { - store.Delete(key) // delete the key since Cosmos SDK x/bank module will prune any non-zero balances - return -} -``` - -### Bundle escrow/unescrow with setting state entry - -Two new functions are implemented that bundle together the operations of escrowing/unescrowing and setting the total escrow amount in state, since these operations need to be executed together. - -For escrowing tokens: - -```go -// escrowToken will send the given token from the provided sender to the escrow address. It will also -// update the total escrowed amount by adding the escrowed token to the current total escrow. -func (k Keeper) escrowToken(ctx sdk.Context, sender, escrowAddress sdk.AccAddress, token sdk.Coin) error { - if err := k.bankKeeper.SendCoins(ctx, sender, escrowAddress, sdk.NewCoins(token)); err != nil { - // failure is expected for insufficient balances - return err - } - - // track the total amount in escrow keyed by denomination to allow for efficient iteration - currentTotalEscrow := k.GetTotalEscrowForDenom(ctx, token.GetDenom()) - newTotalEscrow := currentTotalEscrow.Add(token) - k.SetTotalEscrowForDenom(ctx, newTotalEscrow) - - return nil -} -``` - -For unescrowing tokens: - -```go -// unescrowToken will send the given token from the escrow address to the provided receiver. It will also -// update the total escrow by deducting the unescrowed token from the current total escrow. -func (k Keeper) unescrowToken(ctx sdk.Context, escrowAddress, receiver sdk.AccAddress, token sdk.Coin) error { - if err := k.bankKeeper.SendCoins(ctx, escrowAddress, receiver, sdk.NewCoins(token)); err != nil { - // NOTE: this error is only expected to occur given an unexpected bug or a malicious - // counterparty module. The bug may occur in bank or any part of the code that allows - // the escrow address to be drained. A malicious counterparty module could drain the - // escrow address by allowing more tokens to be sent back then were escrowed. - return errorsmod.Wrap(err, "unable to unescrow tokens, this may be caused by a malicious counterparty module or a bug: please open an issue on counterparty module") - } - - // track the total amount in escrow keyed by denomination to allow for efficient iteration - currentTotalEscrow := k.GetTotalEscrowForDenom(ctx, token.GetDenom()) - newTotalEscrow := currentTotalEscrow.Sub(token) - k.SetTotalEscrowForDenom(ctx, newTotalEscrow) - - return nil -} -``` - -When tokens need to be escrowed in `sendTransfer`, then `escrowToken` is called; when tokens need to be unescrowed on execution of the `OnRecvPacket`, `OnAcknowledgementPacket` or `OnTimeoutPacket` callbacks, then `unescrowToken` is called. - -### gRPC query endpoint and CLI to retrieve amount - -A gRPC query endpoint is added so that it is possible to retrieve the total amount for a given denomination: - -```proto -// TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom. -rpc TotalEscrowForDenom(QueryTotalEscrowForDenomRequest) returns (QueryTotalEscrowForDenomResponse) { - option (google.api.http).get = "/ibc/apps/transfer/v1/denoms/{denom=**}/total_escrow"; -} - -// QueryTotalEscrowForDenomRequest is the request type for TotalEscrowForDenom RPC method. -message QueryTotalEscrowForDenomRequest { - string denom = 1; -} - -// QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method. -message QueryTotalEscrowForDenomResponse { - cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; -} -``` - -And a CLI query is also available to retrieve the total amount via the command line: - -```shell -query ibc-transfer total-escrow [denom] -``` - -## Consequences - -### Positive - -- Possibility to retrieve the total amount of a particular denomination in escrow across all transfer channels without iteration. - -### Negative - -No notable consequences - -### Neutral - -- A new entry is added to state for every denomination that is transferred out of the chain. - -## References - -Issues: - -- [#2664](https://github.com/cosmos/ibc-go/issues/2664) - -PRs: - -- [#3019](https://github.com/cosmos/ibc-go/pull/3019) -- [#3558](https://github.com/cosmos/ibc-go/pull/3558) diff --git a/docs/architecture/adr-015-ibc-packet-receiver.md b/docs/architecture/adr-015-ibc-packet-receiver.md deleted file mode 100644 index 08264c6d2ee..00000000000 --- a/docs/architecture/adr-015-ibc-packet-receiver.md +++ /dev/null @@ -1,299 +0,0 @@ -# ADR 015: IBC Packet Receiver - -## Changelog - -- 2019 Oct 22: Initial Draft - -## Context - -[ICS 26 - Routing Module](https://github.com/cosmos/ibc/tree/master/spec/core/ics-026-routing-module) defines a function [`handlePacketRecv`](https://github.com/cosmos/ibc/tree/master/spec/core/ics-026-routing-module#packet-relay). - -In ICS 26, the routing module is defined as a layer above each application module -which verifies and routes messages to the destination modules. It is possible to -implement it as a separate module, however, we already have functionality to route -messages upon the destination identifiers in the baseapp. This ADR suggests -to utilize existing `baseapp.router` to route packets to application modules. - -Generally, routing module callbacks have two separate steps in them, -verification and execution. This corresponds to the `AnteHandler`-`Handler` -model inside the SDK. We can do the verification inside the `AnteHandler` -in order to increase developer ergonomics by reducing boilerplate -verification code. - -For atomic multi-message transaction, we want to keep the IBC related -state modification to be preserved even the application side state change -reverts. One of the example might be IBC token sending message following with -stake delegation which uses the tokens received by the previous packet message. -If the token receiving fails for any reason, we might not want to keep -executing the transaction, but we also don't want to abort the transaction -or the sequence and commitment will be reverted and the channel will be stuck. -This ADR suggests new `CodeType`, `CodeTxBreak`, to fix this problem. - -## Decision - -`PortKeeper` will have the capability key that is able to access only the -channels bound to the port. Entities that hold a `PortKeeper` will be -able to call the methods on it which are corresponding with the methods with -the same names on the `ChannelKeeper`, but only with the -allowed port. `ChannelKeeper.Port(string, ChannelChecker)` will be defined to -easily construct a capability-safe `PortKeeper`. This will be addressed in -another ADR and we will use insecure `ChannelKeeper` for now. - -`baseapp.runMsgs` will break the loop over the messages if one of the handlers -returns `!Result.IsOK()`. However, the outer logic will write the cached -store if `Result.IsOK() || Result.Code.IsBreak()`. `Result.Code.IsBreak()` if -`Result.Code == CodeTxBreak`. - -```go -func (app *BaseApp) runTx(tx Tx) (result Result) { - msgs := tx.GetMsgs() - - // AnteHandler - if app.anteHandler != nil { - anteCtx, msCache := app.cacheTxContext(ctx) - newCtx, err := app.anteHandler(anteCtx, tx) - if !newCtx.IsZero() { - ctx = newCtx.WithMultiStore(ms) - } - - if err != nil { - // error handling logic - return res - } - - msCache.Write() - } - - // Main Handler - runMsgCtx, msCache := app.cacheTxContext(ctx) - result = app.runMsgs(runMsgCtx, msgs) - // BEGIN modification made in this ADR - if result.IsOK() || result.IsBreak() { - // END - msCache.Write() - } - - return result -} -``` - -The Cosmos SDK will define an `AnteDecorator` for IBC packet receiving. The -`AnteDecorator` will iterate over the messages included in the transaction, type -`switch` to check whether the message contains an incoming IBC packet, and if so -verify the Merkle proof. - -```go -type ProofVerificationDecorator struct { - clientKeeper ClientKeeper - channelKeeper ChannelKeeper -} - -func (pvr ProofVerificationDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (Context, error) { - for _, msg := range tx.GetMsgs() { - var err error - switch msg := msg.(type) { - case client.MsgUpdateClient: - err = pvr.clientKeeper.UpdateClient(msg.ClientID, msg.Header) - case channel.MsgPacket: - err = pvr.channelKeeper.RecvPacket(msg.Packet, msg.Proofs, msg.ProofHeight) - case chanel.MsgAcknowledgement: - err = pvr.channelKeeper.AcknowledgementPacket(msg.Acknowledgement, msg.Proof, msg.ProofHeight) - case channel.MsgTimeoutPacket: - err = pvr.channelKeeper.TimeoutPacket(msg.Packet, msg.Proof, msg.ProofHeight, msg.NextSequenceRecv) - case channel.MsgChannelOpenInit; - err = pvr.channelKeeper.CheckOpen(msg.PortID, msg.ChannelID, msg.Channel) - default: - continue - } - - if err != nil { - return ctx, err - } - } - - return next(ctx, tx, simulate) -} -``` - -Where `MsgUpdateClient`, `MsgPacket`, `MsgAcknowledgement`, `MsgTimeoutPacket` -are `sdk.Msg` types correspond to `handleUpdateClient`, `handleRecvPacket`, -`handleAcknowledgementPacket`, `handleTimeoutPacket` of the routing module, -respectively. - -The side effects of `RecvPacket`, `VerifyAcknowledgement`, -`VerifyTimeout` will be extracted out into separated functions, -`WriteAcknowledgement`, `DeleteCommitment`, `DeleteCommitmentTimeout`, respectively, -which will be called by the application handlers after the execution. - -`WriteAcknowledgement` writes the acknowledgement to the state that can be -verified by the counter-party chain and increments the sequence to prevent -double execution. `DeleteCommitment` will delete the commitment stored, -`DeleteCommitmentTimeout` will delete the commitment and close channel in case -of ordered channel. - -```go -func (keeper ChannelKeeper) WriteAcknowledgement(ctx Context, packet Packet, ack []byte) { - keeper.SetPacketAcknowledgement(ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence(), ack) - keeper.SetNextSequenceRecv(ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) -} - -func (keeper ChannelKeeper) DeleteCommitment(ctx Context, packet Packet) { - keeper.deletePacketCommitment(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) -} - -func (keeper ChannelKeeper) DeleteCommitmentTimeout(ctx Context, packet Packet) { - k.deletePacketCommitment(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) - - if channel.Ordering == types.ORDERED [ - channel.State = types.CLOSED - k.SetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), channel) - } -} -``` - -Each application handler should call respective finalization methods on the `PortKeeper` -in order to increase sequence (in case of packet) or remove the commitment -(in case of acknowledgement and timeout). -Calling those functions implies that the application logic has successfully executed. -However, the handlers can return `Result` with `CodeTxBreak` after calling those methods -which will persist the state changes that has been already done but prevent any further -messages to be executed in case of semantically invalid packet. This will keep the sequence -increased in the previous IBC packets(thus preventing double execution) without -proceeding to the following messages. -In any case the application modules should never return state reverting result, -which will make the channel unable to proceed. - -`ChannelKeeper.CheckOpen` method will be introduced. This will replace `onChanOpen*` defined -under the routing module specification. Instead of define each channel handshake callback -functions, application modules can provide `ChannelChecker` function with the `AppModule` -which will be injected to `ChannelKeeper.Port()` at the top level application. -`CheckOpen` will find the correct `ChennelChecker` using the -`PortID` and call it, which will return an error if it is unacceptable by the application. - -The `ProofVerificationDecorator` will be inserted to the top level application. -It is not safe to make each module responsible to call proof verification -logic, whereas application can misbehave(in terms of IBC protocol) by -mistake. - -The `ProofVerificationDecorator` should come right after the default sybil attack -resistent layer from the current `auth.NewAnteHandler`: - -```go -// add IBC ProofVerificationDecorator to the Chain of -func NewAnteHandler( - ak keeper.AccountKeeper, supplyKeeper types.SupplyKeeper, ibcKeeper ibc.Keeper, - sigGasConsumer SignatureVerificationGasConsumer) sdk.AnteHandler { - return sdk.ChainAnteDecorators( - NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first - ... - NewIncrementSequenceDecorator(ak), - ibcante.ProofVerificationDecorator(ibcKeeper.ClientKeeper, ibcKeeper.ChannelKeeper), // innermost AnteDecorator - ) -} -``` - -The implementation of this ADR will also create a `Data` field of the `Packet` of type `[]byte`, which can be deserialised by the receiving module into its own private type. It is up to the application modules to do this according to their own interpretation, not by the IBC keeper. This is crucial for dynamic IBC. - -Example application-side usage: - -```go -type AppModule struct {} - -// CheckChannel will be provided to the ChannelKeeper as ChannelKeeper.Port(module.CheckChannel) -func (module AppModule) CheckChannel(portID, channelID string, channel Channel) error { - if channel.Ordering != UNORDERED { - return ErrUncompatibleOrdering() - } - if channel.CounterpartyPort != "bank" { - return ErrUncompatiblePort() - } - if channel.Version != "" { - return ErrUncompatibleVersion() - } - return nil -} - -func NewHandler(k Keeper) Handler { - return func(ctx Context, msg Msg) Result { - switch msg := msg.(type) { - case MsgTransfer: - return handleMsgTransfer(ctx, k, msg) - case ibc.MsgPacket: - var data PacketDataTransfer - if err := types.ModuleCodec.UnmarshalBinaryBare(msg.GetData(), &data); err != nil { - return err - } - return handlePacketDataTransfer(ctx, k, msg, data) - case ibc.MsgTimeoutPacket: - var data PacketDataTransfer - if err := types.ModuleCodec.UnmarshalBinaryBare(msg.GetData(), &data); err != nil { - return err - } - return handleTimeoutPacketDataTransfer(ctx, k, packet) - // interface { PortID() string; ChannelID() string; Channel() ibc.Channel } - // MsgChanInit, MsgChanTry implements ibc.MsgChannelOpen - case ibc.MsgChannelOpen: - return handleMsgChannelOpen(ctx, k, msg) - } - } -} - -func handleMsgTransfer(ctx Context, k Keeper, msg MsgTransfer) Result { - err := k.SendTransfer(ctx,msg.PortID, msg.ChannelID, msg.Amount, msg.Sender, msg.Receiver) - if err != nil { - return sdk.ResultFromError(err) - } - - return sdk.Result{} -} - -func handlePacketDataTransfer(ctx Context, k Keeper, packet Packet, data PacketDataTransfer) Result { - err := k.ReceiveTransfer(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetDestinationPort(), packet.GetDestinationChannel(), data) - if err != nil { - // TODO: Source chain sent invalid packet, shutdown channel - } - k.ChannelKeeper.WriteAcknowledgement([]byte{0x00}) // WriteAcknowledgement increases the sequence, preventing double spending - return sdk.Result{} -} - -func handleCustomTimeoutPacket(ctx Context, k Keeper, packet CustomPacket) Result { - err := k.RecoverTransfer(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetDestinationPort(), packet.GetDestinationChannel(), data) - if err != nil { - // This chain sent invalid packet or cannot recover the funds - panic(err) - } - k.ChannelKeeper.DeleteCommitmentTimeout(ctx, packet) - // packet timeout should not fail - return sdk.Result{} -} - -func handleMsgChannelOpen(sdk.Context, k Keeper, msg MsgOpenChannel) Result { - k.AllocateEscrowAddress(ctx, msg.ChannelID()) - return sdk.Result{} -} -``` - -## Status - -Proposed - -## Consequences - -### Positive - -- Intuitive interface for developers - IBC handlers do not need to care about IBC authentication -- State change commitment logic is embedded into `baseapp.runTx` logic - -### Negative - -- Cannot support dynamic ports, routing is tied to the baseapp router - -### Neutral - -- Introduces new `AnteHandler` decorator. -- Dynamic ports can be supported using hierarchical port identifier, see #5290 for detail - -## References - -- Relevant comment: [cosmos/ics#289](https://github.com/cosmos/ics/issues/289#issuecomment-544533583) -- [ICS26 - Routing Module](https://github.com/cosmos/ibc/tree/master/spec/core/ics-026-routing-module) diff --git a/docs/architecture/adr-025-ibc-passive-channels.md b/docs/architecture/adr-025-ibc-passive-channels.md deleted file mode 100644 index 35449185a1b..00000000000 --- a/docs/architecture/adr-025-ibc-passive-channels.md +++ /dev/null @@ -1,141 +0,0 @@ -# ADR 025: IBC Passive Channels - -## Changelog - -- 2021-04-23: Change status to "deprecated" -- 2020-05-23: Provide sample Go code and more details -- 2020-05-18: Initial Draft - -## Status - -*deprecated* - -## Context - -The current "naive" IBC Relayer strategy currently establishes a single predetermined IBC channel atop a single connection between two clients (each potentially of a different chain). This strategy then detects packets to be relayed by watching for `send_packet` and `recv_packet` events matching that channel, and sends the necessary transactions to relay those packets. - -We wish to expand this "naive" strategy to a "passive" one which detects and relays both channel handshake messages and packets on a given connection, without the need to know each channel in advance of relaying it. - -In order to accomplish this, we propose adding more comprehensive events to expose channel metadata for each transaction sent from the `x/ibc/core/04-channel/keeper/handshake.go` and `x/ibc/core/04-channel/keeper/packet.go` modules. - -Here is an example of what would be in `ChanOpenInit`: - -```go -const ( - EventTypeChannelMeta = "channel_meta" - AttributeKeyAction = "action" - AttributeKeyHops = "hops" - AttributeKeyOrder = "order" - AttributeKeySrcPort = "src_port" - AttributeKeySrcChannel = "src_channel" - AttributeKeySrcVersion = "src_version" - AttributeKeyDstPort = "dst_port" - AttributeKeyDstChannel = "dst_channel" - AttributeKeyDstVersion = "dst_version" -) -// ... -// Emit Event with Channel metadata for the relayer to pick up and -// relay to the other chain -// This appears immediately before the successful return statement. -ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - types.EventTypeChannelMeta, - sdk.NewAttribute(types.AttributeKeyAction, "open_init"), - sdk.NewAttribute(types.AttributeKeySrcConnection, connectionHops[0]), - sdk.NewAttribute(types.AttributeKeyHops, strings.Join(connectionHops, ",")), - sdk.NewAttribute(types.AttributeKeyOrder, order.String()), - sdk.NewAttribute(types.AttributeKeySrcPort, portID), - sdk.NewAttribute(types.AttributeKeySrcChannel, chanenlID), - sdk.NewAttribute(types.AttributeKeySrcVersion, version), - sdk.NewAttribute(types.AttributeKeyDstPort, counterparty.GetPortID()), - sdk.NewAttribute(types.AttributeKeyDstChannel, counterparty.GetChannelID()), - // The destination version is not yet known, but a value is necessary to pad - // the event attribute offsets - sdk.NewAttribute(types.AttributeKeyDstVersion, ""), - ), -}) -``` - -These metadata events capture all the "header" information needed to route IBC channel handshake transactions without requiring the client to query any data except that of the connection ID that it is willing to relay. It is intended that `channel_meta.src_connection` is the only event key that needs to be indexed for a passive relayer to function. - -### Handling Channel Open Attempts - -In the case of the passive relayer, when one chain sends a `ChanOpenInit`, the relayer should inform the other chain of this open attempt and allow that chain to decide how (and if) it continues the handshake. Once both chains have actively approved the channel opening, then the rest of the handshake can happen as it does with the current "naive" relayer. - -To implement this behavior, we propose replacing the `cbs.OnChanOpenTry` callback with a new `cbs.OnAttemptChanOpenTry` callback which explicitly handles the `MsgChannelOpenTry`, usually by resulting in a call to `keeper.ChanOpenTry`. The typical implementation, in `x/ibc-transfer/module.go` would be compatible with the current "naive" relayer, as follows: - -```go -func (am AppModule) OnAttemptChanOpenTry( - ctx sdk.Context, - chanKeeper channel.Keeper, - portCap *capability.Capability, - msg channel.MsgChannelOpenTry, -) (*sdk.Result, error) { - // Require portID is the portID transfer module is bound to - boundPort := am.keeper.GetPort(ctx) - if boundPort != msg.PortID { - return nil, sdkerrors.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", msg.PortID, boundPort) - } - - // BEGIN NEW CODE - // Assert our protocol version, overriding the relayer's suggestion. - msg.Version = types.Version - // Continue the ChanOpenTry. - res, chanCap, err := channel.HandleMsgChannelOpenTry(ctx, chanKeeper, portCap, msg) - if err != nil { - return nil, err - } - // END OF NEW CODE - - // ... the rest of the callback is similar to the existing OnChanOpenTry - // but uses msg.* directly. -``` - -Here is how this callback would be used, in the implementation of `x/ibc/handler.go`: - -```go -// ... -case channel.MsgChannelOpenTry: - // Lookup module by port capability - module, portCap, err := k.PortKeeper.LookupModuleByPort(ctx, msg.PortID) - if err != nil { - return nil, sdkerrors.Wrap(err, "could not retrieve module from port-id") - } - // Retrieve callbacks from router - cbs, ok := k.Router.GetRoute(module) - if !ok { - return nil, sdkerrors.Wrapf(port.ErrInvalidRoute, "route not found to module: %s", module) - } - // Delegate to the module's OnAttemptChanOpenTry. - return cbs.OnAttemptChanOpenTry(ctx, k.ChannelKeeper, portCap, msg) -``` - -The reason we do not have a more structured interaction between `x/ibc/handler.go` and the port's module (to explicitly negotiate versions, etc) is that we do not wish to constrain the app module to have to finish handling the `MsgChannelOpenTry` during this transaction or even this block. - -## Decision - -- Expose events to allow "passive" connection relayers. -- Enable application-initiated channels via such passive relayers. -- Allow port modules to control how to handle open-try messages. - -## Consequences - -### Positive - -Makes channels into a complete application-level abstraction. - -Applications have full control over initiating and accepting channels, rather than expecting a relayer to tell them when to do so. - -A passive relayer does not have to know what kind of channel (version string, ordering constraints, firewalling logic) the application supports. These are negotiated directly between applications. - -### Negative - -Increased event size for IBC messages. - -### Neutral - -More IBC events are exposed. - -## References - -- The Agoric VM's IBC handler currently [accomodates `attemptChanOpenTry`](https://github.com/Agoric/agoric-sdk/blob/904b3a0423222a1b32893453e44bbde598473960/packages/cosmic-swingset/lib/ag-solo/vats/ibc.js#L546) diff --git a/docs/architecture/adr-026-ibc-client-recovery-mechanisms.md b/docs/architecture/adr-026-ibc-client-recovery-mechanisms.md deleted file mode 100644 index 05f615a7aaf..00000000000 --- a/docs/architecture/adr-026-ibc-client-recovery-mechanisms.md +++ /dev/null @@ -1,90 +0,0 @@ -# ADR 026: IBC Client Recovery Mechanisms - -## Changelog - -- 2020/06/23: Initial version -- 2020/08/06: Revisions per review & to reference version -- 2021/01/15: Revision to support substitute clients for unfreezing -- 2021/05/20: Revision to simplify consensus state copying, remove initial height -- 2022/04/08: Revision to deprecate AllowUpdateAfterExpiry and AllowUpdateAfterMisbehaviour -- 2022/07/15: Revision to allow updating of TrustingPeriod -- 2023/09/05: Revision to migrate from gov v1beta1 to gov v1 - -## Status - -*Accepted* - -## Context - -### Summary - -At launch, IBC will be a novel protocol, without an experienced user-base. At the protocol layer, it is not possible to distinguish between client expiry or misbehaviour due to genuine faults (Byzantine behavior) and client expiry or misbehaviour due to user mistakes (failing to update a client, or accidentally double-signing). In the base IBC protocol and ICS 20 fungible token transfer implementation, if a client can no longer be updated, funds in that channel will be permanently locked and can no longer be transferred. To the degree that it is safe to do so, it would be preferable to provide users with a recovery mechanism which can be utilised in these exceptional cases. - -### Exceptional cases - -The state of concern is where a client associated with connection(s) and channel(s) can no longer be updated. This can happen for several reasons: - -1. The chain which the client is following has halted and is no longer producing blocks/headers, so no updates can be made to the client -1. The chain which the client is following has continued to operate, but no relayer has submitted a new header within the unbonding period, and the client has expired - 1. This could be due to real misbehaviour (intentional Byzantine behaviour) or merely a mistake by validators, but the client cannot distinguish these two cases -1. The chain which the client is following has experienced a misbehaviour event, and the client has been frozen & thus can no longer be updated - -### Security model - -Two-thirds of the validator set (the quorum for governance, module participation) can already sign arbitrary data, so allowing governance to manually force-update a client with a new header after a delay period does not substantially alter the security model. - -## Decision - -We elect not to deal with chains which have actually halted, which is necessarily Byzantine behaviour and in which case token recovery is not likely possible anyways (in-flight packets cannot be timed-out, but the relative impact of that is minor). - -1. Require Tendermint light clients (ICS 07) to be created with the following additional flags - 1. `allow_update_after_expiry` (boolean, default true). Note that this flag has been deprecated, it remains to signal intent but checks against this value will not be enforced. -1. Require Tendermint light clients (ICS 07) to expose the following additional internal query functions - 1. `Expired() boolean`, which returns whether or not the client has passed the trusting period since the last update (in which case no headers can be validated) -1. Require Tendermint light clients (ICS 07) & solo machine clients (ICS 06) to be created with the following additional flags - 1. `allow_update_after_misbehaviour` (boolean, default true). Note that this flag has been deprecated, it remains to signal intent but checks against this value will not be enforced. -1. Require Tendermint light clients (ICS 07) to expose the following additional state mutation functions - 1. `Unfreeze()`, which unfreezes a light client after misbehaviour and clears any frozen height previously set -1. Add a new governance proposal with `MsgRecoverClient`. - 1. Create a new Msg with two client identifiers (`string`) and a signer. - 1. The first client identifier is the proposed client to be updated. This client must be either frozen or expired. - 1. The second client is a substitute client. It carries all the state for the client which may be updated. It must have identitical 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. - 1. If this governance proposal passes, the client on trial will be updated to the latest state of the substitute. - 1. The signer must be the authority set for the ibc module. - - Previously, `AllowUpdateAfterExpiry` and `AllowUpdateAfterMisbehaviour` were used to signal the recovery options for an expired or frozen client, and governance proposals were not allowed to overwrite the client if these parameters were set to false. However, this has now been deprecated because a code migration can overwrite the client and consensus states regardless of the value of these parameters. 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. - - In addition, `TrustingPeriod` was initally not allowed to be updated by a client upgrade proposal. However, due to the number of situations experienced in production where the `TrustingPeriod` of a client should be allowed to be updated because of ie: initial misconfiguration for a canonical channel, governance should be allowed to update this client parameter. - - In versions older than ibc-go v8, `MsgRecoverClient` was a governance proposal type `ClientUpdateProposal`. It has been removed and replaced by `MsgRecoverClient` in the migration from governance v1beta1 to governance v1. - - Note that this should NOT be lightly updated, as there may be a gap in time between when misbehaviour has occured and when the evidence of misbehaviour is submitted. For example, if the `UnbondingPeriod` is 2 weeks and the `TrustingPeriod` has also been set to two weeks, a validator could wait until right before `UnbondingPeriod` finishes, submit false information, then unbond and exit without being slashed for misbehaviour. Therefore, we recommend that the trusting period for the 07-tendermint client be set to 2/3 of the `UnbondingPeriod`. - -Note that clients frozen due to misbehaviour must wait for the evidence to expire to avoid becoming refrozen. - -This ADR does not address planned upgrades, which are handled separately as per the [specification](https://github.com/cosmos/ibc/tree/master/spec/client/ics-007-tendermint-client#upgrades). - -## Consequences - -### Positive - -- Establishes a mechanism for client recovery in the case of expiry -- Establishes a mechanism for client recovery in the case of misbehaviour -- Constructing an ClientUpdate Proposal is as difficult as creating a new client - -### Negative - -- Additional complexity in client creation which must be understood by the user -- Coping state of the substitute adds complexity -- Governance participants must vote on a substitute client - -### Neutral - -No neutral consequences. - -## References - -- [Prior discussion](https://github.com/cosmos/ics/issues/421) -- [Epoch number discussion](https://github.com/cosmos/ics/issues/439) -- [Upgrade plan discussion](https://github.com/cosmos/ics/issues/445) -- [Migration from gov v1beta1 to gov v1](https://github.com/cosmos/ibc-go/issues/3672) diff --git a/docs/architecture/adr-027-ibc-wasm.md b/docs/architecture/adr-027-ibc-wasm.md deleted file mode 100644 index 3e1f155f3b6..00000000000 --- a/docs/architecture/adr-027-ibc-wasm.md +++ /dev/null @@ -1,149 +0,0 @@ -# ADR 27: Add support for Wasm based light client - -## Changelog - -- 26/11/2020: Initial Draft - -## Status - -*Draft, needs updates* - -## Abstract - -In the Cosmos SDK light clients are current hardcoded in Go. This makes upgrading existing IBC light clients or adding -support for new light client a multi step process involving on-chain governance which is time-consuming. - -To remedy this, we are proposing a WASM VM to host light client bytecode, which allows easier upgrading of -existing IBC light clients as well as adding support for new IBC light clients without requiring a code release and corresponding -hard-fork event. - -## Context - -Currently in the SDK, light clients are defined as part of the codebase and are implemented as submodules under -`ibc-go/core/modules/light-clients/`. - -Adding support for new light client or update an existing light client in the event of security -issue or consensus update is multi-step process which is both time consuming and error prone: - -1. To add support for new light client or update an existing light client in the - event of security issue or consensus update, we need to modify the codebase and integrate it in numerous places. - -2. Governance voting: Adding new light client implementations require governance support and is expensive: This is - not ideal as chain governance is gatekeeper for new light client implementations getting added. If a small community - want support for light client X, they may not be able to convince governance to support it. - -3. Validator upgrade: After governance voting succeeds, validators need to upgrade their nodes in order to enable new - IBC light client implementation. - -Another problem stemming from the above process is that if a chain wants to upgrade its own consensus, it will need to convince every chain -or hub connected to it to upgrade its light client in order to stay connected. Due to time consuming process required -to upgrade light client, a chain with lots of connections needs to be disconnected for quite some time after upgrading -its consensus, which can be very expensive in terms of time and effort. - -We are proposing simplifying this workflow by integrating a WASM light client module which makes adding support for -a new light client a simple transaction. The light client bytecode, written in Wasm-compilable Rust, runs inside a WASM -VM. The Wasm light client submodule exposes a proxy light client interface that routes incoming messages to the -appropriate handler function, inside the Wasm VM for execution. - -With WASM light client module, anybody can add new IBC light client in the form of WASM bytecode (provided they are able to pay the requisite gas fee for the transaction) -as well as instantiate clients using any created client type. This allows any chain to update its own light client in other chains -without going through steps outlined above. - -## Decision - -We decided to use WASM light client module as a light client proxy which will interface with the actual light client -uploaded as WASM bytecode. This will require changing client selection method to allow any client if the client type -has prefix of `wasm/`. - -```go -// IsAllowedClient checks if the given client type is registered on the allowlist. -func (p Params) IsAllowedClient(clientType string) bool { - if p.AreWASMClientsAllowed && isWASMClient(clientType) { - return true - } - - for _, allowedClient := range p.AllowedClients { - if allowedClient == clientType { - return true - } - } - - return false -} -``` - -To upload new light client, user need to create a transaction with Wasm byte code which will be -processed by IBC Wasm module. - -```go -func (k Keeper) UploadLightClient (wasmCode: []byte, description: String) { - wasmRegistry = getWASMRegistry() - id := hex.EncodeToString(sha256.Sum256(wasmCode)) - assert(!wasmRegistry.Exists(id)) - assert(wasmRegistry.ValidateAndStoreCode(id, description, wasmCode, false)) -} -``` - -As name implies, Wasm registry is a registry which stores set of Wasm client code indexed by its hash and allows -client code to retrieve latest code uploaded. - -`ValidateAndStoreCode` checks if the wasm bytecode uploaded is valid and confirms to VM interface. - -### How light client proxy works? - -The light client proxy behind the scenes will call a cosmwasm smart contract instance with incoming arguments in json -serialized format with appropriate environment information. Data returned by the smart contract is deserialized and -returned to the caller. - -Consider an example of `CheckProposedHeaderAndUpdateState` function of `ClientState` interface. Incoming arguments are -packaged inside a payload which is json serialized and passed to `callContract` which calls `vm.Execute` and returns the -array of bytes returned by the smart contract. This data is deserialized and passed as return argument. - -```go -func (c *ClientState) CheckProposedHeaderAndUpdateState(context sdk.Context, marshaler codec.BinaryMarshaler, store sdk.KVStore, header exported.ClientMessage) (exported.ClientState, exported.ConsensusState, error) { - // get consensus state corresponding to client state to check if the client is expired - consensusState, err := GetConsensusState(store, marshaler, c.LatestHeight) - if err != nil { - return nil, nil, sdkerrors.Wrapf( - err, "could not get consensus state from clientstore at height: %d", c.LatestHeight, - ) - } - - payload := make(map[string]map[string]interface{}) - payload[CheckProposedHeaderAndUpdateState] = make(map[string]interface{}) - inner := payload[CheckProposedHeaderAndUpdateState] - inner["me"] = c - inner["header"] = header - inner["consensus_state"] = consensusState - - encodedData, err := json.Marshal(payload) - if err != nil { - return nil, nil, sdkerrors.Wrapf(ErrUnableToMarshalPayload, fmt.Sprintf("underlying error: %s", err.Error())) - } - out, err := callContract(c.CodeId, context, store, encodedData) - if err != nil { - return nil, nil, sdkerrors.Wrapf(ErrUnableToCall, fmt.Sprintf("underlying error: %s", err.Error())) - } - output := clientStateCallResponse{} - if err := json.Unmarshal(out.Data, &output); err != nil { - return nil, nil, sdkerrors.Wrapf(ErrUnableToUnmarshalPayload, fmt.Sprintf("underlying error: %s", err.Error())) - } - if !output.Result.IsValid { - return nil, nil, fmt.Errorf("%s error ocurred while updating client state", output.Result.ErrorMsg) - } - output.resetImmutables(c) - return output.NewClientState, output.NewConsensusState, nil -} -``` - -## Consequences - -### Positive - -- Adding support for new light client or upgrading existing light client is way easier than before and only requires single transaction. -- Improves maintainability of Cosmos SDK, since no change in codebase is required to support new client or upgrade it. - -### Negative - -- Light clients need to be written in subset of rust which could compile in Wasm. -- Introspecting light client code is difficult as only compiled bytecode exists in the blockchain. diff --git a/docs/architecture/adr.template.md b/docs/architecture/adr.template.md deleted file mode 100644 index 7081756339c..00000000000 --- a/docs/architecture/adr.template.md +++ /dev/null @@ -1,38 +0,0 @@ -# ADR {ADR-NUMBER}: {TITLE} - -## Changelog - -- {date}: {changelog} - -## Status - -> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" once it is agreed upon. If a later ADR changes or reverses a decision, it may be marked as "deprecated" or "superseded" with a reference to its replacement. - -{Deprecated|Proposed|Accepted} - -## Context - -> This section contains all the context one needs to understand the current state, and why there is a problem. It should be as succinct as possible and introduce the high level idea behind the solution. - -## Decision - -> This section explains all of the details of the proposed solution, including implementation details. -It should also describe affects / corollary items that may need to be changed as a part of this. -If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. -(e.g. the optimal split of things to do between separate PR's) - -## Consequences - -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. - -### Positive - -### Negative - -### Neutral - -## References - -> Are there any relevant PR comments, issues that led up to this, or articles referrenced for why we made the given design choice? If so link them here! - -- {reference link} diff --git a/docs/audits/Trail of Bits audit - Final Report.pdf b/docs/audits/Trail of Bits audit - Final Report.pdf deleted file mode 100644 index 3f6182e4e98e6b4fc587a8e165f734299f69adba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1147519 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�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

xh$O@^I@xjC#7m1LQC)skF5=yU4nn6U$G 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�X6!sB5Txc9+wd%hF!Y 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

%w0*B{*Mi>(Z_)U2LK*vwXZ~)m$HaAW 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,*g|kIB_4_KG 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 z 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�_;Vj2W1eDi6xnPe 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 ZpzUlaAG~ZCjn3+3&mdTI<_5Xa6~4 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 z

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 NuoW6XK{Y+~{{rUp!#Dr{ diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595dae7d..00000000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/client/config.json b/docs/client/config.json deleted file mode 100644 index 02c537956e1..00000000000 --- a/docs/client/config.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "IBC-GO - gRPC Gateway docs", - "description": "A REST interface for state queries", - "version": "1.0.0" - }, - "apis": [ - { - "url": "./tmp-swagger-gen/ibc/applications/transfer/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "TransferParams" - } - } - }, - { - "url": "./tmp-swagger-gen/ibc/applications/interchain_accounts/controller/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "InterchainAccountsControllerParams" - } - } - }, - { - "url": "./tmp-swagger-gen/ibc/applications/interchain_accounts/host/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "InterchainAccountsHostParams" - } - } - }, - { - "url": "./tmp-swagger-gen/ibc/applications/fee/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "FeeParams" - } - } - }, - { - "url": "./tmp-swagger-gen/ibc/core/client/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "ClientParams" - } - } - }, - { - "url": "./tmp-swagger-gen/ibc/core/connection/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "ConnectionParams" - } - } - }, - { - "url": "./tmp-swagger-gen/ibc/core/channel/v1/query.swagger.json", - "operationIds": { - "rename": { - "Params": "ChannelParams" - } - } - } - ] -} diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml deleted file mode 100644 index a40c2d3b353..00000000000 --- a/docs/client/swagger-ui/swagger.yaml +++ /dev/null @@ -1,20801 +0,0 @@ -swagger: '2.0' -info: - title: IBC-GO - gRPC Gateway docs - description: A REST interface for state queries - version: 1.0.0 -paths: - /ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address: - get: - summary: >- - EscrowAddress returns the escrow address for a particular port and - channel id. - operationId: EscrowAddress - responses: - '200': - description: A successful response. - schema: - type: object - properties: - escrow_address: - type: string - title: the escrow account address - description: >- - QueryEscrowAddressResponse is the response type of the - EscrowAddress RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: channel_id - description: unique channel identifier - in: path - required: true - type: string - - name: port_id - description: unique port identifier - in: path - required: true - type: string - tags: - - Query - /ibc/apps/transfer/v1/denom_hashes/{trace}: - get: - summary: DenomHash queries a denomination hash information. - operationId: DenomHash - responses: - '200': - description: A successful response. - schema: - type: object - properties: - hash: - type: string - description: hash (in hex format) of the denomination trace information. - description: >- - QueryDenomHashResponse is the response type for the - Query/DenomHash RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: trace - description: The denomination trace ([port_id]/[channel_id])+/[denom] - in: path - required: true - type: string - tags: - - Query - /ibc/apps/transfer/v1/denom_traces: - get: - summary: DenomTraces queries all denomination traces. - operationId: DenomTraces - responses: - '200': - description: A successful response. - schema: - type: object - properties: - denom_traces: - type: array - items: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the - Query/DenomTraces RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/apps/transfer/v1/denom_traces/{hash}: - get: - summary: DenomTrace queries a denomination trace information. - operationId: DenomTrace - responses: - '200': - description: A successful response. - schema: - type: object - properties: - denom_trace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. - description: >- - QueryDenomTraceResponse is the response type for the - Query/DenomTrace RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: hash - description: >- - hash (in hex format) or denom (full denom with ibc prefix) of the - denomination trace information. - in: path - required: true - type: string - tags: - - Query - /ibc/apps/transfer/v1/denoms/{denom}/total_escrow: - get: - summary: >- - TotalEscrowForDenom returns the total amount of tokens in escrow based - on the denom. - operationId: TotalEscrowForDenom - responses: - '200': - description: A successful response. - schema: - type: object - properties: - amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - QueryTotalEscrowForDenomResponse is the response type for - TotalEscrowForDenom RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: denom - in: path - required: true - type: string - tags: - - Query - /ibc/apps/transfer/v1/params: - get: - summary: Params queries all parameters of the ibc-transfer module. - operationId: TransferParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - send_enabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token - transfers from this - - chain. - receive_enabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this - - chain. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}: - get: - summary: >- - InterchainAccount returns the interchain account address for a given - owner address on a given connection - operationId: InterchainAccount - responses: - '200': - description: A successful response. - schema: - type: object - properties: - address: - type: string - description: >- - QueryInterchainAccountResponse the response type for the - Query/InterchainAccount RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: owner - in: path - required: true - type: string - - name: connection_id - in: path - required: true - type: string - tags: - - Query - /ibc/apps/interchain_accounts/controller/v1/params: - get: - summary: Params queries all parameters of the ICA controller submodule. - operationId: InterchainAccountsControllerParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - controller_enabled: - type: boolean - description: >- - controller_enabled enables or disables the controller - submodule. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /ibc/apps/interchain_accounts/host/v1/params: - get: - summary: Params queries all parameters of the ICA host submodule. - operationId: InterchainAccountsHostParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - host_enabled: - type: boolean - description: host_enabled enables or disables the host submodule. - allow_messages: - type: array - items: - type: string - description: >- - allow_messages defines a list of sdk message typeURLs - allowed to be executed on a host chain. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled: - get: - summary: >- - FeeEnabledChannel returns true if the provided port and channel - identifiers belong to a fee enabled channel - operationId: FeeEnabledChannel - responses: - '200': - description: A successful response. - schema: - type: object - properties: - fee_enabled: - type: boolean - title: boolean flag representing the fee enabled channel status - title: >- - QueryFeeEnabledChannelResponse defines the response type for the - FeeEnabledChannel rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: unique channel identifier - in: path - required: true - type: string - - name: port_id - description: unique port identifier - in: path - required: true - type: string - tags: - - Query - /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets: - get: - summary: Gets all incentivized packets for a specific channel - operationId: IncentivizedPacketsForChannel - responses: - '200': - description: A successful response. - schema: - type: object - properties: - incentivized_packets: - type: array - items: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, - port ID and sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees - associated with an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: >- - optional list of relayers permitted to receive - fees - title: >- - PacketFee contains ICS29 relayer fees, refund address - and optional list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and - associated PacketId - title: Map of all incentivized_packets - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryIncentivizedPacketsResponse defines the response type for the - incentivized packets RPC - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - in: path - required: true - type: string - - name: port_id - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - - name: query_height - description: Height to query at. - in: query - required: false - type: string - format: uint64 - tags: - - Query - /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee: - get: - summary: >- - CounterpartyPayee returns the registered counterparty payee for forward - relaying - operationId: CounterpartyPayee - responses: - '200': - description: A successful response. - schema: - type: object - properties: - counterparty_payee: - type: string - title: >- - the counterparty payee address used to compensate forward - relaying - title: >- - QueryCounterpartyPayeeResponse defines the response type for the - CounterpartyPayee rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: unique channel identifier - in: path - required: true - type: string - - name: relayer - description: the relayer address to which the counterparty is registered - in: path - required: true - type: string - tags: - - Query - /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee: - get: - summary: >- - Payee returns the registered payee address for a specific channel given - the relayer address - operationId: Payee - responses: - '200': - description: A successful response. - schema: - type: object - properties: - payee_address: - type: string - title: the payee address to which packet fees are paid out - title: QueryPayeeResponse defines the response type for the Payee rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: unique channel identifier - in: path - required: true - type: string - - name: relayer - description: the relayer address to which the distribution address is registered - in: path - required: true - type: string - tags: - - Query - /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/incentivized_packet: - get: - summary: >- - IncentivizedPacket returns all packet fees for a packet given its - identifier - operationId: IncentivizedPacket - responses: - '200': - description: A successful response. - schema: - type: object - properties: - incentivized_packet: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, port - ID and sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees - associated with an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: optional list of relayers permitted to receive fees - title: >- - PacketFee contains ICS29 relayer fees, refund address - and optional list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and - associated PacketId - title: >- - QueryIncentivizedPacketsResponse defines the response type for the - IncentivizedPacket rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: packet_id.channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: packet_id.port_id - description: channel port identifier - in: path - required: true - type: string - - name: packet_id.sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - - name: query_height - description: block height at which to query. - in: query - required: false - type: string - format: uint64 - tags: - - Query - /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_ack_fees: - get: - summary: >- - TotalAckFees returns the total acknowledgement fees for a packet given - its identifier - operationId: TotalAckFees - responses: - '200': - description: A successful response. - schema: - type: object - properties: - ack_fees: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: the total packet acknowledgement fees - title: >- - QueryTotalAckFeesResponse defines the response type for the - TotalAckFees rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: packet_id.channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: packet_id.port_id - description: channel port identifier - in: path - required: true - type: string - - name: packet_id.sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_recv_fees: - get: - summary: >- - TotalRecvFees returns the total receive fees for a packet given its - identifier - operationId: TotalRecvFees - responses: - '200': - description: A successful response. - schema: - type: object - properties: - recv_fees: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: the total packet receive fees - title: >- - QueryTotalRecvFeesResponse defines the response type for the - TotalRecvFees rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: packet_id.channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: packet_id.port_id - description: channel port identifier - in: path - required: true - type: string - - name: packet_id.sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_timeout_fees: - get: - summary: >- - TotalTimeoutFees returns the total timeout fees for a packet given its - identifier - operationId: TotalTimeoutFees - responses: - '200': - description: A successful response. - schema: - type: object - properties: - timeout_fees: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: the total packet timeout fees - title: >- - QueryTotalTimeoutFeesResponse defines the response type for the - TotalTimeoutFees rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: packet_id.channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: packet_id.port_id - description: channel port identifier - in: path - required: true - type: string - - name: packet_id.sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/apps/fee/v1/fee_enabled: - get: - summary: FeeEnabledChannels returns a list of all fee enabled channels - operationId: FeeEnabledChannels - responses: - '200': - description: A successful response. - schema: - type: object - properties: - fee_enabled_channels: - type: array - items: - type: object - properties: - port_id: - type: string - title: unique port identifier - channel_id: - type: string - title: unique channel identifier - title: >- - FeeEnabledChannel contains the PortID & ChannelID for a fee - enabled channel - title: list of fee enabled channels - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryFeeEnabledChannelsResponse defines the response type for the - FeeEnabledChannels rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - - name: query_height - description: block height at which to query. - in: query - required: false - type: string - format: uint64 - tags: - - Query - /ibc/apps/fee/v1/incentivized_packets: - get: - summary: >- - IncentivizedPackets returns all incentivized packets and their - associated fees - operationId: IncentivizedPackets - responses: - '200': - description: A successful response. - schema: - type: object - properties: - incentivized_packets: - type: array - items: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, - port ID and sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees - associated with an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and - an amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: >- - optional list of relayers permitted to receive - fees - title: >- - PacketFee contains ICS29 relayer fees, refund address - and optional list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and - associated PacketId - title: list of identified fees for incentivized packets - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryIncentivizedPacketsResponse defines the response type for the - IncentivizedPackets rpc - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - - name: query_height - description: block height at which to query. - in: query - required: false - type: string - format: uint64 - tags: - - Query - /ibc/core/client/v1/client_states: - get: - summary: ClientStates queries all the IBC light clients of a chain. - operationId: ClientStates - responses: - '200': - description: A successful response. - schema: - type: object - properties: - client_states: - type: array - items: - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - description: >- - QueryClientStatesResponse is the response type for the - Query/ClientStates RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/client/v1/client_states/{client_id}: - get: - summary: ClientState queries an IBC light client. - operationId: ClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state associated with the request identifier - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryClientStateResponse is the response type for the - Query/ClientState RPC - - method. Besides the client state, it includes a proof and the - height from - - which the proof was retrieved. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: client_id - description: client state unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/client/v1/client_status/{client_id}: - get: - summary: Status queries the status of an IBC client. - operationId: ClientStatus - responses: - '200': - description: A successful response. - schema: - type: object - properties: - status: - type: string - description: >- - QueryClientStatusResponse is the response type for the - Query/ClientStatus RPC - - method. It returns the current status of the IBC client. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: client_id - description: client unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/client/v1/consensus_states/{client_id}: - get: - summary: |- - ConsensusStates queries all the consensus state associated with a given - client. - operationId: ConsensusStates - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensus_states: - type: array - items: - type: object - properties: - height: - title: consensus state height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each - height while keeping - - RevisionNumber the same. However some consensus - algorithms may choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as - the RevisionHeight - - gets reset - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state - description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height - - field. - title: consensus states associated with the identifier - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: client_id - description: client identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/client/v1/consensus_states/{client_id}/heights: - get: - summary: >- - ConsensusStateHeights queries the height of every consensus states - associated with a given client. - operationId: ConsensusStateHeights - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensus_state_heights: - type: array - items: - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms - may choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - Height is a monotonically increasing data type - - that can be compared against another Height for the purposes - of updating and - - freezing clients - title: consensus state heights - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStateHeightsResponse is the response type for the - Query/ConsensusStateHeights RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: client_id - description: client identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}: - get: - summary: >- - ConsensusState queries a consensus state associated with a client state - at - - a given height. - operationId: ConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: >- - consensus state associated with the client identifier at the - given height - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - Height is a monotonically increasing data type - - that can be compared against another Height for the purposes - of updating and - - freezing clients - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState - - RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: client_id - description: client identifier - in: path - required: true - type: string - - name: revision_number - description: consensus state revision number - in: path - required: true - type: string - format: uint64 - - name: revision_height - description: consensus state revision height - in: path - required: true - type: string - format: uint64 - - name: latest_height - description: >- - latest_height overrrides the height field and queries the latest - stored - - ConsensusState. - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/client/v1/params: - get: - summary: ClientParams queries all parameters of the ibc client submodule. - operationId: ClientParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - allowed_clients: - type: array - items: - type: string - description: >- - allowed_clients defines the list of allowed client state - types which can be created - - and interacted with. If a client type is removed from the - allowed clients list, usage - - of this client will be disabled until it is added again to - the list. - description: >- - QueryClientParamsResponse is the response type for the - Query/ClientParams RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /ibc/core/client/v1/upgraded_client_states: - get: - summary: UpgradedClientState queries an Upgraded IBC light client. - operationId: UpgradedClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - upgraded_client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state associated with the request identifier - description: |- - QueryUpgradedClientStateResponse is the response type for the - Query/UpgradedClientState RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /ibc/core/client/v1/upgraded_consensus_states: - get: - summary: UpgradedConsensusState queries an Upgraded IBC consensus state. - operationId: UpgradedConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - upgraded_consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: Consensus state associated with the request identifier - description: |- - QueryUpgradedConsensusStateResponse is the response type for the - Query/UpgradedConsensusState RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /ibc/core/connection/v1/client_connections/{client_id}: - get: - summary: |- - ClientConnections queries the connection paths associated with a client - state. - operationId: ClientConnections - responses: - '200': - description: A successful response. - schema: - type: object - properties: - connection_paths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was generated - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: client_id - description: client identifier associated with a connection - in: path - required: true - type: string - tags: - - Query - /ibc/core/connection/v1/connections: - get: - summary: Connections queries all the IBC connections of a chain. - operationId: Connections - responses: - '200': - description: A successful response. - schema: - type: object - properties: - connections: - type: array - items: - type: object - properties: - id: - type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: >- - list of features compatible with the specified - identifier - description: >- - Version defines the versioning scheme used to - negotiate the IBC verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings - or protocols for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain - associated with a given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will - be append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delay_period: - type: string - format: uint64 - description: delay period associated with this connection. - description: >- - IdentifiedConnection defines a connection with additional - connection - - identifier field. - description: list of stored connections of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryConnectionsResponse is the response type for the - Query/Connections RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/connection/v1/connections/{connection_id}: - get: - summary: Connection queries an IBC connection end. - operationId: Connection - responses: - '200': - description: A successful response. - schema: - type: object - properties: - connection: - title: connection associated with the request identifier - type: object - properties: - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: >- - list of features compatible with the specified - identifier - description: >- - Version defines the versioning scheme used to negotiate - the IBC verison in - - the connection handshake. - description: >- - IBC version which can be utilised to determine encodings - or protocols for - - channels or packets utilising this connection. - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain - associated with a given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delay_period: - type: string - format: uint64 - description: >- - delay period that must pass before a consensus state can - be used for - - packet-verification NOTE: delay period logic is only - implemented by some - - clients. - description: >- - ConnectionEnd defines a stateful object on a chain connected - to another - - separate one. - - NOTE: there must only be 2 defined ConnectionEnds to establish - - a connection between two chains. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryConnectionResponse is the response type for the - Query/Connection RPC - - method. Besides the connection end, it includes a proof and the - height from - - which the proof was retrieved. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/connection/v1/connections/{connection_id}/client_state: - get: - summary: |- - ConnectionClientState queries the client state associated with the - connection. - operationId: ConnectionClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}: - get: - summary: |- - ConnectionConsensusState queries the consensus state associated with the - connection. - operationId: ConnectionConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection identifier - in: path - required: true - type: string - - name: revision_number - in: path - required: true - type: string - format: uint64 - - name: revision_height - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/core/connection/v1/params: - get: - summary: ConnectionParams queries all parameters of the ibc connection submodule. - operationId: ConnectionParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - max_expected_time_per_block: - type: string - format: uint64 - description: >- - maximum expected time per block (in nanoseconds), used to - enforce block delay. This parameter should reflect the - - largest amount of time that the chain might reasonably - take to produce the next block under normal operating - - conditions. A safe choice is 3-5x the expected time per - block. - description: >- - QueryConnectionParamsResponse is the response type for the - Query/ConnectionParams RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /ibc/core/channel/v1/channels: - get: - summary: Channels queries all the IBC channels of a chain. - operationId: Channels - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or - UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt - performed by this channel - - the value of 0 indicates the channel has never been - upgraded - description: >- - IdentifiedChannel defines a channel with additional port and - channel - - identifier fields. - description: list of stored channels of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryChannelsResponse is the response type for the Query/Channels - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}: - get: - summary: Channel queries an IBC Channel. - operationId: Channel - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channel: - title: channel associated with the request identifiers - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or - UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt - performed by this channel - - the value of 0 indicates the channel has never been - upgraded - description: >- - Channel defines pipeline for exactly-once packet delivery - between specific - - modules on separate blockchains, which has at least one end - capable of - - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryChannelResponse is the response type for the Query/Channel - RPC method. - - Besides the Channel end, it includes a proof and the height from - which the - - proof was retrieved. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state: - get: - summary: >- - ChannelClientState queries for the client state for the channel - associated - - with the provided channel identifiers. - operationId: ChannelClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}: - get: - summary: |- - ChannelConsensusState queries for the consensus state for the channel - associated with the provided channel identifiers. - operationId: ChannelConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: revision_number - description: revision number of the consensus state - in: path - required: true - type: string - format: uint64 - - name: revision_height - description: revision height of the consensus state - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence: - get: - summary: >- - NextSequenceReceive returns the next receive sequence for a given - channel. - operationId: NextSequenceReceive - responses: - '200': - description: A successful response. - schema: - type: object - properties: - next_sequence_receive: - type: string - format: uint64 - title: next sequence receive number - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QuerySequenceResponse is the response type for the - Query/QueryNextSequenceReceiveResponse RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send: - get: - summary: NextSequenceSend returns the next send sequence for a given channel. - operationId: NextSequenceSend - responses: - '200': - description: A successful response. - schema: - type: object - properties: - next_sequence_send: - type: string - format: uint64 - title: next sequence send number - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryNextSequenceSendResponse is the request type for the - Query/QueryNextSequenceSend RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements: - get: - summary: >- - PacketAcknowledgements returns all the packet acknowledgements - associated - - with a channel. - operationId: PacketAcknowledgements - responses: - '200': - description: A successful response. - schema: - type: object - properties: - acknowledgements: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve - and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to - interpret this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryPacketAcknowledgemetsResponse is the request type for the - Query/QueryPacketAcknowledgements RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - - name: packet_commitment_sequences - description: list of packet sequences. - in: query - required: false - type: array - items: - type: string - format: uint64 - collectionFormat: multi - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}: - get: - summary: PacketAcknowledgement queries a stored packet acknowledgement hash. - operationId: PacketAcknowledgement - responses: - '200': - description: A successful response. - schema: - type: object - properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryPacketAcknowledgementResponse defines the client query - response for a - - packet which also includes a proof and the height from which the - - proof was retrieved - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments: - get: - summary: |- - PacketCommitments returns all the packet commitments hashes associated - with a channel. - operationId: PacketCommitments - responses: - '200': - description: A successful response. - schema: - type: object - properties: - commitments: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve - and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to - interpret this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks: - get: - summary: >- - UnreceivedAcks returns all the unreceived IBC acknowledgements - associated - - with a channel and sequences. - operationId: UnreceivedAcks - responses: - '200': - description: A successful response. - schema: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived acknowledgement sequences - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryUnreceivedAcksResponse is the response type for the - Query/UnreceivedAcks RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: packet_ack_sequences - description: list of acknowledgement sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets: - get: - summary: >- - UnreceivedPackets returns all the unreceived IBC packets associated with - a - - channel and sequences. - operationId: UnreceivedPackets - responses: - '200': - description: A successful response. - schema: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: packet_commitment_sequences - description: list of packet sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}: - get: - summary: PacketCommitment queries a stored packet commitment hash. - operationId: PacketCommitment - responses: - '200': - description: A successful response. - schema: - type: object - properties: - commitment: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryPacketCommitmentResponse defines the client query response - for a packet - - which also includes a proof and the height from which the proof - was - - retrieved - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}: - get: - summary: >- - PacketReceipt queries if a given packet sequence has been received on - the - - queried chain - operationId: PacketReceipt - responses: - '200': - description: A successful response. - schema: - type: object - properties: - received: - type: boolean - title: success flag for if receipt exists - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryPacketReceiptResponse defines the client query response for a - packet - - receipt which also includes a proof, and the height from which the - proof was - - retrieved - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade: - get: - summary: Upgrade returns the upgrade for a given port and channel id. - operationId: Upgrade - responses: - '200': - description: A successful response. - schema: - type: object - properties: - upgrade: - type: object - properties: - fields: - type: object - properties: - ordering: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - connection_hops: - type: array - items: - type: string - version: - type: string - description: >- - UpgradeFields are the fields in a channel end which may be - changed - - during a channel upgrade. - timeout: - type: object - properties: - height: - title: >- - block height after which the packet or upgrade times - out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each - height while keeping - - RevisionNumber the same. However some consensus - algorithms may choose to - - reset the height in certain conditions e.g. hard - forks, state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even - as the RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the - packet or upgrade times out - description: >- - Timeout defines an execution deadline structure for - 04-channel handlers. - - This includes packet lifecycle handlers as well as the - upgrade handshake handlers. - - A valid Timeout contains either one or both of a timestamp - and block height (sequence). - next_sequence_send: - type: string - format: uint64 - description: >- - Upgrade is a verifiable type which contains the relevant - information - - for an attempted upgrade. It provides the proposed changes to - the channel - - end, the timeout for this upgrade attempt and the next packet - sequence - - which allows the counterparty to efficiently know the highest - sequence it has received. - - The next sequence send is used for pruning and upgrading from - unordered to ordered channels. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryUpgradeResponse is the response type for the - QueryUpgradeResponse RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - in: path - required: true - type: string - - name: port_id - in: path - required: true - type: string - tags: - - Query - /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade_error: - get: - summary: UpgradeError returns the error receipt if the upgrade handshake failed. - operationId: UpgradeError - responses: - '200': - description: A successful response. - schema: - type: object - properties: - error_receipt: - type: object - properties: - sequence: - type: string - format: uint64 - title: the channel upgrade sequence - message: - type: string - title: the error message detailing the cause of failure - description: >- - ErrorReceipt defines a type which encapsulates the upgrade - sequence and error associated with the - - upgrade handshake failure. When a channel upgrade handshake is - aborted both chains are expected to increment to the - - next sequence. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryUpgradeErrorResponse is the response type for the - Query/QueryUpgradeError RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channel_id - in: path - required: true - type: string - - name: port_id - in: path - required: true - type: string - tags: - - Query - /ibc/core/channel/v1/connections/{connection}/channels: - get: - summary: |- - ConnectionChannels queries all the channels associated with a connection - end. - operationId: ConnectionChannels - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or - UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt - performed by this channel - - the value of 0 indicates the channel has never been - upgraded - description: >- - IdentifiedChannel defines a channel with additional port and - channel - - identifier fields. - description: list of channels associated with a connection. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection - description: connection unique identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/core/channel/v1/params: - get: - summary: ChannelParams queries all parameters of the ibc channel submodule. - operationId: ChannelParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - upgrade_timeout: - type: object - properties: - height: - title: >- - block height after which the packet or upgrade times - out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each - height while keeping - - RevisionNumber the same. However some consensus - algorithms may choose to - - reset the height in certain conditions e.g. hard - forks, state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even - as the RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the - packet or upgrade times out - description: >- - Timeout defines an execution deadline structure for - 04-channel handlers. - - This includes packet lifecycle handlers as well as the - upgrade handshake handlers. - - A valid Timeout contains either one or both of a timestamp - and block height (sequence). - description: >- - QueryChannelParamsResponse is the response type for the - Query/ChannelParams RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query -definitions: - cosmos.base.query.v1beta1.PageRequest: - type: object - properties: - key: - type: string - format: byte - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - offset: - type: string - format: uint64 - description: |- - offset is a numeric offset that can be used when key is unavailable. - It is less efficient than using key. Only one of offset or key should - be set. - limit: - type: string - format: uint64 - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - count_total: - type: boolean - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in UIs. - - count_total is only respected when offset is used. It is ignored when - key - - is set. - reverse: - type: boolean - description: >- - reverse is set to true if results are to be returned in the descending - order. - - - Since: cosmos-sdk 0.43 - description: |- - message SomeRequest { - Foo some_parameter = 1; - PageRequest pagination = 2; - } - title: |- - PageRequest is to be embedded in gRPC request messages for efficient - pagination. Ex: - cosmos.base.query.v1beta1.PageResponse: - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: |- - total is total number of results available if PageRequest.count_total - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - cosmos.base.v1beta1.Coin: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - google.protobuf.Any: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a canonical - form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types that - they - - expect it to use in the context of Any. However, for URLs which use - the - - scheme `http`, `https`, or no scheme, one can optionally set up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along with - a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - grpc.gateway.runtime.Error: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up - a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - ibc.applications.transfer.v1.DenomTrace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for tracing - the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens and - the - - source tracing information path. - ibc.applications.transfer.v1.Params: - type: object - properties: - send_enabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token transfers from - this - - chain. - receive_enabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token transfers to - this - - chain. - description: >- - Params defines the set of IBC transfer parameters. - - NOTE: To prevent a single token from being transferred, set the - - TransfersEnabled parameter to true and then set the bank module's - SendEnabled - - parameter for the denomination to false. - ibc.applications.transfer.v1.QueryDenomHashResponse: - type: object - properties: - hash: - type: string - description: hash (in hex format) of the denomination trace information. - description: |- - QueryDenomHashResponse is the response type for the Query/DenomHash RPC - method. - ibc.applications.transfer.v1.QueryDenomTraceResponse: - type: object - properties: - denom_trace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the - - source tracing information path. - description: |- - QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC - method. - ibc.applications.transfer.v1.QueryDenomTracesResponse: - type: object - properties: - denom_traces: - type: array - items: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the - - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the Query/DenomTraces - RPC - - method. - ibc.applications.transfer.v1.QueryEscrowAddressResponse: - type: object - properties: - escrow_address: - type: string - title: the escrow account address - description: >- - QueryEscrowAddressResponse is the response type of the EscrowAddress RPC - method. - ibc.applications.transfer.v1.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - send_enabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token transfers - from this - - chain. - receive_enabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this - - chain. - description: QueryParamsResponse is the response type for the Query/Params RPC method. - ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse: - type: object - properties: - amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: >- - QueryTotalEscrowForDenomResponse is the response type for - TotalEscrowForDenom RPC method. - ibc.applications.interchain_accounts.controller.v1.Params: - type: object - properties: - controller_enabled: - type: boolean - description: controller_enabled enables or disables the controller submodule. - description: |- - Params defines the set of on-chain interchain accounts parameters. - The following parameters may be used to disable the controller submodule. - ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse: - type: object - properties: - address: - type: string - description: >- - QueryInterchainAccountResponse the response type for the - Query/InterchainAccount RPC method. - ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - controller_enabled: - type: boolean - description: controller_enabled enables or disables the controller submodule. - description: QueryParamsResponse is the response type for the Query/Params RPC method. - ibc.applications.interchain_accounts.host.v1.Params: - type: object - properties: - host_enabled: - type: boolean - description: host_enabled enables or disables the host submodule. - allow_messages: - type: array - items: - type: string - description: >- - allow_messages defines a list of sdk message typeURLs allowed to be - executed on a host chain. - description: |- - Params defines the set of on-chain interchain accounts parameters. - The following parameters may be used to disable the host submodule. - ibc.applications.interchain_accounts.host.v1.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - host_enabled: - type: boolean - description: host_enabled enables or disables the host submodule. - allow_messages: - type: array - items: - type: string - description: >- - allow_messages defines a list of sdk message typeURLs allowed to - be executed on a host chain. - description: QueryParamsResponse is the response type for the Query/Params RPC method. - ibc.applications.fee.v1.Fee: - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: the packet timeout fee - title: Fee defines the ICS29 receive, acknowledgement and timeout fees - ibc.applications.fee.v1.FeeEnabledChannel: - type: object - properties: - port_id: - type: string - title: unique port identifier - channel_id: - type: string - title: unique channel identifier - title: >- - FeeEnabledChannel contains the PortID & ChannelID for a fee enabled - channel - ibc.applications.fee.v1.IdentifiedPacketFees: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, port ID and - sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees associated with - an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: optional list of relayers permitted to receive fees - title: >- - PacketFee contains ICS29 relayer fees, refund address and optional - list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and associated - PacketId - ibc.applications.fee.v1.PacketFee: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees associated with an IBC - packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: optional list of relayers permitted to receive fees - title: >- - PacketFee contains ICS29 relayer fees, refund address and optional list of - permitted relayers - ibc.applications.fee.v1.QueryCounterpartyPayeeResponse: - type: object - properties: - counterparty_payee: - type: string - title: the counterparty payee address used to compensate forward relaying - title: >- - QueryCounterpartyPayeeResponse defines the response type for the - CounterpartyPayee rpc - ibc.applications.fee.v1.QueryFeeEnabledChannelResponse: - type: object - properties: - fee_enabled: - type: boolean - title: boolean flag representing the fee enabled channel status - title: >- - QueryFeeEnabledChannelResponse defines the response type for the - FeeEnabledChannel rpc - ibc.applications.fee.v1.QueryFeeEnabledChannelsResponse: - type: object - properties: - fee_enabled_channels: - type: array - items: - type: object - properties: - port_id: - type: string - title: unique port identifier - channel_id: - type: string - title: unique channel identifier - title: >- - FeeEnabledChannel contains the PortID & ChannelID for a fee enabled - channel - title: list of fee enabled channels - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryFeeEnabledChannelsResponse defines the response type for the - FeeEnabledChannels rpc - ibc.applications.fee.v1.QueryIncentivizedPacketResponse: - type: object - properties: - incentivized_packet: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, port ID and - sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees associated - with an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: optional list of relayers permitted to receive fees - title: >- - PacketFee contains ICS29 relayer fees, refund address and - optional list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and associated - PacketId - title: >- - QueryIncentivizedPacketsResponse defines the response type for the - IncentivizedPacket rpc - ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse: - type: object - properties: - incentivized_packets: - type: array - items: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, port ID - and sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees associated - with an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: optional list of relayers permitted to receive fees - title: >- - PacketFee contains ICS29 relayer fees, refund address and - optional list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and - associated PacketId - title: Map of all incentivized_packets - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryIncentivizedPacketsResponse defines the response type for the - incentivized packets RPC - ibc.applications.fee.v1.QueryIncentivizedPacketsResponse: - type: object - properties: - incentivized_packets: - type: array - items: - type: object - properties: - packet_id: - title: >- - unique packet identifier comprised of the channel ID, port ID - and sequence - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - packet_fees: - type: array - items: - type: object - properties: - fee: - title: >- - fee encapsulates the recv, ack and timeout fees associated - with an IBC packet - type: object - properties: - recv_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - title: the packet receive fee - ack_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - title: the packet acknowledgement fee - timeout_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - title: the packet timeout fee - refund_address: - type: string - title: the refund address for unspent fees - relayers: - type: array - items: - type: string - title: optional list of relayers permitted to receive fees - title: >- - PacketFee contains ICS29 relayer fees, refund address and - optional list of permitted relayers - title: list of packet fees - title: >- - IdentifiedPacketFees contains a list of type PacketFee and - associated PacketId - title: list of identified fees for incentivized packets - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryIncentivizedPacketsResponse defines the response type for the - IncentivizedPackets rpc - ibc.applications.fee.v1.QueryPayeeResponse: - type: object - properties: - payee_address: - type: string - title: the payee address to which packet fees are paid out - title: QueryPayeeResponse defines the response type for the Payee rpc - ibc.applications.fee.v1.QueryTotalAckFeesResponse: - type: object - properties: - ack_fees: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: the total packet acknowledgement fees - title: >- - QueryTotalAckFeesResponse defines the response type for the TotalAckFees - rpc - ibc.applications.fee.v1.QueryTotalRecvFeesResponse: - type: object - properties: - recv_fees: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: the total packet receive fees - title: >- - QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees - rpc - ibc.applications.fee.v1.QueryTotalTimeoutFeesResponse: - type: object - properties: - timeout_fees: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: the total packet timeout fees - title: >- - QueryTotalTimeoutFeesResponse defines the response type for the - TotalTimeoutFees rpc - ibc.core.channel.v1.PacketId: - type: object - properties: - port_id: - type: string - title: channel port identifier - channel_id: - type: string - title: channel unique identifier - sequence: - type: string - format: uint64 - title: packet sequence - title: |- - PacketId is an identifer for a unique Packet - Source chains refer to packets by source port/channel - Destination chains refer to packets by destination port/channel - ibc.core.client.v1.ConsensusStateWithHeight: - type: object - properties: - height: - title: consensus state height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state - description: >- - ConsensusStateWithHeight defines a consensus state with an additional - height - - field. - ibc.core.client.v1.Height: - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: |- - Normally the RevisionHeight is incremented at each height while keeping - RevisionNumber the same. However some consensus algorithms may choose to - reset the height in certain conditions e.g. hard forks, state-machine - breaking changes In these cases, the RevisionNumber is incremented so that - height continues to be monitonically increasing even as the RevisionHeight - gets reset - title: >- - Height is a monotonically increasing data type - - that can be compared against another Height for the purposes of updating - and - - freezing clients - ibc.core.client.v1.IdentifiedClientState: - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - ibc.core.client.v1.Params: - type: object - properties: - allowed_clients: - type: array - items: - type: string - description: >- - allowed_clients defines the list of allowed client state types which - can be created - - and interacted with. If a client type is removed from the allowed - clients list, usage - - of this client will be disabled until it is added again to the list. - description: Params defines the set of IBC light client parameters. - ibc.core.client.v1.QueryClientParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - allowed_clients: - type: array - items: - type: string - description: >- - allowed_clients defines the list of allowed client state types - which can be created - - and interacted with. If a client type is removed from the allowed - clients list, usage - - of this client will be disabled until it is added again to the - list. - description: >- - QueryClientParamsResponse is the response type for the Query/ClientParams - RPC - - method. - ibc.core.client.v1.QueryClientStateResponse: - type: object - properties: - client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state associated with the request identifier - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryClientStateResponse is the response type for the Query/ClientState - RPC - - method. Besides the client state, it includes a proof and the height from - - which the proof was retrieved. - ibc.core.client.v1.QueryClientStatesResponse: - type: object - properties: - client_states: - type: array - items: - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an additional - client - - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - description: >- - QueryClientStatesResponse is the response type for the Query/ClientStates - RPC - - method. - ibc.core.client.v1.QueryClientStatusResponse: - type: object - properties: - status: - type: string - description: >- - QueryClientStatusResponse is the response type for the Query/ClientStatus - RPC - - method. It returns the current status of the IBC client. - ibc.core.client.v1.QueryConsensusStateHeightsResponse: - type: object - properties: - consensus_state_heights: - type: array - items: - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is incremented - so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - Height is a monotonically increasing data type - - that can be compared against another Height for the purposes of - updating and - - freezing clients - title: consensus state heights - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStateHeightsResponse is the response type for the - Query/ConsensusStateHeights RPC method - ibc.core.client.v1.QueryConsensusStateResponse: - type: object - properties: - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: >- - consensus state associated with the client identifier at the given - height - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - Height is a monotonically increasing data type - - that can be compared against another Height for the purposes of - updating and - - freezing clients - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState - - RPC method - ibc.core.client.v1.QueryConsensusStatesResponse: - type: object - properties: - consensus_states: - type: array - items: - type: object - properties: - height: - title: consensus state height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state - description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height - - field. - title: consensus states associated with the identifier - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method - ibc.core.client.v1.QueryUpgradedClientStateResponse: - type: object - properties: - upgraded_client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state associated with the request identifier - description: |- - QueryUpgradedClientStateResponse is the response type for the - Query/UpgradedClientState RPC method. - ibc.core.client.v1.QueryUpgradedConsensusStateResponse: - type: object - properties: - upgraded_consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: Consensus state associated with the request identifier - description: |- - QueryUpgradedConsensusStateResponse is the response type for the - Query/UpgradedConsensusState RPC method. - ibc.core.commitment.v1.MerklePrefix: - type: object - properties: - key_prefix: - type: string - format: byte - title: |- - MerklePrefix is merkle path prefixed to the key. - The constructed key from the Path and the key will be append(Path.KeyPath, - append(Path.KeyPrefix, key...)) - ibc.core.connection.v1.ConnectionEnd: - type: object - properties: - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - description: >- - IBC version which can be utilised to determine encodings or protocols - for - - channels or packets utilising this connection. - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delay_period: - type: string - format: uint64 - description: >- - delay period that must pass before a consensus state can be used for - - packet-verification NOTE: delay period logic is only implemented by - some - - clients. - description: |- - ConnectionEnd defines a stateful object on a chain connected to another - separate one. - NOTE: there must only be 2 defined ConnectionEnds to establish - a connection between two chains. - ibc.core.connection.v1.Counterparty: - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - description: >- - Counterparty defines the counterparty chain associated with a connection - end. - ibc.core.connection.v1.IdentifiedConnection: - type: object - properties: - id: - type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or protocols - for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delay_period: - type: string - format: uint64 - description: delay period associated with this connection. - description: |- - IdentifiedConnection defines a connection with additional connection - identifier field. - ibc.core.connection.v1.Params: - type: object - properties: - max_expected_time_per_block: - type: string - format: uint64 - description: >- - maximum expected time per block (in nanoseconds), used to enforce - block delay. This parameter should reflect the - - largest amount of time that the chain might reasonably take to produce - the next block under normal operating - - conditions. A safe choice is 3-5x the expected time per block. - description: Params defines the set of Connection parameters. - ibc.core.connection.v1.QueryClientConnectionsResponse: - type: object - properties: - connection_paths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was generated - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method - ibc.core.connection.v1.QueryConnectionClientStateResponse: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method - ibc.core.connection.v1.QueryConnectionConsensusStateResponse: - type: object - properties: - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method - ibc.core.connection.v1.QueryConnectionParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - max_expected_time_per_block: - type: string - format: uint64 - description: >- - maximum expected time per block (in nanoseconds), used to enforce - block delay. This parameter should reflect the - - largest amount of time that the chain might reasonably take to - produce the next block under normal operating - - conditions. A safe choice is 3-5x the expected time per block. - description: >- - QueryConnectionParamsResponse is the response type for the - Query/ConnectionParams RPC method. - ibc.core.connection.v1.QueryConnectionResponse: - type: object - properties: - connection: - title: connection associated with the request identifier - type: object - properties: - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - description: >- - IBC version which can be utilised to determine encodings or - protocols for - - channels or packets utilising this connection. - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated - with a given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain - associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delay_period: - type: string - format: uint64 - description: >- - delay period that must pass before a consensus state can be used - for - - packet-verification NOTE: delay period logic is only implemented - by some - - clients. - description: >- - ConnectionEnd defines a stateful object on a chain connected to - another - - separate one. - - NOTE: there must only be 2 defined ConnectionEnds to establish - - a connection between two chains. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryConnectionResponse is the response type for the Query/Connection RPC - - method. Besides the connection end, it includes a proof and the height - from - - which the proof was retrieved. - ibc.core.connection.v1.QueryConnectionsResponse: - type: object - properties: - connections: - type: array - items: - type: object - properties: - id: - type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the - IBC verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or - protocols for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated - with a given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain - associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - key_prefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delay_period: - type: string - format: uint64 - description: delay period associated with this connection. - description: |- - IdentifiedConnection defines a connection with additional connection - identifier field. - description: list of stored connections of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryConnectionsResponse is the response type for the Query/Connections - RPC - - method. - ibc.core.connection.v1.State: - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a connection is in one of the following states: - INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A connection end has just started the opening handshake. - - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty - chain. - - STATE_OPEN: A connection end has completed the handshake. - ibc.core.connection.v1.Version: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: |- - Version defines the versioning scheme used to negotiate the IBC verison in - the connection handshake. - ibc.core.channel.v1.Channel: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: |- - list of connection identifiers, in order, along which packets sent on - this channel will travel - version: - type: string - title: opaque channel version, which is agreed upon during the handshake - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt performed by - this channel - - the value of 0 indicates the channel has never been upgraded - description: |- - Channel defines pipeline for exactly-once packet delivery between specific - modules on separate blockchains, which has at least one end capable of - sending packets and one end capable of receiving packets. - ibc.core.channel.v1.Counterparty: - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: - type: string - title: channel end on the counterparty chain - title: Counterparty defines a channel end counterparty - ibc.core.channel.v1.ErrorReceipt: - type: object - properties: - sequence: - type: string - format: uint64 - title: the channel upgrade sequence - message: - type: string - title: the error message detailing the cause of failure - description: >- - ErrorReceipt defines a type which encapsulates the upgrade sequence and - error associated with the - - upgrade handshake failure. When a channel upgrade handshake is aborted - both chains are expected to increment to the - - next sequence. - ibc.core.channel.v1.IdentifiedChannel: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: |- - list of connection identifiers, in order, along which packets sent on - this channel will travel - version: - type: string - title: opaque channel version, which is agreed upon during the handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt performed by - this channel - - the value of 0 indicates the channel has never been upgraded - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - ibc.core.channel.v1.Order: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - ibc.core.channel.v1.PacketState: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: |- - PacketState defines the generic type necessary to retrieve and store - packet commitments, acknowledgements, and receipts. - Caller is responsible for knowing the context necessary to interpret this - state as a commitment, acknowledgement, or a receipt. - ibc.core.channel.v1.Params: - type: object - properties: - upgrade_timeout: - type: object - properties: - height: - title: block height after which the packet or upgrade times out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is incremented - so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the packet or upgrade - times out - description: >- - Timeout defines an execution deadline structure for 04-channel - handlers. - - This includes packet lifecycle handlers as well as the upgrade - handshake handlers. - - A valid Timeout contains either one or both of a timestamp and block - height (sequence). - description: Params defines the set of IBC channel parameters. - ibc.core.channel.v1.QueryChannelClientStateResponse: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - ibc.core.channel.v1.QueryChannelConsensusStateResponse: - type: object - properties: - consensus_state: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - ibc.core.channel.v1.QueryChannelParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - upgrade_timeout: - type: object - properties: - height: - title: block height after which the packet or upgrade times out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the packet or - upgrade times out - description: >- - Timeout defines an execution deadline structure for 04-channel - handlers. - - This includes packet lifecycle handlers as well as the upgrade - handshake handlers. - - A valid Timeout contains either one or both of a timestamp and - block height (sequence). - description: >- - QueryChannelParamsResponse is the response type for the - Query/ChannelParams RPC method. - ibc.core.channel.v1.QueryChannelResponse: - type: object - properties: - channel: - title: channel associated with the request identifiers - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following states: - - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or - UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets sent - on - - this channel will travel - version: - type: string - title: opaque channel version, which is agreed upon during the handshake - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt performed by - this channel - - the value of 0 indicates the channel has never been upgraded - description: >- - Channel defines pipeline for exactly-once packet delivery between - specific - - modules on separate blockchains, which has at least one end capable of - - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryChannelResponse is the response type for the Query/Channel RPC - method. - - Besides the Channel end, it includes a proof and the height from which the - - proof was retrieved. - ibc.core.channel.v1.QueryChannelsResponse: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following states: - - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or - UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of - the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets - sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt performed - by this channel - - the value of 0 indicates the channel has never been upgraded - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - description: list of stored channels of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - description: >- - QueryChannelsResponse is the response type for the Query/Channels RPC - method. - ibc.core.channel.v1.QueryConnectionChannelsResponse: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following states: - - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or - UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of - the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets - sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - upgrade_sequence: - type: string - format: uint64 - title: >- - upgrade sequence indicates the latest upgrade attempt performed - by this channel - - the value of 0 indicates the channel has never been upgraded - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - description: list of channels associated with a connection. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method - ibc.core.channel.v1.QueryNextSequenceReceiveResponse: - type: object - properties: - next_sequence_receive: - type: string - format: uint64 - title: next sequence receive number - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QuerySequenceResponse is the response type for the - Query/QueryNextSequenceReceiveResponse RPC method - ibc.core.channel.v1.QueryNextSequenceSendResponse: - type: object - properties: - next_sequence_send: - type: string - format: uint64 - title: next sequence send number - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryNextSequenceSendResponse is the request type for the - Query/QueryNextSequenceSend RPC method - ibc.core.channel.v1.QueryPacketAcknowledgementResponse: - type: object - properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryPacketAcknowledgementResponse defines the client query response for a - packet which also includes a proof and the height from which the - proof was retrieved - ibc.core.channel.v1.QueryPacketAcknowledgementsResponse: - type: object - properties: - acknowledgements: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to interpret - this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryPacketAcknowledgemetsResponse is the request type for the - Query/QueryPacketAcknowledgements RPC method - ibc.core.channel.v1.QueryPacketCommitmentResponse: - type: object - properties: - commitment: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryPacketCommitmentResponse defines the client query response for a - packet - - which also includes a proof and the height from which the proof was - - retrieved - ibc.core.channel.v1.QueryPacketCommitmentsResponse: - type: object - properties: - commitments: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to interpret - this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method - ibc.core.channel.v1.QueryPacketReceiptResponse: - type: object - properties: - received: - type: boolean - title: success flag for if receipt exists - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryPacketReceiptResponse defines the client query response for a packet - - receipt which also includes a proof, and the height from which the proof - was - - retrieved - ibc.core.channel.v1.QueryUnreceivedAcksResponse: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived acknowledgement sequences - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryUnreceivedAcksResponse is the response type for the - Query/UnreceivedAcks RPC method - ibc.core.channel.v1.QueryUnreceivedPacketsResponse: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method - ibc.core.channel.v1.QueryUpgradeErrorResponse: - type: object - properties: - error_receipt: - type: object - properties: - sequence: - type: string - format: uint64 - title: the channel upgrade sequence - message: - type: string - title: the error message detailing the cause of failure - description: >- - ErrorReceipt defines a type which encapsulates the upgrade sequence - and error associated with the - - upgrade handshake failure. When a channel upgrade handshake is aborted - both chains are expected to increment to the - - next sequence. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryUpgradeErrorResponse is the response type for the - Query/QueryUpgradeError RPC method - ibc.core.channel.v1.QueryUpgradeResponse: - type: object - properties: - upgrade: - type: object - properties: - fields: - type: object - properties: - ordering: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - connection_hops: - type: array - items: - type: string - version: - type: string - description: |- - UpgradeFields are the fields in a channel end which may be changed - during a channel upgrade. - timeout: - type: object - properties: - height: - title: block height after which the packet or upgrade times out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is - incremented so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the packet or - upgrade times out - description: >- - Timeout defines an execution deadline structure for 04-channel - handlers. - - This includes packet lifecycle handlers as well as the upgrade - handshake handlers. - - A valid Timeout contains either one or both of a timestamp and - block height (sequence). - next_sequence_send: - type: string - format: uint64 - description: >- - Upgrade is a verifiable type which contains the relevant information - - for an attempted upgrade. It provides the proposed changes to the - channel - - end, the timeout for this upgrade attempt and the next packet sequence - - which allows the counterparty to efficiently know the highest sequence - it has received. - - The next sequence send is used for pruning and upgrading from - unordered to ordered channels. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - title: >- - QueryUpgradeResponse is the response type for the QueryUpgradeResponse RPC - method - ibc.core.channel.v1.State: - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - - STATE_FLUSHING - - STATE_FLUSHCOMPLETE - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - - STATE_FLUSHING: A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - - STATE_FLUSHCOMPLETE: A channel has just completed flushing any in-flight packets. - ibc.core.channel.v1.Timeout: - type: object - properties: - height: - title: block height after which the packet or upgrade times out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may choose - to - - reset the height in certain conditions e.g. hard forks, state-machine - - breaking changes In these cases, the RevisionNumber is incremented so - that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the packet or upgrade - times out - description: >- - Timeout defines an execution deadline structure for 04-channel handlers. - - This includes packet lifecycle handlers as well as the upgrade handshake - handlers. - - A valid Timeout contains either one or both of a timestamp and block - height (sequence). - ibc.core.channel.v1.Upgrade: - type: object - properties: - fields: - type: object - properties: - ordering: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - connection_hops: - type: array - items: - type: string - version: - type: string - description: |- - UpgradeFields are the fields in a channel end which may be changed - during a channel upgrade. - timeout: - type: object - properties: - height: - title: block height after which the packet or upgrade times out - type: object - properties: - revision_number: - type: string - format: uint64 - title: the revision that the client is currently on - revision_height: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping - - RevisionNumber the same. However some consensus algorithms may - choose to - - reset the height in certain conditions e.g. hard forks, - state-machine - - breaking changes In these cases, the RevisionNumber is incremented - so that - - height continues to be monitonically increasing even as the - RevisionHeight - - gets reset - timestamp: - type: string - format: uint64 - title: >- - block timestamp (in nanoseconds) after which the packet or upgrade - times out - description: >- - Timeout defines an execution deadline structure for 04-channel - handlers. - - This includes packet lifecycle handlers as well as the upgrade - handshake handlers. - - A valid Timeout contains either one or both of a timestamp and block - height (sequence). - next_sequence_send: - type: string - format: uint64 - description: >- - Upgrade is a verifiable type which contains the relevant information - - for an attempted upgrade. It provides the proposed changes to the channel - - end, the timeout for this upgrade attempt and the next packet sequence - - which allows the counterparty to efficiently know the highest sequence it - has received. - - The next sequence send is used for pruning and upgrading from unordered to - ordered channels. - ibc.core.channel.v1.UpgradeFields: - type: object - properties: - ordering: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - connection_hops: - type: array - items: - type: string - version: - type: string - description: |- - UpgradeFields are the fields in a channel end which may be changed - during a channel upgrade. diff --git a/docs/dev/development-setup.md b/docs/dev/development-setup.md deleted file mode 100644 index eafeb705120..00000000000 --- a/docs/dev/development-setup.md +++ /dev/null @@ -1,62 +0,0 @@ -# Development setup - -## Dependencies - -We use [Go 1.14 Modules](https://github.com/golang/go/wiki/Modules) to manage dependency versions. - -The main branch of every Cosmos repository should just build with `go get`, which means they should be kept up-to-date with their dependencies, so we can get away with telling people they can just `go get` our software. - -Since some dependencies are not under our control, a third party may break our build, in which case we can fall back on `go mod tidy -v`. - -Other helpful commands: - -- `go get` to add a new go module (including if the existing go module is being semantic version bumped, i.e. my/module/v1 -> my/module/v2). -- `go get -u` to update an existing dependency. -- `go mod tidy` to update dependencies in `go.sum`. - -## Protobuf - -We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along with [buf](https://docs.buf.build/introduction) and [gogoproto](https://github.com/gogo/protobuf) to generate code for use in ibc-go. - -For determinstic behavior around protobuf tooling, everything is containerized using Docker. Make sure to have Docker installed on your machine, or head to [Docker's website](https://docs.docker.com/get-docker/) to install it. - -For formatting code in `.proto` files, you can run the `make proto-format` command. - -For linting and checking breaking changes, we also use [buf](https://buf.build/). You can use the commands `make proto-lint` and `make proto-check-breaking` to respectively lint your proto files and check for breaking changes. - -To generate the protobuf stubs, you can run `make proto-gen`. - -We also added the `make proto-all` command to run the above commands (`proto-format`, `proto-lint` and `proto-gen`) sequentially. - -To update third-party protobuf dependencies, you can run `make proto-update-deps`. This requires `buf` to be installed in the local development environment (see [`buf`s installation documentation](https://docs.buf.build/installation) for more details). - -For generating or updating the swagger file that documents the URLs of the RESTful API that exposes the gRPC endpoints over HTTP, you can run the `proto-swagger-gen` command. - -It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. - -## Developing and testing - -- The latest state of development is on `main`. -- Build the `simd` test chain binary with `make build`. -- `main` must never fail `make test`. -- No `--force` onto `main` (except when reverting a broken commit, which should seldom happen). -- Create a development branch either on `github.com/cosmos/ibc-go`, or your fork (using `git remote add fork`). -- Before submitting a pull request, begin `git rebase` on top of `main`. -- Ensure you are using the pre-commit hooks by running `make setup-pre-commit`. - -All Go tests in ibc-go can be ran by running `make test`. - -Please make sure to run `make format` before every commit - the easiest way to do this is have your editor run it for you upon saving a file. Additionally please ensure that your code is lint compliant by running `make lint-fix` (requires `golangci-lint`). - -When testing a function under a variety of different inputs, we prefer to use [table driven tests](https://github.com/golang/go/wiki/TableDrivenTests). - -All unit tests should use the testing package. Please see the testing package [README](../../testing/README.md) for more information. - -Test coverage is continuously deployed at . PRs that improve test coverage are welcome, but in general the test coverage should be used as a guidance for finding API use cases that are not covered by tests. We don't recommend adding tests that only improve coverage but not actually test a meaning use case. - -## Documentation - -- If you open a PR on ibc-go, it is mandatory to update the relevant documentation in `/docs`. -- We lint the markdown files for documentation with [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli). Please run `make docs-lint` before pushing changes in the markdown files (you will need to have `markdownlint-cli` installed, so please follow the [installation instructions](https://github.com/igorshubovych/markdownlint-cli#installation)). -- Generate the folder `docs/.vuepress/dist` with all the static files for the documentation site with `make build-docs`. -- Run the documentation site locally with `make view-docs`. diff --git a/docs/dev/go-style-guide.md b/docs/dev/go-style-guide.md deleted file mode 100644 index b4212e21fd5..00000000000 --- a/docs/dev/go-style-guide.md +++ /dev/null @@ -1,119 +0,0 @@ - -# Go style guide - -In order to keep our code looking good with lots of programmers working on it, it helps to have a "style guide", so all the code generally looks quite similar. This doesn't mean there is only one "right way" to write code, or even that this standard is better than your style. But if we agree to a number of stylistic practices, it makes it much easier to read and modify new code. Please feel free to make suggestions if there's something you would like to add or modify. - -We expect all contributors to be familiar with [Effective Go](https://golang.org/doc/effective_go.html) (and it's recommended reading for all Go programmers anyways). Additionally, we generally agree with the suggestions in [Uber's style guide](https://github.com/uber-go/guide/blob/master/style.md) and use that as a starting point. - -## Code Structure - -Perhaps more key for code readability than good commenting is having the right structure. As a rule of thumb, try to write in a logical order of importance, taking a little time to think how to order and divide the code such that someone could scroll down and understand the functionality of it just as well as you do. A loose example of such order would be: - -- Constants, global and package-level variables. -- Main struct definition. -- Options (only if they are seen as critical to the struct else they should be placed in another file). -- Initialization/start and stop of the service functions. -- Public functions (in order of most important). -- Private/helper functions. -- Auxiliary structs and function (can also be above private functions or in a separate file). - -## General - -- Use `gofumpt` to format all code upon saving it (or run `make format`). -- Think about documentation, and try to leave godoc comments, when it will help new developers. -- Every package should have a high level doc.go file to describe the purpose of that package, its main functions, and any other relevant information. -- Applications (e.g. clis/servers) should panic on unexpected unrecoverable errors and print a stack trace. - -## Comments - -- Use a space after the comment deliminter (ex. `// your comment`). -- Many comments are not sentences. These should begin with a lower case letter and end without a period. -- Conversely, sentences in comments should be sentenced-cased and end with a period. -- Comments should explain *why* something is being done rather than *what* the code is doing. For example: - - The comments in - -```go -// assign a variable foo -f := foo -// assign f to b -b := f -``` - - have little value, but the following is more useful: - -```go -f := foo -// we copy the variable f because we want to preserve the state at time of initialization -b := f -``` - -## Linting - -- Run `make lint-fix` to fix any linting errors. - -## Various - -- Functions that return functions should have the suffix `Fn`. -- Names should not [stutter](https://blog.golang.org/package-names). For example, a struct generally shouldn’t have a field named after itself; e.g., this shouldn't occur: - -```go -type middleware struct { - middleware Middleware -} -``` - -- Acronyms are all capitalized, like "RPC", "gRPC", "API". "MyID", rather than "MyId". -- Whenever it is safe to use Go's built-in `error` instantiation functions (as opposed to Cosmos SDK's error instantiation functions), prefer `errors.New()` instead of `fmt.Errorf()` unless you're actually using the format feature with arguments. - -## Importing libraries - -- Use [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports). -- Separate imports into blocks. For example: - -```go -import ( - // standard library imports - "fmt" - "testing" - - // external library imports - "github.com/stretchr/testify/require" - - // Cosmos-SDK imports - abci "github.com/cometbft/cometbft/abci/types" - - // ibc-go library imports - "github.com/cosmos/ibc-go/modules/core/23-commitment/types" -) -``` - -Run `make lint-fix` to get the imports ordered and grouped automatically. - -## Dependencies - -- Dependencies should be pinned by a release tag, or specific commit, to avoid breaking `go get` when external dependencies are updated. -- Refer to the [contributing](./development-setup.md#dependencies) document for more details. - -## Testing - -- Make use of table driven testing where possible and not-cumbersome. Read [this blog post](https://dave.cheney.net/2013/06/09/writing-table-driven-tests-in-go) for more information. See the [tests](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/transfer/keeper/msg_server_test.go#L11) for [`Transfer`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/transfer/keeper/msg_server.go#L15) for an example. -- Make use of Testify [assert](https://godoc.org/github.com/stretchr/testify/assert) and [require](https://godoc.org/github.com/stretchr/testify/require). -- When using mocks, it is recommended to use Testify [mock](https://pkg.go.dev/github.com/stretchr/testify/mock) along with [Mockery](https://github.com/vektra/mockery) for autogeneration. - -## Errors - -- Ensure that errors are concise, clear and traceable. -- Depending on the context, use either `cosmossdk.io/errors` or `stdlib` error packages. -- For wrapping errors, use `fmt.Errorf()` with `%w`. -- Panic is appropriate when an internal invariant of a system is broken, while all other cases (in particular, incorrect or invalid usage) should return errors. -- Error messages should be formatted as following: - -```go -sdkerrors.Wrapf( - , - "expected %s, got %s", - , - -) -``` diff --git a/docs/dev/project-structure.md b/docs/dev/project-structure.md deleted file mode 100644 index 2cf1a0faccc..00000000000 --- a/docs/dev/project-structure.md +++ /dev/null @@ -1,46 +0,0 @@ -# Project structure - -If you're not familiar with the overall module structure from the SDK modules, please check this [document](https://github.com/cosmos/cosmos-sdk/blob/main/docs/build/building-modules/11-structure.md) as prerequisite reading. - -Every Interchain Standard (ICS) has been developed in its own package. The development team separated the IBC TAO (Transport, Authentication, Ordering) ICS specifications from the IBC application level specification. The following sections describe the architecture of the most relevant directories that comprise this repository. - -## `modules` - -This folder contains implementations for the IBC TAO (`core`), IBC applications (`apps`) and light clients (`light-clients`). - -### `core` - -- `02-client`: This package is an implementation for Cosmos SDK-based chains of [ICS 02](https://github.com/cosmos/ibc/tree/main/spec/core/ics-002-client-semantics). This implementation defines the types and methods needed to operate light clients tracking other chain's consensus state. -- `03-connection`: This package is an implementation for Cosmos SDK-based chains of [ICS 03](https://github.com/cosmos/ibc/tree/main/spec/core/ics-003-connection-semantics). This implementation defines the types and methods necessary to perform connection handshake between two chains. -- `04-channel`: This package is an implementation for Cosmos SDK-based chains of [ICS 04](https://github.com/cosmos/ibc/tree/main/spec/core/ics-004-channel-and-packet-semantics). This implementation defines the types and methods necessary to perform channel handshake between two chains and ensure correct packet sending flow. -- `05-port`: This package is an implementation for Cosmos SDK-based chains of [ICS 05](https://github.com/cosmos/ibc/tree/main/spec/core/ics-005-port-allocation). This implements the port allocation system by which modules can bind to uniquely named ports. -- `23-commitment`: This package is an implementation for Cosmos SDK-based chains of [ICS 23](https://github.com/cosmos/ibc/tree/main/spec/core/ics-023-vector-commitments). This implementation defines the functions required to prove inclusion or non-inclusion of particular values at particular paths in state. -- `24-host`: This package is an implementation for Cosmos SDK-based chains of [ICS 24](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements). - -### `apps` - -- `transfer`: This is the Cosmos SDK implementation of the [ICS 20](https://github.com/cosmos/ibc/tree/main/spec/app/ics-020-fungible-token-transfer) protocol, which enables cross-chain fungible token transfers. For more information, read the [module's docs](../docs/02-apps/01-transfer/01-overview.md) -- `27-interchain-accounts`: This is the Cosmos SDK implementation of the [ICS 27](https://github.com/cosmos/ibc/tree/main/spec/app/ics-027-interchain-accounts) protocol, which enables cross-chain account management built upon IBC. For more information, read the [module's documentation](../docs/02-apps/02-interchain-accounts/01-overview.md). -- `29-fee`: This is the Cosmos SDK implementation of the [ICS 29](https://github.com/cosmos/ibc/tree/main/spec/app/ics-029-fee-payment) middleware, which handles packet incentivisation and fee distribution on top of any ICS application protocol, enabling fee payment to relayer operators. For more information, read the [module's documentation](../docs/04-middleware/01-ics29-fee/01-overview.md). - -### `light-clients` - -- `06-solomachine`: This package implement the types for the Solo Machine light client specified in [ICS 06](https://github.com/cosmos/ibc/tree/main/spec/client/ics-006-solo-machine-client). -- `07-tendermint`: This package implement the types for the Tendermint consensus light client as specified in [ICS 07](https://github.com/cosmos/ibc/tree/main/spec/client/ics-007-tendermint-client). - -## `proto` - -This folder contains all the Protobuf files used for - -- common message type definitions, -- message type definitions related to genesis state, -- `Query` service and related message type definitions, -- `Msg` service and related message type definitions. - -## `testing` - -This package contains the implementation of the testing package used in unit and integration tests. Please read the [package's documentation](../../testing/README.md) for more information. - -## `e2e` - -This folder contains all the e2e tests of ibc-go. Please read the [module's documentation](https://github.com/cosmos/ibc-go/blob/fec07ec55ca3e35f49a62bc6b1243c27cdf7799d/e2e/README.md) for more information. diff --git a/docs/dev/pull-requests.md b/docs/dev/pull-requests.md deleted file mode 100644 index c8db90f5049..00000000000 --- a/docs/dev/pull-requests.md +++ /dev/null @@ -1,68 +0,0 @@ -# Pull request guidelines - -> To accommodate the review process we suggest that PRs are categorically broken up. Ideally each PR addresses only a single issue and does not introduce unrelated changes. Additionally, as much as possible code refactoring and cleanup should be submitted as separate PRs from bug fixes and feature additions. - -If the PR is the result of a related GitHub issue, please include `closes: #` in the PR’s description in order to auto-close the related issue once the PR is merged. This will also link the issue and the PR together so that if anyone looks at either in the future, they won’t have any problem trying to find the corresponding issue/PR as it will be recorded in the sidebar. - -If the PR is not the result of an existing issue and it fixes a bug, please provide a detailed description of the bug. For feature addtions, we recommend opening an issue first and have it discussed and agreed upon, before working on it and opening a PR. - -If possible, [tick the "Allow edits from maintainers" box](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork) when opening your PR from your fork of ibc-go. This allows us to directly make minor edits / refactors and speeds up the merging process. - -If you open a PR on ibc-go, it is mandatory to update the relevant documentation in `/docs`. - -## Pull request targeting - -Ensure that you base and target your PR on the either the `main` branch or the corresponding feature branch where a large body of work is being implemented. Please make sure that the PR is made from a branch different than either `main` or the corresponding feature branch. - -All development should be then targeted against `main` or the feature branch. Bug fixes which are required for outstanding releases should be backported if the CODEOWNERS decide it is applicable. - -## Commit Messages - -Commit messages should follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/). - -When opening a PR, include the proposed commit message in the PR description. - -The commit message type should be one of: - -- `feat` / `feature` for feature work. -- `bug` / `fix` for bug fixes. -- `imp` / `improvements` for improvements. -- `doc` / `docs` / `documentation` for any documentation changes. -- `test` / `e2e` for addition or improvements of unit, integration and e2e tests or their corresponding infrastructure. -- `deprecated` for deprecation changes. -- `deps` / `build` for changes to dependencies. -- `chore` / `misc` / `nit` for any miscellaneous changes that don't fit into another category. - -**Note**: If any change is breaking, the following format must be used: - -- `type` + `(api)!` for api breaking changes, e.g. `fix(api)!: api breaking fix` -- `type` + `(statemachine)!` for state machine breaking changes, e.g. `fix(statemachine)!: state machine breaking fix` - -**`api` breaking changes take precedence over `statemachine` breaking changes.** - -## Pull request review process - -All PRs require an approval from at least one CODEOWNER before merge. PRs which cause significant changes require two approvals from CODEOWNERS. When reviewing PRs please use the following review guidelines: - -- `Approval` through the GitHub UI with the following comments: - - `Concept ACK` means that you agree with the overall proposed concept, but have neither reviewed the code nor tested it. - - `LGTM` means the above and besides you have superficially reviewed the code without considering how logic affects other parts the codebase. - - `utACK` (aka. `Untested ACK`) means the above and besides have thoroughly reviewed the code and considered the safety of logic changes, but have not tested it. - - `Tested ACK` means the above and besides you have tested the code. -- If you are only making "surface level" reviews, submit any notes as `Comments` without submitting an approval. - -A thorough review means that: - -- You understand the code and make sure that documentation is updated in the right places. -- You must also think through anything which ought to be included but is not. -- You must think through whether any added code could be partially combined (DRYed) with existing code. -- You must think through any potential security issues or incentive-compatibility flaws introduced by the changes. -- Naming must be consistent with conventions and the rest of the codebase. -- Code must live in a reasonable location, considering dependency structures (e.g. not importing testing modules in production code, or including example code modules in production code). - -## Pull request merge procedure - -- Ensure pull request branch is rebased on target branch. -- Ensure all GitHub requirements pass. -- Set the changelog entry in the commit message for the pull request. -- Squash and merge pull request. diff --git a/docs/dev/release-management.md b/docs/dev/release-management.md deleted file mode 100644 index 8e168e38d11..00000000000 --- a/docs/dev/release-management.md +++ /dev/null @@ -1,87 +0,0 @@ -# Tagging a release - -## New major release branch - -Pre-requisites for creating a release branch for a new major version: - -1. Bump [Go package version](https://github.com/cosmos/ibc-go/blob/main/go.mod#L3). -2. Change all imports. For example: if the next major version is `v3`, then change all imports starting with `github.com/cosmos/ibc-go/v2` to `github.com/cosmos/ibc-go/v3`). - -Once the above pre-requisites are satified: - -1. Start on `main`. -2. Create the release branch (`release/vX.XX.X`). For example: `release/v3.0.x`. - -## New minor release branch - -1. Start on the latest release branch in the same major release line. For example: the latest release branch in the `v3` release line is `v3.2.x`. -2. Create branch from the release branch. For example: create branch `release/v3.3.x` from `v3.2.x`. - -Post-requisites for both new major and minor release branches: - -1. Add branch protection rules to new release branch. -2. Add backport task to [`mergify.yml`](https://github.com/cosmos/ibc-go/blob/main/.github/mergify.yml). -3. Create label for backport (e.g.`backport-to-v3.0.x`). - -## Point release procedure - -In order to alleviate the burden for a single person to have to cherry-pick and handle merge conflicts of all desired backporting PRs to a point release, we instead maintain a living backport branch, where all desired features and bug fixes are merged into as separate PRs. - -### Example - -Current release is `v1.0.2`. We then maintain a (living) branch `release/v1.0.x`, given `x` as the next patch release number (currently `v1.0.3`) for the `v1.0` release series. As bugs are fixed and PRs are merged into `main`, if a contributor wishes the PR to be released into the `v1.0.x` point release, the contributor must: - -1. Add the `backport-to-v1.0x` label to the PR. -2. Once the PR is merged, the Mergify GitHub application will automatically copy the changes into another branch and open a new PR agains the desired `release/v1.0.x` branch. -3. If the following has not been discussed in the original PR, then update the backport PR's description and ensure it contains the following information: - -- **[Impact]** explanation of how the bug affects users or developers. -- **[Test Case]** section with detailed instructions on how to reproduce the bug. -- **[Regression Potential]** section with a discussion how regressions are most likely to manifest, or might manifest even if it's unlikely, as a result of the change. **It is assumed that any backport PR is well-tested before it is merged in and has an overall low risk of regression**. This section should discuss the potential for state breaking changes to occur such as through out-of-gas errors. - -It is the PR's author's responsibility to fix merge conflicts, update changelog entries, and ensure CI passes. If a PR originates from an external contributor, it may be a core team member's responsibility to perform this process instead of the original author. Lastly, it is core team's responsibility to ensure that the PR meets all the backport criteria. - -Finally, when a point release is ready to be made: - -1. Checkout the release branch (e.g. `release/v1.0.x`). -2. In `CHANGELOG.md`: - -- Ensure changelog entries are verified. -- Remove any sections of the changelog that do not have any entries (e.g. if the release does not have any bug fixes, then remove the section). -- Remove the `[Unreleased]` title. -- Add release version and date of release. - -3. Create release in GitHub: - -- Select the correct target branch (e.g. `release/v1.0.x`). -- Choose a tag (e.g. `v1.0.3`). -- Write release notes. -- Check the `This is a pre-release` checkbox if needed (this applies for alpha, beta and release candidates). - -### Post-release procedure - -- Update [`CHANGELOG.md`](../../CHANGELOG.md) in `main` (remove from the `[Unreleased]` section any items that are part of the release).` -- Put back the `[Unreleased]` section in the release branch (e.g. `release/v1.0.x`) with clean sections for each of the types of changelog entries, so that entries will be added for the PRs that are backported for the next release. -- Update [version matrix](../../RELEASES.md#version-matrix) in `RELEASES.md`: add the new release and remove any tags that might not be recommended anymore. - -Additionally, for the first point release of a new major or minor release branch: - -- Update the table of supported release lines (and End of Life dates) in [`RELEASES.md`](../../RELEASES.md): add the new release line and remove any release lines that might have become discontinued. -- Update the [list of supported release lines in README.md](../../RELEASES.md#releases), if necessary. -- Update the [e2e compatibility test matrices](https://github.com/cosmos/ibc-go/tree/main/.github/compatibility-test-matrices): add the tag for the new release and remove any tags that might not be recommended anymore. -- Update the manual [e2e `simd`](https://github.com/cosmos/ibc-go/blob/main/.github/workflows/e2e-manual-simd.yaml) test workflow: - - Remove any tags that might not be recommended anymore. - -- Bump ibc-go version in [cosmos/interchain-accounts-demo repository](https://github.com/cosmos/interchain-accounts-demo) and create a tag. -- [ ] Update docs site: - - [ ] If the release is occurring on the main branch, on the latest version, then run `npm run docusaurus docs:version vX.Y.Z` in the `docs/` directory. (where `X.Y.Z` is the new version number) - - [ ] If the release is occurring on an older release branch, then make a PR to the main branch called `docs: new release vX.Y.Z` doing the following: - - [ ] Update the content of the docs found in `docs/versioned_docs/version-vx.y.z` if needed. (where `x.y.z` is the previous version number) - - [ ] Update the version number of the older release branch by changing the version number of the older release branch in: - - [ ] In `docs/versions.json`. - - [ ] Rename `docs/versioned_sidebars/version-vx.y.z-sidebars.json` - - [ ] Rename `docs/versioned_docs/version-vx.y.z` -- After changes to docs site are deployed, check [ibc.cosmos.network](https://ibc.cosmos.network) is updated. -- Open issue in [SDK tutorials repo](https://github.com/cosmos/sdk-tutorials) to update tutorials to the released version of ibc-go. - -See [this PR](https://github.com/cosmos/ibc-go/pull/2919) for an example of the involved changes. diff --git a/docs/docs/00-intro.md b/docs/docs/00-intro.md deleted file mode 100644 index 1e1c6a89f96..00000000000 --- a/docs/docs/00-intro.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -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 arbitrary data, 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), and data and code sharding of various kinds. diff --git a/docs/docs/01-ibc/01-overview.md b/docs/docs/01-ibc/01-overview.md deleted file mode 100644 index ccae6fc27be..00000000000 --- a/docs/docs/01-ibc/01-overview.md +++ /dev/null @@ -1,297 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /ibc/overview ---- - - -# Overview - -:::note Synopsis -Learn about IBC, its components, and IBC use cases. -::: - -## What is the Interblockchain 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/docs/01-ibc/02-integration.md b/docs/docs/01-ibc/02-integration.md deleted file mode 100644 index ed67606f399..00000000000 --- a/docs/docs/01-ibc/02-integration.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -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 straighforward. 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-tranfer 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 handhake. - -```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/docs/01-ibc/03-apps/01-apps.md b/docs/docs/01-ibc/03-apps/01-apps.md deleted file mode 100644 index a80747c7642..00000000000 --- a/docs/docs/01-ibc/03-apps/01-apps.md +++ /dev/null @@ -1,494 +0,0 @@ ---- -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 impelemented 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 negotation 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 a 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/docs/01-ibc/03-apps/02-ibcmodule.md b/docs/docs/01-ibc/03-apps/02-ibcmodule.md deleted file mode 100644 index 5d5f499e7b7..00000000000 --- a/docs/docs/01-ibc/03-apps/02-ibcmodule.md +++ /dev/null @@ -1,379 +0,0 @@ ---- -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 impelemented 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/docs/01-ibc/03-apps/03-bindports.md b/docs/docs/01-ibc/03-apps/03-bindports.md deleted file mode 100644 index 4bd85d29bc5..00000000000 --- a/docs/docs/01-ibc/03-apps/03-bindports.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -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/docs/01-ibc/03-apps/04-keeper.md b/docs/docs/01-ibc/03-apps/04-keeper.md deleted file mode 100644 index 8e0040e09fc..00000000000 --- a/docs/docs/01-ibc/03-apps/04-keeper.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -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/docs/01-ibc/03-apps/05-packets_acks.md b/docs/docs/01-ibc/03-apps/05-packets_acks.md deleted file mode 100644 index 9f7f76614ac..00000000000 --- a/docs/docs/01-ibc/03-apps/05-packets_acks.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -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 negotation 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/docs/01-ibc/03-apps/06-routing.md b/docs/docs/01-ibc/03-apps/06-routing.md deleted file mode 100644 index 666fb1af11b..00000000000 --- a/docs/docs/01-ibc/03-apps/06-routing.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -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/docs/01-ibc/03-apps/_category_.json b/docs/docs/01-ibc/03-apps/_category_.json deleted file mode 100644 index 4561a95b84c..00000000000 --- a/docs/docs/01-ibc/03-apps/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Applications", - "position": 3, - "link": null -} \ No newline at end of file diff --git a/docs/docs/01-ibc/03-apps/images/packet_flow.png b/docs/docs/01-ibc/03-apps/images/packet_flow.png deleted file mode 100644 index db2d1d314b86766f403009ff6fa3f31578d32460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352988 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�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 z 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 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/docs/01-ibc/04-middleware/03-integration.md b/docs/docs/01-ibc/04-middleware/03-integration.md deleted file mode 100644 index f049555e544..00000000000 --- a/docs/docs/01-ibc/04-middleware/03-integration.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -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/docs/01-ibc/04-middleware/_category_.json b/docs/docs/01-ibc/04-middleware/_category_.json deleted file mode 100644 index 6596fe16c13..00000000000 --- a/docs/docs/01-ibc/04-middleware/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Middleware", - "position": 4, - "link": null -} \ No newline at end of file diff --git a/docs/docs/01-ibc/04-middleware/images/middleware-stack.png b/docs/docs/01-ibc/04-middleware/images/middleware-stack.png deleted file mode 100644 index 1d54f8081700fb7cf718d87f7cdc706ca3400b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194858 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 z 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 z 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 PdU!8X=JGAZ^DW?(U>RmAGT!sJ% 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

%@>82P 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 Note: if the signer is the authority, e.g. the `gov` address, no `ErrorReceipt` or proof is required if the current channel state is not in FLUSHCOMPLETE. -> These can be left empty in the `MsgChannelUpgradeCancel` message in that case. - -Upon cancelling a channel upgrade, an `ErrorReceipt` will be written with the channel's current upgrade sequence, and -the channel will move back to `OPEN` state keeping its original parameters. - -The application's `OnChanUpgradeRestore` callback method will be invoked. - -It will then be possible to re-initiate an upgrade by sending a `MsgChannelOpenInit` message. - -## IBC App Recommendations - -IBC application callbacks should be primarily used to validate data fields and do compatibility checks. - -`OnChanUpgradeInit` should validate the proposed version, order, and connection hops, and should return the application version to upgrade to. - -`OnChanUpgradeTry` should validate the proposed version (provided by the counterparty), order, and connection hops. The desired upgrade version should be returned. - -`OnChanUpgradeAck` should validate the version proposed by the counterparty. - -`OnChanUpgradeOpen` should perform any logic associated with changing of the channel fields. - -`OnChanUpgradeRestore` should perform any logic that needs to be executed when an upgrade attempt fails as is reverted. - -> IBC applications should not attempt to process any packet data under the new conditions until after `OnChanUpgradeOpen` -> has been executed, as up until this point it is still possible for the upgrade handshake to fail and for the channel -> to remain in the pre-upgraded state. diff --git a/docs/docs/01-ibc/07-proposals.md b/docs/docs/01-ibc/07-proposals.md deleted file mode 100644 index 5a4057c1955..00000000000 --- a/docs/docs/01-ibc/07-proposals.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Governance Proposals -sidebar_label: Governance Proposals -sidebar_position: 7 -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/docs/01-ibc/08-relayer.md b/docs/docs/01-ibc/08-relayer.md deleted file mode 100644 index 100d68fc77a..00000000000 --- a/docs/docs/01-ibc/08-relayer.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Relayer -sidebar_label: Relayer -sidebar_position: 8 -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/docs/01-ibc/09-proto-docs.md b/docs/docs/01-ibc/09-proto-docs.md deleted file mode 100644 index 1666d3b7dd2..00000000000 --- a/docs/docs/01-ibc/09-proto-docs.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Protobuf Documentation -sidebar_label: Protobuf Documentation -sidebar_position: 9 -slug: /ibc/proto-docs ---- - - -# Protobuf documentation - -See [ibc-go Buf Protobuf documentation](https://buf.build/cosmos/ibc/docs/main). diff --git a/docs/docs/01-ibc/10-roadmap.md b/docs/docs/01-ibc/10-roadmap.md deleted file mode 100644 index 1d579a93a9a..00000000000 --- a/docs/docs/01-ibc/10-roadmap.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Roadmap -sidebar_label: Roadmap -sidebar_position: 10 -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 addtions 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 on 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 [Annoucements](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/docs/01-ibc/11-troubleshooting.md b/docs/docs/01-ibc/11-troubleshooting.md deleted file mode 100644 index 4080f3b449b..00000000000 --- a/docs/docs/01-ibc/11-troubleshooting.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Troubleshooting -sidebar_label: Troubleshooting -sidebar_position: 11 -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 or the `AllowAllClients` wildcard (`"*"`) is used, all usage of clients of this type will be prevented. diff --git a/docs/docs/01-ibc/12-capability-module.md b/docs/docs/01-ibc/12-capability-module.md deleted file mode 100644 index 05db8a887eb..00000000000 --- a/docs/docs/01-ibc/12-capability-module.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Capability Module -sidebar_label: Capability Module -sidebar_position: 12 -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/docs/01-ibc/_category_.json b/docs/docs/01-ibc/_category_.json deleted file mode 100644 index 066f3af93b1..00000000000 --- a/docs/docs/01-ibc/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Using IBC-Go", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/docs/02-apps/01-transfer/01-overview.md b/docs/docs/02-apps/01-transfer/01-overview.md deleted file mode 100644 index 7e257d1e805..00000000000 --- a/docs/docs/02-apps/01-transfer/01-overview.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -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/docs/02-apps/01-transfer/02-state.md b/docs/docs/02-apps/01-transfer/02-state.md deleted file mode 100644 index 916e99b46c3..00000000000 --- a/docs/docs/02-apps/01-transfer/02-state.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -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/docs/02-apps/01-transfer/03-state-transitions.md b/docs/docs/02-apps/01-transfer/03-state-transitions.md deleted file mode 100644 index 7c73b8da21c..00000000000 --- a/docs/docs/02-apps/01-transfer/03-state-transitions.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -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/docs/02-apps/01-transfer/04-messages.md b/docs/docs/02-apps/01-transfer/04-messages.md deleted file mode 100644 index 483384a09fe..00000000000 --- a/docs/docs/02-apps/01-transfer/04-messages.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -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/docs/02-apps/01-transfer/05-events.md b/docs/docs/02-apps/01-transfer/05-events.md deleted file mode 100644 index 888b26a959a..00000000000 --- a/docs/docs/02-apps/01-transfer/05-events.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -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/docs/02-apps/01-transfer/06-metrics.md b/docs/docs/02-apps/01-transfer/06-metrics.md deleted file mode 100644 index 104e5b4d3bc..00000000000 --- a/docs/docs/02-apps/01-transfer/06-metrics.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -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/docs/02-apps/01-transfer/07-params.md b/docs/docs/02-apps/01-transfer/07-params.md deleted file mode 100644 index 365fc21c3e3..00000000000 --- a/docs/docs/02-apps/01-transfer/07-params.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -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 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/docs/02-apps/01-transfer/08-authorizations.md b/docs/docs/02-apps/01-transfer/08-authorizations.md deleted file mode 100644 index 01f80177943..00000000000 --- a/docs/docs/02-apps/01-transfer/08-authorizations.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -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 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. - -- 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`. - -- an `AllowedPacketData` list that specifies the list of memo packet data keys that are allowed to send the packet. If this list is empty, then only an empty memo is allowed (a `memo` field with non-empty content will be denied). If this list includes a single element equal to `"*"`, then any content in `memo` field will be allowed. - -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` -- the `memo` field is not allowed by `AllowedPacketData` - -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 - // allow list of packet data keys, an empty list prohibits all packet data keys; - // a list only with "*" permits any packet data key - AllowedPacketData []string -} - -``` diff --git a/docs/docs/02-apps/01-transfer/09-client.md b/docs/docs/02-apps/01-transfer/09-client.md deleted file mode 100644 index 64ec2bd6ad1..00000000000 --- a/docs/docs/02-apps/01-transfer/09-client.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -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/docs/02-apps/01-transfer/_category_.json b/docs/docs/02-apps/01-transfer/_category_.json deleted file mode 100644 index d643a498cdf..00000000000 --- a/docs/docs/02-apps/01-transfer/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Transfer", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/docs/02-apps/02-interchain-accounts/01-overview.md b/docs/docs/02-apps/02-interchain-accounts/01-overview.md deleted file mode 100644 index e8edada979f..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/01-overview.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/02-development.md b/docs/docs/02-apps/02-interchain-accounts/02-development.md deleted file mode 100644 index eb2aaa1f90a..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/02-development.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -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 faciliate 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/docs/02-apps/02-interchain-accounts/03-auth-modules.md b/docs/docs/02-apps/02-interchain-accounts/03-auth-modules.md deleted file mode 100644 index 31231952208..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/03-auth-modules.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/04-integration.md b/docs/docs/02-apps/02-interchain-accounts/04-integration.md deleted file mode 100644 index 974e7f978df..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/04-integration.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/05-messages.md b/docs/docs/02-apps/02-interchain-accounts/05-messages.md deleted file mode 100644 index 119c740e03e..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/05-messages.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/06-parameters.md b/docs/docs/02-apps/02-interchain-accounts/06-parameters.md deleted file mode 100644 index 5ab4fdd8478..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/06-parameters.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/07-tx-encoding.md b/docs/docs/02-apps/02-interchain-accounts/07-tx-encoding.md deleted file mode 100644 index 5be03af2f8e..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/07-tx-encoding.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/08-client.md b/docs/docs/02-apps/02-interchain-accounts/08-client.md deleted file mode 100644 index c7c50d09d82..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/08-client.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/09-active-channels.md b/docs/docs/02-apps/02-interchain-accounts/09-active-channels.md deleted file mode 100644 index 2aedeb8a42f..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/09-active-channels.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md b/docs/docs/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md deleted file mode 100644 index 70cc36b8a69..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md +++ /dev/null @@ -1,274 +0,0 @@ ---- -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 succesfully 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/docs/02-apps/02-interchain-accounts/10-legacy/02-integration.md b/docs/docs/02-apps/02-interchain-accounts/10-legacy/02-integration.md deleted file mode 100644 index 90a645aaabd..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/10-legacy/02-integration.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md b/docs/docs/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md deleted file mode 100644 index 252c7eaf7ff..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -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/docs/02-apps/02-interchain-accounts/10-legacy/_category_.json b/docs/docs/02-apps/02-interchain-accounts/10-legacy/_category_.json deleted file mode 100644 index 70500795bf8..00000000000 --- a/docs/docs/02-apps/02-interchain-accounts/10-legacy/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Legacy", - "position": 10, - "link": null -} diff --git a/docs/docs/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png b/docs/docs/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png deleted file mode 100644 index acd00d1294b3e1034b5d75b0969a42cc4b342917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34698 zcmc$G^;?x&)a|AeQ9`5yN$EyPIs^oyQ<0LEmhKV-q@+u_Hv%FcT~Y!9N=k#2bV*8l zbD!_If5Cn3bAM3J!Ts)c#awfaG3Ho?si{21#UaN*AP~3;@-i9-1p0OOMTd|={J0cWM_{{yvpt=Vc#ipWWbytcoq>r5Vh<@^y9iATBfiA2@5-#8kf(Iq>^A!v`^dk<`TNeqt;52xI_HIBJ@ z>N}1rHZ!U{I;ws6@2UjZa2UaZ8o)PfX4D^QSpOe?Lm=VhlCQ;+!9eIrZg^^}uD9 z<;K%8=^l>!RJKw5n}>$s$5#DMO57Im^o-}K-;?XEH~H*Hj1xJhvjFL5!KM0 zu+MQ;c(+&nDa0qrH{IPEA&?sG@|@8$P1ID^&?@Voh-KbmUGSy#Y}684avvS#(!8S) zN4GhwSS+nu_lHSLW7x_$T$IN%Nk3BH@aHlEW79VS`;Y`~r5GgD& zzAa*WYm7v1S|Gni(1{gw=W*|l8_}{+mEadLy4=5tf!3)3I~L%qsh zHM45VM02#V#G!hfo?=OS$kz5#VJ1158q4S9tAf$)xfy)R^&8_0XMVg!8w}0D(nYF> zP*v8d$myx}ecWX)^O>B<&lWTtlGqMrtCQ}D$hHVoXNGFiw&>kSG!5f-rU7H zvezjQ6_*;-Phz~XMy5U~@!Lw>Fo_@9D0%trmwbdqw3wRv`}OCpfBPqGPi7{2odjv= zhdv%}<@;GydVMa6FHzglIjio}ODia-Et_O4cnW6@9hk-b$F)91h?}AACJ@drjq<=c%;NeX1%66e5?G# zM(I}hTW)@xvOCQMD!zwYt$0O=1L3FV*Q#v}4{n)Vj8};lxFsV4KaNqAUuDb4GQ_OD zC!joZMXO4+@@%+nM7$g$lj@ogkLmEr!`n$=%C}hMcK#@4mY#qA=z#aa{%P!=Q?@_I z!x<;)O;;?Wpp$Ay-iCid@|LRaaZ=!MIJlBx?!#w8t z2JrK$aaBcoh*j6%Mxvpj7nGpP84JlxdF>{nkdjw--5;C~!7T3pJX zN_?QB-DUH-gY0lQ?Z#*6&+DBl<4h+bPc)zMBNJnpYWgZ)aI0k+l-m{!#OWd$n}fe> z6wZFUW-Q@Bthcv8d_7d5qalt}gcvPr^1^Sdjy!^Zwf@;Q)>LO@LgGpnffiO%h8#Z+ zA0&?`0hjuQR~tvSo7*z2-!@u*;{9EdiI2OdVzBW+XRbU$ zxvPril@n^^r6_^2%1QT~ch?)htLK7aE0P;SKhk?ow| zv;+ZClkVqCL|LnG)@=)4kGuh^A*@Q8psEMjOr(iVGU|w#>s1hlTAbK#$sG}LQVv

-X0lt-%*Y^>T_m~>6d~+yx&*Qo+&8Y7S|QQ1 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 Lt8i2_F8RWS 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�6fslqOEhRSQJK6rLluuhu+>zDy@VbCsxkb|NX~ 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 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/docs/03-light-clients/01-developer-guide/05-upgrades.md b/docs/docs/03-light-clients/01-developer-guide/05-upgrades.md deleted file mode 100644 index a6fc3858c3d..00000000000 --- a/docs/docs/03-light-clients/01-developer-guide/05-upgrades.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -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/docs/03-light-clients/01-developer-guide/06-proofs.md b/docs/docs/03-light-clients/01-developer-guide/06-proofs.md deleted file mode 100644 index 636e2b70e80..00000000000 --- a/docs/docs/03-light-clients/01-developer-guide/06-proofs.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -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/docs/03-light-clients/01-developer-guide/07-proposals.md b/docs/docs/03-light-clients/01-developer-guide/07-proposals.md deleted file mode 100644 index a5af1b4c705..00000000000 --- a/docs/docs/03-light-clients/01-developer-guide/07-proposals.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -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/docs/03-light-clients/01-developer-guide/08-genesis.md b/docs/docs/03-light-clients/01-developer-guide/08-genesis.md deleted file mode 100644 index 5c7c611e729..00000000000 --- a/docs/docs/03-light-clients/01-developer-guide/08-genesis.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -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/docs/03-light-clients/01-developer-guide/09-setup.md b/docs/docs/03-light-clients/01-developer-guide/09-setup.md deleted file mode 100644 index 7ccbf4a5833..00000000000 --- a/docs/docs/03-light-clients/01-developer-guide/09-setup.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -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" -} -``` - -If the `AllowedClients` list contains a single element that is equal to the wildcard `"*"`, then all client types are allowed and it is thus not necessary to submit a governance proposal to update the parameter. diff --git a/docs/docs/03-light-clients/01-developer-guide/_category_.json b/docs/docs/03-light-clients/01-developer-guide/_category_.json deleted file mode 100644 index 9be9c3c3a08..00000000000 --- a/docs/docs/03-light-clients/01-developer-guide/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Developer Guide", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/docs/03-light-clients/02-localhost/01-overview.md b/docs/docs/03-light-clients/02-localhost/01-overview.md deleted file mode 100644 index d32ccb01684..00000000000 --- a/docs/docs/03-light-clients/02-localhost/01-overview.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -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/docs/03-light-clients/02-localhost/02-integration.md b/docs/docs/03-light-clients/02-localhost/02-integration.md deleted file mode 100644 index e1fc491a332..00000000000 --- a/docs/docs/03-light-clients/02-localhost/02-integration.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -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 implicitly enabled by using the `AllowAllClients` wildcard (`"*"`) in the 02-client submodule default value for param [`allowed_clients`](https://github.com/cosmos/ibc-go/blob/v7.0.0/proto/ibc/core/client/v1/client.proto#L102). - -```go -// DefaultAllowedClients are the default clients for the AllowedClients parameter. -// By default it allows all client types. -var DefaultAllowedClients = []string{AllowAllClients} -``` diff --git a/docs/docs/03-light-clients/02-localhost/03-client-state.md b/docs/docs/03-light-clients/02-localhost/03-client-state.md deleted file mode 100644 index 5f0a990412e..00000000000 --- a/docs/docs/03-light-clients/02-localhost/03-client-state.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -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 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/docs/03-light-clients/02-localhost/04-connection.md b/docs/docs/03-light-clients/02-localhost/04-connection.md deleted file mode 100644 index 160c814d229..00000000000 --- a/docs/docs/03-light-clients/02-localhost/04-connection.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -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/docs/03-light-clients/02-localhost/05-state-verification.md b/docs/docs/03-light-clients/02-localhost/05-state-verification.md deleted file mode 100644 index ddf4f03de10..00000000000 --- a/docs/docs/03-light-clients/02-localhost/05-state-verification.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -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/docs/03-light-clients/02-localhost/_category_.json b/docs/docs/03-light-clients/02-localhost/_category_.json deleted file mode 100644 index 0dc062d29e6..00000000000 --- a/docs/docs/03-light-clients/02-localhost/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Localhost", - "position": 2, - "link": null -} \ No newline at end of file diff --git a/docs/docs/03-light-clients/03-solomachine/01-solomachine.md b/docs/docs/03-light-clients/03-solomachine/01-solomachine.md deleted file mode 100644 index 394e5ec6efb..00000000000 --- a/docs/docs/03-light-clients/03-solomachine/01-solomachine.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -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/docs/03-light-clients/03-solomachine/02-concepts.md b/docs/docs/03-light-clients/03-solomachine/02-concepts.md deleted file mode 100644 index 270dab232a6..00000000000 --- a/docs/docs/03-light-clients/03-solomachine/02-concepts.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -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/docs/03-light-clients/03-solomachine/03-state.md b/docs/docs/03-light-clients/03-solomachine/03-state.md deleted file mode 100644 index 90d017473c3..00000000000 --- a/docs/docs/03-light-clients/03-solomachine/03-state.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -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/docs/03-light-clients/03-solomachine/04-state_transitions.md b/docs/docs/03-light-clients/03-solomachine/04-state_transitions.md deleted file mode 100644 index 22a456fcc0e..00000000000 --- a/docs/docs/03-light-clients/03-solomachine/04-state_transitions.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -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/docs/03-light-clients/03-solomachine/_category_.json b/docs/docs/03-light-clients/03-solomachine/_category_.json deleted file mode 100644 index de0a6927408..00000000000 --- a/docs/docs/03-light-clients/03-solomachine/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Solomachine", - "position": 3, - "link": null -} \ No newline at end of file diff --git a/docs/docs/03-light-clients/04-wasm/03-integration.md b/docs/docs/03-light-clients/04-wasm/03-integration.md deleted file mode 100644 index 3827203e6cd..00000000000 --- a/docs/docs/03-light-clients/04-wasm/03-integration.md +++ /dev/null @@ -1,368 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 3 -slug: /ibc/light-clients/wasm/integration ---- - -# Integration - -Learn how to integrate the `08-wasm` module in a chain binary and about the recommended approaches depending on whether the [`x/wasm` module](https://github.com/CosmWasm/wasmd/tree/main/x/wasm) is already used in the chain. The following document only applies for Cosmos SDK chains. - -## `app.go` setup - -The sample code below shows the relevant integration points in `app.go` required to setup the `08-wasm` module in a chain binary. Since `08-wasm` is a light client module itself, please check out as well the section [Integrating light clients](../../01-ibc/02-integration.md#integrating-light-clients) for more information: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - - cmtos "github.com/cometbft/cometbft/libs/os" - - ibcwasm "github.com/cosmos/ibc-go/modules/light-clients/08-wasm" - ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -... - -// Register the AppModule for the 08-wasm module -ModuleBasics = module.NewBasicManager( - ... - ibcwasm.AppModuleBasic{}, - ... -) - -// Add 08-wasm Keeper -type SimApp struct { - ... - WasmClientKeeper ibcwasmkeeper.Keeper - ... -} - -func NewSimApp( - logger log.Logger, - db dbm.DB, - traceStore io.Writer, - loadLatest bool, - appOpts servertypes.AppOptions, - baseAppOptions ...func(*baseapp.BaseApp), -) *SimApp { - ... - keys := sdk.NewKVStoreKeys( - ... - ibcwasmtypes.StoreKey, - ) - - // Instantiate 08-wasm's keeper - // This sample code uses a constructor function that - // accepts a pointer to an existing instance of Wasm VM. - // This is the recommended approach when the chain - // also uses `x/wasm`, and then the Wasm VM instance - // can be shared. - app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmVM, - app.GRPCQueryRouter(), - ) - app.ModuleManager = module.NewManager( - // SDK app modules - ... - ibcwasm.NewAppModule(app.WasmClientKeeper), - ) - app.ModuleManager.SetOrderBeginBlockers( - ... - ibcwasmtypes.ModuleName, - ... - ) - app.ModuleManager.SetOrderEndBlockers( - ... - ibcwasmtypes.ModuleName, - ... - ) - genesisModuleOrder := []string{ - ... - ibcwasmtypes.ModuleName, - ... - } - app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) - app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) - ... - - // initialize BaseApp - app.SetInitChainer(app.InitChainer) - ... - - // must be before Loading version - if manager := app.SnapshotManager(); manager != nil { - err := manager.RegisterExtensions( - ibcwasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.WasmClientKeeper), - ) - if err != nil { - panic(fmt.Errorf("failed to register snapshot extension: %s", err)) - } - } - ... - - if loadLatest { - ... - - ctx := app.BaseApp.NewUncachedContext(true, cmtproto.Header{}) - - // Initialize pinned codes in wasmvm as they are not persisted there - if err := ibcwasmkeeper.InitializePinnedCodes(ctx); err != nil { - cmtos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) - } - } -} -``` - -## Keeper instantiation - -When it comes to instantiating `08-wasm`'s keeper there are two recommended ways of doing it. Choosing one or the other will depend on whether the chain already integrates [`x/wasm`](https://github.com/CosmWasm/wasmd/tree/main/x/wasm) or not. - -### If `x/wasm` is present - -If the chain where the module is integrated uses `x/wasm` then we recommend that both `08-wasm` and `x/wasm` share the same Wasm VM instance. Having two separate Wasm VM instances is still possible, but care should be taken to make sure that both instances do not share the directory when the VM stores blobs and various caches, otherwise unexpected behaviour is likely to happen. - -In order to share the Wasm VM instance please follow the guideline below. Please note that this requires `x/wasm`v0.41 or above. - -- Instantiate the Wasm VM in `app.go` with the parameters of your choice. -- [Create an `Option` with this Wasm VM instance](https://github.com/CosmWasm/wasmd/blob/db93d7b6c7bb6f4a340d74b96a02cec885729b59/x/wasm/keeper/options.go#L21-L25). -- Add the option created in the previous step to a slice and [pass it to the `x/wasm NewKeeper` constructor function](https://github.com/CosmWasm/wasmd/blob/db93d7b6c7bb6f4a340d74b96a02cec885729b59/x/wasm/keeper/keeper_cgo.go#L36). -- Pass the pointer to the Wasm VM instance to `08-wasm` [NewKeeperWithVM constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47). - -The code to set this up would look something like this: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - - wasmvm "github.com/CosmWasm/wasmvm" - ibcwasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - ... -) - -... - -// instantiate the Wasm VM with the chosen parameters -wasmer, err := wasmvm.NewVM( - dataDir, - availableCapabilities, - contractMemoryLimit, // default of 32 - contractDebugMode, - memoryCacheSize, -) -if err != nil { - panic(err) -} - -// create an Option slice (or append to an existing one) -// with the option to use a custom Wasm VM instance -wasmOpts = []ibcwasmkeeper.Option{ - ibcwasmkeeper.WithWasmEngine(wasmer), -} - -// the keeper will use the provided Wasm VM instance, -// instead of instantiating a new one -app.WasmKeeper = ibcwasmkeeper.NewKeeper( - appCodec, - keys[ibcwasmtypes.StoreKey], - app.AccountKeeper, - app.BankKeeper, - app.StakingKeeper, - distrkeeper.NewQuerier(app.DistrKeeper), - app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedWasmKeeper, - app.TransferKeeper, - app.MsgServiceRouter(), - app.GRPCQueryRouter(), - wasmDir, - wasmConfig, - availableCapabilities, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmOpts..., -) - -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmer, // pass the Wasm VM instance to `08-wasm` keeper constructor - app.GRPCQueryRouter(), -) -... -``` - -### If `x/wasm` is not present - -If the chain does not use [`x/wasm`](https://github.com/CosmWasm/wasmd/tree/main/x/wasm), even though it is still possible to use the method above from the previous section -(e.g. instantiating a Wasm VM in app.go an pass it to 08-wasm's [`NewKeeperWithVM` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47), since there would be no need in this case to share the Wasm VM instance with another module, you can use the [`NewKeeperWithConfig`` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L88-L96) and provide the Wasm VM configuration parameters of your choice instead. A Wasm VM instance will be created in`NewKeeperWithConfig`. The parameters that can set are: - -- `DataDir` is the [directory for Wasm blobs and various caches](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L25). In `wasmd` this is set to the [`wasm` folder under the home directory](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L578). -- `SupportedCapabilities` is a comma separated [list of capabilities supported by the chain](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L26). [`wasmd` sets this to all the available capabilities](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L586), but 08-wasm only requires `iterator`. -- `MemoryCacheSize` sets [the size in MiB of an in-memory cache for e.g. module caching](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L29C16-L29C104). It is not consensus-critical and should be defined on a per-node basis, often in the range 100 to 1000 MB. [`wasmd` reads this value of](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L579). Default value is 256. -- `ContractDebugMode` is a [flag to enable/disable printing debug logs from the contract to STDOUT](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L28). This should be false in production environments. Default value is false. - -Another configuration parameter of the Wasm VM is the contract memory limit (in MiB), which is [set to 32](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L8), [following the example of `wasmd`](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/x/wasm/keeper/keeper.go#L32-L34). This parameter is not configurable by users of `08-wasm`. - -The following sample code shows how the keeper would be constructed using this method: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - - ibcwasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) -... -wasmConfig := ibcwasmtypes.WasmConfig{ - DataDir: "ibc_08-wasm_client_data", - SupportedCapabilities: "iterator", - ContractDebugMode: false, -} -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmConfig, - app.GRPCQueryRouter(), -) -``` - -Check out also the [`WasmConfig` type definition](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L21-L31) for more information on each of the configurable parameters. Some parameters allow node-level configurations. There is additionally the function [`DefaultWasmConfig`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L36-L42) available that returns a configuration with the default values. - -### Options - -The `08-wasm` module comes with an options API inspired by the one in `x/wasm`. -Currently the only option available is the `WithQueryPlugins` option, which allows registration of custom query plugins for the `08-wasm` module. The use of this API is optional and it is only required if the chain wants to register custom query plugins for the `08-wasm` module. - -#### `WithQueryPlugins` - -By default, the `08-wasm` module does not support any queries. However, it is possible to register custom query plugins for [`QueryRequest::Custom`](https://github.com/CosmWasm/cosmwasm/blob/v1.5.0/packages/std/src/query/mod.rs#L45) and [`QueryRequest::Stargate`](https://github.com/CosmWasm/cosmwasm/blob/v1.5.0/packages/std/src/query/mod.rs#L54-L61). - -Assuming that the keeper is not yet instantiated, the following sample code shows how to register query plugins for the `08-wasm` module. - -We first construct a [`QueryPlugins`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/querier.go#L78-L87) object with the desired query plugins: - -```go -queryPlugins := ibcwasmtypes.QueryPlugins { - Custom: MyCustomQueryPlugin(), - // `myAcceptList` is a `[]string` containing the list of gRPC query paths that the chain wants to allow for the `08-wasm` module to query. - // These queries must be registered in the chain's gRPC query router, be deterministic, and track their gas usage. - // The `AcceptListStargateQuerier` function will return a query plugin that will only allow queries for the paths in the `myAcceptList`. - // The query responses are encoded in protobuf unlike the implementation in `x/wasm`. - Stargate: ibcwasmtypes.AcceptListStargateQuerier(myAcceptList), -} -``` - -You may leave any of the fields in the `QueryPlugins` object as `nil` if you do not want to register a query plugin for that query type. - -Then, we pass the `QueryPlugins` object to the `WithQueryPlugins` option: - -```go -querierOption := ibcwasmkeeper.WithQueryPlugins(&queryPlugins) -``` - -Finally, we pass the option to the `NewKeeperWithConfig` or `NewKeeperWithVM` constructor function during [Keeper instantiation](#keeper-instantiation): - -```diff -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmConfig, - app.GRPCQueryRouter(), -+ querierOption, -) -``` - -```diff -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmer, // pass the Wasm VM instance to `08-wasm` keeper constructor - app.GRPCQueryRouter(), -+ querierOption, -) -``` - -## Updating `AllowedClients` - -If the chain's 02-client submodule parameter `AllowedClients` contains the single wildcard `"*"` element, then it is not necessary to do anything in order to allow the creation of `08-wasm` clients. However, if the parameter contains a list of client types (e.g. `["06-solomachine", "07-tendermint"]`), then in order to use the `08-wasm` module chains must update the [`AllowedClients` parameter](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/client.proto#L64) of core IBC. This can be configured directly in the application upgrade handler with the sample code below: - -```go -import ( - ... - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -... - -func CreateWasmUpgradeHandler( - mm *module.Manager, - configurator module.Configurator, - clientKeeper clientkeeper.Keeper, -) upgradetypes.UpgradeHandler { - return func(ctx context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - sdkCtx := sdk.UnwrapSDKContext(ctx) - // explicitly update the IBC 02-client params, adding the wasm client type - params := clientKeeper.GetParams(ctx) - params.AllowedClients = append(params.AllowedClients, ibcwasmtypes.Wasm) - clientKeeper.SetParams(ctx, params) - - return mm.RunMigrations(ctx, configurator, vm) - } -} -``` - -Or alternatively the parameter can be updated via a governance proposal (see at the bottom of section [`Creating clients`](../01-developer-guide/09-setup.md#creating-clients) for an example of how to do this). - -## Adding the module to the store - -As part of the upgrade migration you must also add the module to the upgrades store. - -```go -func (app SimApp) RegisterUpgradeHandlers() { - - ... - - if upgradeInfo.Name == UpgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - storeUpgrades := storetypes.StoreUpgrades{ - Added: []string{ - ibcwasmtypes.ModuleName, - }, - } - - // configure store loader that checks if version == upgradeHeight and applies store upgrades - app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) - } -} -``` - -## Adding snapshot support - -In order to use the `08-wasm` module chains are required to register the `WasmSnapshotter` extension in the snapshot manager. This snapshotter takes care of persisting the external state, in the form of contract code, of the Wasm VM instance to disk when the chain is snapshotted. [This code](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/testing/simapp/app.go#L775-L782) should be placed in `NewSimApp` function in `app.go`. - -## Pin byte codes at start - -Wasm byte codes should be pinned to the WasmVM cache on every application start, therefore [this code](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/testing/simapp/app.go#L825-L830) should be placed in `NewSimApp` function in `app.go`. diff --git a/docs/docs/03-light-clients/_category_.json b/docs/docs/03-light-clients/_category_.json deleted file mode 100644 index 8e1f221f353..00000000000 --- a/docs/docs/03-light-clients/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "IBC Light Clients", - "position": 3, - "link": null -} \ No newline at end of file diff --git a/docs/docs/04-middleware/01-ics29-fee/01-overview.md b/docs/docs/04-middleware/01-ics29-fee/01-overview.md deleted file mode 100644 index 7a34adec74e..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/01-overview.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -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 terminolgy. - -`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/docs/04-middleware/01-ics29-fee/02-integration.md b/docs/docs/04-middleware/01-ics29-fee/02-integration.md deleted file mode 100644 index 343e09fb11e..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/02-integration.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -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/docs/04-middleware/01-ics29-fee/03-msgs.md b/docs/docs/04-middleware/01-ics29-fee/03-msgs.md deleted file mode 100644 index 4496df29f98..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/03-msgs.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -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/docs/04-middleware/01-ics29-fee/04-fee-distribution.md b/docs/docs/04-middleware/01-ics29-fee/04-fee-distribution.md deleted file mode 100644 index d66c067bdac..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/04-fee-distribution.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -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/docs/04-middleware/01-ics29-fee/05-events.md b/docs/docs/04-middleware/01-ics29-fee/05-events.md deleted file mode 100644 index 610130fa578..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/05-events.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -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/docs/04-middleware/01-ics29-fee/06-end-users.md b/docs/docs/04-middleware/01-ics29-fee/06-end-users.md deleted file mode 100644 index f3985cc0358..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/06-end-users.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -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/docs/04-middleware/01-ics29-fee/_category_.json b/docs/docs/04-middleware/01-ics29-fee/_category_.json deleted file mode 100644 index ddca8d29da6..00000000000 --- a/docs/docs/04-middleware/01-ics29-fee/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Fee Middleware", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/docs/04-middleware/01-ics29-fee/images/feeflow.png b/docs/docs/04-middleware/01-ics29-fee/images/feeflow.png deleted file mode 100644 index ba02071f4d8e8132ac527c279cf32da9d9dbe24d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394717 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