go-cyber/plugins/wasm.go

package plugins

import (
	"github.com/CosmWasm/wasmd/x/wasm"
	wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
	"github.com/cosmos/cosmos-sdk/baseapp"
	"github.com/cosmos/cosmos-sdk/codec"
	authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
	bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
	bandwidthtypes "github.com/cybercongress/go-cyber/v7/x/bandwidth/types"
	dmntypes "github.com/cybercongress/go-cyber/v7/x/dmn/types"
	graphtypes "github.com/cybercongress/go-cyber/v7/x/graph/types"
	gridtypes "github.com/cybercongress/go-cyber/v7/x/grid/types"
	ranktypes "github.com/cybercongress/go-cyber/v7/x/rank/types"
	resourcestypes "github.com/cybercongress/go-cyber/v7/x/resources/types"
	tokenfactorykeeper "github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper"
	tokenfactorytypes "github.com/cybercongress/go-cyber/v7/x/tokenfactory/types"

	"github.com/cybercongress/go-cyber/v7/plugins/types"
	cyberbankkeeper "github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper"
	dmnwasm "github.com/cybercongress/go-cyber/v7/x/dmn/wasm"
	resourceskeeper "github.com/cybercongress/go-cyber/v7/x/resources/keeper"

	pluginstypes "github.com/cybercongress/go-cyber/v7/plugins/types"
	bandwidthkeeper "github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper"
	bandwidthwasm "github.com/cybercongress/go-cyber/v7/x/bandwidth/wasm"
	dmnkeeper "github.com/cybercongress/go-cyber/v7/x/dmn/keeper"
	graphkeeper "github.com/cybercongress/go-cyber/v7/x/graph/keeper"
	graphwasm "github.com/cybercongress/go-cyber/v7/x/graph/wasm"
	gridkeeper "github.com/cybercongress/go-cyber/v7/x/grid/keeper"
	gridwasm "github.com/cybercongress/go-cyber/v7/x/grid/wasm"
	rankkeeper "github.com/cybercongress/go-cyber/v7/x/rank/keeper"
	rankwasm "github.com/cybercongress/go-cyber/v7/x/rank/wasm"
	resourceswasm "github.com/cybercongress/go-cyber/v7/x/resources/wasm"
	tokenfactorywasm "github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm"
)

func RegisterCustomPlugins(
	rank *rankkeeper.StateKeeper,
	graph *graphkeeper.GraphKeeper,
	dmn *dmnkeeper.Keeper,
	grid *gridkeeper.Keeper,
	bandwidth *bandwidthkeeper.BandwidthMeter,
	resources *resourceskeeper.Keeper,
	graphIndex *graphkeeper.IndexKeeper,
	account *authkeeper.AccountKeeper,
	cyberbank *cyberbankkeeper.IndexedKeeper,
	bank *bankkeeper.Keeper,
	tokenFactory *tokenfactorykeeper.Keeper,
) []wasmkeeper.Option {
	rankQuerier := rankwasm.NewWasmQuerier(rank)
	graphQuerier := graphwasm.NewWasmQuerier(graph)
	dmnQuerier := dmnwasm.NewWasmQuerier(dmn)
	gridQuerier := gridwasm.NewWasmQuerier(grid)
	bandwidthQuerier := bandwidthwasm.NewWasmQuerier(bandwidth)
	tokenFactoryQuerier := tokenfactorywasm.NewWasmQuerier(*bank, tokenFactory)

	graphMessenger := graphwasm.NewMessenger(graph, graphIndex, account, cyberbank, bandwidth)
	dmnMessenger := dmnwasm.NewMessenger(dmn)
	gridMessenger := gridwasm.NewMessenger(grid)
	resourcesMessenger := resourceswasm.NewMessenger(resources)
	tokenFactoryMessenger := tokenfactorywasm.NewMessenger(*bank, tokenFactory)

	moduleQueriers := map[string]types.ModuleQuerier{
		ranktypes.ModuleName:         rankQuerier,
		graphtypes.ModuleName:        graphQuerier,
		dmntypes.ModuleName:          dmnQuerier,
		gridtypes.ModuleName:         gridQuerier,
		bandwidthtypes.ModuleName:    bandwidthQuerier,
		tokenfactorytypes.ModuleName: tokenFactoryQuerier,
	}

	wasmQueryPlugin := types.NewQueryPlugin(
		moduleQueriers,
		rank,
		graph,
		dmn,
		grid,
		bandwidth,
		bank,
		tokenFactory,
	)

	queryPluginOpt := wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{
		Custom: types.CustomQuerier(wasmQueryPlugin),
	})

	moduleMessengers := map[string]types.ModuleMessenger{
		graphtypes.ModuleName:        graphMessenger,
		dmntypes.ModuleName:          dmnMessenger,
		gridtypes.ModuleName:         gridMessenger,
		resourcestypes.ModuleName:    resourcesMessenger,
		tokenfactorytypes.ModuleName: tokenFactoryMessenger,
	}

	messengerDecoratorOpt := wasmkeeper.WithMessageHandlerDecorator(
		types.CustomMessageDecorator(
			moduleMessengers,
			graph,
			dmn,
			grid,
			resources,
			bank,
			tokenFactory,
		),
	)

	return []wasm.Option{
		queryPluginOpt,
		messengerDecoratorOpt,
	}
}

func RegisterStargateQueries(queryRouter baseapp.GRPCQueryRouter, codec codec.Codec) []wasmkeeper.Option {
	queryPluginOpt := wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{
		Stargate: pluginstypes.StargateQuerier(queryRouter, codec),
	})

	return []wasmkeeper.Option{
		queryPluginOpt,
	}
}

Synonyms

cyberindex/database/wasm.go
cyberindex/database/types/wasm.go

Neighbours