A guide for staking POND and MPOND tokens on Marlin network

If you hold POND or MPOND tokens, then this post will help you in increasing the security of network while earning more MPOND tokens by delegating your tokens to clusters that participate in Marlin network.

In this post we will look at the following

  • How does staking work in Marlin ?
  • What are the rewards for staking ?
  • How should I stake Marlin tokens ?
  • How can I manage my stake ?
  • How can I claim rewards ?
  • How can I run a cluster ?

How does staking work in Marlin ?

Marlin clusters earn rewards by propagating messages in the network. The number of messages propagated by a cluster is based on the amount of stake that is delegated to them. The higher is the stake of the cluster, the more are the messages that cluster receives for propagation. Clusters receives receipts from receivers for propagating the messages. A few of these receipts can be redeemed for rewards. So probabilistically, the more receipts a cluster receives, higher are the rewards for the cluster.

As running a cluster involves infrastructure costs as well as technical expertise, not everyone might be interested in running a cluster. So POND/MPOND token holders can instead delegate their Marlin tokens as stake for the cluster and earn rewards for the stake delegated. As the infrastructure costs are still covered by the cluster, cluster will charge a fee on the rewards received for the delegations. Clusters are free to choose the fee that they will charge on rewards.

A token holder can create a stash of POND/MPOND tokens and delegate the stash to a cluster. We will see how to do that in coming sections.

The list of active clusters will soon be available on our website.

What are the rewards for staking ?

Clusters are rewarded based on the number of receipts they have received after propagating messages. Calculating the rewards for an individual delegator is not straight forward as it depends on the performance of the cluster, amount of stake delegated to them and the fee of the cluster. Rewards after deducting the cluster fee are distributed to the delegators weighted by the stake delegated.

Delegators should be able to see the rewards accumulated by them on staking dashboard on our website.

Note: In the initial stages when receivers are not bootstrapped yet, only receipts from whitelisted receivers are considered for reward distribution to ensure that receiver set is sybil resistant. Eventually once receivers start paying subscription fee, the receiver set will become sybil resistant.

How should I stake Marlin tokens ?

You might want to know how you can take part in staking and earn more tokens while contributing to the network. As discussed before token holders need to create stash where POND/MPOND tokens can be deposited and delegate the stash to clusters.

There are two ways currently to stake tokens. You can either directly interact with our contracts on etherscan or you can use the staking portal on our website that is coming soon.

Below are the steps to delegate stake to a cluster by sending transactions to the contract directly

  1. Allocate POND/MPOND to the StakeManager contract by calling approve(_stakeManagerAddress, _amount) on POND/MPOND contract. If both POND and MPOND are delegated in stash then approve function needs to be called on both MPOND and POND token contract by the address that is creating stash.
  2. Create and allocate stash by calling createStashAndDelegate(_MPONDAmount, _PONDAmount, _cluster) of the StakeManager contract. This will allocate stake to the cluster specified.

How can I manage my stake ?

Once the tokens are delegated as stake to a cluster. Token holder has to undelegate the tokens before withdrawing the stake partially/completely or redelegating to another cluster.

Please note that there is a wait time for the tokens to be undelegated. Once undelegated, token holder has to wait for the specified period during which the tokens are not delegated to cluster and are locked. As tokens are not delegated to the cluster during the wait time they do not earn rewards. Once the undelegation wait time is completed, user is free to withdraw or redelegate the tokens.

Etherscan or the staking portal that is coming up, can be used to manage stake.

Below are the steps to redelegate/withdraw stake to a cluster.

  1. The stash must first be undelegated by calling undelegateStash(_stashId) function of the StakeManager contract from the stash creator address.
  2. Once undelegated, there is a wait time only after which the stash can be withdrawn or redelegated.
  3. Once the wait time is complete, stash can be withdrawn by calling withdrawStash(_stashId, _MPONDAmountToWithdraw, _PONDAmountToWithdraw) function of StakeManager contract.
  4. Post wait time, the stash can be redelegated to other cluster by calling delegateStash(_stashId, _cluster) function of StakeManager contract.

How can I claim rewards ?

Delegators who have delegated stashes to clusters will earn a fraction of the rewards earned by the cluster. We have discussed above how the delegators are rewarded. Rewards earned from the cluster are auto withdrawn to delegator address when delegator delegates or undelegates from the cluster. Alternatively, delegators can claim rewards gained from the cluster by calling withdrawRewards(_delegator, _cluster) of RewardDelegators contract. Cluster fee is auto withdrawn to cluster reward address when any of the delegator claims the rewards from the cluster.

How can I run a cluster ?

Clusters are the most important components of the network and running a cluster is a great way to contribute to the network. A cluster propagates messages to receivers connnected to it and competes with other clusters to propagate the messages and earn rewards. You can know more about running a cluster in our docs here. Once you have setup a cluster and ready to run, cluster can register on smart contract and get enough delegations to become active, post which cluster will be eligible for rewards.

Cluster operator can use upcoming staking portal or Etherscan for registering, unregistering and managing the cluster.

Below are the steps to register and unregister clusters.

  1. Cluster can register by calling register(_commission, _rewardAddress, _clientKey) of ClusterRegistry contract, where commission is the fee that cluster charges for delegations on rewards, _rewardAddress is the address where cluster receives rewards and _clientKey is the key used to operate marlin node. The address from which tx is sent is the cluster operator address.
  2. Cluster can unregister by calling unregister() of ClusterRegistry contract from the cluster operator address.

Contracts

StakeManager - https://github.com/marlinprotocol/Contracts/blob/master/contracts/Stake/StakeManager.sol ClusterRegistry - https://github.com/marlinprotocol/Contracts/blob/master/contracts/Stake/ClusterRegistry.sol RewardDelegators - https://github.com/marlinprotocol/Contracts/blob/master/contracts/Stake/RewardDelegators.sol

If you have any queries please checkout our documentation and we strongly recommend joining our discord to get support from our community, other cluster operators as well as team.