Holy PAL (hPAL)
Staked version of the Paladin Token, that can be locked from 3 months to 2 years to access more bonuses and functionalities.
The Holy Paladin Token (hPAL) represents PAL tokens that are staked in the smart contracts.
hPAL is minted 1:1 with deposited PAL, and can also be withdrawn 1:1. The hPAL token serves as the Governance token for the Paladin DAO (for more info see the Delegation & Voting pages).
All hPAL holders accrue rewards over time, in the form of PAL tokens, that they can claim anytime.
To withdraw their PAL tokens from the hPAL system, users have to wait for a 10 days in a cooldown period, started when the Cooldown system is triggered. After the cooldown period is over, users have a window of 2 days to unstake and withdraw their tokens, after which the window is expired, and the Cooldown system must be started again. Any transfer to an address while in the cooldown period will update the cooldown, and extend the period before the unstake window.
After staking PAL in the hPAL smart contracts, users can then lock their balance (or only part of it), for a period going from 3 months to 2 years, to gain access to more functionalities, and multiply the rewards they accrue from their hPAL balance.
Any hPAL that is locked becomes non-transferable, and cannot be withdrawn before the Lock is expired. Only the "available balance" (the part of the balance that is not locked) can be transferred or withdrawn.
User can, at any time during the Lock, extend the duration (restarting the Lock start time in the process), or increase the amount of hPAL in the Lock (not impacting the Lock duration, and keeping the same Lock start time), or both at the same time.
After the Lock is expired, users can either start a new Lock (with a lesser amount, or a lesser duration), or simply unlock to free their hPAL balance that was locked. They have up to 2 weeks after the expiry of the Lock to do so, after which anyone can kick a user out of its Lock, applying a penalty of the locked balance of the kicked user (penalty is then given to the Kicker). This penalty is currently 1% of the locked balance for each week after the Lock expiry (counting the 2 weeks of unlock window as penalized weeks).
In the smart contract, all users Locks are saved as checkpoints, offering to fetch the user Lock status at a previous block. Only the last Lock of the list is used as the current Lock for a user (if Lock is empty/unlocked/was kicked, a Lock with an amount of 0 will be given).
Locking offers multiple bonus to the user:
- Multiplier on PAL rewards based on the Lock duration, decreasing over the Lock duration
- For Locks over 1 year of duration, 50% bonus voting power
- For Locks over 1 year, access to the Chest system (coming soon ...)
- Bonus on Liquidity Mining campaigns on products of the Paladin ecosystem (coming soon ...)
- Any new functionality built on top of the Lock system in the future ...
The hPAL system distributes PAL rewards to all hPAL holders, accruing over time. Those rewards will start with a distribution of 100,000 PAL shared among holders during the first month, then decrease monthly over a period of 2 years, to end with a distribution of 25,000 PAL per month.
Those rewards are split and distributed considering the Lock Multiplier logic, meaning that for any user simply staking or not having the maximum multiplier, PAL rewards will stay in the Reward Reserve, extending the rewards distribution over the original 2 years.
After the 2 years period, the end monthly distribution amount can be updated by the smart contract admin (through a Governance decision), to reduce, remove, or increase the amount of PAL distributed as rewards.
All hPAL that is simply staked will receive the basic reward distribution amount, but all users that locked hPAL will have a multiplier applied to their rewards for the locked amount (if they only locked half of their hPAL, only half will get a multiplier applied on the rewards accrued, the other half will receive basic rewards).
The multiplier for the Lock is calculated at the Lock creation (or update if the duration and start time were updated), going from a x6 multiplier for a 2 years Lock duration, to a x3 multiplier for 3 months duration. The multiplier then decreases over the Lock duration, to reach x1 at the Lock expiry (after that expiry, if the user did not unlock/re-lock, or was not kicked, the multiplier will keep decreasing, applying a penalty on accrued rewards for the expired locked hPAL).
Here, the multiplier is names BonusRatio (as called in the code).
When the Lock is created/updated, the new startBonusRatio for the Lock is calculated based on the Lock duration:
startBonusRatio = minLockBonusRatio + (((maxLockBonusRatio - minLockBonusRatio) * durationRatio) / UNIT);
((lockDuration - MIN_LOCK_DURATION) * UNIT) / (MAX_LOCK_DURATION - MIN_LOCK_DURATION);
lockDurationid the duration of the new Lock in seconds)
We also calculate how that BonusRatio must decrease over the Lock duration to reach 1 at Lock expiry, using:
userBonusRatioDecrease = (startBonusRatio - baseLockBonusRatio) / lockDuration
When calculating the rewards to accrue an user since last user reward state update, we also update the current BonusRatio for the user, decreasing it based on userBonusRatioDecrease and the amount of time (in seconds) since the last update:
newCurrentBonusRatio = lastBonusRatio - (userBonusRatioDecrease * secondsSinceLastUpdate)
And to calculate how much rewards to accrue to the user since the last update, we calculate a temporary multiplier representing the decrease between the last BonusRatio and the new one, and apply this temporary BonusRatio on the base reward distribution amount.
The temporary BonusRatio is calculated using the formula:
newCurrentBonusRatio + ((userBonusRatioDecrease + (userBonusRatioDecrease * secondsSinceLastUpdate)) / 2);
(This can also be expressed as the formula
: (newCurrentBonusRatio + lastBonusRatio + userBonusRatioDecrease) / 2is added since the new multiplier that was calculated is to be used for the next time, and not be counted for the rewards to be accrued during this update)