Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add custom inflation calculation #120

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Conversation

arijitAD
Copy link

@arijitAD arijitAD commented Aug 17, 2021

Description

  1. The Akash whitepaper defines a time-based function for the inflation: I(t). The way cosmos-sdk currently calculates inflation is different as compared to what the Akash whitepaper prescribes. So, we need the cosmos-sdk to accept a custom function to calculate inflation. When the custom function isn't provided, it should use the default inflation calculation logic as it currently does.

  2. The inflation function defined in the Akash whitepaper does not account for the inflation range that is an important piece of cosmos inflation mechanics. It is proposed that we add a chain parameter for deriving a range from I(t). Let's call the chain parameter R. It will be a percentage of I(t). So from I(t), we can get a range [I(t) - I(t) * R, I(t) + I(t) * R], and then we can input that range as min, max inflation parameters of the current inflation mechanics.


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 in the PR title
  • added ! to the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • followed the guidelines for building modules
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • included comments for documenting Go code
  • 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 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)

@arijitAD
Copy link
Author

arijitAD commented Aug 17, 2021

  1. The Akash whitepaper defines a time-based function for the inflation: I(t). The way cosmos-sdk currently calculates inflation is different as compared to what the Akash whitepaper prescribes. So, we need the cosmos-sdk to accept a custom function to calculate inflation. When the custom function isn't provided, it should use the default inflation calculation logic as it currently does.

This part is done in this PR.

  1. The inflation function defined in the Akash whitepaper does not account for the inflation range that is an important piece of cosmos inflation mechanics. It is proposed that we add a chain parameter for deriving a range from I(t). Let's call the chain parameter R. It will be a percentage of I(t). So from I(t), we can get a range [I(t) - I(t) * R, I(t) + I(t) * R], and then we can input that range as min, max inflation parameters of the current inflation mechanics.

I think, instead of defining a parameter in the cosmos-sdk's mint module, we can create a separate subspace in our app for storing such extra parameters and use them in the custom inflation calculator function, which will again be defined in our code. The reason is that this particular parameter is very specific to our way of calculating the inflation and doesn't seem fit to be included in the sdk for generic purposes.

@arijitAD arijitAD requested a review from boz August 17, 2021 13:25
Copy link

@boz boz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great - thanks for the light touch on the upstream repo 🚀

x/mint/abci.go Outdated
@@ -20,7 +20,11 @@ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
// recalculate inflation rate
totalStakingSupply := k.StakingTokenSupply(ctx)
bondedRatio := k.BondedRatio(ctx)
minter.Inflation = minter.NextInflationRate(params, bondedRatio)
if ic == nil {
minter.Inflation = minter.NextInflationRate(params, bondedRatio)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can minter.NextInflationRate() be turned into a types.InflationCalculationFn function so that it can be the default?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@arijitAD arijitAD requested a review from boz August 20, 2021 11:25
Copy link

@boz boz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! Thank you @arijitAD

@arijitAD
Copy link
Author

Added PR in origin cosmos#10441

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants