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 ¶
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"`
}
Click to show internal directories.
Click to hide internal directories.