FPC - Opinion communication

A fundamental component of the FPC protocol is the capability to query nodes at random, although potentially with reputation-weight probability. This property increases the resilience against eclipse attacks and splits in the network, since the adversary cannot predict the quorum that the honest node selects.

However, the FPC approach brings also new challenges: due to the randomness in the queries (and also due to a random threshold) the protocol may require many rounds in order to finalize an opinion and, therefore, could require a larger message overhead. Random queries may allow an adversary to overquery nodes. Also a reputation system would naturally lead to overquery for nodes with high reputation. Finally opinion exchange as well as message gossip are asynchronous processes which leads to some challenges. These topics are listed below.

Communication overhead
We want to assess the communication overhead for FPC, since this may pose a bottle neck and decide for which applications it can be employed. Initial calculations show that the message overhead for FPC voting on a large proportion of the txs is less than the gossip overhead for txs (if compression is utilized) as the following spreadsheet shows:

Open questions: How does this compare to CA? Given the constraints in the spreadsheet, for what voting objects is FPC a viable option?

Overquery protection

Gossip of opinion
In a reputation based system (e.g. mana) nodes are selected with a probability proportional to their reputation. Since nodes with a high reputation may be querried excessively, it may be a viable option to allow the “richest” nodes to gossip their opinion instead of being queried.

Open questions: When is it reasonable to gossip an opinion? How can this be rate-controlled? Should there be a randomized middle range, where sometimes some of the nodes can broadcast and what is the advantage of this?

Due to asynchronicity, many nodes may not have seen a particular tx or are aware about a conflict in time and would therefore not have an opinion about it nor want to vote on it. Parts of the nodes would, therefore, effectively be unable to participate in a vote. This would give an adversary an advantage about the decision on a tx for nodes that see the tx early, since the effective adversary proportion is increased. (The adversary can vote 1, where honest nodes would vote 0). Nodes may also receive less responses than k in this case.

Open questions: When queried about an unfamiliar conflict, what should a node reply? Should it reply at all? What are the consequences? Can we wait for C_1 since solidification and reply 0 if its less than C_2 ? If during a voting round most of the votes are “I don’t know this tx”, should we kill the round? What is the threshold and why? Should there be a minimum number of responses to accept a round and would this be attackable?

We could say that (1) nodes should vote no in this case, and then (2) also only list the transactions they say yes for in the response. This prevents an attacker from spamming querries about nonsense transactions.

Sending in the response the identifier of the voting object is (compressed) sth like a 3Byte value. This would be a solution that would only work well if we expect to a large majority no (0s). Assuming the distribution is closer to 50/50 the current implementation of sending an array of {0,1}* is the most efficient way. In the latter approach the order of the bits reflects the requested list.

But maybe we can respond with version-based respones.
v1: list based. sending a bit-mask.
v2: yes-based. sending identifiers of yes’s (if by far most are 0s)
v3: no-based. sending identifiers of no’s (if by far most are 1s)

So would the following be correct: Lets assume voting on conflicts and the case where the conflict is on txs A and B, but only A is yet visible. FPC doesn’t know anything about the conflict itself

Responding 0 on B seems ok if we ignore nonsense-tx-spam attacks, but we do not form an opinion or actively engage in the voting protocol (because after all B may be not related to A whatsoever).
Responding 0 (1) on A if the time is before (after) C is ok if the node only responds but does not form an own opinion or actively engages in the voting protocol. This is because B may not exist after all, may not be a conflict and indeed there may be nothing wrong with A (and B).

Would this work in the CA setting where you have to prove opinion, since we consider a CA+FPC version?

Well in this case, if the node doesnt know about the conflict but the plus c time has elapsed, then the node should vote “yes”. If the plus c time has not elapsed, then it should be an “I dont know”