Part 3: Annotated Specification
The following are just wrappers for more basic types, with an added signature.
class SignedVoluntaryExit(Container): message: VoluntaryExit signature: BLSSignature
A voluntary exit is currently signed with the validator's online signing key.
There has been some discussion about changing this to also allow signing of a voluntary exit with the validator's offline withdrawal key. The introduction of multiple types of withdrawal credential makes this more complex, however, and it is no longer likely to be practical.
class SignedBeaconBlock(Container): message: BeaconBlock signature: BLSSignature
BeaconBlocks are signed by the block proposer and unwrapped for block processing.
This signature is what makes proposing a block "accountable". If two correctly signed conflicting blocks turn up, the signatures guarantee that the same proposer produced them both, and is thus subject to being slashed. This is also why stakers need to closely guard their signing keys.
class SignedBeaconBlockHeader(Container): message: BeaconBlockHeader signature: BLSSignature
This is used only when reporting proposer slashing, within a
Through the magic of SSZ hash tree roots, a valid signature for a
SignedBeaconBlock is also a valid signature for a
SignedBeaconBlockHeader. Proposer slashing makes use of this to save space in slashing reports.