mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-25 07:45:18 +00:00
add kavadist spec
This commit is contained in:
parent
dc5614b241
commit
0c49f1b089
3
x/kavadist/spec/01_concepts.md
Normal file
3
x/kavadist/spec/01_concepts.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Concepts
|
||||
|
||||
The minting mechanism in this module is designed to allow governance to determine a set of inflationary periods and the APR rate of inflation for each period. This module mints coins each block according to the schedule such that after 1 year the APR inflation worth of coins will have been minted. Governance can alter the APR inflation using a parameter change proposal. Parameter change proposals that change the APR will take effect in the block after they pass.
|
30
x/kavadist/spec/02_state.md
Normal file
30
x/kavadist/spec/02_state.md
Normal file
@ -0,0 +1,30 @@
|
||||
# State
|
||||
|
||||
## Parameters and Genesis State
|
||||
|
||||
`Parameters` define the rate at which inflationary coins are minted and for how long inflationary periods last.
|
||||
|
||||
```go
|
||||
// Params governance parameters for kavadist module
|
||||
type Params struct {
|
||||
Active bool `json:"active" yaml:"active"`
|
||||
Periods Periods `json:"periods" yaml:"periods"`
|
||||
}
|
||||
|
||||
// Period stores the specified start and end dates, and the inflation, expressed as a decimal representing the yearly APR of tokens that will be minted during that period
|
||||
type Period struct {
|
||||
Start time.Time `json:"start" yaml:"start"` // example "2020-03-01T15:20:00Z"
|
||||
End time.Time `json:"end" yaml:"end"` // example "2020-06-01T15:20:00Z"
|
||||
Inflation sdk.Dec `json:"inflation" yaml:"inflation"` // example "1.000000003022265980" - 10% inflation
|
||||
}
|
||||
```
|
||||
|
||||
`GenesisState` defines the state that must be persisted when the blockchain stops/restarts in order for normal function of the kavadist module to resume.
|
||||
|
||||
```go
|
||||
// GenesisState is the state that must be provided at genesis.
|
||||
type GenesisState struct {
|
||||
Params Params `json:"params" yaml:"params"`
|
||||
PreviousBlockTime time.Time `json:"previous_block_time" yaml:"previous_block_time"`
|
||||
}
|
||||
```
|
3
x/kavadist/spec/03_messages.md
Normal file
3
x/kavadist/spec/03_messages.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Messages
|
||||
|
||||
There are no messages in the kavadist module. All state transitions are controlled by parameters, which can be updated via parameter change proposals.
|
10
x/kavadist/spec/04_events.md
Normal file
10
x/kavadist/spec/04_events.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Events
|
||||
|
||||
The `x/kavadist` module emits the following events:
|
||||
|
||||
## BeginBlock
|
||||
|
||||
| Type | Attribute Key | Attribute Value |
|
||||
|----------------------|---------------------|-----------------|
|
||||
| kavadist | kava_dist_inflation | {amount} |
|
||||
| kavadist | kava_dist_status | "inactive" |
|
15
x/kavadist/spec/05_params.md
Normal file
15
x/kavadist/spec/05_params.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Parameters
|
||||
|
||||
The kavadist module has the following parameters:
|
||||
|
||||
| Key | Type | Example | Description |
|
||||
|------------|----------------|---------------|--------------------------------------------------|
|
||||
| Periods | array (Period) | [{see below}] | array of params for each inflationary period |
|
||||
|
||||
Each `Period` has the following parameters
|
||||
|
||||
| Key | Type | Example | Description |
|
||||
|------------|--------------------|--------------------------|----------------------------------------------------------------|
|
||||
| Start | time.Time | "2020-03-01T15:20:00Z" | the time when the period will start |
|
||||
| End | time.Time | "2020-06-01T15:20:00Z" | the time when the period will end |
|
||||
| Inflation | sdk.Dec | "1.000000003022265980" | the per-second inflation for the period |
|
12
x/kavadist/spec/06_begin_block.md
Normal file
12
x/kavadist/spec/06_begin_block.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Begin Block
|
||||
|
||||
At the start of each block, the inflationary coins for the ongoing period, if any, are minted. The logic is as follows:
|
||||
|
||||
```go
|
||||
func BeginBlocker(ctx sdk.Context, k Keeper) {
|
||||
err := k.MintPeriodInflation(ctx)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
13
x/kavadist/spec/README.md
Normal file
13
x/kavadist/spec/README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# `kavadist`
|
||||
|
||||
<!-- TOC -->
|
||||
1. **[Concepts](01_concepts.md)**
|
||||
2. **[State](02_state.md)**
|
||||
3. **[Messages](03_messages.md)**
|
||||
4. **[Events](04_events.md)**
|
||||
5. **[Params](05_params.md)**
|
||||
6. **[BeginBlock](06_begin_block.md)**
|
||||
|
||||
## Abstract
|
||||
|
||||
`x/kavadist` is an implementation of a Cosmos SDK Module that allows for governance controlled minting of coins into a module account. Coins are minted during inflationary periods, which each period have a governance specified APR and duration. This module does not provide functionality for spending or distributing the minted coins.
|
Loading…
Reference in New Issue
Block a user