---
# System prepended metadata

title: Forced Take-out Example Scenario V2/Final
tags: [Spec-Revenue-Sharing]

---

---
tags: Spec-Revenue-Sharing
---

# Forced Take-out Example Scenario V2/Final

NOTE: All token values were multiplied by 10, to make them past the minimum stake of 65. Test still works fine. TODO: change them into this doc?

The following scenario works through the primary features of the forced take out mechanism.

## Start

<b>State:</b>
Delegator 1: 10 Pool Tokens, 0 Data
Delegator 2: 10 Pool Tokens, 0 Data
Delegator 3: 10 Pool Tokens, 0 Data
Broker Pool: 30 Pool Value, 0 Free Funds, 20 Staked on Stream 1 + 10 Staked on Stream 2
Withdraw Queue: Empty
t: 0

<b>Parameters</b>

grace_period: 30 Days


## Delegator 1 Puts All Tokens in Withdraw Queue at t = 0

<b>State:</b>
Delegator 1: 10 Pool Tokens, 0 Data
Delegator 2: 10 Pool Tokens, 0 Data
Delegator 3: 10 Pool Tokens, 0 Data
Broker Pool: 30 Pool Value, 0 Free Funds, 20 Staked on Stream 1 + 10 Staked on Stream 2
Withdraw Queue: [(Address = Delegator 1 Address, Tokens =10 Pool Tokens, t=0)]
t: 0

## Delegator 2 Puts 10 Tokens in Withdraw Queue at t = 5

<b>State:</b>
Delegator 1: 10 Pool Tokens, 0 Data
Delegator 2: 10 Pool Tokens, 0 Data
Delegator 3: 10 Pool Tokens, 0 Data
Broker Pool: 30 Pool Value, 0 Free Funds, 20 Staked on Stream 1 + 10 Staked on Stream 2
Withdraw Queue: [(Address = Delegator 1 Address, Tokens =10 Pool Tokens, t=0),(Address = Delegator 2 Address, Tokens =10 Pool Tokens, t=5)]
t: 5

## Delegator 1 Calls Force Withdraw at t = 29, with stream 1 as the target

Revenue earning is called and no revenue is there so nothing happens.

Then the top of the withdraw queue is checked and it has t = 0. Since 29 - 0 < grace_period = 30, nothing happens and it terminates.

<b>State:</b>
Delegator 1: 10 Pool Tokens, 0 Data
Delegator 2: 10 Pool Tokens, 0 Data
Delegator 3: 10 Pool Tokens, 0 Data
Broker Pool: 30 Pool Value, 0 Free Funds, 20 Staked on Stream 1 + 10 Staked on Stream 2
Withdraw Queue: [(Address = Delegator 1 Address, Tokens =10 Pool Tokens, t=0),(Address = Delegator 2 Address, Tokens =10 Pool Tokens, t=5)]
t: 6

## Broker Unstakes 5 DATA from Stream 1 at t = 29

The broker unstakes 5 DATA which immediately goes to paying off 5 of the tokens (1 to 1 exchange rate here). The values are changed for delegator 1, broker pool, and the first withdraw queue item

<b>State:</b>
Delegator 1: 5 Pool Tokens, 5 Data
Delegator 2: 10 Pool Tokens, 0 Data
Delegator 3: 10 Pool Tokens, 0 Data
Broker Pool: 25 Pool Value, 0 Free Funds, 15 Staked on Stream 1 + 10 Staked on Stream 2
Withdraw Queue: [(Address = Delegator 1 Address, Tokens = 5 Pool Tokens, t=0),(Address = Delegator 2 Address, Tokens =10 Pool Tokens, t=5)]
t: 6

## Delegator 2 Calls Force Withdraw on Stream 1 at t = 31

Revenue earning is called and no revenue is there so nothing happens.

Then the top of the withdraw queue is checked and it has t = 0. Since 31 - 0 > grace_period = 30, the stream is liquidated and 15 DATA is now free to pay off with withdraw queue.

First 5 DATA pays off the withdraw queue item for delegator 1. However, 10 DATA is left over. <b>Even though the queue item for delegator 2 is not older than 7 days, this 10 DATA is used to pay it off. This represents an attack vector because the 5 DATA stream would have sufficed.</b>

<b>State:</b>
Delegator 1: 0 Pool Tokens, 10 Data
Delegator 2: 0 Pool Tokens, 10 Data
Delegator 3: 10 Pool Tokens, 0 Data
Broker Pool: 10 Pool Value, 0 Free Funds, 0 Staked on Stream 1 + 10 Staked on Stream 2
Withdraw Queue: []
t: 8