--- tags: Spec-Agreements --- # Streamr Policy Options ## Regular Policies Table <table> <tr> <th>Policy</th> <th>Option 1</th> <th>Option 2</th> <th>Option 3</th> </tr> <tr> <td> Allocate </td> <td> <a href="#1.-Equal-Weight">Equal Weight</a> </td> <td> <a href="#2.-Performance/Weight-Based-Allocation">Performance/Weight Based Allocation</a> </td> <td> <a href="#3.-Salary-and-Bonus">Salary and Bonus</a> </td> </tr> <tr> <td> Measure Performance/Weighting </td> <td> <a href="#1.-NULL">NULL</a> </td> <td> <a href="#2.-Oracle-Connection">Oracle Connection</a> </td> <td> <a href="#3.-Stake-Based-Weighting">Stake Based Weighting</a> </td> </tr> <tr> <td> Check Global Penalized Leaving </td> <td> <a href="#1.-Minimum-Funding">Minimum Funding</a> </td> <td> <a href="#2.-Large-Number-of-Brokers">Large Number of Brokers</a> </td> <td> </td> </tr> <tr> <td> Check Local Penalized Leaving </td> <td> <a href="#1.-Minimum-Time">Minimum Time</a> </td> <td> <a href="#2.-Broker-Whitelist-Leaving">Broker Whitelist Leaving</a> </td> <td> </td> </tr> <tr> <td> Check Ability to Join </td> <td> <a href="#1.-Auto-Allow">Auto-Allow</a> </td> <td> <a href="#2.-Broker-and-Stake">Broker and Stake</a> </td> <td> <a href="#3.-Broker-Whitelist">Broker Whitelist</a> </td> </tr> </table> ## Regular Policies Definitions ### Allocate The action which maps the current epochs allocation to different brokers in the system. These inputs are not necessarily all required but rather are all possible needs for different allocation functions. $Allocate(\mathcal{B}, R, s_{i}, p_{i}, n)\rightarrow a_i$ #### 1. Equal Weight Given some pre-determined and constant $\Delta F$, allocate equally each epoch to all brokers. $Allocate(\mathcal{B}, R, s_{i}, p_{i}, n)\rightarrow \frac{\Delta F}{n}$ #### 2. Performance/Weight Based Allocation Given some pre-determined and constant $\Delta F$, allocate the payment based upon each broker's share of total performance/weight. $Allocate(\mathcal{B}, R, s_{i}, p_{i}, n)\rightarrow \frac{\Delta F \cdot p_{i}}{\Sigma p_{j}}$ #### 3. Salary and Bonus Given some pre-determined and constant $\Delta F$, as well as a dynamic bonus allocation $\Delta B$, give the brokers an allocation of a base salary as well as a bonus based on performance/weight $Allocate(\mathcal{B}, R, s_{i}, p_{i}, n)\rightarrow \frac{\Delta F}{n} +\frac{\Delta B \cdot p_{i}}{\Sigma p_{j}}$ ### Measure Performance/Weighting This action maps each broker to a measure of performance. This can also be coming from an oracle but should only be high trust signals to avoid manipulation. Finally, this may also be a policy based on something like stake. $MeasurePerformance(i)\rightarrow p_i$ where $p_i \in [0,1]$ #### 1. NULL Return null for all values (no performance measure used) $MeasurePerformance(i)\rightarrow NULL$ #### 2. Oracle Connection Given some oracle outside of the system, query for each broker's performance metric. $MeasurePerformance(i)\rightarrow ORACLE(i)$ #### 3. Stake Based Weighting Given an amount of stake in each broker, return the percentage of total stake each broker has. $MeasurePerformance(s_i)\rightarrow \frac{s_i}{\Sigma s_{j}}$ ### Check Global Penalized Leaving This action controls the ability of the entire set of brokers to be able to leave with or without penalty on their stake. While individual brokers may be allowed to leave if they satisfy certain requirements, when this returns true all brokers will be able to leave without penalty. $CGPL(R, n)\rightarrow y$ where $y \in {0,1}$ #### 1. Minimum Funding Given some parameter of minimum funding, this function returns true when the funding is below the threshold. $CGPL(R,n)\rightarrow R < R_{min}$ #### 2. Large Number of Brokers When the system is at a point where there are at least $n^*$ brokers, a broker may leave. $CGPL(R, n)\rightarrow n \geq n^*$ ### Check Local Penalized Leaving This action controls the ability of the individual broker to leave without a penalty on stake. One possible example policy would be when a broker has been in the system for a minimum period of time. $CLPL(\lambda_i, a_i, i)\rightarrow y$ where $y \in {0,1}$ #### 1. Minimum Time Given a minimum time in the system, this function will return true when the broker has been in the system for that length of time or longer. $CLPL(\lambda_i, a_i,i)\rightarrow \lambda_i \geq \lambda_{min}$ #### 2. Broker Whitelist Leaving It may be in the best interest of the system to allow for discretionary decisions regarding leaving in the form of a broker whitelist denoted by W. This would return true only if the broker was in this set. $CLPL(\lambda_i, a_i,i)\rightarrow i \in W$ ### Check Ability to Join This action controls the logic of whether or not an individual broker is capable of joining the agreement. $CAJ(n, n_{max}, s_i,i)\rightarrow y$ where $y \in {0,1}$ #### 1. Auto-Allow This function is meant to display a pattern of failure since things like stake would not be considered. No matter what a broker is always allowed to join. $CAJ(n, n_{max}, s_i,i)\rightarrow 1$ #### 2. Broker and Stake Given a maximum number of brokers and minimum stake, the new broker is allowed to join if the current number of brokers is less than the number of maximum brokers and the broker has at least the minimum stake. $CAJ(n, n_{max}, s_i,i)\rightarrow n < n_{max} \text{ AND } s \geq s_{min}$ #### 3. Broker Whitelist Given a whitelist of broker IDs $W$, this function will return true only if a broker ID is part of the set. $CAJ(n, n_{max}, s_i,i)\rightarrow i \in W$