cosmos-sdk/x
Matt, Park ea67659950
feat: Allow to restrict MintCoins from app.go (#10771)
## Description

Closes: https://github.com/cosmos/cosmos-sdk/issues/10386

This PR adds feature to the bank module so that other modules using bankKeeper would be able to call the keeper with restricted permissions when minting coins. `WithMintCoinsRestriction` would be able to get called within app.go when setting keeper components for each individual keeper, taking a function that would validate minting denom as an argument.

The example below demonstrates adding bank module with restricted permissions.
```
	app.DistrKeeper = distrkeeper.NewKeeper(
		appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper.WithMintCoinsRestriction(DistributionMintingRestriction),
		&stakingKeeper, authtypes.FeeCollectorName, app.ModuleAccountAddrs(),
	)
```
while there would be a seperate function that would restrict and validate allowed denoms as such.

```

func DistributionMintingRestriction(ctx sdk.Context, coins sdk.Coins) errors {
  for _, coin := range coins {
    if coin.Denom != ctx.NativeStakingDenom {
       return errors.New(fmt.Sprintf("Distribution can only print denom %s, tried minting %s", ctx.NativeStakingDenom, coin.Denom))
     }
  }
}
```

The sdk's simapp currently does not have any keepers that are to be changed with this implementation added, thus remaining unchanged in `app.go`.







---

### Author Checklist

*All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.*

I have...

- [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] added `!` to the type prefix if API or client breaking change
- [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting))
- [ ] provided a link to the relevant issue or specification
- [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules)
- [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing)
- [ ] added a changelog entry to `CHANGELOG.md`
- [ ] included comments for [documenting Go code](https://blog.golang.org/godoc)
- [ ] updated the relevant documentation or specification
- [ ] reviewed "Files changed" and left comments if necessary
- [ ] confirmed all CI checks have passed

### Reviewers Checklist

*All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.*

I have...

- [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] confirmed `!` in the type prefix if API or client breaking change
- [ ] confirmed all author checklist items have been addressed 
- [ ] reviewed state machine logic
- [ ] reviewed API design and naming
- [ ] reviewed documentation is accurate
- [ ] reviewed tests and test coverage
- [ ] manually tested (if applicable)
2022-02-18 10:08:14 +00:00
..
auth docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
authz chore: rename migrations v045 -> v046 (#11210) 2022-02-17 12:34:03 +01:00
bank feat: Allow to restrict MintCoins from app.go (#10771) 2022-02-18 10:08:14 +00:00
capability docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
crisis docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
distribution docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
epoching docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
evidence docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
feegrant docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
genutil feat: Add x/gov v043->v046 migrations (#11036) 2022-02-03 10:52:33 +00:00
gov fix: gov 0.46 migration (#11206) 2022-02-16 17:16:13 +01:00
group feat(authz)!: pruning expired authorizations (#10714) 2022-02-16 17:36:50 +00:00
mint docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
nft chore: fix warnings in comments/documentation of nft module (#11150) 2022-02-09 10:17:13 +00:00
params docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
simulation chore: bump TM to v0.35.0 release candidate (#10210) 2021-11-16 11:24:38 -08:00
slashing docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
staking docs: Code blocks in SDK docs are broken (#11189) 2022-02-14 23:39:35 +01:00
upgrade docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
README.md docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00

README.md

List of Modules

Here are some production-grade modules that can be used in Cosmos SDK applications, along with their respective documentation:

  • Auth - Authentication of accounts and transactions for Cosmos SDK applications.
  • Authz - Authorization for accounts to perform actions on behalf of other accounts.
  • Bank - Token transfer functionalities.
  • Capability - Object capability implementation.
  • Crisis - Halting the blockchain under certain circumstances (e.g. if an invariant is broken).
  • Distribution - Fee distribution, and staking token provision distribution.
  • Epoching - Allows modules to queue messages for execution at a certain block height.
  • Evidence - Evidence handling for double signing, misbehaviour, etc.
  • Feegrant - Grant fee allowances for executing transactions.
  • Governance - On-chain proposals and voting.
  • Mint - Creation of new units of staking token.
  • Params - Globally available parameter store.
  • Slashing - Validator punishment mechanisms.
  • Staking - Proof-of-Stake layer for public blockchains.
  • Upgrade - Software upgrades handling and coordination.

To learn more about the process of building modules, visit the building modules reference documentation.

IBC

The IBC module for the SDK has moved to its own repository.