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 therefore 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.
class SignedBLSToExecutionChange(Container): message: BLSToExecutionChange signature: BLSSignature
A message requesting a change from BLS withdrawal credentials to Eth1 withdrawal credentials.
Uniquely, this message is signed with the validator's withdrawal key rather than its usual signing key. Only validators that made deposits with
0x00 BLS credentials have a withdrawal key, and it will usually be different from the signing key (although it may be derived from the same mnemonic).