During yesterday’s dev sync we came to discuss an issue with the way we limit voting for blocks based on tick height.
The original concern came from Dmitry, when NJ mentioned that he’s using his self-hosted PoET, that’s ~4x as fast as the cloud hosted one and not available to other smeshers, on the testnet. Dmitry worried that this would cause other smeshers on the testnet to not be able to vote on blocks anymore, due to our rule preventing smeshers from voting on blocks in their future.
Currently this is not happening, as far as we know. This is probably because he publishes his ATXs around the same time as everyone else, so other nodes are picking his ATXs as positioning ATXs. This is due to logic in the node for picking the highest ATX.
Kimmy then raised the concern that if he happened to publish his ATXs after everyone already submitted challenges to the PoET, they wouldn’t be able to use him for positioning, causing their ATXs to have lower tick heights than his positioning ATX (his own previous ATX).
This would mean that any block for which he contributed a proposal would be “in the future” for all other smeshers and they wouldn’t be able to vote for (or against) it. We use the highest positioning ATX height of all contributors to a block as the block height.
This initially seemed to only be a problem if someone has a private PoET that’s more than twice as fast as any publicly available PoET and ATXs using it are published late in the epoch. However, Piers highlighted that, even with a PoET that’s just slightly faster, this attack can be achieved, if the attacker keeps their ATXs private, using them for positioning and only publishing the chain of ATXs when they have a positioning ATX that’s ahead in tick height than all other smeshers’ current ATX.
Proposed Solutions
Using the Median Height of Proposals for a Block
The set of proposals that are integrated into a block are randomly sampled from the population of smeshers. If a smesher controls a small part of weight they won’t be able to contribute half the weight to a block with non-negligible probability. By considering the median (per unit of weight) proposal’s base tick height (the height of its positioning ATX) as the block’s height, we make it considerably less likely for an attacker, who doesn’t control a majority of the weight, to block honest smeshers from voting on a block.
This should be trivial to implement.
Preventing Voting for Future Proposals in Hare
The issue arises from the selective application of the rule to “prevent voting on future messages”. We apply it to ballots applying an opinion on blocks, but not Hare participants voting for proposals. This means honest participants would aid an attacker causing a block to have a future height, that those same honest participants then won’t be able to vote for.
By preventing Hare participants from voting on proposals that are in their future, we would prevent the highest included proposal from being in the future for a majority of Hare participants. Since the Hare committee is guaranteed to have an honest majority (with probability 1-2^{-40}), it prevents a dishonest smesher from carrying out this attack, under our assumptions.
The rule would be implemented similarly to blocks: we compare a proposal author’s base tick height (height of its positioning ATX) with the voter’s actual height. If the voter’s actual height is greater than the proposal’s base height - they can vote for it in Hare. In other words, if a proposal doesn’t have f+1-k supporters in the Hare with a tick height greater than it’s base height, it’s not considered validated by the Hare, its transactions won’t be incorporated into the block and the smesher will not receive a reward.
Further Discussion
Lane raised the issue that someone with a faster PoET would also have a greater weight than their space would normally get, but I don’t consider this a problem, since our definition of “no more than ⅓ dishonest” refers to weight. So, yes, an adversary could invest in making a faster PoET so they need less than a ⅓ of space for an attack, but this is not necessarily cheaper, easier or new. This would affect our assumptions anywhere in the protocol and not just for this new attack.
I’m not saying it’s not true or not dangerous, only that it’s orthogonal.
My proposed mitigations mean that an attacker controlling a PoET 2x the speed of public PoETs would still need to control >⅙ of space to carry out an attack (like before we discovered this issue).