======== Rust F3 implementation.
flowchart TD
subgraph s1["F3 instance"]
n1["Certificates<br>* verification<br>* creation<br><br>"]
n2["Manifest"]
n4["Cert Xchange<br>*client<br>*server"]
n6["Manifest Xchange"]
n7["Consensus<br>* state machine"]
end
n1 <--> n4
n6 --> n2
n7 <--> n1
n7 --> n8["EC instance"]
n4 <--> n9("Network")
n6 <--> n9
n2 --> n4
n2 --> n7
Pretty much all the other modules of the fast-finality gadget depend on this one. It defines:
- Participation primitives and logic
- Common interfaces and APIs, such as:
- Consensus message validator
- Signature verifier
- Telemetry metrics
- etc
- Consensus statemachine.
F3 configuration
- allows changing f3 configuration at runtime
- updates sent via libp2p
A crucial part of fast-finality that allows for quick finalization of chain prefixes.
This is the first step needed to be able to follow F3 consensus without active participation.
- Allows for requesting finality certificates
- Implements certificate verification logic
A libp2p certificate exchange server.
- fetches requested powertables from storage
- fetches requested certs from storage
- marshals that into CBOR
- sends the response over the network
Where it all comes together
- runs the consensus instance + libp2p exchange
- runs the certificate exchange client/server via libp2p
- manifest provider - f3 config updates via libp2p
- What is a finality certificate?
- A certificate that proves that a given chain prefix is final. It must be signed by a super-majority of a power table.