The purpose of the activity streak program is to reward loyal, active traders with the following tiered benefits:
- a greater share of rewards schemes
- an accelerated vesting rate on locked rewards
Parties access higher tiers and greater benefits by maintaining an activity streak. The length of a streak is measured in epochs and a party is considered active if they made a trade or held an open position during the epoch. If a party is inactive for more than a specified number of epochs they lose their streak.
rewards.activityStreak.benefitTiers
: is an ordered list of dictionaries defining the requirements and benefits for each tier.rewards.activityStreak.inactivityLimit
: the maximum number of epochs a trader can be inactive before loosing their streak.rewards.activityStreak.minQuantumOpenNotionalVolume
: the minimum open notional volume (expressed in quantum) for a trader to be considered active in an epochrewards.activityStreak.minQuantumTradeVolume
: the minimum trade volume (expressed in quantum) for a trader to be considered active in an epoch
The network parameter rewards.activityStreak.benefitTiers
can be updated via a UpdateNetworkParameter
governance proposal. Each tier in the ordered list must have the following fields:
minimum_activity_streak
: int greater or equal to0
defining the minimum activity streak a party must have to access this tierreward_multiplier
: float greater or equal to1
defining the factor to scale a parties reward shares byvesting_multiplier
: float greater or equal to1
defining the factor to scale a parties base vesting rate by
Example:
message UpdateNetworkParameter{
changes: NetworkParameter{
key: "rewards.activityStreak.benefitTiers",
value: [
{"minimum_activity_streak": 1, "reward_multiplier": 1.0, "vesting_multiplier": 1.05},
{"minimum_activity_streak": 7, "reward_multiplier": 5.0, "vesting_multiplier": 1.25},
{"minimum_activity_streak": 31, "reward_multiplier": 10.0, "vesting_multiplier": 1.50},
{"minimum_activity_streak": 365, "reward_multiplier": 20.0, "vesting_multiplier": 2.00},
],
}
}
The following steps should occur before rewards are [distributed] and [vested].
For the feature, the network must track each parties "activity streak". At the end of an epoch:
-
if a party was "active" in the epoch
- increment their
activity_streak
by1
- reset their
inactivity_streak
to0
.
- increment their
-
if a party was "inactive" in the epoch
- increment their
inactivity_streak
streak by1
- if their
inactivity_streak
is greater than or equal to therewards.activityStreak.inactivityLimit
, reset theiractivity_streak
to0
.
- increment their
A party is defined as active if they fulfil either of the following criteria:
- their open interest was strictly greater than
rewards.activityStreak.minQuantumOpenNotionalVolume
at any point in the epoch - their total trade volume was strictly greater than
rewards.activityStreak.minQuantumTradeVolume
at the end of the epoch
After determining a parties "activity streak" there reward_distribution_activity_multiplier
and reward_vesting_activity_multiplier
should be set according to the highest tier they qualify for.
Given:
rewards.activityStreak.benefitTiers: [
[
{"minimum_activity_streak": 1, "reward_multiplier": 1.0, "vesting_multiplier": 1.05},
{"minimum_activity_streak": 7, "reward_multiplier": 5.0, "vesting_multiplier": 1.25},
{"minimum_activity_streak": 31, "reward_multiplier": 10.0, "vesting_multiplier": 1.50},
{"minimum_activity_streak": 365, "reward_multiplier": 20.0, "vesting_multiplier": 2.00},
],
]
And:
activity_streak=48
inactivity_streak=3
Then:
reward_distribution_activity_multiplier=10.0
reward_vesting_activity_multiplier=1.50
The activity_streak_reward_multiplier
scales the parties reward share for all rewards they are eligible for.
The activity_streak_vesting_multiplier
scales the parties vesting rate of all funds locked in the parties vesting accounts.
Must expose the following:
- a parties
activity_streak
- a parties
inactivity_streak
- whether a party has been considered "active" in the current epoch
- a parties current
reward_distribution_activity_multiplier
- a parties current
reward_vesting_activity_multiplier
-
If any of the following network parameters are updated, the new values will be used when distributing or vesting rewards at the end of the current epoch:
rewards.activityStreak.inactivityLimit
(0086-ASPR-001)rewards.activityStreak.minQuantumOpenNotionalVolume
(0086-ASPR-002)rewards.activityStreak.minQuantumTradeVolume
(0086-ASPR-003)
-
At the end of an epoch, before rewards are distributed, a parties activity steak is incremented if they fulfil either of the following conditions:
- their notional open volume summed across all markets (in quantum) was strictly greater than
rewards.activityStreak.minQuantumOpenNotionalVolume
at any point in the epoch. (0086-ASPR-004) - their notional trade volume summed across all markets (in quantum) was strictly greater than
rewards.activityStreak.minQuantumTradeVolume
at the end of the epoch. (0086-ASPR-005)
- their notional open volume summed across all markets (in quantum) was strictly greater than
-
At the end of an epoch, before rewards are distributed, if a party was deemed active then their
inactivity_streak
should be reset to0
. -
At the end of an epoch, before rewards are distributed, a parties inactivity streak is incremented if they fulfil both of the following conditions: (0086-ASPR-006)
- their notional open volume summed across all markets (in quantum) was less than
rewards.activityStreak.minQuantumOpenNotionalVolume
at any point in the epoch. - their notional trade volume summed across all markets (in quantum) was less than
rewards.activityStreak.minQuantumTradeVolume
at the end of the epoch.
- their notional open volume summed across all markets (in quantum) was less than
-
At the end of an epoch if a party was deemed inactive and after incrementing their
inactivity_streak
it is greater thanrewards.activityStreak.inactivityLimit
then theiractivity_streak
should be reset to0
. (0086-ASPR-007)
- At the end of the epoch, before rewards are distributed, the parties
reward_distribution_activity_multiplier
should be set equal to the value in the highest tier where their activity streak is greater or equal than theminimum_activity_streak
. (0086-ASPR-008) - At the end of the epoch, before rewards are distributed, the parties
reward_vesting_activity_multiplier
should be set equal to the value in the highest tier where theiractivity_streak
is greater or equal than theminimum_activity_streak
. (0086-ASPR-009) - Assuming all parties perform equally, a party with a greater
reward_distribution_activity_multiplier
should receive a larger share of a reward pool. (0086-ASPR-010)