mukan-ibc/modules/core/keeper/keeper.go
Mukan Erkin Törük 88dd97a9f8
Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:22 +03:00

111 lines
3.5 KiB
Go

package keeper
import (
"errors"
"reflect"
"strings"
corestore "cosmossdk.io/core/store"
"git.cw.tr/mukan-network/mukan-sdk/codec"
clientkeeper "git.cw.tr/mukan-network/mukan-ibc/modules/core/02-client/keeper"
clienttypes "git.cw.tr/mukan-network/mukan-ibc/modules/core/02-client/types"
clientv2keeper "git.cw.tr/mukan-network/mukan-ibc/modules/core/02-client/v2/keeper"
connectionkeeper "git.cw.tr/mukan-network/mukan-ibc/modules/core/03-connection/keeper"
channelkeeper "git.cw.tr/mukan-network/mukan-ibc/modules/core/04-channel/keeper"
channelkeeperv2 "git.cw.tr/mukan-network/mukan-ibc/modules/core/04-channel/v2/keeper"
portkeeper "git.cw.tr/mukan-network/mukan-ibc/modules/core/05-port/keeper"
porttypes "git.cw.tr/mukan-network/mukan-ibc/modules/core/05-port/types"
"git.cw.tr/mukan-network/mukan-ibc/modules/core/api"
"git.cw.tr/mukan-network/mukan-ibc/modules/core/types"
)
// Keeper defines each ICS keeper for IBC
type Keeper struct {
ClientKeeper *clientkeeper.Keeper
ClientV2Keeper *clientv2keeper.Keeper
ConnectionKeeper *connectionkeeper.Keeper
ChannelKeeper *channelkeeper.Keeper
ChannelKeeperV2 *channelkeeperv2.Keeper
PortKeeper *portkeeper.Keeper
cdc codec.BinaryCodec
authority string
}
// NewKeeper creates a new ibc Keeper
func NewKeeper(
cdc codec.BinaryCodec, storeService corestore.KVStoreService, paramSpace types.ParamSubspace,
upgradeKeeper clienttypes.UpgradeKeeper, authority string,
) *Keeper {
// panic if any of the keepers passed in is empty
if isEmpty(upgradeKeeper) {
panic(errors.New("cannot initialize IBC keeper: empty upgrade keeper"))
}
if strings.TrimSpace(authority) == "" {
panic(errors.New("authority must be non-empty"))
}
clientKeeper := clientkeeper.NewKeeper(cdc, storeService, paramSpace, upgradeKeeper)
clientV2Keeper := clientv2keeper.NewKeeper(cdc, clientKeeper)
connectionKeeper := connectionkeeper.NewKeeper(cdc, storeService, paramSpace, clientKeeper)
portKeeper := portkeeper.NewKeeper()
channelKeeper := channelkeeper.NewKeeper(cdc, storeService, clientKeeper, connectionKeeper)
channelKeeperV2 := channelkeeperv2.NewKeeper(cdc, storeService, clientKeeper, clientV2Keeper, channelKeeper, connectionKeeper)
return &Keeper{
cdc: cdc,
ClientKeeper: clientKeeper,
ClientV2Keeper: clientV2Keeper,
ConnectionKeeper: connectionKeeper,
ChannelKeeper: channelKeeper,
ChannelKeeperV2: channelKeeperV2,
PortKeeper: portKeeper,
authority: authority,
}
}
// Codec returns the IBC module codec.
func (k *Keeper) Codec() codec.BinaryCodec {
return k.cdc
}
// SetRouter sets the Router in IBC Keeper and seals it. The method panics if
// there is an existing router that's already sealed.
func (k *Keeper) SetRouter(rtr *porttypes.Router) {
if k.PortKeeper.Router != nil && k.PortKeeper.Router.Sealed() {
panic(errors.New("cannot reset a sealed router"))
}
k.PortKeeper.Router = rtr
k.PortKeeper.Router.Seal()
}
// SetRouterV2 sets the v2 router for the IBC Keeper.
func (k *Keeper) SetRouterV2(rtr *api.Router) {
k.ChannelKeeperV2.Router = rtr
}
// GetAuthority returns the ibc module's authority.
func (k *Keeper) GetAuthority() string {
return k.authority
}
// isEmpty checks if the interface is an empty struct or a pointer pointing
// to an empty struct
func isEmpty(keeper any) bool {
switch reflect.TypeOf(keeper).Kind() {
case reflect.Ptr:
if reflect.ValueOf(keeper).Elem().IsZero() {
return true
}
default:
if reflect.ValueOf(keeper).IsZero() {
return true
}
}
return false
}