Cyclical versus dynamic turn taking for applications

Here is an attack vector that dynamic turn taking is vulnerable to which cyclical fixes:

Is an important property to ensure that if state channel participants fund an application, they’re able to ensure no strict subset of the participants can collude to prevent the others from a fair unilateral exit of the channel if they so choose.

Let’s say there is an application where turn taking is implemented dynamically. The function is implemented such that each user can choose who the next turn taker is. Say the participants are A, B, and C. Below see a chain of states where B and C collude by choosing each other each turn.

[0, A] -> [1, B] -> [2, C] -> ... -> [k, B] -> [k+1, C] -> ... (ad infinitum)

Effectively, it is never A’s turn.

If the Outcome of any given state above is constant, say { A: 1, B: 1, C: 1 } then this collusion is effectively griefing A 1 coin at the cost of locking up B and C’s 2 coins.

If cyclical turn taking was used in this scenario then A would have had an opportunity to conclude the channel by exiting (i.e., signing a conclusion state in Nitro Protocol terms) with their 1 coin.

So, what benefit does dynamic turn taking provide?

  1. One benefit is less network overhead. Suppose B and C were not actually colluding, and simply entered into some sub-state of the application where it makes sense for them to interact solely with each other. Then, not having to message A saves them some time in message delays.

  2. Another benefit is reduced reliance on liveness of A. If A went offline, B and C could continue signing state updates and not be effected by A’s lack of liveness. Note that if B and C wanted to close the channel, however, they would need A to come back.

But are these really benefits?

  1. One strategy to get the same network overhead reduction would be to use this [A, B, C] channel to fund a [B, C] channel. Then, B and C would be able to interact with each other without reliance on A until they decide to close that channel and effectively de-fund it “back into” the main [A, B, C] channel.

  2. The above strategy also reduces reliance on A and similarly, since they need A to be online to close anyway, the situation is the same.

So then, what’s the point of dynamic turn taking?

I leave it to discussion…

1 Like