reward

package
v1.12.0-initial-poc.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2024 License: BSD-3-Clause Imports: 3 Imported by: 23

Documentation

Index

Examples

Constants

View Source
const PercentDenominator = 1_000_000

PercentDenominator is the denominator used to calculate percentages

Variables

This section is empty.

Functions

func Split added in v1.10.11

func Split(totalAmount uint64, shares uint32) (uint64, uint64)

Split [totalAmount] into [totalAmount * shares percentage] and the remainder.

Invariant: [shares] <= PercentDenominator

Types

type Calculator

type Calculator interface {
	Calculate(stakedDuration time.Duration, stakedAmount, currentSupply uint64) uint64
}

func NewCalculator

func NewCalculator(c Config) Calculator
Example
const (
	day             = 24 * time.Hour
	week            = 7 * day
	stakingDuration = 4 * week

	stakeAmount = 100_000 * units.Avax // 100k AVAX

	// The current supply can be fetched with the platform.getCurrentSupply API
	currentSupply = 447_903_489_576_595_361 * units.NanoAvax // ~448m AVAX
)
var (
	mainnetRewardConfig = Config{
		MaxConsumptionRate: .12 * PercentDenominator,
		MinConsumptionRate: .10 * PercentDenominator,
		MintingPeriod:      365 * 24 * time.Hour,
		SupplyCap:          720 * units.MegaAvax,
	}
	mainnetCalculator = NewCalculator(mainnetRewardConfig)
)

potentialReward := mainnetCalculator.Calculate(stakingDuration, stakeAmount, currentSupply)

fmt.Printf("Staking %d nAVAX for %s with the current supply of %d nAVAX would have a potential reward of %d nAVAX",
	stakeAmount,
	stakingDuration,
	currentSupply,
	potentialReward,
)
Output:

Staking 100000000000000 nAVAX for 672h0m0s with the current supply of 447903489576595361 nAVAX would have a potential reward of 473168956104 nAVAX

type Config

type Config struct {
	// MaxConsumptionRate is the rate to allocate funds if the validator's stake
	// duration is equal to [MintingPeriod]
	MaxConsumptionRate uint64 `json:"maxConsumptionRate"`

	// MinConsumptionRate is the rate to allocate funds if the validator's stake
	// duration is 0.
	MinConsumptionRate uint64 `json:"minConsumptionRate"`

	// MintingPeriod is period that the staking calculator runs on. It is
	// not valid for a validator's stake duration to be larger than this.
	MintingPeriod time.Duration `json:"mintingPeriod"`

	// SupplyCap is the target value that the reward calculation should be
	// asymptotic to.
	SupplyCap uint64 `json:"supplyCap"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL