Parameters
Learn about the different parameters of Elastic Avalanche L1s.
Elastic L1s / Elastic Subnets have been deprecated. Please check out the PoS Validator Manager instead
Avalanche Permissioned Avalanche L1s can be turned into Elastic Avalanche L1s via the TransformSubnetTx transaction. TransformSubnetTx specifies a set of structural parameters for the Elastic Avalanche L1.
This reference document describes these structural parameters and illustrates the constraints they must satisfy.
Elastic Avalanche L1 Parameters
Subnet
Subnet has type ids.ID and it's the Avalanche L1 ID (SubnetID). Subnet is the ID of the CreateSubnetTx transaction that created the Avalanche L1 in the first place. The following constraints apply:
Subnetmust be different fromPrimaryNetworkID.
AssetID
AssetID has type ids.ID and it's the ID of the asset to use when staking on the Avalanche L1. The following constraints apply:
AssetIDmust not be theEmpty ID.AssetIDmust not beAVAX ID, the Primary Network asset.
InitialSupply
InitialSupply has type uint64 and it's the initial amount of AssetID transferred in the Elastic Avalanche L1 upon its transformation. Such amount is available for distributing staking rewards. The following constraints apply:
InitialSupplymust be larger than zero.
MaximumSupply
MaximumSupply has type uint64 and it's the maximum amount of AssetID that Avalanche L1 has available for staking and rewards at any time. The following constraints apply:
MaximumSupplymust be larger or equal toInitialSupply.
an Avalanche L1 supply can vary in time but it should be no larger than the configured maximum at any point in time, including at Avalanche L1 creation.
MinConsumptionRate
MinConsumptionRate has type uint64 and it's the minimal rate a validator can earn if the UptimeRequirement is satisfied. If StakingPeriod == MinStakeDuration, the validator will earn the MinConsumptionRate.
You can find more details about it in the Reward Formula section. The following constraints apply:
MinConsumptionRatemust be smaller or equal toPercentDenominator.
See Notes on Percentages section to understand PercentDenominator role.
MaxConsumptionRate
MaxConsumptionRate has type uint64 and it's the maximal rate a validator can earn if the UptimeRequirement is satisfied. If StakingPeriod == MaxStakeDuration == MintingPeriod, the validator will earn the MaxConsumptionRate.
You can find more details about it in the Reward Formula section. The following constraints apply:
MaxConsumptionRatemust be larger or equal toMinConsumptionRate.MaxConsumptionRatemust be smaller or equal toPercentDenominator.
See Notes on Percentages section to understand PercentDenominator role.
MinValidatorStake
MinValidatorStake has type uint64 and it's the minimum amount of funds required to become a validator. The following constraints apply:
MinValidatorStakemust be larger than zeroMinValidatorStakemust be smaller or equal toInitialSupply
MaxValidatorStake
MaxValidatorStake has type uint64 and it's the maximum amount of funds a single validator can be allocated, including delegated funds. The following constraints apply:
MaxValidatorStakemust be larger or equal toMinValidatorStakeMaxValidatorStakemust be smaller or equal toMaximumSupply
MinStakeDuration
MinStakeDuration has type uint32 and it's the minimum number of seconds a staker can stake for. The following constraints apply:
MinStakeDurationmust be larger than zero.
MaxStakeDuration
MaxStakeDuration has type uint32 and it's the maximum number of seconds a staker can stake for. The following constraints apply:
MaxStakeDurationmust be larger or equal toMinStakeDuration.MaxStakeDurationmust be smaller or equal toGlobalMaxStakeDuration.
GlobalMaxStakeDuration is defined in genesis and applies to both the Primary Network and all Avalanche L1s.
Its Mainnet value is .
MinDelegationFee
MinDelegationFee has type uint32 and it's the minimum fee rate a delegator must pay to its validator for delegating. MinDelegationFee is a percentage; the actual fee is calculated multiplying the fee rate for the delegator reward. The following constraints apply:
MinDelegationFeemust be smaller or equal toPercentDenominator.
The MinDelegationFee rate applies to Primary Network as well. Its Mainnet value is .
MinDelegatorStake
MinDelegatorStake has type uint64 and it's the minimum amount of funds required to become a delegator. The following constraints apply:
MinDelegatorStakemust be larger than zero.
MaxValidatorWeightFactor
MaxValidatorWeightFactor has type uint8 and it's the factor which calculates the maximum amount of delegation a validator can receive. A value of 1 effectively disables delegation. You can find more details about it in the Delegators Weight Checks section. The following constraints apply:
MaxValidatorWeightFactormust be larger than zero.
UptimeRequirement
UptimeRequirement has type uint32 and it's the minimum percentage of its staking time that a validator must be online and responsive for to receive a reward. The following constraints apply:
UptimeRequirementmust be smaller or equalPercentDenominator.
See Notes on Percentages section to understand PercentDenominator role.
Reward Formula
Consider an Elastic Avalanche L1 validator which stakes a amount AssetID for seconds.
Assume that at the start of the staking period there is a amount of AssetID in the Avalanche L1. The maximum amount of Avalanche L1 asset is AssetID.
Then at the end of its staking period, a responsive Elastic Avalanche L1 validator receives a reward calculated as follows:
where,
Note that is the staker's entire staking period, not just the staker's uptime, that is the aggregated time during which the staker has been responsive. The uptime comes into play only to decide whether a staker should be rewarded; to calculate the actual reward only the staking period duration is taken into account.
is the rate at which the validator is rewarded based on selection.
and bound :
The larger is, the closer is to . The smaller is, the closer is to .
A staker achieves the maximum reward for its stake if = . The reward is:
Note that this formula is the same as the reward formula at the top of this section because = .
The reward formula above is used in the Primary Network to calculate stakers reward. For reference, you can find Primary network parameters in the section below.
Delegators Weight Checks
There are bounds set of the maximum amount of delegators' stake that a validator can receive.
The maximum weight a validator can have is:
where and are the Elastic Avalanche L1 Parameters described above.
A delegator won't be added to a validator if the combination of their weights and all other validator's delegators' weight is larger than . Note that this must be true at any point in time.
Note that setting to 1 disables delegation since the .
Notes on Percentages
PercentDenominator = 1_000_000 is the denominator used to calculate percentages.
It allows you to specify percentages up to 4 digital positions. To denominate your percentage in PercentDenominator just multiply it by 10_000. For example:
100%corresponds to100 * 10_000 = 1_000_0001%corresponds to1* 10_000 = 10_0000.02%corresponds to0.002 * 10_000 = 2000.0007%corresponds to0.0007 * 10_000 = 7
Primary Network Parameters on Mainnet
An Elastic Avalanche L1 is free to pick any parameters affecting rewards, within the constraints specified above. For reference we list below Primary Network parameters on Mainnet:
AssetID = AvaxInitialSupply = 240_000_000 AvaxMaximumSupply = 720_000_000 Avax.MinConsumptionRate = 0.10 * reward.PercentDenominator.MaxConsumptionRate = 0.12 * reward.PercentDenominator.Minting Period = 365 * 24 * time.Hour.MinValidatorStake = 2_000 Avax.MaxValidatorStake = 3_000_000 Avax.MinStakeDuration = 2 * 7 * 24 * time.Hour.MaxStakeDuration = 365 * 24 * time.Hour.MinDelegationFee = 20000, that is2%.MinDelegatorStake = 25 Avax.MaxValidatorWeightFactor = 5. This is a platformVM parameter rather than a genesis one, so it's shared across networks.UptimeRequirement = 0.8, that is80%.
Interactive Graph
The graph below demonstrates the reward as a function of the length of time staked. The x-axis depicts as a percentage while the y-axis depicts as a percentage of , the amount of tokens left to be emitted.
Graph variables correspond to those defined above:
h(high) =l(low) =s=
Is this guide helpful?