Skip to content

Commit

Permalink
feat(genesis transfers): wires genesis transfers (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
danwt authored Jul 5, 2024
1 parent 9a4756e commit a00a8c6
Showing 1 changed file with 44 additions and 35 deletions.
79 changes: 44 additions & 35 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,13 @@ var (
govtypes.ModuleName: {authtypes.Burner},
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
wasmtypes.ModuleName: {authtypes.Burner},
hubgentypes.ModuleName: {authtypes.Burner},
hubgentypes.ModuleName: {authtypes.Minter},
}

// module accounts that are allowed to receive tokens
maccCanReceiveTokens = []string{
distrtypes.ModuleName,
hubgentypes.ModuleName,
}
)

Expand Down Expand Up @@ -291,7 +297,6 @@ func NewRollapp(
wasmOpts []wasmkeeper.Option,
baseAppOptions ...func(*baseapp.BaseApp),
) *App {

appCodec := encodingConfig.Codec
cdc := encodingConfig.Amino
interfaceRegistry := encodingConfig.InterfaceRegistry
Expand Down Expand Up @@ -371,7 +376,7 @@ func NewRollapp(
keys[banktypes.StoreKey],
app.AccountKeeper,
app.GetSubspace(banktypes.ModuleName),
app.BlockedModuleAccountAddrs(),
app.BlockedAddrs(),
)

stakingKeeper := stakingkeeper.NewKeeper(
Expand Down Expand Up @@ -399,7 +404,7 @@ func NewRollapp(

app.DistrKeeper = distrkeeper.NewKeeper(
appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
&stakingKeeper, &app.SequencersKeeper, authtypes.FeeCollectorName, app.ModuleAccountAddrs(),
&stakingKeeper, &app.SequencersKeeper, authtypes.FeeCollectorName, nil, // TODO: upgrade to https://github.com/dymensionxyz/dymension-rdk/pull/476
)

app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper)
Expand Down Expand Up @@ -452,48 +457,59 @@ func NewRollapp(
),
)

app.HubKeeper = hubkeeper.NewKeeper(
appCodec,
keys[hubtypes.StoreKey],
)

app.HubGenesisKeeper = hubgenkeeper.NewKeeper(
appCodec,
keys[hubgentypes.StoreKey],
app.GetSubspace(hubgentypes.ModuleName),
app.AccountKeeper,
)

app.HubKeeper = hubkeeper.NewKeeper(
appCodec,
keys[hubtypes.StoreKey],
)

denomMetadataMiddleware := denommetadata.NewICS4Wrapper(
app.IBCKeeper.ChannelKeeper,
app.HubKeeper,
app.BankKeeper,
app.HubGenesisKeeper.GetState,
)

genesisTransfersBlocker := hubgenkeeper.NewICS4Wrapper(denomMetadataMiddleware, app.HubGenesisKeeper) // ICS4 Wrapper: claims IBC middleware

// Create Transfer Keepers
app.TransferKeeper = ibctransferkeeper.NewKeeper(
appCodec,
keys[ibctransfertypes.StoreKey],
app.GetSubspace(ibctransfertypes.ModuleName),
denomMetadataMiddleware,
genesisTransfersBlocker,
app.IBCKeeper.ChannelKeeper,
&app.IBCKeeper.PortKeeper,
app.AccountKeeper,
app.BankKeeper,
scopedTransferKeeper,
)

var transferIBCModule ibcporttypes.IBCModule
transferIBCModule = ibctransfer.NewIBCModule(app.TransferKeeper)
transferIBCModule = denommetadata.NewIBCModule(
transferIBCModule,
// create IBC module from top to bottom of stack
var transferStack ibcporttypes.IBCModule

transferStack = ibctransfer.NewIBCModule(app.TransferKeeper)
transferStack = denommetadata.NewIBCModule(
transferStack,
app.BankKeeper,
app.TransferKeeper,
app.HubKeeper,
denommetadatamoduletypes.NewMultiDenommetadataHooks(),
)

transferStack = hubgenkeeper.NewIBCModule(
transferStack,
app.TransferKeeper,
app.HubGenesisKeeper,
app.BankKeeper,
)

wasmDir := filepath.Join(homePath, "wasm")
wasmConfig, err := wasm.ReadWasmConfig(appOpts)
if err != nil {
Expand Down Expand Up @@ -533,7 +549,7 @@ func NewRollapp(

// Create static IBC router, add transfer route, then set and seal it
ibcRouter := ibcporttypes.NewRouter()
ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferIBCModule).AddRoute(wasmtypes.ModuleName, wasmStack)
ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack).AddRoute(wasmtypes.ModuleName, wasmStack)
app.IBCKeeper.SetRouter(ibcRouter)

/**** Module Options ****/
Expand Down Expand Up @@ -798,21 +814,23 @@ func (app *App) LoadHeight(height int64) error {

// ModuleAccountAddrs returns all the app's module account addresses.
func (app *App) ModuleAccountAddrs() map[string]bool {
modAccAddrs := make(map[string]bool)
ret := make(map[string]bool)
for acc := range maccPerms {
modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true
ret[authtypes.NewModuleAddress(acc).String()] = true
}

return modAccAddrs
return ret
}

// BlockedModuleAccountAddrs returns all the app's blocked module account
// addresses.
func (app *App) BlockedModuleAccountAddrs() map[string]bool {
modAccAddrs := app.ModuleAccountAddrs()
delete(modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String())

return modAccAddrs
// BlockedAddrs returns all the app's module account addresses that are not
// allowed to receive funds. If the map value is true, that account cannot receive funds.
func (app *App) BlockedAddrs() map[string]bool {
// block all modules by default
ret := app.ModuleAccountAddrs()
// delete them if they CAN receive tokens
for _, acc := range maccCanReceiveTokens {
delete(ret, authtypes.NewModuleAddress(acc).String())
}
return ret
}

// LegacyAmino returns App's amino codec.
Expand Down Expand Up @@ -954,15 +972,6 @@ func RegisterSwaggerAPI(_ client.Context, rtr *mux.Router) {
rtr.PathPrefix("/swagger/").Handler(http.StripPrefix("/swagger/", staticServer))
}

// GetMaccPerms returns a copy of the module account permissions
func GetMaccPerms() map[string][]string {
dupMaccPerms := make(map[string][]string)
for k, v := range maccPerms {
dupMaccPerms[k] = v
}
return dupMaccPerms
}

// initParamsKeeper init params keeper and its subspaces
func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper {
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
Expand Down

0 comments on commit a00a8c6

Please sign in to comment.