Skip to content

feat: Add custom inflation calculation#120

Open
arijitAD wants to merge 2 commits intomasterfrom
calc-inflation
Open

feat: Add custom inflation calculation#120
arijitAD wants to merge 2 commits intomasterfrom
calc-inflation

Conversation

@arijitAD
Copy link
Copy Markdown

@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
Copy Markdown
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
Copy Markdown

@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
bondedRatio := k.BondedRatio(ctx)
minter.Inflation = minter.NextInflationRate(params, bondedRatio)
if ic == nil {
minter.Inflation = minter.NextInflationRate(params, bondedRatio)
Copy link
Copy Markdown

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
Copy Markdown
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
Copy Markdown

@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
Copy Markdown
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