Callisto Network Cold Staking Protocol
Cold staking is a protocol that rewards long-term coin holders for holding their coins.
Cold Staking is not related to Proof of Stake, nor is it a consensus mechanism. Cold stakers have no rights in generating blocks or confirming transactions. They just receive interest for holding their coins.
Callisto sold staking protocol is written in Solidity, a smart-contracts programming language. The source code can be found here. The cold staking contract continuously receives a percentage of CLO mining rewards and distributes it to cold stakers in proportion to their stake.
Due to smart-contract limitations, on-chain real-time computations are impossible. As a result, each individual staker’s reward is calculated at the time of reward claiming.
The following set of rules determines the workflow of the cold staking contract:
- The contract allows any CLO address to become a cold staker by depositing CLO.
- After an address owner has deposited CLO into the staking contract, the funds are locked for a period of time (approximately 1 month).
- The cold staker cannot access their funds during the locking period. After the locking period has expired, the cold staker can withdraw their stake AND their reward at any time.
- The longer a staker “stakes” their CLO, the higher the reward is. For example, someone who stakes their coins for 2 months will receive approximately 2x the reward than if they had staked their coins for 1 month. NOTE: the minimum period of time for the staking contract is 1 month, claiming can only take place after this period.
- After the locking period that has passed, a cold staker can do one of two things: (1) claim the reward and continue staking, thus locking their funds for another month, or (2) claim the reward and withdraw their stake.
- The more active stakers that are currently “staking”, the less the staking reward is and vice versa.
- If a staker is inactive for a certain period of time (approximately 1 year), then they are considered to be inactive and are removed from the staking contract. In this case, the inactive stake is returned to the original staker’s address. The staking reward is not paid for inactive stakers.
- A staker MUST NOT deposit funds into the staking contract during the locking period. Depositing funds during the locking period will restart the locking period and staking contract.
- Each staker can independently claim their reward at any time after the locking period. The staking reward depends on the amount of CLO that is currently in the cold staking contract. As a result, each staker’s reward depends on other stakers’ claims. We rely on the assumption that with a high distribution of claims over time, cold stakers have a high probability of receiving a reward close to the anticipated value.
- There is no minimum staking amount. However, making a deposit to the staking contract and claiming the reward requires transaction fees to be paid. Staking with a very small deposit may not cover your transaction fees.
- A cold staker can only stake with their own CLO address. It isn’t possible to send rewards to someone else’s address or grant someone permission to claim a reward on your behalf.
- A cold staker does not need to run a node to stake. They only need to invoke the staking contract twice: make a deposit and claim the reward. The ClassicEtherWallet is sufficient for this procedure.
The following formula determines the staking reward:
- staking pool is the balance of the staking contract at the time of reward claiming.
- current block is the transaction block number.
- init block is the block number at which the staker made their deposit.
- round interval is the duration of the locking period (in blocks, default = 172,800)
- staker weight is the staker’s deposit.
- network weight is the total sum of active staking balances.
The First Stake
Since cold staking wasn’t active at the time of the mainnet launch, the staking reward will be increased significantly for early stakers. There is a Staking Reserve address at Callisto. This address contains CLO for staking during the initial phase.
Once the cold staking protocol has been launched, the funds from the staking reserve will be deposited into the staking contract, thereby increasing the size of the staking pool (i.e. reward of each staker) for the first 3 months after planned hardfork #1.
The following allocation of staking reserve funds have been set aside for deployment:
- 60% of staking reserve funds deployed during the first month of staking (scheduled for November 11, 2018)
- 20% of staking reserve funds deployed during the second month (scheduled for December 11, 2018)
- 20% of staking reserve funds deployed during the third month (scheduled for January 15, 2019)
The normal average staking reward pool is 20,736,000 CLO/month.
Staking reserve funds will add approximately 76,242,600 CLO to the staking reward pool during the first three months of staking.
(For simplification, assume that the staking reward pool is 100 CLO/day or 3,000 CLO/month. However, the actual staking reward pool is 20,736,000 CLO/month).
Staker_1 deposits 1,000 CLO into the staking contract. Then staker_2 deposits 4,000 CLO into the staking contract. As time passes, CLO is added to the staking contract (in increments of 100 CLO each day).
After 1 month, staker_2 claims his reward. (current block — init block/round interval) = 1 in this case (because 1 month = 172,800 blocks). Staker_2 receives 3,000 * 1 * 4,000/5,000 = 2,400 CLO. 600 CLO remains in the staking contract.
Staker_1 has two options: claim the reward OR wait for better circumstances. If they decide to claim, then the reward will be 600 * 1,000/5,000 = 120 CLO which is not even close to the expected amount. In this case, staker_1 should wait a bit longer. Staker_2 cannot claim the reward within the next 30 days, due to their locking period after the last claim.
After 29 days, the staking contract has a CLO balance of 600 + 29 * 100 = 3,500. (current block — init block/round interval) = 2 for Staker_1 because they haven’t claimed the reward for 2 months. Staker_1 now claims 3,500 * 2 * (1,000/(5,000+1,000)) = 1,166.6 CLO.
Staker_1 => 1,000 CLO; Staker_2 => 1,000 CLO; Staker_3 => 8,000 CLO;
Stakers deposit their CLO, thus initializing their stake.
30 days: Staker_2 claims 0.1 * 3,000 = 300 CLO (2,700 remaining in the staking contract). Then, Staker_3 claims 0.8 * 2,700 = 2,160 CLO (540 remaining).
60 days: Staker_2 claims 0.1 * 3,540 = 354 CLO (total amount of coins claimed by Staker_2 is now 654 CLO). Staker_3 claims 0.8 * 3,186 = 2,548 CLO. Then, Staker_3 withdraws their stake. Now the total network weight decreases.
75 days: (current block — init block/round interval) = 2.5 for Staker_1. Staker_1 claims 0.5 * 2.5 * (1,000/(2,000+1,500)) = 1,875 CLO. (261 CLO remain in the staking contract).
90 days: Staker_2 claims 0.5 * 1 * 1,761 = 881 CLO. The total amount of coins claimed by Staker_2 is now 654 + 881 = 1,535 CLO, which is still less than the amount of CLO claimed by Staker_1 in 75 days.
Notice: Cold Staking will be implemented after the first hardfork, which is scheduled for November 11th, 2018. We have been informed of several fraudulent attempts to get users to transfer their coins – these are scams and just to reiterate, the cold staking protocol is not currently active.