---
# System prepended metadata

title: Forced Take-out Solutions V2
tags: [Legacy]

---

---
tags: Legacy
---

# Forced Take-out Solutions V2

## Summary

The following is a more refined and improved proposal from the [original](https://hackmd.io/iVhJp2O1QRapWzJLp9pr9g) proposal. The parameters, behavioral actions, policies and mechanisms that would be implemented are described below (at the modular level without specific implementations). As well connections to The Graph and system guarantees are shown below. 

## Parameters


| Name | Description | Type |
| -------- | -------- | -------- |
| grace_period     | The number of days before a call can be made to force withdraw, should be greater than or equal to maximum_of_minimum_staking_time  | Days |
| maximum_of_minimum_staking_time     | The global maximum value for the minimum number of days of staking until slashing will not occur    | Days |


## Behavioral Actions/Prior Actions

### Withdraw Queue

- When withdrawing funds, the only difference will be that the time at which a withdraw was created at will be stored

### Trigger Force Withdraw

- A behavioral action where any user forces the process of force withdraw

## Policies

### Withdraw Waterfall

- This policy is a loop which starts at the tip of the queue and triggers the force withdraw policy for each of the withdraw queue objects that are past <code>grace_period</code>
- Once it reaches an object that has a delta time less than <code>grace_period</code> it terminates

### Force Withdraw Policy

- This policy deals with which streams are force withdrawn from
- It triggers the mechanisms to unstake from streams and pay out delegators
- One way to do it is to withdraw from the oldest stream
- Another option for allowing who triggers the action to have the ability to chose which one

## Mechanisms

### Force Stream Withdraw

- The mechanism which forces an unstaking on a stream

### Pay off Debt

- The mechanism which transfers unstaked DATA to delegators to pay off debts


## Connections to the Graph
- When a delegator decides to leave an indexer their stake becomes `Unstaked`, which is a purgatory state. `Unstaked` tokens are not eligible for rewards and may not be withdrawn by the delegator until the lockup period expires. The lockup period allows the indexer to clear its allocations. The indexer's available total stake (self stake + delegated) is reduced for the next round of its allocations.
- A major drawback to this mechanism is that delegators feel locked into their chosen indexer. If the indexer is underperforming, the alternative indexer to delegate to must be not just performing better, but enough to overcome the lost rewards during the lockup period.
- The lockup period is set to match the longest period of time an indexer can have their allocation locked up, thus guaranteeing that the requested withdraw amount will be available.
- Indexers do not have to keep their allocations for the full length of time. In fact, many close their allocations much more frequently in order to collect the rewards.

## System Guarantees
1. Delegators are able to get back their funds at a maximum time of the <code>grace_period</code>
2. Brokers are able to choose which streams to unstake from as long as it is before <code>grace_period</code>
3. The withdraw queue keeps the ordering the same no matter what of who gets paid out

## Path to Implementation

1. Come to consensus on this proposal
2. Update mathematical specification with new features
3. Update and work out example scenarios
4. Update and re-run the cadCAD model for validation