# SSV Notes
1. Attester:
a. No preconsensus stage
b. Consensus: broadcasts SSVPartialSignatureMsgType
c. Post Consensus: sends attestation to beacon chain
d. Execute Duty: runs consensus
*Lifecycle*: For each validator expected to happen twice in a epoch (add better explanation)
3. Aggregator:
a. Preconsensus: Wait for Quorum. validate and process signed message. Creates aggregate selection proof. Starts consensus.
b. Consensus: Reaches consensus on a partialSignatureMessage and wraps it in SSVPartialSignatureMsgType. Broadcasts it
c. Post consesnsus: Aggregates sigs and broadcasts to beacon chain
d. Execute Duty: Creates a single signature on slot and broadcast it as SSVPartialSignature Type.
*Lifecycle*: For each validator expected to happen once per epoch (add better explanation)
5. Proposer:
a. Execute Duty: broadcast SSVPartialSignatureMsg that signs the randao
b. PreConsensus:receives the above msg. If there is a valid quorum start consensus
c. Consensus: runs consensus to get the full block to propose
d. Post consensus: reconsturct sigs and submits block to beacon chain
*Lifecyle*:
Expected to happen once per epoch? (add better explanation
7. SyncCommitteeAggregator:
a. Execute Duty: sign SyncAggregatorSelectionData. Send as SSV partial signature
b. PreConsesnus: receives the above msg. If there is a valid quorum get from beacon node the committee subnet ID and contribution. Run Consensus on it.
c. Consesnsus: Wraps signed proof of contribution and sends it.
d. post consensus: reconstructs sigs and submit contribution to beacon chain
9. SyncCommittee:
a. Execute Duty: gets sync committe block root from beacon chain and starts consensus
b. Preconsensus: none
c. Consensus: decides on committe block root
d. postConsensus: Create sync Comittee message and submit to beacon chain
11. ValidatorRegistration:
a. Execute Duty: create a message to be signed for registration. Partially sign it and broadcast to ssv network.
b. PreConsesnsus: Base validation only
c. Consensus:
Sync Messages:
On bootsrap we need to get justified heights from 4 different nodes
While running if we see a higher height from F+1 nodes in our quorum then we go to bootstrap mode.
DKGMsgType exists?
### Consensus Message Strategy
```go
type Message struct {
MsgType MessageType
Height Height // QBFT instance Height
Round Round // QBFT round for which the msg is for
Identifier []byte `ssz-max:"56"` // instance Identifier this msg belongs to
Root [32]byte `ssz-size:"32"`
DataRound Round
RoundChangeJustification [][]byte `ssz-max:"13,65536"` // 2^16
PrepareJustification [][]byte `ssz-max:"13,65536"` // 2^16
}
type SignedMessage struct {
Signature types.Signature `ssz-size:"96"`
Signers []types.OperatorID `ssz-max:"13"`
Message Message // message for which this signature is for
FullData []byte `ssz-max:"4219064"` // 2^22 + 2^15 (see SSV message max size)
}
// SSVMessage is the main message passed within the SSV network, it can contain different types of messages (QBTF, Sync, etc.)
type SSVMessage struct {
MsgType MsgType
MsgID MessageID
Data []byte
}
```
For every message one knows:
1. its ID
1. the operator that sent it
1. the validator that sent it
Assume committee of 4. Input comes from beacon chain to start a duty. We are at round `r` and height `h` and we are synced.