# An Option for Rewards ###### tags: option *This is the third article of the series. The [first](https://hackmd.io/ZyLNUMd7RTSMzGUEc5QmEg) article describes the pricing approach to our option protocol and [second](https://hackmd.io/5uXL-HC3SDe0yWhYC76CTQ) article explains how our options are made to be fungible and therefore feasible to be traded in a secondary market* The previous articles have seen us briefly discussed about liquidity and the ERC721 that accounts for the share of the pool. Refer [here](https://hackmd.io/5uXL-HC3SDe0yWhYC76CTQ#Universal-pool) for a refresher. In this one, we will discuss about how to be a liquidity provider, its associate risk and what is to gain from being a liquidity provider. ## What is liquidity and why is it important Each option that are sold will be backed by a collateral. This ensures that in the event of profit, the pool will always have funds to reward the option buyer. The fund comes from the liqudity of the pool. The greater the amount of fund, more options can be sold which translates to more premium can be earned by the pool. ## Risk and Reward Liquidity providers act as the underwriter of the option and will pay out profit the options that expire ITM. In return for the risk that they undertake, liquidity providers will be able to guarentee an earning in the form of option premium that option buyers have to pay. The premiums are automatically be reinvested back to the pool and liquidity providers with a bigger share in the pool will be entitled to a bigger chunk of the premium. A thing to note is that in the event that an option is exercised ITM, liquidity providers will find that their share will now represent a lower amount as some of the funds have been used to pay out as profit. For more technical readers, to provide liquidity to the pool, you will need to call the `provideFrom` function, specifying how much liquidity you wish to provide in `amount` and how much of share you would expect to get in `minShare` ``` function provideFrom( address account, uint256 amount, uint256 minShare ) ``` ## More Rewards An additional reward program will be introduced to bootstrap the option protocol. All providers that participate will gain a proportionate amount of block reward. Here is how it is going to work. A constant amount of token is dripped into the reward pool and this is determined by the protocol admin prior to the campaign. The reward is split among all liquidity providers in accordance to the share of their pool in that block. i.e. Say 1 WETH is dripped into the reward pool per block. Alice has provided 7 WETH as liquidity. Bob has provided 3 WETH as liquidty. The reward per block by Alice is 0.7 WETH and Bob is 0.3 WETH. All liquidity providers are able to claim their tokens any time by calling a seperate `claimReward` function in the reward pool contract. ``` function claimReward(address recipient) ``` ## Lowered Risk To lower the risk of liquidity providers from being exercised upon, our option protocol will introduce a Payout pool. The payout pool will pay out a portion of the profit of the option exerciser, thereby reducing the risk of the liquidity providers. The portion`percentagePayout` in `OptionPool` dictates the percentage of payout by the Payout pool. The payout pool works similarly to the reward pool. A certain amount of token is dripped into the pool per block and the tokens are accumulated over time to form some kind of a protection fund. The accumulated token will be used to pay out part of the profit for the options that expire ITM. A thing to note that in the case where there are not enough accumulated token in the Payout pool, the liquidity provider will need to pay out a larger percentage of the profit than expected. The `leftover` will represent how much of the profit cannot be payed out by the Payout pool due to lack of accumulated funds. ``` solidity if (profit > 0) { if (address(payOutPool) != address(0) && percentagePayout > 0) { uint256 payoutAmount = (profit * percentagePayout) / 1e20; // if payout fail, profit will not be beared by the payout pool try payOutPool.payout(payoutAmount, holder) returns (uint256 leftover) { profit -= payoutAmount + leftover; } catch {} } //snipped ... } ``` ## That's a wrap! Liquidity is needed for the pool to underwrite an option to potential buyers. Doing so may put the funds in the pool at stake. However in return, liquidity provider may be able to gain a profit in the form of option premiums as well as block reward in order to maximize their returns. Our option protocol goes one step further by introducing a Payout pool that aims to absorb part of the loss where options expired ITM, thereby giving more insentives to users to provide liquidity to the option pool. Our next article will give you an overview of how the smart contracts is being structured as well as our plan to push this protocol live. Be sure to check that one out to find out more!