---
# System prepended metadata

title: Questions (8th May)

---

# Questions (8th May)
1. What is the stake fee and why is it being used to buy shares in the active pool? What does this line mean: `- distribute them together with the `active` rewards when this epoch ends// in order to appreciate all shares on the active pool atomically` ?
![](https://hackmd.io/_uploads/S1LPIeI4n.png)
2. The 'add_stake' function indicates that shares are purchased instantly and stake is added to the stake pool and active pool of the delegation pool. Does this stake immediately begin producing rewards, or will rewards only be minted from the following epoch, as the stake is in a 'pending_active' state?
3. The understanding of the flow of rewards distribution we have is: 
   1. The rewards are added to the active pool when synchronisation happens. 
   2. The commission amount is computed commission_amount = rewards * commission_percentage
   3. The left over rewards (after removing the commission amount) is added to the stake of active pool. `total_stake_in_active_pool += (rewards -commission_amount)`
   4. After the addition, shares are bought for the validator with the commission amount.

     Is this understanding accurate? Did we miss out on anything ?

4. Questions on the [PR](https://github.com/aptos-labs/aptos-core/pull/7961) that you have tagged ? 
    1. The current_delegated_staking_pool_balances is giving only the current data and is there any way, we could get the historical data (data of previous epochs) ? 
    2. Using the rewards formula given in the Aptos docs and the formula `shares / total shares * total coins` present in the PR, Can we calculate the total rewards earned by the delegator from a pool till time t using the following formula ? Or are there any edge cases that we are missing out on ?
    ```
      // assuming currBalance only gives (active + pending_inactive stake)
      const currBalance = shares / total shares * total coins 
      
      totalRewardsEarnedByTheDelegator = 
          currBalance - (activePrincipal + pendingInactivePrincipal)
      ```
    
    ![](https://hackmd.io/_uploads/S1Z4bWUVh.png)
    
4. Our requirement of rewards are: 
    1. Reward earned by a delegator per day 
    2. Total Rewards earned by a delegator at time t
    3. Total Rewards that are available to be withdrawn at any time t. 

    The approaches that we thought of using are: 
    1. Tracking the shares, stake of delegators in the active pool at the end of each epoch and get the rewards earned by the end of each epoch and distribute it based on the stake-share ratio of the delegators after removing the commission. But in this approach we need to even track the lockup periods for tracking the inactive stake and that is going to be complex. 
    2. The formula for totalRewardsEarnedByTheDelegator mentioned in the above question would be computed at the end of each epoch and get the rewards earned. We can just subtract the rewards of day d1 from day d2 to get the rewards earned per day.
    
    Can you tell us if these approaches are correct way of populating the data for the requirements? Are we missing any edge cases ? 
    Are there any other approaches that you can think of for populating the data for our requirements ? 
    







<br>
<br>
<br>
<br>
<br>



<br>
<br>
<br>
<br>
<br>



<br>
<br>
<br>
<br>
<br>



















# Old Questions
1. The steps in the flow of delegation pool mentioned in the [github repo](https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/delegation_pool.move#L51) considers that comission percentage of the validator is 0%:  ![](https://i.imgur.com/uOm3qDN.png)
 If the commission percentage of the validator is X%, could you tell us what changes would occur in these calculations? Also, does the validator receive shares of the pool due to the commission?"
 **The commission would be subtracted from the rewards and the operator receives the commission as shares of the pool**
2. Is there a way to get all the delegator addresses of a delegation pool directly, or should we continuously track the events (add_stake, unlock_stake, etc.) to obtain the delegator addresses whose delegation is greater than 0?
**only by indexing the AddStakeEvent and WithdrawStakeEvent and updating the delegators set**
 3. Is there a way to obtain the historical data (data at the end of past epochs) of all the data items returned by this [view function](https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/delegation_pool.move#L321)? 
4. We want to track the rewards earned by all the delegators for each epoch due to their delegation to our delegation pool. One of the approaches that we found is:
    1. Using this [endpoint](https://fullnode.mainnet.aptoslabs.com/v1/accounts/0xff3e9c10dd3781a1e0750a75ae9e5b04133cd7e8ca18b9936ffcf3b2a2538a49/events/0x1::stake::StakePool/distribute_rewards_events?start=0&limit=100), we can find the rewards_amount (which is the reward generated by our pool at all epochs). 
    2. We can get the stakes (in different states) of each delegator at the end of each epoch using the [view function](https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/delegation_pool.move#L321). 
    3. Using the add_stake, unlock_stake, withdraw_stake ...  we can maintain the state of stakes of all the delegators and also the number of shares in the active and pending_inactive states. 
    4. We can obtain the state of the delegations of the delegators at each epoch, as well as the number of shares held by each delegator in the pool and their respective rewards by following steps (2) and (3) and step (1), respectively. With these three pieces of data, we can calculate the amount of reward received by a delegator at the epoch. 
    - The issue we face with this approach is that we can't obtain historical data on the stake states of the delegators, and step 3 may also be a little complex to implement.

    - Do you find any inconsistencies with our approach? And are there any other easier direct or indirect approaches to calculate the rewards awarded to the delegators at each epoch because of their delegation to our pool?

**You can use this formula to calculate rewards: https://aptos.dev/nodes/validator-node/operator/delegation-pool-operations#compute-delegation-pool-rewards-earned**