mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-10-31 15:17:27 +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
	 Kevin Davis
						Kevin Davis