How does Parity's Aura consensus protocol work?
Asked Answered
H

1

15

Here it's a very high level description with only formulas. I want to understand actually how it works.

I don't actually understand what a step is and what's it's use? Does a node always keep updating the step? And when time to create to create and broadcast a block comes it will take the current step value and check if he should broadcast or not.

What do you mean by "Blocks from more than 1 step into the future are rejected."? Does this mean that if block time is 5 seconds then the next block timestamp should be exactly 5 seconds higher.

And also what happens when the next primary doesn't broadcast? How does the network deal with it? All the next blocks should get invalidated right because they won't follow a timestamp difference of 5 seconds.

Hord answered 18/4, 2017 at 6:55 Comment(1)
The link in the question is not working.Uriah
M
20

AuRa is the name for Parity's Proof-of-Authority (PoA) consensus engine, the name originally comes from Authority Round (used to be AuRo). It's used in the Kovan network.

PoA networks are permissioned not public by design. Only strictly defined authority nodes are allowed to seal blocks. This is very useful for test networks or enterprise networks where the native tokens on the blockchain are not holding any value and therefore would be easy to attack in a Proof-of-Work (PoW) or Proof-of-Stake (PoS) environment.

A step is one part of the authority round. Each authority can seal one block in each round. Let's say we have five authorities: 0x0a .. 0x0e. These would be the steps, as defined in the chain specification or in the dynamic validator contract:

  1. Step 1: 0x0a seals a block
  2. Step 2: 0x0b seals a block
  3. Step 3: 0x0c seals a block
  4. Step 4: 0x0d seals a block
  5. Step 5: 0x0e seals a block

After the round is finished, it starts over again.

What do you mean by "Blocks from more than 1 step into the future are rejected."?

Now if The node 0x0c would try to seal a block right after 0x0a, then this block would be more than 1 step into the future. The block sealing strickly relies on the block step order of all authorities.

And also what happens when the next primary doesn't broadcast?

That's no problem, there will be a gap between two blocks, i.e., doubled block time. So if 0x0c notices that 0x0b is not providing a block in the specified time window, it can override this step with its own block and the round goes on. There are certain tolerances on the block timestamps to make sure the network does not stall.

Kovan Stats Screenshot

In this screenshot above, you can see that two authorities in the Kovan network are not sealing blocks. The result is an increased block time between these steps.

Disclosure: I work for Parity.

Merat answered 8/2, 2018 at 9:2 Comment(5)
Why have you guys changed the block header structure in AuRa implementation? Actually, i have worked on AuRa implementation in geth and try to connect with parity AuRa but i have faced issue to connect.Friedlander
I'm sorry. AuRa was always a moving target and never really specified. The Parity Ethereum client is no longer maintained and AuRa can be safely declared dead.Merat
As far as I understand, AuRa assumes a synchronous network. What happens in the (very) likely case when this assumption does not hold. Can safety be compromised with less than n/2 faulty validators?Socialism
@Afr does Auro not still exist in OpenEthereum?Rysler
so there are no pre-prepare, prepare, commit rounds like PBFT? they automatically sign verify and commit?Phocis

© 2022 - 2024 — McMap. All rights reserved.