The Marlin Protocol incentivizes relayers to propagate blocks from producers to receivers. Relayers receive 2 types of rewards
- Fee Rewards
- Network Rewards
Receivers pay a subscription fee to subscribe for blocks of an epoch. Subscription fee received from all the receivers is collected into a pot which is divided among the clusters who propagate the chunks in that epoch.
Relayers who deliver the chunk to receivers receive a receipt which is created as follows by the receiver
Receipt = Sig(RelayerAddress + blockHash + chunkIndex, ReceiverPrivKey)
Once the relayer who delivered the chunk receives the receipt, based on the receipt a peg relayer from the same cluster is selected as follows
PegRelayerIndex = Hash(Receipt) mod(N) where N is number of relayers in the cluster
The delivery relayer sends the receipt to the peg relayer for relayer signature on the receipt. This signed receipt is sent back to the delivery relayer. The hash of the signed receipt is calculated to identify the ticket.
Ticket = Hash(Sig(Receipt, PegRelayerPrivKey))
The fee is paid probabilistically such that only some of the tickets received by the relayers which are part of the winning range can claim the fee. Winning range is adjusted to ensure that the number of winning tickets in each epoch are constant. So if the number of redemptions are higher, then the winning range decreases and vice versa.
A portion of the fee claimed by the cluster is paid back to the receiver to ensure that receiver has skin in the game, in case receiver falsely denies receiving a message.
The network reward is an incentive for relayers during the initial phase to participate in the network when the number of subscribers and messages in the network are not high enough to cover the infrastructure costs. These rewards are provided to bootstrap the network and the reward value decreases over time as the organic usage of the network increases and relayers recover increasing higher portion of the costs through fees instead.